找回密码
 注册
关于网站域名变更的通知
查看: 425|回复: 1
打印 上一主题 下一主题

verilog中有符号数和无符号数运算需要注意的问题

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-5-30 11:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
verilog中有符号数和无符号数运算需要注意的问题

, [9 L$ g/ ~9 V, r
8 @3 B, A* [9 ?, W2 i6 i* I. }1 ?" |/ U! V9 w8 H8 w1 |- X
verilog中最简单的加减乘除运算对于有符号数和无符号数其实是有很大区别的,现总结几点如下:
例子:对输入a,b取平均值,然后赋值给c输出
8 e+ l" B( W) X/ h2 M     always @(posedge clk)- u. G9 j) Z7 G, R
        c<=(a+b)>>1;" Q5 D4 V. T. N& g" s3 h  N

; P$ l& f0 }8 [0 P; r1. a,b均为无符号数,结果正确
% w1 X* u7 a( l! R. S3 o3 u5 v. _4 ~% J9 b
2. a,b中一个为有符号数(a),另一个为无符号数(b),编译器会自动将无符号数(b)转换成有符号数,这样就成了2个有符号数之间的 运算了,结果是个有符号数,此时
5 c- Y5 e& d9 ]" G( p1> 如果a+b结果为正数(最高位为0),那么结果正确
1 U: n' S6 F; u6 R  u2> 如果a+b结果为负数(最高位为1),那么结果错误,因为移位运算新移入的位将用0来填补,此时负数将变为正数,显然 错误。
; h( y& o" w1 t" j$ m2 A- g+ P* l
! Y, K0 a# ?0 p6 y: o. E所以综上,在进行有符号数运算的时候,最好像如下这样写:- w8 m9 ^% `8 W2 F, Z
reg signed [3:0] a;
! P5 o4 V+ u2 b+ V3 g& Zreg signed [3:0] b;
; i9 [/ p1 T! A7 |reg signed [3:0] c;
4 [' |6 Y! l4 a5 {" ~5 e& { always @(posedge clk)3 s7 o$ e4 G) ?5 c8 T" p) V0 w1 ?! }
c<=(a+b)/2;
0 I5 K( B  S7 _这样就可以避免不必要的错误- V. U# o4 P# a/ C7 Y

9 U( Z5 K6 H: |  k' E4 i# U

该用户从未签到

2#
发表于 2019-5-30 17:52 | 只看该作者
这都是我之前经常犯的问题啊  楼主有心了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-11 19:10 , Processed in 0.109375 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表