当前位置: 首页 > news >正文

4.实战篇-延迟约束

对于延迟约束,相信很多同学是不怎么用的,主要可能就是不熟悉这个约束,也有的是嫌麻烦,因为有时还要计算PCB上的走线延迟导致的时间差。而且不加延迟约束,Vivado也只是在Timing Report中提示warning,并不会导致时序错误,这也会让很多同学误以为这个约束可有可无。

但其实这种想法是不对的,比如在很多ADC的设计中,输出的时钟的边沿刚好是数据的中心位置,而如果我们不加延迟约束,则Vivado会默认时钟和数据是对齐的。

对于输入管脚,首先判断捕获时钟是主时钟还是衍生时钟,如果是主时钟,直接用set_input_delay即可,如果是衍生时钟,要先创建虚拟时钟,然后再设置delay。对于输出管脚,判断有没有输出随路时钟,若有,则直接使用set_output_delay,若没有,则需要创建虚拟时钟。

在本工程中,输入输出数据管脚的捕获时钟如下表所示:

根据上表,我们创建的延迟约束如下,其中的具体数字在实际工程中要根据上下游器件的时序关系(在各个器件手册中可以找到)和PCB走线延迟来决定。未避免有些约束有歧义,我们把前面的所有约束也加进来。

# 主时钟约束
create_clock -period 25.000 -name clk2 [get_ports clk_in2]

# 衍生时钟约束
create_generated_clock -name clk_samp -source [get_pins clk_gen_i0/clk_core_i0/clk_tx] -divide_by 32 [get_pins clk_gen_i0/BUFHCE_clk_samp_i0/O]
create_generated_clock -name spi_clk -source [get_pins dac_spi_i0/out_ddr_flop_spi_clk_i0/ODDR_inst/C] -divide_by 1 -invert [get_ports spi_clk_pin]
create_generated_clock -name clk_tx -source [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKIN1] [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT1]
create_generated_clock -name clk_rx -source [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKIN1] [get_pins clk_gen_i0/clk_core_i0/inst/mmcm_adv_inst/CLKOUT0]

# 设置异步时钟
set_clock_groups -asynchronous -group [get_clocks clk_samp] -group [get_clocks clk2]

# 延迟约束
create_clock -period 6.000 -name virtual_clock
set_input_delay -clock [get_clocks -of_objects [get_ports clk_pin_p]] 0.000 [get_ports rxd_pin]
set_input_delay -clock [get_clocks -of_objects [get_ports clk_pin_p]] -min -0.500 [get_ports rxd_pin]
set_input_delay -clock virtual_clock -max 0.000 [get_ports lb_sel_pin]
set_input_delay -clock virtual_clock -min -0.500 [get_ports lb_sel_pin]
set_output_delay -clock virtual_clock -max 0.000 [get_ports {txd_pin {led_pins[*]}}]
set_output_delay -clock virtual_clock -min -0.500 [get_ports {txd_pin {led_pins[*]}}]
set_output_delay -clock spi_clk -max 1.000 [get_ports {spi_mosi_pin dac_cs_n_pin dac_clr_n_pin}]
set_output_delay -clock spi_clk -min -1.000 [get_ports {spi_mosi_pin dac_cs_n_pin dac_clr_n_pin}]

http://www.dtcms.com/a/121758.html

相关文章:

  • 基于MCP协议调用的大模型agent开发02
  • 11. 盛最多水的容器
  • Linux系统之rm命令的基本使用
  • leetcode每日一题:子数组异或查询
  • 主键索引和唯一索引的区别
  • linux安装mysql常出现的问题
  • 【Linux】进程信号(下)
  • 显示背光发烫异常解析
  • SQL语法进阶篇(一),数据库复杂查询——子查询
  • Redis过期key处理、内存淘汰策略与缓存一致性策略实践方案
  • PG:数据库表年龄大和表大的解决方案
  • Vue 框架组件间通信方式
  • Matplotlib图表坐标轴中文标签显示问题
  • 打印大X | 第六届蓝桥杯省赛C++C组
  • TDengine 数据模型设计:多列模式与单列模式对比(二)
  • PowerBI之DAX 2:聚合、统计、关系、表操作函数
  • 力扣题解:142. 环形链表 II
  • 柳宗元经典的10首唐诗
  • 指定运行级别
  • 【补题】Educational Codeforces Round 150 (Rated for Div. 2) C. Ranom Numbers
  • 计算机中的单位
  • 基于php扩展加密的一个简单逆向
  • 深入 C++ 线程库:从创建到同步的探索之旅
  • 天基光学图像仿真原理简介
  • 一个很好用的vue2在线签名组件
  • 《系统分析师-基础篇-7-9章总结》
  • 嵌入式AI前沿:精选工具与应用网站解析
  • 25/4/9 算法笔记 DBGAN+强化学习+迁移学习实现青光眼图像去模糊1
  • CSS Grid布局:从入门到放弃再到真香
  • CF442A Borya and Hanabi