《静态时序分析实用方法》第九章翻译

第 9 章 接口分析(Interface Analysis) 

重点介绍特殊接口的时序验证,例如源同步和存储器接口,包括 DDR(双数据速率)接口。

        本章描述了各种类型的输入和输出路径的时序分析程序,以及几种常用的接口。还描述了特殊接口(如SDRM)的时序分析和源同步接口(如DDR sdram)的时序分析。 

9.1 IO 接口(IO Interfaces)

         本节给出的示例说明了如何定义DUA(设计的芯片)的输入和输出接口的约束。后面的部分提供了SRAM和DDR SDRAM接口的时序约束示例。 

9.1.1 输入接口(Input Interface)

         大致有两种指定的输入时序的替代方法:

  • 作为 AC 约束的DUA 输入端的波形。
  • 指定外部逻辑到输入的路径延迟。

数字设备的约束分为两部分:DC - 恒定值(静态)和 AC - 变化的波形(动态)。

输入波形约束(Waveform Specification at Inputs)

        考虑图 9-1 所示的输入交流约束。约束是输入CIN在时钟CLKP上升沿前4.3ns稳定,值保持稳定直到时钟上升沿后2ns。 

         首先考虑 4.3ns 约束。给定 8ns 的时钟周期(如图 9-1 所示),此要求映射到从虚拟触发器(驱动此输入的触发器)到输入 CIN 的延迟。从虚拟触发器时钟到 CIN 的延迟必须最多为 3.7ns (= 8.0 - 4.3),最大延迟为 3.7ns。这可确保输入 CIN 处的数据在上升沿之前 4.3ns 到达。因此,AC 约束的这一部分可以等效地指定为 3.7ns 的最大输入延迟。

         AC 约束还指出,输入 CIN 在时钟上升沿后稳定 2ns。这个规范也可以映射到虚拟触发器的延迟,即虚拟触发器到输入CIN的延迟必须至少为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.7ns) 被添加到数据路径。建立时间检查可确保 DUA 内的延迟小于 4.3ns,并且可以锁存正确的数据。接下来是保持时间报告。

         最小输入延迟被添加到保持检查中的数据路径。该检查确保,时钟边沿后 2ns 处的最早数据变化不会覆盖触发器处的先前数据。

输入路径延迟约束(Path Delay Specification to Inputs)

        已知连接到输入的外部逻辑的路径延迟时,指定输入约束是一项简单的任务。添加外部逻辑路径到输入的任何延迟,并使用 set_input_delay 命令指定路径延迟。 

        图9-2示例输入的外部逻辑路径。添加Tck2q和Tc1延迟以获得外部延迟。知道Tck2q和Tc1后,直接获得输入延迟作为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)

        与输入情况类似,指定输出时序要求大致有两种替代方法: 

  • 作为AC约束的DUA输出端所需的波形。
  • 指定外部逻辑的路径延迟。 

输出波形约束(Output Waveform Specification)

         考虑图9-3所示的输出AC约束,输出QOUT应该稳定在时钟CKP的上升沿之前的输出2ns。此外,输出应在时钟上升沿后1.5ns后才改变。这些约束通常从与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.0ns。这将确保数据QOUT在时钟边缘之前的2ns窗口之前发生变化。最小输出路径延迟-1.5ns从虚拟触发器的角度指定了要求,也就是说,为了确保在输出端口 QOUT的1.5ns的保持时间需求。1.5ns的保持时间要求就是set_output_delay中指定的最小值-1.5。

这里是建立时间时序报告。

        从下一个时钟沿减去最大输出延迟,以确定到达 DUA 输出所需的时间。 

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

        从捕获时钟边沿中减去最小输出延迟(-1.5ns),以确定满足保持时间要求的 DUA 输出的最早到达时间。负最小输出延迟要求很常见。 

