格雷码--习题

在这里插入图片描述

格雷码(Gray code)是一个数列集合,相邻两数间只有一个位元改变,为无权数码,且格雷码的顺序不是唯一的。另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。

格雷码能避免讯号传送错误的原理
传统的二进制系统例如数字3的表示法为011,要切换为邻近的数字4,也就是100时,装置中的三个位元都得要转换,因此于未完全转换的过程时装置会经历短暂的,010,001,101,110,111等其中数种状态,也就是代表着2、1、5、6、7,因此此种数字编码方法于邻近数字转换时有比较大的误差可能范围。葛雷码的发明即是用来将误差之可能性缩减至最小,编码的方式定义为每个邻近数字都只相差一个位元,因此也称为最小差异码,可以使装置做数字步进时只更动最少的位元数以提高稳定性。 数字0~7的编码比较如下:
十进制 格雷码 二进制
0    000 000
1    001 001
2   011 010
3   010 011
4   110 100
5   111 101
6   101 110
7   100 111

直接排列
以二进制为0值的格雷码为第零项,第一项改变最右边的位元,第二项改变右起第一个为1的位元的左边位元,第三、四项方法同第一、二项,如此反复,即可排列出n个位元的格雷码。

假设原始的值从0开始,格雷码产生的规律是:
第一步,改变最右边的位元值;
第二步,改变右起第一个为1的位元的左边位元;
第三步,第四步重复第一步和第二步,直到所有的格雷码产生完毕(换句话说,已经走了(2^n) - 1 步)。
用一个例子来说明:
  假设产生3位元的格雷码,原始值位 000
  第一步:改变最右边的位元值: 001
  第二步:改变右起第一个为1的位元的左边位元: 011
  第三步:改变最右边的位元值: 010
  第四步:改变右起第一个为1的位元的左边位元: 110
  第五步:改变最右边的位元值: 111
  第六步:改变右起第一个为1的位元的左边位元: 101
  第七步:改变最右边的位元值: 100

镜射排列
生成二进制格雷码方式2:n位元的格雷码可以从n-1位元的格雷码以上下镜射后加上新位元的方式快速的得到,如图所示。
在这里插入图片描述
格雷码和二进制码的转换
自然二进制码与格雷码的对照表:
在这里插入图片描述

二进制码转换成二进制格雷码

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

二进制码 ----> 格雷码(编码):从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是0)。

公式表示:G:格雷码 B:二进制码
整个数G(N) = (B(n) >> 1) XOR B(n)
在这里插入图片描述

格雷码转换成二进制码

二进制格雷码转换成二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。
公式表示:
在这里插入图片描述
在这里插入图片描述

应用:

【1】格雷氏编码与相位移在三维曲面量测:利用格雷码投射在微型曲面做量测 一个非接触式、投影的方法光学测量。
【2】在化简逻辑函数时,可以通过按格雷码排列的卡诺图来完成。
【3】格雷码在异步FIFO中的应用
在异步FIFO中,写操作和读操作工作在不同的时钟域,需要跨时钟域来传递FIFO的空满状态信息。一般是通过传递读写的地址来实现空满状态控制的。

写地址减去读地址(如果写地址小于读地址,则写地址先加上FIFO深度再减去读地址),即为FIFO中存放的数据个数,由此产生FIFO的空满判断。不管是读地址还是写地址,每次变化都是加1,溢出后从0开始重新累加。

当写地址跨越时钟域到达读操作一侧时,需要用读时钟去采样由写时钟产生的数据(即写地址)。由于是异步操作,有可能会出现竞争和冒险,采样过程不满足建立保持时间,导致亚稳态。写地址变化的位越多,出现亚稳态的位就越多,用读时钟采样时出错的概率越高。

同理,当读地址跨越时钟域到达写操作侧时,读地址变化的位越多,写时钟采样时出错的概率越高。因此,必须采用有效的编码,降低读写地址在连续变化时的位翻转率。采用格雷码就能有效的降低连续变化数值的位翻转率。

解决方法:可以在将地址跨越时钟域之前,先转换成格雷码,然后跨越时钟域。到达另一时钟域后,通过两级寄存器消除亚稳态,再将格雷码转换成二进制数。这样,每次地址变化,跨越时钟域时只有一位可能出错,可以大幅降低出错概率,提高FIFO运行的可靠性。

参考文献:
【1】https://zh.wikipedia.org/wiki/%E6%A0%BC%E9%9B%B7%E7%A0%81(维基百科)
【2】https://blog.csdn.net/pipisorry/article/details/72356418
【3】https://blog.csdn.net/i540113104/article/details/81268443

发布了67 篇原创文章 · 获赞 7 · 访问量 4954

猜你喜欢

转载自blog.csdn.net/qq_43042339/article/details/104099610