我是靠谱客的博主 幽默信封,最近开发中收集的这篇文章主要介绍VIVADO时序约束之Output Delay(set_output_delay)前言一、output delay输出信号在后级模块中需要在时钟沿之前提前多长时间准备好二、set_output_delay语法三、用法举例四、实操演示五、总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

前言

I/O Delay约束主要有两个命令:set_input_delay和set_output_delay。

I/O Delay约束的主要目的同时钟约束一样,是告诉编译器,外部输入输出信号与参考时钟之间的相位关系,便于综合器能够真实和准确的对IO接口的信号进行时序分析,同时也有利于综合器的布局布线。

注意:I/O Delay约束和 IDELAYE、ODELAYE原语是完全不同的,前者是用于编译器进行时序分析的,后者是对数据进行延时的(由于建立时间和保持时间不满足,导致在接收数据有错时,需要对数据进行延迟,以满足建立时间和保持时间)。换言之,前者是时序分析手段,后者是电路调试手段。

一、output delay

输出信号在后级模块中需要在时钟沿之前提前多长时间准备好

"set_output_delay"命令是用于指定FPGA输出端口(PIN)的数据输出相对于设计中参考时钟边沿的延迟。 输出延迟值以ns为指定单位,可以为正值,也可以为负值,具体取决于接收设备接口处的时钟和数据的相对相位关系。
这里特别强调的是FPGA芯片的内部IOB输出到封装PIN是有pin delay的,但是set_output_delay指定的延迟是不包含pin delay的值。即set_output_delay所指的延迟是下图中td_bd+Tsu_hd-tc_bd的值。
在这里插入图片描述

说明:
上图为IO接口的时序分析模型,模型可分为3部分,分别是上游芯片(这里主要指FPGA),PCB走线,下游芯片。上图中的时序参数含义分别如下:

时序参数含义
TcoFPGA内部D触发器的保持时间,即时钟上升沿到数据输出有效所需的时间
Tc_dFPGA内部ODDR的保持时间,一般FPGA设计中,输出时钟信号,通常采用ODDR模块
pin_delayFPGA的封装引脚pin到内部IOB的延迟
Td_bd数据在PCB上的走线延时
Tc_bd时钟在PCB上的走线延时
Tsu_hd下游芯片所需的建立时间/保持时间

二、set_output_delay语法

set_output_delay  [-clock <args>] [-reference_pin <args>] [-clock_fall] [-rise]
                  [-fall] [-max] [-min] [-add_delay]
                  [-network_latency_included] [-source_latency_included]
                  [-quiet] [-verbose] <delay> <objects>
选项含义
-clock相对时钟,默认使用上升沿,也可以使用-clock_fall指定使用下降沿
-reference_pin指定延迟与出现在指定引脚或端口上的时钟的有效边沿有关,而不是与时钟有关。
-clock_fall指定延迟是相对于时钟的下降沿
-rise指定应用于指定端口上的上升转换的输入延迟。 默认是对上升和下降转换应用延迟(用于指定数据的,非时钟的)。
-fall指定应用于指定端口上的下降转换的输入延迟。 默认是对上升和下降转换应用延迟(用于指定数据的,非时钟的)。
-max表示指定的输入延迟仅在计算最大(最长)路径延迟时使用(建立时间)。
-min表示指定的输入延迟仅在计算最小(最短)路径延迟时使用(保持时间)。
-add_delay将指定的延迟约束添加到端口,以与端口上已定义的任何其他 set_input_delay 约束共存。 默认行为是替换现有的延迟。
-network_latency_included表示参考时钟的时钟网络延迟包含在延迟值中。 除非指定的输入或输出延迟值包括源延迟或网络延迟,否则 Vivado 时序分析器会考虑在时钟延迟之后到达捕获触发器的时钟边沿。
-source_latency_included指示相对时钟的源延迟包含在指定的延迟值中。
-quiet忽略命令错误
-verbose命令执行期间暂停消息限制
delay延时值
objects端口列表

三、用法举例

