接口分析(上)

Posted KuoGavin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了接口分析(上)相关的知识,希望对你有一定的参考价值。

文章目录



本章节将介绍各种类型输入和输出路径的时序分析过程以及几种常用的接口,还介绍了特殊接口(例如SRAM)的时序分析和源同步接口(例如DDR SDRAM)的时序分析。



9.1 IO接口(IO Interfaces)

本小节中的示例说明了该如何定义DUA输入和输出接口的约束。后面的小节介绍了SRAM和DDR SDRAM接口的时序约束示例。


9.1.1 输入接口(Input Interface)

指定输入时序基本上有两种相互替代的方法:

  • i i i. 以 A C AC AC特性[数字设备的规格分为两部分:直流—恒定值(静态)和交流—变化波形(动态)]的形式指定 D U A DUA DUA输入端的波形;
  • i i ii ii. 指定外部逻辑到输入的路径延迟;

输入端口的波形指定(Waveform Specification at Inputs)

考虑图9-1中所示的输入 A C AC AC特性:输入 C I N CIN CIN在时钟 C L K P CLKP CLKP的上升沿之前 4.3 n s 4.3ns 4.3ns必须保持稳定,并且必须要保持稳定直到时钟上升沿之后 2 n s 2ns 2ns

首先考虑 4.3 n s 4.3ns 4.3ns的约束,给定时钟周期为 8 n s 8ns 8ns(如图9-1所示),这约束了从虚拟触发器(驱动该输入的触发器)到输入端口 C I N CIN CIN的延迟。从虚拟触发器时钟引脚到 C I N CIN CIN的延迟最大为 3.7 n s ( = 8.0 − 4.3 ) 3.7ns(= 8.0-4.3) 3.7ns(=8.04.3), 这样可确保输入 C I N CIN CIN处的数据在上升沿之前 4.3 n s 4.3ns 4.3ns到达。因此, A C AC AC特性的这一部分可以等效地指定为 3.7 n s 3.7ns 3.7ns的最大输入延迟。

A C AC AC特性还指出,输入 C I N CIN CIN在时钟上升沿之后 2 n s 2ns 2ns必须继续保持稳定,这也约束了虚拟触发器的延迟,即从虚拟触发器到输入 C I N CIN CIN的延迟必须至少为 2.0 n s 2.0ns 2.0ns。因此,最小输入延迟指定为 2.0 n s 2.0ns 2.0ns

以下是输入延迟约束:

create_clock -name CLKP -period 8 [get_ports CLKP]
set_input_delay -min 2.0 -clock CLKP [get_ports CIN]
set_input_delay -max 3.7 -clock CLKP [get_ports CIN]

以下是在这些输入条件下设计的路径时序报告。首先是建立时间检查报告:

数据路径中(输入路径)加入了最大路径延迟( 3.7 n s 3.7ns 3.7ns)的设定。建立时间检查保证了 D U A DUA DUA内部的时延小于 4.3 n s 4.3ns 4.3ns且可以锁存到正确的数据。以下是保持时间检查报告:

在保持时间检查中最小输入延迟已经添加上。该检查可确保最早的数据在时钟沿之后的 2 n s 2ns 2ns处才变化,这样就不会覆盖触发器上捕获到的先前数据。

输入的路径延迟指定(Path Delay Specification to Inputs)

已知连接到输入的外部逻辑的路径延迟后,指定输入约束就是一件很简单的事情了。将沿外部逻辑路径到输入的任何延迟全部相加起来,然后使用set_input_delay命令去指定路径延迟。

图9-2给出了一条输入的外部逻辑路径示例。 T c k 2 q T_ck2q Tck2q T c 1 T_c1 Tc1延迟相加就是外部延迟,知道了 T c k 2 q T_ck2q Tck2q T c 1 T_c1 Tc1,就可以直接获得输入延迟,即 T c k 2 q + T c 1 T_ck2q + T_c1 Tck2q+Tc1

