基于FPGA的存储解决方案——概述
高效的存储器功能有利于提升基于FPGA的嵌入系统的性能。在嵌入系统中存储器可用来储存软件代码和硬件加速器查找表(LUTs)等。
对于系统中的存储器的需求,在很大程度上是由计划的系统实现应用的性质来决定的。如简单的、低成本的系统,对于存储器的性能和容量等需求是很低的。相反的,在复杂的、高性能的系统中,存储器的吞吐能力是最重要的。在嵌入系统中可能使用到的存储器类型大致如下。
易失存储器
这一类存储器的主要特征就是易失性。易失存储器只能够在存储设备供电的期间保持数据内容。当停止供电时,存储器中的数据内容便会丢失。因此,如果需要在存储器关闭后仍保持数据,就不能使用易失存储器。常见的易失存储器包括,静态RAM(SRAM),同步静态RAM(SSRAM),同步动态RAM(SDRAM)和FPGA片内存储器。
非易失存储器
非易失存储器在断电后仍能够保持数据内容。对于在供电循环后需要恢复存储数据的应用,非易失存储器成为很好的选择。CPU启动代码、应用程序设定和FPGA的配置数据,这些通常都储存在非易性存储器中。尽管具有断电后保持数据的优点,非易失存储器的写入速度通常比易失存储器慢,并且擦写的步骤更复杂。另外,非易失存储器的可擦次数是有限的,超过这个有效次数擦除操作将失败。常见的非易失存储器包括所有种类的闪存,EPROM和EEPROM。现代的嵌入系统大多某种闪存作为非易失性存储器。
基于FPGA的存储解决方案——外部SRAM
所谓外部SRAM是指连接在FPGA外部的静态RAM(SRAM)。外部SRAM存储器也有不少种类。对于外部SRAM的选择是由应用需求的性质决定的。使用外部SRAM存储器既有优点又有缺点。
优点
外 部SRAM存储器提供比片内存储器更大的存储容量,速度也相当快,但是略逊于片内存储器。常用的外部SRAM的容量可达128KB至10MB。特殊的 SRAM可以具有更小或更大的容量。SRAM通常是具有很低的反应时间和高吞吐量的设备,由于是通过共享的双向总线连接到FPGA上,外部SRAM的速度 较片上存储器略低。SRAM的接口很简单,这使得将SRAM连接到FPGA成为一项简单的设计工作。你还可以使用多个外部SRAM共享总线,甚至使用不同 种类外部存储器,比如闪存或SDRAM。
缺点
在基于FPGA的嵌入系统中使用外部SRAM的主要缺点就是成本高以及占用板上空间。SRAM设备要比其它高容量的存储器诸如SDRAM,每MB的平均售价更昂贵。而且SRAM也比SDRAM和“零空间”的FPGA片内存储器平均每MB占用更多的板上空间。
最佳应用场合
外部SRAM作为存储中等大小的数据模块的缓冲表现良好。可以使用外部SRAM作为不适合片内存储器且反应时间又低于SDRAM的数据缓存。还可以将多个SRAM相组合以增加容量。
SRAM也是随机寻址数据的最佳选择。很多SRAM器件都可以存取无序地址的数据,反应时间与存取有序地址的数据一样短,而SDRAM在这一点上做得并不好。SRAM是大型LUT的理想存储器种类,能够储存诸如对于片内存储器来说过于巨大的色彩转换运算法则数据。
外部SRAM作为执行存储器为无缓存的CPU工作时表现相对良好。当CPU没有缓存来缓冲其它种类存储器的高反应时间时,外部SRAM的低反映时间特性有助于改善CPU的性能。
不适于应用场合
外部SRAM不适用的系统包括:需要使用大数据量存储器的系统和成本受限的系统。如果系统需求一个大于10MB的存储模块,设计者将更倾向于考虑其它种类的存储器,比如更低廉的SDRAM。
外部SRAM的种类
有多种SRAM器件可供选择。最常见的种类如下:
异步SRAM – 由于其不依靠时钟,所以是最慢的一种SRAM。
同步SRAM(SSRAM)– 同步SRAM运行同步于一个时钟信号 。同步SRAM的速度比异步SRAM快,但是也更昂贵。
伪SRAM – 伪SRAM(PSRAM)是指具有SSRAM接口的动态RAM(DRAM)
零总线周转时间SRAM –零总线周转时间SRAM(ZBT SRAM)从读到写的转换需要零个时钟周期,这使得它的反应时间很短。ZBT SRAM通常需要一个专用的控制器使其低反应时间的优势发挥出来。
注意事项
为使外部SRAM器件达到出最佳性能,建议遵循以下原则:
使用与连接的主系统控制器的接口数据带宽相同的SRAM。
如果管脚使用或板上空间的限制高于系统性能要求,可以使用较连接的控制器的数据带宽小一些的SRAM设备,以便减少管脚数量并减少PCB板上可能的存储器数量。然而,这种变化将导致降低SRAM接口的性能。
基于FPGA的存储解决方案——片内存储器
片内存储器是基于FPGA的嵌入系统可使用的最简单的存储器。由于存储是在FPGA内部完成,电路板上无需外部连线。可以简单地选择SOPC builder中System Contents-> On-Chip Memory选项,来完成设计中的片内存储器。也可以根据需求定义片内存储器的大小、带宽、种类、及特殊的片内存储器性质,如DDR等。
优点
片内存储器在基于FPGA的嵌入系统可使用的存储器中是具有最高吞吐量和最低反应延时的。它的反应延时通常仅为一个时钟周期。通过存储处理管道化,可以使吞吐量达到每个时钟周期进行一次处理。
有些片内存储器被设计成可以在DDR模式下进行存取,其中读和写是分别进行操作的。DDR模式能够有效地实现双倍存储带宽,允许存储器在一个通道进行写入,同时在另一个通道进行读取。
片内存储器的另一个好处是,由于它是在FPGA上直接实现的,它无需在板上或电路中进行写入。使用片内存储器可以节省开发时间和成本。
一些片内存储器可以在FPGA配置时自动初始化。这种存储器可以被用来保持小数据量的启动代码或重启动所需的LUT数据。
缺点
尽管速度很快,片内存储器在一定程度上会受到其容量的限制。FPGA可用的片内存储器的数量由使用的特定FPGA器件决定,容量范围从最小的Cyclone II device中15KB到最大的Stratix III device中近2MB。
因为多数片内存储器都是易失性的,它在断电后丢失数据。然而,某些片内存储器可以在FPGA配置时自动初始化,相当于提供了一种非易失性的功能。
最佳应用场合
以下是片内存储器适宜的一些应用。
缓存
由于其具有低反应延时,片内存储器在微处理器中作为缓存表现良好。Nios II处理器使用片内存储器作为引导和数据缓存。片内存储器有限的容量作为缓存通常不是一个问题,因为缓存本身都相对很小。
点到点的缓存
能够在低反应时间下进行存取也使得片内存储器适用于做器件间的缓存,即点到点的缓存,它是指处于正常的寻址空间,但与微处理器有专用接口的存储器。这些存储器主要用来实现缓存存储器的高速、低反应延时特性。
查找表
针对某些软件编程功能,尤其是数学上的功能。与在软件中进行计算相比,使用查找表储存所有可能的功能结果通常是最快的方法。片内存储器在这方面表现良好,前提是片内存储器的可用容量能够容纳可能的功能结果。
FIFO
嵌入系统经常需要管理从一个模块到另一个模块的数据流。FIFO可以在以不同的高速运行着的模块间作为数据缓冲存储器。根据应用程序所需的FIFO的大小,片内存储器可以作高速和便利的FIFO存储。
不合适的应用场合
片 内存储器不适用于需要大容量存储器的应用程序中。因为片内存储器在容量上相对受限,应避免使用其储存大量的数据。然而,有些工作可以更好地利用片内存储器 完成。如果应用程序使用多个小块数据,并且不是所有的数据块都适合使用片内存储器,你应当仔细考虑某些可以使用片内存储器。如果你的目标是系统的高速性 能,可以将最经常存取的数据放在片内存储器中。
片内存储器的种类
根据所使用的FPGA的种类,可用的片内存储器有很多种。关于可用的片内存储器的种类建议参考用户所使用的FPGA的器件手册。
注意事项
为使系统正确使用片内存储器,请遵从下面方针:
设 置片内存储器的数据带宽与主控系统的数据带宽相匹配。例如,如果要连接片内存储器到Nios II处理器的数据控制器上,需要设置片内存储器的数据带宽为32bit,与Nios II处理器的数据控制器的数据带宽相同。否则存取的延时将会大于一个时钟周期,因为系统相互连接需要进行带宽转换。
如 果片内存储器元件连接了多个主控制器,应考虑使用具有双通道的片内存储器。双通道特性使得在两个主控制器连接到同一个片内存储器时无需设置判断逻辑。另 外,双通道存储器允许在两个接口同时进行存取,这样在两个主控制器连接到同一个片内存储器时,可以极大提升效率与性能。然而,如果没有在主控制器间的协 调,从两个RAM的从接口写入将导致数据冲突。
为了达到FPGA逻辑资源与存储资源使用的最小化,请遵从下面方针:
为应用选择最佳的片内存储器。有些种类的片内存储器具有更大的容量,有些种类支持更宽的数据带宽。FPGA器件手册中嵌入式存储器部分提供了关于片内存储器特性的详细信息。
选择大小为2的次方字节的片内存储器。使用不是2的乘方的存储器将导致存储和逻辑效率降低。