回答

收藏

格雷码的递增方法

其他 其他 3248 人阅读 | 0 人回复 | 2010-04-20

?近来从网上搜索格雷码的一些知识,从参考程序中总结出格雷码的递变规则,并对格雷码Verilog语言程序做了一些改进。不知以前有没有人发过。
首先给出4位二进制格雷码对应表
?
十进制数?自然二进制数?格雷码???
0?????? 0000????? 0000???
1?????? 0001????? 0001???
2?????? 0010????? 0011???
3?????? 0011????? 0010???
4?????? 0100????? 0110???
5?????? 0101????? 0111???
6?????? 0110????? 0101???
7?????? 0111????? 0100???
8?????? 1000????? 1100???
9?????? 1001????? 1101???
10?????1010????? 1111???
11?????1011????? 1110???
12?????1100????? 1010???
13?????1101????? 1011???
14?????1110????? 1001???
15?????1111????? 1000?
?格雷码递变规则:先将格雷码转换为二进制,将对应二进制的值从最右边低位依次向左扫描,直到扫到某一位为零即止,将相应格雷码对应该位的值取反,即得下一级格雷码。
?例如:格雷码1110,对应二进制为1011,对应第三位为零,所以将格雷码第三位取反,得下一级格雷吗为1010。
?下面是格雷码计数器的程序(转载)
ⅰ、格雷码计数器的关键在于根据当前码计算出下一个码,也就是计算出当前哪个位需要取反。
此处给出Matlab的一种算法:
function NxG = fNextGray( CurG, N )
?B(1) = CurG(1);
?for k = 2 : N
?? ??B(k) = xor( CurG(k), B(k-1));
end
?C = CurG;
?for k = N : -1 : 1
???? if B(k) == 0 | k == 1
???? ????C(k) = not( C(k));
????? ???break
?? ?end
end
NxG = C;
?ⅱ、8bits格雷码计数器的Verilog描述
?module GrayCnt( Clk, nRst, CntOut );
input Clk, nRst;
output [7:0] CntOut;
reg [7:0]?? CntOut;
reg [7:0]?? NextCnt;
always @(posedge Clk)
begin
?? if (~nRst)
????? CntOut
分享到:
回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条