外部逻辑的最大和最小路径延迟可以转换为以下输入延迟约束:

create_clock -name RCLK -period 10 [get_ports RCLK]
set_input_delay -max 6.2 -clock RCLK [get_ports INIT]
set_input_delay -min 3.0 -clock RCLK [get_ports INIT]

上述输入延迟约束的时序检查路径报告与8.1节和8.2节中的报告类似。

请注意,在计算设计内部触发器数据引脚的实际到达时间时,将会根据执行的是最大路径(建立时间)检查还是最小路径(保持时间)检查,分别选择将输入延迟的最大值或最小值添加到数据路径延迟中去。


9.1.2 输出接口(Output Interface)

和输入情形类似,同样也有两种指定指令输出时序要求的方式:

  • i i i. 以AC特性的形式指定 D U A DUA DUA输出端的波形;
  • i i ii ii. 指定输出到外部逻辑的路径延迟;

指定输出端口的波形(Output Waveform Specification)

考虑图9-3中所示的输出AC特性:在时钟 C L K P CLKP CLKP的上升沿之前 2 n s 2ns 2ns,输出 Q O U T QOUT QOUT就应保持稳定。同样,输出 Q O U T QOUT QOUT需要保持稳定直到时钟上升沿之后的 1.5 n s 1.5ns 1.5ns为止。通常可从与 Q O U T QOUT QOUT接口的外部模块的建立时间和保持时间要求中获得这些约束值。

以下是对这些要求进行表达的约束:

