一种异步fifo及其地址转换方法

文档序号:6464340阅读:606来源:国知局
专利名称:一种异步fifo及其地址转换方法
技术领域
本发明涉及微电子技术领域,特别是涉及一种异步FIFO及其地址转换方法。

背景技术
在通讯处理系统中,经常需要进行不同时钟域之间的数据传输。如果是多比特数据的传输,为了保证异步时钟域之间传输时的数据完整性,一种通用的方法是使用异步FIFO(先进先出)。异步FIFO的特征是读写端各自的时钟域完全异步,图1为其一般结构。如图1所示,数据在写时钟域中进入缓存,在读时钟域中被读出,为了保证数据缓存的同时写入和读出时数据的一致和完整,在写逻辑和读逻辑中分别对写地址和读地址的相对位置进行逻辑比较,从而判断出缓存的状态(例如,空状态、满状态)。
由于读写时钟的异步,读和写的地址指针需要分别进行时钟域穿越。读地址和写地址的宽度都是多个比特,所以直接的时钟穿越不能解决问题。为此,一种通用的做法是在穿越前(源时钟域内)将二进制地址转换成格雷码(GrayCode),利用格雷码的特性(相邻数字只相差一个比特)进行时钟穿越,在穿越后(目标时钟域)再转换成原来的二进制编码。
图2为现有异步FIFO中地址转换示意图。如图2所示读逻辑中生成二进制的读地址后,将该二进制读地址转换为格雷码,然后,将该读地址格雷码从读时钟域穿越到写时钟域,在写逻辑中,将该读地址格雷码转换为二进制读地址,并通过对读地址和写地址进行比较来确定缓存是否为满;写地址的穿越类似,不再赘述。
但是,由于格雷编码的特殊性,一般的格雷编码要求数据总数是2的整数次幂(2、4、8、16、32、…)。这样,使用常规格雷编码的异步FIFO的数据缓存的地址空间(即异步FIFO的深度)也只能为2的整数幂,从而限制了FIFO的应用。


发明内容
本发明所要解决的技术问题是提供一种异步FIFO及其地址转换方法,可以对任意偶数阶的二进制地址进行格雷码转换,从而使得FIFO的深度可以为任意偶数。
为解决上述技术问题,本发明提供技术方案如下 一种用于异步FIFO的地址转换方法,将二进制地址B[m-1:0]转换为格雷码G[m-1:0],m为大于1的整数,所述异步FIFO的深度为2N,所述方法包括 计算B[m-1:0]对应的十进制数x; 当x<N时,令G[m-1]=0,G[i]=B[i]异或B[i+1],0≤i≤m-2,得到G[m-1:0]; 当x≥N时,令y=2N-1-x,计算y对应的二进制数B1[m-1:0],且令G[m-1]=1,G[j]=B1[j]异或B1[j+1],0≤j≤m-2,得到G[m-1:0]。
一种用于异步FIFO的地址转换方法,将格雷码G[m-1:0]转换为二进制地址B[m-1:0],m为大于1的整数,所述异步FIFO的深度为2N,所述方法包括 令B[m-1]=0,B[k]=G[m-1]异或G[m-2]异或…异或G[k],0≤k≤m-2,得到B[m-1:0]; 计算所述得到的B[m-1:0]对应的十进制数z; 当G[m-1]=1时,计算2N-1-z对应的二进制数,并将计算得到的二进制数作为B[m-1:0]。
一种异步FIFO,所述异步FIFO的深度为2N,包括二进制地址到格雷码转换模块和格雷码到二进制地址转换模块,其中 所述二进制地址到格雷码转换模块用于,将二进制地址B[m-1:0]转换为格雷码G[m-1:0],m为大于1的整数,具体为 计算B[m-1:0]对应的十进制数x; 当x<N时,令G[m-1]=0,G[i]=B[i]异或B[i+1],0≤i≤m-2,得到G[m-1:0]; 当x≥N时,令y=2N-1-x,计算y对应的二进制数B1[m-1:0],且令G[m-1]=1,G[j]=B1[j]异或B1[j+1],0≤j≤m-2,得到G[m-1:0]; 所述格雷码到二进制地址转换模块用于,将格雷码G[m-1:0]转换为二进制地址B[m-1:0],具体为 令B[m-1]=0,B[k]=G[m-1]异或G[m-2]异或…异或G[k],0≤k≤m-2,得到B[m-1:0]; 计算所述得到的B[m-1:0]对应的十进制数z; 当G[m-1]=1时,计算2N-1-z对应的二进制数,并将计算得到的二进制数作为B[m-1:0]。
与现有技术相比,本发明的有益效果是 可以对任意偶数阶的二进制地址进行格雷码转换,而不局限于2的整数次幂的大小; 使用这种格雷码转换方法设计的异步FIFO,其数据缓存的地址空间不受2的整数幂的限制,使系统设计得到优化。



