天天看點

關于格雷碼格雷碼的特點:轉換方法

  典型二進制格雷碼(Binary Gray Code)簡稱格雷碼,因1953年公開的弗蘭克·格雷(Frank Gray,18870913-19690523)專利“Pulse Code Communication”而得名。

  在一組數的編碼中,若任意兩個相鄰的代碼隻有一位二進制數不同,則稱這種編碼為格雷碼(Gray Code),另外由于最大數與最小數之間也僅一位數不同,即“首尾相連”,是以又稱循環碼或反射碼。 在數字系統中,常要求代碼按一定順序變化。例如,按自然數遞增計數,若采用8421碼,則數0111變到1000時四位均要變化,而在實際電路中,4位的變化不可能絕對同時發生,則計數中可能出現短暫的其它代碼(1100、1111等)。在特定情況下可能導緻電路狀态錯誤或輸入錯誤。使用格雷碼可以避免這種錯誤。格雷碼有多種編碼形式,一般不做說明都是指典型格雷碼。

格雷碼的多種編碼形式

十進制數 4位自然二進制碼 4位典型格雷碼 十進制餘三格雷碼 十進制空六格雷碼 十進制跳六格雷碼 步進碼
0000 0000 0010 0000 0000 00000
1 0001 0001 0110 0001 0001 00001
2 0010 0011 0111 0011 0011 00011
3 0011 0010 0101 0010 0010 00111
4 0100 0110 0100 0110 0110 01111
5 0101 0111 1100 1110 0111 11111
6 0110 0101 1101 1010 0101 11110
7 0111 0100 1111 1011 0100 11100
8 1000 1100 1110 1001 1100 11000
9 1001 1101 1010 1000 1000 10000
10 1010 1111 ---- ---- ---- ----
11 1011 1110 ---- ---- ---- ----
12 1100 1010 ---- ---- ---- ----
13 1101 1011 ---- ---- ---- ----
14 1110 1001 ---- ---- ---- ----
15 1111 1000 ---- ---- ---- ----

 表中典型格雷碼具有代表性。若不作特别說明,格雷碼就是指典型格雷碼,它可從自然二進制碼轉換而來。

格雷碼的特點:

  • 格雷碼屬于可靠性編碼,是一種錯誤最小化的編碼方式。因為,雖然自然二進制碼可以直接由數/模轉換器轉換成模拟信号,但在某些情況,例如從十進制的3轉換為4時二進制碼的每一位都要變,能使數字電路産生很大的尖峰電流脈沖。而格雷碼則沒有這一缺點,它在相鄰位間轉換時,隻有一位産生變化。它大大地減少了由一個狀态到下一個狀态時邏輯的混淆。由于這種編碼相鄰的兩個碼組之間隻有一位不同,因而在用于方向的轉角位移量-數字量的轉換中,當方向的轉角位移量發生微小變化(而可能引起數字量發生變化時,格雷碼僅改變一位,這樣與其它編碼同時改變兩位或多位的情況相比更為可靠,即可減少出錯的可能性。
  • 格雷碼是一種絕對編碼方式,典型格雷碼是一種具有反射特性和循環特性的單步自補碼,它的循環、單步特性消除了随機取數時出現重大誤差的可能,它的反射、自補特性使得求反非常友善。
  • 由于格雷碼是一種變權碼,每一位碼沒有固定的大小,很難直接進行比較大小和算術運算,也不能直接轉換成液位信号,要經過一次碼變換,變成自然二進制碼,再由上位機讀取。 
  • 典型格雷碼是一種采用絕對編碼方式的準權碼,其權的絕對值為2^i-1(設最低位i=1)。
  • 格雷碼的十進制數奇偶性與其碼字中1的個數的奇偶性相同。

轉換方法

遞歸生成碼表

這種方法基于格雷碼是反射碼的事實,利用遞歸的如下規則來構造:

  1. 1位格雷碼有兩個碼字
  2. (n+1)位格雷碼中的前2n個碼字等于n位格雷碼的碼字,按順序書寫,加字首0
  3. (n+1)位格雷碼中的後2n個碼字等于n位格雷碼的碼字,按逆序書寫,加字首1 [4] 
  4. n+1位格雷碼的集合 = n位格雷碼集合(順序)加字首0 + n位格雷碼集合(逆序)加字首1

異或轉換 

二進制碼→格雷碼(編碼):

此方法從對應的n位二進制碼字中直接得到n位格雷碼碼字,步驟如下:

  1. 對n位二進制的碼字,從右到左,以0到n-1編号
  2. 如果二進制碼字的第i位和i+1位相同,則對應的格雷碼的第i位為0,否則為1(當i+1=n時,二進制碼字的第n位被認為是0,即第n-1位不變) ,即n位的二進制碼的低位與相鄰高位進行異或,異或結果替換目前位

公式表示:

關于格雷碼格雷碼的特點:轉換方法

(G:格雷碼,B:二進制碼)

通俗來講:保留二進制碼最高位作為格雷碼最高位,而次高位格雷碼為二進制碼的高位于次高位相異或結果,其餘低位類似。

二進制數                                                 1 0 1 1 0

二進制數右移一位,空位補0                  0 1 0 1 1

 異或運算                                                 1 1 1 0 1     

一句話:右移并且異或。

Verilog實作: assign wgraynext = (wbinnext >>1) ^wbinnext。                         

繼續閱讀