发明内容
本发明实施例提供一种异步FIFO的读写控制处理方法,用以支持不同数 据宽度的读写,并在保证正确同步的同时大大提高总线的利用率,该方法包括:
将每一数据宽度对应的同步处理后的指针进行寄存,将寄存后的指针与寄存前的指针转换为二进制值,所述同步处理后的指针由同步逻辑电路输出,所述同步逻辑电路同步处理的指针由至少两个格雷码计数器对异步FIFO的数据读写次数进行计数所得格雷码值作为编码输出而产生,其中对不同的数据宽度,采用不同的格雷码计数器对数据读写次数进行计数;
将每一数据宽度对应的所述寄存后的指针转换的二进制值减去所述寄存前的指针转换的二进制值,获得该数据宽度对应增量的二进制值;
将各数据宽度对应增量的二进制值分别乘以对应的增量系数,获得各数据宽度对应的增加值,所述增量系数=数据宽度/最小的数据宽度;
将各数据宽度对应的增加值相加,获得总的增加值作为译码值输出,供标志产生电路确定异步FIFO是否写满或读空并产生相应的标志。
本发明实施例还提供一种异步FIFO的读写控制处理电路,用以支持不同数据宽度的读写,并在保证正确同步的同时大大提高总线的利用率,该电路包括:
格雷码转二进制码逻辑电路,用于将每一数据宽度对应的同步处理后的指针进行寄存,并将寄存后的指针与寄存前的指针转换为二进制值,所述同步处理后的指针由同步逻辑电路输出,所述同步逻辑电路同步处理的指针由至少两个格雷码计数器对异步FIFO的数据读写次数进行计数所得格雷码值作为编码输出而产生,其中对不同的数据宽度,采用不同的格雷码计数器对数据读写次数进行计数;
增量计算逻辑电路,用于将每一数据宽度对应的所述寄存后的指针转换的二进制值减去所述寄存前的指针转换的二进制值,获得该数据宽度对应增量的二进制值;
乘法器,用于将各数据宽度对应增量的二进制值分别乘以对应的增量系 数,获得各数据宽度对应的增加值,所述增量系数=数据宽度/最小的数据宽度;
加法器,用于将各数据宽度对应的增加值相加,获得总的增加值作为译码值输出,供标志产生电路确定异步FIFO是否写满或读空并产生相应的标志。
本发明实施例还提供一种异步FIFO的读写控制处理系统,用以支持不同数据宽度的读写,并在保证正确同步的同时大大提高总线的利用率,该系统包括:
编码电路,包括:
至少两个格雷码计数器,用于对异步FIFO的数据读写次数进行计数,其中,对不同的数据宽度,由不同的格雷码计数器对数据读写次数进行计数;各格雷码计数器分别与同步逻辑电路相连,用于将计数所得格雷码值作为编码输出,以产生指针供同步逻辑电路进行同步处理;
译码电路,包括:
格雷码转二进制码逻辑电路,用于将每一数据宽度对应的所述同步处理后的指针进行寄存,并将寄存后的指针与寄存前的指针转换为二进制值;增量计算逻辑电路,用于将每一数据宽度对应的所述寄存后的指针转换的二进制值减去所述寄存前的指针转换的二进制值,获得该数据宽度对应增量的二进制值;乘法器,用于将各数据宽度对应增量的二进制值分别乘以对应的增量系数,获得各数据宽度对应的增加值,所述增量系数=数据宽度/最小的数据宽度;加法器,用于将各数据宽度对应的增加值相加,获得总的增加值作为译码值输出,供标志产生电路确定异步FIFO是否写满或读空并产生相应的标志。
本发明实施例中,采用至少两个格雷码计数器对异步FIFO的数据读写次数进行计数,其中,对不同的数据宽度,采用不同的格雷码计数器对数据读写次数进行计数;将各格雷码计数器计数所得格雷码值作为编码输出,以产生指针供同步逻辑电路进行同步处理;与现有技术相比,对不同的数据宽度 读写无需进行数据宽度的转换,可以实现单周期完成所有数据宽度的读写,在保证正确同步的同时大大提高总线的利用率。
本发明实施例中,将每一数据宽度对应的所述同步处理后的指针进行寄存,并将寄存后的指针与所述寄存前的指针转换为二进制值;将每一数据宽度对应的所述寄存后的指针转换的二进制值减去所述寄存前的指针转换的二进制值,获得该数据宽度对应增量的二进制值;将各数据宽度对应增量的二进制值分别乘以对应的增量系数,获得各数据宽度对应的增加值;将各数据宽度对应的增加值相加,获得总的增加值作为译码值输出,供标志产生电路确定异步FIFO是否写满或读空并产生相应的标志;与现有技术相比,对不同的数据宽度读写无需进行数据宽度的转换,可以实现单周期完成所有数据宽度的读写,在保证正确同步的同时大大提高总线的利用率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为现有技术中基于格雷码的异步FIFO设计示意图;
图2为现有技术中指针和FIFO地址产生电路示意图;
图3为现有技术中采用格雷码作为指针的异步FIFO加上FIFO wrapper电路的示意图;
图4为现有技术中AMBA APB BUS进行word写时序示意图;
图5为本发明实施例中异步先入先出FIFO的读写处理方法的处理流程图;
图6为本发明实施例中另一异步先入先出FIFO的读写处理方法的处理流程图;
图7为本发明实施例中异步先入先出存储器FIFO的读写处理系统的具体实施示意图;
图8为本发明实施例中写指针增量格雷编码电路的示意图;
图9为本发明实施例中读指针增量格雷编码电路的示意图;
图10为本发明实施例中FIFO写地址产生电路的示意图;
图11为本发明实施例中FIFO读地址产生电路的示意图;
图12为本发明实施例中写指针同步逻辑电路的示意图;
图13为本发明实施例中读指针同步逻辑电路的示意图;
图14为本发明实施例中写指针增量格雷译码电路的示意图;
图15为本发明实施例中读指针增量格雷译码电路的示意图;
图16为本发明实施例中AMBA APB BUS word写异步FIFO的时序示意图;
图17为本发明实施例中采用增量格雷码异步FIFO实现的写buffer电路示意图;
图18为本发明实施例中写指针生成电路的示意图;
图19为本发明实施例中写地址生成电路及满标志产生电路的示意图;
图20为本发明实施例中写指针同步逻辑电路的示意图;
图21为本发明实施例中读指针同步逻辑电路的示意图;
图22为本发明实施例中FIFO memory电路的示意图;
图23为本发明实施例中写增量生成电路的示意图;
图24为本发明实施例中读地址生成电路及空标志产生电路的示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附 图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
如图5所示,本发明实施例中,异步先入先出存储器FIFO的读写处理方法,其处理流程可以包括:
步骤501、采用至少两个格雷码计数器对异步FIFO的数据读写次数进行计数,其中,对不同的数据宽度,采用不同的格雷码计数器对数据读写次数进行计数;
步骤502、将各格雷码计数器计数所得格雷码值作为编码输出,以产生指针供同步逻辑电路进行同步处理。
由图5所示流程可以得知,本发明实施例中,采用至少两个格雷码计数器对异步FIFO的数据读写次数进行计数,其中,对不同的数据宽度,采用不同的格雷码计数器对数据读写次数进行计数;将各格雷码计数器计数所得格雷码值作为编码输出,以产生指针供同步逻辑电路进行同步处理;与现有技术相比,对不同的数据宽度读写无需进行数据宽度的转换,可以实现单周期完成所有数据宽度的读写,在保证正确同步的同时大大提高总线的利用率。
具体实施时,每一数据宽度都对应一个格雷码计数器编码输出的格雷码值,则每次的读写计数都是加“1”,并且由于不同数据宽度的读写不可能同时来到,所以所有格雷码计数据输出的指针都能够保证每次不同数据宽度的读写都仅有1bit发生变化,从而可以保证正确的同步;为形象说明本发明实施例中格雷码应用的特点,可以将格雷码计数器计数所得格雷码值称为增量格雷码编码。
具体实施时,在产生指针时,还可以包括产生地址的步骤,即产生读写FIFO的地址,例如可以包括:采用一格雷码计数器对异步FIFO的数据读写次数进行计数,其中,对不同宽度的数据,该格雷码计数器的计数长度不同;采用地址产生逻辑电路将该格雷码计数器计数所得格雷码的最高比特(第AD DRSIZE位)和次高比特(第ADDRSIZE-1位)异或以产生地址的最高比特,用 其余比特(第ADDRSIZE-2位到0位)产生地址的其余比特。
前述对不同宽度的数据,该格雷码计数器的计数长度不同,例如可以是该格雷码计数器采用如下的计数方法:当byte写(winc=1同时HSIZE=0)计数器加1;当half word写(winc=1同时HSIZE=1)计数器加2;当word写(winc=1同时HSIZE=2)计数器加4。
具体实施时,还可以根据前述同步处理后的指针或前述同步处理后指针的转换值和前述产生地址时采用的计数器相应的计数值进行相应的判断,以确定异步FIFO是否写满或读空并产生相应的标志,这样可以发出读写的警报。
前述同步逻辑电路进行同步处理时,可采用多种同步处理方式,例如可采用两级寄存器对产生的指针进行异步时钟域的指针同步处理。
基于同一发明构思,本发明实施例还提供一种异步FIFO的读写处理方法,如图6所示,其处理流程可以包括:
步骤601、将每一数据宽度对应的图5所述同步处理后的指针进行寄存,并将寄存后的指针与寄存前的的指针转换为二进制值;
步骤602、将每一数据宽度对应的所述寄存后的指针转换的二进制值减去所述寄存前的指针转换的二进制值,获得该数据宽度对应增量的二进制值;
步骤603、将各数据宽度对应增量的二进制值分别乘以对应的增量系数,获得各数据宽度对应的增加值;
步骤604、将各数据宽度对应的增加值相加,获得总的增加值作为译码值输出,供标志产生电路确定异步FIFO是否写满或读空并产生相应的标志。
由图6所示流程可以得知,本发明实施例中,将每一数据宽度对应的所述同步处理后的指针进行寄存,并将寄存后的指针与寄存前的指针转换为二进制值;将每一数据宽度对应的所述寄存后的指针转换的二进制值减去所述寄存前的指针转换的二进制值,获得该数据宽度对应增量的二进制值;将各数据宽度对应增量的二进制值分别乘以对应的增量系数,获得各数据宽度对应的增加值;将各数据宽度对应的增加值相加,获得总的增加值作为译码值 输出,供标志产生电路确定异步FIFO是否写满或读空并产生相应的标志;与现有技术相比,对不同的数据宽度读写无需进行数据宽度的转换,可以实现单周期完成所有数据宽度的读写,在保证正确同步的同时大大提高总线的利用率。
具体实施时,前述增量系数可以根据数据宽度进行配置或计算得出,例如增量系数=数据宽度/最小的数据宽度。为形象说明本发明实施例中格雷码应用的特点,可以将总的增加值称为增量格雷码译码。
具体实施时,在产生指针时,还可以包括产生地址的步骤,即产生读写FIFO地址,例如可以包括:采用一格雷码计数器对异步FIFO的数据读写次数进行计数,其中,对不同宽度的数据,该格雷码计数器的计数长度不同;采用地址产生逻辑电路将该格雷码计数器计数所得格雷码的最高比特(第ADDRSIZE位)和次高比特(第ADDRSIZE-1位)异或以产生地址的最高比特,用其余比特(第ADDRSIZE-2位到0位)产生地址的其余比特。
前述对不同宽度的数据,该格雷码计数器的计数长度不同,例如可以是该格雷码计数器采用如下的计数方法:当byte写(winc=1同时HSIZE=0)计数器加1;当half word写(winc=1同时HSIZE=1)计数器加2;当word写(winc=1同时HSIZE=2)计数器加4。
具体实施时,前述标志产生电路确定异步FIFO是否写满或读空并产生相应的标志例如可以是标志产生电路根据产生地址时采用的计数器相应的计数值和译码值或译码值的转换值进行相应的判断,以确定异步FIFO是否写满或读空并产生相应的标志,这样可以发出读写的警报。
前述同步处理可采用多种同步处理方式,例如可采用两级寄存器对产生的指针进行异步时钟域的指针同步处理。
基于同一发明构思,本发明实施还提供一种异步FIFO的读写控制处理电路,由于该电路解决问题的原理与异步FIFO的读写控制处理方法相似,因此该电路的实施可以参见方法的实施,重复之处不再赘述。实施时该电路可以 包括:
至少两个格雷码计数器,用于对异步FIFO的数据读写次数进行计数,其中,对不同的数据宽度,由不同的格雷码计数器对数据读写次数进行计数;
各格雷码计数器分别与同步逻辑电路相连,用于将计数所得格雷码值作为编码输出,以产生指针供同步逻辑电路进行同步处理。
上述电路也可称之为增量格雷码编码电路,如图7中所示。举一例,本例中分别用格雷码计数器对byte、half word、word写使能计数产生各自增量格雷码的编码输出指针(byte写:wbptr_inc,half word写:whptr_inc,word写:wwptr_inc)用于同步。图8为写指针增量格雷编码电路的示意图,图8中写指针增量格雷编码电路中部分信号解释如表2:
表2写指针增量格雷编码电路信号解释
图9为读指针增量格雷编码电路的示意图,图9中读指针增量格雷编码电路中部分信号解释如表3:
表3读指针增量格雷编码电路信号解释
具体实施时,上述增量格雷码编码电路还可以包括:
一格雷码计数器,与地址产生逻辑电路相连,用于对异步FIFO的数据读 写次数进行计数,其中,对不同宽度的数据,该格雷码计数器的计数长度不同;
地址产生逻辑电路,与该格雷码计数器相连和异步FIFO相连,用于将该格雷码计数器计数所得格雷码的最高比特和次高比特异或以产生地址的最高比特,用其余比特产生地址的其余比特。
该格雷码计数器和地址产生逻辑电路也可称之为FIFO地址产生电路。前述对不同宽度的数据,该格雷码计数器的计数长度不同,例如可以是该格雷码计数器采用如下的计数方法:当byte写(winc=1同时HSIZE=0)计数器加1;当half word写(winc=1同时HSIZE=1)计数器加2;当word写(winc=1同时HSIZE=2)计数器加4。
举一例,图10为FIFO写地址产生电路的示意图,图10的FIFO写地址产生电路中部分信号解释如表4:
表4FIFO写地址产生电路信号解释
举一例,图11为FIFO读地址产生电路示意图,图11的FIFO读地址产生电路中部分信号解释如表5:
表5FIFO读地址产生电路信号解释
具体实施时,上述增量格雷码编码电路还可以包括:
标志产生电路,分别与产生地址时采用的格雷码计数器和同步逻辑电路相连,用于根据该格雷码计数器的相应计数值和所述同步处理后的指针或所述同步处理后指针的转换值,确定异步FIFO是否写满或读空并产生相应的标志。
具体实施时,上述增量格雷码编码电路还可以包括:
所述同步逻辑电路,与产生指针的格雷码计数器相连,用于采用两级寄存器对产生的指针进行同步处理。
举一例见图12所示的写指针同步逻辑电路示意图和图13所示的读指针同步逻辑电路示意图。
基于同一发明构思,本发明还提供一种异步FIFO的读写控制处理电路,由于该电路解决问题的原理与异步FIFO的读写控制处理方法相似,因此该电路的实施可以参见方法的实施,重复之处不再赘述。实施时该电路可以包括:
格雷码转二进制码逻辑电路,用于将每一数据宽度对应的上述同步处理后的指针进行寄存,例如可以采用一级寄存器寄存;并将寄存后的指针与寄存前指针转换为二进制值;
增量计算逻辑电路,用于将每一数据宽度对应的所述寄存后的指针转换的二进制值减去所述寄存前的指针转换的二进制值,获得该数据宽度对应增量的二进制值;
乘法器,用于将各数据宽度对应增量的二进制值分别乘以对应的增量系数,获得各数据宽度对应的增加值;
加法器,用于将各数据宽度对应的增加值相加,获得总的增加值作为译码值输出,供标志产生电路确定异步FIFO是否写满或读空并产生相应的标志。
上述电路也可称之为增量格雷码译码电路,如图7中所示。举一例,本例中,增量格雷码译码电路将同步后各数据宽度对应的增量格雷码指针采用一寄存器寄存;同时将寄存后和寄存前对应数据宽度的指针一起转换为二进制值,将转换后的两值相减得到该数据宽度对应增量的二进制值;然后根据 将各数据宽度对应增量的二进制值乘以对应的增量系数(例如增量系数=数据宽度/最小的数据宽度),得到各数据宽度对应的增加值;最后将这些增加值和原有的增加值相加得到总的增加值,总的增加值采用另一寄存器寄存,这个寄存总的增加值用来进行空/满标志的判断。
举一例,图14为写指针增量格雷译码电路的示意图,图14中写指针增量格雷译码电路中部分信号解释如表6:
表6写指针增量格雷译码电路信号解释
举一例,图15为读指针增量格雷译码电路的示意图,图15中读指针增量格雷译码电路中部分信号解释如表7:
表7读指针增量格雷译码电路信号解释
具体实施时,上述增量格雷码译码电路还可以包括:
一格雷码计数器,与地址产生逻辑电路相连,用于对异步FIFO的数据读写次数进行计数,其中,对不同宽度的数据,该格雷码计数器的计数长度不同;
地址产生逻辑电路,与该格雷码计数器和异步FIFO相连,用于将该格雷码计数器计数所得格雷码的最高比特和次高比特异或以产生地址的最高比特,用其余比特产生地址的其余比特。
该格雷码计数器和地址产生逻辑电路也可称之为FIFO地址产生电路。其结构可以如图10和图11所示。
具体实施时,上述增量格雷码译码电路还可以包括:
标志产生电路,分别与产生指针的加法器和产生地址时的采用的格雷码计数器相连,用于根据该格雷码计数器的相应计数值和译码值或译码值的转换值,确定异步FIFO是否写满或读空并产生相应的标志。
具体实施时,上述增量格雷码译码电路还可以包括:
同步逻辑电路,分别与编码输出产生指针的格雷码计数器和格雷码转二进制码逻辑电路相连,用于采用两级寄存器对编码输出产生的指针进行同步处理,并将同步处理后的指针提供给格雷码转二进制码逻辑电路。其结构可以如图12和图13所示。
基于同一发明构思,本发明实施例还提供一种异步FIFO的读写控制处理系统,由于该系统解决问题的原理与异步FIFO的读写控制处理方法相似,因此该系统的实施可以参见方法的实施,重复之处不再赘述。实施时该系统可 以包括:
编码电路,包括:
至少两个格雷码计数器,用于对异步FIFO的数据读写次数进行计数,其中,对不同的数据宽度,由不同的格雷码计数器对数据读写次数进行计数;各格雷码计数器分别与同步逻辑电路相连,用于将计数所得格雷码值作为编码输出,以产生指针供同步逻辑电路进行同步处理;
译码电路,包括:
格雷码转二进制码逻辑电路,用于将每一数据宽度对应的所述同步处理后的指针进行寄存,并将寄存后的指针与寄存前的指针转换为二进制值;增量计算逻辑电路,用于将每一数据宽度对应的所述寄存后的指针转换的二进制值减去所述寄存前的指针转换的二进制值,获得该数据宽度对应增量的二进制值;乘法器,用于将各数据宽度对应增量的二进制值分别乘以对应的增量系数,获得各数据宽度对应的增加值;加法器,用于将各数据宽度对应的增加值相加,获得总的增加值作为译码值输出,供标志产生电路确定异步FIFO是否写满或读空并产生相应的标志。
具体实施时,上述系统还可以包括:
地址产生电路,包括:
一格雷码计数器,与地址产生逻辑电路相连,用于对异步FIFO的数据读写次数进行计数,其中,对不同宽度的数据,该格雷码计数器的计数长度不同;
地址产生逻辑电路,与该格雷码计数器和异步FIFO相连,用于将该格雷码计数器计数所得格雷码的最高比特和次高比特异或以产生地址的最高比特,用其余比特产生地址的其余比特。
具体实施时,上述系统还可以包括:
标志产生电路,分别与产生地址时采用的格雷码计数器和所述加法器相连,用于根据该格雷码计数器相应的计数值和译码值或译码值的转换值,确 定异步FIFO是否写满或读空并产生相应的标志。
具体实施时,上述系统还可以包括:
同步逻辑电路,与产生指针的格雷码计数器相连,用于采用两级寄存器对产生的指针进行同步处理。
举一例如图7所示,图7中是以同时支持byte、half word、word三种数据宽度读写异步FIFO为例说明本发明实施例的异步FIFO的读写处理系统。图7所示异步FIFO的读写处理系统中包括4个部分:增量格雷码编码电路(即前述编码电路)、增量格雷码译码电路(即前述译码电路)、读写FIFO地址产生电路(即前述地址产生电路)、同步逻辑电路。
采用前述增量格雷编码后,AMBA APB BUS word写异步FIFO的时序如图16所示,从图16中可以看到,完成一次AMBA APB BUS word写动作,只需要1个时钟周期,比现有技术中图4中节约了3个时钟周期。
下面举一具体实例来说明本发明上述技术方案。
图17为本例中采用增量格雷码异步FIFO实现的写buffer电路,主要的功能是在SOC中实现主器件(如处理器、DMA等)对接口控制器写的数据缓冲。该写buffer支持word、half word和byte三种数据宽度写和byte数据宽度读;Buffer的存储深度为512byte。该写buffer电路写接口与SOC BUS总线连接,读接口与SOC外围的接口相连。图17中写buffer电路中分部信号解释如表8:
表8写buffer电路信号解释
图17中写buffer电路主要包括4个部分:写控制电路(包含前述增量格雷码编码电路)、读控制电路(包含前述增量格雷码译码电路)、同步逻辑电路、FIFO memory(存储器)。其中:
写控制电路主要完成数据写入buffer的控制,主要包含buffer写指针生成电路、写地址生成电路、FIFO满标志生成电路(即前述标志生成电路)。
写指针生成电路就是一个10位的增量格雷码编码电路,电路中分别用格雷码计数器对byte、half word、word写使能计数产生各自增量格雷码指针(byte写:wbptr_inc,half word写:whptr_inc,word写:wwptr_inc)用于同步。图18为本例中写指针生成电路的示意图,图18中写指针生成电路中部分信号解释如表9:
表9写指针生成电路信号解释
写地址生成电路由一个格雷码计数器和相关的地址产生逻辑电路组成。格雷码计数器采用如下的计数方法:当byte写(winc=1同时HSIZE=0)计数器加1;当half word写(winc=1同时HSIZE=1)计数器加2;当word写(w inc=1同时HSIZE=2)计数器加4。格雷码计数器生成的格类码的最高比特(第ADDRSIZE位)和次高比特(第ADDRSIZE-1位)异或产生地址的最高比特,其余比特(第ADDRSIZE-2位到0位)产生地址的其余比特。
FIFO满标志生成电路按如下方式确定异步FIFO是否写满并产生相应的标 志:
当写指针与同步后的读指针最高位不同、而写指针与同步后的读指针转换的读写地址相同时,产生写满标志wfull;
当写指针在格雷码计数器加1后的指针与同步后的读指针最高位不同、而写指针与同步后的读指针转换的读写地址相同时,产生写满标志wfull或hwfull;
当写指针在格雷码计数器加2或3后的指针与同步后的读指针最高位不同、而写指针与同步后的读指针转换的读写地址相同时,产生写满标志hwfull或wwfull。
图19为写地址生成电路及满标志产生电路的示意图,图19中写地址生成电路及满标志产生电路中部分信号解释如表10:
表10写地址生成及满标志产生电路信号解释
同步逻辑电路采用两级寄存器,如图20所示的写指针同步逻辑电路和图21所示的读指针同步逻辑电路。
本例中,FIFO memory由一个512byte的双口存储器组成,如图22所示,图22中FIFO memory电路中部分信号解释如表11:
表11FIFO memory电路信号解释
本例中读控制电路主要完成读buffer数据的控制。读控制电路包含写增量生成电路、读地址生成电路及空标志产生电路。
写增量生成电路就是一个9位增量格雷码译码电路,如图23所示,该电路将同步后各数据宽度对应的增量格雷码指针采用寄存器寄存;同时将寄存后和寄存前对应数据宽度的指针一起转换为二进制值,将转换后的两值相减得到该数据宽度对应增量的二进制值;然后根据将各数据宽度对应增量的二进制值乘以对应的增量系数(例如增量系数=数据宽度/最小的数据宽度),得到各数据宽度对应的增加值;最后将这些增加值和原有的增加值相加得到总的增加值,总的增加值采用寄存器寄存,这个寄存的总的增加值用来进行空/满标志的判断。图23中写增量生成电路中部分信号解释如表12:
表12写增量生成电路信号解释
读地址生成电路由一个格雷码计数器和相关的地址产生逻辑电路组成。格雷码计数器采用如下的计数方法:
当每次读(byte读)(rinc=1)计数器加1。
格雷码计数器生成的格类码的最高比特(第ADDRSIZE位)和次高比特(第ADDRSIZE-1位)异或产生地址的最高比特,其余比特(第ADDRSIZE-2位到0位)产生地址的其余比特。
空标志生成电路按如下方式确定异步FIFO是否读空并产生相应的标志:
总的增加值rwbin和格雷码计数器中的二进制计数值如果相等,则断为空。读地址生成电路及空标志产生电路如图24所示,其中读地址生成及空标志产生电路信号解释如表13:
表13读地址生成及空标志产生电路信号解释
综上所述,本发明实施例中在编码时:采用至少两个格雷码计数器对异步FIFO的数据读写次数进行计数,其中,对不同的数据宽度,采用不同的格雷码计数器对数据读写次数进行计数;将各格雷码计数器计数所得格雷码值作为编码输出,以产生指针供同步逻辑电路进行同步处理;在译码时:将每一数据宽度对应的所述同步处理后的指针进行寄存,并将寄存后的指针与寄 存前的指针转换为二进制值;将每一数据宽度对应的所述寄存后的指针转换的二进制值减去所述寄存前的指针转换的二进制值,获得该数据宽度对应增量的二进制值;将各数据宽度对应增量的二进制值分别乘以对应的增量系数,获得各数据宽度对应的增加值;将各数据宽度对应的增加值相加,获得总的增加值作为译码值输出,供标志产生电路确定异步FIFO是否写满或读空并产生相应的标志;与现有技术相比,通过采用增量格雷码异步FIFO设计,不但能够实现支持不同数据宽度的读写,而且通过图4和图16的对比可以看出此技术方案对不同的数据宽度读写不需要数据宽度的转换,从而可以实现单周期完成所有数据宽度的读写,大大提高总线的利用率。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。