2.3 FPGA嵌入式存储
2.3.1 存储资源的利用
除LAB之外,大多数现代FPGA器件都包含专用硬件模块。这些专用资源块占用阵列中的一个或多个模块,并且通过FPGA布线通道可以完全访问。通常,这些专用资源被安排在设备中的特定行或列的块中。
内存模块是可以配置为不同类型内存设备的专用模块。FPGA存储器模块可以创建为单端口RAM、双端口RAM、只读存储器ROM。它们也可以用作移位寄存器或FIFO缓冲器。由于FPGA存储器模块的编程与器件中的其他结构类似,因此可以使用上电时所需的任何内存内容对其进行初始化。这对于设计调试非常有用,因为可以初始化和测试任何内存模式。
嵌入式内存模块用作双端口RAM存储器,如图2-9所示。
图2-9 嵌入式内存模块用作双端口RAM存储器
MLAB包括内存LAB。MLAB可以用作标准LAB,也可以配置为简单的双端口SRAM。MLAB的容量比专用存储器模块小得多,但作为宽而浅的存储器,它可以实现DSP应用所需的移位和FIFO操作,而不会浪费更高容量的内存模块资源。
2.3.2 M9K资源介绍
在英特尔的FPGA各系列中,英特尔为各种器件提供了各种大小不同的嵌入式存储模块,如M9K、M144K、M10K及M20K等。这里以M9K资源为例进行说明。
在M9K模块中,每个模块支持8192个存储位(加上校验位,则为9216个存储位)。该存储模块支持各种深度与位宽的存储器配置,如配置深度为8192、位宽为1的RAM存储器,深度为1024、位宽为8的存储器,深度为512、位宽为16的存储器等。当实现FIFO Buffer及移位寄存器时,会需要额外的逻辑单元来实现控制部分逻辑。
如图2-10所示为在Quartus中使用IP核来实现双口RAM的界面,从界面中可以看到,当把深度设置为2048、位宽设置为8时,软件自动设置了两个M9K资源来实现。
为什么是两个M9K资源呢?因为深度为8192、位宽为16的存储器要消耗的存储位总数就是两个M9K支持的存储量。
图2-10 M9K资源实现片上RAM存储器
综合后,从Quartus提供的RTL Viewer中可以看到两个M9K模块组成一个存储器,如图2-11所示。
图2-11 两个M9K模块组成一个存储器