FPGA设计时序约束二、输入延时与输出延时

这篇具有很好参考价值的文章主要介绍了FPGA设计时序约束二、输入延时与输出延时。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、背景

二、set_input_delay

2.1 set_input_delay含义

2.2 set_input_delay参数说明

2.3 使用样例

三、set_output_delay

3.1 set_output_delay含义

3.2 set_output_delay参数说明

3.3 使用样例

四、样例工程

4.1 工程代码

4.2 时序报告

五、参考资料


一、背景

    为了在设计中准确的模拟信号从FPGA传输到外部或外部信号进入到FPGA端口的时序,在设计中需要给定输入端口和输出端口的延时信息,因为vivado仅仅能够识别边界内部的时序。

二、set_input_delay

    FPGA端口和外部的时延约束命令有两种,输入时延命令set_input_delay和输出时延命令set_output_delay。

2.1 set_input_delay含义

    输入时延约束指定了设计中输入时钟端口的输入时延,以应用板为例,输入时延表示在数据从外部芯片通过应用板到达FPGA的输入引脚和应用板的时钟相位存在差异。因此,输入时延值可以是正数也可以是复数,正负值取决于数据信号和时钟信号在外部芯片与FPGA接口处的相对相位。

    注:在Ultrascale系列的器件中,输入时延也可以设置到内部的数据引脚上。

2.2 set_input_delay参数说明

打开vivado中set input delay的设置窗口,有三种可选项:Rise/Fall,Min/Max,Add delay。

FPGA设计时序约束二、输入延时与输出延时,FPGA所知所见所解,fpga开发,时序约束,set_input_delay,set_outputdelay,vivado

Clock:指定约束引脚的同步时钟,必须是事先定义的主时钟或虚拟时钟。

Objects:用于指定约束的目标端口。

Delay value:指定约束的时延值。

Delay value is relative to clock edge:指定输入时延值是相对于同步时钟的边沿,可以是上升沿rise或下降沿fall,默认值为上升沿

Delay value already includes latencies of the specified clock:设置延时值是否包含指定时钟(包括源时钟,网络时钟,源时钟/网络时钟)的潜在因素

Rise/Fall:指定约束信号相对时钟约束的延时边沿,可为上升沿rise或下降沿fall

Min/Max:Min为最小时延值,作用于hold/removal,Max为最大时延值,作用于setup/removal,如果Min/Max都未选择,表示最大时延和最小时延值相等

Add delay information to the existing delay:用于输入端口关联超过一个时钟沿的场景,例如,DDR接口。

2.3 使用样例

a) 设定一个输入延时,相对于时钟sysclk,最大时延和最小时延相等

 create_clock -name sysclk -period 10 [get_ports CLK0]
set_input_delay -clock sysclk 2 [get_ports DIN]

b)设定一个输入延时,同步时钟为虚拟时钟

create_clock -name clk_port_virt -period 10       #create_clock不指定object时创建的为虚拟时钟
set_input_delay -clock clk_port_virt 2 [get_ports DIN]

c)设定一个输入延时,同步时钟为sysclk,最大时延值和最小时延值不同

create_clock -name sysclk -period 10 [get_ports CLK0]
set_input_delay -clock sysclk -max 4 [get_ports DIN]
set_input_delay -clock sysclk -min 1 [get_ports DIN]

d)在两个IO端口间是纯组合逻辑,输入端口为DIN,同步时钟为虚拟时钟

create_clock -name sysClk -period 10
> set_input_delay -clock sysClk 4 [get_ports DIN]

 e)输入时延设置到DDR的数据输入引脚DDR_IN ,数据被clk_ddr的上升沿和下降沿触发,到FPGA内部FF的数据输入端口,对上升沿和下降沿都敏感                                                                                                                                            

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

f)设置输入时延到startupe3的内部引脚,时延路径从startupe3到组合逻辑单元(针对Ultrascale器件)

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

三、set_output_delay

3.1 set_output_delay含义

    ​set_output_delay约束指定了关联时钟沿的输出端口的输出路径时延,输出时延可理解为在数据从FPGA的输出端口到达其他芯片和关联的参考时钟间的相位差。输出时延值可以是正数也可以是复数,正负值取决于数据信号和时钟信号在外部芯片与FPGA接口处的相对相位。

3.2 set_output_delay参数说明

打开set_output_delay窗口,与set_input_delay窗口类似,相关配置项的作用也相同。

FPGA设计时序约束二、输入延时与输出延时,FPGA所知所见所解,fpga开发,时序约束,set_input_delay,set_outputdelay,vivado

3.3 使用样例

