CN102508631A - 用于写入任意字节数据的fifo的写入数据处理装置 - Google Patents
用于写入任意字节数据的fifo的写入数据处理装置 Download PDFInfo
- Publication number
- CN102508631A CN102508631A CN2011102880303A CN201110288030A CN102508631A CN 102508631 A CN102508631 A CN 102508631A CN 2011102880303 A CN2011102880303 A CN 2011102880303A CN 201110288030 A CN201110288030 A CN 201110288030A CN 102508631 A CN102508631 A CN 102508631A
- Authority
- CN
- China
- Prior art keywords
- data
- byte
- fifo
- effective
- output
- 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.)
- Granted
Links
Images
Landscapes
- Communication Control (AREA)
- Synchronisation In Digital Transmission Systems (AREA)
- Information Transfer Systems (AREA)
Abstract
本发明涉及一种用于写入任意字节数据的FIFO的写入数据处理装置、用于写入任意字节数据的FIFO的写入数据处理方法、从FIFO读出任意字节数据的读数据处理装置及方法中,写入数据处理通过对待写入数据进行移位、拼接处理,将所有待写入数据中的有效字节按顺序放置在一起写入FIFO,避免了FIFO存储的数据帧中产生气泡,使得任意长度的数据可都写入一块FIFO;读数据处理通过添数据、扣数据、顶移位及锁存处理,能够根据读数据的长度要求,读出任意字节长度的数据,实现了采用一块FIFO进行任意长度的数据的存储,同时,避免了大量消耗FPGA内部的RAM资源。
Description
技术领域
本发明涉及数据存储技术,尤其涉及一种用于写入任意字节数据的先进先出(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为自然数;
移位模块,控制端与所述残余字节数存储器的输出端相连,输入端与所述写入数据引脚相连,用于在所述残余字节数存储器中存储的残余字节数的控制下,将当前时钟下所述写入数据引脚接收的待写入数据中从最低位开始的n个有效字节移位到残余寄存器中,n等于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)×8。
本发明还提供了一种从先进先出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、与门11O及或门111。
写入数据引脚11用于接收待写入数据。
数据有效标识引脚12用于接收用于标识所述写入数据引脚接收的待写入数据有效的有效标识。
有效字节数引脚13用于接收所述写入数据引脚接收的待写入数据的有效字节数。
加法器14的第一输入端与所述有效字节数引脚13相连。
第一延迟寄存器15的输入端与所述加法器14的输出端相连。
残余字节数存储器16的输入端与所述第一延迟寄存器15输出端的低P位相连,输出端与所述加法器14的第二输入端相连,p为自然数。
移位模块17的控制端与所述残余字节数存储器16的输出端相连,输入端与所述写入数据引脚11相连,用于在所述残余字节数存储器16中存储的残余字节数的控制下,当数据有效标识引脚12接收数据有效标识信号时,说明写入数据引脚11接收的待写入数据有效,也即在待写入数据有效时,将当前时钟下所述写入数据引脚11接收的待写入数据中从最低位开始的n个有效字节数移位到残余寄存器18中,n等于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、读接口控制模块24、添数据模块25、扣数据模块26、顶移位模块27及锁存器28。
读请求引脚21用于接收读数据请求。
读请求长度引脚22用于接收请求读出的数据的数据长度。
锁存器有效字节统计模块23与锁存器28相连,用于统计所述锁存器28中锁存的数据的有效字节数。
读接口控制模块24的第一输入端与所述读请求引脚21相连,第二输入端与所述读请求长度引脚22相连,用于根据上一时钟锁存的数据的有效字节数及所述数据长度得到时钟数,并根据所述时钟数向所述FIFO输出读使能信号;还用于当所述数据长度大于q减1个字节,则将q作为当前时钟输出的数据的有效字节数输出,并且将所述数据长度减去q后的差值作为下一时钟输出的数据的有效字节数暂存,当所述数据长度不为0且小于等于q减1,则将所述数据长度作为当前时钟输出的数据的有效字节数输出。q为自然数。
添数据模块25的输入端与所述锁存器28相连,用于将所述FIFO输出的数据添加到上一时钟锁存的数据的有效字节后。
扣数据模块26的输入端与所述添数据模块25的输出端相连,控制端与所述读接口控制模块24输出有效字节数的输出端相连,用于当所述数据长度大于q减1,则将添加得到的数据中从最高位开始的q个字节作为读出的数据输出,并将所述添加得到的数据中从最高位开始的m个字节去除后输出到顶移位模块,m等于所述读接口控制模块输出有效字节数的输出端输出的有效字节数;
顶移位模块27的输入端与所述扣数据模块26的输出端相连,用于接收所述扣数据模块输出的去除m个字节后的数据,并将所述去除m个字节后的数据中剩余的有效字节置顶,得到置顶后的数据。
锁存器28与所述顶移位模块27的输出端相连,用于锁存所述置顶后的数据的高r位,r=(q-1)×8。
本发明实施例提供的从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[n: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_data[63:0]中有效字节的个数,也即本次总线上的有效字节数。
w_dval为wr_data和wr_mod的有效标识。
eop为帧结束标识。当一帧数据传输结束,必须给出eop,以告知FIFO一帧数据传输结束,否则可能最后一个帧的部分字节无法读出。
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_data[63: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及两个用于延迟一个时钟的寄存器D。
残余字节数模块511用于存储上一个时钟下待写入的数据wr_data[63:0]中未被写入标准FIFO中的残余字节数left_num[2:0]。残余字节数left_num[2:0]也即残余寄存器513中存储的数据d_left[63:0]的有效字节数。
加法器515用于将当前时钟下wr_data[63:0]的有效字节数wr_mod[3:0]与残余字节数模块511中存储的残余字节数left_num[2:0]相加,通过延迟寄存器D延迟后,得到下一个时钟的残余字节数left_num[2:0]。
移位模块512用于根据残余字节数模块511中的存储的残余字节数left_num[2:0]将wr_data[63:0]中的有效字节暂存到残余寄存器513中,以用于下一次拼接。
拼接模块514用于将wr_data[63: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_data[63:0]中的从低位开始的相应个有效字节向残余寄存器513中的移位,暂存该部分有效字节,以与下一个时钟的数据中的高位有效字节拼接成8个字节,且该部分有效字节作为该8个字节的高位字节,而下一个时钟的数据的有效字节作为该8个字节的低位字节。同时,当前时钟下写入的数据wr_data[63:0]中未被写入残余寄存器513的数据d_left[63:0]的有效字节被送入拼接模块,以与上一个时钟移位到残余寄存器513的数据d_left[63:0]中的有效字节拼接为8个字节。该8个字节中,上一个时钟移位到残余寄存器513的数据d_left[63:0]中的有效字节为高位,当前时钟下从写入的数据wr_data[63:0]中送入到拼接模块514的有效字节为低位。拼接模块514将拼接得到的数据d_con[63:0]及拼接得到的数据d_con[63:0]的有效字节数mod[3:0]绑定在一起,作为标准FIFO的写入数据写入标准FIFO中。其中,有效字节数mod[3:0],当mod_sum[3:0]大于8则mod[3:0]为8,否则mod[3:0]等于mod_sum[3:0]。
其中,残余寄存器513的数据d_left[63:0]中的有效字节数等于left_num[2:0]。left_num[2:0]、残余寄存器513的数据d_left[63:0]与d_con[63:0]之间的对应关系如表1所示。
表1输入移位拼接表
Left_num[2:0] | d_left | d_con |
3’b000 | wr_data[63:0] | wr_data[63:0] |
3’b001 | {wr_data[7:0],56’d0} | {d_left[63:56],wr_data[63:8]} |
3’b010 | {wr_data[15:0],48’d0} | {d_left[63:48],wr_data[63:16]} |
3’b011 | {wr_data[23:0],40’d0} | {d_left[63:40],wr_data[63:24]} |
3’b100 | {wr_data[31:0],32’d0} | {d_left[63:32],wr_data[63:32]} |
3’b101 | {wr_data[39:0],24’d0} | {d_left[63:24],wr_data[63:40]} |
3’b110 | {wr_data[47:0],16’d0} | {d_left[63:16],wr_data[63:48]} |
3’b111 | {wr_data[55:0],8’d0} | {d_left[63:8],wr_data[63:56]} |
只有输入数据有效即wr_dval为高的情况下,d_left[63:0]、d_con[63:0]才会被更新。
由于采用以上拼接的方式,可能会导致最后一个数据帧的最后几个字节可能会残留在残余寄存器513中。因此,进一步地,用户接口在帧结尾提供一个eop信号即帧结束标志,写入数据处理模块51收到eop信号后,延迟一个时钟,判断残余字节数是否为0,如果不为0,即使残余寄存器513没满8个字节,也要将残余寄存器513中数据写入到标准FIFO中。
读数据处理模块52中主要包括:锁存器521、锁存器有效字节统计模块522、添数据模块523、扣数据模块524、顶移位模块525及读接口控制模块526。
锁存器521用于锁存请求读取的有效字节所在的数据中剩余的有效字节。
锁存器有效字节统计模块522用于统计锁存器中锁存的数据lat[55:0]的有效字节数lat_num[3:0]。
添数据模块523用于将锁存器中锁存的字节添加到当前时钟下标准FIFO输出的数据的最高位,得到添数据s_add[119:0]。
扣数据模块524用于将添数据模块添加得到的数据s_add[119:0]中的高64位作为读数据的结果rd_data[63:0]输出,并根据读请求的数据长度扣下相应字节发送给顶移位模块525。
顶移位模块525用于将扣数据模块524发送的数据中的有效字节置顶,即将有效字节顺序移位到高位,直至有效字节中最高位的字节位于数据的最高位,低位部分补0,得到顶移位数据s_up[119:0]。
锁存器521将顶移位数据s_up[119:0]中的高56位s_up[119:64]锁存,得到lat[55:0]。
读接口控制模块526用于根据外部读请求的数据的长度和锁存器521中的有效字节数,确定需要向标准FIFO送出的读使能个数即读使能持续高电平的时钟数,同时发出读使能信号rd_fifo_en。其中,锁存器521有效字节数lat_num[3:0]初始化值为0。并且,读接口控制模块526还用于根据读请求的数据的长度,输出读取的数据rd_data[63:0]的有效字节数rd_mod[3:0]。
读数据处理模块52接收到外部读请求rd_req、请求的数据的长度rd_len后,发出应答请求rd_gnt,并根据rd_len及锁存器中数据的有效字节数lat_num[3:0]判断是否向标准FIFO发出标准FIFO的读使能rd_fifo_en,如果判断向标准FIFO发出读使能信号rd_fifo_en,还要计算出需要向标准FIFO发出的以时钟为单位的读使能个数rden_num。
rden_num的计算如图6所示,读接口控制模块526收到读请求rd_req及请求的数据的长度rd_len后,比较请求的数据的长度rd_len和锁存器521中数据的有效字节数lat_num[3:0]。若请求的数据的长度rd_len不超过锁存器521中数据的有效字节数lat_num[3:0],则不用读标准FIFO,即设置读标准FIFO的读使能个数rden_num为0。若请求的数据的长度rd_len超过锁存器中数据的有效字节数lat_num[3:0],则将二者相减,将得到的差值除以8,取大于或等于该除法结果的整数为需向标准FIFO中发出的读使能个数rden_num。随后,根据得到的读使能个数rden_num,向标准FIFO连续发出rden_num个时钟的读使能信号rd_fifo_en,取出rden_num个时钟的数据。
并且,读接口控制模块526还需要计算输出的数据rd_data[63:0]的有效字节数rd_mod[3:0]。具体如图7所示,当读接口控制模块526接收到外部的读请求rd_req及请求的数据的长度rd_len后,将请求的数据的长度rd_len装载到left_len中,检测left_len是否为0。
若left_len为0,则直接退出;若left_len不为0,继续判断left_len是否大于7。
若left_len大于7,则rd_mod为8,否则rd_mod等于left_len。
每送出一个数据,则从left_len中减去rd_mod,再次判断left_len的状况,周而复始,直到left_len为0,此时,表示请求的数据全部送出。
根据锁存器521中的有效字节数lat_num[3:0],将标准FIFO输出的数据st_out[63:0]添加到锁存器521中有效字节的后面;随后将添数据后的结果s_add[119:0]的高8个字节移到用户接口上,再将s_add[119:0]中剩下的字节向上移动rd_mod个字节,即顶移位模块525的操作,得到顶移位的结果s_up[119:0],保持剩余字节的置顶,移动完毕后利用锁存器521将数据锁存,供下次添数据使用。同时锁存器有效字节统计模块522根据数据的移动状况,对锁存器521中的有效字节数进行统计。
添数据结果s_add[119:0]及顶移位结果s_up[119:0]与、标准FIFO送出的数据st_out[63:0]、锁存器521中有效字节数lat_num[3:0]、输出的读数据的有效字节数rd_mod[3:0]的对应关系如表2所示。
表2添数据及顶移位表
其中,添数据结果s_add[119:0]受锁存器521中有效字节数lat_num[2:0]控制,顶移位结果s_up[119:0]受输出的读数据的有效字节数rd_mod[3:0]控制。
其中,锁存器521有效字节数统计lat_num=lat_num+st_mod-rd_mod。
为简单操作,扣数据时,直接将添数据的结果s_add[119:0]的高64位输出,同时锁存器锁存的数据lat[55:0]=s_up[119:64]。
图4、图5所示FIFO经过验证,非常适合于PCIE上的跨4K边界和地址非4字节对齐处理。
下面分别以图8、图9为例对本发明实施例提供的FIFO写入数据、读出数据做进一步详细说明。
图8为本发明实施例提供的FIFO存储器、用于写入任意字节数据的FIFO的写入数据处理装置及方法向FIFO写入数据实施例的时序图。
在时刻1,向FIFO写入5个有效字节的数据12345xxx;时刻2,向FIFO写入7个有效字节的6789abcx;时刻4,向FIFO写入7个有效字节的数据def0123x;时刻5向FIFO写入2个有效字节的数据45xxxxxx。
在mod[3:0]等于8,或者收到eop且mod[3:0]不为0的情况下,wr_en为1,否则wr_en为0。
当前时钟的left_num[2:0]=上一个时钟的left_num[2:0]+上一个时钟wr_mod[3:0]的低三位。如果收到eop,则left_num[2:0]为0。
时刻2上升沿:写入数据处理模块检测到时刻1留下来的残余字节数left_num[2:0]为0,根据表1,得到d_left[63:0]和d_con[63:0]均为时刻1写入的数据wr_data[63:0]的直接赋值即12345xxx。
并且根据当前时钟的left_num[2:0]=上一个时钟的left_num[2:0]+上一个时钟的wr_mod[3:0]的低三位,得到left_num[2:0]为5。
mod[3:0]为5,wr_en为0。
时刻3上升沿:
mod_sum[3:0]等于12,Left_num[2:0]=mod_sum[2:0]=4。
根据表1,此时前面残留的有效字节数left_num[2:0]为5,故d_left[63:0]={wr_data[39:0],24’d0},d_con[63:0]={d_left[39:0],wr_data[23:0]},从而得出残留在残余寄存器d_left[63:0]中的数据为9abcx000,拼接模块中拼接得到的d_con[63:0]为12345678。
由于此时mod_sum大于8,故mod为8,wr_en有效。将数据12345678写入到标准FIFO中。
时刻4上升沿:
Left_num[2:0]为4。
时刻5、时刻6上升沿,与时刻2、时刻3类似,详见图8。
图9为本发明实施例提供的FIFO存储器、从FIFO读出任意字节数据的读数据处理装置及方法从FIFO读出数据实施例的时序图。
图9中各信号的说明如下:
rd_req:外部发起的读请求;
rd_gnt:应答请求;
rd_len:请求读的字节数;
rd_fifo_en:标准FIFO读使能;
rd_fifo_vld:标准FIFO输出的数据有效指示;
st_out:从标准FIFO中输出的数据;
st_mod:从标准FIFO中输出的本周期中有效字节个数;
lat_num:锁存器中有效字节个数;
s_add:添数据单元输出;
rd_mod:输出的数据的有效字节数;
s_up:顶移位后的数据;
lat:锁存器;
rd_data:读输出的数据;
rd_dval:读输出的数据有效指示;若rd_mod不为0,则rd_dval置高。
在时刻1,发起读3个字节的数据的请求,在时刻6,发起读18个字节的数据的请求。
时刻2,读接口控制模块对请求进行应答,同时根据图3,计算得到向标准FIFO发起的读使能rd_fifo_en的时钟个数rden_num=1。
时刻3,读接口控制模块向标准FIFO发起读使能rd_fifo_en。
时刻4,标准FIFO在读使能rd_fifo_en的触发下输出数据12345678,st_mod为8。
读接口控制模块根据图7计算得到rd_mod[3:0]为3。根据rd_mod[3:0]为3和lat_num为0,查表2,得到s_add[119:0]为123456780000000和s_up[119:0]为4567800000000。rd_data[63:0]为s_add[119:0]的高64位即12345678。
时刻5,将s_up[119:0]的高56位进行锁存,锁存的结果放入到lat[55:0]中。同时根据算式lat_num=lat_num+st_mod-rd_mod得到锁存器中的有效字节数为5。
时刻6,外部再次发起读请求,请求读18个字节。
时刻7,读接口控制模块根据锁存器中的有效字节数lat_num[2:0]和当前请求的字节数18,得到向标准FIFO发起的读时钟数rden_num为大于等于(18-5)/8的整数,即2。
时刻8,读接口控制模块发起读请求rd_fifo_en,持续两个时钟。
时刻9,标准FIFO响应读请求rd_fifo_en输出8个字节9abcdef0。
读接口控制模块计算rd_mod[3:0]为8。根据rd_mod[3:0]为8,lat_num[2:0]为5进行查表2,得到s_add[119:0]为456789abcdef000,s_up[119:0]为cdef00000000000。rd_data[63:0]为s_add[119:0]的高64位。同时计算当前时钟下的lat_num=上一个时钟的lat_num+st_mod-rd_mod,结果依然为5。
时刻10,标准FIFO响应第二个时钟的读请求rd_fifo_en输出12345xxx,输出的st_mod[3:0]为5。
读接口控制模块根据rd_mod[3:0]为8,lat_num为5查表2,得到s_add[119:0]为cdef012345xxx00,s_up[119:0]为45xxx0000000000。rd_data[63:0]为cdef0123。Lat_num[2:0]为5+8-8=5。
时刻11,Lat_num[2:0]为5+5-8=2。根据lat_num[2:0]为2,rd_mod[3:0]为2查表2,得到s_add[119:0]和s_up[119:0]。取s_add[119:0]的高64位得到rd_data[63:0],完成18个字节的读取。其他类似。
上述实施例提供的FIFO存储器可实现在FPGA芯片内部,通过上述具有读写数据处理功能接口的FIFO,极大地简化了外界应用系统结构,节省了FPGA内部的RAM资源,非常适合于采用FPGA进行PCIE处理的应用环境,经过实际验证适用于PCIE到4个GE口的转换。本领域技术人员可以理解,上述实施例提供的技术方案还可以用于许多涉及到FPGA处理PCIE的系统,或是其它的数据拼接,零取的场合。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (7)
1.一种用于写入任意字节数据的先进先出FIFO的写入数据处理装置,其特征在于,包括:
写入数据引脚,用于接收待写入数据;
数据有效标识引脚,用于接收用于标识所述写入数据引脚接收的待写入数据有效的有效标识;
有效字节数引脚,用于接收所述写入数据引脚接收的待写入数据的有效字节数;
加法器,第一输入端与所述有效字节数引脚相连;
第一延迟寄存器,输入端与所述加法器的输出端相连;
残余字节数存储器,输入端与所述第一延迟寄存器输出端的低p位相连,输出端与所述加法器的第二输入端相连,p为自然数;
移位模块,控制端与所述残余字节数存储器的输出端相连,输入端与所述写入数据引脚相连,用于在所述残余字节数存储器中存储的残余字节数的控制下,将当前时钟下所述写入数据引脚接收的待写入数据中从最低位开始的n个有效字节移位到残余寄存器中,n等于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)×8。
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相连。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110288030.3A CN102508631B (zh) | 2011-09-26 | 2011-09-26 | 用于写入任意字节数据的fifo的写入数据处理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110288030.3A CN102508631B (zh) | 2011-09-26 | 2011-09-26 | 用于写入任意字节数据的fifo的写入数据处理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102508631A true CN102508631A (zh) | 2012-06-20 |
CN102508631B CN102508631B (zh) | 2014-07-30 |
Family
ID=46220725
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110288030.3A Expired - Fee Related CN102508631B (zh) | 2011-09-26 | 2011-09-26 | 用于写入任意字节数据的fifo的写入数据处理装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102508631B (zh) |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105573922A (zh) * | 2014-11-07 | 2016-05-11 | 中兴通讯股份有限公司 | 一种实现数据格式转换的方法和装置 |
CN106502922A (zh) * | 2016-10-28 | 2017-03-15 | 上海顺久电子科技有限公司 | 一种fifo数据缓存器的数据读写方法及数据缓存器 |
CN107301136A (zh) * | 2017-06-21 | 2017-10-27 | 天津光电通信技术有限公司 | 一种基于fpga实现数据间隔选择连续输出的方法 |
CN111599389A (zh) * | 2020-05-13 | 2020-08-28 | 芯颖科技有限公司 | 数据存取方法、数据存取电路、芯片和电子设备 |
WO2020252769A1 (zh) * | 2019-06-21 | 2020-12-24 | 深圳市大疆创新科技有限公司 | 先入先出存储器的数据存储方法、设备及存储介质 |
CN112153054A (zh) * | 2020-09-25 | 2020-12-29 | 山东超越数控电子股份有限公司 | 一种任意字节长度拼接缓存的实现方法和系统 |
CN113434545A (zh) * | 2021-06-02 | 2021-09-24 | 中科驭数(北京)科技有限公司 | 数据缓存装置及数据提供方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5056012A (en) * | 1988-11-30 | 1991-10-08 | Motorola, Inc. | Memory addressable data transfer network |
US5923895A (en) * | 1996-11-15 | 1999-07-13 | Cirrus Logic, Inc. | Method and arrangement to effectively retrieve residual data from a buffer |
CN1529234A (zh) * | 2003-10-08 | 2004-09-15 | 复旦大学 | 可处理变长数据的先进先出寄存器队列装置及控制方法 |
CN101261575A (zh) * | 2008-02-26 | 2008-09-10 | 北京天碁科技有限公司 | 一种实现不等宽数据传输的异步先进先出存储器及方法 |
CN101444101A (zh) * | 2006-06-28 | 2009-05-27 | 三星电子株式会社 | 使用多个并行编码器的用于数字通信的系统和方法 |
CN101825997A (zh) * | 2010-01-28 | 2010-09-08 | 北京天碁科技有限公司 | 一种异步先入先出存储器 |
-
2011
- 2011-09-26 CN CN201110288030.3A patent/CN102508631B/zh not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5056012A (en) * | 1988-11-30 | 1991-10-08 | Motorola, Inc. | Memory addressable data transfer network |
US5923895A (en) * | 1996-11-15 | 1999-07-13 | Cirrus Logic, Inc. | Method and arrangement to effectively retrieve residual data from a buffer |
CN1529234A (zh) * | 2003-10-08 | 2004-09-15 | 复旦大学 | 可处理变长数据的先进先出寄存器队列装置及控制方法 |
CN101444101A (zh) * | 2006-06-28 | 2009-05-27 | 三星电子株式会社 | 使用多个并行编码器的用于数字通信的系统和方法 |
CN101261575A (zh) * | 2008-02-26 | 2008-09-10 | 北京天碁科技有限公司 | 一种实现不等宽数据传输的异步先进先出存储器及方法 |
CN101825997A (zh) * | 2010-01-28 | 2010-09-08 | 北京天碁科技有限公司 | 一种异步先入先出存储器 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105573922A (zh) * | 2014-11-07 | 2016-05-11 | 中兴通讯股份有限公司 | 一种实现数据格式转换的方法和装置 |
CN105573922B (zh) * | 2014-11-07 | 2020-07-10 | 中兴通讯股份有限公司 | 一种实现数据格式转换的方法和装置 |
CN106502922A (zh) * | 2016-10-28 | 2017-03-15 | 上海顺久电子科技有限公司 | 一种fifo数据缓存器的数据读写方法及数据缓存器 |
CN106502922B (zh) * | 2016-10-28 | 2020-02-18 | 青岛海信电器股份有限公司 | 一种fifo数据缓存器的数据读写方法及数据缓存器 |
CN107301136A (zh) * | 2017-06-21 | 2017-10-27 | 天津光电通信技术有限公司 | 一种基于fpga实现数据间隔选择连续输出的方法 |
WO2020252769A1 (zh) * | 2019-06-21 | 2020-12-24 | 深圳市大疆创新科技有限公司 | 先入先出存储器的数据存储方法、设备及存储介质 |
CN111599389A (zh) * | 2020-05-13 | 2020-08-28 | 芯颖科技有限公司 | 数据存取方法、数据存取电路、芯片和电子设备 |
CN112153054A (zh) * | 2020-09-25 | 2020-12-29 | 山东超越数控电子股份有限公司 | 一种任意字节长度拼接缓存的实现方法和系统 |
CN113434545A (zh) * | 2021-06-02 | 2021-09-24 | 中科驭数(北京)科技有限公司 | 数据缓存装置及数据提供方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102508631B (zh) | 2014-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102508631B (zh) | 用于写入任意字节数据的fifo的写入数据处理装置 | |
CN105843775B (zh) | 片上数据划分读写方法、系统及其装置 | |
TWI425512B (zh) | 快閃記憶體控制電路及其儲存系統與資料傳輸方法 | |
US8386699B2 (en) | Method for giving program commands to flash memory for writing data according to a sequence, and controller and storage system using the same | |
CN104520817B (zh) | 用于仿真多端口存储器的装置和方法 | |
US20150186068A1 (en) | Command queuing using linked list queues | |
CN102739195B (zh) | 一种fir滤波器的处理方法、装置和系统 | |
US9519436B1 (en) | Memory erasing method, memory controller, and memory storage apparatus | |
US8266371B2 (en) | Non-volatile storage device, host device, non-volatile storage system, data recording method, and program | |
US8869004B2 (en) | Memory storage device, memory controller thereof, and data transmission method thereof | |
CN103413569B (zh) | 一读且一写静态随机存储器 | |
CN104021099B (zh) | 一种控制数据传输的方法及dma控制器 | |
CN101814058A (zh) | 通用存储装置 | |
US20070079015A1 (en) | Methods and arrangements to interface a data storage device | |
CN106372008B (zh) | 一种数据缓存方法及装置 | |
CN113900974B (zh) | 一种存储装置、数据存储方法及相关设备 | |
CN111625182A (zh) | 通用闪存存储器模块、控制器、电子装置及操作方法 | |
CN108701102A (zh) | 直接存储器访问控制器、数据读取方法和数据写入方法 | |
CN104346132A (zh) | 应用于智能卡虚拟机运行的控制装置及智能卡虚拟机 | |
CN108984148B (zh) | 一种基于同步fifo存储器的数据存储的方法及存储器 | |
US20100309918A1 (en) | Method and system for ordering posted packets and non-posted packets transfer | |
CN108877862A (zh) | 页条带的数据组织以及向页条带写入数据的方法与装置 | |
CN100587680C (zh) | 管理分离总线上总线代理之间的数据流的方法和系统 | |
CN110968538B (zh) | 一种数据缓冲方法和装置 | |
CN101950276B (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 | ||
CP01 | Change in the name or title of a patent holder | ||
CP01 | Change in the name or title of a patent holder |
Address after: 350002 19 Building, Citrus Industrial Park, 618 Jinshan Road, Cangshan District, Fuzhou, Fujian. Patentee after: RUIJIE NETWORKS Co.,Ltd. Address before: 350002 19 Building, Citrus Industrial Park, 618 Jinshan Road, Cangshan District, Fuzhou, Fujian. Patentee before: Fujian Star-net Ruijie Network Co.,Ltd. |
|
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: 20140730 Termination date: 20210926 |