输出的外部路径延迟( External Path Delays for Output)

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

         让我们首先检查建立时间检查。从Tc2_max和Tsetup获得最大输出延迟(set_output_delay max)建立时间。为了检查DUA内部触发器(如UFF0)和虚拟触发器之间输出路径的建立时间要求,将最大输出延迟指定为Tc2_max + Tsetup。

         接下来,让我们检查保持时间检查。最小输出延迟(set_output_delay min)设置由Tc2_min和Thold获得。由于捕获触发器的保持时间被添加到捕获时钟路径,最小输出延迟被指定为(Tc2_min-Thold)。

        输出上的约束转化为以下内容:

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 命令可用于指定输出信号相对于时钟的最大和最小到达时间。本节考虑指定约束的特殊情况,以验证当输出只能在相对于时钟边沿的时序窗口内更改时的场景。在验证源同步接口的时序时,此要求经常出现。

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

        图 9-5 显示了对源同步接口的示例要求。

        要求是 DATAQ 的每一位只能在时钟上升沿前 2ns 和时钟上升沿后最多 1ns 的指定窗口内发生变化。这与前几节讨论的输出延迟约束完全不同,后者要求数据引脚在时钟上升沿附近的指定时序窗口中保持稳定。 

        我们在主时钟为 CLKM 的 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。

set_multicycle_path 0 -setup -to [get_ports DATAQ]

        此外,保持时间检查必须发生在同一边上,因此我们需要为保持时间检查指定 -1(减一)的多周期。 

set_multicycle_path -1 -hold -to [get_ports DATAQ]

        现在指定关于时钟 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。报告显示 DATAQ 在 0.61ns 处发生变化,而 CLK_STROBE 在 0.09ns 处发生变化。由于 DATAQ 可以在 CLK_STROBE 的 1ns 内发生变化,因此在考虑 0.3ns 的时钟不确定性后有 0.18ns 的裕量。

         这是检查时钟另一侧边界的保持路径报告。

         通过最小路径分析,DATAQ 到达时间为0.48ns,而 CLK_STROBE 到达时间为 0.09ns。由于要求数据在 CLK_STROBE 之前最多可以更改 2ns 限制,因此在考虑 50ps 的时钟不确定性后,我们得到 2.35ns 的裕量。

        源同步接口的另一个示例如图 9-6 所示。在这种情况下,输出时钟是主时钟的 2 分频,并且是数据同步接口的一部分。 POUT 被限制在 QCLKOUT 之前不早于 2ns 且不晚于 QCLKOUT 之后的 1ns 切换。

        这是约束。 

create_clock -name CLKM -period 6 [get_ports CLKM}
create_generated_clock -name QCLKOUT -source CLKM -divide_by 2 [get_ports QCLKOUT]
set_multicycle_path 0 -setup -to [get_ports POUT]

set_multicycle_path -1 -hold -to [get_ports POUT]

set_output_delay -max -1.0 -clock QCLKOUT [get_ports POUT]
set_output_delay -min +2.0 -clock QCLKOUT [get_ports POUT]

         下面是建立时间时序报告。

         请注意,多周期约束已将建立时间检查移回一个周期,以便在同一时钟沿执行检查。输出 POUT 在 0.61ns处 变化,而时钟 QCLKOUT 在 0.27ns处 变化。鉴于要求在 1ns 内改变,并考虑 0.30ns 的时钟不确定性,我们得到 0.36ns 的裕量。

        这是检查切换窗口上的其他约束的保持路径报告。

         路径报告显示,数据在 QCLKOUT 时钟边沿之前 2ns 的允许窗口内发生变化,并且存在 2.17ns 的裕量。

