背景
由于人为或非人为的原因,代码在计算机或其他数字系统中形成、传送和运算过程中都有可能出现错误。于是人们在提高计算机本身的可靠性的同时,也创造了一些可靠性编码。它们令代码本身具有一种特征或能力,使得代码在形成中不容易出错,或代码在出错时容易被发现,甚至能查出出错的位置并予以纠正。
格雷码就是一种可靠性编码。在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码,另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码。在数字系统中,常要求代码按一定顺序变化。例如,按自然数递增技术,若采用8421码,则数0111变到1000时四位均要变化,而在实际电路中,4位的变化不可能绝对同时发生,则计数中可能出现短暂的其他代码(1100、1111等)。在特定情况下可能导致电路状态错误或输入错误。使用格雷码可以避免这种错误。
二进制到格雷码转换:
1,格雷码中的最高有效位(最左边)等同于二进制数中相应的最高有效位。
2,从左到右,加上每一对相邻的二进制编码位,从而得到下一个格雷码位,舍去进位。
例如二进制数10110到格雷码的转换如下,格雷码是11101:
代码:gray = binary ^ (binary >> 1)
二进制到格雷码转换器
module bin_to_gray (bin , gray);
parameter SIZE = 4;
input [SIZE - 1 :0] bin;
output [SIZE - 1 :0] gray;
assign gray = (bin >> 1) ^ bin ;
endmodule
格雷码到二进制转换器
module gray_to_bin (bin , gray);
parameter SIZE = 4;
input [SIZE - 1 :0] gray;
output [SIZE - 1 :0] bin;
always@(gray)begin
for(i = 0 ; i <= SIZE ; i++)
bin[i] = ^(gray >> i);
end
endmodule
格雷码主要应用
减低误码率,减少毛刺现象(异步FIFO设计)
同步格雷码计数器很少会导致取样计数器值出现亚稳态,此外取样后的值最多只有一位出现错误
由于翻转位数少,能耗低(状态编码与解码,格雷码是最适合低功耗设计的)
最后
以上就是外向小霸王最近收集整理的关于格雷码-数字设计应用的全部内容,更多相关格雷码-数字设计应用内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复