CN100385387C - 一种提高ram利用效率的方法 - Google Patents
一种提高ram利用效率的方法 Download PDFInfo
- Publication number
- CN100385387C CN100385387C CNB2006100333861A CN200610033386A CN100385387C CN 100385387 C CN100385387 C CN 100385387C CN B2006100333861 A CNB2006100333861 A CN B2006100333861A CN 200610033386 A CN200610033386 A CN 200610033386A CN 100385387 C CN100385387 C CN 100385387C
- Authority
- CN
- China
- Prior art keywords
- ram
- data
- clock
- write
- fifo
- 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.)
- Active
Links
Images
Landscapes
- Dram (AREA)
- Static Random-Access Memory (AREA)
Abstract
本发明公开了一种提高PLD中RAM的利用效率的方法,将RAM读写数据的时钟频率与外部时钟频率分离,使用倍频时钟作为RAM的时钟,在多个RAM时钟周期内依次读写一个外部读写数据周期所读写的数据,使得位宽小的RAM可以适用于位宽大的PLD中的功能模块,同样也使得一块RAM块可以适用于一个以上的PLD中的功能模块,有效的提高了RAM块的利用效率,节约了资源。
Description
技术领域
本发明涉及数字电路设计领域,更具体的说,涉及到数字电路设计PLD(可编程逻辑器件)中RAM(随机存储模块)的使用。
背景技术
PLD(Programmable Logic Device可编程逻辑器件)技术和FPGA(FieldProgrammable Gate Array现场可编程门阵列)技术是电子设计领域中最具活力和发展前途的一项技术,几乎能完成任何数字器件的功能,它如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入法,或是硬件描述语言自由地设计一个数字系统。虽然PLD和FPGA两者名称有异,但两者的功能基本相同,只是实现原理略有不同。本发明所述的方法对PLD和FPGA都能适用且不存在原理性的区别,因此下文中忽略两者的区别,统称为可编程逻辑器件或PLD。
复杂的PLD器件会嵌入一些RAM块,以满足存储数据的需要。这些RAM块的存储容量一般为512位、4096位等等。虽然不同的PLD器件可能包含不同数目不同种类的RAM块,但是,RAM块在PLD器件中的使用都存在共同的限制:
1、RAM块必须成块分配,如果一个RAM块分配给了一个功能模块,则不能被其他功能模块使用。
2、每个RAM块的宽度有限(一般最大为16位宽),如果要存储32位宽的数据,则需要由两个RAM块拼起来使用。
在数字电路设计中,经常会使用FIFO(First in First out,先进先出)模块来存储数据,下面以FIFO为例来阐述现有技术PLD器件中的RAM使用情况,如附图1所示:其中的双端口RAM在PLD器件中就需要使用RAM块来实现,其中的“写数据”、“写信号”、“满/几乎满”为FIFO入口信号;“读数据”、“读信号”、“空/几乎空”为FIFO出口信号;写地址产生逻辑控制双端口存储器的写地址和写信号;读地址产生逻辑控制双端口存储器的读地址和读信号;空/满标志产生逻辑产生FIFO的空/满状态信号,数据在控制信号的控制下分别从“写数据”端口写入、从“读数据”端口读出。
由于上述的PLD器件中RAM块使用的限制,所以一个FIFO必须使用一块或多块RAM。当FIFO深度较小,且位宽较大时就会造成RAM资源严重浪费,因为多块RAM模块拼接后的位宽必须与FIFO的位宽一致,如果FIFO位宽较大,则需要多块位宽较小的RAM模块拼接,但当FIFO深度较小时,需要使用的RAM的存储容量并不大。例如,一个宽度为64位、深度为16位的FIFO,只需要使用1024位的RAM资源。假设每个RAM块最大位宽为16位,则如果用512位的RAM块来实现,需要使用4块,占用了2048位的RAM资源,但实际使用的资源只有1024位,浪费了1024位的RAM资源;如果使用4096位的RAM块来实现,同样需要使用4块,占用了16K位的RAM资源,浪费更加严重。
因此,现有技术中PLD器件实现深度浅,位宽大的RAM时资源利用率低,浪费严重。
发明内容
本发明的目的在于提供一种提高RAM利用效率的方法,以解决现有技术中RAM在PLD中使用时利用率低的问题。
为实现上述目的,本发明采用的技术方案是这样实现的:一种提高RAM利用效率的方法,该方法包括以下步骤:
a、将所述的RAM写数据的时钟频率设置为外部写数据的时钟频率的整数倍n,将所述的RAM读数据的时钟频率设置为外部读数据的时钟频率的整数倍n;
b、写数据时,将一个外部写数据的时钟周期所写入的数据分成n份在n个RAM时钟周期内依次写入所述的RAM,读数据时,依次在n个RAM时钟周期内从所述的RAM中读出一个外部时钟周期内应读取的数据。
其中所述的整数倍n是根据所述的外部读、写数据的位宽与RAM的位宽的比值确定的。
本发明还公开了另一种提高RAM利用效率的方法,包括下列步骤:
a、将所述的RAM写数据的时钟频率设置为外部写数据的时钟频率的整数倍n,将所述的RAM读数据的时钟频率设置为外部读数据的时钟频率的整数倍n,同时将RAM分成整数份m;
b、写数据时,将一个外部写数据的时钟周期所写入的数据分成n份在n个RAM时钟周期内依次写入所述的分成m份的RAM,读数据时,依次在n个RAM时钟周期内从所述的分成m份的RAM中读出一个外部时钟周期内应读取的数据。
其中所述的整数倍m是根据共用同一个所述RAM的功能模块的个数确定并且小于或者等于n。
本发明克服现有技术不足,采用将RAM读写数据的时钟频率与外部时钟频率分离的方法,使用倍频时钟作为RAM的时钟,使得位宽小的RAM可以适用于位宽大的PLD中的功能模块,同样也使得一块RAM块可以适用于一个以上的PLD中的功能模块,有效的提高了RAM块的利用效率,节约了资源。
附图说明
图1是现有技术中FIFO结构示意图;
图2是本发明实施例一的FIFO结构示意图;
图3是本发明实施例二的FIFO结构示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行进一步详细的说明。
实施例一、如附图2所示,对于一个位宽比双端口RAM宽的FIFO,可以对其读写数据的方式进行修改,首先将RAM时钟与FIFO的时钟分离,设置RAM的写时钟和读时钟,其频率为FIFO时钟频率的n倍,将外部写入FIFO的数据分成n份,分别用“写数据1”、“写数据2”......“写数据n-1”、“写数据n”表示,将从FIFO读出的数据也分成n份,分别用“读数据1”、“读数据2”......“读数据n-1”、“读数据n”表示,由于RAM的写时钟频率为FIFO写时钟频率的n倍,RAM读时钟频率为FIFO读时钟频率的n倍,RAM带宽相应为FIFO带宽的n倍。当外部数据写入FIFO时,每个RAM时钟周期写入相当于FIFO一个时钟周期写入数据的1\n份,FIFO在一个其本身时钟周期要求写入的数据,在n个RAM时钟周期内分次写入,在FIFO内部第一个RAM时钟周期写入上述分成n份的数据的第1份数据“写数据1”,第二个RAM时钟周期写入第2份数据“写数据2”,如此类推,第n个RAM时钟周期写入了第n份数据“写数据n”,至此,在一个FIFO时钟周期应该写入的数据已经全部写入完毕,只是分成了n次。读操作与上述的写操作原理一样,当从FIFO中读取数据时,将FIFO一个时钟周期的数据分成n份,依次在n个RAM时钟周期内读取。
以下通过具体的例子来说明,假设FIFO的位宽为64位、深度为16,拟使用16位宽的4096位RAM,在现有技术中需要4块RAM拼接才能满足FIFO的位宽要求,但采用本发明所述的方法只需1块RAM即可。首先根据FIFO和RAM的位宽比确定n的值,也就是RAM时钟频率倍频的倍数,此时应确定n为4,设置RAM的时钟频率为FIFO时钟频率的4倍,同时将在一个FIFO时钟周期内写入FIFO或者从中读出的数据分成4份,在写入或者读出数据时,在每一个RAM时钟周期写入或者读取一份数据,在4个RAM时钟周期写入或者读取一个FIFO时钟周期的全部数据。
因此,将FIFO的数据分成n份以后依次写入FIFO或者从FIFO依次读出,同时提高内部读写数据的频率,在不影响数据读写速度的情况下降低了对RAM的位宽要求,由此达到了提高RAM利用率的效果。
实施例二、如果FIFO宽度与双端口RAM一样,通过本发明所述的方法还可以将RAM空间分为多份,给多个FIFO使用,生成多个FIFO,以此克服前述的一块RAM块只能分配给一个模块使用的缺陷。如附图3所示,首先将RAM时钟与FIFO的时钟分离,设置RAM的写时钟和读时钟,其频率为FIFO时钟频率的n倍,修改时钟后,RAM带宽为FIFO带宽的n倍。此外还需修改该FIFO内部的各个逻辑模块,将双端口RAM分为n份(每份可以大小不同),分别为“RAM1”、“RAM2”......“RAMn”,将外部FIFO接口扩展为n个,分别为“FIFO1”、“FIFO2”、......“FIFOn”、每个FIFO使用其对应的一份RAM。写操作时,n个FIFO在一个外部FIFO时钟周期同时写入数据,但是在内部,实际是使用了n个RAM时钟周期,在每一个RAM时钟周期针对每个FIFO依次写入数据,第一个RAM时钟周期将“FIFO1”的数据写入,第二个RAM时钟周期将“FIFO2”的数据写入,......第n个RAM时钟周期将“FIFOn”数据写入,如此类推,在一个完整的FIFO时钟周期内将数据全部写入所有的FIFO。同理,读操作也是一样。这样,达到了n个FIFO同时使用一个RAM的目的,同样提高了RAM利用率。假如n为2,则一块RAM就可以生成两个FIFO。例如:一个4096位的RAM块就可以生成2个宽度为16位,深度为64的FIFO。此时,RAM块的利用率为100%。而传统方法只能生成一个FIFO,RAM块的利用率为50%。
实施例三、前面所述的两种方法中,第一种方法是一个FIFO占用RAM的所有时间片(n个RAM时钟周期),第二种方法是一个FIFO占用RAM的一个时间片(1个RAM时钟周期)。其实,两种方法也可以结合使用,可以将内部RAM时钟频率提高为外部FIFO时钟频率的n倍,然后将RAM分成m份对应外部的m个FIFO,(m小于等于n),将RAM时间片(时钟周期)合理分配给每个FIFO,就可以满足宽度、深度各异的FIFO的需要。例如:m=3、n=4,则可以生成3个FIFO,其中一个占用2个时间片,数据宽度为RAM的两倍。另外2个各占一个时间片,数据宽度与RAM一样。同理如m=2、n=4,则可以生成2个FIFO,每个FIFO占用2个时间片,数据宽度都为RAM的两倍。
Claims (4)
1.一种提高RAM利用效率的方法,其特征在于,该方法包括以下步骤:
a、将所述的RAM写数据的时钟频率设置为外部写数据的时钟频率的整数倍n,将所述的RAM读数据的时钟频率设置为外部读数据的时钟频率的整数倍n;
b、写数据时,将一个外部写数据的时钟周期所写入的数据分成n份在n个RAM时钟周期内依次写入所述的RAM,读数据时,依次在n个RAM时钟周期内从所述的RAM中读出一个外部时钟周期内应读取的数据。
2.根据权利要求1所述的方法,其特征在于,所述的整数倍n是根据所述的外部读、写数据的位宽与RAM的位宽的比值确定的。
3.一种提高RAM利用效率的方法,其特征在于,该方法包括以下步骤:
a、将所述的RAM写数据的时钟频率设置为外部写数据的时钟频率的整数倍n,将所述的RAM读数据的时钟频率设置为外部读数据的时钟频率的整数倍n,同时将RAM分成整数份m;
b、写数据时,将一个外部写数据的时钟周期所写入的数据分成n份在n个RAM时钟周期内依次写入所述的分成m份的RAM,读数据时,依次在n个RAM时钟周期内从所述的分成m份的RAM中读出一个外部时钟周期内应读取的数据。
4.根据权利要求3所述的方法,其特征在于,所述的整数倍m根据共用同一个所述RAM的功能模块的个数确定并且小于或者等于n。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100333861A CN100385387C (zh) | 2006-01-24 | 2006-01-24 | 一种提高ram利用效率的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2006100333861A CN100385387C (zh) | 2006-01-24 | 2006-01-24 | 一种提高ram利用效率的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1858695A CN1858695A (zh) | 2006-11-08 |
CN100385387C true CN100385387C (zh) | 2008-04-30 |
Family
ID=37297605
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2006100333861A Active CN100385387C (zh) | 2006-01-24 | 2006-01-24 | 一种提高ram利用效率的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100385387C (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107977327A (zh) * | 2017-11-24 | 2018-05-01 | 中国航空工业集团公司西安航空计算技术研究所 | 一种fpga中使用双端口ram实现多端口存储单元的电路 |
CN109542799B (zh) * | 2018-11-05 | 2023-03-28 | 西安智多晶微电子有限公司 | 块存储器拼接方法、拼接模块、存储装置及现场可编程门阵列 |
CN113076061A (zh) * | 2021-03-18 | 2021-07-06 | 四川和芯微电子股份有限公司 | 单ram多模块数据的缓存方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1540494A (zh) * | 2003-04-26 | 2004-10-27 | 华为技术有限公司 | 基于fifo队列的数据包线速处理方法及其装置 |
US20050160215A1 (en) * | 2004-01-20 | 2005-07-21 | International Business Machines Corporation | Flow through asynchronous elastic FIFO apparatus and method for implementing multi-engine parsing and authentication |
-
2006
- 2006-01-24 CN CNB2006100333861A patent/CN100385387C/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1540494A (zh) * | 2003-04-26 | 2004-10-27 | 华为技术有限公司 | 基于fifo队列的数据包线速处理方法及其装置 |
US20050160215A1 (en) * | 2004-01-20 | 2005-07-21 | International Business Machines Corporation | Flow through asynchronous elastic FIFO apparatus and method for implementing multi-engine parsing and authentication |
Also Published As
Publication number | Publication date |
---|---|
CN1858695A (zh) | 2006-11-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101231877B (zh) | 存取n端口存储器m个存储器地址的方法及n端口存储器 | |
CA2391213C (en) | Simultaneous addressing using single-port rams | |
CN104407809B (zh) | 多通道fifo缓冲器的控制方法 | |
CN102208005A (zh) | 一种2-d卷积器 | |
CN103279309A (zh) | 基于fpga的ddr控制装置及方法 | |
CN101236774B (zh) | 单端口存储器实现多端口存储功能的装置和方法 | |
CN106250321B (zh) | 2r1w存储器的数据处理方法及数据处理系统 | |
CN101848135B (zh) | 芯片的统计数据的管理方法和装置 | |
CN103760525A (zh) | 一种补齐式原地矩阵转置方法 | |
CN100385387C (zh) | 一种提高ram利用效率的方法 | |
CN102520902B (zh) | 基于单片块ram的并行写入多fifo实现方法 | |
CN102004626B (zh) | 双口存储器 | |
CN102541769B (zh) | 一种存储器接口访问控制方法及装置 | |
CN105577985A (zh) | 一种数字图像处理系统 | |
CN101833431B (zh) | 基于fpga实现的双向高速fifo存储器 | |
US6259652B1 (en) | Synchronous integrated memory | |
CN102760487A (zh) | 一种高性能静态随机存储器内部最优分级的方法及其架构 | |
CN102118304B (zh) | 一种信元交换方法和装置 | |
CN101110259A (zh) | 先进先出存储器 | |
CN101876960B (zh) | 一种apb总线系统及一种芯片 | |
US5479128A (en) | Single ram multiple-delay variable delay circuit | |
CN101377952B (zh) | 一种sram中数据的读写方法及装置 | |
CN102930898B (zh) | 一种构建多端口异步存储模块的方法 | |
CN101165805A (zh) | 多端口存储器存取控制模块 | |
Zhang et al. | Asynchronous FIFO implementation using FPGA |
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 |