9.2 SRAM 接口(SRAM Interface)

         SRAM 接口中的所有数据传输仅在时钟的有效边沿发生。所有信号都由 SRAM 锁存或仅在有效时钟沿由 SRAM 启动。构成 SRAM 接口的信号包括命令、地址和控制输出总线 (CAC)、双向数据总线 (DQ) 和时钟。在写周期中,DUA 将数据写入 SRAM,数据和地址从 DUA 传输到 SRAM,并在有效时钟沿锁存在 SRAM 中。在读周期中,地址信号仍然从 DUA 到 SRAM,而从 SRAM 输出的数据信号到 DUA。因此地址和控制是单向的,从 DUA 到 SRAM,如图 9-7 所示。 DLL(delay-locked loop延迟锁定环 )通常放置在时钟路径中。 DLL 允许延迟时钟(如有必要),以解决由于 PVT 和其他外部变化引起的跨接口的各种信号的延迟变化。通过考虑这些变化,对于往返 SRAM 的读周期和写周期的数据传输都有很好的时序余量。

        图 9-8 显示了典型 SRAM 接口的交流特性。请注意,图9-8中的数据输入和数据输出是指SRAM看到的方向。来自SRAM的Data out是DUA的输入,进入SRAM的Data in是DUA的输出。

# First define primary clock at the output of UPLL0:
create_clock -name PLL_CLK -period 5 [get_pins UPLL0/CLKOUT]
# Next define a generated clock at clock output pin of DUA:
create_generated_clock -name SRAM_CLK \
-source [get_pins UPLL0/CLKOUT] -divide_by 1 \
[get_ports SRAM_CLK]
# Constrain the address and control:
set_output_delay -max 1.5 -clock SRAM_CLK \
[get_ports ADDR[0]]
set_output_delay -min -0.5 -clock SRAM_CLK \
[get_ports ADDR[0]]
. . .
# Constrain the data going out of DUA:
set_output_delay -max 1.7 -clock SRAM_CLK [get_ports DQ[0]]
set_output_delay -min -0.8 -clock SRAM_CLK [get_ports DQ[0]]
# Constrain the data coming into the DUA:
set_input_delay -max 3.2 -clock SRAM_CLK [get_ports DQ[0]]
set_input_delay -min 1.7 -clock SRAM_CLK [get_ports DQ[0]]

         这是地址引脚的代表性建立时间路径报告。

         建立时间检查验证地址信号是否在 SRAM_CLK 边沿之前 1.5ns处(存储器地址引脚的设置时间)到达存储器。

         这是同一引脚的保持时间时序路径报告。

        保持时间检查验证地址信号是否在时钟边沿后 0.5ns 内保持稳定。

9.3 DDR SDRAM 接口(DDR SDRAM Interface)

        DDR SDRAM 接口可以看作是上一节描述的 SRAM 接口的扩展。就像SRAM接口一样,有两条主要的总线。图 9-9 说明了 DUA 和 SDRAM 之间的总线连接和总线方向。第一个总线由命令、地址和控制引脚(通常称为 CAC)组成,使用标准方案在内存时钟的一个时钟沿(或每个时钟周期一次)发送信息。两条双向总线由数据总线 DQ 和数据选通 DQS 组成。 DDR 接口的主要区别在于双向数据选通 DQS。为一组数据信号提供 DQS 选通。这允许数据信号(每字节一个或每半字节一个)与选通信号具有紧密匹配的时序;如果时钟对于整个数据总线是通用的,那么这种紧密匹配对于时钟信号可能是不可行的。双向选通信号 DQS 用于读取和写入操作。选通用于在其两个边沿(下降沿和上升沿或双倍数据速率)上捕获数据。在SDRAM的读模式下,DQ总线源同步于数据选通DQS(而不是存储器时钟),即DQ和DQS从SDRAM发出时是对齐的。在另一个方向,即 DUA 发送数据时,DQS 相移 90 度。请注意,数据 DQ 和选通 DQS 边沿均源自 DUA 内的存储器时钟。

         如上所述,对于一组 DQ 信号(四位或八位)有一个数据选通 DQS。这样做是为了使 DQ 和 DQS 的所有位之间的偏斜平衡要求更容易。例如,一个字节一个DQS,一组9个信号(8个DQ和一个DQS)需要平衡,这比用时钟平衡72位数据总线要容易得多。

         上面的描述不是对 DDR SDRAM 接口的完整解释,尽管足以解释这种接口的时序要求。

        图 9-10 显示了典型 DDR SDRAM 接口的 CAC 总线(在 DUA 处)的交流特性。这些建立和保持要求映射到 CAC 总线的以下接口约束。

