在数字逻辑系统,仅仅存在高低。所以用它只代表一个整数数字。并且有3代表性的种类。这是:原码表示(符号加绝对值值)、反码表示(加-minus标志)而补码(符号加补)。这三个在FPGA中都有着广泛的应用。以下分别讨论。
1、原码表示法
原码表示法是机器数的一种简单的表示法。採用符号位级联绝对值的方法表示数字。其最高位为符号位,用0表示正数,1表示负数;其余部分为绝对数值部分。原码一般用二进制形式表示。
比如,X1 = +1010110,X2 = -1001010,则其原码分别为:01010110和11001010
原码表示数的范围与二进制位数有关。当用8位二进制来表示小数原码时,其表示范围:最大值为0.1111111,其真值约为10进制中的0.99;最小值为1.1111111。其真值约为十进制的-0.99。
当用8位二进制来表示整数原码时。其表示范围:最大值为01111111。其真值为十进制的127;最小值为11111111。其真值为十进制的-127。
在原码表示法中。对0有两种表示形式,分别记为+0和-0,以8比特数据为例,其对应的表示为:+0=00000000、-0=10000000。
2、反码表示法
反码可由原码得到。
假设数字是正数,则其反码与原码一样。假设数字是负数,则其反码是对它的原码(符号位除外)各位取反而得到的。
比如:X1 = +1010110, X2=-1001010,则其对应的反码为01010110、10110101。
3、补码表示法
补码表示法师实际中应用最广泛的数字表示法。其表示规则例如以下:若是正数。补码、反码和原码的表示是一样的。若是负数,补码、反码和原码的表示都不一样。
由反码与原码之间的关键,负数的补码等于其反码在最低位加1。
4、各类表示方法小结
原码的长处就是乘除运算方便。不论正负数,乘除运算都一样,并以符号位决定结果的正负号;若做加法则须要推断两数符号是否同样。若作减法,还须要推断两数绝对值的大小,以使大数减小数。
补码的长处是。加法运算方便,不论数的正负都可直接相加。而符号位相同參加运算。
例:给出各类码字表示法的基本加法运算实例,并说明各自特点
(1)首先给出原码的运算演示样例。当中()d代表十进制数。
首先给出一个原码的减法计算实例,完毕“1 + (-1)= 0“”的操作。
(1)d + (-1)d = (0)d
假设读者直接利用原码来完毕上式运算,会发现用符号位的原码进行在加减运算的时候就会出现故障。将数据以8比特的表示形式为例,
(00000001)原 + (10000001)原 = (10000001)原 = (-2)d
计算结果是不对的,问题在于两点:首先。负数的符号位直接改变了计算结果符号;其次,绝对值部分计算也不对。
这说明原码无法直接完毕正数和负数的加法。
(2)既然,原码不能完毕正、负数相加。那么反码形式能够完毕此操作吗?仍然以”1 + (-1) = 0“ 为例,其对应的反码表达式例如以下:
(00000000)反 + (11111110)反 = (11111111)反 = (-0)d
则发现问题出如今+0和-0上。由于实际的计算中的零没有正负之分的。但上式标明了反码完毕正、负数相加后。其绝对值部分是正确的。因此能正确完毕正、负数相加的表达形式必然包括反码的特性。
(3)最后给出补码的相关特性说明,负数的补码就是对反码加1,而正数不变。
以8比特数据为例。通过(-128)d取代了(-10)d。所以其表示范围为【-128,127】。从直观上。补码消除了(+0)和(-0)。而且具备反码特点,那么到底其能完毕正、负加法运算吗?答案是肯定的,以下给出详细实例,所看到的
(00000001)补 + (11111111)补 = (00000000)补 = (0)d
基于以上讨论,能够得到一个基本结论:仅仅有补码才干正确完毕正负加法运算,并将减法运算转化为加法运算,从而简化运算规则。
但对于乘法操作。则以原码形式计算是最方便的。以下有实例。
演示1:原码进行乘法运算 -2 * 2 = -4
module mul(
input clk,
input rstn,
input [7:0] a,
input [7:0] b, output [14:0] q_mul,
output reg [8:0] q_add,
output reg[7:0] ra,
output reg[7:0] rb
); reg [13:0] rmul; always @(posedge clk or negedge rstn)
if(!rstn)
begin
q_add <= 0;
ra <= 0;
rb <= 0; rmul <= 0;
end
else begin //q_mul <= a*b;
if(a[7]==1)
ra = {a[7],~a[6:0] + 1};
else
ra = a;
if(b[7]==1)
rb = {b[7],~b[6:0] + 1};
else
rb = b;
rmul <= ra[6:0]*rb[6:0]; q_add <= {a[7],a} + {b[7],b};
end assign q_mul = {a[7]^b[7],rmul}; endmodule
演示2:通过reg signed实现
module signedMul(
input clk,
input rstn,
input [7:0] a,
input [7:0] b,
output [15:0] q
); reg signed[7:0] ra;
reg signed[7:0] rb; always @(posedge clk or negedge rstn) begin
if(~rstn) begin
ra <= 0;
rb <= 0;
end
else begin
ra <= a;
rb <= b;
end
end
assign q = ra * rb; endmodule
版权声明:本文博主原创文章,博客,未经同意不得转载。
FPGA图案--数字表示(代码+波形)的更多相关文章
-
基于FPGA的数字识别的实现
欢迎大家关注我的微信公众号:FPGA开源工作室 基于FPGA的数字识别的实现二 作者:lee神 1 背景知识 1.1基于FPGA的数字识别的方法 通常,针对印刷体数字识别使用的算法有:基于模版 ...
-
FPGA经典:Verilog传奇与基于FPGA的数字图像处理原理及应用
一 简述 最近恶补基础知识,借了<<Verilog传奇>>,<基于FPGA的嵌入式图像处理系统设计>和<<基千FPGA的数字图像处理原理及应用>& ...
-
最短的数字判断代码 js
转自 http://www.cnblogs.com/snandy/p/3590186.html 我们知道JavaScript提供了typeof运算符,因此最容易想到的是用typeof来判断是否是nu ...
-
delphi 简单的删除字符串尾部数字的代码
delphi 简单的删除字符串尾部数字的代码 方式一: function FilterShowName(const sName: String): String; var I: Integer; b ...
-
编程算法 - 圆圈中最后剩下的数字(递推公式) 代码(C++)
圆圈中最后剩下的数字(递推公式) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0開始 ...
-
编程算法 - 圆圈中最后剩下的数字(循环链表) 代码(C++)
圆圈中最后剩下的数字(循环链表) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 0,1...,n-1这n个数字排成一个圆圈, 从数字0開始 ...
-
FPGA与数字信号处理
过去十几年,通信与多媒体技术的快速发展极大地扩展了数字信号处理(DSP)的应用范围.眼下正在发生的是,以更高的速度和更低的成本实现越来越复杂的算法,这是针对高级信息服更高带宽以及增强的多媒体处理能力等 ...
-
&#160;FPGA边沿检测Verilog代码
FPGA边沿检测Verilog代码(上升沿,下降沿,双边沿) 实现思路:用两个一位寄存器直接异或可以实现 代码实现: module edge_detect( input clk, input rs ...
-
FPGA与数字图像处理技术
数字图像处理方法的重要性源于两个主要应用领域: 改善图像信息以便解释. 为存储.传输和表示而对图像数据进行处理,以便于机器自动理解. 图像处理(image processing): 用计算机对图像进行 ...
随机推荐
-
React Native Android gradle下载慢问题解决
很多人会遇到 初次运行 react-native run android的时候 gradle下载极慢,甚至会失败的问题 如下图 实际上这个问题好解决的 首先 把对应版本的gradle下载到本地任意一个 ...
-
iOS学习——制作一个小型加法计算器
一.项目要求:制作一个加法计算器.在第1个和第2个文本框中输入两个整数,然后点击“计算”按钮,可将计算结果显示在第3个文本框中. 二.开发步骤: 1.搭建UI界面 2.监听按钮的点击事件 3.获取文本 ...
-
jQuery Layer mobile 弹出层
layer mobile是为移动设备(手机.平板等webkit内核浏览器/webview)量身定做的弹层支撑,采用Native JavaScript编写,完全独立于PC版的layer,您需要按照场景选 ...
-
C基础 那些年用过的奇巧淫技
引言 - 为寻一颗明星 为要寻一颗明星 徐志摩 1924年12月1日<晨报六周年纪念增刊> 我骑著一匹拐腿的瞎马, 向著黑夜里加鞭:—— 向著黑夜里加鞭, 我跨著一匹拐腿的瞎马.// 我冲 ...
-
手把手教你把VIM改成一个集成开发环境
转载自:http://blog.csdn.net/wooin/article/details/1858917 在原文基础上经过自己验证,修改和完善 OS:Fedora19 VIM:VIM7.4 一.写 ...
-
使用Windows USB-DVD制作U盘启动安装系统盘
第一步:到如下所示的地址下载所需要的*.iso系统镜像文件. http://msdn.itellyou.cn/ 第二步:下载Windows USB-DVD工具 https://www.microsof ...
-
Day01
1.@Test函数,执行后控制台没有输出结果? 1) 不能用静态方法,控制台会没有结果. 2) 不能把类名命名为Test,@Test不识别. 2.遍历Map集合的entrySet方法不会? 3.使 ...
-
aliyun centos7 挂载云盘
买了云盘,在哪里放着,也没有用到,今天把她挂上去吧! 1.查看SSD云盘sudo fdisk -l 可以看到SSD系统已经识别为/dev/vdb 2.格式化云盘sudo mkfs.ext4 /dev/ ...
-
thinkphp模板继承
public/base.html <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
-
[No000011B]为什么有些程序员悄无声息渡过35岁中年危机?
今天分享是一些已经渡过中年危机的前辈们,看看从他们身上,是如何优雅的过渡的.如果想一直在程序这条路上走下去,建议读完.文章略长. 人物一:陈睿,前百度研发经理,携程定制旅游CTO 从程序员到架构师到管 ...