我在verilog中完成了一个错误控制代码,因为我得到了解码数据,延迟时间为18000 ns。我需要将解码数据与原始数据进行比较,但我的原始数据开始大约100 ns,因此如何对这两个信号进行共同测量。
如何在verilog中延迟我的输入数据,这应该是可综合的?
我需要实现这是硬件。
答案 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_ns
和startpoint
之间指出您想要至少endpoint
的工具。您还可以设置一个值来约束最大值:set_max_delay
这些约束必须转发到进一步的流程步骤,如地点和路线,以保持正确的延迟。