作为处理器设计的一部分,我正在使用Verilog实现一个简单的行为右移位器。
移位器输入32位变量,并根据变量(输入)选择输出右逻辑移位或右移位算术移位。
以下是代码:
module ShiftRight(
input signed[31:0] inp,
input [31:0] shamt,
output [31:0] out,
input choice
);
assign out = (choice)? (inp>>>shamt):(inp>>shamt);
endmodule
这会产生正确的行为实施,但在综合过程中会发出以下警告:
Unit ShiftRight : the following signal(s) form a combinatorial loop: out_shift0000<31>.
(括号中的coeff基本上是inp的最高位,在我的情况下是31)。所以我想知道这是否与inp bein签署有关。
答案 0 :(得分:3)
我猜你的合成器只是想到必须将一个向量移位2 ^ 32位(4,294,967,296),并且在它的内部RTL到门的合成中,它最终会以循环循环结束。
由于我猜你不需要换40亿比特,也许你可以使用合理的数字来换班?