什么是竞争与冒险现象?怎样判断?如何消除?
在组合电路中,某一输入变量经过不同途径传输后,到达电路中某一汇合点的时间有先有后,这种现象称竞争;由于竞争而使电路输出发生瞬时错误的现象叫做冒险。
判断方法: 代数法(如果布尔式中有相反的信号则可能产生竞争和冒险现象);
解决方法:
1:加滤波电路,消除毛刺的影响;
2:加选通信号,避开毛刺;
3:增加冗余项消除逻辑冒险。
建立时间和保持时间
建立时间余量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: 时钟树调整,做好时钟树平衡。
不可综合的语句
所有综合工具都不支持的结构: time,
defparam,
$finish,
fork,join,
initial,
delays,
UDP,
wait。
Verilog中的generate语句常用于编写可配置的、可综合的RTL的设计结构。它可用于创建模块的多个实例化,或者有条件的实例化代码块。
generate循环的语法与for循环语句的语法很相似。但是在使用时必须先在genvar声明中声明循环中使用的索引变量名,然后才能使用它
Multicycle paths
多周期路径,指的是两个寄存器之间数据要经过多个时钟才能稳定的路径,一般出现于组合逻辑较大的那些路径。
在实际工程中,除了乘除法器等少数比较特殊的电路,一般应该尽量避免采用多周期路径电路。
即使有所使用,也应该通过约束在综合工具中指出该路径,使得综合工具在计算Fmax的时候忽略这条路径,避免用大量的时间对该路径进行优化。
set_multicylce_path -from D_reg -to S_reg
当个两个触发器之间的逻辑如果一个周期执行不完的话一般有两个解决方案:
1、插入流水线使得组合逻辑打散 ;
2、使用使能信号控制,几个周期读取一次数据。
这里面2所使用的方法就需要设定multi-cycle path,方法1数据的吞吐量更大,方法2牺牲了数据吞吐量,但是设计中有的地方对吞吐量没有要求是可以使用这种方法的。
伪路径False Paths
虚假路径或称为伪路径是指基于该路径的电路功能不会发生或者该路径无须时序约束。
-
在设计中,有些路径是不可能存在的,或者不可能发生的,这种路径称为伪路径,False Paths。
-
对于伪路径,静态时序分析时,需要告诉工具,不去分析,这样可以提高静态时序分析的准确性,以及降低STA的计算空间,减少静态时序分析的时间。
伪路径发生在异步电路,跨时钟域;或者电路内部逻辑复杂,推导后,发现其实是常量,不会发生变化。
伪路径约束脚本:
-
设置任何从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等
设计约束文件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
其实常用的sdc命令就以下几条: