用于写入任意字节数据的fifo的写入数据处理装置的制作方法

文档序号:6434127阅读:523来源:国知局
专利名称:用于写入任意字节数据的fifo的写入数据处理装置的制作方法
技术领域
本发明涉及数据存储技术,尤其涉及一种用于写入任意字节数据的先进先出 (First Input First Output, FIFO)的写入数据处理装置、用于写入任意字节数据的FIFO 的写入数据处理方法、从FIFO读出任意字节数据的读数据处理装置及方法。
背景技术
先入先出(First Input First Output, FIFO)是一种先进先出的数据缓存器,主要接口有写数据(wr_data),写使能(Wr_en),读数据(rd_data),读使能(rd_en),FIFO的存储状况(data_Cnt)即空满标志。FIFO与普通存储器的区别是没有外部读写地址线。数据都是顺序写入FIFO,从FIFO顺序地读出数据。
进出FIFO的数据位宽可变,如A时刻,一个时钟可以向FIFO写入8个字节,B时刻可以向FIFO中写入1个字节。同样,在输出接口,C时刻一个时钟可以读2个字节,D时刻可以读8个字节等。
对于某些应用领域,如在FPGA(Field Programmable Gate Array,现场可编程门阵列)操作PCIE中,由于跨4K边界和非4字节对齐,及外设部件互连标准扩展(Peripheral Component Interconnect Express,PCIE)上事务层包(Transaction Lay Packet,TLP)中页的帧长限制,会出现一个整帧数据由很多完成帧组成,且非最后的完成帧也会出现长度非8 字节对齐,这样如果采用一个标准的FIFO(即8字节同时存,8字节同时取),就会导致帧中间有气泡。同样,FPGA向PCIE送数据,由于地址的跨4k边界,地址的非4字节对齐等,会导致每次从FIFO中取出的数据为非8字节整数长度数据,若采用标准FIFO,会多读数据, 只有做一系列复杂的处理,才能保证数据的不丢失。其中,FPGA是一种集成度很高的新型高性能可编程芯片,其内部电路功能是可编程的(Programmable),可以通过硬件描述语言 (HardwareDescription Language,HDL)和专用设计工具,在其内部灵活地实现极其复杂的电路功能,适用于高速、高密度的高端数字逻辑电路设计领域。
现有针对PCIE上帧中间有气泡或是取任意字节长度的问题,采用的解决方法是采用多个标准9位宽FIFO,每个FIFO存储64位总线的一个字节,根据数据的有效状况和需要读取的字节数,将输入总线和输出总线在FIFO间灵活的映射。但是,这种方法导致FPGA 内部RAM资源的损耗较大。发明内容
本发明提出一种用于写入任意字节数据的FIFO的写入数据处理装置、用于写入任意字节数据的FIFO的写入数据处理方法、从FIFO读出任意字节数据的读数据处理装置及方法,以在避免FIFO存储的数据帧中有气泡的同时,降低内部RAM资源的损耗。
本发明提供了一种用于写入任意字节数据的先进先出FIFO的写入数据处理装置,包括
写入数据引脚,用于接收待写入数据;
数据有效标识引脚,用于接收用于标识所述写入数据引脚接收的待写入数据有效的有效标识;
有效字节数引脚,用于接收所述写入数据引脚接收的待写入数据的有效字节数;
加法器,第一输入端与所述有效字节数引脚相连;
第一延迟寄存器,输入端与所述加法器的输出端相连;
残余字节数存储器,输入端与所述第一延迟寄存器输出端的低P位相连,输出端与所述加法器的第二输入端相连,P为自然数;
移位模块,控制端与所述残余字节数存储器的输出端相连,输入端与所述写入数据引脚相连,用于在所述残余字节数存储器中存储的残余字节数的控制下,将当前时钟下所述写入数据引脚接收的待写入数据中从最低位开始的η个有效字节移位到残余寄存器中,η等于q减去在所述残余字节数存储器中存储的残余字节数,q = 2P;
所述残余寄存器,输入端与所述移位模块的输出端相连;
拼接模块,第一输入端与所述写入数据引脚相连,第二输入端与所述残余寄存器的输出端相连,控制端与所述残余字节数存储器的输出端相连,用于在所述残余字节数存储器中存储的残余字节数的控制下,将所述写入数据引脚接收的当前数据的最高位开始的有效字节移位到所述残余寄存器存储的上一时钟数据拼接后残余的有效字节后续的低位部分,拼接为一个至少q字节的数据,并将所述拼接得到的数据与拼接得到的数据的有效字节数绑定写入FIFO ;
与门,第一输入端与所述数据有效标识引脚反相相连,第二输入端与所述残余字节数存储器的输出端相连;
或门,第一输入端与所述与门的输出端相连,第二输入端与所述第一延迟寄存器输出端的最高位相连,输出端与所述FIFO相连,输出写使能信号给所述FIFO。
本发明还提供了一种用于写入任意字节数据的先进先出FIFO的写入数据处理方法,包括
接收待写入数据及所述待写入数据的有效字节数;
将当前时钟下接收的待写入数据的有效字节数与上一时钟数据拼接后残余的有效字节数相加,当相加的结果大于q时,则当前时钟下数据拼接后残余的有效字节数等于相加的结果减去q得到的差值;否则,当前时钟下数据拼接后残余的有效字节数等于0,并保存当前时钟下数据拼接后残余的有效字节数,其中q为自然数;
当所述当前时钟下接收的待写入数据的有效字节数与上一时钟数据拼接后残余的有效字节数相加的结果大于q时,则将当前时钟下接收的待写入数据的最高位开始的有效字节移位到上一时钟数据拼接后残余的有效字节后续的低位部分,拼接为一个连续q字节的数据,并与拼接得到的数据的有效字节数绑定写入FIFO,并暂存所述当前时钟下接收的待写入数据中残余的有效字节;当相加的结果等于q时,将所述当前时钟下接收的待写入数据从最高位开始移位到上一时钟数据拼接后残余的有效字节后续的低位部分,拼接为一个q字节的数据,并与拼接得到的数据的有效字节数绑定写入FIFO;当相加的结果小于q 时,将所述当前时钟下接收的待写入数据从最高位开始移位到上一时钟数据拼接后残余的有效字节后续的低位部分,暂存。
本发明还提供了一种从先进先出FIFO读出任意字节数据的读数据处理装置,包括
读请求引脚;用于接收读数据请求;
读请求长度引脚,用于接收请求读出的数据的数据长度;
锁存器有效字节统计模块,与锁存器相连,用于统计所述锁存器中锁存的数据的有效字节数;
读接口控制模块,第一输入端与所述读请求引脚相连,第二输入端与所述读请求长度引脚相连,用于根据上一时钟锁存的数据的有效字节数及所述数据长度得到时钟数, 并根据所述时钟数向所述FIFO输出读使能信号;还用于当所述数据长度大于q减1个字节,则将q作为当前时钟输出的数据的有效字节数输出,并且将所述数据长度减去q后的差值作为下一时钟输出的数据的有效字节数暂存,当所述数据长度不为0且小于等于q减1, 则将所述数据长度作为当前时钟输出的数据的有效字节数输出;q为自然数;
添数据模块,输入端与所述锁存器相连,用于将所述FIFO输出的数据添加到上一时钟锁存的数据的有效字节后;
扣数据模块,输入端与所述添数据模块的输出端相连,控制端与所述读接口控制模块输出有效字节数的输出端相连,用于将添加得到的数据中从最高位开始的q个字节作为读出的数据输出,并将所述添加得到的数据中从最高位开始的m个字节去除后输出到顶移位模块,m等于所述读接口控制模块输出有效字节数的输出端输出的有效字节数;
所述顶移位模块,输入端与所述扣数据模块的输出端相连,用于接收所述扣数据模块输出的去除m个字节后的数据,并将所述去除m个字节后的数据中剩余的有效字节置顶,得到置顶后的数据;
所述锁存器,与所述顶移位模块的输出端相连,用于锁存所述置顶后的数据的高r 位,r = (q-1) X8。
本发明还提供了一种从先进先出FIFO读出任意字节数据的方法,包括
接收读数据请求及所述读数据请求所请求读出的数据的数据长度;
根据上一时钟锁存的数据的有效字节数及所述数据长度得到向FIFO发出读使能的时钟数,向所述FIFO输出读使能信号;
当所述数据长度大于q减1个字节,则将q作为当前时钟输出的数据的有效字节数输出,并且将所述数据长度减去q后的差值作为下一时钟输出的数据的有效字节数暂存,当所述数据长度不为0且小于等于q减1,则将所述数据长度作为当前时钟输出的数据的有效字节数输出;q为自然数;
将所述FIFO在所述读使能信号触发下输出的数据添加到上一时钟锁存的数据的有效字节后,当所述数据长度大于q减1,则将添加得到的数据中从最高位开始的q个字节作为读出的数据输出,并将所述添加得到的数据中其余的有效字节锁存;当所述数据长度不为0且小于等于q减1,则将所述添加得到的数据中的有效字节作为读出的数据输出。
本发明还提供了一种先进先出FIFO存储器,包括FIFO,其中,还包括上述用于写入任意字节数据的FIFO的写入数据处理装置,及上述从先进先出FIFO读出任意字节数据的读数据处理装置,所述写入数据处理装置和所述读数据处理装置分别与所述FIFO相连。
本发明提供的用于写入任意字节数据的FIFO的写入数据处理装置、用于写入任意字节数据的FIFO的写入数据处理方法、从FIFO读出任意字节数据的读数据处理装置及方法中,写入数据处理通过对待写入数据进行移位、拼接处理,将所有待写入数据中的有效字节按顺序放置在一起写入FIFO,避免了 FIFO存储的数据帧中产生气泡,使得任意长度的数据可都写入一块FIFO ;读数据处理通过添数据、扣数据、顶移位及锁存处理,能够根据读数据的长度要求,读出任意字节长度的数据,实现了采用一块FIFO进行任意长度的数据的存储,同时,避免了大量消耗FPGA内部的RAM资源。


为了更清楚地说明本发明实施例中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的用于写入任意字节数据的FIFO的写入数据处理装置的结构示意图2为本发明实施例提供的从FIFO读出任意字节数据的读数据处理装置的结构示意图3为本发明实施例提供的一种FIFO存储器的结构示意图4为本发明实施例提供的FIFO存储器的端口结构示意图5为本发明实施例提供的另一种FIFO存储器的结构示意图6为本发明实施例提供的FIFO存储器、从FIFO读出任意字节数据的读数据处理装置及方法中计算读使能个数的流程图7为本发明实施例提供的FIFO存储器、从FIFO读出任意字节数据的读数据处理装置及方法中计算下一时钟输出的数据的有效字节数的流程图8为本发明实施例提供的FIFO存储器、用于写入任意字节数据的FIFO的写入数据处理装置及方法向FIFO写入数据实施例的时序图9为本发明实施例提供的FIFO存储器、从FIFO读出任意字节数据的读数据处理装置及方法从FIFO读出数据实施例的时序图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的用于写入任意字节数据的FIFO的写入数据处理装置的结构示意图,如图1所示,写入数据处理装置包括写入数据引脚11、数据有效标识引脚 12、有效字节数引脚13、加法器14、第一延迟寄存器15、残余字节数存储器16、移位模块17、 残余寄存器18、拼接模块19、与门110及或门111。
写入数据引脚11用于接收待写入数据。
数据有效标识引脚12用于接收用于标识所述写入数据引脚接收的待写入数据有效的有效标识。
有效字节数引脚13用于接收所述写入数据引脚接收的待写入数据的有效字节数。
加法器14的第一输入端与所述有效字节数引脚13相连。
第一延迟寄存器15的输入端与所述加法器14的输出端相连。
残余字节数存储器16的输入端与所述第一延迟寄存器15输出端的低P位相连, 输出端与所述加法器14的第二输入端相连,ρ为自然数。
移位模块17的控制端与所述残余字节数存储器16的输出端相连,输入端与所述写入数据引脚11相连,用于在所述残余字节数存储器16中存储的残余字节数的控制下,当数据有效标识引脚12接收数据有效标识信号时,说明写入数据引脚11接收的待写入数据有效,也即在待写入数据有效时,将当前时钟下所述写入数据引脚11接收的待写入数据中从最低位开始的η个有效字节数移位到残余寄存器18中,η等于q减去在所述残余字节数存储器中存储的残余字节数,q = 2P,单位为字节,为写入FIFO的数据单元,每个数据单元为q个字节,下述q同。
所述残余寄存器18的输入端与所述移位模块17的输出端相连。
拼接模块19的第一输入端与所述写入数据引脚11相连,第二输入端与所述残余寄存器18的输出端相连,控制端与所述残余字节数存储器16的输出端相连,用于在所述残余字节数存储器16中存储的残余字节数的控制下,将所述写入数据引脚11接收的当前数据的最高位开始的有效字节移位到所述残余寄存器18存储的上一时钟数据拼接后残余的有效字节后续的低位部分,拼接为一个至少q字节的数据,并将所述拼接得到的数据与拼接得到的数据的有效字节数绑定写入FIFO,即将每个拼接得到的数据与其有效字节数放在一起写入FIFO中。
与门110的第一输入端与所述数据有效标识引脚12反相相连,第二输入端与所述残余字节数存储器16的输出端相连。
或门111的第一输入端与所述与门110的输出端相连,第二输入端与所述第一延迟寄存器15输出端的最高位相连,输出端与所述FIFO相连,输出写使能信号给所述FIFO。
可选地,本发明实施例提供的用于写入任意字节数据的FIFO的写入数据处理装置还包括帧结束引脚及第二延迟寄存器,以保证残余寄存器中残留的数据帧的最后几个字节都能够写入FIFO中。
其中,帧结束引脚用于接收所述写入数据引脚接收的待写入数据所属帧的帧结束信号;第二延迟寄存器的输入端与所述帧结束引脚相连,输出端与所述与门的第三输入端及所述残余字节数存储器的控制端相连,以使所述残余字节数存储器在接收到所述帧结束信号后清零。
本发明实施例提供的用于写入任意字节数据的出FIFO的写入数据处理方法,包括
接收待写入数据及所述待写入数据的有效字节数;
将当前时钟下接收的待写入数据的有效字节数与上一时钟数据拼接后残余的有效字节数相加,当相加的结果大于q时,则当前时钟下数据拼接后残余的有效字节数等于相加的结果减去q得到的差值;否则,当前时钟下数据拼接后残余的有效字节数等于0,并保存当前时钟下数据拼接后残余的有效字节数,其中q为自然数;
当所述当前时钟下接收的待写入数据的有效字节数与上一时钟数据拼接后残余的有效字节数相加的结果大于q时,则将当前时钟下接收的待写入数据的最高位开始的有效字节移位到上一时钟数据拼接后残余的有效字节后续的低位部分,拼接为一个连续q字节的数据,并与拼接得到的数据的有效字节数绑定写入FIFO,并暂存所述当前时钟下接收的待写入数据中残余的有效字节;当相加的结果等于q时,则将所述当前时钟下接收的待写入数据从最高位开始移位到上一时钟数据拼接后残余的有效字节后续的低位部分,拼接为一个q字节的数据,并与拼接得到的数据的有效字节数绑定写入FIFO ;当相加的结果小于q时,将所述当前时钟下接收的待写入数据从最高位开始移位到上一时钟数据拼接后残余的有效字节后续的低位部分,暂存。
可选地,本发明实施例提供的用于写入任意字节数据的出FIFO的写入数据处理方法,还包括
接收当前时钟下接收的待写入数据所属帧的帧结束信号,并在接收到所述帧结束信号后延迟一个时钟,判断是否还暂存有残余的有效字节,若是,则将残余的有效字节写入所述FIFO,结束写入操作;否则,结束写入操作。
相应地,图2为本发明实施例提供的从FIFO读出任意字节数据的读数据处理装置的结构示意图。如图2所示,从FIFO读出任意字节数据的读数据处理装置包括读请求引脚21、读请求长度引脚22、锁存器有效字节统计模块23、读接口控制模块M、添数据模块 25、扣数据模块沈、顶移位模块27及锁存器观。
读请求引脚21用于接收读数据请求。
读请求长度引脚22用于接收请求读出的数据的数据长度。
锁存器有效字节统计模块23与锁存器观相连,用于统计所述锁存器观中锁存的数据的有效字节数。
读接口控制模块M的第一输入端与所述读请求引脚21相连,第二输入端与所述读请求长度引脚22相连,用于根据上一时钟锁存的数据的有效字节数及所述数据长度得到时钟数,并根据所述时钟数向所述FIFO输出读使能信号;还用于当所述数据长度大于q 减1个字节,则将q作为当前时钟输出的数据的有效字节数输出,并且将所述数据长度减去 q后的差值作为下一时钟输出的数据的有效字节数暂存,当所述数据长度不为0且小于等于q减1,则将所述数据长度作为当前时钟输出的数据的有效字节数输出。q为自然数。
添数据模块25的输入端与所述锁存器观相连,用于将所述FIFO输出的数据添加到上一时钟锁存的数据的有效字节后。
扣数据模块沈的输入端与所述添数据模块25的输出端相连,控制端与所述读接口控制模块对输出有效字节数的输出端相连,用于当所述数据长度大于q减1,则将添加得到的数据中从最高位开始的q个字节作为读出的数据输出,并将所述添加得到的数据中从最高位开始的m个字节去除后输出到顶移位模块,m等于所述读接口控制模块输出有效字节数的输出端输出的有效字节数;
顶移位模块27的输入端与所述扣数据模块沈的输出端相连,用于接收所述扣数据模块输出的去除m个字节后的数据,并将所述去除m个字节后的数据中剩余的有效字节置顶,得到置顶后的数据。
锁存器28与所述顶移位模块27的输出端相连,用于锁存所述置顶后的数据的高r 位,r = (q-1) X8。
本发明实施例提供的从FIFO读出任意字节数据的方法包括
接收读数据请求及所述读数据请求所请求读出的数据的数据长度;
根据上一时钟锁存的数据的有效字节数及所述数据长度得到向FIFO发出读使能的时钟数,向所述FIFO输出读使能信号;
当所述数据长度大于q减1个字节,则将q作为当前时钟输出的数据的有效字节数输出,并且将所述数据长度减去q后的差值作为下一时钟输出的数据的有效字节数暂存,当所述数据长度不为0且小于等于q减1,则将所述数据长度作为当前时钟输出的数据的有效字节数输出;q为自然数;
将所述FIFO在所述读使能信号触发下输出的数据添加到上一时钟锁存的数据的有效字节后,当所述数据长度大于q减1,则将添加得到的数据中从最高位开始的q个字节作为读出的数据输出,并将所述添加得到的数据中其余的有效字节锁存;当所述数据长度不为0且小于等于q减1,则将所述添加得到的数据中的有效字节作为读出的数据输出。
图3为本发明实施例提供的FIFO存储器的结构示意图。如图3所示,FIFO存储器包括FIFO 31、写入数据处理装置32及读数据处理装置33。
写入数据处理装置32及读数据处理装置33分别与FIFO 31相连,写入数据处理装置32用来对写入FIFO 31的数据中的有效字节拼接在一起,然后写入FIFO 31。FIFO 31 为标准的通用FIFO。读数据处理装置33根据读请求将FIFO 31输出的数据进行拆分,以满足读请求的长度要求。具体地,写入数据处理装置32可为上述实施例提供的任一种用于写入任意字节数据的FIFO的写入数据处理装置,读数据处理装置33可为上述实施例提供的从FIFO读出任意字节数据的读数据处理装置。
下面以q = 8为例给出具体的例子对上述FIFO存储器及FIFO存储器中写入数据处理装置、读数据处理装置以及写入数据处理方法、读数据处理方法作进一步说明。
当q = 8时,允许每个时钟写入FIFO的数据长度为1到8个字节,同时允许每个时钟从FIFO中读出的长度为1到8个字节。根据输入数据的有效字节数,将输入的数据移位,当数据移满8个字节,或是一帧的结尾,则将数据写入标准普通FIFO。同时在读出端,根据请求的读长度和以前读残留的字节,计算向标准普通FIFO要取的数据个数,最后根据用户的请求长度,将数据输出。
具体地,本发明实施例提供的FIFO存储器的端口结构如图4所示,主要包括端口 wr_data[63:0]、wr_mod[3:0]、w_dval、eop、rd_len[η :0]、rd_req、rd_gnt、data_cnt[m:0]、 rd_dval、rd_data[63:0]及 rd_mod[3:0]。
其中,wr_data[63:0]为64位即8个字节宽的写数据,可能其中只有几个字节有效,有效字节按从最高位字节向低位字节的顺序排布,即如果一个数据中只有一个字节有效,则63-56位有效;如果是两个字节有效,则是63-48位有效;如果是7个字节有效,则为 63-8位有效,等等。
wr_mod[3:0]用于表征wr_dataW3:0]中有效字节的个数,也即本次总线上的有效字节数。
w_dval 为 wr_data 禾口 wr_mod 的有效标识。
eop为帧结束标识。当一帧数据传输结束,必须给出eop,以告知FIFO —帧数据传11输结束,否则可能最后一个帧的部分字节无法读出。
rd_len[n:0]为本次需要读出的长度,应与rd_req同时给出
rd_req用于申请读数据,收到rd_gnt后应撤销。
rd_gnt用于收到请求后,随后一个时钟即释放出读应答,一直持续到数据传输完毕。
data_cnt[m:0]为FIFO中存有的有效字节个数。
rd_dval为读出的数据有效标识。
rd_data [63 0]为读出的数据。读出的数据中可能只有几个字节有效,有效字节按从最高位字节向低位字节的顺序排布,即如果一个数据中只有一个字节有效,则63-56位有效;如果是两个字节有效,则是63-48位有效,等等。
rd_mod[3:0]为读出的数据中的有效字节个数,即表示同一时钟下rd_ data[63:0]中有效字节的个数。当需要读出的字节数大于8,则除了最后一个时钟外,其它的时钟下读出的rd_dataW3:0]的有效字节个数即rd_mod[3:0]均为8。
本发明实施例提供的FIFO存储器的内部总体结构如图5所示,写入数据处理模块、标准FIFO及读数据处理模块。
其中,标准FIFO即FPGA中标准例化的FIFO,也即传统的FIFO。
写入数据处理模块为在现有的标准FIFO的基础上增加的FIFO的输入接口逻辑, 可为上述实施例提供的用于写入任意字节数据的FIFO的写入数据处理装置。读数据处理模块为在现有的标准FIFO的基础上增加的FIFO的输出接口逻辑,可为上述实施例提供的从FIFO读出任意字节数据的读数据处理装置。
具体地,写入数据处理模块51中,包括残余字节数模块511、移位模块512、残余寄存器513、拼接模块514、加法器515、与门516、或门517及两个用于延迟一个时钟的寄存器 D0
残余字节数模块511用于存储上一个时钟下待写入的数据Wr_datd63:0]中未被写入标准FIFO中的残余字节数left_num[2:0]。残余字节数left_num[2:0]也即残余寄存器513中存储的数据d_leftW3:0]的有效字节数。
加法器515用于将当前时钟下Wr_dataW3:0]的有效字节数Wr_mod[3:0]与残余字节数模块511中存储的残余字节数left_nUm[2:0]相加,通过延迟寄存器D延迟后,得到下一个时钟的残余字节数left_num[2:0]。
移位模块512用于根据残余字节数模块511中的存储的残余字节数left_ num[2:0]将wr_datd63:0]中的有效字节暂存到残余寄存器513中,以用于下一次拼接。
拼接模块514用于将Wr_datd63:0]中剩余的有效字节与残余寄存器513中上一个时钟存储的字节进行拼接,得到d_COn[63:0],并将d_COn[63:0]及其有效字节数 mod [3:0] 一起写入 FIFO 中。
与门516及或门517用于计算下一个时钟的写使能信号Wr_en。
写入数据处理模块51工作时,在输入数据有效即Wr_dval为高的情况下,wr_ mod [3:0]与本地残余字节数left_num[2:0](本地残余字节数left_num[2 0]初始化后的值为0)进行相加,将相加的结果mod_Sum[3:0]延迟一个时钟后,将第3位mod_Sum[3]与 eop运算得到下一个时钟的Wr_en,mod_sum[2:0]即成为下一个时钟的待拼接的残余字节数 left_num[2:0]。
在残余字节数left_num[2:0]的控制下,控制写入的数据Wr_dataW3:0]中的从低位开始的相应个有效字节向残余寄存器513中的移位,暂存该部分有效字节,以与下一个时钟的数据中的高位有效字节拼接成8个字节,且该部分有效字节作为该8个字节的高位字节,而下一个时钟的数据的有效字节作为该8个字节的低位字节。同时,当前时钟下写入的数据wr_dataW3:0]中未被写入残余寄存器513的数据d_left W3 0]的有效字节被送入拼接模块,以与上一个时钟移位到残余寄存器513的数据d_left [63 0]中的有效字节拼接为8个字节。该8个字节中,上一个时钟移位到残余寄存器513的数据d_leftW3:0] 中的有效字节为高位,当前时钟下从写入的数据wr_dataW3:0]中送入到拼接模块514的有效字节为低位。拼接模块514将拼接得到的数据d_COn[63:0]及拼接得到的数据d_ con[63:0]的有效字节数mod[3:0]绑定在一起,作为标准FIFO的写入数据写入标准FIFO 中。其中,有效字节数 mod[3:0],imod_sum[3:0]大于 8 则 mod[3:0]为 8,否则 mod[3:0] 等于 mod_sum[3 0]。
其中,残余寄存器513的数据d_leftW3:0]中的有效字节数等于left_num[2 0]。 left_num[2:0]、残余寄存器513的数据d_left [630]与d_COn[63:0]之间的对应关系如表1所示。
表1输入移位拼接表
权利要求
1.一种用于写入任意字节数据的先进先出FIFO的写入数据处理装置,其特征在于,包括写入数据引脚,用于接收待写入数据;数据有效标识引脚,用于接收用于标识所述写入数据引脚接收的待写入数据有效的有效标识;有效字节数引脚,用于接收所述写入数据引脚接收的待写入数据的有效字节数; 加法器,第一输入端与所述有效字节数引脚相连; 第一延迟寄存器,输入端与所述加法器的输出端相连;残余字节数存储器,输入端与所述第一延迟寄存器输出端的低P位相连,输出端与所述加法器的第二输入端相连,P为自然数;移位模块,控制端与所述残余字节数存储器的输出端相连,输入端与所述写入数据引脚相连,用于在所述残余字节数存储器中存储的残余字节数的控制下,将当前时钟下所述写入数据引脚接收的待写入数据中从最低位开始的η个有效字节移位到残余寄存器中,η 等于q减去在所述残余字节数存储器中存储的残余字节数,q = 2p; 所述残余寄存器,输入端与所述移位模块的输出端相连;拼接模块,第一输入端与所述写入数据引脚相连,第二输入端与所述残余寄存器的输出端相连,控制端与所述残余字节数存储器的输出端相连,用于在所述残余字节数存储器中存储的残余字节数的控制下,将所述写入数据引脚接收的当前数据的最高位开始的有效字节移位到所述残余寄存器存储的上一时钟数据拼接后残余的有效字节后续的低位部分, 拼接为一个至少q字节的数据,并将所述拼接得到的数据与拼接得到的数据的有效字节数绑定写入FIFO ;与门,第一输入端与所述数据有效标识引脚反相相连,第二输入端与所述残余字节数存储器的输出端相连;或门,第一输入端与所述与门的输出端相连,第二输入端与所述第一延迟寄存器输出端的最高位相连,输出端与所述FIFO相连,输出写使能信号给所述FIFO。
2.根据权利要求1所述的用于写入任意字节数据的FIFO的写入数据处理装置,其特征在于,还包括帧结束引脚,用于接收所述写入数据引脚接收的待写入数据所属帧的帧结束信号; 第二延迟寄存器,输入端与所述帧结束引脚相连,输出端与所述与门的第三输入端及所述残余字节数存储器的控制端相连,以使所述残余字节数存储器在接收到所述帧结束信号后清零。
3.一种用于写入任意字节数据的先进先出FIFO的写入数据处理方法,其特征在于,包括接收待写入数据及所述待写入数据的有效字节数;将当前时钟下接收的待写入数据的有效字节数与上一时钟数据拼接后残余的有效字节数相加,当相加的结果大于q时,则当前时钟下数据拼接后残余的有效字节数等于相加的结果减去q得到的差值;否则,当前时钟下数据拼接后残余的有效字节数等于0,并保存当前时钟下数据拼接后残余的有效字节数,其中q为自然数;当所述当前时钟下接收的待写入数据的有效字节数与上一时钟数据拼接后残余的有效字节数相加的结果大于q时,则将当前时钟下接收的待写入数据的最高位开始的有效字节移位到上一时钟数据拼接后残余的有效字节后续的低位部分,拼接为一个连续q字节的数据,并与拼接得到的数据的有效字节数绑定写入FIFO,并暂存所述当前时钟下接收的待写入数据中残余的有效字节;当相加的结果等于q时,将所述当前时钟下接收的待写入数据从最高位开始移位到上一时钟数据拼接后残余的有效字节后续的低位部分,拼接为一个 q字节的数据,并与拼接得到的数据的有效字节数绑定写入FIFO ;当相加的结果小于q时, 将所述当前时钟下接收的待写入数据从最高位开始移位到上一时钟数据拼接后残余的有效字节后续的低位部分,暂存。
4.根据权利要求3所述的用于写入任意字节数据的先进先出FIFO的写入数据处理方法,其特征在于,还包括接收当前时钟下接收的待写入数据所属帧的帧结束信号,并在接收到所述帧结束信号后延迟一个时钟,判断是否还暂存有残余的有效字节,若是,则将残余的有效字节写入所述 FIFO,结束写入操作;否则,结束写入操作。
5.一种从先进先出FIFO读出任意字节数据的读数据处理装置,其特征在于,包括读请求引脚;用于接收读数据请求;读请求长度引脚,用于接收请求读出的数据的数据长度;锁存器有效字节统计模块,与锁存器相连,用于统计所述锁存器中锁存的数据的有效字节数;读接口控制模块,第一输入端与所述读请求引脚相连,第二输入端与所述读请求长度引脚相连,用于根据上一时钟锁存的数据的有效字节数及所述数据长度得到时钟数,并根据所述时钟数向所述FIFO输出读使能信号;还用于当所述数据长度大于q减1个字节,则将q作为当前时钟输出的数据的有效字节数输出,并且将所述数据长度减去q后的差值作为下一时钟输出的数据的有效字节数暂存,当所述数据长度不为0且小于等于q减1,则将所述数据长度作为当前时钟输出的数据的有效字节数输出;q为自然数;添数据模块,输入端与所述锁存器相连,用于将所述FIFO输出的数据添加到上一时钟锁存的数据的有效字节后;扣数据模块,输入端与所述添数据模块的输出端相连,控制端与所述读接口控制模块输出有效字节数的输出端相连,用于将添加得到的数据中从最高位开始的q个字节作为读出的数据输出,并将所述添加得到的数据中从最高位开始的m个字节去除后输出到顶移位模块,m等于所述读接口控制模块输出有效字节数的输出端输出的有效字节数;所述顶移位模块,输入端与所述扣数据模块的输出端相连,用于接收所述扣数据模块输出的去除m个字节后的数据,并将所述去除m个字节后的数据中剩余的有效字节置顶,得到置顶后的数据;所述锁存器,与所述顶移位模块的输出端相连,用于锁存所述置顶后的数据的高r位, r = (q-1) X8。
6.一种从先进先出FIFO读出任意字节数据的方法,其特征在于,包括接收读数据请求及所述读数据请求所请求读出的数据的数据长度;根据上一时钟锁存的数据的有效字节数及所述数据长度得到向FIFO发出读使能的时钟数,向所述FIFO输出读使能信号;当所述数据长度大于q减1个字节,则将q作为当前时钟输出的数据的有效字节数输出,并且将所述数据长度减去q后的差值作为下一时钟输出的数据的有效字节数暂存,当所述数据长度不为0且小于等于q减1,则将所述数据长度作为当前时钟输出的数据的有效字节数输出;q为自然数;将所述FIFO在所述读使能信号触发下输出的数据添加到上一时钟锁存的数据的有效字节后,当所述数据长度大于q减1,则将添加得到的数据中从最高位开始的q个字节作为读出的数据输出,并将所述添加得到的数据中其余的有效字节锁存;当所述数据长度不为 0且小于等于q减1,则将所述添加得到的数据中的有效字节作为读出的数据输出。
7. 一种先进先出FIFO存储器,包括FIFO,其特征在于,还包括上述权利要求1或2所述的用于写入任意字节数据的FIFO的写入数据处理装置,及上述权利要求5所述的从先进先出FIFO读出任意字节数据的读数据处理装置,所述写入数据处理装置和所述读数据处理装置分别与所述FIFO相连。
全文摘要
本发明涉及一种用于写入任意字节数据的FIFO的写入数据处理装置、用于写入任意字节数据的FIFO的写入数据处理方法、从FIFO读出任意字节数据的读数据处理装置及方法中,写入数据处理通过对待写入数据进行移位、拼接处理,将所有待写入数据中的有效字节按顺序放置在一起写入FIFO,避免了FIFO存储的数据帧中产生气泡,使得任意长度的数据可都写入一块FIFO;读数据处理通过添数据、扣数据、顶移位及锁存处理,能够根据读数据的长度要求,读出任意字节长度的数据,实现了采用一块FIFO进行任意长度的数据的存储,同时,避免了大量消耗FPGA内部的RAM资源。
文档编号G06F5/01GK102508631SQ201110288030
公开日2012年6月20日 申请日期2011年9月26日 优先权日2011年9月26日
发明者王瑶宝 申请人:福建星网锐捷网络有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1