天天看點

Verilog描述——二進制碼與格雷碼的轉換BIN_GRAY_EX

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
           

為什麼要用格雷碼

格雷碼屬于可靠性編碼,是一種錯誤最小化的編碼方式。

它在相鄰位之間轉換時(例如加一或減一時),隻有一位産生變化,大大地減少了由一個狀态到下一個狀态時的邏輯混淆。

由于這種編碼中相鄰的兩個碼組之間隻有一位不同,與其他編碼同時改變兩位或多位的情況相比更為可靠,是以在異步處理或某些狀态機編碼中會經常使用格雷碼。

為什麼要轉換

格雷碼不是權重碼,每一位碼沒有确定的大小,不能直接進行大小和算術運算比較,要經過一次碼變化,變成自然二進制碼,之後在再進行處理。

繼續閱讀