【原创论文栏目提醒】:网学会员鉴于大家对原创论文十分关注,论文会员在此为大家搜集整理了“论文原创性声明(3) - 其它论文”一文,供大家参考学习
论文原创性声明 本人郑重声明:此处所提交的
论文《基于 FPGA 的 DDR SDRAM 控制器在高速数据采集中的应用》,是本人在导师指导下,在哈尔滨工业大学攻读硕士学位期间进行研究工作所取得的成果。
据本人所知,
论文中除已注明部分外不包含他人已发表或撰写过的研究成果。
对本文的研究工作做出重要贡献的个人和集体,均已在文中以明确方式注明。
本声明的法律结果将完全由本人承担。
作者签字 门亮 日期: 2007 年 4 月 7 日 基于 FPGA 的 DDR SDRAM 控制器在高速数据采集系统中的应用 作品提交人:门亮 指导教师:王立欣 哈尔滨工业大学电气工程及自动化学院, 哈尔滨 150001摘要:实现数据的高速大容量存储是数据采集系统中的一项关键技术。
本设计采用 Altera 公司 Cyclone系列的 FPGA 完成了对 DDR SDRAM 的控制,以状态机来描述对 DDR SDRAM 的各种时序操作,设计了DDR SDRAM 的数据与命令接口。
用控制核来简化对 DDR SDRAM 的操作,并采用自顶至下模块化的设计方法,将控制核嵌入到整个数据采集系统的控制模块中,完成了数据的高速采集、存储及上传。
使用开发软件 Quartus II 中内嵌的逻辑分析仪 SignalTap II 对控制器的工作流程进行了验证和调试。
最终采集到的数据波形表明,完成了对 DDR SDRAM 的突发读写操作,达到了预期设计的目标。
关键字:FPGA;DDR SDRAM;数据采集 The application of DDR SDRAMbased on FPGA in high-speed data acquisition systemAbstract: In Data Acquisition system it is a key technology to store data at high speed and withlarge capacity. This design manages to control DDR SDRAM with FPGA which belongs toCyclone’s series of Altera Company. State machine is used to draw the time diagram of DDRSDRAM and to design its data and command interface. The processes of the high-speed dataacquisition storage and uploading is accomplished by the simplification of DDR SDRAM by thecontroller which is embedded into the whole controlling module of Data Acquisition system withthe top-to-bottom design method. The logic analyzer SignalTap II embedded in the developingsoftware Quartus II is used to test and regulate the controller’s working flow. The tested resultsindicate that the bursting writing and reading operation is preformed successfully by the controllerand the expected goal is reached.Keyword:FPGA DDR SDRAM Data Acquisition0 引言 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, 或 8。
4 数据的存取以一个激活命令 (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)控制器还要产生周期性的刷新命令来维持 DDRSDRAM 内的数据而不丢失。
其控制转换图如图 1 所示。
图 1 DDR SDRAM 控制器状态机 在对 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 潜伏期后从数据总线上读取数据。
STOPAD1 CBE010SDRAM写满 WAIT_READ_A PresentStatelt (ADDR) CBE010 READ_DATA CM D AC K OUT_REQ1 1 READ_DATA_A PRE 时读出数据 CBE010 US PRE_NOP DATAVALID1 ED lt1 0amp IN_REQ1 USEDTO_LD C BE 0 时写入数据 写入-读出 10 RDREQ1 READSTATEREADA_NOP 15 D amp 7ltCount_READlt11 EA t_R un Co READA I READA_NOP 1 READA_TERM CK NATE READA_TERM DA INATE_NOP CM CMDACK1 8 Count_READ 图 2 DDR SDRAM 的读操作状态转换及控制流程图2.2 DDR SDRAM 的写操作流程 在对 DDR SDRAM 的写操作中, 同样以状态机完成其时序控制, 状态转换图如图 3所示。
每发起一次写操作,DDR SDRAM 存储 8 个 16 位的数据,其中控制信号 FULL 由前端数据缓存(FIFO)产生,当前端缓存中存储的数据达到设定的深度时,FULL 被置为高,控制核以 100MHz 的时钟从缓存中读走宽度为 32 位的数据,当缓存内部的读计数器计数到 4 时,FULL 信号置低,控制器的读操作停止。
读出的 4 个 32 位数据经过控制核内部的数据路径模块转换成 DDR SDRAM 接口的 16 位数据格式,在 DDR 控制接口模块产生的时序配合下以双倍速率完成一次突发写。
图 3 DDR SDRAM 的写操作状态转换图3 DDR SDRAM 控制器的 FPGA 实现3.1 控制电路主状态机设计 主状态机用于控制整个数据采集系统的工作流程。
各功能模块的配合,命令的发送,数据的采集、 存储和传输都需要状态机来协调并严格控制时序关系。
其状态转换图如图 4 所示。
控制器上电或复位时进入 IDLE 状态,其中 LA 和 LD 分别为 PCI 局部总线的地址线和数据线,上位机的发送的命令通过 PCI 总线及接口芯片传送到 PCI 局部总线,其中地址线的变化将引起状态机内部的状态转换,状态转换的同时,相应的配置字将出现在数据线上。
配置完参数之后, 转态机进入等待数据状态(WAIT_DATA) 当触发信号满足要求之后(TRG )‘1’,自动进入到保存数据状态(SAVE_DATA) ,在此状态下,控制程序开始进行数据采集。
指定存储深度的数据采集完成后,主状态机自动进入等待读数据状态,在接受到地址线上的状态转换命令后,分别进入读取 A 通道和 B 通道数据的状态。
数据读完之后,上位机发送命令使状态返回到 IDLE 状态。
图 4 控制器主状态机的状态转换图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位的数据,根据用户所选择的数据通道,控制逻辑将相应的数据送入后端缓存中,后端缓存 通过 PCI 局部总线传送到上位机中。
再将数据拆分成 16 位, 从控制流程上看,DATATO_RAM和 TO_LD 中都设置了数据计数器,当 DATATO_RAM 中存储的数据量超过设定值时,读使能 RDEN 有效,控制模块从缓存中一次读走 4 个数据。
后端缓存的控制方式与此类似。
SD_OUT63..0 D_IN31..0 SAMPCLK RDCLK SCLR CLK_IN STOPAD OUT_REQ SA12..0 BA1..0 RDCLK DQS3..0 DQ31..0 FCLK BCLK RAS CAS 图 5 顶层模块 DATA_SAMPLE 的结构图 WE STOPAD_OUT ACLK RESET_ADDR SA12..0 DM7..0 BA1..0 ARESET CMDACK ADDR ADDR24..0 WE LEN3..0 RAS CMD2..0 CAS ddr_sdram CS_N1..0 LEREST RESET_N DOUT63..0 DQM3..0 DATA_IN63..0 DQ31..0 CLK DQS3..0 CLK200 SDRAM 图 6 控制器 SDRAM 的结构图 控制模块 SDRAM 由两部分组成,其结构如图 6 所示。
其中 ADDR 为地址产生模块,给控制核 ddr_sdram 提供数据操作的行地址和列地址。
控制核 ddr_sdram 完成的功能包括将内部状态转换产生的 CMD 控制命令译码成 DDR SDRAM 所能实现的各种操作并实现以双倍的速率与 DDR SDRAM 进行数据交换的接口。
ddr_sdram 的结构框图如图 7 所示。
.