1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 自然二进制数与格雷码的相互转换

自然二进制数与格雷码的相互转换

时间:2023-01-18 02:50:06

相关推荐

自然二进制数与格雷码的相互转换

自然二进制码与格雷码的相互转换

一、前言二、自然二进制数转格雷码2.1 自然二进制数转格雷码原理2.2 verilog代码2.3 Testbench2.4 仿真结果 三、格雷码转自然二进制数2.1 格雷码转自然二进制数2.2 verilog代码2.3 Testbench2.4 仿真结果 四、总结

数字IC经典电路设计

经典电路设计是数字IC设计里基础中的基础,盖大房子的第一部是打造结实可靠的地基,每一篇笔者都会分门别类给出设计原理、设计方法、verilog代码、Testbench、仿真波形。然而实际的数字IC设计过程中考虑的问题远多于此,通过本系列希望大家对数字IC中一些经典电路的设计有初步入门了解。能力有限,纰漏难免,欢迎大家交流指正。

快速导航链接如下:

1.数字分频器设计

2.序列检测器设计

3.序列发生器设计

4.序列模三检测器设计

5.奇偶校验器设计

一、前言

什么是格雷码?

格雷码(Gray code)是一种二进制数码系统,格雷码的特点是从一个数变为相邻的一个数时,只有一个数据位发生跳变,由于这种特点,就可以避免二进制编码计数组合电路中出现的亚稳态。在某些应用中,格雷码具有排除歧义和减少数据传输错误的功能。

那么格雷码相较于自然二进制数有哪些优势?

避免计数器状态的冗余转换,在格雷码中,两个连续的数值仅仅只有一位不同,而在二进制码中两个连续的数值可能会有多位不同,这会导致在计数器发生器中产生大量的冗余状态转换。格雷码可以通过降低状态转换次数来设计出更简单的计数器。

降低传输干扰和误差。在数据传输过程中,如果使用二进制码,由于两个相邻的数值可能会有多位不同,数据在传输过程中可能会因为电磁干扰等原因而发生错误。而使用格雷码则能够避免这种情况,因为任何相邻的两个数值之间只有一位不同。

格雷码广泛应用在FIFO、跨时钟域的通信(CDC)、RAM地址寻址计数器、数据纠错等电路设计中。

二、自然二进制数转格雷码

2.1 自然二进制数转格雷码原理

从自然二进制码到格雷码的转换具体方法是:从二进制的最低位起,依次起与相邻左边的一位数进行异或逻辑运算,并且作为对应格雷码该位的值,最高位保持不变。简而言之就是,将二进制码与逻辑右移的二进制码进行异或可得到格雷码。

如图所示,根据图示可以写出的代码。

2.2 verilog代码

//自然二进制数转格雷码module bin2gray #(parameter width = 4//定义数据的位宽参数为4)(input [width - 1 : 0] bin,output [width - 1 : 0] gray);//二进制数逻辑右移与自身进行异或逻辑运算assign gray = (bin >> 1) ^ bin;endmodule

2.3 Testbench

`timescale 1ns/1ps;//仿真时间单位1ns 仿真时间精度1psmodule bin2gray_tb();parameter width = 4;//定义数据的位宽参数为4//信号申明reg [width - 1 : 0] bin;wire [width - 1 : 0] gray;//模块实例化(将申明的信号连接起来即可)bin2gray u_bin2gray(.bin(bin),.gray(gray));//为输入数据赋值initial beginbin = 4'd0;repeat(15) #10bin = bin + 1'b1;endendmodule

2.4 仿真结果

三、格雷码转自然二进制数

2.1 格雷码转自然二进制数

从格雷码到二进制码的转换具体的方法就是:从格雷码左边第二位(次高位),将每一位与其左边一位解码后的值进行异或,作为当前格雷码的值,而最左边一位(最高位)的解码结果就是它本身。简而言之就是,最高位不变,与二进制数左边一位数异或可得到当前位二进制数。

如图所示,根据图示可以写出的代码。

2.2 verilog代码

//格雷码转自然二进制数module gray2bin #(parameter width = 4//定义数据的位宽参数为4)(input [width - 1 : 0] gray,output [width - 1 : 0] bin);//利用generate...for逐位循环输出最低位至次高位二进制数genvar i;generatefor(i = width - 2; i >= 0; i = i - 1) begin: gray_2_binassign bin[i] = bin[i + 1] ^ gray[i]; //格雷码与二进制数前一位进行异或逻辑运算endendgenerate//二进制数最高位为格雷码最高位assign bin[width - 1] = gray[width - 1];endmodule

2.3 Testbench

`timescale 1ns/1ps;//仿真时间单位1ns 仿真时间精度1psmodule gray2bin_tb();parameter width = 4;//定义数据的位宽参数为4//信号申明reg [width - 1 : 0] gray;wire [width - 1 : 0] bin;//模块实例化(将申明的信号连接起来即可)gray2bin u_gray2bin(.bin(bin),.gray(gray));//为输入数据赋值initial begin#10 gray = 4'd0000; #10 gray = 4'd0001; #10 gray = 4'd0011; #10 gray = 4'd0010; #10 gray = 4'd0110; #10 gray = 4'd0111; #10 gray = 4'd0101; #10 gray = 4'd0100; #10 gray = 4'd1100; #10 gray = 4'd1101; #10 gray = 4'd1111; #10 gray = 4'd1110; #10 gray = 4'd1010; #10 gray = 4'd1011; #10 gray = 4'd1001; #10 gray = 4'd1000; endendmodule

2.4 仿真结果

四、总结

自然二进制数与格雷码转换:

从自然二进制码到格雷码的转换具体方法是:从二进制的最低位起,依次起与相邻左边的一位数进行异或逻辑运算,并且作为对应格雷码该位的值,最高位保持不变。简而言之就是,将二进制码与逻辑右移的二进制码进行异或可得到格雷码。从格雷码到二进制码的转换具体的方法就是:从格雷码左边第二位(次高位),将每一位与其左边一位解码后的值进行异或,作为当前格雷码的值,而最左边一位(最高位)的解码结果就是它本身。简而言之就是,最高位不变,与二进制数左边一位数异或可得到当前位二进制数。

自然二进制数与格雷码两者优势:

自然二进制数的编码方式简单明了,容易理解,在加减运算中能够直接进行,同时十分方便进行一些位运算操作(如移位、取反等)。格雷码计数时只有一位变化,可有效减少计数器状态的冗余转换,同时在传输数据时能够减小传输错误的概率,此外带权重编码处理更加方便。

在一定程度上自然二进制数与格雷码优缺点基本相反,综上所述,自然二进制数和格雷码各有优劣之处,需要根据具体应用场景选择合适的编码方式。简单来说,在计数器和编码器中,倾向于使用格雷码;而在进行加减运算时,则倾向于使用自然二进制数。

不定期检查、补充、纠错,欢迎随时交流纠错

最后修改日期:.5.07

软件版本:

仿真软件:Modelsim 10.6c

绘图软件:亿图图示

描述语言:verilog

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。