在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2630|回复: 4

[求助] 关于乘法器的问题

[复制链接]
发表于 2013-8-1 04:39:02 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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

仿真截图.png
发表于 2013-8-1 06:16:37 | 显示全部楼层
默认是当做无符号数来处理的
发表于 2013-8-1 09:18:44 | 显示全部楼层
学习一下。
发表于 2013-8-1 16:27:18 | 显示全部楼层
本帖最后由 39123811 于 2013-8-3 04:30 编辑

verilog 2001 加入了singed 的定义
比如

module multiplier (
parameter SIZE = 8;
output reg signed [SIZE-1:0] F;
input  [SIZE-1:0] A,B);

~

endmodule
发表于 2013-8-1 18:27:29 | 显示全部楼层
reg ,wire型都是无符号数,integer型的是有符号数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-15 06:53 , Processed in 0.021543 second(s), 11 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表