我试图向左移动“移位寄存器”,直到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
所以问题出在循环中,如果我执行此左移操作,我100%确信我的移位寄存器的MSB可以达到1。但是编译器说是NOPE ch子。 我尝试过shiftd [31]!= 0 ;,它不会出错,但是没有得到我想要的结果。
答案 0 :(得分:1)
鉴于并不是所有信号之间的依赖性都得到了解释/详细说明,我不确定我是否完全理解您的代码,但是下面粘贴的代码摘录可能对您有所帮助。
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;
答案 1 :(得分:0)
编译器是正确的。考虑一下shifted = 0
时会发生什么。
此代码不太可能被合成。如果您要计算一个数字中前0位的数目,则最好使用更明确的方法(例如编写一个循环,运行32次并依次检查每个位)。