Optimization verilog if语句硬件翻译
我试图减少我的关键路径,并发现以下困惑Optimization verilog if语句硬件翻译,optimization,hardware,verilog,hdl,Optimization,Hardware,Verilog,Hdl,我试图减少我的关键路径,并发现以下困惑 if(counter > 14) begin state <= ROUND1; end if(offset > message_size) begin state <= READ2; end 如果(计数器>14)开始 状态消息(U大小)开始 状态消息大小。我想知道为什么有4个,为什么是“LessThanX~Y”而不是大于
if(counter > 14) begin
state <= ROUND1;
end if(offset > message_size) begin
state <= READ2;
end
如果(计数器>14)开始
状态消息(U大小)开始
状态消息大小
。我想知道为什么有4个,为什么是“LessThanX~Y”而不是大于?偏移量和消息大小都是32位,它们位于case语句的always@(posedge clk)内部
是否有更好的方法编写此if语句以减少我的关键路径?使用
始终@*
确保所有信号都在灵敏度列表中。当灵敏度列表不包含代码中使用的信号时,该代码将生成锁存
使用
else
而不是再次使用if
语句。32位比较需要几个6输入LUT才能实现,因此逻辑量不会让我感到意外。您的示意图中似乎缺少很多信号,但这可能只是因为您只显示了关键路径。一个小于的块与一个大于的块是相同的,只是输入相反。我同意前面的评论,即你的“如果结束”应替换为“如果结束”
现在,减少关键路径只是一个管道问题。我要尝试的第一件事是在状态机代码中使用这两个大于的比较之前注册它们的结果。您还可以将较大的比较分为两个阶段——在循环1期间并行比较上16位和下16位,然后在第二个循环中使用结果完成32位比较 您是否尝试使用
else if
而不是if
?(第二个如果)原理图中缺少信号。