0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA學(xué)習(xí)系列:33. 二進(jìn)制轉(zhuǎn)格雷碼轉(zhuǎn)二進(jìn)制的設(shè)計

FPGA學(xué)習(xí)交流 ? 2018-08-28 16:16 ? 次閱讀

設(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è)計正確。



聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1638

    文章

    21861

    瀏覽量

    609966
收藏 人收藏

    評論

    相關(guān)推薦

    偏移二進(jìn)制二進(jìn)制補(bǔ)碼如何和實際數(shù)據(jù)對應(yīng),如何轉(zhuǎn)換?

    偏移二進(jìn)制二進(jìn)制補(bǔ)碼如何和實際數(shù)據(jù)對應(yīng),如何轉(zhuǎn)換,請哪位高手解惑
    發(fā)表于 01-16 06:01

    bcd編碼的應(yīng)用 bcd與二進(jìn)制的區(qū)別

    BCD(Binary-Coded Decimal)編碼是一種二進(jìn)制編碼形式,用于表示十進(jìn)制數(shù)字。它將每個十進(jìn)制數(shù)字(0-9)直接編碼為一個四位二進(jìn)制數(shù)。BCD編碼的主要優(yōu)點是易于閱讀和
    的頭像 發(fā)表于 12-20 17:11 ?2144次閱讀

    hex格式和二進(jìn)制的區(qū)別

    。 它以ASCII文本形式表示的十六進(jìn)制數(shù)據(jù),每兩個十六進(jìn)制字符對應(yīng)一個字節(jié)。 HEX文件包含了記錄類型、數(shù)據(jù)長度、地址、數(shù)據(jù)以及校驗和等信息,具有結(jié)構(gòu)化且包含校驗的特點。 二進(jìn)制
    的頭像 發(fā)表于 11-18 15:24 ?1170次閱讀

    在線二進(jìn)制編碼器:數(shù)據(jù)轉(zhuǎn)換的快捷通道

    在數(shù)字時代,數(shù)據(jù)的快速轉(zhuǎn)換與處理至關(guān)重要。二進(jìn)制編碼,作為計算機(jī)內(nèi)部數(shù)據(jù)表示的基礎(chǔ),將信息轉(zhuǎn)化為0和1的序列,為數(shù)字世界構(gòu)建了溝通的橋梁。然而,對于非專業(yè)用戶來說,手動進(jìn)行二進(jìn)制編碼既繁瑣又易出錯
    的頭像 發(fā)表于 11-15 09:01 ?1392次閱讀

    ASCII二進(jìn)制的轉(zhuǎn)換關(guān)系

    。ASCII使用7位二進(jìn)制數(shù)來表示128個不同的字符,包括大小寫英文字母、數(shù)字0-9以及一些控制字符和標(biāo)點符號。后來,ASCII被擴(kuò)展到了8位,即ASCII-8BIT,可以表示256個不同的字符。
    的頭像 發(fā)表于 11-10 09:50 ?2886次閱讀

    二進(jìn)制編碼器的精度與分辨率

    編碼器是一種將模擬信號(如電壓、溫度等)轉(zhuǎn)換為二進(jìn)制代碼的設(shè)備。它通常包含一個模數(shù)轉(zhuǎn)換器(ADC),該轉(zhuǎn)換器通過比較輸入信號與一系列參考電壓來確定輸入信號的值。編碼器的輸出是一個二進(jìn)制數(shù),表示輸入信號的數(shù)字等價。
    的頭像 發(fā)表于 11-06 09:56 ?829次閱讀

    二進(jìn)制編碼器在自動化領(lǐng)域的作用

    二進(jìn)制編碼器是一種將二進(jìn)制信號轉(zhuǎn)換為數(shù)字信號的電子設(shè)備,廣泛應(yīng)用于自動化領(lǐng)域。 一、二進(jìn)制編碼器的工作原理 二進(jìn)制編碼器是一種將二進(jìn)制信號轉(zhuǎn)
    的頭像 發(fā)表于 11-06 09:53 ?667次閱讀

    二進(jìn)制編碼器的種類及特點

    二進(jìn)制編碼器是一種電子電路,用于將二進(jìn)制信號轉(zhuǎn)換為其他格式,如十進(jìn)制、等。以下是一些常見的
    的頭像 發(fā)表于 11-06 09:47 ?958次閱讀

    二進(jìn)制編碼器應(yīng)用場景 二進(jìn)制編碼器與模擬編碼器比較

    編碼器是將信息從一種形式或格式轉(zhuǎn)換為另一種形式的設(shè)備。在數(shù)字和模擬系統(tǒng)中,編碼器扮演著至關(guān)重要的角色。二進(jìn)制編碼器和模擬編碼器是兩種常見的編碼器類型,它們在不同的應(yīng)用場景中有著各自的優(yōu)勢和局
    的頭像 發(fā)表于 11-06 09:45 ?861次閱讀

    二進(jìn)制編碼器工作原理 如何選擇二進(jìn)制編碼器

    二進(jìn)制編碼器是一種數(shù)字電路,它將輸入的二進(jìn)制代碼轉(zhuǎn)換為對應(yīng)的輸出信號。在數(shù)字系統(tǒng)中,編碼器用于將數(shù)據(jù)從一種形式轉(zhuǎn)換為另一種形式,以便于處理和傳輸。 二進(jìn)制編碼器工作原理 輸入與輸出關(guān)系 :
    的頭像 發(fā)表于 11-06 09:44 ?1688次閱讀

    二進(jìn)制補(bǔ)碼及與原碼的互相轉(zhuǎn)換方法

    大沙把一些基礎(chǔ)的知識說清楚,本文介紹二進(jìn)制補(bǔ)碼及與原碼的轉(zhuǎn)換方法。 先說原碼,原碼?是一種計算機(jī)中對數(shù)字的二進(jìn)制定點表示方法。在原碼表示法中,數(shù)值前面增加了一位符號位,最高位為符號位,0表示正數(shù),1
    的頭像 發(fā)表于 09-19 22:25 ?939次閱讀

    二進(jìn)制處理中的一些技巧

    二進(jìn)制和十進(jìn)制的處理中,有時候一些小技巧是很有用的。 1、把十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù) (1)在MATLAB中有一個函數(shù)dec2bin,可以把正整數(shù)轉(zhuǎn)換為2
    的頭像 發(fā)表于 07-05 11:51 ?717次閱讀

    進(jìn)制和4位二進(jìn)制計數(shù)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《十進(jìn)制和4位二進(jìn)制計數(shù)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 05-31 09:32 ?1次下載
    十<b class='flag-5'>進(jìn)制</b>和4位<b class='flag-5'>二進(jìn)制</b>計數(shù)器數(shù)據(jù)表

    二進(jìn)制串行計數(shù)器工作原理是什么?

    在數(shù)字電路設(shè)計中,計數(shù)器是一種非常關(guān)鍵的組件,用于測量時間、計數(shù)事件或跟蹤狀態(tài)變化等。其中,二進(jìn)制串行計數(shù)器作為一種常用的計數(shù)器類型,在多種應(yīng)用場景中都發(fā)揮著重要作用。本文將對二進(jìn)制串行計數(shù)器
    的頭像 發(fā)表于 05-28 15:52 ?1119次閱讀

    雙4位十進(jìn)制二進(jìn)制計數(shù)器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《雙4位十進(jìn)制二進(jìn)制計數(shù)器數(shù)據(jù)表.pdf》資料免費下載
    發(fā)表于 05-13 11:12 ?0次下載
    雙4位十<b class='flag-5'>進(jìn)制</b>和<b class='flag-5'>二進(jìn)制</b>計數(shù)器數(shù)據(jù)表

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品