CN101299204B - 一种异步fifo及其地址转换方法 - Google Patents
一种异步fifo及其地址转换方法 Download PDFInfo
- Publication number
- CN101299204B CN101299204B CN2008101145464A CN200810114546A CN101299204B CN 101299204 B CN101299204 B CN 101299204B CN 2008101145464 A CN2008101145464 A CN 2008101145464A CN 200810114546 A CN200810114546 A CN 200810114546A CN 101299204 B CN101299204 B CN 101299204B
- Authority
- CN
- China
- Prior art keywords
- address
- binary
- gray code
- obtains
- calculate
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供一种异步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的深度可以为任意偶数。
Description
技术领域
本发明涉及微电子技术领域,特别是涉及一种异步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]。
最后应当说明的是,以上实施例仅用以说明本发明的技术方案而非限制,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神范围,其均应涵盖在本发明的权利要求范围当中。
Claims (3)
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]。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101145464A CN101299204B (zh) | 2008-06-10 | 2008-06-10 | 一种异步fifo及其地址转换方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2008101145464A CN101299204B (zh) | 2008-06-10 | 2008-06-10 | 一种异步fifo及其地址转换方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101299204A CN101299204A (zh) | 2008-11-05 |
CN101299204B true CN101299204B (zh) | 2010-06-02 |
Family
ID=40079035
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2008101145464A Expired - Fee Related CN101299204B (zh) | 2008-06-10 | 2008-06-10 | 一种异步fifo及其地址转换方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101299204B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102495713A (zh) * | 2011-12-09 | 2012-06-13 | 盛科网络(苏州)有限公司 | 实现任意深度异步fifo的方法及系统 |
CN103377029B (zh) * | 2012-04-12 | 2016-05-25 | 中国航空工业集团公司第六三一研究所 | 参数化的通用fifo控制方法 |
CN110888622B (zh) * | 2018-09-11 | 2024-07-02 | 上海肇观电子科技有限公司 | 实现任意深度异步fifo的方法及装置、设备、介质 |
CN111400205B (zh) * | 2020-02-29 | 2022-05-24 | 华南理工大学 | 一种先进先出地址轮询缓存读写方法、系统及装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1545031A (zh) * | 2003-11-17 | 2004-11-10 | 中兴通讯股份有限公司 | 一种fifo存储器的数据处理方法 |
CN1787370A (zh) * | 2004-12-09 | 2006-06-14 | 华为技术有限公司 | 一种确定时钟域转换异常的装置及方法 |
CN1893388A (zh) * | 2005-07-01 | 2007-01-10 | 中兴通讯股份有限公司 | 一种异步fifo实现系统及实现方法 |
-
2008
- 2008-06-10 CN CN2008101145464A patent/CN101299204B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1545031A (zh) * | 2003-11-17 | 2004-11-10 | 中兴通讯股份有限公司 | 一种fifo存储器的数据处理方法 |
CN1787370A (zh) * | 2004-12-09 | 2006-06-14 | 华为技术有限公司 | 一种确定时钟域转换异常的装置及方法 |
CN1893388A (zh) * | 2005-07-01 | 2007-01-10 | 中兴通讯股份有限公司 | 一种异步fifo实现系统及实现方法 |
Non-Patent Citations (1)
Title |
---|
JP特开2005-166120A 2005.06.23 |
Also Published As
Publication number | Publication date |
---|---|
CN101299204A (zh) | 2008-11-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101261575B (zh) | 一种实现不等宽数据传输的异步先进先出存储器及方法 | |
CN101299204B (zh) | 一种异步fifo及其地址转换方法 | |
CN202189369U (zh) | 一种防御功耗攻击的集成电路 | |
WO2015103290A3 (en) | Multi-level data pattern generation for i/o testing of multilevel interfaces | |
US6801143B2 (en) | Method and apparatus for generating gray code for any even count value to enable efficient pointer exchange mechanisms in asynchronous FIFO'S | |
CN102520761A (zh) | 一种基于自定义处理器的任意波形产生系统 | |
CN102799410B (zh) | 基于李氏制约竞争计数编码的异步fifo地址转换电路 | |
CN103888147A (zh) | 一种串行转并行转换电路和转换器以及转换系统 | |
CN101477833B (zh) | 钟控异步fifo存储器 | |
CN101478311A (zh) | bzip2压缩算法硬件加速实现方法 | |
CN102736892B (zh) | 一种非线性伪随机序列发生器 | |
US20120246357A1 (en) | Host computer, computer terminal, and card access method | |
AU597554B2 (en) | Pseudo-noise sequence generator | |
CN101090270A (zh) | 一种实现高速模/数转换的装置及其方法 | |
CN117155532A (zh) | 一种基于组合混沌加密算法的集成电路系统、方法及介质 | |
JP4956295B2 (ja) | 半導体記憶装置 | |
CN102467674B (zh) | 一种超高频标签fm0编码数字信号电路及其实现方法 | |
WO2017067038A1 (zh) | 半导体存储器操作方法 | |
CN103377029B (zh) | 参数化的通用fifo控制方法 | |
CN202261243U (zh) | 一种应用于dds芯片的10位高速dac电路 | |
CN105184365A (zh) | 用于非精确计算的数模混合信号处理系统 | |
CN110427168B (zh) | 一种实现任意深度低传输延时的异步fifo的方法及装置 | |
CN106877872B (zh) | 一种电流舵数模转换器的控制装置及编码方法 | |
CN104199352A (zh) | 基于fpga的区间编码硬件实现系统 | |
CN104516710A (zh) | 一种异步缓存方法、异步缓存器及集成电路 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20100602 Termination date: 20180610 |