TOP

我的 FPGA 學習歷程(06)—— 二進制轉格雷碼
2017-10-10 12:30:21 】 瀏覽:10864
Tags:

格雷碼是一種無權編碼,其特點是相鄰的兩數之間只有一個位不同,像這樣:

        000-->001-->011-->010-->110-->111-->101-->100

對比二進制碼是這樣的:

        000-->001-->010-->011-->100-->101-->110-->111

       從格雷碼的定義可以看到格雷碼的順序顯然不是唯一的。雖然格雷碼獨特的編碼方式使得它不便于閱讀,但它的優點在于對比使用二進制編碼的邏輯電路优乐棋牌app下载,比如像從 011 變到 100 的這個過程,在這種存在多個二進制位并行變化的情況下优乐棋牌app下载优乐棋牌app下载,由于電路本身的物理結構限制,導致變化存在先后順序而不是同時的,短暫的時間差會產生一些非預想的中間狀態比如 111,110,那么當這些中間狀態被其他器件探測到時候就可能會引發錯誤。

書中講到一種格雷碼轉化的方法

假設要把二進制串 b[i] (i=n-1, n-2, ..., 1, 0) 轉換為格雷碼串 g[i] (i=n-1, n-2, ..., 1, 0)
有以下方法:    
     1.  保留最高位 g[i] = b[i] (i = n-1) 
     2.  把其余各位 g[i] = b[i+1] ^ b[i] (i = n-2, n-3, ..., 1, 0)

對于 n = 3 的格雷碼,具體轉化步驟如下:
格雷碼

對于有限位數的具體的算法總是很容易被仿真工具檢驗的,但若想完全證明它就非常困難了。我認為對于算法這種東西,不必深究其原理,只學要會如何使用就足夠了。

這里有一個通用的格雷碼轉化器,可以把 N 位的二進制碼轉化為相應的特定格式的格雷碼,代碼如下,各位可以試試。

module bin2gray
(
    input wire b[N-1:0],
    output reg g[N:0]
);

//****************************//
    parmater N = 3;    //這里設為 3 位的格雷碼轉化器
//****************************//
    assign g[N-1]   = b[N-1];
    assign g[N-2:0] = b[N-2:1] ^ b[N-3:0];
//***************************//

endmodule

請關注公眾號獲取更多資料



】【打印繁體】【】【】 【】【】【】 【關閉】 【返回頂部
上一篇《FPGA全程進階----實戰演練》第.. 下一篇《FPGA全程進階----實戰演練》第..