FPGA上的处理时序


10

我是fpgas的新手,我不确定我是否能理解一些计时上的微妙之处:如果所有同步过程都在同一沿触发,则意味着我的输入在一个上升沿被“捕获”,输出改变..相同的边缘?下一个上升边缘?

如果我有两个模块,其中一个的输出流入下一个的输入,则可能会出现这样的情况,即我的模块的输入(前一个模块的输出)在捕获时同时发生变化。

ISim屏幕截图

205ns处的标记显示了我在说什么,op和data_write是我的输入。在这个测试用例中,一切似乎都“正常”,但是在仿真中,尚不清楚何时捕获了什么。是在205ns或(205ns + 1个时钟周期)捕获到data_write =“ 0001 ...”吗?有没有办法在ISim中获得更详细的波形,以显示建立时间和保持时间?

谢谢。

Answers:


12

触发器始终存在一定的传播延迟。通常称为“时钟到Q”延迟。

这意味着您的输入被捕获在边缘上,而输出却在同一边缘上变化,但仅在几纳秒之后。这几纳秒的延迟就足够了(如果您的触发器被设计为“零保持时间”,就像大多数FPGA一样),那么这些变化不会影响任何下游触发器,直到下一个时钟沿为止。

在功能或RTL仿真(可能是您为生成结果所做的工作)中,延迟不会被模拟为持续纳秒。在VHDL中,这将是模拟器时钟的单个增量周期,从技术上讲根本没有时间。这使得无法看到模拟器输出中的延迟。尽管如此,对于理想的模拟触发器来说,输出变化不影响下游触发器就足够了。

如果进行放置和布线后仿真,则它应该能够包含适当的延迟,以便您清楚地看到这些效果,但会增加仿真工作量。


1
在VHDL RTL仿真中,延迟是单个增量周期。这恰好需要零时间,但是由于当前增量周期中的所有更新都在下一个增量周期开始之前完成,因此模拟可以有序地进行。如果不再安排增量周期,那么时间就可以继续。
Martin Thompson

1

在所需的时钟边沿(上升或下降),D的输入出现在输出Q上。这需要花费有限的时间(时钟到Q的延迟),并且假设没有时序冲突,D一次只能通过一个FF。 (即,如果有另一个FF输入连接到Q,则第二个FF将在更改前通过FF1 Q值。

为了在仿真中包括时序,您需要综合设计,放置和布线设计,然后运行后期放置和布线仿真。这将包括所有组合,时钟到Q的延迟等。HDL仿真没有这些时序,因此它仅对测试基本操作有用,而对于时序限制没有用。您还将获得一个时序报告,该报告将告诉您特定时钟域的速度限制,让您知道是否存在时序违规,并显示各种路径的时序松弛。您可以使用此信息来确定可能需要进行更改的地方,或者添加了规则来告诉软件违规不是问题(例如,对于多循环路径或跨时钟路径而言)


1

我认为这是对先前答案的补充,相信您会明白。

在开始仿真RTL设计时,这些问题的确确实有些棘手,因为人们很难发现理想/功能/ RTL仿真(=无传播延迟)中的原因和影响。

使用正确的模拟器,可以实际显示增量延迟。ISim不会这样做,但是在ei ModelSim中,您可以启用时钟沿周围的增量扩展。以下是我经过故障排除的错误的第三方IP的屏幕截图示例。

ModelSim中的Delta延迟扩展

c是时钟信号,+1等等是增量周期,可视化为时间。

如果在模拟和设计都真正理想且同步的情况下模拟设计,并且没有模拟延迟,则原则上可以查看特定时钟侧面上所有信号的变化,这些变化在该时钟侧面之后稍有发生。因此,在您的示例中,在205 ns处,data_write= 0000...被捕获。在第一单元的一些其它逻辑被改变信号data_write0001...在同一侧面,并显示该信号data_write的时钟沿之后稍微。在理想模拟中(您的示例),此“稍晚”将是一个或几个模拟增量(在ISim中不可见,但在具有增量扩展的ModelSim中不可见),或者在现实世界中稍后出现一些ps / ns。

附带说明:RTL设计的重要一件事是确保始终在时钟侧面对输入进行采样-即使一个增量周期之后也为时已晚。输入可能在一个增量之后无效。换句话说:“不要弄乱时钟路径”。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.