set_input_delay如何约束?

作者:张大侠,来源:傅里叶的猫

 set_input_delay属于时序约束中的IO约束,我之前的时序约束教程中,有一篇关于set_input_delay的文章,但里面写的并不是很详细,今天我们就来详细分析一下,这个约束应该如何使用。

FPGA时序约束理论篇之IO约束

  首先还是需要明确一点,这个约束没有延迟的作用,如果需要对输入信号做延迟,就要使用IODELAY这种原语。

什么是input_delay?

  input_delay是指输入的数据到达FPGA的pad时相对于时钟边沿的延迟有多大,单位是ns,数值可以是正,也可以是负。

1.png

假设时钟是没有skew的,那么上图中的input_delay就等于Clock to Out+Trace Dealy,即上游器件的时钟到触发器输出的延时+PCB上的布线延迟,即Tco+Tdelay。

但我们实际的应用,碰到的大多数情况都是随路时钟,也就是说上游器件输出数据的同时也会输出时钟给FPGA,就像下图所示:

2.png

set_input_delay语法

set_input_delay [‑clock <args>] [‑reference_pin <args>] [‑clock_fall]
    [‑rise] [‑fall] [‑max] [‑min] [‑add_delay] [‑network_latency_included]
    [‑source_latency_included] [‑quiet] [‑verbose] <delay> <objects>

2-2.JPG

下面来详细说明一下:

-clock:input_delay一般是相对时钟而言的,而且默认是相对于上升沿,我们可以通过clock_fall参数来指定下降沿,这里的时钟可以是虚拟时钟;

-reference_pin:指定相对于某个pin上的时钟边沿,跟-clock的参数其实是一个意思,毕竟时钟也是通过pin输入进来的;

-clock_fall:指定相对于时钟下降沿

-rise:指定端口的上升转换的输入延迟

-fall:指定端口的下降沿的输入延迟

-max:最大延迟

-min:最小延迟,我们做input delay主要就是约束这两个参数

-add_delay:以增量的方式添加延迟,如果不加该参数,默认行为是替换现有的延时

-network_latency_included:表示参考时钟的网络延迟也包含在延迟中

-source_latency_included:跟上一个参数类似的含义,该参数表示时钟的源端延迟包含在延时中

-quiet:忽略指令的错误信息,即便指令错了也依然返回TCL_OK

-verbose:命令执行期间忽略消息数量的限制,就是说会返回该指令的所有的message

delay:延迟值

objects:端口列表

Vivado Timing Constraints Wizard

很多约束时钟vivado中的Timing Constraints Wizard工具会方便很多,对于input delay的约束,界面如下:

3.png

我们需要设置的就是数据相对于时钟的最大和最小的延时,trce_dly_min和trce_dly_max是指布线的延迟,一般随路时钟跟数据都会采用等长布线的方式,因此可以设置为0即可。

在设置完成后,下面的Tcl Command Preview中就会出现约束的tcl语法,这种方式对于该约束是很了解或者懒得手写约束的朋友来说非常的方便。

4.png

Examples

1.输入数据比时钟延迟3ns的delay:

create_clock -name clk -period 10 [get_ports clk_in]
set_input_delay -clock clk 3 [get_ports DIN]

2.输入数据相对于时钟的下降沿有2ns的delay:

set_input_delay -clock_fall -clock clk 2 [get_ports DIN]

3.复位管脚相对于BUFG输出的时钟有2ns的delay:

set_input_delay -clock wbClk 2 -reference_pin [get_pin wbClk_IBUF_BUFG_inst/O] [get_ports reset]


4.时钟虚拟时钟的约束

虚拟失踪的具体时钟方式可以参考另一篇文章

FPGA的虚拟时钟如何使用?

外部IO的参考时钟比设计中主时钟的路径上多了一个BUFFER

5.png

create_clock -name sysclk -period 10 [get_ports clkin]
create_clock -name virtclk -period 10
set_clock_latency -source 1 [get_clock virtclk]
set_input_delay -clock virtclk -max 4 [get_ports dina]
set_input_delay -clock virtclk -min 2 [get_ports dina]

5.双沿时钟的约束,对上升沿和下降沿都需要进行约束

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


具体案例