图1为现有异步FIFO的结构示意图; 图2为现有异步FIFO中地址转换示意图; 图3为本发明实施例的二进制地址到格雷码的转换示意图; 图4为本发明实施例的格雷码到二进制地址的转换示意图。

具体实施例方式 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图及具体实施例对本发明进行详细描述。
首先介绍本发明实施例中使用的数学符号的含义。B[m-1:0]表示一个m位的二进制数,B[k]为B[m-1:0]的第k位;格雷码G[m-1:0]的含义类似。
参照图3,需要将二进制地址B[m-1:0]转换为格雷码G[m-1:0],其中,m为大于1的整数,异步FIFO的深度为2N,N为整数。转换方法主要包括如下步骤 步骤301计算B[m-1:0]对应的十进制数x; 步骤302判断x是否小于N,若是执行步骤303,否则,执行步骤304; 步骤303令G[m-1]=0,G[i]=B[i]异或B[i+1],0≤i≤m-2,得到G[m-1:0],结束; 步骤304令y=2N-1-x,计算y对应的二进制数B1[m-1:0]; 步骤305令G[m-1]=1,G[j]=B1[j]异或B1[j+1],0≤j≤m-2,得到G[m-1:0],结束。
参照图4,需要将将格雷码G[m-1:0]转换为二进制地址B[m-1:0],其中,m为大于1的整数,异步FIFO的深度为2N,N为整数。转换方法主要包括如下步骤 步骤401令B[m-1]=0,B[k]=G[m-1]异或G[m-2]异或…异或G[k],0≤k≤m-2,得到B[m-1:0]; 步骤402计算所述得到的B[m-1:0]对应的十进制数z; 步骤403判断G[m-1]是否为1,若是,执行步骤404,否则,执行步骤405 步骤404计算2N-1-z对应的二进制数,并将计算得到的二进制数作为B[m-1:0]输出,结束; 步骤405直接将步骤401中得到的B[m-1:0]作为最终结果输出,结束。
以下为利用上述方法进行转换的实例。
共6个数,2N=6,N=3,表示6个数需要3比特,m=3,使用上述方法转换结果如下 二进制数 格雷码 0(000)000 1(001)001 2(010)011 3(011)111 4(100)101 5(101)100 可以看出转换结果符合格雷码的定义,每两个相邻数之间只相差一个比特,且首尾循环。
使用上述方法的异步FIFO(可参照图2),包括二进制地址到格雷码转换模块和格雷码到二进制地址转换模块,其中 所述二进制地址到格雷码转换模块用于,将二进制地址B[m-1:0]转换为格雷码G[m-1:0],m为大于1的整数,具体为 计算B[m-1:0]对应的十进制数x; 当x<N时,令G[m-1]=0,G[i]=B[i]异或B[i+1],0≤i≤m-2,得到G[m-1:0]; 当x≥N时,令y=2N-1-x,计算y对应的二进制数B1[m-1:0],且令G[m-1]=1,G[j]=B1[j]异或B1[j+1],0≤j≤m-2,得到G[m-1:0]; 所述格雷码到二进制地址转换模块用于,将格雷码G[m-1:0]转换为二进制地址B[m-1:0],具体为 令B[m-1]=0,B[k]=G[m-1]异或G[m-2]异或…异或G[k],0≤k≤m-2,得到B[m-1:0]; 计算所述得到的B[m-1:0]对应的十进制数z; 当G[m-1]=1时,计算2N-1-z对应的二进制数,并将计算得到的二进制数作为B[m-1:0]。
最后应当说明的是,以上实施例仅用以说明本发明的技术方案而非限制,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神范围,其均应涵盖在本发明的权利要求范围当中。
权利要求
1.一种用于异步FIFO的地址转换方法,将二进制地址B[m-1:0]转换为格雷码G[m-1:0],m为大于1的整数,所述异步FIFO的深度为2N,其特征在于,所述方法包括
计算B[m-1:0]对应的十进制数x;
当x<N时,令G[m-1]=0,G[i]=B[i]异或B[i+1],0≤i≤m-2,得到G[m-1:0];
当x≥N时,令y=2N-1-x,计算y对应的二进制数B1[m-1:0],且令G[m-1]=1,G[j]=B1[j]异或B1[j+1],0≤j≤m-2,得到G[m-1:0]。
2.一种用于异步FIFO的地址转换方法,将格雷码G[m-1:0]转换为二进制地址B[m-1:0],m为大于1的整数,所述异步FIFO的深度为2N,其特征在于,所述方法包括
令B[m-1]=0,B[k]=G[m-1]异或G[m-2]异或...异或G[k],0≤k≤m-2,得到B[m-1:0];
计算所述得到的B[m-1:0]对应的十进制数z;
当G[m-1]=1时,计算2N-1-z对应的二进制数,并将计算得到的二进制数作为B[m-1:0]。
3.一种异步FIFO,所述异步FIFO的深度为2N,其特征在于,包括二进制地址到格雷码转换模块和格雷码到二进制地址转换模块,其中
所述二进制地址到格雷码转换模块用于,将二进制地址B[m-1:0]转换为格雷码G[m-1:0],m为大于1的整数,具体为
计算B[m-1:0]对应的十进制数x;
当x<N时,令G[m-1]=0,G[i]=B[i]异或B[i+1],0≤i≤m-2,得到G[m-1:0];
当x≥N时,令y=2N-1-x,计算y对应的二进制数B 1[m-1:0],且令G[m-1]=1,G[j]=B1[j]异或B1[j+1],0≤j≤m-2,得到G[m-1:0];
所述格雷码到二进制地址转换模块用于,将格雷码G[m-1:0]转换为二进制地址B[m-1:0],具体为
令B[m-1]=0,B[k]=G[m-1]异或G[m-2]异或...异或G[k],0≤k≤m-2,得到B[m-1:0];
计算所述得到的B[m-1:0]对应的十进制数z;
当G[m-1]=1时,计算2N-1-z对应的二进制数,并将计算得到的二进制数作为B[m-1:0]。
全文摘要
本发明提供一种异步FIFO及其地址转换方法。所述方法包括计算B[m-10]对应的十进制数x;当x<N时,令G[m-1]=0,G[i]=B[i]异或B[i+1],0≤i≤m-2,得到G[m-10];当x≥N时,令y=2N-1-x,计算y对应的二进制数B1[m-10],且令G[m-1]=1,G[j]=B1[j]异或B1[j+1],0≤j≤m-2,得到G[m-10]。依照本发明,可以对任意偶数阶的二进制地址进行格雷码转换,从而使得FIFO的深度可以为任意偶数。
文档编号G06F12/02GK101299204SQ20081011454
公开日2008年11月5日 申请日期2008年6月10日 优先权日2008年6月10日
发明者涛 周 申请人:北京天碁科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1