Verilog 我可以减少算术右移后的位数吗?

Verilog 我可以减少算术右移后的位数吗?,verilog,system-verilog,Verilog,System Verilog,如果我在verilog中减少算术右移后的位数,我仍然可以得到正确的有符号数吗?这有效吗 减少的位数=移位值 A = 1110_1110 A>>>1 new A = 111_0111 是的,但是应该使用三个'>'而不是四个,当然新变量应该足够大: wire signed [7:0] A,B; wire signed [6:0] just_fits; wire signed [5:0] oops; assign B = A >>> 1;

如果我在verilog中减少算术右移后的位数,我仍然可以得到正确的有符号数吗?这有效吗

减少的位数=移位值

A = 1110_1110
A>>>1
new A = 111_0111  

是的,但是应该使用三个'>'而不是四个,当然新变量应该足够大:

wire signed [7:0] A,B;
wire signed [6:0] just_fits;
wire signed [5:0] oops;

  assign         B = A >>> 1;  // Signed divide by two
  assign just_fits = A >>> 1;  // Signed divide by two
  assign      oops = A >>> 1;  // Goes wrong

很明显,这取决于你想减少的位数和减少后的值的意义。也就是说,如果减少1位,则符号将保存在较小的向量中。但是如果你想把它分配回之前大小的向量,你会得到零扩展,它可能与原始向量不同。因此,您需要提供更多信息。嗨,移位值被分配给一个新变量,而不是以前的大小向量。所以只要减去的位数等于移位值,我想这没问题吧?