比如某器件手册的输出时钟与数据的setup和hold要求如下图:

6.png

该时钟双沿采样,在时钟边沿到来后,结合input_delay的最大最小延迟的定义,可以知道:

因此input delay的约束如下:

set_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD0] -add_delay
set_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD1] -add_delay
set_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD2] -add_delay
set_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD3] -add_delay
set_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXC] -add_delay
set_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD0] -add_delay
set_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD1] -add_delay
set_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD2] -add_delay
set_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD3] -add_delay
set_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXC] -add_delay
set_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD0] -clock_fall -add_delay
set_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD1] -clock_fall -add_delay
set_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD2] -clock_fall -add_delay
set_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD3] -clock_fall -add_delay
set_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXC] -clock_fall -add_delay
set_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD0] -clock_fall -add_delay
set_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD1] -clock_fall -add_delay
set_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD2] -clock_fall -add_delay
set_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD3] -clock_fall -add_delay
set_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXC] -clock_fall -add_delay


因此,只要记住:

  • 时序约束

最新文章

  • FPGA时序约束实战篇之衍生时钟约束
  • 开发者分享 | 使用方法论报告 3:时序已满足,但硬件中存在 DDR4 校准失败
  • 时序约束出现时序违例(Slack为负数),如何处理?
  • FPGA时序约束实战篇之多周期路径约束
  • 如何从时序分析中排除跨时钟域路径?
  • 提高IC设计中数字逻辑速度的六种技巧

最新文章

FPGA时序约束理论篇之两种时序例外
运用 Language Template 来创建set_input_delay/set_output_delay约束
FPGA 时序约束一:如何查看时序错误
FPGA时序约束理论篇之xdc约束优先级
设计收敛技巧:正确使用功耗估算
FPGA 时序约束 二 :创建时钟和时钟不相关约束

资讯网周末seo培训多少钱周公解梦灵吗个人签名周易给宝宝起名馨起名字 女孩名字陆家嘴论坛瓷都免费取名算命起名字名字四个字www.520ggxx.com小故事短篇故事张氏男孩起名做一个行者东莞seo网站排名优化黄帝内经中四时养生的柘城人事任免护肤品店铺起名电子合同没有签名有效吗重庆网站网站建设建设网络推广与营销有哪些网站设计比较好的公司signet珠宝武汉站地图爱奴草莓怎么种植好吃商品的营销推广深圳家居网站建设学习周易的方法和步骤橄榄树电视剧解梦 房顶漏水于起名字女少年生前被连续抽血16次?多部门介入两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”淀粉肠小王子日销售额涨超10倍高中生被打伤下体休学 邯郸通报单亲妈妈陷入热恋 14岁儿子报警何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言张家界的山上“长”满了韩国人?男孩8年未见母亲被告知被遗忘中国拥有亿元资产的家庭达13.3万户19岁小伙救下5人后溺亡 多方发声315晚会后胖东来又人满为患了张立群任西安交通大学校长“重生之我在北大当嫡校长”男子被猫抓伤后确诊“猫抓病”测试车高速逃费 小米:已补缴周杰伦一审败诉网易网友洛杉矶偶遇贾玲今日春分倪萍分享减重40斤方法七年后宇文玥被薅头发捞上岸许家印被限制高消费萧美琴窜访捷克 外交部回应联合利华开始重组专访95后高颜值猪保姆胖东来员工每周单休无小长假男子被流浪猫绊倒 投喂者赔24万小米汽车超级工厂正式揭幕黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发当地回应沈阳致3死车祸车主疑毒驾恒大被罚41.75亿到底怎么缴妈妈回应孩子在校撞护栏坠楼外国人感慨凌晨的中国很安全杨倩无缘巴黎奥运校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变王树国卸任西安交大校长 师生送别手机成瘾是影响睡眠质量重要因素国产伟哥去年销售近13亿阿根廷将发行1万与2万面值的纸币兔狲“狲大娘”因病死亡遭遇山火的松茸之乡“开封王婆”爆火:促成四五十对奥巴马现身唐宁街 黑色着装引猜测考生莫言也上北大硕士复试名单了德国打算提及普京时仅用姓名天水麻辣烫把捣辣椒大爷累坏了

资讯网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化