# DDRCLK is typically a generated clock of the PLL
# clock internal to DUA:
create_generated_clock -name DDRCLK \
    -source [get_pins UPLL0/CLKOUT]\
    -divide_by 1 [get_ports DDRCLK]

# Set output constraints for each bit of CAC:
set_output_delay -max 0.75 -clock DDRCLK [get_ports CAC]
set_output_delay -min -0.75 -clock DDRCLK [get_ports CAC]

         在某些情况下,地址总线可能会驱动比时钟大得多的负载,尤其是在与无缓冲存储器模块接口时。在这种情况下,地址信号比时钟信号具有更大的存储器延迟,这种延迟差异可能导致与图 9-10 中描述的不同的 AC 约束。

         DQS 和 DQ 的对齐对于读和写周期是不同的。这将在以下小节中进一步探讨。

9.3.1 读取周期(Read Cycle)

        在读周期中,存储器输出的数据与 DQS 边沿对齐。波形如图 9-11 所示;图中的 DQ 和 DQS 代表存储器引脚上的信号。数据 (DQ) 由存储器在 DQS 的每个边沿发出,并且 DQ 转换与 DQS 的下降沿和上升沿边沿对齐。

         由于 DQS 选通信号和 DQ 数据信号名义上彼此对齐,因此 DUA 内的存储器控​​制器通常使用 DLL(或任何替代方法来实现四分之一周期延迟)来延迟 DQS,从而对齐延迟的DQS 边缘与数据有效窗口的中心。

         即使 DQ 和 DQS 名义上在内存中对齐,但 DQ 和 DQS 选通信号可能不再在 DUA 内的内存控制器上对齐。这可能是由于 IO 缓冲器之间的延迟差异以及 PCB 互连走线的差异等因素造成的。

        图9-12中为基本的数据读取原理图。上升沿触发的触发器在DQS_DLL的上升沿捕获数据DQ,而下降沿触发的触发器在DQS_DLL的下降沿捕获数据DQ。虽然图中的DQ路径上没有DLL,但某些设计可能在数据路径上也会放置一个DLL。这样可以用来延迟信号(以解决由于PVT或互连走线长度或其它差异引起的变化),以便可以在数据有效窗口的中间准确地采样数据。

         为了约束控制器上的读取接口,在 DQS 上定义了一个时钟,并在与时钟相关的数据上指定了输入延迟。

create_clock -period 5 -name DQS [get_ports DQS]

         这假设内存读取接口以 200 MHz 运行(相当于 400 Mbps,因为数据在两个时钟边沿传输),并且对应于每 2.5ns 采样一次的 DQ 信号。由于数据是在两条边上捕获的,因此需要为每条边明确指定输入约束。

# For rising clock edge:
set_input_delay 0.4 -max -clock DQS [get_ports DQ]
set_input_delay -0.4 -min -clock DQS [get_ports DQ]
# This is with respect to clock rising edge (default).
# Similarly for falling edge:
set_input_delay 0.35 -max -clock DQS -clock_fall \
[get_ports DQ]
set_input_delay -0.35 -min -clock DQS -clock_fall \
[get_ports DQ]
# The launch and capture are on the same edge:
set_multicycle_path 0 -setup -to UFF0/D
set_multicycle_path 0 -setup -to UFF5/D

        输入延迟命令指定了DUA引脚上DQ和DQS沿之间的延迟差,即使这两个信号通常是从存储器中同时输出的,但由于不同存储器的规格,在时序上仍会存在偏差。因此,DUA内的控制器设计应考虑到两个信号之间可能存在偏斜(skew)。以下是两个触发器建立时间检查的路径报告。假设捕获触发器的建立时间要求为0.05ns、保持时间要求为0.03ns,且DLL延迟设置为1.25ns,即四分之一周期 。

         保持时间时序报告。