a) 设定一个输出时延,同步时钟为sysClk,最大时延和最小时延值相同

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

b) 设定输出时延,同步时钟为虚拟时钟

create_clock -name clk_port_virt -period 10    #创建虚拟时钟
set_output_delay -clock clk_port_virt 6 [get_ports DOUT]

c)设置输出时延,同步时钟为DDR时钟,最大时延和最小时延值有多个

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

上述约束的效果如下图,时钟上升沿的时延范围为0.9-2.1ns,下降沿的时延范围为1.1-1.9ns

FPGA设计时序约束二、输入延时与输出延时,FPGA所知所见所解,fpga开发,时序约束,set_input_delay,set_outputdelay,vivado

d)设置输出时延到STARTUPE3(对于Ultrascale+器件)的pins,从逻辑单元到STARTUPE3

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_output_delay -clock clk_sck -max 6 [get_pins STARTUP/DATA_OUT[*]]   #设置输出时延最大值
set_output_delay -clock clk_sck -min 1 [get_pins STARTUP/DATA_OUT[*]]	 #设置输出时延最小值

四、样例工程

4.1 工程代码

module timing(clk1,clk2,clk3,ce,d1,d2,out );
input clk1,clk2,clk3,ce,d1,d2;
output out;
reg ff1,ff2,ff3;
wire comb;
always@(posedge clk1,negedge ce)
begin
    if(!ce)
    ff1<=0;
    else begin
        ff1<=d1;
    end
end
always@(posedge clk2,negedge ce)
begin
    if(!ce)
    ff2<=0;
    else begin
        ff2<=d2;
    end
end
assign comb=ff1*ff2;
always@(posedge clk3,negedge ce)
begin
    if(!ce)
    ff3<=0;
    else begin
        ff3<=comb;
    end
end
assign out=ff3;
endmodule

约束文件,4、5、6为set_input_delay和set_output_delay

1、create_clock -period 10.000 -name create_clk1 -waveform {0.000 5.000} [get_ports clk1]  #创建主时钟create_clk1,约束到clk1
2、create_generated_clock -name gen_clk1 -source [get_ports clk1] -divide_by 2 -add -master_clock create_clk1 [get_pins ff2_reg/C]   #创建生成时钟gen_clk1,约束到FF2的clk端口
3、create_generated_clock -name gen_clk2 -source [get_ports clk1] -edges {1 3 5} -edge_shift {1.000 0.000 0.000} -add -master_clock create_clk1 [list [get_pins ff2_reg/C] [get_pins ff3_reg/C]] #创建生成时钟gen_clk2,约束到FF3的clk端口
4、set_input_delay -clock [get_clocks create_clk1] -rise -min 0.800 [get_ports d1] 
5、set_input_delay -clock [get_clocks create_clk1] -rise -max 1.200 [get_ports d1]#设置输入端口d1的输入时延最大值1.2ns和最小值0.8ns,
6、set_output_delay -clock [get_clocks create_clk1] -clock_fall -rise -max -add_delay 0.800 [get_ports out] #设置输出时延到输出端口out,同步时钟为create_clk1,输出延时0.8ns

网表连接图,FF1_reg和ff2_reg的输出经过LUT2输出到ff3_reg,对应的时钟分别为clk1,clk2,clk3。

FPGA设计时序约束二、输入延时与输出延时,FPGA所知所见所解,fpga开发,时序约束,set_input_delay,set_outputdelay,vivado

4.2 时序报告

执行Flow Navigator中综合流程下的report timing summary查看时序报告

FPGA设计时序约束二、输入延时与输出延时,FPGA所知所见所解,fpga开发,时序约束,set_input_delay,set_outputdelay,vivado

查看约束到create_clk1的input_delay

FPGA设计时序约束二、输入延时与输出延时,FPGA所知所见所解,fpga开发,时序约束,set_input_delay,set_outputdelay,vivado

input_delay中min时延值对应hold路径

FPGA设计时序约束二、输入延时与输出延时,FPGA所知所见所解,fpga开发,时序约束,set_input_delay,set_outputdelay,vivado

输出时延报告,设置的约束值为0.8ns,符合预期

FPGA设计时序约束二、输入延时与输出延时,FPGA所知所见所解,fpga开发,时序约束,set_input_delay,set_outputdelay,vivado

五、参考资料

用户手册:ug903-vivado-using-constraints-en-us-2022.2.pdf

链接:https://pan.baidu.com/s/17AK_-J4wRXiFLtLTorlrwg?pwd=mylt 

提取码:mylt文章来源地址https://www.toymoban.com/news/detail-729685.html

