設(shè)計背景:
典型的二進(jìn)制格雷碼(Binary Gray Code)簡稱格雷碼,因1953年公開的弗蘭克·格雷(Frank Gray,18870913-19690523)專利“Pulse Code Communication”而得名,當(dāng)初是為了通信,現(xiàn)在則常用于模擬-數(shù)字轉(zhuǎn)換和位置-數(shù)字轉(zhuǎn)換中。法國電訊工程師波特(Jean-Maurice-émile Baudot,18450911-19030328)在1880年曾用過的波特碼相當(dāng)于它的一種變形。1941年George Stibitz設(shè)計的一種8元二進(jìn)制機(jī)械計數(shù)器正好符合格雷碼計數(shù)器的計數(shù)規(guī)律。
設(shè)計原理:
在一組數(shù)的編碼中,若任意兩個相鄰的代碼只有一位二進(jìn)制數(shù)不同,則稱這種編碼為格雷碼(GrayCode),另外由于最大數(shù)與最小數(shù)之間也僅一位數(shù)不同,即“首尾相連”,因此又稱循環(huán)碼或反射碼。在數(shù)字系統(tǒng)中,常要求代碼按一定順序變化。例如,按自然數(shù)遞增計數(shù),若采用8421碼,則數(shù)0111變到1000時四位均要變化,而在實際電路中,4位的變化不可能絕對同時發(fā)生,則計數(shù)中可能出現(xiàn)短暫的其它代碼(1100、1111等)。在特定情況下可能導(dǎo)致電路狀態(tài)錯誤或輸入錯誤。使用格雷碼可以避免這種錯誤。格雷碼有多種編碼形式。
格雷碼(GrayCode)曾用過GreyCode、葛萊碼、格萊碼、戈萊碼、循環(huán)碼、反射二進(jìn)制碼、最小差錯碼等名字,它們有的不對,有的易與其它名稱混淆,建議不要再使用這些曾用名。
1位格雷碼有兩個碼字
(n+1)位格雷碼中的前2n個碼字等于n位格雷碼的碼字,按順序書寫,加前綴0
(n+1)位格雷碼中的后2n個碼字等于n位格雷碼的碼字,按逆序書寫,加前綴1
設(shè)計代碼:
設(shè)計模塊
0moduleb_g_b(bin,bo);//端口列表
1
2 input[7:0]bin;//8位二進(jìn)制輸入
3
4 reg[8:0]bi;
5 outputreg[8:0]bo;//8位二進(jìn)制輸出
6 reg[8:0]g;
7
8 //二進(jìn)制轉(zhuǎn)格雷碼
9 integeri;
10 always@(*)
11 begin
12 bi =bin;
13 bi[8]=0;
14 for(i =7;i >=0;i =i -1)
15 g[i]=bi[i]^bi[1+i];
16
17 end
18
19 //格雷碼轉(zhuǎn)二進(jìn)制
20 always@(*)
21 begin
22 bo[8]=0;
23 for(i =7;i >=0;i =i -1)
24 bo[i]=g[i]^bo[i +1];
25 end
26
27endmodule
測試模塊
0`timescale1ns/1ps//仿真時標(biāo)
1
2moduletb;
3
4 reg[7:0]bi;
5 wire[7:0]bo;
6
7 initialbegin
8 bi =0;
9
10 #50bi =8'haa;//二進(jìn)制模擬
11 #50bi =8'hff;
12 #50bi =8'h55;
13 #50bi =8'hff;
14
15 #200$stop;//停止
16
17 end
18
19 b_g_b dut(.bin(bi),.bo(bo));//端口例化
20
21endmodule
仿真圖:
設(shè)計背景:
典型的二進(jìn)制格雷碼(Binary Gray Code)簡稱格雷碼,因1953年公開的弗蘭克·格雷(Frank Gray,18870913-19690523)專利“Pulse Code Communication”而得名,當(dāng)初是為了通信,現(xiàn)在則常用于模擬-數(shù)字轉(zhuǎn)換和位置-數(shù)字轉(zhuǎn)換中。法國電訊工程師波特(Jean-Maurice-émile Baudot,18450911-19030328)在1880年曾用過的波特碼相當(dāng)于它的一種變形。1941年George Stibitz設(shè)計的一種8元二進(jìn)制機(jī)械計數(shù)器正好符合格雷碼計數(shù)器的計數(shù)規(guī)律。
設(shè)計原理:
在一組數(shù)的編碼中,若任意兩個相鄰的代碼只有一位二進(jìn)制數(shù)不同,則稱這種編碼為格雷碼(GrayCode),另外由于最大數(shù)與最小數(shù)之間也僅一位數(shù)不同,即“首尾相連”,因此又稱循環(huán)碼或反射碼。在數(shù)字系統(tǒng)中,常要求代碼按一定順序變化。例如,按自然數(shù)遞增計數(shù),若采用8421碼,則數(shù)0111變到1000時四位均要變化,而在實際電路中,4位的變化不可能絕對同時發(fā)生,則計數(shù)中可能出現(xiàn)短暫的其它代碼(1100、1111等)。在特定情況下可能導(dǎo)致電路狀態(tài)錯誤或輸入錯誤。使用格雷碼可以避免這種錯誤。格雷碼有多種編碼形式。
格雷碼(GrayCode)曾用過GreyCode、葛萊碼、格萊碼、戈萊碼、循環(huán)碼、反射二進(jìn)制碼、最小差錯碼等名字,它們有的不對,有的易與其它名稱混淆,建議不要再使用這些曾用名。
1位格雷碼有兩個碼字
(n+1)位格雷碼中的前2n個碼字等于n位格雷碼的碼字,按順序書寫,加前綴0
(n+1)位格雷碼中的后2n個碼字等于n位格雷碼的碼字,按逆序書寫,加前綴1
設(shè)計代碼:
設(shè)計模塊
0moduleb_g_b(bin,bo);//端口列表
1
2 input[7:0]bin;//8位二進(jìn)制輸入
3
4 reg[8:0]bi;
5 outputreg[8:0]bo;//8位二進(jìn)制輸出
6 reg[8:0]g;
7
8 //二進(jìn)制轉(zhuǎn)格雷碼
9 integeri;
10 always@(*)
11 begin
12 bi =bin;
13 bi[8]=0;
14 for(i =7;i >=0;i =i -1)
15 g[i]=bi[i]^bi[1+i];
16
17 end
18
19 //格雷碼轉(zhuǎn)二進(jìn)制
20 always@(*)
21 begin
22 bo[8]=0;
23 for(i =7;i >=0;i =i -1)
24 bo[i]=g[i]^bo[i +1];
25 end
26
27endmodule
測試模塊
0`timescale1ns/1ps//仿真時標(biāo)
1
2moduletb;
3
4 reg[7:0]bi;
5 wire[7:0]bo;
6
7 initialbegin
8 bi =0;
9
10 #50bi =8'haa;//二進(jìn)制模擬
11 #50bi =8'hff;
12 #50bi =8'h55;
13 #50bi =8'hff;
14
15 #200$stop;//停止
16
17 end
18
19 b_g_b dut(.bin(bi),.bo(bo));//端口例化
20
21endmodule
仿真圖:
在仿真圖中可以得到,在設(shè)計文件中設(shè)計的輸入二進(jìn)制為00 55 等等,在轉(zhuǎn)化后的輸出模塊中可以清楚的看到輸入和輸出是一樣的,通過仿真可以得到本次設(shè)計正確。
-
FPGA
+關(guān)注
關(guān)注
1638文章
21861瀏覽量
609966
發(fā)布評論請先 登錄
相關(guān)推薦
偏移二進(jìn)制和二進(jìn)制補(bǔ)碼如何和實際數(shù)據(jù)對應(yīng),如何轉(zhuǎn)換?
bcd編碼的應(yīng)用 bcd與二進(jìn)制的區(qū)別
hex格式和二進(jìn)制的區(qū)別
在線二進(jìn)制編碼器:數(shù)據(jù)轉(zhuǎn)換的快捷通道
ASCII碼和二進(jìn)制的轉(zhuǎn)換關(guān)系
二進(jìn)制編碼器的精度與分辨率
二進(jìn)制編碼器在自動化領(lǐng)域的作用
二進(jìn)制編碼器的種類及特點
二進(jìn)制編碼器應(yīng)用場景 二進(jìn)制編碼器與模擬編碼器比較
二進(jìn)制編碼器工作原理 如何選擇二進(jìn)制編碼器
二進(jìn)制補(bǔ)碼及與原碼的互相轉(zhuǎn)換方法
二進(jìn)制處理中的一些技巧
十進(jìn)制和4位二進(jìn)制計數(shù)器數(shù)據(jù)表

二進(jìn)制串行計數(shù)器工作原理是什么?
雙4位十進(jìn)制和二進(jìn)制計數(shù)器數(shù)據(jù)表

評論