明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信扫一扫,快捷登录!

查看: 5793|回复: 0

01_时序约束交流【汇总贴】

[复制链接]
发表于 2020-9-12 17:42:21 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
【问题1】 VIVADO的时钟约束向导,常无法找到时钟,如下图所示,位置1中应该要识别出时钟。
030E3285-B40C-4b04-9A59-F9999659CF29.png
答:请注意,位置1的地方是列出的是“没有被约束的时钟”,如果该时钟已经被约束了,就不会在这里列出来 了。
注意上图中3的位置,该列说明了有2条时钟约束。可以点击这里看看,是不是已经对时钟进行约束了。
为什么会有时钟被约束了呢?因为该工程已经有约束文件。

【问题2】VIVADO/QUARTUS练习中,rst_n是否需要约束?
答:一个完整的约束,其基本要求是:所有的路径都覆盖,包括所有的输入管脚和输出管脚。所以,rst_n需要约束。
      注意的是,该信号是输入信号,但没有随路时钟进来。所以该信号可以认为是无时钟的情形,按照课程理论,应该定义一个虚拟时钟。
      定义了虚拟时钟后,再重新使用约束向导,约束rst_n。


【问题3】在VIVADO中,如何设置虚拟时钟?
答:虚拟时钟不能在时序约束向导中添加,需要在下面窗口添加
93922CC4-C28F-4089-9C1D-42A0FA3F074C.png 74296828-03B3-40c6-BCE2-B973082E6924.png
在Edit Timing Constraints中点击,然后在creat clock窗口中,双击“Double click to create a Create Clock Constrtaint”。在弹出的窗口中
C7A2C6D1-6337-41a8-A255-0CA4E1864E23.png
Clock name为该时钟命一个名字,Source objects是不需要填的,因为是虚拟时钟,就是没对象了。
【问题4】时序约束出现时序违例(Slack为负数),如何处理?
答:首先指出一个误区:当约束出现错误时,想当然地认为是“时序约束做得不对”,所以应该怎么去改“时序约束”,从而让这些错误消失,这是一个错误的观念。
      时序约束的作用:在于检查“设计是否满足时序要求”,它是用来审视自己设计的,很多情况是,要改设计代码来满足时序要求。
      当时序约束提示有错误时,应该阅读“时序报告”,从报告中分析时序路径(数据到达时间、时钟到达时间和数据要求时间等),根据报告分析错误的原因,并根据原因来实行不同的方法。

【问题5】VIVADO中,如何查询未约束的时钟、未约束的输入延时和输出延时等?
答:如下图,在VIVADO的时序约束界面中,在下面栏目可显示未约束的地方。
60DC802A-9B14-435c-8F28-46D62EA29FF9.png

【问题6】如下图所示,跨时钟域打两拍的方法,其实只是一个信号的传递,当第一个信号出现不稳之后或者错误之后,后面就会把这个错误的信号继续传递下去,并没有起到纠错的作用

FB710EA3-6FC9-4d4f-AE06-A64D1D702E58.png
答:上图中打两拍的方法,其本质不是为了“纠错”,它的作用是为了防止“亚稳态”。
      防止亚稳态的本质:防止中间状态过长。之所以采用两级触发器的方法,是因为D触发器出现亚稳态的可能性非常小,而两级D触发器出现亚稳态的概率就更小了。

【问题7】既然打两拍的方法不能纠错,那“打两拍”还有什么意义?
答:错误有很多种,有些错误是1次性错误,而有些是系统性错误。
      传输过程中,如果发了0,如果全部接收模块都认为是1,这并不是问题,这是可以预防和可控的(例如检测多几次就行了)。
      但是亚稳态的时候,如果发了0,但部分接收认为认为是1,而另一部分模块认为是0,至于哪些模块认为是1哪些是0,这是随机的,不可预知的,这就是灾难。
      更详细的内容,建议参考:FPGA知识大串讲  http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=581

【问题8】模块A的时钟clka为100MHz,模块B的时钟clkb为300MHz。现在模块A要把32bit的数据送给模块B。模块A要如何发送,模块B要如何接收呢?
答:方法1:采用异步FIFO的方法。      方法2:采用指令信号的方法传输,模块A产生vld信号给模块B,模块B对vld进行同步化处理(打两拍)后,检测同步化信号的上升沿。需要注意的,VLD的信号是让模块B周期的三倍或以上。
                  由于clka是100M,产生的vld是10ns,而clkb是300M,周期是3.33ns。所以模块A只要产生1个时钟的vld给模块B即可。

【问题9】模块A的时钟clka为300MHz,模块B的时钟clkb为100MHz。现在模块A要把32bit的数据送给模块B。模块A要如何发送,模块B要如何接收呢?
答:方法1:采用异步FIFO的方法。      方法2:采用指令信号的方法传输,模块A产生vld信号给模块B,模块B对vld进行同步化处理(打两拍)后,检测同步化信号的上升沿。需要注意的,VLD的信号是让模块B周期的三倍或以上。
                  由于clka是300M,产生的vld是3.33ns,而clkb是100M,周期是10ns。所以模块A要产生4个时钟的vld给模块B。

【问题10】一块电路板上,有两个芯片,芯片A的时钟clka为100MHz,芯片B的时钟clkb为100MHz。现在芯片A要把32bit的数据送给芯片B。模块A要如何发送,模块B要如何接收呢?
答:方法1:采用异步FIFO的方法。      方法2:采用指令信号的方法传输,模块A产生vld信号给模块B,模块B对vld进行同步化处理(打两拍)后,检测同步化信号的上升沿。需要注意的,VLD的信号是让模块B周期的三倍或以上。
                  虽然clka和clkb都是100M,但他们不是同一个晶振产生的,因此都是异步时钟。为了满足以上要求,所以模块A要产生3个时钟的vld给模块B。







上一篇:03_SDRAM和DDR交流【汇总贴】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号-1

GMT+8, 2020-9-25 19:28 , Processed in 0.581343 second(s), 17 queries , File On.

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表