<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          關 閉

          新聞中心

          EEPW首頁 > 工控自動化 > 設計應用 > 基于FPGA的DDR SDRAM控制器在高速數(shù)據(jù)采集系統(tǒng)中的應用

          基于FPGA的DDR SDRAM控制器在高速數(shù)據(jù)采集系統(tǒng)中的應用

          作者:哈爾濱工業(yè)大學電氣工程及自動化學院 門亮 王立欣 時間:2008-04-17 來源:電子產(chǎn)品世界 收藏

            引言

          本文引用地址:http://www.ex-cimer.com/article/81674.htm

            是Double Data Rate SDRAM的縮寫,即雙倍速率同步動態(tài)隨機存儲器。DDR內(nèi)存是在SDRAM內(nèi)存基礎上發(fā)展而來的,能夠在時鐘的上升沿和下降沿各傳輸一次數(shù)據(jù),可以在與SDRAM相同的總線時鐘頻率下達到更高的數(shù)據(jù)傳輸率。

            本設計中采用Altera公司Cyclone系列型號為EP1C6Q240C8的實現(xiàn)控制器,以Hynix公司生產(chǎn)的型號為HY5DU121622B(L)TP的為存儲器,完成了對數(shù)據(jù)的高速大容量存儲。

            的控制原理及存儲功能的實現(xiàn)

            DDR SDRAM支持的常用命令有7種:空操作(NOP)、激活操作(Active)、突發(fā)讀(Burst Read)、突發(fā)寫(Burst Write)、自動刷新(Autorefresh)、預充電(Precharge)、模式寄存器配置(Mode Register Set)。所有的操作命令都是通過信號線RAS_N、CAS_N、WE_N共同控制來實現(xiàn)的。

            在對DDR SDRAM進行存取數(shù)據(jù)操作之前,首先要對其初始化,即設置DDR SDRAM的普通模式寄存器和擴展模式寄存器,確定DDR SDRAM的工作方式,這些設置包括突發(fā)長度、突發(fā)類型、CAS潛伏期和工作模式以及擴展模式寄存器中的對DDR SDRAM內(nèi)部延遲鎖定回路(DLL)的使能與輸出驅動能力的設置。

            初始化完成之后,DDR SDRAM便進入正常的工作狀態(tài),此時便可對存儲器進行讀寫和刷新。DDR SDRAM在一對差分時鐘的控制下工作。命令(地址和控制信號)在每個時鐘的上升沿被觸發(fā)。隨著數(shù)據(jù)DQ一起傳送的還包括一個雙向的數(shù)據(jù)選通信號DQS,接收方通過該信號來接收數(shù)據(jù)。DQS作為選通信號在讀周期中由DDR SDRAM產(chǎn)生,在寫周期中由存儲器的控制器產(chǎn)生。該選通信號與數(shù)據(jù)相關,其作用類似于一個獨立的時鐘,并滿足相應的時序要求。由于DDR SDRAM的數(shù)據(jù)接口在時鐘的兩個沿的觸發(fā)下工作,其數(shù)據(jù)寬度是存儲器數(shù)據(jù)寬度的一半。為實現(xiàn)數(shù)據(jù)的大容量存儲,設計時采用的是一個控制核同時對兩片DDR SDRAM進行操作,外接數(shù)據(jù)線的寬度由單片DDR SDRAM的16 位擴展到32位。

            對DDR SDRAM的讀和寫操作是基于突發(fā)的,即從一個選定的地址單元開始,連續(xù)存取已設置長度的地址單元,該長度就是所謂的突發(fā)長度。DDR SDRAM提供的可編程的讀或寫的突發(fā)長度為2,4或8。數(shù)據(jù)的存取以一個激活命令(Active)開始,接著便是讀(Burst Read)或寫(Burst Write)命令。與激活命令一起被觸發(fā)的地址位用來選擇將要存取的區(qū)和頁(或行),與讀或寫命令一起被觸發(fā)的地址位用來選擇突發(fā)存取的起始列單元。讀命令被觸發(fā)后,數(shù)據(jù)將在1.5~3個時鐘周期之后出現(xiàn)在數(shù)據(jù)總線上。這個延遲就是所謂的CAS潛伏期(CAS latency),即從DDR SDRAM內(nèi)核讀出數(shù)據(jù)到數(shù)據(jù)出現(xiàn)在數(shù)據(jù)總線上所需要的時間。CAS潛伏期的大小與SDRAM的速度和存儲器的時鐘頻率有關。當要存取一個不同行的地址單元時,需要通過一個預充電(Precharge)操作關閉當前行。自動刷新(Autorefresh)命令用來周期性地刷新DDR SDRAM,以保持其內(nèi)部的數(shù)據(jù)不丟失。

            DDR SDRAM控制器的設計

            DDR SDRAM控制器的功能包括:(1)初始化DDR SDRAM;(2)簡化DDR SDRAM的讀寫時序;(3)將DDR SDRAM接口的雙時鐘沿數(shù)據(jù)轉換為單時鐘沿數(shù)據(jù),使得對DDR SDRAM的操作類似于普通RAM;(4)控制器還要產(chǎn)生周期性的刷新命令來維持DDR SDRAM內(nèi)的數(shù)據(jù)而不丟失。其控制轉換圖如圖1所示。

            在對DDR SDRAM初始化完成之后,就可進行讀、寫或其他操作。在執(zhí)行讀(寫)命令之前,先要激活將要讀(寫)的行,之后便可對該行進行突發(fā)讀(寫)。在控制器的設計中,所有的讀寫命令都是不帶預充電的,因此,某一行被激活之后將一直處于激活狀態(tài),直到用戶發(fā)送突發(fā)終止命令,此時控制器將自動產(chǎn)生一個預充電命令來關閉當前行。這樣,某一行被激活之后用戶便可進行連續(xù)的突發(fā)讀(寫)操作,從而節(jié)省了每次突發(fā)讀寫所需要的激活時間,提高了系統(tǒng)的數(shù)據(jù)吞吐率。

            DDR SDRAM的讀操作流程

            通過對DDR SDRAM的讀時序的分析,將整個讀操作過程分解為7個狀態(tài),每一個狀態(tài)都對應著不同的命令(CMD)值,DDR控制核通過對CMD的譯碼完成對DDR SDRAM的操作。從整體的控制過程來看,讀操作流程如圖2所示。其中實線表示的是讀操作的控制流程,虛線表示的讀操作的狀態(tài)轉換流程??刂屏鞒痰膶崿F(xiàn)依賴于控制器內(nèi)部狀態(tài)轉換產(chǎn)生的控制信號。實現(xiàn)各狀態(tài)之間切換的控制信號主要有命令應答信號CMDACK,外部控制信號RDREQ以及程序內(nèi)部的計數(shù)器Count_READ。當系統(tǒng)的主狀態(tài)機進入到讀數(shù)據(jù)狀態(tài)時,控制信號CBE=“010”;控制器內(nèi)部的狀態(tài)機進入到讀狀態(tài)。讀流程中另一個重要的信號為RDREQ,它是由控制器后端的緩存(FIFO)產(chǎn)生的,當緩存中數(shù)據(jù)容量低于設定值時,信號RDREQ被置高,讀狀態(tài)由PRE_NOP進入READA,發(fā)起一次讀操作,完成8個數(shù)據(jù)的傳送。程序內(nèi)部的計數(shù)器Count_READ保證控制核在經(jīng)過設定的CAS潛伏期后從數(shù)據(jù)總線上讀取數(shù)據(jù)。

            DDR SDRAM的寫操作流程

            在對DDR SDRAM的寫操作中,同樣以狀態(tài)機完成其時序控制,狀態(tài)轉換圖如圖3所示。

            每發(fā)起一次寫操作,DDR SDRAM存儲8 個16位的數(shù)據(jù),其中控制信號FULL由前端數(shù)據(jù)緩存(FIFO)產(chǎn)生,當前端緩存中存儲的數(shù)據(jù)達到設定的深度時,F(xiàn)ULL被置為高,控制核以100MHz的時鐘從緩存中讀取寬度為32位的數(shù)據(jù),當緩存內(nèi)部的讀計數(shù)器計數(shù)到4時,F(xiàn)ULL信號置低,控制器的讀操作停止。讀出的4個32位數(shù)據(jù)經(jīng)過控制核內(nèi)部的數(shù)據(jù)路徑模塊轉換成DDR SDRAM接口的16位數(shù)據(jù)格式,在DDR控制接口模塊產(chǎn)生的時序配合下以雙倍速率完成一次突發(fā)寫。

            DDR SDRAM控制器的實現(xiàn)

            控制電路主狀態(tài)機設計

            主狀態(tài)機用于控制整個系統(tǒng)的工作流程。各功能模塊的配合,命令的發(fā)送,數(shù)據(jù)的采集、存儲和傳輸都需要狀態(tài)機來協(xié)調(diào)并嚴格控制時序關系。其狀態(tài)轉換圖如圖4所示。

            控制器上電或復位時進入IDLE 狀態(tài),其中LA和LD分別為PCI局部總線的地址線和數(shù)據(jù)線,上位機的發(fā)送的命令通過PCI總線及接口芯片傳送到PCI局部總線,其中地址線的變化將引起狀態(tài)機內(nèi)部的狀態(tài)轉換,狀態(tài)轉換的同時,相應的配置字將出現(xiàn)在數(shù)據(jù)線上。配置完參數(shù)之后,轉態(tài)機進入等待數(shù)據(jù)狀態(tài)(WAIT_DATA),當觸發(fā)信號滿足要求之后(TRG=‘1’),自動進入到保存數(shù)據(jù)狀態(tài)(SAVE_DATA),在此狀態(tài)下,控制程序開始進行。指定存儲深度的完成后,主狀態(tài)機自動進入等待讀數(shù)據(jù)狀態(tài),在接受到地址線上的狀態(tài)轉換命令后,分別進入讀取A通道和B通道數(shù)據(jù)的狀態(tài)。數(shù)據(jù)讀完之后,上位機發(fā)送命令使狀態(tài)返回到IDLE狀態(tài)。

            DDR SDRAM控制器各模塊結構圖

            系統(tǒng)的頂層文件DATA_SAMPLE的結構如圖5所示,內(nèi)置的主要有前端緩存模塊DATATO_RAM、后端緩存模塊TO_LD和DDR SDRAM的控制模塊SDRAM。從數(shù)據(jù)流程上看,前端緩存將雙路AD采集到的數(shù)據(jù)合并成64位,當緩存中的數(shù)據(jù)達到設定的存儲深度時,控制模塊在100MHz的時鐘下將數(shù)據(jù)讀出,并將64位數(shù)據(jù)拆分成32位分別存儲到兩片DDR SDRAM中。進入到讀狀態(tài)時,控制模塊同時從兩片DDR SDRAM中讀出32位的數(shù)據(jù),根據(jù)用戶所選擇的數(shù)據(jù)通道,控制邏輯將相應的數(shù)據(jù)送入后端緩存中,后端緩存再將數(shù)據(jù)拆分成16位,通過PCI局部總線傳送到上位機中。從控制流程上看,DATATO_RAM和TO_LD中都設置了數(shù)據(jù)計數(shù)器,當DATATO_RAM中存儲的數(shù)據(jù)量超過設定值時,讀使能RDEN有效,控制模塊從緩存中一次讀取4個數(shù)據(jù)。后端緩存的控制方式與此類似。

            控制模塊SDRAM 由兩部分組成,其結構如圖6所示。其中ADDR為地址產(chǎn)生模塊,給控制核ddr_sdram提供數(shù)據(jù)操作的行地址和列地址??刂坪薲dr_sdram完成的功能包括將內(nèi)部狀態(tài)轉換產(chǎn)生的CMD控制命令譯碼成DDR SDRAM所能實現(xiàn)的各種操作并實現(xiàn)以雙倍的速率與DDR SDRAM進行數(shù)據(jù)交換的接口。ddr_sdram的結構框圖如圖7所示。



            控制核ddr_sdram采用自頂而下模塊化的設計方法,由4個模塊構成:ddr_sdram頂層模塊、控制接口模塊、命令模塊和數(shù)據(jù)路徑模塊。ddr_sdram頂層模塊初始化并把其余三個模塊有機地結合起來;控制接口模塊接收CMD命令和相關存儲器地址,對命令進行譯碼并將請求發(fā)送給命令模塊;命令模塊接收從控制接口模塊譯碼后的命令和地址,產(chǎn)生相應的命令給DDR SDRAM;數(shù)據(jù)路徑模塊在讀命令READA和寫命令WRITEA期間處理數(shù)據(jù)交換。

            控制接口模塊包含1個命令譯碼器和1 個16 位的刷新減計數(shù)器及相應的控制電路。 命令譯碼器譯碼并將譯碼后的命令及相應的地址轉送給命令模塊。減計數(shù)器和相應的控制電路用來產(chǎn)生刷新命令給命令模塊。其值就是由LOAD_REG2 命令寫入到REG2中的值。當計數(shù)器減到0時,控制接口模塊就向命令模塊發(fā)Request 并一直保持到命令模塊發(fā)Ack來響應該請求。一旦控制接口模塊接收到Ack,減計數(shù)器就會重新寫入REG2中的值。

            命令模塊由1個簡單的仲裁器、命令發(fā)生器及命令時序器組成。它接收從控制接口模塊來的譯碼后的命令,同時接收刷新控制邏輯發(fā)來的刷新請求命令并產(chǎn)生正確的命令給DDR SDRAM。仲裁器在控制接口發(fā)來的命令和刷新控制邏輯發(fā)來的刷新請求命令之間進行仲裁。刷新請求命令的優(yōu)先級高于控制接口來的命令。在仲裁器收到命令譯碼器發(fā)來的命令后,該命令就傳送到命令發(fā)生器,命令時序器即用3個移位寄存器產(chǎn)生正確的命令時序后發(fā)給DDR SDRAM。1個移位寄存器用來控制激活命令時序,1個用來控制READA和WRITEA命令,1個用來計時操作命令的持續(xù)時間,為仲裁器確定最后的請求操作是否完成。

            數(shù)據(jù)路徑模塊提供了DDR SDRAM到FPGA的數(shù)據(jù)通道。在和DDR SDRAM接口的一方,數(shù)據(jù)路徑模塊將從DDR SDRAM過來的數(shù)據(jù)總線寬度翻倍,并在200MHz的時鐘頻率接收DDR SDRAM在100MHz時鐘的上下沿送出的數(shù)據(jù)。在和FPGA接口的一方,數(shù)據(jù)路徑模塊將從FPGA送來的數(shù)據(jù)寬度減半并以2倍的速率送給DDR SDRAM。

            系統(tǒng)實現(xiàn)的功能及結果分析

            邏輯分析儀SignalTap II是Quartus II軟件中集成的一個內(nèi)部邏輯分析軟件,使用它可以觀察本設計的內(nèi)部信號波形。在系統(tǒng)的軟件設計和仿真完成之后,將編譯后的文件下載到系統(tǒng)的硬件中,對DDR SDRAM控制器的狀態(tài)轉移和讀寫流程中各個信號進行了實時的采集與顯示。
          如圖8所示,是控制器讀數(shù)據(jù)時嵌入式邏輯分析儀采集到的波形圖。第9行到第15行的信號顯示的是讀流程中各狀態(tài)之間的切換過程。讀命令發(fā)出之后,經(jīng)過CAS潛伏期,DDR SDRAM突發(fā)傳輸8個數(shù)據(jù),并產(chǎn)生選通信號DQS??刂破髟谧x到數(shù)據(jù)線DQ上的數(shù)據(jù)后,將數(shù)據(jù)寬度加倍,傳送到后端緩存中。

            寫數(shù)據(jù)的波形圖如圖9所示,當主狀態(tài)機在SAVE_DATA狀態(tài)時,DDR SDRAM從控制器的數(shù)據(jù)總線上一次存儲8個數(shù)據(jù)。圖中的選通信號HI_LO是由控制器產(chǎn)生的,在信號的上升沿和下降沿存儲器存儲數(shù)據(jù)總線上的數(shù)據(jù),存滿8個完成一次寫操作。直到前端緩存的讀使能信號有效時,控制器從前端緩存讀取數(shù)據(jù),并發(fā)起下一次寫操作。

            將所設計的控制器用于最高采樣速率為10MHz的數(shù)據(jù)采集系統(tǒng)中,DDR SDRAM工作的差分時鐘為100MHz,容量為32MByte,系統(tǒng)運行性能良好,能夠較好的完成DDR SDRAM與AD轉換模塊,PCI總線接口模塊之間的數(shù)據(jù)交換。圖10為數(shù)據(jù)采集卡對10kHz正弦信號采樣的波形。

            結語

            本設計在深入了解DDR SDRAM工作原理的基礎上,確定了DDR SDRAM控制器的總體方案和模塊化設計方法。用FPGA實現(xiàn)的DDR SDRAM的控制器能在很高的速度下完成數(shù)據(jù)的讀寫和復雜的控制操作,工作可靠。該控制器解決了DDR SDRAM用于高速數(shù)據(jù)采集的關鍵技術問題,對增加數(shù)據(jù)采集系統(tǒng)的緩存容量具有一定意義。

          存儲器相關文章:存儲器原理


          塵埃粒子計數(shù)器相關文章:塵埃粒子計數(shù)器原理


          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();