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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4955|回复: 9

一道笔试题(已解答)

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

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

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

x
本帖最后由 xiaocanmeng 于 2011-7-20 14:55 编辑

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 17:38:40 | 显示全部楼层
自己跑一下仿真不就知道了。
发表于 2010-10-21 18:34:39 | 显示全部楼层
a=         -3,b= 4,z0= 52,z1=  4,z2=  4
I simulated it with vcs ,following shows the result,
But i dont quite know why.
发表于 2010-10-22 09:43:20 | 显示全部楼层
这个题还比较有意思的。虽然并不会常用,但是确实是要对verilog很了解才能做对。
首先要明白二进制数的变换和表示,不太了解的网上搜一下。-3表示成二进制就是1101对应的无符号值是13。
z0 = (a*b)  这里涉及到了verilog的位宽规则,在没有特别设定的状况下,Verilog会依据LHS的操作数宽度来决定RHS操作数的宽度。也就是按照8bits运算,得出52.
后两个算式,括号内的位宽是由刮号内的最大操作数宽度决定的。也就是4bits。所以两个算式结果都是4。
发表于 2010-10-22 10:46:45 | 显示全部楼层
z0= 52很好理解,因为a=-3为有符号数,用补码表示就是4‘b1101=4’d13,13*4=52

z1和z2不好理解,猜测是这样的:在执行系统函数$unsigned和$signed之前并不知道z1和z2的位数,因此将(a*b)的结果按照max{width(a),width(b)}=4进行截断,52=110100阶段之后就是0100=4,经过系统函数$unsigned和$signed转换之后在进行符号位的扩展,就得到z1和z2均为4

这也太bt了吧。。。
发表于 2010-10-23 22:49:55 | 显示全部楼层
  还是看不懂啊
发表于 2010-10-27 15:32:20 | 显示全部楼层
这题目很考验人
不过不同的工具的这些语法的编译还是有所不同的
我有过用$signed语法,modelsim仿真通过,ISE综合后后仿真不通过的悲惨教训
发表于 2011-7-20 07:53:51 | 显示全部楼层
呵呵,这个笔试题很好啊,看来我的verilog基本还是不够啊
发表于 2013-7-2 11:03:21 | 显示全部楼层
牛!!!!!!!!!!!!!
发表于 2013-7-3 14:32:30 | 显示全部楼层
这些平时没用着头一次见就傻眼了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-22 05:47 , Processed in 0.023145 second(s), 9 queries , Gzip On, Redis On.

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