基于DSP的VXI总线动态存储器设计张可立1,陈后金1,马恩云2(1.北方交通大学电信学院,北京100044;2.北京航天测控公司,北京100830)摘要:本文主要解决在VXI总线模块上实现大容量动态存储器的技术难题,介绍了利用可编程逻辑器件实现数字信号处理器(DSP)与同步动态存储器(SDRAM)之间的数据读取逻辑的设计、编程思想,以及必要的硬件连接,编程方法等。关键词:VIX总线;DSP;动态存储器;接口随着测控技术的不断发展,将先进的计算机技术、通信技术和电子仪器技术融为一体的VXI总线系统,越来越被广泛的应用于国防、电子、航空航天等各个领域,而为了准确、即时的处理VXI系统采集的数据,就需要在系统中设计大容量的存储区,而通常的静态存储器由于价格等方面的原因,很难被大规模的应用。动态存储器SDRAM可以很好的解决这方面的矛盾,但是由于其自身的特点,对它的访问需要有专门的控制逻辑来实现特殊的读写时序,并且由于SDRAM需要定时刷新,所以刷新电路的设计也是必须的。本文就此讨论一下如何利用可编程器件设计DSP与SDRAM的接口问题。1SDRAM的特点介绍1.1概述SDRAM(SYNCHRONOUSDYNAMICRANDOMACCESSMEMONY),同步动态存储器,它是一个具有高速同步接口的DRAM存储器,因为其I/O口与输入时钟同步,对于设计者而言,比较起DRAM,它可以建立起很高的传输带宽和更加简单的时序。其特点如下:同步控制:所有输入、输出都与输入时钟同步。分段输入、输出:只需给出一个地址就可以并行的(或连续的)读出或写入地址空间。可编程的分段宽度:分段宽度的可编程能力允许设计者在不同的系统中使用同一块SDRAM,其分段宽度可以允许在普通操作中被改变。双簇(多簇)结构:SDRAM允许同时打开两个(或多个)DRAM的行地址以对其进行操作,这样一个无缝隙的100MHZ的数据传输速率可以读写整个的存储器,具有双簇结构就可以实现对一个簇进行读的同时对另外一个簇进行充电操作。自动刷新和自刷新:由于DRAM(SDRAM)是利用电容来存贮数据的,每隔一端时间电容就会放电,其存储的数据就会丢失。因此SDRAM就要定时的给电容充电,以保持其数据不被丢失,这个过程就叫刷新。刷新分为两种,自动刷新和自刷新,自动刷新指CAS在RAS之前进行刷新。自刷新允许SDRAM自己产生刷新必须的控制信号来刷新。在设计中一般采用自动刷新的方式,设计一个定时器,每隔一定时间就对SDRAM发出一个刷新请求信号,当SDRAM处于空闲状态时,就会自动进行存储器的刷新操作。1.2SDRAM的复合地址为了减少引脚数目,通常SDRAM都采用复合地址的设计方法。SDRAM每一个存储单元的地址由三个参数唯一确定:簇数(BANKn)行数(row),列数(column),如要对一个地址单元进行操作,先选定所在的簇,在选定所在行和列,这样一个存储单元就被确定了。以下列出4M×64bit的SDRAM的地址线复用表。表1SdramAddressRowAddressColumnAddressSD_A0A8A0SD_A1A9A1SD_A2A10A2SD_A3A11A3SD_A4A12A4SD_A5A13A5SD_A6A14A6SD_A7A15A7SD_A8A16×SD_A9A17×SD_A10A18×SD_A11A19×BANK0A20A20BANK1A21A21如表1所示,BANK0,BANK1为SDRAM的簇选择信号,共有4簇,ROW为行选择,COLUMN为列选择。当地址有效时,SDRAM控制器先将A8-A19放到SD_A0到SD_A11上,并且BA0、BA1有效,SDRAM读取的是行地址,经过一定时间的延迟,控制器再将A0-A7放到SDRAM的地址线上,这时其读取的是列地址,再加上BANK地址,这样一个存储单元的地址就确定了。SDRAM的地址复用和其他类型存储器有很大分别,也是SDRAM控制设计的一个难点,必须有严格的时序要求,否则将会引起存储的混乱。1.3SDRAM的命令函数表2描述了SDRAM一些常用的命令,下面就其完成的功能结合设计做一简单的介绍。表2CommandCSRASCASWEDQMADDA10/APBAModeRegisterSet0000×OPCODENoOperation1×××××0111BankActive0011×RAVRead/ReadwithAutoprecharge0101×CA0/1VWrite/WritewithAutoprecharge0100×CA0/1VPrechargeAllBank0010××1×PrechargeSelectedBank0010××0VAutoRefresh0001×××ModeRegisterSet:模式寄存器设置,是指对SDRAM的工作方式做一定义,对寄存器的设置,可以在每次系统启动时,也可以在每次存取之间进行,当SDRAM掉电时,系统重新启动后必须重写模式寄存器。其空间安排如下:表3寄存器空间Bit数功能描述M2-M03BurstLengthM31BurstTypeM6-M43CASLatencyM7-M82OperationModeM91WriteBurstModeM10,M112ReservedBurstLength决定当接受到一个读写信号时可以读取的最大的列数目,对于连续读取模式,其值可以为1,2,4,8或整页(fullpage),当为隔行读取模式是,其值为1,2,4,8。BurstType决定读取模式为连续方式还是隔行方式。CASLatency决定当一个读信号有效到第一个数值在数据线上有效时之间的间隔延迟时间,延迟时间可以设定为1,2或3个时钟周期。例如:如果延迟时间为m,读信号在n时刻有效,那么数据将在第m+n个时钟信号有效,如果相应的读取时间适合的话,而在m+n-1时刻数据线传送数据。WriteBurstMode当M9=0时,有M0-M2决定的BurstLength适合于读和写两种操作。而当M9=1时,Write只能读取单一的单元,而不能支持块操作。BankActive选择SDRAM某个块中的某一行,读写命令只能在此命令之后对已经选择了的块进行操作,由命令真值表可以知道,此命令将存储单元的块地址(BANKADD)和行地址(ROWADD)进行了设置。ReadandReadwithAutoPrecharge此命令是在BandActive命令之后,开始进行数据的读操作,从真值表中可以知道,在此命令中,设置了存储单元的列地址(COLUMNADD),这样一个存储单元的地址就由这两个命令唯一的确定了下来,而SDRAM的地址线A10由来表明是READ还是READAP(ReadwithAutoprecharge)命令。WriteandWritewithAutoPrecharge此命令同上一条命令相似,表明开始进行数据的写操作,唯一不同是WE信号为低。2SDRAM与DSP的接口设计一般SDRAM和DSP的接口采用FPGA或CPLD等可编程逻辑器件来完成其功能。接口器件主要的任务是:(1)接受DSP的命令信号和地址,因为DSP的数据地址为24位,包含了分行和列地址,SDRAM无法直接读取其地址,所以接口逻辑必须将地址分为行地址和列地址分别送给SDRAM,以确定所要进行操作的具体地址。(2)传送SDRAM的应答信号给DSP控制器,同时控制DSP与SDRAM之间的等待周期。(3)负责产生刷新信号,当检测到SDRAM处于空闲状态时,刷新SDRAM。A0-A23STRBR/W.RDYCSRASCASD0-D63WEBA0/BA1DA0-DA11图1图1为DSP与SDRAM的接口逻辑框图,FPGA负责DSP与SDRAM的接口逻辑,而DSP负责FIFO与SDRAM之间的数据传送控制。实际上,控制器可以用一个状态机来描述,当SDRAM上电以后,必须先对其进行初始化,即先对每一个存储单元进行充电,之后SD-RAM自动进入空闲状态(IDLE),此后SDRAM可进入存取操作或进入自动刷新状态。一旦刷新被执行,控制程序将写模式寄存器,将读/写模式参数写入寄存器。而一旦进入读写操作,控制器发出ACTI-VEROW命令,同时写入行地址。当BANK有效后,通过执行REA-D/WRITE或者EADAP/WRITEAP命令,并根据模式寄存器中的参数进行存储器的存取操作,当操作完成后,自动进入空闲状态。图2描述了SDRAM的状态转移情况。由输入命令驱动的循环由SDRAM自动产生的循环3接口电路的模块设计如图3所示,接口模块可细分为4个子模块,每个子模块完成其特定的功能,其中U1为片选控制模块,地址线的最高两位A23,A22作为接口的片选信号,STRB为DSP的外部选通脉冲信号,当此三个信号同使接口芯片TMS320VC33SDRAM控制器FIFOSDRAMPre-chargeSetModeRegisterAutoRefreshIdleBankActiveWriteRead图2开时有效时,U1产生MATCH信号,FROMDSPU1U4U2U3图3始工作。U2为自动刷新计数器模块,每隔一定时间产生一个刷新请求脉冲,注意SDRAM的刷新周期为64ms,但是计数脉冲不能每64ms才产生一次,因为有可能其产生的刷新请求得不到响应,所以应该设计使计数周期短些,才可以保证SDRAM被刷新。U3为控制模块主要功能是根据不同的输入命令来产生对SDRAM的命令信号COMMAND[2.0],如表4表4CommandNopModeSetAutoRefreshPrechargeBankActiveWriteReadNum000001010011100101110所示。同时对输入命令的优先级进行判断,防止相互之间的冲突,例如,当正在读写时,就不能同时产生刷新命令,而当正在刷新时,读写命令就要加入几个等待周期后在进行操作。U4为模块与SDRAM的接口,主要任务是根据命令COMMAND[2.0]对SDRAM进行控制,同时在数据读写时,对地址线上来的DSP数据读写地址进行分解,分别读出BANK0/1,ROW,COLUMN地址,并将其保存在片内寄存器中,再根据命令分别送入SDRAM的地址线。4结束语此接口控制器设计的难点在于对于命令和时序的控制,比如由于DSP与SDRAM的频率不同,当DSP对SDRAM进行访问时,必须加入等待周期,而如果SDRAM正在刷新时,则需要假如更多的等待周期,因此,要解决的最重要的问题就是把DSP总线的访问时序和SDRAM的访问时序正确的同步起来,以实现正确的数据存储操作。参考文献:[1]ImplementingaSynchronousDRAMControllerinCypressCPLDs.Cypress公司.[2]HYM76V4M635HG(L)T6Series技术文档.HYNIX公司.[3]VirtexSynthesizableHighPerformanceSDRAMController.XILINX公司.STRBMATCHA23-A22RSTCSCLKRASA21-A0CSAWEBA0COMM[2,0]BA1DA0-DA11RSTREFCLKRSTCOMM[2,0]CLKMATCHDQMREFWERDY[4]TMS320VC33DIGITALSIGNALPROCESSOR技术文档.TI公司.