您的位置 首页 开关

零根底学FPGA (二十二) SDR SDRAM(理论篇)

其实说实话这一个月来也没怎么看新知识,大体梳理了一下以前学过的知识,回顾了一下SOPC的学习。对于SOPC的学习我打算暂时先放一放,因为前面还有一个要写的没有完成,也是一直以来无法写起的一个题目,

  其实说实话这一个月来也没怎样看新常识,大体梳理了一下曾经学过的常识,回忆了一下SOPC的学习。关于SOPC的学习我计划暂时先放一放,由于前面还有一个要写的没有完结,也是一向以来无法写起的一个标题,便是今日咱们要写的SDRAM的操作。等写完这个,咱们再回到SOPC,带领咱们调USB2.0!

  由于SDRAM自身便是一个比较复杂的东西,之前小墨在学这方面东西的时分感觉很是费劲,所以那时分便暂时放下了,知道年后这段时刻,小墨又从头捡起这个常识点,想要一口气把它调通了,再往下看其他的东西。学SDRAM,理论要懂,代码规划,仿真调试,时序剖析,时序束缚,都很重要。之前由于仅仅把代码写好了,对时序剖析和时序束缚这方面的常识还仅仅空白,所以怎样调都调不通。开学以来,小墨仔仔细细的研讨了一下时序,也看了不少的材料,对时序也算是有所见地,摸透了却是不敢说,至少是懂了那些公式的由来,输入输出延时的核算,相位偏移的核算,以及源同步时序模型的了解等等,也做了不少的笔记,亲手将其数值核算过,然后再将其增加到我的SDRAM工程之中,通过好几天的调试,安稳不安稳却是不敢说,由于同一个程序换到不同的开发板上,假定不通过从头的时序束缚,是很难跑起来的,小墨这几天就亲自经历过,同一段代码在两块板子上不能一同跑,要换束缚参数,当然这是受PCB板的布局,SDRAM和FPGA的类型的影响,所以这段代码的安稳性要具体情况具体剖析。

  代码的编写仍是参阅了启蒙教师特权教师的代码,感觉这段代码写的很经典,凭借特权教师引荐的《高手进阶,终极内存技能》这一篇文章,可以很好的了解SDRAM的作业原理,我是这样学习这段代码的,首要将《高手进阶,终极内存技能》看一遍,当然第一遍欠好看懂,然后结合代码再一遍一遍的去看作业原理,渐渐的就会了解特权教师为什么要这么处理了,然后再自己亲手将这段代码敲出来,遇到不懂得可以再去参阅源代码,这样自始至终敲完之后,作业原理这一块大体上就算是了解了,然后是仿真调试,这是一个绵长的进程,要有耐性,再然后便是学习时序,亲手将束缚值算出来,再依据时序陈述进行微调,直到有一天看到自己自始至终做出来的工程,能后顺畅的跑起来,心中便会产生极大的成就感,那么祝贺你,你在FPGA规划方面可以算是一个小高手了(和刚开端学的人比较)。

  接下来的文章我计划这么组织,第一篇,也便是这一篇说一下理论,即SDRAM的作业原理和一些参数的意义,第二篇文章我要给SDRAM的规划做一个架构,便是用状况机的办法,描绘每一个进程,给代码编写做一个明晰的思路,一同解读一下特权教师的代码和其间比较难明的规划办法,终究一篇文章咱们从静态时序剖析写起,一向写到SDRAM的收敛,其间包含树立坚持时刻的余量问题,输入输出的延时的核算,SDRAM时钟相位的核算,以及timequest的运用,时序陈述的检查办法等,大概在一两周的时刻写完,也期望咱们多多支撑,你们的支撑,更是我行进的最好动力!

  一、从结构说起

  先来说一下SDRAM的结构吧。当然没有人家讲的那么专业,只说说我的了解。

  1、P-bank

  SDRAM,也即咱们的内存,咱们的电脑,手机等设备都离不开咱们的内存。一个设备运转速度的快慢,内存起到关键性的效果,就像咱们的电脑,开机之后一般都是把一些应用程序加载到内存里运转,由于RAM的读写速度要远远大于ROM,而咱们的SDRAM,即同步动态随机存储器,便是通过不断地改写,充电,避免电容电量的丢掉,然后保留住数据。与CPU交流数据,依据CPU位宽的不同,要相应挑选不同的SDRAM芯片,SDRAM芯片的位宽不等,咱们用的这片SDRAM是16位位宽,假定咱们的CPU是64位的,那么咱们要想与之匹配,就必须用到4片这样的SDRAM,才干构成64位的位宽,那么由这4片SDRAM 构成的芯片调集,咱们称之为物理bank,即P-bank,CPU通过操控SDRAM的片选信号,操控相应的芯片

  2、L-bank

  再往芯片里边看,每一片SDRAM里边,有几个存储阵列,咱们开发板上的都是4个存储阵列,这样的存储阵列,咱们称它为逻辑bank,即L-bank。每个存储阵列里边有2^12行,2^8列,咱们可以通过操控SDRAM的地址线,来选中相应的行与列,然后确认一个存储单元,每个存储单元里边便是咱们的数据了,咱们的芯片是16位的,所以咱们的存储单元也便是16位的。

  这样一来,CPU通过片选信号选中一片SDRAM,然后拜访某一个L-bank,通过队伍地址确认某一个存储单元,将存储单元里的数据读出来送到CPU。这样看来,芯片的位宽便是咱们的存储单元的位宽,若是一同选中一切SDRAM芯片,那么输出的也便是16X4=64位的CPU位宽了。

  3、芯片容量 与 内存容量

  咱们来算一下SDRAM的芯片容量,一片SDRAM芯片假定有4个L-bank,2^12行,2^8列,那么它就含有4 x 2^12 x 2^8个存储单元,又由于每个存储单元里边有16位数据,因而,咱们的芯片容量为 4 x 2^12 x 2^8 x 16 = 64Mbit = 16MB,假定是一个P-bank里边是4片SDRAM的话,那么咱们的内存容量便是4 x 16 = 64MB

  咱们再算一下,假定咱们的SDRAM的芯片位宽是8位的可是芯片容量不变,即芯片位宽是8位,芯片容量是16MB,那么,要想与64位的CPU匹配,咱们需求8片SDRAM,那么咱们的内存容量便是8 x 16 = 128MB,由此可见,在芯片容量相同的情况下,位宽越小,内存容量越大。这就说明晰,为什么咱们的台式电脑要用位宽小的芯片,由于台式电脑空间大,位宽越小,用的芯片越多,内存也就越大,相反,咱们的手机就必须用大位宽的芯片,然后节省空间,可是付出了内存容量小的价值,这也说明晰为什么咱们的手机或许笔记本电脑不如台式机运转速度快的原因,在内存方面差了一大截

  下面是我用画图做的一个结构,协助咱们了解

  

