完结数据的高速大容量存储是数据收集体系中的一项要害技术。本规划选用Altera 公司Cyclone系列的FPGA 完结了对DDR SDRAM 的操控,以状况机来描绘对DDR SDRAM 的各种时序操作,规划了DDR SDRAM 的数据与指令接口。用操控核来简化对DDR SDRAM 的操作,并选用自顶至下模块化的规划办法,将操控核嵌入到整个数据收集体系的操控模块中,完结了数据的高速收集、存储及上传。运用开发软件Quartus II 中内嵌的逻辑剖析仪SignalTap II 对操控器的作业流程进行了验证和调试。终究收集到的数据波形标明,完结了对DDR SDRAM 的突发读写操作,到达了预期规划的方针。
DDR SDRAM 是Double Data Rate SDRAM 的缩写,即双倍速率同步动态随机存储器。
DDR 内存是在SDRAM 内存基础上开展而来的,可以在时钟的上升沿和下降沿各传输一次数据,可以在与SDRAM 相同的总线时钟频率下到达更高的数据传输率。本规划中选用Altera 公司Cyclone 系列型号为EP1C6Q240C8 的FPGA 完结操控器,以Hynix 公司出产的型号为HY5DU121622B(L)TP 的DDR SDRAM 为存储器,完结了对数据的高速大容量存储。
1 DDR SDRAM 的操控原理及存储功用的完结
DDR SDRAM 支撑的常用指令有7 种:空操作(NOP)、激活操作(Active)、突发读(BurstRead)、突发写(Burst Write)、主动改写(Autorefresh)、预充电(Precharge)、形式寄存器装备(Mode Register Set)。一切的操作指令都是通过信号线RAS_N、CAS_N、WE_N 一同操控来完结的。在对DDR SDRAM 进行存取数据操作之前,首要要对其初始化,即设置DDR SDRAM的一般形式寄存器和扩展形式寄存器,确认DDR SDRAM 的作业办法,这些设置包括突发长度、突发类型、CAS 潜伏期和作业形式以及扩展形式寄存器中的对DDR SDRAM 内部推迟确认回路(DLL)的使能与输出驱动才能的设置。
初始化完结之后,DDR SDRAM 便进入正常的作业状况,此刻便可对存储器进行读写和改写。DDR SDRAM 在一对差分时钟的操控下作业。指令(地址和操控信号)在每个时钟的上升沿被触发。跟着数据DQ 一同传送的还包括一个双向的数据选通信号DQS,接纳方通过该信号来接纳数据。DQS 作为选通信号在读周期中由DDR SDRAM 发生,在写周期中由存储器的操控器发生。该选通信号与数据相关,其效果相似于一个独立的时钟,并满意相应的时序要求。因为DDR SDRAM 的数据接口在时钟的两个沿的触发下作业,其数据宽度是存储器数据宽度的一半。为完结数据的大容量存储,规划时选用的是一个操控核一同对两片DDR SDRAM 进行操作,外接数据线的宽度由单片DDR SDRAM 的16 位扩展到32位。
对DDR SDRAM 的读和写操作是依据突发的,即从一个选定的地址单元开端,接连存取已设置长度的地址单元,该长度便是所谓的突发长度。DDR SDRAM 供给的可编程的读或写的突发长度为2,4 或8。数据的存取以一个激活指令(Active)开端,接着便是读(BurstRead)或写(Burst Write)指令。与激活指令一同被触发的地址位用来挑选即将存取的区和页(或行),与读或写指令一同被触发的地址位用来挑选突发存取的开端列单元。读指令被触发后,数据将在1.5~3 个时钟周期之后出现在数据总线上。这个推迟便是所谓的CAS 潜伏期(CAS latency),即从DDR SDRAM 内核读出数据到数据出现在数据总线上所需求的时刻。CAS 潜伏期的巨细与SDRAM 的速度和存储器的时钟频率有关。当要存取一个不同行的地址单元时,需求通过一个预充电(Precharge)操作封闭当前行。
主动改写(Autorefresh)指令用来周期性地改写DDR SDRAM,以坚持其内部的数据不丢掉。2 DDR SDRAM 操控器的规划DDR SDRAM 操控器的功用包括:
(1)初始化DDR SDRAM;
(2)简化DDR SDRAM的读写时序;
(3)将DDR SDRAM 接口的双时钟沿数据转化为单时钟沿数据,使得对DDR SDRAM 的操作相似于一般RAM;
(4)操控器还要发生周期性的改写指令来坚持DDR SDRAM 内的数据而不丢掉。其操控转化图如图1 所示。
在对DDR SDRAM 初始化完结之后,就可进行读、写或其他操作。在履行读(写)指令之前,先要激活即将读(写)的行,之后便可对该行进行突发读(写)。在操控器的规划中,一切的读写指令都是不带预充电的,因而,某一行被激活之后将一向处于激活状况,直到用户发送突发停止指令,此刻操控器将主动发生一个预充电指令来封闭当前行。这样,某一行被激活之后用户便可进行接连的突发读(写)操作,然后节省了每次突发读写所需求的激活时刻,提高了体系的数据吞吐率。
2.1 DDR SDRAM 的读操作流程
通过对DDR SDRAM 的读时序的剖析,将整个读操作进程分解为7 个状况,每一个状况都对应着不同的指令(CMD)值,DDR 操控核通过对CMD 的译码完结对DDR SDRAM的操作。从全体的操控进程来看,读操作流程如图2 所示。其间实线表明的是读操作的操控流程,虚线表明的读操作的状况转化流程。操控流程的完结依赖于操控器内部状况转化发生的操控信号。完结各状况之间切换的操控信号主要有指令应对信号CMDACK,外部操控信号RDREQ 以及程序内部的计数器Count_READ。当体系的主状况机进入到读数据状况时,操控信号CBE=“010”;操控器内部的状况机进入到读状况。读流程中另一个重要的信号为RDREQ,它是由操控器后端的缓存(FIFO)发生的,当缓存中数据容量低于设定值时,信号RDREQ 被置高,读状况由PRE_NOP 进入READA,建议一次读操作,完结8 个数据的传送。程序内部的计数器Count_READ 确保操控核在通过设定的CAS 潜伏期后从数据总线上读取数据。
3 DDR SDRAM 操控器的FPGA完结
3.1 操控电路主状况机规划
主状况机用于操控整个数据收集体系的作业流程。各功用模块的合作,指令的发送,数据的收集、存储和传输都需求状况机来和谐并严格操控时序联系。其状况转化图如图4 所示。操控器上电或复位时进入IDLE 状况,其间LA 和LD 别离为PCI 部分总线的地址线和数据线,上位机的发送的指令通过PCI 总线及接口芯片传送到PCI 部分总线,其间地址线的改变将引起状况机内部的状况转化,状况转化的一同,相应的装备字将出现在数据线上。装备完参数之后,转态机进入等候数据状况(WAIT_DATA),当触发信号满意要求之后(TRG=‘1’),主动进入到保存数据状况(SAVE_DATA),在此状况下,操控程序开端进行数据收集。指定存储深度的数据收集完结后,主状况机主动进入等候读数据状况,在接受到地址线上的状况转化指令后,别离进入读取A 通道和B 通道数据的状况。数据读完之后,上位机发送指令使状况返回到IDLE 状况。
3.2 DDR SDRAM 操控器各模块结构图
体系的顶层文件DATA_SAMPLE 的结构如图5 所示,FPGA 内置的主要有前端缓存模块DATATO_RAM、后端缓存模块TO_LD 和DDR SDRAM 的操控模块SDRAM。从数据流程上看,前端缓存将双路AD 收集到的数据合并成64 位,当缓存中的数据到达设定的存储深度时,操控模块在100MHz 的时钟下将数据读出,并将64 位数据拆分红32 位别离存储到两片DDR SDRAM 中。进入到读状况时,操控模块一同从两片DDR SDRAM 中读出32位的数据,依据用户所挑选的数据通道,操控逻辑将相应的数据送入后端缓存中,后端缓存再将数据拆分红16 位,通过PCI 部分总线传送到上位机中。从操控流程上看,DATATO_RAM和TO_LD 中都设置了数据计数器,当DATATO_RAM 中存储的数据量超越设定值时,读使能RDEN 有用,操控模块从缓存中一次读走4 个数据。后端缓存的操控办法与此相似。
操控模块SDRAM 由两部分组成,其结构如图6 所示。其间ADDR 为地址发生模块,给操控核ddr_sdram 供给数据操作的行地址和列地址。操控核ddr_sdram 完结的功用包括将内部状况转化发生的CMD 操控指令译码成DDR SDRAM 所能完结的各种操作并完结以双倍的速率与DDR SDRAM 进行数据交换的接口。ddr_sdram 的结构框图如图7 所示。
操控核ddr_sdram 选用自顶而下模块化的规划办法,由4 个模块构成:ddr_sdram 顶层模块、操控接口模块、指令模块和数据途径模块。ddr_sdram 顶层模块初始化并把其他三个模块有机地结合起来;操控接口模块接纳CMD 指令和相关存储器地址,对指令进行译码并将恳求发送给指令模块;指令模块接纳从操控接口模块译码后的指令和地址,发生相应的指令给DDR SDRAM;数据途径模块在读指令READA 和写指令WRITEA 期间处理数据交换。操控接口模块包括1 个指令译码器和1 个16 位的改写减计数器及相应的操控电路。 指令译码器译码并将译码后的指令及相应的地址转送给指令模块。减计数器和相应的操控电路用来发生改写指令给指令模块。其值便是由LOAD_REG2 指令写入到REG2 中的值。当计数器减到0 时,操控接口模块就向指令模块发Request 并一向坚持到指令模块发Ack 来响应该恳求。一旦操控接口模块接纳到Ack,减计数器就会从头写入REG2 中的值。指令模块由1 个简略的裁定器、指令发生器及指令时序器组成。它接纳从操控接口模块来的译码后的指令,一同接纳改写操控逻辑发来的改写恳求指令并发生正确的指令给DDR SDRAM。裁定器在操控接口发来的指令和改写操控逻辑发来的改写恳求指令之间进行裁定。改写恳求指令的优先级高于操控接口来的指令。
在裁定器收到指令译码器发来的指令后,该指令就传送到指令发生器,指令时序器即用3 个移位寄存器发生正确的指令时序后发给DDR SDRAM。1 个移位寄存器用来操控激活指令时序,1 个用来操控READA 和WRITEA指令,1 个用来计时操作指令的持续时刻,为裁定器确认最终的恳求操作是否完结。数据途径模块供给了DDR SDRAM 到FPGA 的数据通道。在和DDR SDRAM 接口的一方,数据途径模块将从DDR SDRAM 过来的数据总线宽度翻倍,并在200MHz 的时钟频率接纳DDR SDRAM 在100MHz 时钟的上下沿送出的数据。在和FPGA 接口的一方,数据途径模块将从FPGA 送来的数据宽度折半并以2 倍的速率送给DDR SDRAM。4 体系完结的功用及成果剖析逻辑剖析仪SignalTap II 是Quartus II 软件中集成的一个内部逻辑剖析软件,运用它可以调查本规划的内部信号波形。在体系的软件规划和仿真完结之后,将编译后的文件下载到体系的硬件中,对DDR SDRAM 操控器的状况搬运和读写流程中各个信号进行了实时的收集与显现。
如图8 所示,是操控器读数据时嵌入式逻辑剖析仪收集到的波形图。第9 行到第15行的信号显现的是读流程中各状况之间的切换进程。读指令宣布之后,通过CAS 潜伏期,DDR SDRAM 突发传输8 个数据,并发生选通信号DQS。操控器在读到数据线DQ 上的数据后,将数据宽度加倍,传送到后端缓存中。
写数据的波形图如图9 所示,当主状况机在SAVE_DATA 状况时,DDR SDRAM 从操控器的数据总线上一次存储8 个数据。图中的选通信号HI_LO 是由操控器发生的,在信号的上升沿和下降沿存储器存储数据总线上的数据,存满8 个完结一次写操作。直到前端缓存的读使能信号有用时,操控器从前端缓存读取数据,并建议下一次写操作。
将所规划的操控器用于最高采样速率为10MHz 的数据收集体系中,DDR SDRAM 作业的差分时钟为100MHz,容量为32MByte,体系运转功能杰出,可以较好的完结DDR SDRAM与AD 转化模块,PCI 总线接口模块之间的数据交换。图10 为数据收集卡对10kHz 正弦信号采样的波形。
5 特征描绘
(1) 本规划在深化了解DDR SDRAM 作业原理的基础上,确认了DDR SDRAM 操控器的总体方案和模块化规划办法。
(2) 用FPGA完结的DDR SDRAM的操控器能在很高的速度下完结数据的读写和杂乱的操控操作,作业牢靠。
(3) 该操控器处理了DDR SDRAM 用于高速数据收集的要害技术问题,对添加数据收集体系的缓存容量具有重要意义。