1 引言 FIFO(First In First Out)是一种具有先进先出存储功能的部件。在高速数字系统当中通常用作数据缓存。在高速数据采集、传输和实时显示控制领域中.往往需要对大量数据进行快速存储和读取,而这种先进先出的结构特点很好地适应了这些要求,是传统RAM无法达到的。 许多系统都需要大容量FIFO作为缓存,但是由于成本和容量限制,常采用多个FIFO芯片级联扩展,这往往导致系统结构复杂,成本高。本文分别针对Hynix公司的两款SRAM和DRAM器件,介绍了使用CPLD进行接口连接和编程控制,来构成低成本、大容量、高速度FIFO的方法。该方法具有通用性,可以方便地移植到与其他RAM器件相连的应用中去[1]。 2基于SRAM的设计与实现 2.1 SRAM结构芯片HY64UD16322A | ||||
2.3指针算法程序设计 系统采用CPLD作为总控制器件。根据FIFO的特点,需要将SRAM按地址存储用程序控制成先进先出的结构。这里采用指针算法来实现这种结构设计:设置两个指针变量StartPos和EndPos.分别作为进入数据头尾指针。当有新数据写入时,数据从上存储位置的下一个位置开始存放.存入一个数据.EndPos就自动加1,保持与数据位置同步。当EndPos超过整个RAM的容量(RAM_SIZE)时,就需要循环返回,从0x000位置存放,一直到EndPos与StartPos重合。这时可以认为RAM已经存满。同理,读出数据时。起始位置StartPos自动加1。当StartPos超过整个RAM的容量时,就从0x000位置读取。一直到StartPos与EndPos重合,这时可以认为RAM已经读空。在这两个过程当中,CPLD需要对地址线进行控制.不难发现,写数据的时候Address与EndPos一致,读数据的时候Address与StartPos一致。
写入数据的时候,CPLD需要模拟FIFO基本的写操作时序:CPLD接收到nWEN(写使能,低有效)和WCLK(写时钟,上升沿有效),即当nWEN为低,WCLK为上升沿时,将当前I/O上的数据写入。在数据写入RAM的时候.CPLD应按照HY64UD16322A的写时序来控制写操作。这里,CPLD首先按照上述流程计算出当前数据应存放的地址,然后控制nWE信号,nWE为低时,数据自动写入RAM。然后再写下一位数据。
可以看出,影响所构建FIFO读写速度的关键因素是tWc,该参数也是决定HY64UD16322A速度的主要因素,因此.所构建FIFO的理论速率应该接近HY64UD16322A的速率。 3 基于DRAM的设计与实现 3.1 DRAM结构芯片HY57V281620E 3.2系统硬件设计
这里,主要采用2.3中设立头尾两个指针的思想。与SRAM不同的是,DRAM采用的矩形存储单元阵列是由行线和列线来控制,并且内部采用分块结构.这里HY57V281620E由4块存储单元组成.通过BA1和BA0来控制。在写数据操作的时候,当存放数据长度超过当前存储单元容量时,需要CPLD切换至下一存储块进行存储,同样,读操作的时候也存在这种操作,即如果StartPos或者EndPos超过了存储块容量.这里是2 097 152,则通过一个模4计数器控制切换至下一个存储块。 3.4时序控制 可以看出,影响所构建FIFO读写速度的主要因素是tPC,这也是决定DRAM速率的关键所在,因此,所构建FIFO的理论速度也应该接近DRAM频率。同时,还必须考虑DRAM的刷新操作。这里,系统采用nCAS先于nRAS的方式(CBR),即控制nCS、nCAS、nRAS,并保持nWE为高电平,利用芯片内部计数器决定要被刷新的行。HY57V281620E提供了这种自刷新模式,刷新速率由tREF来决定,通常为64 ms。在系统或某存储块长时间无操作的情况下,需要定时刷新,以保持数据完整。
还需要注意:由于所采用的RAM只采用一个数据总线作为输入输出,因此在写数据的时候不能进行读操作。而常用FIFO器件可以同时读写。所以.如果要在同一时间内进行读和写操作,那么需要在一个FIFO读写时钟周期内对RAM进行读写等多个操作,这时所构建的FIFO速率将降低。 此外.在与DRAM构建高速FIFO时,由于存储块选择需要一定时间操作,因此跨块存储操作在频率较高时会影响正常的数据读写,出现个别数据丢失情况。而且当某段时间进行刷新操作时,有突发数据需要读或写,这时不允许中断。解决这种问题的办法是用一个I/O引脚(nREADY)标识出当前所构建的FIFO是否可读写,如果有上述情况发生,则nREADY为高,可以读写时为低。 常用的FIFO器件还有半满、接近满、接近空等状态指示,可以在上述构建FIFO的基础上加上简单的逻辑控制,计算StartPos和EndPos之间的差值,根据当前是写操作还是读操作来指示。其他状态信号也可以通过CPLD经由逻辑运算很方便地实现。同时,读和写同步时钟可以不一致。这样就可以很方便地构成同步或者异步两种FIFO,具有很好的可扩展性。 5 结束语 |
[1]. CPLD datasheet https://www.dzsc.com/datasheet/CPLD_1136600.html.
[2]. HY64UD16322A datasheet https://www.dzsc.com/datasheet/HY64UD16322A_390582.html.
[3]. TTL datasheet https://www.dzsc.com/datasheet/TTL_1174409.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。