360桌面截图20150319145911.jpg

 

  二、作业原理其实不难

  这部分咱们就依照代码的次序开端讲起

  1、初始化

  

360桌面截图20150319150200.jpg

 

  初始化开端,SDRAM需求通过一个200us的安稳延时,这部分在代码部分直接做一个计数器就好了,下面来讲一下预充电

  预充电

  官方解说是 L-Bank封闭现有作业行,预备翻开新行的操作便是预充电。也便是说,咱们发送了一个行地址,有发送了一个列地址,找到了相应的存储单元之后,假定咱们想拜访另一个地址,而这个地址不在这一行内,那么咱们就需求先将这一作业行封闭,这个进程便是预充电,可是刚开端咱们还没有发送队伍地址,仅仅先做一下初始化,今后等咱们要发送队伍地址的时分,为了手动设置预充电费事,咱们可以告知SDRAM在每次寻址完之后主动进行预充电即可

  自改写

  咱们之所以叫DRAM,便是由于它是动态的,便是每隔一段时刻进行一次改写,保证那些没有被读写过的数据不会认为时刻长导致电容漏电,然后导致数据丢掉,因而,每隔一段时刻要对存储单元进行一次自改写,由于存储体中电容的数据有用保存期上限是64ms,因而,咱们需求每64ms对一切的存储体进行一次改写,又由于咱们有2^12= 4096行,那么咱们来算一下,每改写一行所要的时刻是64ms/4096 = 15us 也便是说,咱们每15us需求发送一个自改写指令

  形式寄存器装备

  

360桌面截图20150319151738.jpg

 

  形式寄存器的装备首要仍是用于后边的读写操作的,咱们先看上面,是地址总线,首要咱们不要被他利诱,咱们的地址总线是12位的,队伍共用,他前面的两位bank地址不属于地址总线规模,仅仅在装备的时分需求用到那两位,所以会将其加进来,下面来逐个解说。

  关于操作形式 : 操作形式可以分为突发读,突发写,单一写等,突发读便是咱们在发送了队伍地址后,找到了咱们要的存储单元地址,对它进行读,假定设置了突发读的话,那么咱们在读取第一个数据之后,假定想读取这个存储单元后边的一个存储单元的数据的话,就不用再次发送队伍地址了,他会主动的读取接下来的数据,至于读几个存储单元,就涉及到突发长度,一般是2,4,8,全页的办法,全页便是将这一行上的数据一连串的悉数读出或写入,一同还涉及到突发传输办法,分为次序和交织传输,次序传输便是顺次读后边的几个存储单元,交织传输便是隔一个读一个。

  关于潜伏期 : 潜伏期便是咱们发送了队伍地址后,数据并不是立刻抵达数据总线,而是要通过一段潜伏期,一般为2到3个时钟周期,留意潜伏期不是推迟,潜伏期是发送列地址后数据现已有用,仅仅还没有到达必定的高度,或许说是信号不行强,要通过必定的扩大才干输出,所以说潜伏期不是推迟

  2、作业状况

  初始化完毕今后,SDRAM就可以正常作业了,这个时分,假定收到读写信号,而且收到地址,那么SDRAM就会进行相应的寻址,并将数据作相应处理。

  读状况

  上面说了,SDRAM的地址是队伍共用,也便是说行地址和列地址共用那条12位的地址线,假定某个时刻咱们要读一个数据,那么就先要发送12位地址线,便是行地址,当然也要接着发送的是P-bank的地址,可是这个时分还没有发送读信号,读信号要和列地址一同发送,咱们称这个状况为行有用(RAS)

  发送完行地址之后,就要发送列地址,可是不能立刻发送,要通过必定的延时,这个延时咱们叫做行有用到列有用的延时,即Trcd

  通过Trcd之后,咱们需求发送列地址,即列有用(CAS),这样咱们就确认了咱们逻辑单元地点的方位了,在发送列地址的一同,给SDRAM发送读指令。有人会问,已然地址线是队伍共用,那么12位的地址线,列地址才占8位,其他的怎样用?没错,列地址是只占了8位,还有第8到11位地址线没用,这个时分咱们就将其补零就好了,凑够12位地址发送给SDRAM,可是咱们有一位地址很重要便是A10位,A10方位1的话,那么咱们每次进行完一次读写,SDRAM就会主动预充电,因而,咱们一般把地址总线的第8到11位赋值0100,然后与列地址兼并,再发给SDRAM。

  

360桌面截图20150319155142.jpg

 

  发送完列地址后,也便是读指令后,就要进入潜伏期Tcl,刚刚说了,数据在潜伏期里,要通过必定的扩大驱动,到达必定的高度之后才会被输出,这个扩大的进程是在一个叫做S-AMP的通道里完结的,每一个存储体都对应一个S-AMP通道 ,因而从数据I/O总线上有数据输出之前的一个时钟上升沿开端,数据即已传向S-AMP,也便是说此刻数据现已被触发,通过必定的驱动时刻终究传向数据总线进行输出,这段时刻称之为tAC。在后边的时序剖析中,咱们会用到这个参数,即数据在SDRAM芯片中的传输时刻Tco,数据输出到SDRAM数据总线上今后会有一个坚持时刻Toh,也是咱们今后做时序剖析要用到的参数,这两个参数告知咱们,数据从有用前的一个时钟周期开端算起,最大体通过Tac时刻才会输出到数据总线,最慢需求Toh时刻因而,在后边的时序剖析中咱们要核算,数据在SDRAM芯片的传输时刻 Toh < Tco < Tac

  

360桌面截图20150319160118.jpg

 

  写状况

  写状况跟读状况有一点不同,便是写状况没有潜伏期,即行有用之后,等候Trcd后发送写指令和列地址,数据直接会写到数据总线上,也便是说,写数据是零延时的,可是,即便写数据是零延时的,可是数据要进入SDRAM的存储体仍是需求时刻的,这个时刻叫做写回延时Twr,试想,假定SDRAM作业在写回延时状况,忽然来了一个预充电,那么数据是不是就不能正确的被写入了,因而,写回延时不能和预充电一同进行。

  

360桌面截图20150319161057.jpg

 

  三、参数总结

  好了,说了这么多,是不是感觉SDRAM的操作并不难,那么咱们就来总结一下之前呈现的一些参数吧,这些参数的消化,可以帮咱们更好的了解SDRAM的作业原理

  1、RAS : 行有用

  2、Trcd : 行地址到列地址的延时时刻,单位是周期数,一般为2到3个时钟周期

  3、CAS : 列有用,一同发送读写指令

  4、 Tcl : 潜伏期,产生在读状况,数据有用到呈现在数据总线上的延时,单位为周期数

  5、 Tac : 数据从存储单元里出来之后,现已进入S-AMP通道进行驱动与扩大,到呈现在数据总线上的时刻

  6、 Toh : 数据呈现在数据总线上,并坚持一段时刻

  7、 Trp : 在宣布预充电指令之后,要通过一段时刻才干答应发送RAS行有用指令翻开新的作业行

  8 、Twr : 写状况时的写回延时,写入的数据进入SDRAM存储单元的时刻

  那么理论部分就到这儿吧,下一篇文章将会写一下整个操作SDRAM的架构图和代码解析,写了有好几个小时,谢谢咱们~

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/116167.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部