9.3.2 写周期(Write Cycle)

        在写周期中,DQS 边沿与来自 DUA 内的存储器控​​制器的 DQ 信号有四分之一周期的偏移,因此 DQS 选通可用于捕获存储器中的数据。

        图9-13显示了存储器引脚上所需的波形,在存储器引脚处,DQS信号必须与DQ数据窗口的中心对齐。请注意,仍然是由于IO缓冲器延迟不匹配或者PCB互连走线的变化,仅在存储控制器(DUA内部)中对齐DQ和DQS还不足以使这些信号在SDRAM存储器引脚处真正的对齐。因此,DUA通常在写周期中使用额外的DLL去进行控制,以实现DQS和DQ信号之间所需的四分之一周期偏移(offset)。

         约束此模式的输出取决于在控制器中生成时钟的方式。我们考虑两种情况。

情况 1:内部 2x 时钟(Case 1: Internal 2x Clock)

        如果有两倍于 DDR 时钟频率的内部时钟可用,则输出逻辑可以类似于图 9-14 中所示的逻辑。 DLL 提供了一种机制,可在必要时偏移 DQS 时钟,以便满足存储器引脚上的建立和保持要求。在某些情况下,可能不使用 DLL - 而是使用负沿触发器来获得 90 度偏移。

        对于图 9-14 所示的场景,输出可以被约束为: 

# 166MHz (333Mbps) DDR; 2x clock is at 333MHz:
create_clock -period 3 [get_ports CLK2X]
# Define a 1x generated clock at the output of flip-flop:
create_generated_clock -name pre_DQS -source CLK2X \
-divide_by 2 [get_pins UFF1/Q]
# Create the delayed version as DQS assuming 1.5ns DLL delay:
create_generated_clock -name DQS -source UFF1/Q \
-edges {1 2 3} -edge_shift {1.5 1.5 1.5} [get_ports DQS]

         DQ 输出引脚的时序必须相对于生成的时钟 DQS 进行约束。

        假设DDR SDRAM的DQ和DQS管脚之间的设置要求分别为DQ的上升沿和下降沿为0.25ns和0.4ns。同样,假设 DQ 引脚的上升沿和下降沿需要 0.15ns 和 0.2ns 的保持时间。 DQS 输出的 DLL 延迟已设置为四分之一周期,即 1.5ns。波形如图 9-15 所示。

set_output_delay -clock DQS -max 0.25 -rise [get_ports DQ]
# Default above is rising clock.
set_output_delay -clock DQS -max 0.4 -fall [get_ports DQ]
# If setup requirements are different for falling edge of DQS,
# that can be specified by using the -clock_fall option.
set_output_delay -clock DQS -min -0.15 -rise DQ
set_output_delay -clock DQS -min -0.2 -fall DQ

         这是通过输出 DQ 的建立时间报告。建立时间检查是从 0ns 时 CLK2X 的上升沿开始,在 1.5ns 时启动 DQ 到 DQS 的上升沿。

        请注意,上述报告中的四分之一周期延迟出现在了时钟DQS上升沿的第一行中,而不是在DLL实例UDLL0的那行中。这是因为DLL延迟已被建模为了衍生时钟DQS定义的一部分,而不是DLL时序弧中的一部分。

        以下是通过输出DQ路径的保持时间检查报告。保持时间检查从3ns处发起DQ的时钟CLK2X上升沿到1.5ns处的DQS前一个上升沿。

情况 2:内部 1x 时钟(Case 2: Internal 1x Clock)

         当只有内部 1x 时钟可用时,输出电路通常类似于图 9-16 中所示的电路。      

         有两个触发器用于生成 DQ 数据。第一个触发器NEGEDGE_REG由时钟CLK1X的负沿触发,第二个触发器POSEDGE_REG由时钟CLK1X的正沿触发。每个触发器锁存适当的边沿数据,然后使用 CLK1X 作为多路复用器选择多路复用输出该数据。当 CLK1X 为高电平时,触发器 NEGEDGE_REG 的输出被送到 DQ。当 CLK1X 为低电平时,触发器 POSEDGE_REG 的输出被送到 DQ。因此,数据在时钟 CLK1X 的两个边沿到达输出 DQ。请注意,每个触发器都有半个周期将数据传播到多路复用器的输入,以便输入数据在被 CLK1X 边沿选择之前在多路复用器处准备就绪。相关波形如图 9-17 所示。

