<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 牛人業(yè)話(huà) > 零基礎學(xué)FPGA (二十二) SDR SDRAM(理論篇)

零基礎學(xué)FPGA (二十二) SDR SDRAM(理論篇)

作者: 時(shí)間:2015-08-07 來(lái)源:網(wǎng)絡(luò ) 收藏

  其實(shí)說(shuō)實(shí)話(huà)這一個(gè)月來(lái)也沒(méi)怎么看新知識,大體梳理了一下以前學(xué)過(guò)的知識,回顧了一下SOPC的學(xué)習。對于SOPC的學(xué)習我打算暫時(shí)先放一放,因為前面還有一個(gè)要寫(xiě)的沒(méi)有完成,也是一直以來(lái)無(wú)法寫(xiě)起的一個(gè)題目,就是今天我們要寫(xiě)的的操作。等寫(xiě)完這個(gè),我們再回到SOPC,帶領(lǐng)大家調USB2.0!

本文引用地址:http://dyxdggzs.com/article/278449.htm

  由于本身就是一個(gè)比較復雜的東西,之前小墨在學(xué)這方面東西的時(shí)候感覺(jué)很是吃力,于是那時(shí)候便暫時(shí)放下了,知道年后這段時(shí)間,小墨又重新拾起這個(gè)知識點(diǎn),想要一口氣把它調通了,再往下看其他的東西。學(xué),理論要懂,代碼設計,仿真調試,時(shí)序分析,時(shí)序約束,都很重要。之前由于只是把代碼寫(xiě)好了,對時(shí)序分析和時(shí)序約束這方面的知識還只是空白,所以怎么調都調不通。開(kāi)學(xué)以來(lái),小墨仔仔細細的研究了一下時(shí)序,也看了不少的資料,對時(shí)序也算是有所見(jiàn)解,摸透了倒是不敢說(shuō),至少是懂了那些公式的由來(lái),輸入輸出延時(shí)的計算,相位偏移的計算,以及源同步時(shí)序模型的理解等等,也做了不少的筆記,親手將其數值計算過(guò),然后再將其添加到我的SDRAM工程之中,經(jīng)過(guò)好幾天的調試,穩定不穩定倒是不敢說(shuō),因為同一個(gè)程序換到不同的開(kāi)發(fā)板上,如果不經(jīng)過(guò)重新的時(shí)序約束,是很難跑起來(lái)的,小墨這幾天就親身經(jīng)歷過(guò),同一段代碼在兩塊板子上不能同時(shí)跑,要換約束參數,當然這是受PCB板的布局,SDRAM和的型號的影響,所以這段代碼的穩定性要具體情況具體分析。

  代碼的編寫(xiě)還是參考了啟蒙老師特權老師的代碼,感覺(jué)這段代碼寫(xiě)的很經(jīng)典,借助特權老師推薦的《高手進(jìn)階,終極內存技術(shù)》這一篇文章,可以很好的理解SDRAM的工作原理,我是這樣學(xué)習這段代碼的,首先將《高手進(jìn)階,終極內存技術(shù)》看一遍,當然第一遍不好看懂,然后結合代碼再一遍一遍的去看工作原理,慢慢的就會(huì )明白特權老師為什么要這么處理了,然后再自己親手將這段代碼敲出來(lái),遇到不懂得可以再去參考源代碼,這樣從頭到尾敲完之后,工作原理這一塊大體上就算是熟悉了,然后是仿真調試,這是一個(gè)漫長(cháng)的過(guò)程,要有耐心,再然后就是學(xué)習時(shí)序,親手將約束值算出來(lái),再根據時(shí)序報告進(jìn)行微調,直到有一天看到自己從頭到尾做出來(lái)的工程,能后順利的跑起來(lái),心中便會(huì )產(chǎn)生極大的成就感,那么恭喜你,你在設計方面可以算是一個(gè)小高手了(和剛開(kāi)始學(xué)的人相比)。

  接下來(lái)的文章我打算這么安排,第一篇,也就是這一篇說(shuō)一下理論,即SDRAM的工作原理和一些參數的含義,第二篇文章我要給SDRAM的設計做一個(gè)架構,就是用狀態(tài)機的方式,描述每一個(gè)過(guò)程,給代碼編寫(xiě)做一個(gè)清晰的思路,同時(shí)解讀一下特權老師的代碼和其中比較難懂的設計方法,最后一篇文章我們從靜態(tài)時(shí)序分析寫(xiě)起,一直寫(xiě)到SDRAM的收斂,其中包括建立保持時(shí)間的余量問(wèn)題,輸入輸出的延時(shí)的計算,SDRAM時(shí)鐘相位的計算,以及timequest的使用,時(shí)序報告的查看方法等,大概在一兩周的時(shí)間寫(xiě)完,也希望大家多多支持,你們的支持,更是我前進(jìn)的最好動(dòng)力!

  一、從結構說(shuō)起

  先來(lái)說(shuō)一下SDRAM的結構吧。當然沒(méi)有人家講的那么專(zhuān)業(yè),只說(shuō)說(shuō)我的理解。

  1、P-bank

  SDRAM,也即我們的內存,我們的電腦,手機等設備都離不開(kāi)我們的內存。一個(gè)設備運行速度的快慢,內存起到關(guān)鍵性的作用,就像我們的電腦,開(kāi)機之后一般都是把一些應用程序加載到內存里運行,因為RAM的讀寫(xiě)速度要遠遠大于ROM,而我們的SDRAM,即同步動(dòng)態(tài)隨機存儲器,就是通過(guò)不斷地刷新,充電,防止電容電量的丟失,從而保留住數據。與CPU交換數據,根據CPU位寬的不同,要相應選擇不同的SDRAM芯片,SDRAM芯片的位寬不等,我們用的這片SDRAM是16位位寬,假設我們的CPU是64位的,那么我們要想與之匹配,就必須用到4片這樣的SDRAM,才能構成64位的位寬,那么由這4片SDRAM 構成的芯片集合,我們稱(chēng)之為物理bank,即P-bank,CPU通過(guò)控制SDRAM的片選信號,控制相應的芯片

  2、L-bank

  再往芯片里面看,每一片SDRAM里面,有幾個(gè)存儲陣列,我們開(kāi)發(fā)板上的都是4個(gè)存儲陣列,這樣的存儲陣列,我們稱(chēng)它為邏輯bank,即L-bank。每個(gè)存儲陣列里面有2^12行,2^8列,我們可以通過(guò)控制SDRAM的地址線(xiàn),來(lái)選中相應的行與列,進(jìn)而確定一個(gè)存儲單元,每個(gè)存儲單元里面就是我們的數據了,我們的芯片是16位的,所以我們的存儲單元也就是16位的。

  這樣一來(lái),CPU通過(guò)片選信號選中一片SDRAM,然后訪(fǎng)問(wèn)某一個(gè)L-bank,通過(guò)行列地址確定某一個(gè)存儲單元,將存儲單元里的數據讀出來(lái)送到CPU。這樣看來(lái),芯片的位寬就是我們的存儲單元的位寬,若是一同選中所有SDRAM芯片,那么輸出的也就是16X4=64位的CPU位寬了。

  3、芯片容量 與 內存容量

  我們來(lái)算一下SDRAM的芯片容量,一片SDRAM芯片假設有4個(gè)L-bank,2^12行,2^8列,那么它就含有4 x 2^12 x 2^8個(gè)存儲單元,又因為每個(gè)存儲單元里面有16位數據,因此,我們的芯片容量為 4 x 2^12 x 2^8 x 16 = 64Mbit = 16MB,如果是一個(gè)P-bank里面是4片SDRAM的話(huà),那么我們的內存容量就是4 x 16 = 64MB

  我們再算一下,假如我們的SDRAM的芯片位寬是8位的但是芯片容量不變,即芯片位寬是8位,芯片容量是16MB,那么,要想與64位的CPU匹配,我們需要8片SDRAM,那么我們的內存容量就是8 x 16 = 128MB,由此可見(jiàn),在芯片容量相同的情況下,位寬越小,內存容量越大。這就說(shuō)明了,為什么我們的臺式電腦要用位寬小的芯片,因為臺式電腦空間大,位寬越小,用的芯片越多,內存也就越大,相反,我們的手機就必須用大位寬的芯片,從而節約空間,但是付出了內存容量小的代價(jià),這也說(shuō)明了為什么我們的手機或者筆記本電腦不如臺式機運行速度快的原因,在內存方面差了一大截

  下面是我用畫(huà)圖做的一個(gè)框架,幫助大家理解

  

