FPGA内部时序单元到输出端口的路径也需要约束其output delay,如图1所示框图。

图1

       约束output delay的命令是set_output_delay,具体的参数如下:

set_output_delay –clock reference_clock –min/-max delay_value

[get_ports {DOUT}] [-clock_fall] [-add_delay]

       其中-clock表示输出端口的关联时钟;

       -min/-max表示设置output delay的最小和最大值;

       -clock_fall表示output delay是针对关联时钟的下降沿;

       -add_delay表示对同一个输出端口约束不同的output delay值,一般是在如DDR需要约束两个时钟沿的output delay,或者输出端口后级连接了多个器件对应不同的时钟约束的情况下,需要加入此参数。

与输入接口约束类似,输出接口的约束也可分为以下两种情况:

System Synchronous Output

  分析FPGA内部时序单元到输出端口的路径时,当source clock和destination clock来自同一个系统时钟时,称为系统同步输出(system synchronous output)

  此处需要引入虚拟时钟(virtual clock)的概念,在讲时钟约束的一节时有提到,当source clock or destination clock不在FPGA设计中时,则需要约束一个虚拟时钟。如图2所示为系统同步输出路径框图,source clock是CLKA,destination clock是CLKB,其中CLKA通过输入端口引入FPGA内部(约束成主时钟),而CLKB引到了FPGA外部的板上芯片,并没有引入到FPGA内部,因此需将CLKB约束成虚拟时钟,约束如下:

 create_clock -name CLKA-period 10 -waveform {0 5} [get_ports {CLKA}]

create_clock -name CLKB-period 10 -waveform {0 5}

图2

 其中Tcd_ext表示外部时钟源到外部芯片的延时;Tcd_int表示外部时钟源到FPGA时钟端口的延时;Tsetup表示外部芯片tsu时间;Thold表示外部芯片thd时间;Tbd表示FPGA输出端口到外部芯片的板上延时。

 Output delay value的计算式如下:

       max_output_delay = Tbd_max + Tsetup + Tcd_int_max - Tcd_ext_min

       min_output_delay = Tbd_min – Thold + Tcd_int_min - Tcd_ext_max

相比于input delay value,上式相对于难理解些,那就推导一下,深入理解:

将此路径假想为FPGA内部register_to_register路径作分析,如图3所示,

图3

