概述
一,约束文件包括:时序约束,物理约束 ,调试约束。
二,时序约束:使得片上以及下游器件满足setup slack 与Hold slack。
为了使约束完善,我们按照utrafast设计学的顺序进行约束,也即使用Constraints Wizard 选项。
时序约束可按时钟周期约束,输入/输出延时约束 ,跨时钟域路径约束,多周期路径/伪路径约束。
每一类的约束都可以通过tcl命令以及相应的报告进行验证是否生效。
三,时钟周期约束
1,主时钟周期约束:
主时钟是指由外部器件进入FPGA的全局时钟或者高速收发器输出的时钟。
约束选项:create clock
create_clock -name clk1 - period 10.0 -waveform { 0.0 5.0 } [ get_ports clk0]
2,生成时钟周期约束:
生成时钟分自动生成时钟:PLL或MMCM 和用户逻辑时钟
对于自动生成时钟系统会自动推算出时钟的各个参数。
而用户逻辑时钟则需手动约束,由于它是时钟源产生,是由组合逻辑与时序逻辑组成,使用抗噪能力差,只适用于低频,扇出小的情况。
约束选项:create_ generated_clock
eg : creat_generated_clock- name CLK1 -source [get_pins REGA/C ] - divide_by 2 [get_pins REGA/Q]
3,set_input_jitter
4,set_clock_uncertainty
5,如何对同一时钟源添加多时钟周期约束。
四,输入输出约束
input delay:解释见【一】,由于系统(源同步,系统同步),数据的触发模式不同,导致在vivado选项进行约束时,使用的约束表达量不同。
约束选项可使用wizard constraint 或者 Template的xdc模板,这两种方法高效安全。
output delay:类比input delay。
五,跨时钟域约束
使用情形:1,约束异步时钟:set_clock_group -async -group clck1 -group clk2 可能会包括生成时钟
2,同一时钟源创建多个时钟周期
六:多周期/伪路径约束
多周期路径约束:一般情况,数据在发起沿被发送,在捕获沿被捕捉,只有时钟周期约束的情况下,发起沿和捕获沿一般隔一个周期时钟,但当数据在传输的过程中,组合逻辑过于复杂等情况,一个周期无法满足时序要求,则需延迟几个周期进行捕获,caputure edge的改变会自动导致launch edge的改变。caputure edge的约束是根据电路实际情况来告诉eda工具什么时候进行数据的捕获,而launch edge则告诉eda数据什么时候发射,其宗旨为:当前发射沿数据必被当前捕获沿捕获。多周期路径约束的意图是根据电路实际情况,防止eda根据对电路约束过紧,以便使约束更利于其他关键路线的约束,节约布线时间,提高编译质量。
多周期情形:1,数据传输的逻辑电路复杂,capture沿需要延时几个周期。此种情况类似周期是时钟周期整数倍的使能信号。
2,同频跨时钟域的正向偏移和负向偏移。
3,快跨慢时钟域 慢跨快时钟域
约束选项:set_muticycle_path
具体参考:深入讲解set_multicycle_path多周期约束---理论篇网上看了一些有关多周期约束的一些文章,有些只给出了结论,有些讲得不太透彻,最后看完可能还是云里雾里的。所以本人在阅读一些网上资料的同时,结合Xilinx的UG903和UG906写了一些体会,仅供参考,如有错误,欢迎指正。 1. 为什么要进行多周期约束? 赛灵思是这么说的,时序分析工具在进行分析的时候,默认是进行一个周期的分析的。这种分析可能过于严格,可能不适用于某些逻辑路径。如果你的设计中允许数据在2个甚至多个周期之后稳定,那么你就可以使用多周期约束。这样会使得在布线过程中释放布线资源,同时也会降低布线运行时间。 2. 周期约束的宗旨: (1)当前发射沿发送的数据不能被前一个捕获沿捕获。 此处为:Source clock中的4ns发射的数据不能被Destination clock中的4ns处为捕获。 (2)下一个发射沿发送的数据不能被当前捕获沿捕获。 此处为:Source clock中的8ns发射的数据不能被Destination clock中的8ns处为捕获。 归纳起来就是,当前发射沿发送的数据只能给当前的捕获沿捕获。默认的周期为1的约束,捕获沿为发射沿之后的下一个时钟沿。此处,若Source clockhttps://copyfuture.com/blogs-details/20210115154622579g
伪路径约束:将约束的目标路线不参与时序分析,并不是这段路径不存在。旨在提高其他关键路径的提供更多布局布线资源。
约束情况:1,跨时域路径约束 set_false_path -from [get_clocks clock1]-to [get_clocks clock2]
2,异步复位路径 set_false_path -from [get_ports rst]
等
七,对同一路径约束的优先级:1,2,3
八,1,借助TCE调试约束 2,借助tcl命令调试约束 a: write_xdc b:report_exceptions
最后
以上就是尊敬洋葱为你收集整理的时序约束【三】的全部内容,希望文章能够帮你解决时序约束【三】所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复