对verilog中有符号数和无符号数的理解
文章目录
- 对verilog中有符号数和无符号数的理解
对verilog中有符号数和无符号数的理解
verilog中使用signed表示有符号数,比如:
wire signed [7:0] din;assign din = -8'd1;
虽然书写上din等于十进制的 -1 ,但是在编译器会自动将din编译成补码的形式保存
所以虽然书写上可以将一个信号写成负数的形式,但是在电路中并不存在真正的负数,负数只会被转换为补码的形式进行运算。
如果撇去signed类型不谈。我们依旧可以将reg或者wire类型的数据看作有符号或者无符号的。如果看作有符号的,那么就是补码的形式,如果看作无符号的,就是源码的形式。比如1111如果看作无符号的就是7,如果看作有符号的就是-1。
对于两个无符号数,什么时候相加会出现错误(溢出)的情况呢?
reg [7:0] din1;
reg [7:0] din2;
wire [7:0] dout;
wire ov;
{ov,dout} = din1 + din2;
很明显,如果ov的值为1的话,就说明发生了溢出,即出错了。
对于两个有符号数,什么时候相加会出现错误呢?
reg [7:0] din1;
reg [7:0] din2;
wire [7:0] dout;
wire ov;assign dout = din1 + din2;
assign ov = ((~dout[7]) & din1[7] & din2[7]) | (dout[7] & (~din1[7]) & (~din2[7]));
这里将din1和din2都看作有符号数(即使用了补码的形式,表示的取值范围在-128-127之间)。那么当两个整数相加结果却为负数,或者两个负数相加结果却为正数的时候就说明结果出错了,即ov等于1的时候结果就出错了。
比如1001是-7,1110是-2,1001+1110 = 10111,取后四位的话就是7,明显错了。
1110是-2,1101是-3,1110 + 1101 = 11011,取后四位就是-5,结果就对了。
当然如果加上溢出位的话,那么结果就都是对的了。
对verilog中有符号数和无符号数的理解相关推荐
- verilog中有符号数和无符号数的相关运算
目录 1.有符号数和有符号数的加减运算(输入和输出为原码) 2.无符号数和有符号数的加减运算(输入和输出为原码) 3.有符号数和有符号数的乘法(输入和输出为原码) 1.有符号数和有符号数的加减运算(输 ...
- java中有符号数和无符号数,C语言中无符号数和有符号数之间的运算
C语言中有符号数和无符号数进行运算(包括逻辑运算和算术运算)默认会将有符号数看成无符号数进行运算,其中算术运算默认返回无符号数,逻辑运算当然是返回0或1了. unsigned int和int进行运算 ...
- C语言中有符号数和无符号数的问题
C语言中有符号数和无符号数的问题 项目说明 考虑下列代码, 这段代码试图计算数组a中所有元素的和, 其中元素的数量由参数length给出: /* WARNING: This is buggy ...
- Verilog有符号数与无符号数的相互转化
Verilog有符号数与无符号数的相互转化 最近在使用DA转换时碰到一个问题,DA芯片输入的数值必须是正的,但输出的数据为有符号数,涉及到一个转化的问题,写一篇博客总结一下. 问题描述 一.正数 二. ...
- 关于汇编中有符号数和无符号数的判断
首先给一段代码 1 #include <stdio.h> 2 int main() 3 {unsigned int x=9; 4 int y=-20; 5 int m=(x+y> ...
- Quartus中有符号数和无符号数比较大小
有符号数和无符号数比较大小,有符号数会被当做无符号数. 代码如下.我把波形信号data和dac输出进行比较,比较结果如图.可以看到当data为正时,比较结果是对的:当data为负时,被当做正的 ...
- Verilog 有符号数与无符号数运算
无符号数运算,左值位宽不够,发生截断的现象 reg [3:0] a = 4'b1111;//15 reg [3:0] b = 4'b0010;//2 wire [3:0] c; wire [3:0] ...
- c语言 有符号数与0作比较大小,C语言中有符号数与无符号数能否进行比较运算...
无符号数和有符号数是不能进行比较运算的,否则可能会出现意想不到的错误,且极难检查出来! 首先肯几个例子(假设在32位的机器上): 1 1. 0 == 0U 2 2. - ...
- verilog有符号数和无符号数的计算
有符号和无符号数 在电路设计中肯定会使用到有符号数无符号数的运算,今天简单说说具体怎么使用有符号数无符号数进行运算,这里以减法为例. 我们知道计算机运算都是以二进制的形式进行的,不过遇到负数,通常用二 ...
最新文章
- mysql返回记录的ROWNUM(转)
- asp.net日期显示 问题
- windows下扩展yaf,并生成yaf框架文件(亲测)
- 数据结构——图-迪杰斯特拉算法
- INF DestinationDirs Section
- react学习(46)----react渲染组件
- php类中双冒号和-的区别
- 互联网思维心得体会1500字_读懂《天道》丁元英的3个“高人”思维,你少走10年职场弯路...
- bzoj 1605: [Usaco2008 Open]Crisis on the Farm 牧场危机(DP)
- 资深大学老师告诉你:嵌入式、单片机开发必备软件有哪些
- 哈工大密码学实验CA
- Ubuntu16.04 pip下载安装tensorflow(GPU版)
- 如果“永远”只是一瞬间
- HDU - 6769
- CodeForces 858C Did you mean... 、 CodeForces 858D Polycarp's phone book!黑科技
- 实现求出100~200之间的全部素数,每行输出8个数,每个数宽度为5列。 输入格式:无 输出格式:“%5d“ “\n“
- 中国科技大学科学岛计算机系,中国科学技术大学2020年优秀大学生科学岛推免夏令营通知...
- OpenLayers官方示例详解七之图层的最小、最大分辨率(Layer Min/Max Resolution)
- 【转载】【《Real-Time Rendering 3rd》 提炼总结】(四) 第五章 · 图形渲染与视觉外观 The Visual Appearance
- 树莓派如何终端手动配网
热门文章
- 复试上机指南之小技巧篇(1)
- java 声明变量 初始化_Java变量的声明和初始化
- 个人IP打造全过程:如何打造出属于自己的个人IP?
- 下面哪个P2P网贷平台将会倒闭或者跑路?[预测挺准]
- 对n个整数进行升序排序
- 离散数学学习笔记— —范式
- 可用于测量多种气体种类的便携式万用气体检测仪
- linux 数据绘图软件,linux下的数据绘图工具-gnuplot
- 我的世界主流服务器模组,我的世界:4款百玩不厌的服务器模组大盘点 植物魔法借鉴崩坏2?...
- 2020年P气瓶充装证考试题库及P气瓶充装试题解析