如何在verilog中获得可合成的延迟

时间:2017-05-29 08:38:30

标签: verilog iverilog

我在verilog中完成了一个错误控制代码,因为我得到了解码数据,延迟时间为18000 ns。我需要将解码数据与原始数据进行比较,但我的原始数据开始大约100 ns,因此如何对这两个信号进行共同测量。

如何在verilog中延迟我的输入数据,这应该是可综合的?

我需要实现这是硬件。

2 个答案:

答案 0 :(得分:1)

一种选择是手动实例化一个或多个缓冲区。为此,您需要知道有关您的技术库的单元名称,并且您的RTL代码将依赖于技术。如果您不想这样,您也可以创建自己的缓冲模块(例如使用逆变器)并可以使用它。

以下是Verilog实例化的示例。 BUFX1是任意库中的单元名称。

BUFX1 my_buffer (.in(my_signal), .out(my_delayed_signal));

通常,合成和P& R工具会优化此单元格,但您可以告诉工具您要保留它。以下示例约束采用Synopsys设计约束(SDC)格式。大多数工具供应商都支持它。

set_dont_touch <path to my_buffer>

你应该知道,每个角落的小区延迟会有所不同(例如,慢,典型,快)。所以延迟不是恒定的,而是在一个范围内。

答案 1 :(得分:0)

产生延迟的同步方法是使用移位寄存器,它将根据需要将要比较的数据移位多个时钟周期。使用这种方法,或者使用评论中提出的计数器,您应该达到接近目标的延迟。

但是,如果你的时钟周期不适合移位寄存器,你可以通过半手动缓冲信号来产生延迟:

使用综合工具生成所需的延迟。例如,使用Synopsys&#39;设计编译器:set_min_delay delay_value_in_ns -from startpoint -to endpoint将在delay_value_in_nsstartpoint之间指出您想要至少endpoint的工具。您还可以设置一个值来约束最大值:set_max_delay

这些约束必须转发到进一步的流程步骤,如地点和路线,以保持正确的延迟。