到了这里,关于FPGA设计时序约束二、输入延时与输出延时的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA设计时序约束三、设置时钟组set_clock_groups

    目录 一、背景 二、时钟间关系 2.1 时钟关系分类 2.2 时钟关系查看 三、异步时钟组 3.1 优先级 3.2 使用格式 3.3 asynchronous和exclusive 3.4 结果示例 四、参考资料     Vivado中时序分析工具默认会分析设计中所有时钟相关的时序路径,除非时序约束中设置了时钟组或false路径。使

    2024年02月02日
    浏览(47)
  • FPGA时序分析与时序约束(四)——时序例外约束

    目录 一、时序例外约束 1.1 为什么需要时序例外约束 1.2 时序例外约束分类 二、多周期约束 2.1 多周期约束语法 2.2 同频同相时钟的多周期约束 2.3 同频异相时钟的多周期约束 2.4 慢时钟域到快时钟域的多周期约束 2.5 快时钟域到慢时钟域的多周期约束 三、虚假路径约束 四、最

    2024年01月20日
    浏览(44)
  • FPGA时序约束与分析(1) --- 时序约束概述

    本系列参考文献 — FPGA时序与约束分析-吴厚航 FPGA从综合到实现需要的过程如下:synth_design - opt_design - place-design - phys_opt_design - route_design 1、时序约束的理解 2、时序约束的基本路径 3、时序约束的步骤 4、时序约束的主要方法 5、查看相关时序信息 FPGA的设计约束分为物理约束

    2024年02月16日
    浏览(34)
  • FPGA时序分析与时序约束(二)——时钟约束

    目录 一、时序约束的步骤 二、时序网表和路径 2.1 时序网表 2.2 时序路径  三、时序约束的方式 三、时钟约束 3.1 主时钟约束 3.2 虚拟时钟约束 3.3 衍生时钟约束 3.4 时钟组约束 3.5 时钟特性约束 3.6 时钟延时约束         上一章了解了时序分析和约束的很多基本概念(FP

    2024年02月03日
    浏览(71)
  • FPGA时序约束--实战篇(Vivado添加时序约束)

    前面几篇文章已经详细介绍了FPGA时序约束基础知识以及常用的时序约束命令,相信大家已经基本掌握了时序约束的方法。 今天介绍一下,如何在Vivado中添加时序约束,Vivado添加约束的方法有3种:xdc文件、时序约束向导(Constraints Wizard)、时序约束编辑器(Edit Timing Constrain

    2024年02月10日
    浏览(51)
  • FPGA时序分析与约束(2)——时序电路时序

            在之前的内容中,我们介绍了组合电路的时序问题和可能导致的毛刺,强烈推荐在阅读前文的基础上再继续阅读本文, 前文链接:FPGA时序分析与约束(1)——组合电路时序         这篇文章中,我们将继续介绍FPGA时序分析相关内容,本文介绍的是时序电路的时序

    2024年02月10日
    浏览(42)
  • FPGA时序约束(二)利用Quartus18对Altera进行时序约束

    FPGA时序约束(一)基本概念入门及简单语法 最近由于不懂时序约束,在高速信号采集上面吃了很多亏,不知道系统工作异常的原因是什么。记录一下查到的资料,有些许自己的理解,可能有误。(主要是小梅哥及《FPGA时序约束与分析(吴厚航)》) 在程序编译之后,会出现

    2024年02月05日
    浏览(44)
  • FPGA时序约束--进阶篇(主时钟约束)

    在FPGA设计中,时序约束的设置对于电路性能和可靠性都至关重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的基础知识。 本文将重点讲解主时钟约束设置,给出详细的约束命令,并介绍了在Vivado中如何写入主时钟约束。 主时钟是FPGA电路中最基础的时钟,其稳定性和

    2024年02月09日
    浏览(45)
  • FPGA时序约束--实战篇(时序收敛优化)

    目录 一、模块运行时钟频率 二、HDL代码 1、HDL代码风格 2、HDL代码逻辑优化 三、组合逻辑层数 1、插入寄存器 2、逻辑展平设计 3、防止变量被优化 四、高扇出 1、使用max_fanout 2、复位信号高扇出 五、资源消耗 1、优化代码逻辑,减少资源消耗。 2、使用替代资源实现 六、总结

    2024年02月11日
    浏览(46)
  • FPGA时序分析与约束(8)——时序引擎

            要想进行时序分析和约束,我们需要理解时序引擎究竟是如何进行时序分析的,包括时序引擎如何进行建立分析(setup),保持分析(hold),恢复时间分析(recovery)和移除时间分析(removal)。         发起沿(launch edge,源时钟产生数据的有效时钟沿),捕获沿(capture

    2024年02月07日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包