文章目录
- 9.1 Input Availability---输入有效
- 9.1.1 Min and Max Availability Time---最小和最大有效时间
- 9.1.2 Multiple Clocks
- 9.1.3 Understanding Input Arrival Time
- 9.2 Output Requirement
- 9.2.1 Min and Max Required Time
- 9.2.2 Multiple Reference Events
- 9.2.3 Understanding Output Required Time
- 9.3 set_input_delay
- 9.3.1 Clock Specification
- 9.3.2 -level_sensitive
- 9.3.3 Rise/Fall Qualifiers---限定符
- 9.3.4 Min/Max Qualifiers
- 9.3.5 -add_delay
- 9.3.6 Clock Latency
- 9.3.7 Completing Input Delay Constraints
- 9.4 set_output_delay
- 9.4.1 Clock Specification
- 9.4.2 -level_sensitive
- 9.4.3 Rise/Fall Qualifiers
- 9.4.4 Min/Max Qualifiers
- 9.4.5 -add_delay
- 9.4.6 Clock Latency
- 9.4.7 Completing Output Delay Constraints
- 9.5 Relationship Among Input and Output Delay
- 9.6 Example Timing Analysis
- 9.6.1 Input Delay: Max---最小大输入延迟
- 9.6.2 Input Delay: Min---最小输入延迟
- 9.6.3 Output Delay: Max---最大输出延迟
- 9.6.4 Output Delay: Min---最小输出延迟
- 9.7 Negative Delays---负延迟
- 9.8 Conclusion
- 应用时钟约束后,所有寄存器到寄存器的路径都能定时。延迟约束必须应用在非时钟端口上。如果没有指定输入输出端口的约束,时序分析工具会假设在接口上使用最优时序要求。 并假设电路单元内部的组合逻辑本身具有整个周期,电路单元外部没有信号。
9.1 Input Availability—输入有效
- 我们需要为每个输入端口指定输入有效时间。考虑图9.1所示的电路。对于电路单元B1,我们需要知道信号到达输入I1的时间。
- 这个到达时间可以告诉实现工具在**组合逻辑云C1(输入端口和第一个寄存器元器件之间)**中花费的时间,反过来,到达时间也决定了要求优化的等级。如果信号按时到达F1(通过组合逻辑后的第一个寄存器)并被及时锁定,那么它将允许STA工具发送报告。思考如图9.2所示的电路。
- 对于电路单元B2,需要指定输入I1的输入到达时间。当触发器由一个时钟触发时,信号从F1(前一个电路单元B1的F1)开始。这个时钟触发就充当了参考事件,参考事件发生后,信号通过线路经过触发器(Clk_to_Q延迟)、组合逻辑C1(在前一个电路单元B1中)、组合逻辑C2(在顶层中)和互连延迟。但是,如果考虑了I1的输入信号到达时间,那么延迟在C1、C2、Clk_to_Q、互连线等之间如何分配就不那么重要了。
- 我们只需要知道参考事件发生后信号经过多长时间出现在输入端口。
9.1.1 Min and Max Availability Time—最小和最大有效时间
有些情况下我们不能在输入端口指定信号有效的具体时间,如在有相同参考事件的多条路径的情况下,如图9.3所示,还有当信号到达输入端口时,PVT的变化也会引起不确定性。
- 在输入端口,设计者需要指定信号可以改变的最早时间,也就是最小时间,**在这个时间之前,输入信号不能到达输入端口。**由此可以确定,输入端口的上一个值要保持到这个时间。最小时间可以确保输入信号不违反F2上的保持要求。
- 设计者还需要指定最大时间,在这个时间内,要确保输人端口上的输入信号有效。这个时间也是最迟时间,在这个时间内,输入端口上信号的所有变化都是有效的。最大时间用于**确保信号满足B2中触发器的建立要求。**图9.4说明了最小延迟和最大延迟对数据有效窗口的影响。
9.1.2 Multiple Clocks
- 有时,一个输入信号可能由多个时钟触发,如图9.5所示的电路。到达I1的信号可能从Clk1(电路单元B1)处产生也可能从Clk2(电路单元B2)处产生。
两个触发事件可能相互独立。在这种情况下,到达时间会根据两个参考事件来指定。实现工具和STA工具会考虑每个到达时间,并同时满足这两个条件。
9.1.3 Understanding Input Arrival Time
回顾图9.1中的电路,**假设信号在I1处的最早有效时间是3ns,**通过组合云C1的最小延迟是4ns,那么信号到达触发器F1的最早有效时间是7ns。这样,只要触发器的保持要求小于7ns,那么新的数据就不会干扰之前数据的捕获。
类似地,假如信号到达I1处的最迟时间是5ns,通过组合云C1的最大延迟是6ns,那么信号到达触发器F1的最迟有效时间是11ns。让我们进一步假设触发器F1的建立要求是0.5ns,那么只要时钟信号到达F1的时间是11.5ns或者晚一些,触发器就能可靠地捕获当前数据。
9.2 Output Requirement
- 对于每个输出端口,都需要指定信号被采样前,在电路单元外部经过的时间。电路如图9.6所示。对于电路单元B1,我们需要知道产生输出O1后,在采样前信号需要的传输时间。
- 实现工具可以通过这个时间计算出应该在逻辑云C1(在最后一个寄存器元件F1和输出端口01之间)中放置多少逻辑。 STA工具也可以通过这个时间报告在某个时间O1上信号是否有效,这样在产生输出O1后,就有足够的时间经过电路单元的外部,电路如图9.7所示。
-
对于电路单元B1,需要为输出O1指定输出要求时间(output required time)。 O1输出后,信号由电路单元B2中的触发器F2采样。触发器F2的时钟起到了参考事件的作用。在参考事件到达F2之前,信号通过线路时经过组合逻辑C2(在顶层中)、组合逻辑C3(在下一个电路单元中)存在延迟和互连延迟。
-
信号需要在参考事件之前到达F2,这样触发器才能满足建立要求。只要考虑了在O1处的信号输出要求时间,那么延迟在C2、C3、F2的建立时间和互连线之间是如何分配的就不重要了。
-
我们仅仅需要知道在参考事件之前在输出端口处信号有效需要多长时间。在O1外的时间越多意味着经过逻辑云C1(在寄存器和输出端口之间)的延迟越小。
-
输出要求时间是根据信号采样之前,在电路单元外需要的时间来确定的,而不是根据输出端信号有效时间来确定的。输出要求时间可以通过计算得出。例如,如果输出延迟为6ns,这意味着信号输出后需要6ns。如果一个时钟触发器在10ns时对信号进行采样,那么信号需要在4ns时有效。
-
在SDC中,用户指定6,即输出后需要的时间是6ns。信号应该什么时间有效可以通过计算获得。这就是输入延迟和输出延迟在概念上的不同之处。在输入端,指定的输入延迟直接给定了输入有效时间。在输出端,指定的输出延迟是信号进一步传输需要的时间。输出延迟不同于输出端信号的有效时间。
9.2.1 Min and Max Required Time
- 有时,在输出端不太可能指定信号在输出后需要传输的精确时间。例如,从输出端到相同参考事件可能有多条路径时,如图9.8所示,PVT的变化也能引起信号到达输出端口时的不确定性。
- 设计者需要指定信号在输出后需要传输的最小时间,还需要指定输出信号从输出端口出来后需要传输的最大时间。
9.2.2 Multiple Reference Events
- 有时,输出信号可以被多个参考事件捕获,电路如图9.9所示。
- 从O1出来的信号可以被Clk1捕获,也可以被Clk2捕获。这两个捕获事件可以是独立的。在这种情况下,要求时间要根据两个参考事件来指定。这是实现工具和STA工具的功能,它们独立计算每个要求时间并满足每个要求。
9.2.3 Understanding Output Required Time
回顾图9.6中的电路,假设信号**在O1外需要的最小时间是3ns。**如果从电路单元内部到输出端口O1的延迟是"-3ns",那么在路径结束时最终延迟为0。所以新数据不会干扰之前的数据,因为时钟沿到来时新数据才有效。这样前一个数据要在O1上保持“-3ns”。这可以认为是下面的情况,O1是假定触发器的输入,它保持要求是“-3ns”,注意负值符号。这样,输出端口的最小延迟等于假定触发器上的保持检查,这里要检查的保持值是设定的负延迟值。
- 类似地,假设对于信号O1最大要求时间是7ns,意思就是信号在被下一级触发器捕获之前还需要经过7ns。可以把它想成这种情况,O1是假设触发器的输入,其建立要求是7ns。假设时钟周期是10ns,组合云C1的最大延迟是3ns(即10ns-7ns)。
9.3 set_input_delay
set_input_delay [ -clock clock_name]
[ -clock_ fall ]
[ -level_sensitive ]
[ -rise ]
[ -fall ]
[ -max ]
[ -min ]
[ -add_delay ]
[ -network_latency_included ]
[ -source_latency_included ]
delay_value port_pin_list
9.3.1 Clock Specification
- -clock选项用于指定参考时钟,根据参考时钟指定延迟时间。这个选项通常指的是触发输入端信号的时钟名称。
- 如果时钟周期是10ns,具有{0 5}波形,触发器F1是由时钟下降沿触发的,那么我们可以指定时钟下降沿的延迟是2, 或者指定时钟上升沿的延迟是7。关于时序分析,下面两个命令具有相同作用。
set_input_delay -clock CLK1 -clock_fall 2.0 [get_ports I1]
set_input_delay -clock CLK1 7.0 [get_ports I1]
-
但是,如果发射触发器F1是由时钟下降沿触发的,那么我们应该使用第一个命令,**因为它可以很好地反映电路的设计。**如果输入引脚是组合电路唯一路径的一部分,那么就没有时钟触发到达输入引脚上的信号。这种情况下,就不需要指定-clock。对于set_input_delay命令,参考事件是时间0。
-
如果没有指定-clock,那么-clock_fall也就没意义了。因为现在许多设计都是同步的,所以通常会使用set_input_delay指定时钟。组合路径(即使存在)也可以使用其他约束方法来约束(将在第13章讨论)。
9.3.2 -level_sensitive
- 如果启动元器件不是一个触发器而是一个锁存器,那么就应该指定这个开关。从概念上讲,使用这个开关后启动锁存器可以借用这个周期里的时间。 这意味着建立裕度(setup slack)会减少——这考虑了当锁存器为透明时信号从锁存器开始的情况。
9.3.3 Rise/Fall Qualifiers—限定符
-
rise用于限定输入延迟与输入端口信号的上升沿对应。-fall用于限定输入延迟与输入端口信号的下降沿对应。如果在输入端口信号上升和下降时的输入到达时间不同,那么这个命令需要提供rise或者fall限定符。
-
当不指定限定符rise或者fall时,给定值适用于这两种过渡。在CMOS电路中,上升和下降过渡时的路径延迟非常相似,所以不会经常使用-rise/-fall规格。
9.3.4 Min/Max Qualifiers
- -min用于限定指定的延迟值与输入端口信号的最早到达时间对应。这个值用在当前设计内部以实现保持检查。
- -max用于限定指定的延迟值与输人端口信号的最迟到达时间对应。这个值用在当前设计内部以实现建立检查。
- 当没有指定-min或者-max限定符时,两个限定符使用相同的设定值。
- 前随着纳米技术的发展,单个触发器的保持时间值大幅下降
- 在大多数情况下,通过启动元器件的延迟(启动触发器的Clk_to_q延迟)和互连延迟(interconnect delay)将比保持时间长
- 因此,大多数情况下外部到达信号能满足保持要求。通常,使用最大值可以可靠完成建立检查。这个值也用于保持检查。
- If the signal is going to feed into an element which has a large hold requirement, say a memory, the hold check could become important. In such a situation, the -min value also should be specified correctly.
9.3.5 -add_delay
- If an input delay is specified for a port, the current specification overrides prior specifi cations of input delay on this port.
- 第一个延迟规格没必要指定-add_delay,加了工具也会忽略
- Presence of -add_delay switch tells the tool that this is an additional constraint, besides the existing constraints, and it does not override the previous constraints. In the absence of this switch, the previous constraints get overwritten, for example:
#第一个规格
set_input_delay -clock CLK1 -min 3.0 [get ports Inl]
#这句正确,因为之前在这个端口上没有指定-max
set_input_delay -clock CLK1 -max 4.0 [get_ports lnl]
#这句履盖了前面关于CLK1的两个规格
set_input_delay -clock CLK2 3.5 [get_ports lnl]
#这一句使用add_delay,没有移除前面已经存在的约束
set_input_delay -clock CLKl -add_delay 3.0 [get_ports lnl]
#这句也正确,因为前面没有指定In2的输入延迟(input_delay)
set_input_delay -clock CLK3 4.0 [get_ports 1n2]
9.3.6 Clock Latency
- 在第8章,我们发现在触发触发器以前,时钟在路径上会有延迟(时钟源延迟和网络延迟,source latency and network
latency)。输入延迟值是关于时钟何时到达并触发触发器的,电路如图9.11所示。
- 延迟值D1是从F1的时钟端到B1的I1引脚之间的延迟。时序分析工具能够考虑从时钟源到F1引脚的时钟延迟,它基于为时钟指定的延迟。L1代表时钟源延迟,L2代表网络延迟。因此,时序分析工具会认为在时钟源的有效沿到达后,经过L1+L2,时钟沿到达F1,然后,经过set_input_delay规格中提到的延迟D1,信号会到达I1。
- if the designer has already included the source latency or the network latency, in the specifi ed value, the switches source_latency_included and - network_latency_included need to be mentioned.
- If L1 has been included, then the switch -source_latency_included needs to be specified.
- If L2 has been included, then the switch -network_latency_included should be specified.
- A user could specify none, either of or both of these switches, depending upon which portion of the clock path latency has been included.
- 当指定这些开关时,时序分析工具不会考虑相应的延迟,而只是计算在启动触发器上的时钟到达时间,从而有效地使启动边沿提前。
- These switches are usually not used because of the following reasons:
- Different tools treat these switches differently.
- Both the launching device (outside the block of interest) and the capture device (inside the block of interest) will have similar latencies on the clock path.
- 从约束复用的角度来说,它最好不包括时钟源延迟和网络延迟。因为,这些延迟改变后,除了改变相关约束的延迟以外,我们还需要更新指定的输入延迟。
9.3.7 Completing Input Delay Constraints
- 要完成输入约束,现在唯一剩下的工作就是需要指定输入延迟的实际端口或引脚,并且指定延迟值,这是set_input_delay命令必须指定的两个选项。
9.4 set_output_delay
set_output_delay [ -clock clock_name]
[ -clock_fall ]
[ -level_sensitive ]
[ -rise ]
[ -fall ]
[ -max ]
[ -min ]
[ -add_delay ]
[ -network_latency_included ]
[ -source_latency_included ]
delay_value port_pin_list
9.4.1 Clock Specification
- -clock选项用于指定参考时钟
- 获元器件是下降沿触发,那么需要指定-clock_fall。
9.4.2 -level_sensitive
- If the capturing device is a latch , rather than a flop, -level_sensitive can be specified.
- that the output port could be borrowing the time from the capturing latch. That means the setup slack could increase
- this option should be used after a very careful consideration.
9.4.3 Rise/Fall Qualifiers
- 如果输出端信号上升和下降时输出要求的时间不同,那么set_output_delay命令需要提供限定符rise或者fall。
9.4.4 Min/Max Qualifiers
- The -min value is used for performing hold checks at the port/pin.
- The -max is used for performing setup checks at the port/pin.
- Like set_input_delay , even for set_output_delay , usually min delays are not very important. And the max values are specifi ed without min or max qualifi ers.
9.4.5 -add_delay
- Like set_input_delay , if a user has to specify output delay with respect to multiple reference events on the same port, then -add_delay needs to be specified for all subsequent specifications.
- 这条命令是额外约束,它不覆盖前面的约束。如未指定,则会覆盖。
9.4.6 Clock Latency
- 如果设计者在指定值时已经包含了源延迟或网络延迟,那么需要使用-source_latency_included和-network_latency_included开关。
- 时序分析工具在计算捕获触发器的时钟到达时间时就不会考虑相应的延迟了,因此,可以提前有效地获得捕获沿。
- 使用set_output_delay时很少使用这些开关。
9.4.7 Completing Output Delay Constraints
- 要完成输出约束,现在唯一剩下的工作就是需要指定输出延迟的端口或引脚,还要指定延迟值,它们是set_output_delay命令必须指定的选项。
9.5 Relationship Among Input and Output Delay
-
思考图9.12所示的电路。信号从电路单元B1到B2。为了易于理解,我们假设:
- 通过CI的延迟包括Clk_to_Q的延迟
- 通过C2的延迟包括电路单元内部的互连延迟
- 通过C3的延迟包括触发器F3的建立要求
-
从F1到F3的路径上,需要指定电路单元B1输出端口O1的输出延迟,以及电路单元B2输入端口I1的输入延迟。
-
We have already seen that the data takes one cycle to reach from one register to another. That means the total delay through C1 , C2 , and C3 has to be less than or equal to one clock period (denoted by P ). Thus, C1+C2+C3<=P
-
O1的输出信号需要经过C2+C3后被F3可靠地捕获。所以set output delay(SOD)要大于或等于通过C2+C3的延迟。
- SOD ≥ C2的延迟+C3的延迟
- P-SOD表示在C1中允许的时间。 SOD越大,表明在C1中的时间越少。
-
I1的输入信号经过了C1+C2到达I1,那么set input delay(SID)要大于或等于通过C1+C2的延迟。
- SID ≥ C1的延迟+C2的延迟
- P-SID表示在C3中的允许时间。SID越大,表明在C3中的时间越少。
-
如果SID+SOD>P+C2的延迟,那么表示设计过度约束
9.6 Example Timing Analysis
9.6.1 Input Delay: Max—最小大输入延迟
9.6.2 Input Delay: Min—最小输入延迟
- 对于建立检查,要求数据必须在要求时间之前有效,因此裕度=数据要求时间-数据有效时间。对于保持检查,要求数据在要求时间之后有效,因此裕度=数据有效时间-数据要求时间。建立裕度和保持裕度的计算等式不同。
9.6.3 Output Delay: Max—最大输出延迟
9.6.4 Output Delay: Min—最小输出延迟
9.7 Negative Delays—负延迟
- 最小延迟是负值使得能够严格遵守保持要求,而最大延迟是负值使得更容易满足建立要求。
- 因为在通常情况下,通过元器件和互连的延迟比时钟网络的偏斜大,所以几乎没有最大延迟是负值的情况。虽然不常见,但是有时最小延迟会为负值(通过元器件和互连的延迟非常小)。
9.8 Conclusion
- set_input_delay和set_output_delay需要正确设定,这样,经过电路单元的信号就可以保证时序正确了。如果设定不正确,那么单个电路单元可能能够满足自己的时序,而当集成整个设计时,最终的设计可能不会满足时序
- 当指定端口约束时,新设计者常会犯这两个错误:
- 当指定set_input_delay时,把采样时钟当作参考时钟,正确方法是把启动时钟作为参考时钟。
- 当指定set_output_delay时,把启动时钟当作参考时钟,正确方法是把采样时钟作为参考时钟。
- 在许多设计中,采样时钟和启动时钟可能相同,因此,这时可能没有关系。但是,如果两个时钟不相同,那么理解它们之间在概念上的不同就很重要了。