EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
转——最近重新看了一下SDRAM的编程,有些体会写一下 5 o+ J0 Q* p3 F: Z" P- f3 U
" j- r7 c6 I. W$ l" }之前,有人说过,如果可以单独将SDRAM写出来,基本可以确定算 FPGA编程已经是初级水平了。我不讨论这个话到底对不对,但是之前一直觉得SDRAM用FPGA驱起来很难,后来也没有坚持,就放了很长时间。最近有在朋友那儿看到AX309这块板子(我不是做广告,如果有比较关心的,自己晚上搜搜)上相关历程都会涉及到这个东西,所以就想参考别人的历程,将自己的经验写一下。
1 M! G$ j2 u* v& n9 _5 ~, n# I, Z如果有不对的地方,还请指正。% Z) j0 t# B# ?) Q7 Q/ ` I
& F6 \. K9 a3 ~# oSDRAM数据手册,网上可以找到的就是镁光和韩国的两个企业所提供的。韩国人提供的材料很简单,我也没时间去他们的官网或者别的途径获取更详细的资料。 . Y) h" y b0 v" G% D! a3 Z) L+ u
所以就看镁光的芯片,因为他们的datasheet相对比较全。 - Z- U& X0 E0 T0 I, Q4 s" b
SDRAM一般分为两个阶段,初始化阶段和正常工作阶段。先说初始化阶段,从网上搜到的资料显示初始化过程如下: ; x; j: d! d3 b# q& a. Q) o
; x5 L7 T6 p4 D( t+ y/ i* \( r/ V; t$ B+ `' x* ]2 a: s6 w( l
) a" B' J- ]+ j3 c
2 u& f* y) V1 O% S( _2 r) U) ~& p: }
根据镁光提供的初始化时序图和上图有两点差异:
6 ?9 p9 }6 {/ @: Q6 P. Q1、输入稳定期为100us;
6 H# p* }' u. L% x$ l2、第3个状态是2个周期。
+ T4 ]# b+ g- t- C具体如下:/ x+ a7 r1 [& }6 S$ {6 U0 v; W
* J9 p2 _- j! J4 d
( n/ e0 a3 Q* N4 I; q) T2 w5 @先以镁光的时序图为准。
2 |# f9 h5 x# i+ u1 ZSDRAM有一个时钟范围的要求,外部时钟为50M,通过FPGA内部倍频,可以输出100Mhz的时钟。一个时钟周期为10ns。
% U% b" U& f1 ]. a4 i# a在看这个时序图时,有3点应该注意的:
9 Q+ E$ F% v. A ` E; J1、状态过程是什么样的。我见到的所有关于Verilog的书上,都会讲到状态机,这个相当于是设计的主心骨,最起码在可综合的设计中是主心骨。
3 N8 H+ J7 I! v# Z2、对应的控制字的变化,如CMD、DQM、ADDR、BA。他在每个状态不通时钟周期的值是什么。 2 d* }$ l7 k1 R+ \ j% }" x: r2 U
3、DQ的值。
! J1 v4 T/ k y/ P, S
6 z2 H" {8 i1 H0 r3 u一般的设计将上面3个点分3个文件实现,这个就会涉及到共同的参数的问题。为了解决这个问题,可以将多个文件中用到的相同参数均编写在一个文件中,然后通过 `include调用这个文件。例如: V8 H3 v& E2 T+ B1 W( n
parameter TRP_CLK = 9'd4,//1, //TRP=18ns预充电有效周期
+ M9 w/ B1 d, Z$ d T RFC_CLK = 9'd6,//3, //TRC=60ns自动预刷新周期
- {" i, X; ] t TMRD_CLK = 9'd6,//2, //模式寄存器设置等待时钟周期
9 ?) y8 f6 _9 N) p$ z R$ @" K. v/ p TRCD_CLK = 9'd2,//1, //TRCD=18ns行选通周期
, [* @" |3 j3 q! |
3 c0 \; C. s6 N
. R" v! `" g' w, M% F6 @
* i* b$ N$ I& E8 z# E- d后边的等写的差不多了再续! & ~ E' ] k, G: i
|