示例一: 创建一个时钟周期为10ns的sysClk 时钟,然后设定端口DOUT相对于端口输入时钟CLK0上升沿的最大和最小 输出延迟为6ns:

create_clock -name sysClk -period 10 [get_ports CLK0]
set_output_delay -clock sysClk 6 [get_ports DOUT]

示例二: 创建一个虚拟时钟clk_port_virt ,周期为10ns,然后设定端口DOUT相对于虚拟时钟clk_port_virt 下降沿的最大和最小输出延迟为6ns:

 create_clock -name clk_port_virt -period 10
 set_output_delay -clock_fall -clock clk_port_virt 6 [get_ports DOUT]

示例三: 定义输出端口DOUT相对于时钟cpuClk的输出延迟为5ns,其中该延时值包括时钟cpuClk传输中时钟网络的延迟:

set_output_delay 5.0 -clock [get_clocks cpuClk] -network_latency_included [get_ports DOUT]  

示例四: DDR数据的input delay约束:

create_clock -name clk_ddr -period 6 [get_ports DDR_CLK_IN]
set_output_delay -clock clk_ddr -max 2.1 [get_ports DDR_OUT]
set_output_delay -clock clk_ddr -max 1.9 [get_ports DDR_OUT] -clock_fall -add_delay
set_output_delay -clock clk_ddr -min 0.9 [get_ports DDR_OUT]
set_output_delay -clock clk_ddr -min 1.1 [get_ports DDR_OUT] -clock_fall -add_delay

示例五: 对STARTUPE3 内部pin(UltraScale+器件)的output delay约束:

//重命名STARTUP/CCLK自动衍生的时钟名为clk_sck,时钟源为axi_quad_spi_0/ext_spi_clk,频率为时钟源的1/2
create_generated_clock -name clk_sck -source [get_pins -hierarchical *axi_quad_spi_0/ext_spi_clk] [get_pins STARTUP/CCLK] -edges {3 5 7}
set_input_delay -clock clk_sck -max 7 [get_pins STARTUP/DATA_IN[*]] -clock_fall
set_input_delay -clock clk_sck -min 1 [get_pins STARTUP/DATA_IN[*]] -clock_fall

四、实操演示

以TLK2711为例,利用vivado的时序约束向导进行input delay约束,下图为硬件环境模型:
在这里插入图片描述
通过查阅tlk2711的芯片资料手册,可以获取芯片并行数据输入接口Q和随路时钟ODCK之间的时序关系:
在这里插入图片描述
在这里插入图片描述
时序约束中假设PCB布线等长时间差很小,可以忽略不计,由上可知在125MHz的频率下,下游芯片所需的建立时间为1.5ns,保持时间为0.4ns,结合vivado的时序约束向导中的output delays 页面,进行输出延时约束:
进行时序约束前,需要约束一个forward clocks:

create_generated_clock -name tlk2711_txclk -source [get_pins {ODDR_inst/C}] -divide_by 1 [get_ports {tlk2711_txclk}]

然后进行output约束:
在这里插入图片描述
vivado的时序约束向导中的input delays约束方法2:
在这里插入图片描述
XDC约束语法如下:

set_output_delay -clock [get_clocks {tlk2711_txclk}] -min -add_delay -0.4 [get_ports {tlk2711_txdata[*]}]
set_output_delay -clock [get_clocks {tlk2711_txclk}] -max -add_delay 1.5 [get_ports {tlk2711_txdata[*]}]

五、总结

min = - hold time
max = setup time
max - min = 数据稳定时间

最后

以上就是幽默信封为你收集整理的VIVADO时序约束之Output Delay(set_output_delay)前言一、output delay输出信号在后级模块中需要在时钟沿之前提前多长时间准备好二、set_output_delay语法三、用法举例四、实操演示五、总结的全部内容,希望文章能够帮你解决VIVADO时序约束之Output Delay(set_output_delay)前言一、output delay输出信号在后级模块中需要在时钟沿之前提前多长时间准备好二、set_output_delay语法三、用法举例四、实操演示五、总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(56)

评论列表共有 0 条评论

立即
投稿
返回
顶部