360桌面截圖20150319145911.jpg

 

  二、工作原理其實(shí)不難

  這部分我們就按照代碼的順序開(kāi)始講起

  1、初始化

  

360桌面截圖20150319150200.jpg

 

  初始化開(kāi)始,SDRAM需要經(jīng)過(guò)一個(gè)200us的穩定延時(shí),這部分在代碼部分直接做一個(gè)計數器就好了,下面來(lái)講一下預充電

  預充電

  官方解釋是 L-Bank關(guān)閉現有工作行,準備打開(kāi)新行的操作就是預充電。也就是說(shuō),我們發(fā)送了一個(gè)行地址,有發(fā)送了一個(gè)列地址,找到了相應的存儲單元之后,如果我們想訪(fǎng)問(wèn)另一個(gè)地址,而這個(gè)地址不在這一行內,那么我們就需要先將這一工作行關(guān)閉,這個(gè)過(guò)程就是預充電,然而剛開(kāi)始我們還沒(méi)有發(fā)送行列地址,只是先做一下初始化,以后等我們要發(fā)送行列地址的時(shí)候,為了手動(dòng)設置預充電麻煩,我們可以告訴SDRAM在每次尋址完之后自動(dòng)進(jìn)行預充電即可

  自刷新

  我們之所以叫DRAM,就是因為它是動(dòng)態(tài)的,就是每隔一段時(shí)間進(jìn)行一次刷新,確保那些沒(méi)有被讀寫(xiě)過(guò)的數據不會(huì )以為時(shí)間長(cháng)導致電容漏電,從而導致數據丟失,因此,每隔一段時(shí)間要對存儲單元進(jìn)行一次自刷新,由于存儲體中電容的數據有效保存期上限是64ms,因此,我們需要每64ms對所有的存儲體進(jìn)行一次刷新,又因為我們有2^12= 4096行,那么我們來(lái)算一下,每刷新一行所要的時(shí)間是64ms/4096 = 15us 也就是說(shuō),我們每15us需要發(fā)送一個(gè)自刷新命令

  模式寄存器配置

  

