如何实现超过一个时钟周期的时序逻辑?

How to implement sequential logic that exceeds a clock cycle?

我有一个连续的 Verilog 代码,在 i 的每个增量中,一定会发生不同的事情。

对于 i 中的一些,没有计时错误。但是,对于 i 的不同值,我会收到计时错误(如果省略这些特定过程,那么我不会收到计时错误)。

我想知道 Verilog 中是否有一种方法允许组合逻辑采用两个时钟周期而不是一个时钟周期。两个时钟周期应该足以完成这些过程,尽管我认为我以前从未见过这样的事情。

谢谢!

您要找的是 'multi cycle path'。需要一个以上时钟周期才能完成的逻辑路径(锥形)。

您可以使用时序约束来定义这样的路径,但是!!!
使用多循环路径有很多陷阱。 我不能告诉他们全部,因为这需要太长时间,但在你的情况下,有一个额外的危险,因为你似乎有时使用相同的路径作为单周期,有时作为多周期。

如果您将路径定义为多周期,综合工具将优化您的逻辑以适应该多周期路径,然后停止优化。很可能时间不再优化到足以在 'single cycle'.

内完成

对于 example:your 时钟是 100MHz,您不使用多周期路径约束。综合工具将尝试获得最佳时序并实现 12ns 延迟。你的计时会失败。

现在您使用指定 2 个循环的多循环路径约束。综合工具将尝试获得最佳时序,并在某个时刻达到 19ns 延迟。这就足够了,所以它停止了。 但是现在很可能在您有 'single cycle' 的情况下,时序不再优化到足以在 10ns 内完成。