格雷碼原理與Verilog實現

2021-02-22 FPGA之家
格雷碼原理    

    格雷碼是一個叫弗蘭克*格雷的人在1953年發明的,最初用於通信。格雷碼是一種循環二進位碼或者叫作反射二進位碼。格雷碼的特點是從一個數變為相鄰的一個數時,只有一個數據位發生跳變,由於這種特點,就可以避免二進位編碼計數組合電路中出現的亞穩態。格雷碼常用於通信,FIFO或者RAM地址尋址計數器中。

    如二進位計數編碼從0到F的計數過程如下:

    

十進位

二進位

格雷碼

十進位

二進位

格雷碼

0

0000

0000

8

1000

1100

1

0001

0001

9

1001

1101

2

0010

0011

10

1010

1111

3

0011

0010

11

1011

1110

4

0100

0110

12

1100

1010

5

0101

0111

13

1101

1011

6

0110

0101

14

1110

1001

7

0111

0100

15

1111

1000

    當從7變為8時,4位二進位數都發生跳變,這就很可能會發生亞穩態。而採用格雷碼,就可以編碼4位二進位數都同時發生跳變,導致出現的亞穩態,就算出現亞穩態,最多也就一位出現錯誤。

格雷碼轉二進位

    觀察上表可知,格雷碼轉二進位是從左邊第二位起,將每位與左邊一位二進位碼的值異或,作為該位二進位碼後的值(最左邊一位依然不變)。

 

module gray_to_bin(

gray_in,

bin_out

);

parameter data_width = 4;

 

input [data_width-1:0] gray_in;

output [data_width-1:0] bin_out;

reg [data_width-1:0] bin_out;

always @(gray_in)

begin

bin_out[3] = gray_in[3];

bin_out[2] = gray_in[2]^bin_out[3];

bin_out[1] = gray_in[1]^bin_out[2];

bin_out[0] = gray_in[0]^bin_out[1];

end

endmodule

 

二進位轉格雷碼

    從最右邊一位起,依次將每一位與左邊一位異或(XOR),作為對應格雷碼該位的值,最左邊一位不變。

 

 

module bin_to_gray(

bin_in,

gray_out

);

parameter data_width = 4;

 

input [data_width-1:0] bin_in;

output [data_width-1:0] gray_out;

 

assign gray_out = (bin_in >> 1) ^ bin_in;

 

endmodule

 

格雷碼計數器原理

    格雷碼計數器,採用三個模塊進行設計,格雷碼轉二進位、加法器、二進位轉格雷碼。

格雷碼轉二進位將格雷碼轉換為二進位,並將值輸出用於加法器進行加法運算,然後將加法運算結果通過二進位轉格雷碼轉換為格雷碼,最後將格雷碼進行輸出,同時將結果輸出到格雷碼轉二進位作為輸入,形成一個計數功能。

 

頂層設計

module gray_counter(

clk,

reset_n,

// gray_in,

gray_out

);

parameter data_width = 4;

 

input clk;

input reset_n;

// input [data_width-1:0] gray_in;

output [data_width-1:0] gray_out;

 

//格雷碼轉二進位

wire [data_width-1:0] bin_out;

gray_to_bin gray_to_bin_1(

.gray_in (gray_wire),

.bin_out (bin_out)

);

//二進位加一

wire [data_width-1:0] bin_add_wire;

assign bin_add_wire = bin_out + 1'b1;

//二進位轉格雷碼

wire [data_width-1:0] gray_wire;

reg [data_width-1:0] gray_out;

bin_to_gray bin_to_gray_1(

.bin_in (bin_add_wire),

.gray_out (gray_wire)

);

 

always @(posedge clk or negedge reset_n)

begin

