相鄰的格雷碼只有1bit的差異,因此格雷碼常常用于異步fifo設(shè)計(jì)中,保證afifo的讀地址(或?qū)懙刂罚┍粚?xiě)時(shí)鐘(或讀時(shí)鐘)采樣時(shí)最多只有1bit發(fā)生跳變。
在不考慮路徑延時(shí)的情況下,因?yàn)樵磾?shù)據(jù)(讀寫(xiě)地址)只有1bit變化,即使發(fā)生了亞穩(wěn)態(tài),最終的結(jié)果相當(dāng)于被目的時(shí)鐘延遲一拍采樣。
需要注意的是:異步fifo中使用格雷碼無(wú)法避免亞穩(wěn)態(tài),它起到的作用是,即使發(fā)生了亞穩(wěn)態(tài),依舊能夠保證異步fifo的功能正確
10進(jìn)制 | 二進(jìn)制 | 格雷碼 |
0 | 000 | 000 |
1 | 001 | 001 |
2 | 010 | 011 |
3 | 011 | 010 |
4 | 100 | 110 |
5 | 101 | 111 |
6 | 110 | 101 |
7 | 111 | 100 |
1.二進(jìn)制轉(zhuǎn)格雷碼
圖1:二進(jìn)制轉(zhuǎn)格雷碼
如圖所示,二進(jìn)制轉(zhuǎn)格雷碼實(shí)現(xiàn)簡(jiǎn)單,二進(jìn)制數(shù)據(jù)右移1bit,高位補(bǔ)零后與自身進(jìn)行位異或得到格雷碼。代碼實(shí)現(xiàn)如下:waddr為二進(jìn)制寫(xiě)地址,waddr_gray為對(duì)應(yīng)的寫(xiě)地址格雷碼
assign waddr_gray[ADDR_WDTH:0]=waddr[ADDR_WDTH:0] ^ {1’b0,waddr[ADDR_WDTH:1] };
2.格雷碼轉(zhuǎn)二進(jìn)制
圖2:格雷碼轉(zhuǎn)2進(jìn)制 首先需要強(qiáng)調(diào)一下異或操作的特點(diǎn):
A、B、C為1bit二進(jìn)制整數(shù),假設(shè)等式為A^B==C,那么已知B和C的情況下,可以通過(guò)A==B^C求得A數(shù)值。此處可以使用窮舉法嘗試一下,只有4種情況。
從二進(jìn)制轉(zhuǎn)格雷碼也可以反推出格雷碼轉(zhuǎn)二進(jìn)制的思路。
首先:最高bit位是相等的,b7等于g7。
因?yàn)間6==b7^b6,根據(jù)異或特性(由A^B==C得到A==B^C),可得知b6=b7^g6,即b6=g7^g6
因?yàn)間5==b5^b6,根據(jù)異或特性,可得知b5=g5^b6,即b5=g5^g6^g7
依次類推:b0=g0^g1^g2^g3^g4^g6^g7
在如下Verilog代碼實(shí)現(xiàn)中,我們提供了3種寫(xiě)法。
寫(xiě)法1和寫(xiě)法2都是已知確定位寬的情況下,實(shí)現(xiàn)格雷碼轉(zhuǎn)二進(jìn)制碼,不利于參數(shù)化。
寫(xiě)法3采用function函數(shù)實(shí)現(xiàn),不限制位寬,支持參數(shù)化。
//寫(xiě)法 1 assign bin_code[0]=gray_code[0]^gray_code[1]^gray_code[2]^gray_code[3] ; assign bin_code[1]=gray_code[1]^gray_code[2]^gray_code[3] ; assign bin_code[2]=gray_code[2]^gray_code[3] ; assign bin_code[3]=gray_code[3] ; //寫(xiě)法2 assign bin_code = {gray_code[3], ^gray_code[3:2], ^gray_code[3:1], ^gray_code}; //寫(xiě)法3: function [ADDR_WIDTH:0] bin_out; input [ADDR_WIDTH:0] gray_in; reg [ADDR_WIDTH:0] gray_code; reg [ADDR_WIDTH:0] bin_code; integer i,j; reg tmp; begin gray_code = gray_in; for(i=0;i<=ADDR_WIDTH;i=i+1) begin tmp=1'b0; for(j=i;j<=ADDR_WIDTH;j=j+1) tmp=gray_code[j]^tmp; bin_code[i]=tmp; end bin_out= bin_code; end endfunction
審核編輯:湯梓紅
-
fifo
+關(guān)注
關(guān)注
3文章
387瀏覽量
43646 -
格雷碼
+關(guān)注
關(guān)注
2文章
34瀏覽量
13185 -
異步FIFO
+關(guān)注
關(guān)注
0文章
20瀏覽量
8353 -
FIFO設(shè)計(jì)
+關(guān)注
關(guān)注
0文章
7瀏覽量
4963
原文標(biāo)題:
文章出處:【微信號(hào):IP與SoC設(shè)計(jì),微信公眾號(hào):IP與SoC設(shè)計(jì)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論