1)之前的笔记写过《补码探讨》,可知在FPGA综合成电路的时候最底层都是以补码的形式在运算,正数的补码就是本身,负数的补码要取反+1。

(2)那么Verilog中编程的时候对编程人员来说,其实想不到现在的编译器(Quartus II 9.1和ISE10.1没有问题,更高的版本应该更加可以了)都支持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;
这样就可以避免不必要的错误

verilog 有符号数运算的更多相关文章

  1. verilog中的有符号数运算

    verilog中的有符号数运算 http://hi.baidu.com/lixu1113/item/d00dc095f86aed48f142159a verilog中的有符号数运算 有符号数的计算:若 ...

  2. Verilog有符号数处理

    内容主要摘自以下两个链接:  https://www.cnblogs.com/LJWJL/p/3481995.html  https://www.cnblogs.com/LJWJL/p/3481807 ...

  3. verilog中的有符号数理解(转)

    verilog中的有符号数运算 有符号数的计算:若有需要关于有号数的计算,应当利用Verilog 2001所提供的signed及$signed()机制. Ex: input  signed [7:0] ...

  4. verilog中符号位的扩展问题

    以下内容转自 艾米电子 - 使用有符号数,Verilog(http://www.cnblogs.com/yuphone/archive/2010/12/12/1903647.html) Verilog ...

  5. C语言中 有符号数、无符号数、整数溢出 (转)

    #include<stdio.h> void main() { int l=-1; unsigned int c=135; printf("%u\n",l+c); } ...

  6. C语言中无符号数和有符号数之间的运算

    C语言中无符号数和有符号数之间的运算 C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. un ...

  7. quartus ii有符号数的问题(待完善)

    1.有符号数是以补码的形式存储的,在modelsim仿真时,补码自动转换为有符号的十进制数. 2.关于截位的问题: 当只取寄存器中的其中m位时,这时候取得的数是按照无符号位来处理的? 3.reg型数据 ...

  8. 深入理解计算机系统(2.5)------C语言中的有符号数和无符号数以及扩展和截断数字

    上一篇博客我们讲解了计算机中整数的表示,包括无符号编码和补码编码,以及它们之间的互相转换,个人觉得那是非常重要的知识要点.这篇博客我们将介绍C语言中的有符号数和无符号数以及扩展和截断数字. 1.C语言 ...

  9. 有符号数和无符号数------c++程序设计原理与实践(进阶篇)

    有符号数与无符号数的程序设计原则: 当需要表示数值时,使用有符号数(如 int). 当需要表示位集合时,使用无符号数(如unsigned int). 有符号数和无符号数混合运算有可能会带来灾难性的后果 ...

随机推荐

  1. Java虚拟机--------JVM常见参数

    JVM 调优常见参数 Java1.7的jvm参数查看一下官方网站. http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java. ...

  2. java中随机二维数组中寻找最大值并输出坐标

    public static void main(String[] args) { int x=0; int y=0; int a[][]=new int[5][5]; int max=-Integer ...

  3. 概念吓死人的webservice

    前倾提要:这是我七拼八凑,自己用手打出来的头一篇了!都是别人的想法,我抄袭的,我坦白,我这只是总结一下觉得有用的 本来题目想叫(1)REST API 和WebService(2)REST 样式和 SO ...

  4. C# 对Excel操作与分析

    今天帮现在饿公司写个工具,要动态读excel上的ip地址与端口号,来更改IE的代理地址,由于好久没写Excel的操作了,只能查阅以前的项目,总结一下: 首先我们要引用我们的com接口的excelMic ...

  5. leetcode238

    public class Solution { public int[] ProductExceptSelf(int[] nums) { int[] result = new int[nums.Len ...

  6. viewDidLoad, viewWillDisappear, viewWillAppear等区别及各自的加载顺序

    ios 开发中视图的声明周期 viewWillAppear: 视图即将可见时调用.默认情况下不执行任何操作 viewDidAppear: 视图已完全过渡到屏幕上时调用 viewWillDisappea ...

  7. mac os High Sierra 升级错误

    升级mac OS High Sierra错误 已经成功从10.10升级到10.12.8 mac OS  Sierra了.就是升级到10.13报错. you may not install to thi ...

  8. [PHP]误读支付宝接口可能引发的乌龙

    ------------------------------------------------------------------------------------ 之所以发现这个坑,源起项目中的 ...

  9. 在阿里云Ubuntu 14.04 Linux服务器上安装docker

    参考 How To Install and Use Docker: Getting Started 这篇最靠谱的文档在阿里云 Ubuntu  14.04 服务器上成功安装 docker . ---- ...

  10. 网络抓包工具 wireshark 入门教程

    Wireshark Wireshark(前称Ethereal)是一个网络数据包分析软件.网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络数据包数据.Wireshark使用WinP ...