FPGA上的处理时序

电器工程 数字逻辑 FPGA 定时
2022-01-07 01:42:11

我是 fpgas 的新手,我不确定我是否理解一些时间上的细微差别:如果我的所有同步过程都在同一个边沿触发,那么这意味着我的输入在一个上升沿上被“捕获”,而我的输出改变..相同的边缘?下一个上升沿?

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

ISim 截图

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

谢谢。

3个回答

通过触发器总是存在一些传播延迟。它通常被称为“时钟到 Q”延迟。

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

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

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

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

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

这是对先前答案的补充,我相信您从中得到了这个想法。

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

使用正确的模拟器,实际上可以可视化增量延迟。ISim 不这样做,但在 ei ModelSim 中,您可以在时钟边缘启用增量扩展。下面是我排除故障的有缺陷的第 3 方 IP 的示例屏幕截图。

ModelSim 中的 Delta 延迟扩展

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

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

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