Verilog中的算术右移

时间:2012-10-31 05:53:42

标签: verilog bit-shift xilinx

作为处理器设计的一部分,我正在使用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签署有关。

1 个答案:

答案 0 :(得分:3)

我猜你的合成器只是想到必须将一个向量移位2 ^ 32位(4,294,967,296),并且在它的内部RTL到门的合成中,它最终会以循环循环结束。

由于我猜你不需要换40亿比特,也许你可以使用合理的数字来换班?