打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[转载]Verilog中带符号的数值运算

(1)在FPGA综合成电路的时候最底层都是以补码的形式在运算,正数的补码就是本身,负数的补码要取反+1。

(2)编译器高的版本都支持verilog有符号运算的综合了。在定义时直接加上signed即可,如下:

   input   signed [7:0 ] a,b;
   output  signed [15:0] c;
   wire   signed [15:0] x;

   reg    signed [15:0] y;

  很明显,这种采用signed定义的情况,可以避免手动转换带来的麻烦,同时可以节省很多开发时间。

(3)当使用移位运算“>>”进行1/2倍运算时,需注意:

    verilog中最简单的加减乘除运算对于有符号数和无符号数其实是有很大区别的,现总结几点如下:

 

    例子:对输入a,b取平均值,然后赋值给c输出
    always @(posedge clk)
       c<=(a+b)>>1;


     1)a,b均为无符号数,结果正确
 
     2)a,b中一个为有符号数(a),另一个为无符号数(b),编译器会自动将无符号数(b)转换成有符号数,这样就成了2个有符号数之间的运算了,结果是个有符号数,此时
           1>如果a+b结果为正数(最高位为0),那么结果正确;
           2>如果a+b结果为负数(最高位为1),那么结果错误,因为移位运算新移入的位将用0来填补,此时负数将变为正数,显然错误。
 
    所以综上,在进行有符号数运算的时候,最好像如下这样写:
    reg signed [3:0] a;
    reg signed [3:0] b;
    reg signed [3:0] c;
    always @(posedge clk)
         c<=(a+b)/2;
    这样就可以避免不必要的错误。

 

凌波微步心得:可以-->  用补码,或扩展符号位。

//-----------------------------------------------

20 input  [3:0i_a, i_b, i_c;
21 input        i_mode;
22 output [7:0o_answer;
23 
24 wire [7:0answer_unsigned, answer_signed;
25 
26 // for unsigned operation
27 assign answer_unsigned i_a i_b {4'h0, i_c};
28 
29 // for singed operation
30 assign answer_signed {{4{i_a[3]}}, i_a} {{4{i_b[3]}}, i_b} {{4{i_c[3]}}, i_c};
31 
32 assign o_answer (i_mode == 1'b0) answer_unsigned answer_signed;     
//------------------------------------------------------------------------------

 

39行為signedoperation

assign answer_signed {{4{i_a[3]}}, i_a} {{4{i_b[3]}}, i_b} {{4{i_c[3]}}, i_c};

一个很重要的观念:要做signed operation时,须先将所有数字做signextension后才能相加相乘。什么是signedextension呢?将最高位向左补满,如原来是0就用0补满,如原来是1就用1补满。因为结果是8bit,所以i_a、i_b和i_c都必须做signed extension成8 bit才能相加相乘。

 

 

 

转自:

http://www.cnblogs.com/lanlingshan/archive/2012/05/01/2478004.html

http://www.cnblogs.com/oomusou/archive/2007/11/25/971509.html

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【重要】关于有符号数与无符号数的一些总结
Verilog 中符号位扩展
js 有符号数转无符号数(10进制负数转16进制)
C语言基础学习—数据类型与运算符
为什么char的范围是 —128~ 127
IC大牛10多年的设计分享:数字典型电路知识结构地图及代码实现
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服