格雷码(Gray)和二进制(Binary)之间的相互转换

格雷码(Gray)和二进制(Binary)之间的相互转换格雷码(Graycode)是1880年由法国工程师Jean-Maurice-EmlleBaudot发明的一种编码,是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的

格雷码(Gray code)是1880年由法国工程师Jean-Maurice-Emlle Baudot发明的一种编码,是一种绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,虽然自然二进制码可以直接由数/模转换器转换成模拟信号,但在某些情况,例如从十进制的3转换为4时二进制码的每一位都要变,能使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它在相邻位间转换时,只有一位产生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。由于这种编码相邻的两个码组之间只有一位不同,引起数字量发生变化时,格雷码仅改变一位,这样与其它编码同时改变两位或多位的情况相比更为可靠,即可减少出错的可能性。

     格雷码是一个数列集合,相邻两数间只有一个位元改变,为无权数码,且格雷码的顺序不是唯一 的。
     格雷码的构造方法为:直接排列以二进制为0值的格雷码为第零项,第一项改变最右边的位元,第二项改变右起第一个为1的位元的左边位元,第三、四项方法同第一、二项,如此反覆,即可排列出n个位元的格雷码。


下面主要谈谈格雷码和自然二进制码之间的转换方法。

    1)自然二进制码转换为格雷码的方法

        自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高    位相异或,而格雷码其余各位与次高位的求法相类似。      

    原理: 若二进制码表示为: B[N-1]B[N-2]…B[2]B[1]B[0];

         相应地, 则二进制格雷码表示为: G[N-1]G[N-2]…G[2]G[1]G[0].

         其中最高位保留: G[N-1] = B[N-1];

         其他各位: G[i] = B[i+1] xor B[i]. (i = 0, 1, 2, …, n-2)

    图示如下:

       

格雷码(Gray)和二进制(Binary)之间的相互转换

bin[3]    bin[2]     bin[1]      bin[0]          —二进制值 : 二进制

         +     0     bin[3]     bin[2]      bin[1]          —右移值(二进制)


          gray[3]  gray[2]    gray[1]    gray[0]      —对应的格雷码值

总结:格雷码的值只需要在原来的二进制的基础上右移一位再加上原来的二进制值即可得到。

 

其实现代码如下:

module bin2gry(Gry,Bin);

parameter length = 8;     //以八位示例

output [length-1:0] Gry;

input [length-1:0] Bin;
reg [length-1:0] Gry;

integer i;
always @ (Bin)

begin

    for(i=0;i<length-1;i=i+1)

        Gry[i]=Bin[i]^Bin[i+1];

    Gry[i]=Bin[i];

end
/*另一种简单的实现方法如下:*/

// assign Gray = (Bin >> 1) ^ Bin;
endmodule

2)格雷码转换为二进制码的实现方法

         二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制       码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。      

    原理: 若二进制格雷码表示为: G[N-1]G[N-2]…G[2]G[1]G[0];

         相应地, 则二进制码表示为: B[N-1]B[N-2]…B[2]B[1]B[0].

         其中最高位保留: B[N-1] = G[N-1];

         其他各位: B[i-1] = G[i-1] xor B[i]. (i = 1, 2, …, n-1)

    图示如下:
格雷码(Gray)和二进制(Binary)之间的相互转换

module gry2bin(Gry,Bin);
parameter length = 8;
input [length-1:0] Gry;
output [length-1:0] Bin;
reg [length-1:0] Bin;
integer i;
always @ (Gry)begin       
Bin[length-1]=Gry[length-1];       
for(i=length-2;i>=0;i=i-1)               
Bin[i]=Bin[i+1]^Gry[i];
end
endmodule
综合结果如下:

格雷码(Gray)和二进制(Binary)之间的相互转换


今天的文章格雷码(Gray)和二进制(Binary)之间的相互转换分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/62611.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注