|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 tjuzhang 于 2013-8-1 04:46 编辑
在verilog仿真中,乘法器是如何识别有符号/无符号数的.请看以下仿真结果:
如何解释比较合理?
1)所有变量已经都声明为reg,wire形,没有定义为有符号数,但mul_ab3和mul_ab2的值不一样
2)当mul_a为”负数“时,乘法器计算mul_ab2的算法貌似是,mul_a的值*mul_b外加两个符号位?
为啥乘法器左边使用选择逻辑之后结果就变了呢?
请高人指点。。。
module test;
reg [14:0] mul_a;
reg [11:0] mul_b;
wire [26:0] mul_ab,mul_ab_add;
wire [14:0] mul_val;
wire [26:0] mul_ab2,mul_ab3;
wire [14:0] mul_val2;
wire [14:0] mul_a_tmp;
initial begin
mul_a = -15'd466;
mul_b = 12'd1024;
#100;
mul_a = -15'd487;
mul_b = 12'd813;
#100;
mul_a = 15'd10;
mul_b = 12'd10;
#100;
mul_a = -15'd10;
mul_b = 12'd11;
$stop;
end
assign mul_ab = mul_a * mul_b;
assign mul_val = mul_ab[24:10];
assign mul_ab_add = {~mul_ab[26:25],mul_ab[24:0]};
assign mul_a_tmp = (mul_a[14] ? (~mul_a + 1) : mul_a);
assign mul_ab3 = mul_a_tmp * mul_b;
assign mul_ab2 = (mul_a[14] ? (~mul_a + 1) : mul_a)*mul_b;
assign mul_val2 = (mul_a[14] ? (~mul_ab2[24:10] + 1) : mul_ab2[24:10]);
endmodule
|
|