首页 > 解决方案 > 左移直到 MSB 为 1:超出循环计数限制。条件永远不会是假的

问题描述

我试图将“移位寄存器”向左移动,直到它的 MSB 为 1。但我的代码不起作用。

编译器说

超出循环计数限制。条件永远不会是假的

input wire [31:0] targetnumber,
...
reg [31:0] shifted;
...
shifted=targetnumber;
for(cnt = 0; shifted[31] == 0; shifted = shifted << 1)begin
   cnt = cnt + 1;
end

所以问题是for循环,如果我这样做左移,我100%肯定我的移位寄存器的MSB可以达到1。但是编译器说NOPE bitch。

我试过shifted[31] != 0;了,它没有出错,但这并没有达到我想要的结果。

标签: verilog

解决方案


鉴于并非所有信号之间的依赖关系都得到解释/详细说明,我不确定我是否完全理解您的代码,但也许下面粘贴的代码摘录会对您有所帮助。

for(cnt = 0; cnt < 31; cnt = cnt + 1)begin
    if (targetnumber[i])
        shift_index = 31 - cnt;
    cnt = cnt + 1;
end

assign shifted = targetnumber << shift_index;

推荐阅读