Verilog十大基本功9 (Multicycle Paths)

2023-11-12

来自:http://blog.chinaaet.com/coyoo/p/31979

概述

       Multicycle paths即多周期路径,指的是两个寄存器之间数据要经过多个时钟才能稳定的路径,一般出现于组合逻辑较大的那些路径。在实际工程中,除了乘除法器等少数比较特殊的电路,一般应该尽量避免采用多周期路径电路。即使有所使用,也应该通过约束在综合工具中指出该路径,使得综合工具在计算Fmax的时候忽略这条路径,避免用大量的时间对该路径进行优化。 对多周期路径可加一下约束:set_multicycle_path -from D_reg -to S_reg。

         本文成文之前参考了网上《DC概论之多周期路径》,并使用其中一些例子,这里对作者的辛勤劳作表示感谢。《DC概论之多周期路径》网上链接众多,本人不负责辨认何处为原创,这里只是给出其中一个链接:

http://bbs.ednchina.com/BLOG_ARTICLE_214699.HTM

另外,这里有一个疑似原创出处:http://www.cnblogs.com/liuokay/category/291986.html

 

 

关于何时何处使用Multicycle Path

上述《概论》论述的是IC设计的时候的多周期路径,那么对于FPGA设计特别是ALTERA的FPGA设计的时候何时何处会用到多周期约束呢?其实简单点说就是设计者如何知道自己的设计中哪里需要进行多周期设计的问题。

         在设计中很多地方都有涉及多周期路径,当个两个触发器之间的逻辑如果一个周期执行不完的话一般有两个解决方案:

1、插入流水线使得组合逻辑打散 ;

2、使用使能信号控制,几个周期读取一次数据。

这里面2所使用的方法就需要设定multi-cycle path,方法2和1之间是有区别的。方法1数据的吞吐量更大,方法2牺牲了数据吞吐量,但是设计中有的地方对吞吐量没有要求是可以使用这种方法的。

         举个简单的例子,某个设计大部分逻辑可以跑1G,但有个乘法器只能跑100M, 所以你就把multi-cycle设成10T, 但是design也要修改, 就是每10T才采集一次乘法器的结果。

         在《概论》里详细介绍了所谓的“快采慢”和“慢采快”的两种情况,可以很好理解两个不同寄存器的采样时钟频率不一样时的情形。

 

多周期的分类

         这里有必要交待一下多周期的分类,说到这个分类,有两种。一种就是上述《概论》里提到的快采慢和慢采快,另外一种是Setup多周期和Hold多周期。

         ALTERA其实对于第一种分类是这样描述的,即分为Destination和Source。Destination是基于目标时钟沿,向后移动Latch时钟沿来放松建立保持时间。而Source约束是基于源时钟沿,通过向前移动Launch时钟沿来放松建立保持时间。Start和end说明多周期路径依赖于start clock还是依赖于end clock。

         ALTERA关于第二种分法的描述是这样的,即Setup多周期是增加建立时间分析的周期数,默认情况下是1个周期。Hold多周期是增加保持时间分析周期数,默认情况下是0。Setup和Hold说明多周期路径是用在建立时间检查还是用在保持时间检查。

 

具体什么是多周期路径约束呢?

时序分析器会分析除了定义为false path的所有路径。所有的路径都是在最近的沿分析setup,在最近的沿的前一个沿分析hold。 设置为multicycle 的path会改变分析方法, 比如muticycle 2就是说会在最近的沿的下一个沿分析setup,分析setup的沿的前一个沿分析hold。

具体的多周期路径约束语法如下所示:

set_multicycle_path [-h | -help] [-long_help] [-end] [-fall_from <names>] [-fall_to<names>] [-from <names>] [-hold] [-rise_from <names>] [-rise_to <names>] [-setup] [-start] [-through <names>] [-to <names><value>

-start:选择源(source)多周期

-end:选择目标(destination)多周期(默认)

-setup|hold:指定建立或者保持多周期

<value>:扩展分析的周期数目

其他基本和false path命令基本相同。下面通过几个例子来具体说明如何理解多周期。

1、 标准单周期寄存器传输

 

图1

2、 双周期setup,单周期hold传输

 

图2

那么图2所示的多周期路径约束如下所示:

Set_multicycle_path –from [get_pins reg1|clk] –to [get_pins reg2|datain] –end –setup 2

 

3、 实际应用中经常遇到的乘法器多周期例子

 

图3

前面有介绍,在多周期设置中,Setup的周期是X,那么设置的Hold周期为X-1。所谓的快采慢如图4所示,请注意《概论》中的默认情况和ALTERA的TQ工具里默认情况的异同。概论里提到的工具如果命令没有指明Start和end,那么默认情况下Setup是参照end,而Hold参照start。而ALTERA似乎均默认为end。

 

图4

假设已经知道3*clk1>delay>2*clk1,这时候多周期约束为

set_multicycle_path -setup 3 -end -from clk1 -to clk2
set_multicycle_path -hold 2 -end -from clk1 -to clk2

再来看看“慢采快”,如图5所示

 

图5

假设已经知道3*clk1>delay>2*clk1,这时候多周期约束为

set_multicycle_path -setup 3 -start -from clk1 -to clk2
set_multicycle_path -hold 2 -start -from clk1 -to clk2

    最后再来一个“慢采快”的例子,100MHz时钟分频得到一个50MHz的时钟,那么为从100MHz到50MHz时钟域所有路径加一个源多周期为2,保持多周期为1的约束如下所示:

create_clock -period 10.000 -name CLK [get_ports clk]
create_generated_clock -divide_by 2 -source [get_ports clk] -name CLKDIV2 [get_registers clkdiv]
set_multicycle_path -start -setup -from [get_clocks CLK] -to [get_clocks CLKDIV2] 2
set_multicycle_path -start -hold -from [get_clocks CLK] -to [get_clocks CLKDIV2] 1
 

 

 

实际应用实例

    图6是本人实际工作中设计的一个工程部分示意框图,在全编译之后主要是图中的三个PLL的输出时钟有报告时序问题,在不进行时序约束的时候上板调试是没有遇到什么问题的,只是这么多时序违约报告不知道长时间运行是否稳定,所以有必要仔细分析每一个违约时序报告。

 

 

图6

    这个工程只是对于CLKIN(外部100MHz时钟)和PLL的输出进行约束,如下所示

create_clock -period 10.000 -name refclk -waveform {0 5} [get_ports {refclk}]

create_clock -period 10.000 -name clkin -waveform {0 5} [get_ports {clkin}]

derive_pll_clocks

全编译之后查看TimeQuest的报告图7所示,*pll*clk[0]、*pll*clk[2]和*pll*clk[3]分

 

 

 

图7

别是图6中的100MHz、250MHz和62.5MHz三个时钟我们发现这三个时钟都有报告时序违约,而且250MHz的Fmax报告才不到94MHz。打开TimeQuest分别对这三个时钟的红色报告执行report timing命令并进行分析,图8显示了对于100MHz时钟执行Report Timing后的结果,产生违约的路径的Launch clock是62.5MHz,Latch clock是100MHz,也就是说这些违约路径都是跨时钟域的路径,再分析源代码发现这些路径都是跨时钟传递数据,逻辑设计保证在传递数据的时候能安全传递,即通过握手控制信号保证数据稳定传输,所以这些路径可以认为是false paths。针对这些路径加入false paths约束如下

set_false_path -from [get_clocks {inst|altpll_component|pll|clk[3]}]\ -to [get_clocks {inst|altpll_component|pll|clk[0]}]

再重新编译工程,发现100MHz的时序违约没有了,如图9所示。

 

 

 

图8、对100MHz时序违约路径执行Report Timing命令结果

 

图9、解决*pll|clk[0]即100MHz时序违约

    重新打开TimeQuest,依照从易到难原则,这次解决*pll|clk[3]即62.5MHz时钟时序违约问题。同样执行Report Timing命令我们得到类似图8的报告界面,如图10所示。

 

 

 

图10、对62.5MHz时序违约路径执行Report Timing命令结果

产生违约的路径的Launch clock是100MHz,Latch clock是62.5MHz,也就是说这些违约路径同样都是跨时钟域的路径,再分析源代码发现这些路径都是跨时钟传递的控制信号(图6框图所示),这些100MHz时钟域的控制信号和62.5MHz时钟域被控制的模块是完全异步的关系,所以这些路径可以认为是false paths。针对这些路径加入false paths约束如下

set_false_path -from [get_clocks {inst|altpll_component|pll|clk[0]}]\ -to [get_clocks {inst|altpll_component|pll|clk[3]}]

 

上述false paths命令其实就是前面false paths命令的反向操作,即这两条false paths命令分别“cut”了100MHz和62.5MHz这两个时钟域之间路径的时序分析。再重新编译工程,发现62.5MHz的时序违约没有了,如图11所示。

 

 

 

图11、解决*pll|clk[3]即62.5MHz时序违约

    还剩最后一个,总的slack到-10.586ns,打开TimeQuest并对此违约路径执行Report Timing命令,报告结果如图12所示。

 

 

 

图12、对250MHz时序违约路径执行Report Timing命令结果

由于负slack量很大,所以时序违约也许不止一种情况(实际情况也确实如此),图12所示的报告默认只报告最差的10条。仔细分析图12已经报告出来的这些违约路径,发现跟图8和图10报告的违约路径类似,也都是一些跨时钟域的路径,这里的Launch clock是100MHz,Latch clock是250MHz。也就是说可以把这些路径当作false paths处理,由于本文是论述多周期,所以我想是不是可以通过加入多周期约束来解决这个问题呢?尽管100MHz与250MHz不是整数倍的关系,但是图12时序图看出可以加入一个4周期的end建立多周期约束,同时加入一个3周期的保持多周期来解决这个问题。命令如下所示:

set_multicycle_path -from [get_clocks {inst|altpll_component|pll|clk[0]}] -to [get_clocks {inst|altpll_component|pll|clk[2]}] -end -setup 4

set_multicycle_path -from [get_clocks {inst|altpll_component|pll|clk[0]}] -to [get_clocks {inst|altpll_component|pll|clk[2]}] -end -hold 3

(注:本人不确定多周期是否必须两个时钟必须要是整数倍关系,但根据这个例子似乎不是也可行啊!)

    重新编译工程,发现250MHz还是有时序违约,但是负的slack减少了,如图13所示

 

 

 

图13

打开TimeQuest针对违约路径执行Report Timing命令,得到的报告结果如图14所示

 

 

 

图14

仔细分析图14报告的违约路径,以及时序图,这些违约路径的Launch clock和Latch clock为同一时钟,即250MHz时钟。研究这些违约路径的原始代码发现from node其实是一个计数器的输出,而此计数器的计数频率虽然是250MHz,但是有条件的计数,所以这些路径更适合加多周期约束,这里先使用false paths约束,最后再把图12和图14所示的违约路径分别改成false paths和多周期路径约束。这里先加入的false paths如下所示

set_false_path -from [get_registers {SEP_TDC_7ch:inst13|tdc1ch_won:inst?|TDC1ch2a:TCH0|lpm_counter30:RGZ1|lpm_counter:lpm_counter_component|cntr_rsh:auto_generated|safe_q[*]}] -to [get_clocks {inst|altpll_component|pll|clk[2]}]

    重新编译工程,发现250MHz的时序违约没有了,而它的Fmax也提高到250MHz以上了,如图15所示(注意和图7比较)。

 

 

 

图15

   附1

    前面有提到图12所示的违约路径应该false paths约束,而图14所示的违约路径应该加多周期路径约束。那么首先将图12所示的违约路径修改成false paths约束,约束命令如下,也即Launch clock是100MHz,而Latch clock是250MHz时钟。

set_false_path -from [get_clocks {inst|altpll_component|pll|clk[0]}] -to [get_clocks {inst|altpll_component|pll|clk[2]}]

重新编译后的结果如图16所示。

 

 

 

图16

    上图显示修改成false paths约束后似乎也能解决时序违约问题,对比图15,Fmax似乎跑的更高一些。而图14所示的时序违约路径的约束修改为多周期路径约束并没有成功,不管我如何加多周期约束在FIT的时候都是通不过,提示“Critical Warning (332008): Read_sdc failed due to errors in the SDC file”,也许是多周期语法有错?下面列出我尝试过的命令格式:

第一条:

set_multicycle_path -end -setup –to [get_pins {SEP_TDC_7ch:inst*|tdc1ch_won:inst1|TDC1ch2a:TCH0|lpm_add_sub21:RGT1|lpm_add_sub:lpm_add_sub_component|add_sub_30k:auto_generated|pipeline_dffe[*]}] 3

第二条:

set_multicycle_path -end -setup –to [get_pins {SEP_TDC_7ch:inst13|tdc1ch_won:inst?|TDC1ch2a:TCH0|lpm_counter30:RGZ1|lpm_counter:lpm_counter_component|cntr_rsh:auto_generated|safe_q[*]}] 3

第三条:加上 –from即从时钟到上述PINs也不行。

第四条:将“get_pins”改成“get_cells”以及“get_registers”也不行。

    所以对于图14显示的违约路径还是加false paths来处理。最终工程的时序报告如图16所示。

 

 

 

附2

 

 

 

Multicycles can be specified relative to the source clock (-start) or
destination clock (-end). This is useful when the source clock and
destination clock are operating at different frequencies.  For
example, if the source clock is twice as fast (half period) as the
destination clock, a -start multicycle of 2 is usually required.
 
Hold multicycles (-hold) are computed relative to setup multicycles
(-setup).  The value of the hold multicycle represents the number
clock edges away from the default hold multicycle. The default hold
multicycle value is 0.
 
The -from and -to values are collections of clocks, registers, ports,
pins, or cells in the design. If the -from or -to values are not
specified, the collection is converted automatically into [get_keepers
*].  It is worth noting that if the counterpart of the unspecified
collection is a clock collection, it is more efficient to explicitly
specify this collection as a clock collection but only if the clock
collection also generates the desired assignment.
 
Applying exceptions between clocks applies the exception from all
register or ports driven by the -from clock to all registers or ports
driven by the -to clock.  Also, applying exceptions between a pair of
clocks is more efficient than for specific node to node or node to
clock paths.
 
If pin names or collections are used, the -from value must be a clock
pin and the -to value must be any non-clock input pin to a register.
Assignments from clock pins or to and from cells applies to all
registers in the cell or driven by the clock pin.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Verilog十大基本功9 (Multicycle Paths) 的相关文章

  • condition update在分布式系统中设计

    condition update在分布式系统中设计 1 定义 condition update称为条件更新 用于分布式系统中数据一致性 能够保证在并发操作数据时的正确性 2 方式 1 可以通过version来保证condition upda
  • 解决pgAdmin4启动失败方法

    1 问题现象 有时pgadmin 4启动仅显示启动界面 或者 点击图标一直都没反应 启动界面用鼠标点击下就消失了 然后过很长时间就保错 the application server could not be contect 错误 比如一直出
  • python安装anaconda_安装Anaconda后,python出现import Error

    背景 Win10 VSCode下安装了Python3 6 4和一些package 有的package在site package路径下 在已经安装了Python3 6 4之后 又安装了Anaconda 安装设置都是默认的 Error出现 这时
  • qt控件学习笔记

    QToolBox控件 QToolBox控件 类似于下拉列表控件 头文件 include
  • Jenkins持续集成demo

    1 下载Jenkins的war包 官网地址 https jenkins io 点击下载 将jenkins war 部署到Tomcat中 本文使用的是Tomcat8 5 35 注意Tomcat需要配置账号密码 Tomcat7 是 manage
  • MySQL、Oracle中去重并保留最新的一条数据

    MySQL select from my table where id in select id from select id name group code max create time mt from my table group b
  • IDEA的设置

    terminal wsl2 setting gt tools gt Termianl gt shell path 填写wsl exe的绝对路 绝对路径的查找 wsl2 安装 https docs microsoft com en us wi
  • LA@向量组线性相关性

    文章目录 向量组线性相关性 线性相关 线性无关 多向量向量组线性相关 单向量向量组的线性相关性 单位向量向量组线性相关性 双向量向量组的线性相关性 双向量线性相关的几何意义 三向量线性相关的几何意义 包含零向量的向量组线性相关 概念迁移 线
  • STC89C51——中断系统

    前言 本文介绍基于常见的51单片机 即如下图的芯片 STC89C51具备5个中断源 中断源 优先级 中断请求标志位 中断允许控制位 外部中断0 0 IE0 EX0 定时器中断0 1 TF0 ET0 外部中断1 2 IE1 EX1 定时器中断
  • 2021 Web 前端热点笔试面试题总结【更新版】

    提醒 我只是答案的搬运工 如果在浏览中发现有错误 欢迎评论中提出来 我好修改 谢谢 简述异步和同步的区别 同步 浏览器访问服务器请求 用户看得到页面刷新 重新发请求 等请求完 页面刷新 新内容出现 用户看到新内容 进行下一步操作 异步 浏览
  • 指定岗位

    一 背景介绍 这里我们选择的是目前求职和招聘最常用的网站Bxxx 在采用其它方法的试验中 我们可能会遇到如下问题 不知道该怎么解析网址 自定义城市和岗位的搜索词 不知道怎么样批量爬取 这里指的是自动切页 不知道该怎么破解动态cookie的问
  • K8S 安装 Ingress Controller

    版本介绍 版本1 NGINX Ingress Controller nginx公司的nginx ingress NGINX Ingress Controller 由 F5 NGINX 开发和维护 docs nginx com 可在 GitH
  • Ubuntu命令介绍——echo

    echo是一个非常简单 直接的linux命令 将argument送出至标准输出 STDOUT 通常就是在显示器 monitor 上输出 为了更好的理解 不如先让我们跑一下 echo 命令好了 echo 你会发现只有一个空白行 然后又回到 s
  • k8s--基础--6.1--环境搭建--多master高可用集群

    k8s 基础 6 1 环境搭建 多master高可用集群 前提 使用root用户 1 机器 主机名 IP 说明 master1 192 168 187 154 2核4G 硬盘20G 核数最小要求是2 master2 192 168 187
  • SQLite向arm板子的移植

    SQLite向arm linux的移植 SQLite是一个开源的嵌入式关系数据库 我们用它来管理从M0端接收的数据 将检测到的仓库信息存储起来 SQLite环境的建立 首先从下载最新版本的sqlite源码包 我下载的是sqlite amal
  • mac idea 使用技巧-长期更新

    公司配发了新款Mac book pro M1 以前都是使用window 版本 切换成了mac 操作idea 很多技巧需要重新掌握 现在总结文档 idea 版本 试用版 建议大家自行购买账户 idea 在Mac 环境下游多中快捷键组合 注意事
  • 最通俗易懂的nginx

    nginx 文章目录 nginx 什么是nginx nginx配置文件 正向代理 反向代理 负载均衡 动静分离 高可用 什么是nginx Nginx是一款自由的 开源的 高性能的HTTP服务器和反向代理服务器 同时也是一个IMAP POP3
  • 【STM32】单片机启动文件分析

    启动文件 启动文件由汇编语言写成 时单片机上电之后执行的第一个文件 也就是从上电到mian函数中间的一段过程 bootloader bootloader也可以叫启动文件 每种MCU都有对应的启动文件 但开发环境往往自动完整地提供了这个启动文

随机推荐

  • 虚拟机nat模式网卡配置

    我们的目的是 虚拟机和主机能互ping 虚拟机可以ping外网 1 设置win10防火墙 添加入站规则 2 共享无线网卡或者有线网卡给虚拟机网卡 VMnet8 3 虚拟机虚拟网络编辑 4 修改虚拟网卡vmnet8配置 5 关闭centos防
  • 史上最全树莓派安装方法

    众所粥汁 树莓派是一个只有银行卡大小的 电脑 但很多人在安装树莓派时会有疑问 我安装的对不对 系统是正版吗 怎么会出错 等等等等问题 所以今天我就带来一个树莓派使用指南 材料有 1 树莓派3b 3b 4b 2 外壳 3 网线 可选 4 显示
  • 怎么能学会做买卖步骤是什么(想做买卖赚钱应该先从什么做起)

    如何能学会做交易 办法是什么 胜利者 有本人的战略 遵照本人的战略 比方价格入股 趋向盯梢入股 套利 缠论买卖体例之类 波折者 自我买卖 情结买卖 动静炒买炒卖股票 贪嗔痴慢疑主宰你的操纵 你必需输得起 没有人 会在看了一本简略五官科手术的
  • JetBrains IDEA 系列产品通用xx方法(license server)

    若资金允许 请点击https www jetbrains com idea buy 购买正版 谢谢合作 学生凭学生证可免费申请正版授权 创业公司可5折购买正版授权 本文适用于所有 JetBrains 系列产品 方法一 最新方法 Jet Br
  • springboot+cache缓存上

    cache内容 缓存的意义 将方法的运行结果进行缓存 以后再要相同的数据 直接从缓存中获取 不用调用方法 cacheManager管理多个Cache组件 对缓存的真正操作CRUD操作在Cache组件中 每一个缓存组件有自己唯一一个名字 几个
  • FreeRTOS入门(07):流缓冲区 & 消息缓冲区

    文章目录 目的 基础说明 流缓冲区 相关函数 使用演示 消息缓冲区 相关函数 使用演示 总结 目的 缓冲区是操作系统中常见的一种用于任务间数据传递的机制 这篇文章将对FreeRTOS中相关内容做个介绍 本文代码测试环境见前面的文章 Free
  • 百度云BOS云存储的图片如何在访问时,同时进行格式转换、缩放等处理

    前言 之前做了一个图片格式转换和压缩的服务 结果太占内存 后来查到在访问图片链接时 支持进行图片压缩和格式转换 本来想着先格式转换 压缩图片再上传到BOS 现在变成了上传后 访问时进行压缩和格式转换 想了想 因为主要目的是提高用户的图片访问
  • vue2中使用vue-quill-editor实现编辑器

    1 参考文档 开发文档 https github com surmon china vue quill editor 例子 vue quill editor Homepage Surmon s projects 中文开发文档 前言 Quil
  • [机器学习 01] 回归算法-sklearn

    机器学习 回归 1 线性回归 有一组数据 x y 找出一个线性方程 使得数据到线上的距离总和最小 距离最小化 梯度下降法 最小二乘法 对于普通最小二乘的系数估计问题 其依赖于模型各项的相互独立性 当各项是相关的 且设计矩阵的各列近似线性相关
  • syntaxerror: 'return' outside function 解决办法

    出现syntaxerror return outside function是由于python对格式要求严格的原因 多半问题是由于格式对齐导致的 根据报错提示到相应的 py文件的相应行修改缩进 只需要保持缩进为1或着2个tab即可 修改后保存
  • 01.Vite 的安装和使用

    学习要点 1 Vite 简介 2 Vite 安装 本节课我们来开始了解 Vue 官方的构建工具 Vite 以及安装方式 一 Vite 简介 1 Vite 是官方从 Vue3 开始的全新的前端构建工具 官网如下 https vitejs de
  • 2021-11-18 Android APP安装后不在桌面显示图标的一个方法

    一 有时候安装一个app 不想在桌面上显示图标 而是在其他地方调出这个程序 要想在桌面不显示图标 只需注释掉APP入口Activity中的
  • EC600 QuecPython开发环境搭建、固件下载,最方便的OpenCPU物联网4G通信解决方案

    EC600 QuecPython 官方资源汇总 开发环境搭建 1 安装windows驱动 2 验证模组的固件版本 3 烧录QuecPython固件 小试QuecPython 1 查看系统信息 2 点亮V1 2开发板上的LED D6 3 UA
  • HIT SC Lab1 小小的总结(主要是工具)

    Fine 自动机与软构实验轮番轰炸的一周 在自动机考完的晚上 写下这篇有关实验一的思考总结 Git的使用 软构这门课提交实验的方式与以前的实验不一样 是使用github上传 因此git的使用就成了刚需 接下来讲一下本次实验中发现的几种上传方
  • Microsoft Office 2016 VOL版下载

    链接都是VOL版 和零售版功能是一样的 只是激活方便一些 三个下载链接 第一个是Office就是包含了Word Excel PPT那些的 另外两个一个是Visio 一个是Project 如果不需要的话 只下载第一个就可以了 激活方法在下面
  • Ubuntu操作系统如何截图

    Ubuntu操作系统如何截图 一 截图并保存到文件夹 1 截取全屏 2 矩形选框截取感兴趣区区域 3 截取当前活动的窗口 二 截图到剪切板 不保存进文件夹 1 截取全屏 2 矩形选框截取感兴趣区区域 3 截取当前活动的窗口 Ubuntu系统
  • 记一次java heap space的解决办法

    记一次java heap space的解决办法 java lang OutOfMemoryError java heap space 问题缘由 后台上传excel导入到数据库 数据量太大 导致报错 解决方案 用jdk自带的性能分析器 jco
  • Cisco交换机链路聚合配置

    文章目录 1 拓扑图 2 Sw1配置 3 Sw2配置 1 拓扑图 2 Sw1配置 进入特权模式 Switch gt en 进入全局模式 Switch conf t 更改设备名称 Switch config hostname Sw1 更改接口
  • LeetCode第142题解析

    给定一个链表 返回链表开始入环的第一个节点 如果链表无环 则返回 null 为了表示给定链表中的环 我们使用整数 pos 来表示链表尾连接到链表中的位置 索引从 0 开始 如果 pos 是 1 则在该链表中没有环 说明 不允许修改给定的链表
  • Verilog十大基本功9 (Multicycle Paths)

    来自 http blog chinaaet com coyoo p 31979 概述 Multicycle paths即多周期路径 指的是两个寄存器之间数据要经过多个时钟才能稳定的路径 一般出现于组合逻辑较大的那些路径 在实际工程中 除了乘