create_clock -name CLKP -period 6 \\
	-waveform 0 3 [get_ports CLKP
# Setup delay of virtual flip-flop:
set_output_delay -clock CLKP -max 2.0 [get_ports QOUT]
# Hold time for virtual flip-flop:
set_output_delay -clock CLKP -min -1.5 [get_ports QOUT]

最大输出路径延迟指定为了 2.0 n s 2.0ns 2.0ns,这将确保数据 Q O U T QOUT QOUT在时钟沿前 2 n s 2ns 2ns之前允许改变。从虚拟触发器的角度来看,最小输出路径延迟指定为了 − 1.5 n s -1.5ns 1.5ns,这用于确保在输出 Q O U T QOUT QOUT 1.5 n s 1.5ns 1.5ns的保持时间要求。 1.5 n s 1.5ns 1.5ns的保持时间要求就是set_output_delay中指定的最小值 − 1.5 -1.5 1.5

以下是建立时间检查的路径报告:

在建立时间检查中,将从下一个时钟沿减去最大的输出延迟,以确定在 D U A DUA DUA输出处数据需要到达的时间。

接下来是保持时间检查的路径报告:

在保持时间检查中,将从捕获时钟边沿中减去最小的输出延迟( − 1.5 n s -1.5ns 1.5ns),以确定满足保持时间要求的 D U A DUA DUA输出的数据最早到达时间。注意,最小输出延迟为负值很常见。

指定输出端口的路径延迟(External Path Delays for Output)

在这种情况下,将明确指定外部逻辑的路径延迟。请参见图9-4中的示例。

让我们首先检查建立时间,由 T c 2 _ m a x T_c2\\_max Tc2_max T s e t u p T_setup Tsetup可获得最大输出延迟(set_output_delay -max)。为了检查 D U A DUA DUA内部触发器(例如 U F F 0 UFF0 UFF0)和虚拟触发器之间输出路径的建立时间要求,最大输出延迟可指定为 T c 2 _ m a x + T s e t u p T_c2\\_max+T_setup Tc2_max+Tsetup

接下来,让我们检查保持时间,由 T c 2 _ m i n T_c2\\_min Tc2_min T h o l d T_hold Thold可获得最小输出延迟(set_output_delay -min)。由于捕获触发器的保持时间被添加到了捕获时钟路径中,因此最小输出延迟指定为 T c 2 _ m i n − T h o l d T_c2\\_min-T_hold Tc2_minThold

以下是输出延迟约束:

create_clock -name SCLK -period 5 [get_ports SCLK]
# Setup of the external logic (Tc2_max = 2.5,
# Tsetup = 0.6):
set_output_delay -max 3.1 -clock SCLK [get_ports RDY]
# Hold of the external logic (Tc2_min=1.6, Thold=0.15):
set_output_delay -min 1.45 -clock SCLK [get_ports RDY]

这些路径报告与8.1节和8.2节中的报告相似。


9.1.3 时序窗口内的输出变化(Output Change within Window)

set_output_delay命令可用于指定输出信号相对于时钟的最大和最小到达时间。本节考虑特殊情况,当输出只能在相对于时钟沿的时序窗口内发生改变时,可以指定输出延迟约束来验证时序,在验证源同步(source synchronous)接口的时序时尤其常用。

在源同步接口中,时钟也与数据一起输出。在这种情况下,通常时钟和数据之间需要有一个时序关系。例如,可能仅在时钟上升沿附近的特定时序窗口内才能改变输出数据。

源同步接口的时序要求如下图9-5所示:

该时序要求: D A T A Q DATAQ DATAQ的每个比特位(bit)只能在指定的时序窗口中改变,即在时钟上升沿之前 2 n s 2ns 2ns以及时钟上升沿之后 1 n s 1ns 1ns之间。这与前面各节中讨论的输出延迟约束有很大的不同,在前几节中,要求数据引脚在时钟上升沿附近的指定时序窗口中保持稳定。

我们以 C L K M CLKM CLKM为主时钟创建了一个衍生时钟 C L K _ S T R O B E CLK\\_STROBE CLK_STROBE,方便去指定与该接口要求相对应的时序约束。

create_clock -name CLKM -period 6 [get_ports CLKM
create_generated_clock -name CLK_STROBE -source CLKM \\
	-divide_by 1 [get_ports CLK_STROBE]

通过结合建立时间和保持时间检查以及多周期路径约束来指定时序窗口要求。该时序要求对应在单个上升沿(相同的发起沿和捕获沿)处进行建立时间检查。因此,我们将多周期建立时间指定为 0 0 0(默认为 1 1 1)。

set_multicycle_path 0 -setup -to [get_ports DATAQ]

另外,保持时间检查必须在同一时钟沿上执行,因此我们需要将多周期保持时间指定为 − 1 -1 1

set_multicycle_path -1 -hold -to [get_ports DATAQ]

现在,相对于时钟 C L K _ S T R O B E CLK\\_STROBE CLK_STROBE指定输出的时序约束:

set_output_delay -max -1.0 -clock CLK_STROBE \\
	[get_ports DATAQ]
set_output_delay -min +2.0 -clock CLK_STROBE \\
	[get_ports DATAQ]

请注意,输出延迟约束中指定的最小值大于最大值。之所以会这样,是因为在这种情况下,输出延迟约束并不对应于实际的逻辑块。与典型的输出接口(其中输出延迟约束对应于输出处的逻辑块)不同,源同步接口中的set_output_delay约束只是一种机制,用于验证输出是否被限制在了时钟有效沿附近的指定窗口内才能切换 。因此,我们才会有最小输出延迟大于最大输出延迟这样的一种异常情况。

这是针对以上约束的建立时间检查路径报告:

请注意,数据发起沿和捕获沿都为在 0 0 0时刻处的相同时钟沿。该报告显示以上是关于接口分析(上)的主要内容,如果未能解决你的问题,请参考以下文章

安卓开发音频mic口怎么接收20khz的波形

FPGA教程案例69硬件开发板调试9——通过ila在线调试DDS,并通过HDMI接口在显示器上显示正弦波形

wav文件格式分析与详解

接口小节

Java编程思想:通配符(后面有两个小节,研究的不够深入)

Quartus 波形仿真