在DSP应用系统中,经常遇到需要大量外部扩展存储器的情况。例如,在数码相机和便携式摄像机中,为了临时存储现场拍摄的许多图片或图像,需要将DSP处理的数据传输到外部存储设备中,以备后用。从当前的内存市场来看,SDRAM因其性价比优势而受到DSP开发人员的青睐。 DSP和SDRAM之间的直接接口是不可能的。由于其灵活的使用,快速的执行速度和丰富的开发工具,FPGA(现场可编程门阵列)越来越多地出现在现场电路设计中。本文使用FPGA作为接口芯片来提供控制信号和时序信号,以实现从DSP到SDRAM的数据访问。 1. SDRAM简介本文使用的SDRAM是TMS626812A,图1是其功能框图。它在内部分为两个,每个1M字节,数据宽度为8位,因此总存储容量为2M字节。所有输入和输出操作都是在时钟CLK的上升沿的作用下执行的,刷新时钟交替刷新两个内部RAM。 TMS626812A主要具有六个控制命令,它们是:条带尖/行地址输入,列地址输入/写入操作,列地址输入/读取操作,条无效,自动刷新,自动刷新。 SDRAM和TMS320C54x之间的接口中使用的主要命令为:MRS,DEAC,ACTV,WRT-P,READ-P和REFR。在这里,设计目的是生成控制信号以满足这些命令的时序要求。有关TMS626812A的特定说明,您可以检查其数据表。 2. SDRAM与TMS320C54x之间的通用接口图2是DSP与SDRAM之间的通用接口的框图。在图中,DSPI / F代表TMS320C54x终端接口单元,SDRAMCNTL代表SDRAM终端接口控制单元。 SDRAM设置为一次可读写128个字节,而DSP一次只能读写一个字节,因此建立了两个缓冲区B0和B1来缓冲和传输数据。 B0和B1的大小均为128字节,它们被映射到DSP中相同的地址空间。尽管B0和B1对应于相同的地址空间,但是不能同时合法地访问两个缓冲区。实际上,当DSP访问B0时,SDRAM访问B1,反之亦然。如果DSP将数据写入B1,则SDRAM从B0读取数据;否则,SDRAM从B0读取数据。当SDRAM数据写入B0时,DSP从B1读取数据。同时从同一缓冲区读取或写入都会触发错误。上述数据传输方法具有两个优点:一个是加快TMS320C54x的访问速度,另一个是解决两者之间的时钟同步问题。 3. FPGA TMS320C54x的硬件设计为扩展外部存储器提供了以下信号:CLK,CS,AO〜A15,D0〜D15,RW,MATRB,ISTRB,IS和SDRAM接收以下信号:CLK,CKE, CS,CQM,W,RAS,CAS,A0〜A11。由于两个控制信号不同,因此有必要在DSP和SDRAM之间添加控制逻辑,以将来自DSP的信号解释为SDRAM可以接收的信号。图3是使用FPGA设计的顶层硬件接口图。该图主要由三个模块组成:DSP-IQ,DMA-BUF和SD-CMD。其中DSP-IO是DSP端的接口,用于解码TMS320C54x发送的SDRAM地址和命令。 DMA-BUF代表缓冲区BO和B1。 SD_CMD模块用于生成SDRAM访问所需的各种信号。 DSP_IO模块包括IO_DMA,DSP_BUF和DSP_READ。 IO_DMA生成SDRAM命令信号,即图3中的DSP_RDY,DSP_SD_RW,DSP_SD_BANK_SW,DSP_SD_ADDR [20..0],DSP_SD_ADDR_RESET,DSP_SD_START。DSP_BUF生成用于访问B0和B1的地址,数据和控制信号。在图3中,它指的是DSP_SD_BUFCLKI,DSP_SD_BUFCLKO,DSP_SD_BUFWE,DSP_SD_BUFADDR [6..0],DSP_SD_BUFIN [7..0]。 DSP-READ子模块用于控制DSP的读写方向。 DMA_BUF分为两个缓冲区B0和B1,用于数据传输。每个缓冲器的输入和输出信号包括:CLKI,CLKO,WE,ADDR [6-0],DATA_IN [7-0],DATA_OUT [7 -0]。 BANK_SW是一个切换信号,用于DSP和SDRAM切换对B0和B1的访问。 SD_CMD模块包括刷新,读取和写入功能。当DSP芯片发出SDRAM读取命令时,从SDRAM读取128字节数据并将其存储在B0或B1中。当DSP发送写命令时,128个字节的数据被传送到B0或B1,最后被写入SDRAM。 4.软件设计DSP将数据写入SDRAM时的操作步骤如下:(1)首先将数据写入B0或B1。 (2)SDRAM的访问地址通过DSP的I / O地址DMA_ADDH和DMA_ADDL发送到FPGA。 (3)DSP向FPGA发送命令(I / O地址为DMA_CTL)以生成续