我是靠谱客的博主 尊敬洋葱,最近开发中收集的这篇文章主要介绍时序约束【三】,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一,约束文件包括:时序约束,物理约束 ,调试约束。

二,时序约束:使得片上以及下游器件满足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

最后

以上就是尊敬洋葱为你收集整理的时序约束【三】的全部内容,希望文章能够帮你解决时序约束【三】所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部