FPGA内嵌的块RAM及其在FFT算法中的应用.doc
文本预览下载声明
FPGA内嵌的块RAM及其在FFT算法中的应用
引言
在现代逻辑设计中,FPGA占有重要的地位,不仅因为具有强大的逻辑功能和高速的处理速度,同时因为其内部嵌有大量的可配置的块RAM[1],使其得到了广泛地应用,例如FFT算法的实现等。FFT算法的实现有多种方案[2],比如采用单片机或DSP芯片实现,但是因需要外接存储器而使其运算速度受到了限制[3`4],而采用FPGA实现FFT算法,避免了使用外部存储器,加快了数据的读取和存储速度,进而可以提高FFT的运算速度[5`6]。
随着设计的日益复杂,RAM的需求量也越来越大,不同器件商生产的不同FPGA器件族内嵌块RAM的结构又有一些不同,在Altera公司的FPGA内部嵌入的RAM块有三种[7],分别是M512RAM(512bit RAM)、M4K(4Kbit)和M-RAM(512Kbit RAM),其中M512主要用于大量分散的数据存储、浅FIFO、移位寄存器、时钟域隔离等功能。M4K通常用作芯片内部数据流的缓存、ATM信元的处理、信元FIFO接口以及CPU的程序存储器等。而M-RAM主要用于在大数据包的缓存(如以太网帧、IP包等大到几K字节的数据包),视频图像帧的缓存,回波抵消(Echo Canceller)数据存储等等。本文将详细介绍内嵌RAM块的不同配置模式,及其实现的FIFO存储器在FFT算法中的应用。
FPGA内嵌块RAM
RAM几乎是可编程逻辑器件中除了LE之外用得最多的功能块了。通常,FPGA内嵌块RAM可以配置成以下几种模式:单端口RAM、简单双口RAM、真正双口RAM、移位寄存器、ROM和FIFO等模式[8]。而在Altera公司的FPGA中内嵌块RAM以M4K最多,本文就以M4K块RAM为例,介绍这几种模块的实现方式及其在FFT算法中的应用。
2.1 单端口RAM模式
如图1所示为单端口RAM的模型,其中两个时钟inclock和outclock可以使用同一个时钟源,inclocken和outclocken是两个时钟使能信号,inaclr和outaclr是异步清零信号,可以分别对输入级和输出级寄存器清零。
图1 单端口RAM模型
单端口RAM模式支持非同时的读写操作。同时每个M4K RAM块可以被分为两部分,分别实现两个独立的单端口RAM。当器件内部存储单元不足时,QuartusII软件就会自动的将M4K RAM配置成两个相互独立的单端口RAM。需要注意的是,当要实现两个独立的单端口RAM模块时,首先要保证每个模块所占用的存储空间小于M4K RAM存储空间的1/2。
在单端口RAM配置中,输出只在read-during-write模式有效,即只有在写操作有效时,写入到RAM的数据才能被读出。当输出寄存器被旁路时,新数据在其被写入时的时钟的上升沿有效。
2.2 简单双端口RAM模式
如图2所示为简单双端口RAM模型,图中左边的端口只写,右边的端口只读,因此这种RAM也被称为伪双端口RAM(Pseudo Dual Port RAM)。这种简单双端口RAM模式也支持同时的读写操作。
图2 简单双端口RAM模型
M4K RAM块支持不同的端口宽度设置,允许读端口宽度与写端口宽度不同。这一特性有着广泛地应用,例如:不同总线宽度的并串转换器等。下表1显示了M4K RAM支持的混合端口配置情况。
表1 简单双端口RAM模型的混合端口配置
在简单双端口RAM模式中,M4K RAM块具有一个写使能信号wren和一个读使能信号rden,当rden为高电平时,读操作有效。当读使能信号无效时,当前数据被保存在输出端口。 当读操作和写操作同时对同一个地址单元时,简单双口RAM的输出或者是不确定值,或者是存储在此地址单元的原来的数据(这个可以在QuartusII软件中进行设计)。
2.3 真正双端口RAM模式
如图3所示为真正双端口RAM模式,图中左边的端口A和右边的端口B都支持读写操作,wren信号为高为写操作,低为读操作。 同时它支持两个端口读写操作的任何组合:两个同时读操作、两个端口同时写操作或者在两个不同的时钟下一个端口执行写操作,另一个端口执行读操作。
图3 真正双端口RAM模式
真正双端口RAM模式在很多应用中可以增加存储带宽,例如,在包含Altera Nios嵌入式处理器和DMA控制器系统中,采用真正双端口RAM模式会很方便,相反,如果在这样的一个系统中,采用简单双端口RAM模式,当处理器和DMA控制器同时访问RAM时,就会出现问题。真正双端口RAM模式支持处理器和DMA控制器同时,这个特性避免了采用仲裁的麻烦,同时极大的提高了系统的带宽。
在由单个M4K RAM块实现的真正双端口RAM模式中,能达到的最宽的数据位为256*16-bit或者256*18-bit(
显示全部