加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

VerilogHDL中的带符号加减运算

(2018-07-25 14:44:39)
标签:

verilog

有符号数运算

绝对值

分类: VerilogHDL
有符号数加减运算关键就是扩展符号位,若为负数高位补1,正数高位补0
reg [4:0] a;
reg [5:0] b;
reg [6:0] c;
wire [8:0] a_b_c;
assign a_b_c = {a[4],a[4],a[4],a[4],a} + {b[5],b[5],b[5],b} + {c[6],c[6],c};
1、无符号数进行加减法运算
reg [7:0] add_a;
     reg [6:0]  add_b;
     wire [8:0] minus_ab;
     wire [8:0] add_ab;
add_a 和add_b 为无符号数,add_a - add_b时,应该扩展符号位进行,再进行减法。
assign minus_ab = {1'b0,add_a} - {2'b0,add_b};
加法运算相对简单,和总为无符号数,assign add_ab = add_a + add_b;
2、求一个数的绝对值
wire [8:0] minus_ab;
wire [8:0] abs_minus_ab;
以minus_ab为例, assign abs_minus_ab = minus_ab[8] ? (~minus_ab[7:0] + 8'd1) : minus_ab
若负数的符号位为1,绝对值为取反加1(除符号位),因为在负数是以补码的形式表示的。
以-5为例,Verilog中二进制表示为1011, 011取反再加1,即为101=5,为-5的绝对值。



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有