杨园格
(西安明德理工学院,陕西 西安710124)
21 世纪是一个信息量爆发的时代,信息数据以及处理速度在不断增加,对MCU 的处理速度和处理能力要求变得越来越高,其相应的片内存储模块SRAM 容量也在增加,但是片内SRAM 采用的6T 结构,成本较高,对其面积不易做得太大[1]。为了解决RAM 资源需求不断提升的问题,PSRAM(Pseudo static random access memory)存储技术给出了解决方案。PSRAM 是一种伪静态随机存储器[2],采用的是1T1C 架构,其制作容量可以做的更大,价格也相对更低,被广泛应用于物联网数据缓存方案中。由此,本文提出基于AHB 总线高速访问串行PSRAM 的架构,可以实现对PSRAM 各种指令模式的访问,提高数据传输效率。
PSRAM 的通信接口分为串行接口和并行接口。常用的串行接口包括SPI、Quad SPI 等。由于其串行通信管脚较少,相应的占用的PCB 面积较少,在IOT 芯片中应用较为广泛,可以有效解决信息数据的缓存问题。但是,由于串行PSRAM 采用的是串行接口,也限制了其与MCU 芯片的数据传输速率[3]。
SQPI PSRAM 采用的通信接口模式为SPI mode、Quad mode,其操作模式与串口Flash 的类似。PSRAM 可以外挂在MCU 芯片的外部,根据应用需求更改容量大小。对芯片的通信引脚一般如下表1 所示。
表1 PSRAM 通信端口描述
一般串行PSRAM 的访问模式分为普通读写模式,速度在50MHz 以下;快速度模式,速度可达100MHz 以上。不同的厂商有不同的设计模式以及通信速度。
对于PSRAM 的访问控制设计结构如图1 所示。该控制器由AHB 总线配置[4]模块、AHB_to_SQPI 控制模块、FIFO 模块(数据收发复用)、以及SQPI 主机模块构成。该结构使得MCU 可以直接通过AHB 总线去访问PSRAM 的地址空间,而无需关注中间的数据流走向。
图1 AHB 访问SQPI PSRAM 架构
本控制结构的RTL 设计主要是上图1 所描述的模块。
AHB 接口配置模块:该模块主要用来配置SQPI 控制相关的寄存器、FIFO 控制相关的寄存器、中断产生寄存器以及AHB 总线读写相关逻辑。在MCU 初始化时,会相应的初始化SQPI PSRAM 控制相关的寄存器:配置SQPI 访问时钟、SPI/Quad_SPI选择、接收中断使能选择以及状态寄存器等,这也就是对SQPI驱动的配置。
AHB_to_SPI 控制模块:该模块进行SQPI 的指令解析、读写模式选择、数据地址分配等;并且根据MCU 是随机地址读写还是连续地址读写,去调控FIFO 的读写使能[5],实现动态控制。SQPI PSRAM 的主要指令如表2 所示,该模块会对MCU 对该模块寄存器控制初始化,进行指令解析,进而控制SQPI Master 数据收发类型。
表2 SQPI PSRAM 指令类型
FIFO 模块:这里PSRAM 是串行通信单bit 传输,而MCU 的AHB 总线是32bit 并行传输,这就造成速度差,MCU 必须等待本次数据输出完成后才能传输下一次数据。为此,本文采用了64x32bit FIFO 实现数据缓存,MCU 需要写的数据会存入到FIFO 中,同时其所要写入的地址也会被寄存下来;然后在AHB_to_SPI 模块的控制下,依次由SPI Master 发送出去。MCU写完数据就认为其已经将数据写入到PSRAM,而后面的一系列操作完全由硬件自主完成。MCU 在读取PSRAM 数据时也是类似,该模块会在数据到来后通知MCU 来读取数据,这里可以采用产生中断方式或者MCU 轮询方式实现。
图2 PSRAM SPI mode 读操作
SQPI Master 模块:主要实现PSRAM SQPI 的通信接口协议,实现对片选信号ce_n、通信时钟sclk 以及输入输出信号的时序控制。该模块进行了FSM 状态设计,用来控制各种状态切换。在PSRAM 的SQPI 时序中有指令段、地址段和数据段,如图2 所示。这里给出了SPI mode 读操作下的数据分配,其中指令段占用8bit,地址段占用24bit,数据段每次输出8bit 数据可连续输出;同时这里也指出了数据流顺序,以及各个信号的时序。
在状态机设计时,分为四种状态IDLE 状态、CMD 状态(指令发送)、ADDR 状态(地址发送)以及DATA 状态(数据发送和接收),如图3 所示。在MCU 对PSRAM 进行寻址操作时,会触发状态机进入CMD 状态;8bit 指令发送完毕后,会根据是否发送PSRAM 地址,选择进入ADDR 状态或DATA 状态。当进入ADDR 状态,会等待24bit 地址发送完成后,进入DATA 状态;如果不需要发送地址,则直接进入DATA 状态。在DATA 状态,会进行数据发送或者数据接收。该状态会根据需要接收的数据或发送的数据个数,以及FIFO 的状态来决定是否跳出DATA 状态,返回IDLE。
图3 SQPI Master 状态机
在RTL 设计完成之后,搭建测试平台进行测试。在该设计中,内核时钟采用16MHz;SQPI 时钟采用60MHz,可进行分频60MHz/30MHz/15MHz。MCU 内核采用Cortex-M0,外挂PSRAM仿真模型进行仿真,验证了该设计的正确性。最后,在FPGA 平台上进行了系统测试,并选用了某厂家的64Mbit SQPI PSRAM进行了验证,访问模式采用60MHz Quad SPI mode,测试结果符合设计要求。
串行PSRAM 因容量大、引脚少,价格相对较低的优势,使其在物联网芯片的应用中得到普及。 本文研究了基于AHB 总线的PSRAM 高速访问设计,MCU 通过AHB 总线直接实现对PSRAM 存储器的寻址,内部转换模块自动实现对SQPI 的数据收发时序控制,可高效完成对PSRAM 的读写。该设计通过了FPGA 测试验证,具有较高的实用价值。