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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 17335|回复: 10

[求助] 求助$signed的用法

[复制链接]
发表于 2011-11-17 17:14:20 | 显示全部楼层 |阅读模式

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

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

x
想计算5-2,第一次手动计算,第二次加$signed来计算,如下:

第一次:
wire[3:0] a,b,c;
assign a = 4'd5;
assign b = 4'b1110; //-2的补码
assign c = a + b;
仿真结果为4'b0011;

第二次:
wire [3:0] a1,b1;
wire signed [3:0] c1;
assign a1 = 4'd5;
assign b1 = 4'b1010; //-2的原码
assign c1 = $signed(a1) + $signed(b1);
仿真结果为4'1111;


目的是想弄清楚$signed的用法,理解$signed就是自动计算补码,不明白为什么用$signed来计算结果却不正确,求解,谢谢!
发表于 2011-11-17 18:55:02 | 显示全部楼层
$signed表示强制转换成有符号数,你上面的两个数转换前后是不变的,因为位宽都是4bit。
 楼主| 发表于 2011-11-17 19:07:56 | 显示全部楼层
谢谢回复,还是没明白,不知道是不是c1的位宽不够,我将它的位宽改为5之后结果是5'h1f
发表于 2011-11-19 14:35:50 | 显示全部楼层
$signed(4'b1010)是-6
发表于 2011-11-19 20:54:19 | 显示全部楼层
4楼正解 1010的补码是 0101+1 = 0110 = 6
发表于 2011-11-19 22:51:19 | 显示全部楼层
明白了,顶LS
发表于 2012-7-25 17:02:19 | 显示全部楼层
回复 6# liujian_2009


    什么意思啊。。。我在IEEE std 1364-2005看的
regS=$signed(4'b1100);//regS=-4
发表于 2012-7-26 16:13:53 | 显示全部楼层
想计算5-2,第一次手动计算,第二次加$signed来计算,如下:

第一次:
wire[3:0] a,b,c;
assign a = 4'd5;
assign b = 4'b1110; //-2的补码
assign c = a + b;
仿真结果为4'b0011;

a=5,b=14  c=a+b=19,因为c只有4bit,数据溢出,因此c=3

第二次:
wire [3:0] a1,b1;
wire signed [3:0] c1;
assign a1 = 4'd5;
assign b1 = 4'b1010; //-2的原码
assign c1 = $signed(a1) + $signed(b1);
仿真结果为4'1111;

$signed(a1)=5, $signed(b1) =-6 ,c1=-1,因此c1=4'b1111
发表于 2012-7-26 16:28:57 | 显示全部楼层




   -4,符号位作为最高位为1, 4的补码为100,因此-4的补码为4'b1100。
发表于 2012-7-26 20:16:15 | 显示全部楼层
有需要关于有符号数的计算,应当利用Verilog 2001所提供的signed及$signed()机制
Verilog会自动进行符号的扩展。有号数与无号数的混合计算:不要在同一个verilog叙述中进行有号数与无号数的计算。应该要分成个别独立的叙述。在一个verilog叙述中只要有一个无号数的操作数,整个算式将被当成无号数进行计算
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-3-29 06:42 , Processed in 0.028511 second(s), 8 queries , Gzip On, Redis On.

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