# Create the 1x clock:
create_clock -name CLK1X -period 6 [get_ports CLK1X]
# Define a generated clock at DQS. It is a divide-by-1 of
# CLK1X. Assume a quarter-cycle delay of 1.5ns on UDLL0:
create_generated_clock -name DQS -source CLK1X \
-edges {1 2 3} -edge_shift {1.5 1.5 1.5} [get_ports DQS]
# Define a setup check of 0.25 and 0.3 between DQ and DQS
# pins on rising and falling edge of clock:
set_output_delay -max 0.25 -clock DQS [get_ports DQ]
set_output_delay -max 0.3 -clock DQS -clock_fall \
[get_ports DQ]
set_output_delay -min -0.2 -clock DQS [get_ports DQ]
set_output_delay -min -0.27 -clock DQS -clock_fall \
[get_ports DQ]

         建立和保持检查验证从多路复用器到输出的时序。设置检查之一是从多路复用器输入处的 CLK1X 上升沿(启动 NEGEDGE_REG 数据)到 DQS 的上升沿。另一个设置检查是从多路复用器输入(启动 POSEDGE_REG 数据)处的 CLK1X 下降沿到 DQS 的下降沿。类似地,保持检查是从相同的 CLK1X 边沿(如设置检查)到 DQS 的前一个下降沿或上升沿。

        这是通过端口 DQ 的建立时间检查报告。检查在选择 NEGEDGE_REG 输出的 CLK1X 的上升沿和 DQS 的上升沿之间进行。

         这是通过端口 DQ 的另一个设置时序检查报告。此设置检查在选择 POSEDGE_REG 输出的 CLK1X 下降沿和 DQS 下降沿之间进行。

        这是通过端口 DQ 的保持时间检查报告。检查在 CLK1X 的上升沿和 DQS 的前一个下降沿之间进行。 

        这是通过端口 DQ 的另一个保持时序检查报告。该检查在 CLK1X 的下降沿和 DQS 的前一个上升沿之间进行。 

         虽然上述接口时序分析忽略了任何负载对输出的影响,但可以指定额外的负载(使用 set_load)以获得更高的准确性。然而,STA 可以通过电路模拟来补充,以实现如下所述的稳健 DRAM 时序。

        DDR 接口的 DQ 和 DQS 信号通常在读取和写入模式下使用 ODT(On-Die Termination),以减少由于 DRAM 和 DUA 的阻抗不匹配引起的任何反射。存在 ODT 终端时,用于 STA 的时序模型无法提供足够的精度。设计人员可以使用另一种机制,例如详细的电路级模拟来验证 DRAM 接口的信号完整性和时序。

9.4 视频 DAC 接口(Interface to a Video DAC)

        考虑图 9-18,它显示了一个典型的 DAC(Digital to Analog Converter)接口,其中高速时钟正在将数据传输到 DAC 的低速时钟接口。 

         时钟 DAC_CLK 是时钟 XPLL_CLK 的 2 分频。 DAC 建立和保持检查与 DAC_CLK 的下降沿有关。

        在这种情况下,建立时间被视为单周期 (XPLL_CLK) 路径,即使从较快时钟域到较慢时钟域的接口可以在必要时指定为多周期路径。如图 9-18 所示,XPLL_CLK 的上升沿发射数据,DAC_CLK 的下降沿捕获数据。这是建立时间报告。

        请注意,接口是从较快的时钟到较慢的时钟,因此如有必要,可以将其设置为双周期路径。

        这是保持时间报告。 

        保持时间检查是在建立时间捕获沿之前一个周期完成的。在这种接口情况下,最关键的保持时间检查是在发起沿和捕获沿重合处执行的,这显示在保持时序报告中。 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值