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