Spartan-3器件的存储器结构由3个层次构成。
(1) 分布式存储器结构(Distributed RAM)
分布式存储器是由CLB中的查找表(LUT)实现的,每个CLB可以构成1个64×1或/1JZ×2的存储器,通常用来构成小容量的片内存储器。该存储器结构却有访问速度快的特点,因此常用于数字信号处理的数据缓存等,这些存储器都可以配置成双口的RAM。如果需要用分布式存储器构成大块的存储器,则必须将多个CLB级连起来。这样访问速度将会降低,并且还需要占用逻辑资源。
(2) 块存储器结构(Block RAM)
块存储器是FPGA内部的专用存储器模块,通常沿芯片的垂直边排列。Spartan-3器件的块存储器结构为每块18 Kb,器件型号不同块的个数也不同,多可提供104个块共2.0Mb的块存储器。可以配置成单端口Block RAM或完全的双端口Block RAM,如图1所示。
图1 双端口Block RAM结构和标准原型
Block RAM的各个信号定义如下。
CLK[A/B]:Block RAM的A口/B口时钟控制信号。
EN[A/B]:Block RAM使能信号,当该控制脚为低时,写入和读出操作无效,DO[A/B]和DOP[A/B]保持原有状态。
WE[A/B]:Block RAM读/写控制信号,当EN[A/B]控制为高时,WE[A/B]=1表示对目标地址执行写操作;WE[A/B]=0表示对目标地址执行读操作。
SSR[A/B]:Block RAM的置位控制信号,当EN[A/B]控制为高时,该信号有效。
ADDR[A/B]:Block RAM地址输入信号。
DI[A/B]:Block RAM的数据输入。
DIP[A/B]:Block RAM输入数据的奇偶校验信号。
DO[A/B]: Block RAM的数据输出。
DOP[A/B]:Block RAM输出数据的奇偶校验信号。
块存储器除了实现单/双端口的存储器以外,还可支持数据宽度的转换(包括奇偶校验位),可以用多个Block RAM组成更大深度和宽度的存储单元。
在同时读/写Block RAM的同一地址时,有以下3种处理模式,在设计时可以用ISE设计工具的模块设计或约束设计来设置。
WRITE_FRJST(写优先)模式:在WRITE_FRIST模式下同时读/写Block RAM的同一地址时,读出的数据与写入的数据相同,如图2所示。
图2 WITE_FRIST模式
READ-FRIST(读优先)模式:在该模式下,同时读/写Blok RAM的同一地址时,首先将该地址所指定缓冲器的数据读出.在写操作时不影响该数据,如图3所示.
图3 WRITE FRIST模式操作
NO_CHANGE(输出不变)模式:在该模式下,同时读/写Block RAM的同一地址时,数据仅写入相应的缓冲器,而不影响输出。输出缓冲器保持上读操作时的数据,如图4所示。
图4 NO_CHANGE模式操作
(3) 访问外部存储器的SelectlO高速接口
Spartan-3器件的SelectlO接口与DOM时钟信号一起,可以实现外部海量存储器的高速访问,这些接口包括SSTL3- I/ II、SSTL2-I/ II和HSTL-I/II/III/IV,以及IOB模块中的DDR功能。Xilinx已经提供了许多有关高速存储器接口的参考设计。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。