BIN_GRAY_EX
二進制碼和格雷碼的互相轉換。
bin2gray
二進制碼轉為格雷碼(編碼):從左右邊一位起,一次将每一位與左邊一位異或(XOR),做為格雷碼對應位的值,最左邊一位不變(相當于左邊是0)。參考代碼如下:
graycode = binarycode ^ (binarycode >> 1);
gray2bin
格雷碼轉為二進制碼(解碼):從左邊起,将每位與左邊一位解碼後的值異或,作為該位解碼後的值(最左邊一位依然不變):
always @ ( graycode ) begin
for (i=0; i<n-1; i=i+1) begin
binarycode[i] = ^(graycode>>1);
end
end
為什麼要用格雷碼
格雷碼屬于可靠性編碼,是一種錯誤最小化的編碼方式。
它在相鄰位之間轉換時(例如加一或減一時),隻有一位産生變化,大大地減少了由一個狀态到下一個狀态時的邏輯混淆。
由于這種編碼中相鄰的兩個碼組之間隻有一位不同,與其他編碼同時改變兩位或多位的情況相比更為可靠,是以在異步處理或某些狀态機編碼中會經常使用格雷碼。
為什麼要轉換
格雷碼不是權重碼,每一位碼沒有确定的大小,不能直接進行大小和算術運算比較,要經過一次碼變化,變成自然二進制碼,之後在再進行處理。