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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

一道笔试题

[复制链接]
发表于 2010-10-21 13:57:00 | 显示全部楼层 |阅读模式

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

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

x
module bishi();
reg signed[3:0]a;
reg [3:0] b;
wire [7:0]z0,z1,z2;
assign z0=(a*b);
assign z1=$unsigned(a*b);
assign z2=$signed(a*b);
initial
begin
a = -3;
b = 4;
#1 $display("a=%d,b=%d,z0=%d,z1=%d,z2=%d",a,b,z0,z1,z2);
end
endmodule
请写出打印输出,并说明理由。
发表于 2010-10-21 15:18:46 | 显示全部楼层
a=-3,b=4,z0=52,z1=4,z2=4
发表于 2010-10-21 15:21:51 | 显示全部楼层
a,b就不用说了
z0=a*b,那么z0=4'b1101*4'b0100,因为z0是一个8bit数,所以z0=8'b0011_0100=52
发表于 2010-10-21 15:25:45 | 显示全部楼层
z1=$unsigned(a*b);
z2=$signed(a*b);
$unsigned和$signed内的乘法,是会截位的
发表于 2010-10-21 15:30:43 | 显示全部楼层
对于z1而言,计算顺序是这样的
z1
=$unsigned(a*b)
=$unsigned(4'b1101*4'b0100)
=$unsigned(4'b0100)(截取低四位)
=8'b0000_0100(符号位扩展)
发表于 2010-10-21 15:31:46 | 显示全部楼层
对于z2来说,符号位是0,所以扩展后,也是8'b0000_0100
发表于 2010-10-21 15:35:10 | 显示全部楼层
你可以试一下,有个很有趣的事情
就是,你如果将a或者b其中一个或者两个都设置为5位的话,
会得到z2=244,那是因为
截取5位时,z2=$signed(5'b10100);
然后扩展符号位,z2=8'b1111_0100
按照%d输出时,就是244了
发表于 2011-3-13 16:55:53 | 显示全部楼层
简直厉害的很啊
 楼主| 发表于 2011-7-20 00:50:33 | 显示全部楼层
回复 6# qqqqqqlihai


    厉害!
发表于 2017-8-24 11:40:37 | 显示全部楼层
受教了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-15 01:30 , Processed in 0.028909 second(s), 9 queries , Gzip On, Redis On.

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