在博文:https://blog.csdn.net/Reborn_Lee/article/details/85295160,介绍了时序分析分为Setup Check和Hold Check

  1. Setup Check

  setup slack = (destination clock edge time - source edge time

                     + (destination clock path delay - source clock path delay

                     - clock uncertainty

                     - setup time

                     - clock to output time

                    - data path delay

  将图3中路径的时间参数代入可得:

  setup slack = Tclk_period + (Tcd_ext – Tcd_int – Tcd_int_fpga) – Tclk_uncertainty – Tsetup – Tclk-Q– Tint_data_delay - Tbd

其中Tcd_ext,Tcd_int,Tsetup和Tbd都是FPGA外部的时间参数,需要通过约束告知vivado,上式整理一下可得:

setup slack = Tclk_period – Tcd_int_fpga – Tclk_uncertainty – Tclk-Q – Tint_data_delay 

+ (Tcd_ext – Tcd_int) – Tsetup - Tbd = Tclk_period – Tcd_int_fpga – Tclk_uncertainty 

– Tclk-Q – Tint_data_delay Tmax_output_delay

 Tmax_output_delay = Tsetup + Tbd_max + Tcd_int_max - Tcd_ext_min,与前文中max_output_delay的计算式相同。

  1. Hold Check

       hold slack = (source clock edge time - destination edge time)

                           +(source clock path delay - destination clock path delay)

                           - clock uncertainty

                           - hold time

                           + clock to output time

                           + data path delay

                     = (Tcd_int + Tcd_int_fpga - Tcd_ext)

                         - Tclk_uncertainty

                         – Thold

                        + Tclk-Q

                        + Tint_data_delay + Tbd

其中Tcd_ext,Tcd_int,Thold和Tbd都是FPGA外部的时间参数,需要通过约束告知vivado,上式整理一下可得:

hold slack = Tcd_int_fpga - Tclk_uncertainty + Tclk-Q + Tint_data_delay + Tbd – Thold + Tcd_int - Tcd_ext

                     = Tcd_int_fpga - Tclk_uncertainty + Tclk-Q + Tint_data_delay + Tmin_output_delay

     Tmin_output_delay = Tbd_min – Thold + Tcd_int_min - Tcd_ext_max,与前文中min_output_delay的计算式相同。

可以发现在setup check中使用max output delay,hold check使用min output delay,都是使slack的值较小的趋势,这样使FPGA内部的时序条件更严苛,如果在这种条件下时序收敛,就绝对能保证设计的稳定性。

经过上面的推导,回归系统同步输出主题,约束命令如下:

set_output_delay -clockCLKB -max max_output_delay [get_ports {DOUT}]

set_output_delay -clockCLKB -min min_output_delay [get_ports {DOUT}

  1.  Source Synchronous Output

分析FPGA内部时序单元到输出端口的路径时,输出到外部芯片的时钟与数据是同源的,称为源同步输出(source synchronous output)

结构如图4所示,从FPGA输出到外部芯片除了有数据,还有一个随路时钟,由FPGA内部时钟模块产生的。

图4

参考图4中时间参数,其中Tcd表示时钟从FPGA输出到外部芯片输入端口的延时;Tsetup表示外部芯片tSU时间;Thold表示外部芯片tH时间;Tbd表示FPGA输出端口到外部芯片的板上延时。Output delay的计算式如下(推导与系统同步输出类似,不再累述):

       max_output_delay = Tbd_max + Tsetup - Tcd_min

       min_output_delay = Tbd_min – Thold - Tcd_max

源同步输出的output delay约束命令如下:

set_output_delay -clockCLKB -max max_output_delay [get_ports {DOUT}]

set_output_delay -clockCLKB -min min_output_delay [get_ports {DOUT}]

【 Vivado 】输出延迟约束(Constraining Ouput Delay)相关推荐

  1. 【 Vivado 】输出延迟约束实例

    Output Delay Constraints Instance 本节讲解一下output delay的实例.依旧是Ethernet PHY和FPGA的接口,框图如图1所示,其中TX接口,MII管理 ...

  2. 【 Vivado 】输入延迟约束实例

    上篇博文讲了输入延迟约束( Input Delay Constraints):输入延迟约束(Constraining Input Delay) 这篇博文讲解具体的实例,通过实例去学习是最有效果的. 实 ...

  3. 【 Vivado 】输入延迟约束(Constraining Input Delay)

    前几篇博文提到了四种时序路径:基本的时序约束.分析的概念 1)      FPGA内部时序单元间的路径 2)      输入端口到FPGA内部时序单元的路径 3)      FPGA内部时序单元到输出 ...

  4. VIVADO时序约束之Input Delay(set_input_delay)

    前言 I/O Delay约束主要有两个命令:set_input_delay和set_output_delay. I/O Delay约束的主要目的同时钟约束一样,是告诉编译器,外部输入输出信号与参考时钟 ...

  5. VIVADO时序约束之Output Delay(set_output_delay)

    前言 I/O Delay约束主要有两个命令:set_input_delay和set_output_delay. I/O Delay约束的主要目的同时钟约束一样,是告诉编译器,外部输入输出信号与参考时钟 ...

  6. TIMING_06 VIVADO环境下的时序约束 之 输入延迟约束

    由于该系列文章阅读有顺序性,所以请跳转至该系列文章第一篇从头开始阅读,并按照文章末尾指示按顺序阅读,否则会云里雾里,传送门在此:  https://blog.csdn.net/qq_33486907/ ...

  7. Vivado时序约束之—— set_max_delay、set_min_dealy(最大最小延迟约束)

    set_max_delay.set_min_delay(最大.最小延迟约束) 1. set_max_delay.set_min_delay约束的目的 最大最小延迟约束主要是为了解决异步信号之间的时序路 ...

  8. 输入/输出延迟单元( IODELAY)简介

    输入 / 输出延迟单元( IODELAY )简介 每个 I/O 模块包含一个可编程绝对延迟单元,称为 IODELAY . IODELAY 可以连接到 ILOGIC/ISERDES 或 OLOGIC/O ...

  9. (10)Vivado 异步时钟约束

    (10)Vivado 异步时钟约束 1 文章目录 1)文章目录 2)时序约束引言 3)FPGA时序约束课程介绍 4)Vivado 异步时钟约束 5)技术交流 6)参考资料 2 时序约束引言 1)什么是 ...

最新文章

  1. 第六章|网络编程-socket开发
  2. IEEE conference 中出现的PDF字体嵌入的问题
  3. 模块间holder的Boost.Flyweight测试
  4. 移动硬盘提示无法访问使用驱动器中的光盘之前需要格式化,里面的数据怎么恢复...
  5. python识别发票二维码_python如何实现二维码的生成和识别
  6. Git分支 and PullFetchMerge
  7. Python调用自己写的模块
  8. ERROR:STATUS_BROM_CMD_SEND_DA_FALL(0xC0060003)
  9. 程序员技能与成长:程序员的必备工具箱(值得收藏)
  10. 性能测试——结果量含义(系统吞吐量(TPS)、用户并发量)
  11. 思科 接入点 本地转发_H3C无线AP本地转发配置教程2016
  12. Combining Word and Entity Embeddings for Entity Linking
  13. 服务器nvme硬盘识别不了,NVMe硬盘无法安装win7怎么办|安装win7找不到nvme硬盘解决方法...
  14. windows10多桌面创建 切换 和分屏
  15. 比较:strcmp(),strncmp(),strcasecmp(),strncasecmp()
  16. 生物信息学(高通量测序)名词
  17. 知识图谱-生物信息学-医学顶刊论文(Briefings in Bioinformatics-2021):MPG:一种有效的自我监督框架,用于学习药物分子的全局表示以进行药物发现
  18. 土豆网前任CTO开无人便利店,半年达500家
  19. leetcode_middle_29_287. Find the Duplicate Number
  20. Linux系统Redis安装教程-附带后台启动

热门文章

  1. 安装eAccelerator
  2. Web Application Stress Tool(WAS)性能测试
  3. 深入学习JavaScript: apply call方法 详解(转)
  4. 浅谈JavaScript中按键事件的e.keyCode || e.which || e.charCode
  5. 国外计算机音乐专业,音乐留学干货 | 国外电子音乐专业留学如何?
  6. sql 相加_SQL-多表查询
  7. 获取本地公网ip_本地与远程linux服务器之间传输数据
  8. 批量 杀掉 mysql 连接_批量杀死MySQL连接的四种方法详解
  9. 搭建AI Studio 中Python开发环境
  10. 金黄色的LED灯带感光特性测量