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

如何在verilog中获得可合成延迟,verilog,iverilog,Verilog,Iverilog,我用verilog做了一个错误控制代码,我得到了18000ns延迟的解码数据。我需要将解码后的数据与原始数据进行比较,但我的原始数据大约开始于100ns,因此如何对这两个信号进行比较 如何延迟我在verilog中的输入数据,这应该是可合成的 我需要实现的是硬件。产生延迟的同步方法是使用移位寄存器,它将要比较的数据按需要的时钟周期移位。使用此方法,或者使用注释中建议的计数器,您应该达到接近目标的延迟 但是,如果您的时钟周期不适合移位寄存器,您可以通过半手动缓冲信号来产生延迟: 使用合成工具生成所需

我用verilog做了一个错误控制代码,我得到了18000ns延迟的解码数据。我需要将解码后的数据与原始数据进行比较,但我的原始数据大约开始于100ns,因此如何对这两个信号进行比较

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


我需要实现的是硬件。

产生延迟的同步方法是使用移位寄存器,它将要比较的数据按需要的时钟周期移位。使用此方法,或者使用注释中建议的计数器,您应该达到接近目标的延迟

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

使用合成工具生成所需的延迟。例如,使用Synopsys的设计编译器:
set_min_delay delay_value_in_ns-从起始点到端点
将指示您希望在
起始点
端点
之间至少
delay_value_in_ns
的正确工具。您还可以设置一个值来约束最大值:
set\u max\u delay


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

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

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

BUFX1 my_buffer (.in(my_signal), .out(my_delayed_signal));
通常情况下,合成和p&R工具会优化这个单元,但您可以告诉工具您想要保留它。下面的示例约束采用Synopsys设计约束(SDC)格式。大多数工具供应商都支持它

set_dont_touch <path to my_buffer>
set\u don\u touch

您应该知道,每个角落的单元延迟都不同(例如慢速、典型、快速)。因此延迟不是恒定的,而是在一个范围内。

我认为您需要纠正您的基本问题,请参考通常测试台不可合成?无论如何,对于硬件的延迟,您使用一个计数器,它会在时钟的每个正边缘进行更新。通过这种方式,你可以通过计算周期数来跟踪延迟。延迟不能被合成。在后端进程之后,延迟将包含在标准单元延迟和路由网络延迟中。使用计数器生成延迟如何?这些应该是可合成的。