if(reset_n == 1'b0)

begin

gray_out <= {data_width{1'b0}};

end

else

begin

gray_out <= gray_wire;

end

end

endmodule

RTL視圖,與設計框圖一致

 

實驗結果

 

    經過與上表對比,驗證了功能的正確性。

歡迎通信工程師和FPGA工程師關注公眾號

歡迎大家加入全國FPGA微信技術群,這裡有一群熱愛技術的工程師,在這裡可以一起交流討論技術!

用手指按住就可以加入FPGA全國技術群哦

FPGA技術群平臺自營:Xilinx Altera ADI TI ST NXP 等品牌的優勢代理分銷商,歡迎大家有需求隨時髮型號清單,我們將在第一時間為您提供最優競爭力的報價!價格低於您原有供應商5%以上!歡迎詢價-微信:1051197468 或者直接把需求發給群主

FPGA技術群官方鳴謝品牌:Xilinx、 intel(Altera)、microsemi(,Actel)、LattIC e,Vantis,Quicklogic,Lucent等

相關焦點

  • 格雷碼結構光簡介
    時域圖案編碼信息的方式有很多,常見的包括二進位碼(binary code)和格雷碼(gray code)。兩種方法都需要分別編碼X軸、Y軸方向。上面說到時域結構光編碼需要對行、列分別進行。對某一個像素點來說,二進位碼即,將該像素點所在的行數m,列數n轉換成二進位,二進位的每一位編碼到每一幅pattern中該像素點對應的位置。
  • 格雷碼及其應用
    格雷碼的名字來源於1953年公開的弗蘭克·格雷的專利,最初發明出來是為了用於通訊當中,後來發現很多地方用它都會帶來好處。它的特點就是從G(n)到G(n+1)每次只有一位數據發生變化,這就可以避免多位數據「同時」變化的時候帶來的「不同時」問題。
  • 格雷碼辨析 - 電子百科 - 電子工程世界網
    2 格雷碼的特點和應用  典型的二進位格雷碼( Binary Gray Code) 和部分其他數碼如表1 所示。  表1 典型二進位格雷碼和其他部分數碼  利用格雷碼的奇偶性和± 1 規律等數學性質,可以方便地設計出可級聯、可預置、可逆計數的三可格雷碼計數器,也方便了九連環的套解和漢諾塔的搬移。  3 幾個錯誤說法  儘管有很多專家學者對格雷碼的研究和發展做出了巨大貢獻,但難免也會出現一些不太準確的說法。  現歸納如下:  ( 1) 將Gray Code 說成無權碼。
  • 風向風速傳感器的原理
    打開APP 風向風速傳感器的原理 發表於 2017-01-18 16:34:06 1概述 在航空氣象服務中,風向
  • 閘門開度傳感器工作原理_閘門開度傳感器技術指標
    打開APP 閘門開度傳感器工作原理_閘門開度傳感器技術指標 網絡整理 發表於 2020-01-15 11:47:33   閘門開度傳感器工作原理   閘位開度傳感器是由旋轉編碼器與其它形式的耦合器、顯示、控制器、傳輸電纜、RS485數字通信接口等部分組成。閘門運動通過耦合器帶動傳感器旋轉,即可輸出與閘位相對應的格雷碼編碼信號。
  • 絕對值編碼器原理
    3.絕對值編碼器原理  絕對值編碼器原理:絕對編碼器光碼盤上有許多道光通道刻線,每道刻線依次以2線、4線、8線、16 線……編排,這樣,在編碼器的每一個位置,通過讀取每道刻線的通、暗,獲得一組從2的零次方到2的n-1次方的唯一的2進位編碼(格雷碼),這就稱為n位絕對編碼器。
  • L297/L298晶片步進電機的單片機控制實現
    如採用位置檢測和速度反饋,亦可實現閉環控制。步進電動機已廣泛地應用於數字控制系統中,如數模轉換裝置、數控工具機、計算機外圍設備、自動記錄儀、鐘錶等之中,另外在工業自動化生產線、印刷設備等中亦有應用。2 工作原理由於步進電機是一種將電脈衝信號轉換成直線或角位移的執行元件,它不能直接接到交直流電源上,而必須使用專用設備-步進電機控制驅動器典型步進電機控制系統如圖1所示:控制器可以發出脈衝頻率從幾赫茲到幾十千赫茲可以連續變化的脈衝信號,它為環形分配器提供脈衝序列。
  • 基於Verilog HDL的SPWM全數字算法的FPGA實現
    2 數字系統電路總體設計方案  2.1 SPWM算法原理[3]  正弦脈寬調製技術(SPWM)是調製波為正弦波、載波為三角波或鋸齒波的一種脈寬調製法,是現代變頻調速系統中應用最為廣泛的脈寬調製方式,目前有自然採樣法、規則採樣法、等面積法等。
  • 12進位計數器設計方案匯總(五款模擬電路設計原理及程序分享)
    打開APP 12進位計數器設計方案匯總(五款模擬電路設計原理及程序分享) 發表於 2018-01-17 15:05:38 本文為大家帶來五種不同的
  • 拉繩位移傳感器工作原理及安裝注意事項
    本文主要介紹拉繩位移傳感器工作原理及拉繩位移傳感器安裝時的注意事項。本文引用地址:http://www.eepw.com.cn/article/161000.htm1、拉繩位移傳感器工作原理和常用參數拉繩式位移傳感器的功能是把機械運動轉換成可以計量,記錄或傳送的電信號。
  • 基於Verilog硬體描述語言的AES密碼算法實現
    目前,分組密碼算法AES以其高效率、低開銷、實現簡單等特點被廣泛應用於密碼模塊的研製。隨著計算機信息技術和超大規模集成電路技術的成熟與發展,通過硬體來實現密鑰模塊的內部運作,可保證在外界無密鑰的明文流動,能夠實現真正意義上的保密。此外,硬體實現還具有高速、高可靠性等特點。目前許多AES算法的硬體實現採用基於RAM查找表方式來實現算法中最關鍵的SubBytes部分。
  • 基於Verilog硬體描述語言實現SHA-1算法的設計
    SHA-1算法和之前的MD4、MD5等安全散列算法原理很接近,但是安全性更好。它可以通過一系列的迭代計算把任意長度的比特串壓縮成長度為160bit的位串。而且一般認為它的這個計算過程在密碼學意義上是單向的,也就是說很難找到兩個不同的位串可以壓縮成相同的160bit。到目前為止,還沒有對SHA-1有效的攻擊方法。
  • 三極體實現反相器的工作原理
    打開APP 三極體實現反相器的工作原理 網絡整理 發表於 2020-01-31 05:51:00   三極體是電子電路中常用的元器件,即可以工作在線性區實現小信號的放大作用;又可以工作在非線性區實現電子開關的作用。
  • 雲伺服器如何實現的原理
    雲伺服器如何實現的原理?雲伺服器是基於雲計算技術實現,雲計算是指IT基礎設施的交付和使用模式,指通過網絡以按需、易擴展的方式獲得所需的資源(硬體、平臺、軟體)。 提供資源的網絡被稱為「雲」。「雲」中的資源在使用者看來是可以無限擴展的,並且可以隨時獲取,按需使用,按使用付費。
  • 基於Verilog HDL的SVPWM算法的設計與仿真
    基於硬體的FPGA/CPLD晶片能滿足該算法對處理速度、實時性、可靠性較高的要求,本文利用Verilog HDL實現空間矢量脈寬調製算法,設計24矢量7段式的實現方法,對轉速調節和轉矩調節進行仿真,驗證了設計的實現結果與預期相符。
  • FPGA工程師:如何在FPGA中實現狀態機?
    如果您要在物理組件中實現這些狀態圖(工程師在FPGA問世之前就是這麼做的),首先就得生成當前狀態和後續狀態表,然後生成實現狀態機所需的邏輯。不過由於我們將使用FPGA來實現設計,因此我們可以直接從狀態轉換圖開始工作。