右算术移位不能正常工作

Right arithmetic shift does not work properly

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 

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

A 未签名。无符号数的符号消退始终为 0。 使 A(可能是 B 井)成为一个带符号的值。两个是这样做的:

  • input signed [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];可以简化为:flag[3] = ^ans_ex;flag[3] = ^ans_ex[7:0];