360桌面截圖20150319151738.jpg

 

  模式寄存器的配置主要還是用于后面的讀寫(xiě)操作的,我們先看上面,是地址總線(xiàn),首先大家不要被他迷惑,我們的地址總線(xiàn)是12位的,行列共用,他前面的兩位bank地址不屬于地址總線(xiàn)范圍,只是在配置的時(shí)候需要用到那兩位,所以會(huì )將其加進(jìn)來(lái),下面來(lái)一一解釋。

  關(guān)于操作模式 : 操作模式可以分為突發(fā)讀,突發(fā)寫(xiě),單一寫(xiě)等,突發(fā)讀就是我們在發(fā)送了行列地址后,找到了我們要的存儲單元地址,對它進(jìn)行讀,如果設置了突發(fā)讀的話(huà),那么我們在讀取第一個(gè)數據之后,如果想讀取這個(gè)存儲單元后面的一個(gè)存儲單元的數據的話(huà),就不必再次發(fā)送行列地址了,他會(huì )自動(dòng)的讀取接下來(lái)的數據,至于讀幾個(gè)存儲單元,就涉及到突發(fā)長(cháng)度,一般是2,4,8,全頁(yè)的方式,全頁(yè)就是將這一行上的數據一連串的全部讀出或寫(xiě)入,同時(shí)還涉及到突發(fā)傳輸方式,分為順序和交錯傳輸,順序傳輸就是依次讀后面的幾個(gè)存儲單元,交錯傳輸就是隔一個(gè)讀一個(gè)。

  關(guān)于潛伏期 : 潛伏期就是我們發(fā)送了行列地址后,數據并不是馬上到達數據總線(xiàn),而是要經(jīng)過(guò)一段潛伏期,一般為2到3個(gè)時(shí)鐘周期,注意潛伏期不是延遲,潛伏期是發(fā)送列地址后數據已經(jīng)有效,只是還沒(méi)有達到一定的高度,或者說(shuō)是信號不夠強,要經(jīng)過(guò)一定的放大才能輸出,所以說(shuō)潛伏期不是延遲

  2、工作狀態(tài)

  初始化結束以后,SDRAM就可以正常工作了,這個(gè)時(shí)候,如果收到讀寫(xiě)信號,并且收到地址,那么SDRAM就會(huì )進(jìn)行相應的尋址,并將數據作相應處理。

  讀狀態(tài)

  上面說(shuō)了,SDRAM的地址是行列共用,也就是說(shuō)行地址和列地址共用那條12位的地址線(xiàn),假設某個(gè)時(shí)間我們要讀一個(gè)數據,那么就先要發(fā)送12位地址線(xiàn),就是行地址,當然也要接著(zhù)發(fā)送的是P-bank的地址,但是這個(gè)時(shí)候還沒(méi)有發(fā)送讀信號,讀信號要和列地址一起發(fā)送,我們稱(chēng)這個(gè)狀態(tài)為行有效(RAS)

  發(fā)送完行地址之后,就要發(fā)送列地址,但是不能馬上發(fā)送,要經(jīng)過(guò)一定的延時(shí),這個(gè)延時(shí)我們叫做行有效到列有效的延時(shí),即Trcd

  經(jīng)過(guò)Trcd之后,我們需要發(fā)送列地址,即列有效(CAS),這樣我們就確定了我們邏輯單元所在的位置了,在發(fā)送列地址的同時(shí),給SDRAM發(fā)送讀命令。有人會(huì )問(wèn),既然地址線(xiàn)是行列共用,那么12位的地址線(xiàn),列地址才占8位,其他的怎么用?沒(méi)錯,列地址是只占了8位,還有第8到11位地址線(xiàn)沒(méi)用,這個(gè)時(shí)候我們就將其補零就好了,湊夠12位地址發(fā)送給SDRAM,但是我們有一位地址很重要就是A10位,A10位置1的話(huà),那么我們每次進(jìn)行完一次讀寫(xiě),SDRAM就會(huì )自動(dòng)預充電,因此,我們一般把地址總線(xiàn)的第8到11位賦值0100,然后與列地址合并,再發(fā)給SDRAM。

  

