1 关键路径
关键路径是指同步逻辑电路中,组合逻辑延时最大的路径,包括布线延迟,关键路径是对设计性能起决定性影响的时序路径。
2 优化关键路径
对关键路径进行时序优化,可以直接提高设计性能。
对同步逻辑来说,常用的时序优化方法包括 逻辑复制,加法/乘法树,关键信号后移,消除优先级等。
静态时序分析可以找出逻辑电路的关键路径。通过查看静态时序分析报告,可以查看关键路径。
在vivado中通过report Timing summary 来查看。 WNS worst negative slack 对应最大延迟分析的所有时序路径的最差裕量( Setup ) 。
总的延时=逻辑延时+布线延时
1 在组合逻辑中插入寄存器,即插入流水线 Pipelining
组合逻辑延时过长,就会成为关键路径,考虑在该路径中插入额外的寄存器,这种方法称为插入流水线。 额外插入寄存器增加的时钟周期并不会违反整个设计的规范要求,从而不会影响设计的总体功能性实现,插入额外的寄存器在保证吞吐量不变的情况下改善了设计的时序性能。当然,其不可避免地会带来部分面积的增加。
2 寄存器平衡,重定时retiming。 retiming
在不增加寄存器个数的前提下,通过改变寄存器的位置来优化关键路径,可以对比和流水线插入寄存器的不同。
3 操作符平衡,即加法树,乘法树。 加法树 乘法树
平衡前,a 和 b 均经过 3 个乘法器带来的延时,c 经历 2 个,d 经历 1 个,最长延时为 3 个乘法器延时。 平衡后,树形结构,a、b、c、d 均经历 2 个乘法器延时,最长延时为 2 个乘法器延时。
4 消除代码优先级 以case代替if else
不需要优先级的地方,用case代替if else。 使得顺序执行的语句并行执行。
5 逻辑复制
当某个信号的扇出比较大时,会造成该信号到各个目的逻辑节点的路径变长,从而成为设计中的关键路径。通过对该信号进行复制,来降低扇出。
6 关键信号后移
即将关键信号移动到if-else - if的第一级,这样会减小最长路径延迟
3 扇出 fan-out
扇出是定义单个逻辑门能够驱动的数字信号输入最大量。
大多数TTL逻辑门能够为10个其他数字门或驱动器提供信号。因而,一个典型的TTL逻辑门有10个扇出信号。
一个模块的扇出数过大或过小都不理想,过大比过小更严重。
4 什么叫数字 IC
IC 就是半导体元件产品的统称,IC 按功能可分为:数字 IC、模拟 IC、微波 IC 及其他 IC。数字 IC 就是传递、加工、处理数字信号的 IC,是近年来应用最广、发展最快的 IC 品种,可分为通用数字 IC 和专用数字 IC。
通用 IC:是指那些用户多、使用领域广泛、标准型的电路,如存储器(DRAM)、微处理器(MPU)及微控制器(MCU)等,反映了数字 IC 的现状和水平。
专用 IC(ASIC):是指为特定的用户、某种专门或特别的用途而设计的电路。
5 FPGA
FPGA 是一种可以重构电路的芯片,是一种硬件可重构的体系结构。
现场可编程 门队列。
通过编程,用户可以随时改变它的应用场景,它可以模拟 CPU、GPU 等硬件的各种并行运算。通过与目标硬件的高速接口互联,FPGA 可以完成目标硬件运行效率比较低的部分,从而在系统层面实现加速。
6什么是竞争与冒险现象?怎样判断?如何消除?
在组合电路中,某一输入变量经过不同途径传输后,到达电路中某一汇合点的时间有先有后,这种现象称竞争;由于竞争而使电路输出发生瞬时错误的现象叫做冒险。
判断方法: 代数法(如果布尔式中有相反的信号则可能产生竞争和冒险现象);
解决方法:
1:加滤波电路,消除毛刺的影响;
2:加选通信号,避开毛刺;
3:增加冗余项消除逻辑冒险。
7 建立时间和保持时间
建立时间余量slack:可以通过slack = 数据需求时间 - 数据到达时间 大于等于0,
保持时间通过:Thold <= Tco+Tdata -Tskew;
setup time violation
1 就是降低数字系统的工作频率
2 减少Tdata
在组合电路之间插入寄存器,增加流水线。 在不改变逻辑功能的前提下,对组合逻辑电路进行优化。
3 增大Tskew 在时钟路径上,插入buffer,增加时钟路径的延时,但不能影响hold time
hold time violation solution
1 增大Tdata:在组合电路的数据传输路径上,插入延迟单元buffer,增加组合逻辑延迟。
2 减小Tskew: 时钟树调整,做好时钟树平衡。
8 不可综合的语句
所有综合工具都不支持的结构: time,
defparam,
$finish,
fork,join,
initial,
delays,
UDP,
wait。
9 generate
Verilog中的generate语句常用于编写可配置的、可综合的RTL的设计结构。它可用于创建模块的多个实例化,或者有条件的实例化代码块。
generate循环的语法与for循环语句的语法很相似。但是在使用时必须先在genvar声明中声明循环中使用的索引变量名,然后才能使用它
10 Multicycle paths
多周期路径,指的是两个寄存器之间数据要经过多个时钟才能稳定的路径,一般出现于组合逻辑较大的那些路径。
在实际工程中,除了乘除法器等少数比较特殊的电路,一般应该尽量避免采用多周期路径电路。
即使有所使用,也应该通过约束在综合工具中指出该路径,使得综合工具在计算Fmax的时候忽略这条路径,避免用大量的时间对该路径进行优化。
set_multicylce_path -from D_reg -to S_reg
11 当个两个触发器之间的逻辑如果一个周期执行不完的话一般有两个解决方案:
1、插入流水线使得组合逻辑打散 ;
2、使用使能信号控制,几个周期读取一次数据。
这里面2所使用的方法就需要设定multi-cycle path,方法1数据的吞吐量更大,方法2牺牲了数据吞吐量,但是设计中有的地方对吞吐量没有要求是可以使用这种方法的。
12 伪路径False Paths
虚假路径或称为伪路径是指基于该路径的电路功能不会发生或者该路径无须时序约束。
-
在设计中,有些路径是不可能存在的,或者不可能发生的,这种路径称为伪路径,False Paths。
-
对于伪路径,静态时序分析时,需要告诉工具,不去分析,这样可以提高静态时序分析的准确性,以及降低STA的计算空间,减少静态时序分析的时间。
13 伪路径发生在异步电路,跨时钟域;或者电路内部逻辑复杂,推导后,发现其实是常量,不会发生变化。
伪路径约束脚本:
-
设置任何从SCAN_CLK时钟域开始,到CORE_CLK时钟域的任何路径都为伪路径:
Set_false_path -from [get_clocks SCAN_CLK] -to [get_clocks CORE_CLK] -
设置任何穿过UMUX0的S pin的路径为伪路径:
set_false_path -through [get_pins UMUX0/S] -
设置任何以TEST_REG port为终点的路径为伪路径:
set_false_path -to [get_ports TEST_REG] * -
设置任何穿过UINV的Z pin, 以及UAND0的Z pin的路径为伪路径
set_false_path -through UINV/Z -through UAND0/Z
描述设计中一些特殊的路径,包括set_false_path, set_multicycle_path等
14 设计约束文件SDC. 全称Synopsys design constraints.
它对电路的时序,面积,功耗进行约束
Timing Constraint按照它们的用途,大致分为以下几类:
(1)描述芯片的工作速度,即时钟的频率,包括create_clock,create_generated_clock
等
(2)描述芯片的边界约束,包括
set_input_delay
,set_output_delay
等
(3)描述芯片的一些设计违反rule(DRV),包括
set_max_fanout, set_max_capacitance, set_max_transition
等
(4)描述设计中一些特殊的路径,包括
set_false_path, set_multicycle_path
等
(5)描述设计中一些需要禁止的timing arc,例如set_disable_timing