Verilog 右移运算不能正常工作

Verilog 右移运算不能正常工作,verilog,Verilog,如果我输入A=8'hC0和B=8'h01,那么它将给我输出60,而不是十六进制的e0 A未签名。无符号的符号消去总是0。 将A(可能是B井)设为有符号值。二是这样做: 输入签名[7:0]A、B ans_ex=$signed(A)>>B 供参考: (Op_ex==5'b11011 | Op_ex==5'b11100 | Op_ex==5'b11101 | Op_ex==5'b11110 | Op_ex==5'b11111)可以简化为(Op_ex>=5'b11011) flag[3]=ans_

如果我输入
A=8'hC0
B=8'h01
,那么它将给我输出60,而不是十六进制的e0

A
未签名。无符号的符号消去总是0。 将
A
(可能是B井)设为有符号值。二是这样做:

  • 输入签名[7:0]A、B
  • ans_ex=$signed(A)>>B

供参考:
(Op_ex==5'b11011 | Op_ex==5'b11100 | Op_ex==5'b11101 | Op_ex==5'b11110 | Op_ex==5'b11111)
可以简化为
(Op_ex>=5'b11011)

flag[3]=ans_ex[0]^ans_ex[1]^ans_ex[2]^ans_ex[3]^ans_ex[4]^ans_ex[5]^ans_ex[6]^ans_ex[7]可以简化为:
标志[3]=^ans\u ex
标志[3]=^ans_ex[7:0]

如何定义
A
B
呢?A和B的长度为8位,A=8'hC0,B=8'h01,所以输出为8'he0,但它给我的输出为8'h60,它只向右移位寄存器,不做算术运算A是输入,它被定义为输入A[7:0];B为输入,定义为输入B[7:0];您需要在示例中显示所有信号的声明。我想你的意思是说A和B被声明为
input[7:0]A,B有很大的区别。请更新您的原始帖子,而不是添加评论。我尝试了此操作,但我的输出保持不变。我没有给出正确的算术移位。它只给出正确的移位而没有给出正确的算术移位。它适用于有符号的数字,但不适用于无符号的数字
if(Op_ex == 5'b11011 || Op_ex==5'b11100 || Op_ex==5'b11101 || Op_ex==5'b11110 || Op_ex==5'b11111 )
 begin
    temp_carry = 1'b0;
    ans_ex = A   >>>   B;
    flag[3] = ans_ex[0]^ans_ex[1]^ans_ex[2]^ans_ex[3]^ans_ex[4]^ans_ex[5]^ans_ex[6]^ans_ex[7];  //flag[3] = parity
    flag[2] = 0;                                                  //flag[2] = overflow  
    flag[0] = 0;
    if(ans_ex == 8'b00000000)
        begin
            flag[1] = 1'b1;                                   //flag[1] = zero
        end
    else
        begin
            flag[1] = 1'b0;
        end
        data_out = reg_data;
 end         
end