《一种基于FPGA的SDRAM设计与逻辑时序分析.docx》由会员分享,可在线阅读,更多相关《一种基于FPGA的SDRAM设计与逻辑时序分析.docx(7页珍藏版)》请在第一文库网上搜索。
1、一种基于FPGA的SDRAM设计与逻辑时序分析摘要:由于同步动态随机存储器SDRAM内部结构原因导致其控制逻辑比较复杂。现场可编程逻辑门阵列FPGA作为一种半定制电路具有速度快、内部资源丰富、可重构等优点。本文设计了一种基于FPGA的SDRAM控制器,在介绍控制器的逻辑结构的基础上,对FPGA与SDRAM间数据通信进行了时序分析,实现SDRAM带有自动预充电突发读写和非自动预充电整页读写。O引言SDRAM(SynchronousDynamicRandomAccessMemory)具有价格低廉、容量大、速度快等优点,但是SDRAM的控制逋辑相对复豪,对时序要求也比较严格,这就需要有一个专门的控制
2、器。而FPGA(Fie1dProgrammab1eGateArray)具有高速率、多接口、可重构等特点,基于FPGA的SDRAM控制器设计能够大大缩短开发周期,简化设计方法。以往有很多关于SDRAM控制器设计的文章,但很少从FPGA时序分析的角度考虑读写数据的准确性,本文应用FPGA构建SDRAM控制器,并对FPGA与SDRAM构建模型进行时序分析,完成功能仿真和时序仿真,最终通过板级调试实现SDRAM的正常读写。1控制器系统设计1.1SDRAM简介SDRAM的功能管脚可分为控制信号、地址信号和数据信号三类。控制信号主要有片选信号、时钟信号、时钟使能信号、行列地址选择信号、读写信号及数据有效信
3、号。地址信号分为块地址、行地址和列地址,其中行列地址是分时复用的。在行激活命令时锁存行地址,在读写命令时锁存列地址。数据信号为双向信号以减少管脚连接,受数据有效信号控制。SDRAM在正常工作前需要有初始化过程:(D上电后等待200US使电源及时钟信号稳定。(2)对SDRAM所有的BANK进行一次预充电,使器件中的存储阵列处于准备状态。(3)完成至少8次自动刷新操作,使SDRAM内部的刷新及计数器处于正常运行状态。(4)配置工作模式寄存器。SDRAM要周期性进行自动刷新操作以保证内部数据不会丢失,目前公认的行刷新周期为64ms,既可集中刷新也可以分散刷新,SDRAM内部有刷新地址计数器,每完成一
4、次自动刷新计数器会自动加1。SDRAM的读写通过寄存器配置可以实现突发长度及突发类型的设置。突发读写长度为1,2,4,8或整页模式。通过在读写命令有效时设置地址位的第10位可以实现带预充电的突发读写,预充电命令可以用来结束当前活动行的操作。对于正常突发读写在同一行操作时只需在第一次进行行激活,以后的若干次操作中写入列地址即可。若要进行不同行间的切换首先需要预充电关闭当前活动行,然后在执行行激活命令激活下一操作行。而带有预充电的突发读写在每次操作完成后自动进行一次预充电关闭当前活动行,因此在每次读写时首先都要进行行激活然后再发出读写命令。整页读写模式可以实现整页内任意长度的读写,最大长度为一般为
5、256,在每次读写完成后需要发出突发终止命令来结束读写,若要进行下一行操作要发出预充电命令关闭当前行。1.2SDRAM控制器结构系统采用模块化设计,可划分为4个模块,如图1所示,包括系统控制接口模块、命令解析与刷新控制模块、操作信号生成模块和数据通路模块。系统控制接口模块主要由状态机完成初始化工作及生成CMD命令;命令解析与刷新控制模块主要将CMD的命令解析发出命令请求同时根据刷新计数器发出刷新请求;操作信号产生模块由仲裁器仲裁请求生成各种命令信号送给SDRAM器件;数据通路模块控制数据流的传输方向并产生有效地数据输入输出。/J彳/为7.,图1SDWM控制器结构1.3各模块设计1.3.1系统控
6、制接口模块该模块通过状态机实现SDRAM初始化和控制指令产生功能,图2为状态机图。SDRAM初始化过程主要包括:在系统上电后通过计数器产生20OUS等待时间,其次执行一次预充电命令,然后完成8次自刷新操作,最后配置寄存器。powcroWaitDe1ay)*CPrechargeJRefresh图2SDRAM控制器状态:/:图在控制接口模块根据接收外部命令和后端模块响应信号生成CMD命令送入后端模块进行相应操作,表1为CMD信号真值表。表1CMD命令真值表CMD命令解释说明OOObXOP空操作OO1bBEADA10=1:带自动预充电读操作A10=0:非自动预充电读操作O1ObwkeAIOJ=1:带
7、自动预充电写操作A10=0:非自动预充电写操作O11bREF刷新操作IOObPCH预充电操作IOIb1oAC1MR配置SDRAM模式寄存器IIOb1OAD.KEG1加载控制器自动刷新计数器值H11)1oAE1REG2加载控制器配置参,1.3.2命令解析与刷新控制模块此模块主要将CMD命令进行解码送入下一模块中,同一时刻只允许一种命令请求输出。在寄存器配置过程中将控制器参数配置值和刷新计数器值加载到内部寄存器中。此时刷新控制模块开始计数,当达到寄存器内预设值时发出刷新请求,当刷新响应后计数器继续工作,周而复始。1. 3.3操作信号生成模块此模块首先接收命令请求和刷新请求,通过仲裁器根据刷新请求优
8、先级高于命令请求的原则响应请求同时生成SDRAM对应操作信号送到SDRAM中。同时此模块生成数据使能信号OE送到数据通路模块控制数据流向。由于SDRAM地址信号是分时复用的,控制器的地址信号以DR从高到低依次为SDRAM的块地址、行地址、列地址。在此模块中将ADDR中包含的块、行、列地址写入响应的寄存器中,在行激活命令时将块地址、行地址送入SDRAM,在读写命令发出时将列地址送入SDRAMo1. 3.4数据通路模块此模块主要在读写操作期间处理数据路径的操作,OE信号作为三态门使能端,写操作时其为高有效数据DATAXN经过SDRAM双向数据线DQ写入SDRAM;读操作时当OE为低数据从DQ读到F
9、PGA内部DATAOUT数据总线上。DQM为数据掩码,当DQ为16位时,DQM宽度为2,通过设置DQM不同位的值可以实现DQ位高低8位的读写;同时通过在不同的读写时刻设置DQM的值可以实现SDRAM任意地址的读写操作。2仿真验证2. 1功能仿真在控制器设计代码完成后首先要进行功能逻辑仿真来检查设计语法是否正确及设计功能是否完全实现。测试向量的编写一定要具有完备性,对SDRAM的设计工作模式都要考虑进内。图3为控制器的功能仿真。此时突发长度为8,tRCD延迟为3个时钟,tCAS延迟为3个时钟。写命令发出后,在写数据使能信号有效时数据被写进SDRAM;读命令发出后,在读数据使能信号有效时数据从SD
10、RAM中读出。2. 2时序仿真时序仿真是在设计完成综合布局布线后将器件延时及布线延时反标到仿真文件中进行的一种仿真过程,时序仿真更切近器件的实际行为。在时序仿真阶段首先进行时序分析,若信号不满足的时序要求则添加相应时序约束,再次仿真验证以保证所有信号能够正确写入读出。2. 2.1时序分析由于SDRAM的管脚信号都是在时钟信号的上升沿有效,通过SDRAM数据手册得知各个信号建立保持时间。同样从SDRAM进入FPGA的数据信号也必须满足FPGA的建立保持时间。图4为FPGA与SDRAM数据传输模型,其中:Tdin为数据从FPGA的IO口到内部寄存器的传输时间;TOco为数据在FPGA内部寄存器传输
11、时间;Tout为数据从FPGA寄存器输出端到IO口的传输时间;Tpcb为数据在PCB板走线时间;TIco为数据在SDRAM内部寄存器传输时间。图4FPGA与SDRAM数据传2模型假定所有信号在PCB走线延时都是相等的。外部时钟源经过全局时钟网络进入FPGA,同时从FPGA输出时钟信号到SDRAM。通过时钟管理单元的设置可以实现CIk与s_c1k的零相偏移。SDRAM作为FPGA下游器件时,进入SDRAM的数据信号在时钟上升沿需满足建立保持时间。如图5所示,当SSetUP和SHO1d分别满足SDRAM中数据建立和保持时间时,数据将正确写入SDRAM中,若不满足要求时由于TOCo根据特定的器件其值
12、一般是固定的,可以适当约束ToUt时间来达到时序要求。C也Hc。ig图5FPGA输出时序格力SDRAM作为FPGA上游器件时,进入FPGA的数据信号在时钟上升沿也必须满足建立保持时间。若不满足可以通过时序约束数据从FPGA的IO到内部寄存器的传输时间Tdin来达到时间要求。2. 2.2时序仿真与验证图6为SDRAM控制器写操作的时序仿真,从波形中可以看出时钟周期TCIk二10000ps,SSetUP=1763ps,SHo1d=6799pso查阅SDRAM数据手册得知满足建立保持时间。3板级验证在完成仿真后生成上载文件加载到FPGA中,添加测试逻辑使SDRAM中无法观测的数据通过如圆显示确保读写
13、正确。同时可以借助在线逻辑分析仪ChipScope快速检测和定位问题所在。4结论与分析本设计开发环境为ISE12.2,仿真环境为MOde1S迦6.5。FPGA器件为XI1INX-SPRTN3-XC3S400,速度等级为-40SDRAM型号为HYNIX-HY57V641620FTP-6。表2列出了控制器的资源利用率;在读写带宽方面系统主频最高能达到IooMHz,表3为在IOOMHZ主频下各种模式的读写有效带宽。表2控制器FPGA资源利用率资源类型耗用数目占总资源百分比SIiCeS2657%1ITs3955%IOs7744%GC1K189CS力片?。4二衣/j_工_,表3SDRAM控制器有效带宽突
14、发长度写带宽(MBs)读带宽(MBs)2(带自动预充电)25254(带自动预充电)5()428(带自动预充电)1097516(非自动预充电)176176128(非自动预充电)159159256(非自动预充电)67/J,-由于采用带预充电的读写操作在每一次操作完成后SDRAM会自动预充电,相当于关闭当前活动行,在执行下一次操作时即使是同一行操作也得先执行行激活命令,再执行读写命令,这在一定程度上影响了SDRAM的有效带宽。而整页读写每次操作完一次进行一次预充电,随着突发长度的增加,减少了一些命令操作和等待时间,使带宽大大增加。本文按照FPGA的开发流程设计了SDRAM控制器,对FPGA与SDRAM数据接口进行了时序分析,并进行了时序仿真。通过板级验证保证了设计的正确性。此控制器按照参数的设定能够在不同的模式下工作,具有一定通用性。