(北京自动测试技术研究所,100088)
摘要:本项目是基于SDRAM(SynchronousDynamicRandomAccessMemory,同步动态随机存储器) 的控制器设计,用于自动测试设备测试向量发生器中,控制SDRAM 和外界进行通信。SDRAM 内存访问采用突发(BURST) 模式,它的原理是,在现有的标准动态存储器中加入同步控制逻辑(状态机)。利用一个单一的系统时钟同步所有的地址数据和控制信号。以状态机为主线,下分三个模块分别完成命令的编码刷新、命令执行、以及数据通路选择等功能。将数据输入,然后再读回。设计good error 信号线,判断读写成败。通过chipscope 详细查看读写过程。
关键词:SDRAM;SDRAM 控制器; 状态机
0 引言
随着电子行业的发展,对自动测试设备的要求越来越高。传统的静态RAM 逐渐的已经不能够满足如今在测试领域中对测试向量的要求。大容量的存储器作为测试向量的缓存已经是测试设备测试向量发生器中必不可少的环节和趋势,也是系统实现中的重点和难点之一。SDRAM( 同步动态随机访问存储器) 具有价格低廉、密度高、数据读写速度快的优点,从而成为数据缓存的首选存储介质。但是SDRAM 存储体结构与静态RAM 有较大差异,其控制时序和机制也较复杂。目前,虽然一些通用微处理器提供了和SDRAM 的透明接口,但其可扩展性和灵活性不够,难以满足现实系统的要求。鉴于以上情况,本文基于Spartan-3E FPGA 进行了SDR SDRAM 控制器的设计与验证工作。
1 SDRAM 工作原理
SDRAM 是高速的动态随机存取存储器,它的同步接口和完全流水线的内部结构使其拥有极大的数据速率,目前SDRAM 时钟频率已达100MHz 以上。另外它们的行、列地址线共用,由行地址选通((CAS)、列地址选通(RAS)信号分时控制。
SDRAM 完整的工作流程需要遵循如下步骤进行:
(1)初始化:
SDRAM 上电后经过几个步骤进入初始化状态。当电源稳定及时钟稳定产生后,经过100us 的等待进入预充电状态。预充电完成以后,器件进入idle 状态。之后,进入两个周期的自动刷新状态,在这之后,就可以进行对工作模式寄存器的配置了。
(2)SDRAM 的内部操作
SDRAM 具有多种工作模式,内部操作是一个复杂的状态机。SDRAM 所有操作都同步于时钟。根据时钟上升沿控制管脚和地址输入的状态,产生多种输入命令:模式寄存器设置命
令,激活命令,预充命令,读命令,写命令,带预充的读命令,带预充的写命令,自动刷新命令,自我刷新命令,突发停命令,空操作命令。根据输入命令,SDRAM 状态在内部状态间转移。内部状态包括模式寄存器设置状态、激活状态、预充状态、写状态、读状态、预充读状态、预充写状态、自动刷新状态及自我刷新状态。
SDRAM 的各种控制操作通过相应的控制管脚不同的组合来完成。如表1 所示。
表1 SDRAM 的指令和对应功能表
SDRAM 的读取过程按以下步骤进行。
①处理器通过地址总线将行地址传输到DRAM 的地址引脚。
② RAS 引脚被激活,这样,行地址被传送到地址锁存器中。
③行地址解码器根据接收到的数据选择相应行。
④ WE 引脚被确定为不被激活,所以DRAM 知道它不会进行写入操作。
⑤处理器通过地址总线将列地址传输到DRAM 的地址引脚。
⑥ CAS 引脚被激活,这样列地址被传送到列地址锁存器中。
⑦ CAS 同样还具有OE 引脚的功能,所以这个时候DOUT 引脚知道需要向外输出数据。
⑧ RAS 和CAS 都失效,这样就可以进行下一个周期的数据操作了。
DRAM 的写入过程和读取过程基本一样。
在 DRAM 读取方式中,当一个读取周期结束后,CAS 和RAS 都必须失效,然后再进行一个回写过程才能进入到下一次的读取周期中。
图1 SDRAM 控制模式寄存器
SDRAM 的工作模式通过LOAD MODE REGISTER 命令对工作模式寄存器进行设置来选择。分别是Reserved( 备用的) Write Burst Mode(WB,写突发模式)、Operation Mode(Op Mode,工作模式)、CAS Latency(CAS 延迟)。
2 SDRAM 控制器设计
在以SDRAM 作为缓存的系统中,使用可编程器件对其进行控制具有很强的灵活性。为了使设计具有模块化和可重复使用的优点,设计了一个简化的SDRAM 接口电路。这样就屏蔽掉了SDRAM 操作的复杂性,而其它逻辑模块可通过接口电路对SDRAM 进行访问。此外,由于整个SDRAM 控制器用Verilog 语言编写,只要对其进行简单的修改就可以满足不同的需求,具有很强的灵活性。
SDR SDRAM 控制器需要完成如下功能:
(1)自动完成对SDR SDRAM 的初始化;
(2)自动实现对SDR SDRAM 的refresh ;
(3)能接受从用户逻辑模块过来的读写SDR SDRAM 的请求,并完成读写操作。
工作时钟要求:Mclk :133MHz
2.1 接口说明
SDR SDRAM 控制器与SDR SDRAM 如图2-1 所示:
图2-1 SDR SDRAM 控制器与SDR SDRAM 接口示意图
SDR SDRAM 控制器与用户逻辑模块之间的接口如图2-接口示意图
2.2 SDR SDRAM 控制器的整体架构
图2-3 SDR SDRAM 控制器的逻辑结构
将SDR SDRAM 控制器分为两层:顶层(sdram),主要实现SDRAM 操作事件的流程控制,包括SDRAM 的初始化,写数据,读数据的控制。底层(sdr_sdram) :主要实现命令的编码,地址的编码,数据通路的选择,及自动刷新。顶层SDRAM 模块控制底层sdr_sdram 模块通过命令的方式来控制:
表2-1 是命令码的含义:
表2-1 SDRAM 控制器指令
2.3 SDRAM 模块的设计
SDRAM 模块的设计围绕图2-4 所示状态机来设计:
sdr_sdram 模块的设计
Sdr_sdram 模块主要实现命令的编码,地址的编码,数据通路的选择,及自动刷新。
根据功能将Sdr_sdram 模块划分为三个模块。CTL_ intf,command_code,data_path。
Ctl_intf 模块主要完成接收SDRAM 模块的命令,并实现命令编码,同时还完成自动刷新的计时工作。Command_code,
主要完成对命令的执行。Data_path,数据通路的选择。
2.4 控制器初始化时序
控制器自动完成初始化功能,当初始化完成后init_ done 输出为高电平。在控制器初始化的过程中会自动加载sdram 工作的参数。以下的参数可以在sdram_test_tb.v 文件中设置burst length :整页方式,CAS latency :3,RCD latency :CAS 到RAS 延时3 个周期,新方式:自动刷新,刷新周期。
2.5 控制器突发写时序
控制器写,需要的信号如表2-2 所示:
表2-2 突发写信号
①等待初始化完成
②当busy 都为低时,表示控制器为空闲状态,可以进行写或读
③ 将r_req 拉高一个周期,同时指定突发写的首地址saddr
④等待r_enable 为高时送入数据
⑤等待r_enable 为低时,写数据停止
⑥等待busy 为低结束突发写模式
2.6 控制器突发读模式
控制器突发读模式所需信号如表2-3 所示:
表2-3 突发读信号
①等待初始化完成
②当busy 都为低时,表示控制器为空闲状态,可以进行写或读
③ 将s_req 拉高一个周期,同时指定突发读的首地址saddr
④等待s_enable 为高时输出数据有效
⑤等待s_enable 为低时,输出数据停止
⑥等待busy 为低结束突发读模式
3 SDRAM 控制器仿真
SDR SDRAM 控制器是一个小的逻辑电路,一般用于其他的系统中的,所以该控制器的测试属于模块(IP)的验证。验证工作分两部分,一部分为在计算机上进行仿真,一部分在FPGA 上进行验证。由于SDR SDRAM 控制器只是一个从属于其他系统的IP,所以验证过程中需要增加一个模块来驱动SDR SDRAM 控制器。将驱动SDR SDRAM 控制器的模块命名为:SDRAM_ DRIVER。
3.1 SDRAM_DRIVER 仿真功能需求
SDRAM_DRIVER 需要完成的功能有:
①使能SDR SDRAM 控制器写数据到SDRAM 中;
②使能SDR SDRAM 控制器从SDRAM 中读取数据;
③对SDR SDRAM 控制器写入SDRAM 的数据和从SDRAM 中读取的数据进行检验,查看是否一致。
3.2 SDRAM_DRIVER 状态机
为了实现上述功能,SDRAM_DRIVER 模块的状态机设计如图3-1 所示:
图3-1 SDRAM_DRIVER 模块的状态机
通过该状态机实现使能SDR SDRAM 控制器对SDR SDRAM 的存取操作。数据检验部分通过状态机外的一些逻辑电路来实现。
3.3 Simulation 方案
Simulation 的工作是在计算机仿真找出逻辑设计的问题,那么在simulation 时的TestBench 包括两部分,第一部分为SDRAM_DRIVER,另一部分为SDR SDRAM 模型。
4 应用
应用在系统时,因系统向SDRAM 控制器的数据写入和读出要求数据的连续性,且由于SDRAM 写入和读出数据无连续性要求,因此二者属于不同的时钟域,需要FIFO 作为输入输出的缓存。在实际应用中,FIFO 接口的作用则是将FIFO 的状态转换变成主状态机的读、写信号。若操作为向SDRAM 写入数据,当FIFO 的写满信号为‘1’时,输入FIFO 通过FIFO 接口向状态机发出写请求指令。若操作为从SDRAM 读出数据,当输出
FIFO 的读空信号为‘1’时,输出FIFO 通过FIFO 接口向主状态机发出读请求指令。以此来完成数据的传输。
5 结语
利用FPGA 完成对SDRAM 控制器的开发,具有移植性好,可靠度高等特点, 可分层,分模块将SDRAM 读写控制实现。最后, 通过开发板,以及chipscope 工具可观看结果。基于FPGA 进行的SDRAM 控制器设计与验证工作,有助于更好的将SDRAM 应用于自动测试设备的测试向量发生器上。FPGA 作为SDRAM 控制器具有最大的灵活性,也能在最大限度上发挥SDRAM 高速度的优势。对其进行研究具有重要的意义。
参考文献
[ 1 ] S D R S D R A M C o n t r o l l e r W h i t e P a p e r . A l t e r a Corporation,August 2002.
http://www.altera.com/literature
[2] MICRON SYNCHRONOUS DRAM Data Sheet. Micron Technology Inc,2002.
http://www.micron.com/dramds
[3] 王艳春, 祖静, 崔春生等. 基于FPGA 的SDRAM 的控制器实现与性能分析[J]. 电子测试,2010,(12):44-46
[4] 高子旺, 顾美康. 一种基于FPGA 的低复杂度SDRAM 控制器实现方法. 计算机与数字工程 2010(1)
[5] 柴若楠, 张景芝. 大容量数据存储器设计与实现. 河北省科学院学报 2011(3).