一种异步FIFO及其地址转换方法转让专利

申请号 : CN200810114546.4

文献号 : CN101299204B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 周涛

申请人 : 北京天碁科技有限公司

摘要 :

本发明提供一种异步FIFO及其地址转换方法。所述方法包括:计算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的深度可以为任意偶数。

权利要求 :

1.一种用于异步FIFO存储器的地址转换方法,将二进制地址B[m-1:0]转换为格雷码G[m-1:0],m为大于1的整数,所述异步FIFO存储器的深度为2N,N为整数,其特征在于,所述方法包括:计算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,N为整数,其特征在于,所述方法包括:令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,N为整数,其特征在于,包括二进制地址到格雷码转换模块和格雷码到二进制地址转换模块,其中:所述二进制地址到格雷码转换模块用于,将二进制地址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]。

说明书 :

技术领域

本发明涉及微电子技术领域,特别是涉及一种异步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:O]转换为格雷码G[m-1:0],m为大于1的整数,所述异步FIFO存储器的深度为2N,N为整数,所述方法包括:
计算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,N为整数,所述方法包括:
令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,N为整数,包括二进制地址到格雷码转换模块和格雷码到二进制地址转换模块,其中:
所述二进制地址到格雷码转换模块用于,将二进制地址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]。
最后应当说明的是,以上实施例仅用以说明本发明的技术方案而非限制,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神范围,其均应涵盖在本发明的权利要求范围当中。