【基础知识】~ 进制转换、补码、格雷码、BCD码、独热码

您所在的位置:网站首页 格雷码二进制转换器 【基础知识】~ 进制转换、补码、格雷码、BCD码、独热码

【基础知识】~ 进制转换、补码、格雷码、BCD码、独热码

2024-07-09 06:57| 来源: 网络整理| 查看: 265

1. 进制转换 1.1 十进制 to 二进制 正整数转二进制:除二取余,然后倒序排列,高位补零。负整数转二进制:先是将对应的正整数转换成二进制后,对二进制取反,然后对结果再加一。小数转二进制:对小数点以后的数乘以 2,取整,剩余小数再乘以 2,直至小数部分为 0(有可能永远有小数,此时按需停止)

小数部分和整数部分互不影响,分开转换,最后合在一起即可。

1.2 二进制 to 十进制 整数二进制转十进制:高位补零(比如数据为 8 位),再确定是有符号还是无符号,若是有符号整数,当最高位是 0 为正数,1 为负数; 正整数,去除符号位,各个位数与对应 2 次幂相乘,最后求和。 负整数,去除符号位,减一,取反,再换算,记得添加整数的负号。小数二进制十进制:各个位数与对应 2 的负次幂相乘,最后求和。 2. 原码、反码和补码 2.1 定义 计算机中的有符号数有三种表示方法,即原码、反码和补码。 三种表示方法均有**符号位**和**数值位**两部分,符号位都是用 0 表示“正”,用 1 表示“负”,而数值位,三种表示方法各不相同。 在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值域统一处理;同时,加法和减法也可以统一处理。 2.2 采用补码运算具有如下两个特征

1)因为使用补码可以将符号位和其他位统一处理,同时,减法也可以按加法来处理,即如果是补码表示的数,不管是加减法都直接用加法运算即可实现。 2)两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。

补码有两个好处

1)使符号位能与有效值部分一起参加运算,从而简化运算规则。从而可以简化运算器的结构,提高运算速度;(减法运算可以用加法运算表示出来。) 2)加法运算比减法运算更易于实现。使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。

3. 格雷码 3.1 定义

格雷码(Gray code),又叫循环二进制码或反射二进制码。 在数字系统中只能识别 0 和 1,各种数据要转换为二进制代码才能进行处理。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的 3 转换成 4 时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。格雷码常用于通信,FIFO 或者 RAM 地址寻址计数器中。

3.2 二进制和格雷码转换 二进制码->格雷码(编码):从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是 0); # 注意:这里边的i取值范围是0~N-1(N为位宽) assign gray_value[ i ] = binary_value[ i ] ^ binary_value[ i + 1 ]; # 方式一 assign gray_value[ i ] = binary_value[ i ] ^ binary_value >> 1; # 方式二 格雷码-〉二进制码(解码):从左边第二位起,将每位与左边一位解码后的值(这里指的是二进制相邻高位,可不是格雷码相邻高位哦!!!)异或,作为该位解码后的值(最左边一位依然不变). # 注意:这里边的i取值范围是0~N-2(N为位宽) assign binary_value[n-1] = gray_value[n-1]; assign binary_value[ i ] = gray_value[ i ] ^ binary_value[ i + 1 ]; 3.3 优缺点

优点:属于压缩状态编码,使用的触发器位数少;相邻状态变换时,仅一位发生改变,电噪声小,转换速度较快; 缺点:译码复杂,没有固定大小,很难直接进行比较大小和算术运算,需要转换为自然二进制码来判断。

3.4 牛刀小试

格雷码计数器

`timescale 1ns/1ns module gray_counter( input clk, input rst_n, output reg [3:0] gray_out ); reg [4:0] binary; //counter always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin binary


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3