我正在尝试减少我的关键路径,并发现以下内容令人困惑
if(counter > 14) begin
state <= ROUND1;
end if(offset > message_size) begin
state <= READ2;
end
在Quartus中执行TimeQuest之后,我得到了
左侧的4个蓝色块是offset > message_size
的小于比较运算符。我想知道为什么它们有4个,为什么是"LessThanX~Y“而不是大于?偏移量和message_size都是32位的,它们都在case语句的always@(posedge )内。
有没有更好的方式来写这个if语句来减少我的关键路径?
发布于 2015-03-15 14:42:32
使用always @*
确保所有信号都在敏感度list.When中敏感度列表不包含代码中使用的信号,该代码将生成锁存器。
请再次使用else
而不是if
语句。
发布于 2015-03-17 01:55:47
32位比较将需要几个6输入LUT才能实现,所以逻辑的数量并不让我感到惊讶。您的示意图中似乎确实缺少了许多信号,但这可能只是因为您只显示了关键路径。小于块与大于块相同,只是输入颠倒了。我同意之前的评论,即你的"end if“应该被"else if”取代。
现在,减少关键路径只是一个流水线问题。我要尝试的第一件事是在状态机代码中使用这两个大于比较的结果之前注册它们。您还可以将较大的比较分成两个阶段--在周期1期间并行比较高16位和低16位,并在第二个周期中使用结果来完成32位比较。
https://stackoverflow.com/questions/29057349
复制相似问题