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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: lyz5432

[求助] verilog 笔试题 求助

[复制链接]
发表于 2012-8-17 18:20:30 | 显示全部楼层
回复 10# huster


   说得很对,顶你的ID!
发表于 2012-8-17 18:21:55 | 显示全部楼层
回复 10# huster


   
发表于 2012-8-17 20:18:37 | 显示全部楼层
assign sum = {1'b0, a[7:0]} + {b[7], b[7:0]};
发表于 2012-8-17 20:47:52 | 显示全部楼层
9位就够了,
发表于 2012-8-18 21:38:58 | 显示全部楼层
10楼正解。。。。
发表于 2012-8-20 12:14:37 | 显示全部楼层
wire [9:0] sum = {1'b0,A} + {B[7],B};
sum output 10bit signed number
发表于 2012-8-20 13:20:26 | 显示全部楼层
要十位
发表于 2012-8-20 19:52:47 | 显示全部楼层
我不知道大家怎么计算的。我这边查了dc的user guide:“hdl compiler for verilog" 2011版。里面的介绍是有符号和无符号数字的相加是把有符号数转换成无符号数字做处理的,并且如果有符号数位宽比无符号数位宽低的话,高位添0!!!
我用vcs+v2k做了以下实验:
reg signed [3:0] a;
reg [7:0] b;
reg signed [7:0] c0;
reg signed [8:0] c1;
reg [7:0] d0;
reg [8:0] d1;

assign c0 = a + b;
assign c1 = a + b;
assign d0 = a + b;
assign d1 = a + b;

initial
  begin
      a = 4'sb1111;
      b = 8'b1111_1111;
  end

结果为: a=-1, b=255, c0=14, c1=-242, d0=14, d1=270.
也就是说: a被当成无符数处理了,并且是{4'd0, 4'b1111}。

然后我把上面代码"reg [7:0] b"改为"reg signed [7:0] b"(b的赋值改不改结果一样)。
结果为:a=-1, b=-1, c0=-2, c1=-2, d0=254, d1=510.
也就是说:a被当成有符号数处理了,并且是{4'b1111, 4'b1111},高位添1!

所以我觉得楼主的加法器直接用个正常的加法器就可以了。。。除非他表示虽然A是一个无符号数,但是希望当做有符号数做处理。也就是说,实现一个有符号位的加法器。
发表于 2012-8-25 00:50:35 | 显示全部楼层
顶LS一个
发表于 2012-8-27 11:30:05 | 显示全部楼层
1、无符号数和有符号数相加,结果肯定是有符号数
2、相加后的有符号数的位宽为,两个相加数的最大位宽+2,注意有符号数不包括符号位
比如楼主的题目:
reg [7:0] A; reg signed [7:0] B;
reg [9:0] sum;
always @(*)
   if(B[7])  //negative
      sum = {2'b00, A} + {2'b11, B}
   else  //positive
      sum = {2'b00, A} + {2'b00, B}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

X

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

GMT+8, 2025-6-9 20:50 , Processed in 0.021406 second(s), 7 queries , Gzip On, MemCached On.

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