360桌面截圖20150319155142.jpg

 

  發(fā)送完列地址后,也就是讀命令后,就要進(jìn)入潛伏期Tcl,剛剛說(shuō)了,數據在潛伏期里,要經(jīng)過(guò)一定的放大驅動(dòng),達到一定的高度之后才會(huì )被輸出,這個(gè)放大的過(guò)程是在一個(gè)叫做S-AMP的通道里完成的,每一個(gè)存儲體都對應一個(gè)S-AMP通道 ,因此從數據I/O總線(xiàn)上有數據輸出之前的一個(gè)時(shí)鐘上升沿開(kāi)始,數據即已傳向S-AMP,也就是說(shuō)此時(shí)數據已經(jīng)被觸發(fā),經(jīng)過(guò)一定的驅動(dòng)時(shí)間最終傳向數據總線(xiàn)進(jìn)行輸出,這段時(shí)間稱(chēng)之為tAC。在后面的時(shí)序分析中,我們會(huì )用到這個(gè)參數,即數據在SDRAM芯片中的傳輸時(shí)間Tco,數據輸出到SDRAM數據總線(xiàn)上以后會(huì )有一個(gè)保持時(shí)間Toh,也是我們以后做時(shí)序分析要用到的參數,這兩個(gè)參數告訴我們,數據從有效前的一個(gè)時(shí)鐘周期開(kāi)始算起,最大要經(jīng)過(guò)Tac時(shí)間才會(huì )輸出到數據總線(xiàn),最慢需要Toh時(shí)間因此,在后面的時(shí)序分析中我們要計算,數據在SDRAM芯片的傳輸時(shí)間 Toh < Tco < Tac

  

360桌面截圖20150319160118.jpg

 

  寫(xiě)狀態(tài)

  寫(xiě)狀態(tài)跟讀狀態(tài)有一點(diǎn)不同,就是寫(xiě)狀態(tài)沒(méi)有潛伏期,即行有效之后,等待Trcd后發(fā)送寫(xiě)命令和列地址,數據直接會(huì )寫(xiě)到數據總線(xiàn)上,也就是說(shuō),寫(xiě)數據是零延時(shí)的,但是,即使寫(xiě)數據是零延時(shí)的,但是數據要進(jìn)入SDRAM的存儲體還是需要時(shí)間的,這個(gè)時(shí)間叫做寫(xiě)回延時(shí)Twr,試想,如果SDRAM工作在寫(xiě)回延時(shí)狀態(tài),突然來(lái)了一個(gè)預充電,那么數據是不是就不能正確的被寫(xiě)入了,因此,寫(xiě)回延時(shí)不能和預充電同時(shí)進(jìn)行。

  

360桌面截圖20150319161057.jpg

 

  三、參數總結

  好了,說(shuō)了這么多,是不是感覺(jué)SDRAM的操作并不難,那么我們就來(lái)總結一下之前出現的一些參數吧,這些參數的消化,能夠幫我們更好的理解SDRAM的工作原理

  1、RAS : 行有效

  2、Trcd : 行地址到列地址的延時(shí)時(shí)間,單位是周期數,一般為2到3個(gè)時(shí)鐘周期

  3、CAS : 列有效,同時(shí)發(fā)送讀寫(xiě)命令

  4、 Tcl : 潛伏期,發(fā)生在讀狀態(tài),數據有效到出現在數據總線(xiàn)上的延時(shí),單位為周期數

  5、 Tac : 數據從存儲單元里出來(lái)之后,已經(jīng)進(jìn)入S-AMP通道進(jìn)行驅動(dòng)與放大,到出現在數據總線(xiàn)上的時(shí)間

  6、 Toh : 數據出現在數據總線(xiàn)上,并保持一段時(shí)間

  7、 Trp : 在發(fā)出預充電命令之后,要經(jīng)過(guò)一段時(shí)間才能允許發(fā)送RAS行有效命令打開(kāi)新的工作行

  8 、Twr : 寫(xiě)狀態(tài)時(shí)的寫(xiě)回延時(shí),寫(xiě)入的數據進(jìn)入SDRAM存儲單元的時(shí)間

  那么理論部分就到這里吧,下一篇文章將會(huì )寫(xiě)一下整個(gè)操作SDRAM的架構圖和代碼解析,寫(xiě)了有好幾個(gè)小時(shí),謝謝大家~

fpga相關(guān)文章:fpga是什么




關(guān)鍵詞: FPGA SDRAM

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>