基于FPGA 的DDR SDRAM控制器在高速數據采集系統中應用

發(fā)布時(shí)間:2010-7-29 11:22    發(fā)布者:lavida
關(guān)鍵詞: DDR , FPGA , SDRAM , 數據采集
實(shí)現數據的高速大容量存儲是數據采集系統中的一項關(guān)鍵技術(shù)。本設計采用Altera 公司Cyclone系列的FPGA 完成了對DDR SDRAM 的控制,以狀態(tài)機來(lái)描述對DDR SDRAM 的各種時(shí)序操作,設計了DDR SDRAM 的數據與命令接口。用控制核來(lái)簡(jiǎn)化對DDR SDRAM 的操作,并采用自頂至下模塊化的設計方法,將控制核嵌入到整個(gè)數據采集系統的控制模塊中,完成了數據的高速采集、存儲及上傳。使用開(kāi)發(fā)軟件Quartus II 中內嵌的邏輯分析儀SignalTap II 對控制器的工作流程進(jìn)行了驗證和調試。最終采集到的數據波形表明,完成了對DDR SDRAM 的突發(fā)讀寫(xiě)操作,達到了預期設計的目標。

DDR SDRAM 是Double Data Rate SDRAM 的縮寫(xiě),即雙倍速率同步動(dòng)態(tài)隨機存儲器。  

DDR 內存是在SDRAM 內存基礎上發(fā)展而來(lái)的,能夠在時(shí)鐘的上升沿和下降沿各傳輸一次數據,可以在與SDRAM 相同的總線(xiàn)時(shí)鐘頻率下達到更高的數據傳輸率。本設計中采用Altera 公司Cyclone 系列型號為EP1C6Q240C8 的FPGA 實(shí)現控制器,以Hynix 公司生產(chǎn)的型號為HY5DU121622B(L)TP 的DDR SDRAM 為存儲器,完成了對數據的高速大容量存儲。  

1 DDR SDRAM 的控制原理及存儲功能的實(shí)現  

DDR SDRAM 支持的常用命令有7 種:空操作(NOP)、激活操作(Active)、突發(fā)讀(BurstRead)、突發(fā)寫(xiě)(Burst Write)、自動(dòng)刷新(Autorefresh)、預充電(Precharge)、模式寄存器配置(Mode Register Set)。所有的操作命令都是通過(guò)信號線(xiàn)RAS_N、CAS_N、WE_N 共同控制來(lái)實(shí)現的。在對DDR SDRAM 進(jìn)行存取數據操作之前,首先要對其初始化,即設置DDR SDRAM的普通模式寄存器和擴展模式寄存器,確定DDR SDRAM 的工作方式,這些設置包括突發(fā)長(cháng)度、突發(fā)類(lèi)型、CAS 潛伏期和工作模式以及擴展模式寄存器中的對DDR SDRAM 內部延遲鎖定回路(DLL)的使能與輸出驅動(dòng)能力的設置。
  
初始化完成之后,DDR SDRAM 便進(jìn)入正常的工作狀態(tài),此時(shí)便可對存儲器進(jìn)行讀寫(xiě)和刷新。DDR SDRAM 在一對差分時(shí)鐘的控制下工作。命令(地址和控制信號)在每個(gè)時(shí)鐘的上升沿被觸發(fā)。隨著(zhù)數據DQ 一起傳送的還包括一個(gè)雙向的數據選通信號DQS,接收方通過(guò)該信號來(lái)接收數據。DQS 作為選通信號在讀周期中由DDR SDRAM 產(chǎn)生,在寫(xiě)周期中由存儲器的控制器產(chǎn)生。該選通信號與數據相關(guān),其作用類(lèi)似于一個(gè)獨立的時(shí)鐘,并滿(mǎn)足相應的時(shí)序要求。由于DDR SDRAM 的數據接口在時(shí)鐘的兩個(gè)沿的觸發(fā)下工作,其數據寬度是存儲器數據寬度的一半。為實(shí)現數據的大容量存儲,設計時(shí)采用的是一個(gè)控制核同時(shí)對兩片DDR SDRAM 進(jìn)行操作,外接數據線(xiàn)的寬度由單片DDR SDRAM 的16 位擴展到32位。
  
對DDR SDRAM 的讀和寫(xiě)操作是基于突發(fā)的,即從一個(gè)選定的地址單元開(kāi)始,連續存取已設置長(cháng)度的地址單元,該長(cháng)度就是所謂的突發(fā)長(cháng)度。DDR SDRAM 提供的可編程的讀或寫(xiě)的突發(fā)長(cháng)度為2,4 或8。數據的存取以一個(gè)激活命令(Active)開(kāi)始,接著(zhù)便是讀(BurstRead)或寫(xiě)(Burst Write)命令。與激活命令一起被觸發(fā)的地址位用來(lái)選擇將要存取的區和頁(yè)(或行),與讀或寫(xiě)命令一起被觸發(fā)的地址位用來(lái)選擇突發(fā)存取的起始列單元。讀命令被觸發(fā)后,數據將在1.5~3 個(gè)時(shí)鐘周期之后出現在數據總線(xiàn)上。這個(gè)延遲就是所謂的CAS 潛伏期(CAS latency),即從DDR SDRAM 內核讀出數據到數據出現在數據總線(xiàn)上所需要的時(shí)間。CAS 潛伏期的大小與SDRAM 的速度和存儲器的時(shí)鐘頻率有關(guān)。當要存取一個(gè)不同行的地址單元時(shí),需要通過(guò)一個(gè)預充電(Precharge)操作關(guān)閉當前行。
  
自動(dòng)刷新(Autorefresh)命令用來(lái)周期性地刷新DDR SDRAM,以保持其內部的數據不丟失。2 DDR SDRAM 控制器的設計DDR SDRAM 控制器的功能包括:  

(1)初始化DDR SDRAM;  
(2)簡(jiǎn)化DDR SDRAM的讀寫(xiě)時(shí)序;  
(3)將DDR SDRAM 接口的雙時(shí)鐘沿數據轉換為單時(shí)鐘沿數據,使得對DDR SDRAM 的操作類(lèi)似于普通RAM;  
(4)控制器還要產(chǎn)生周期性的刷新命令來(lái)維持DDR SDRAM 內的數據而不丟失。其控制轉換圖如圖1 所示。  
  
在對DDR SDRAM 初始化完成之后,就可進(jìn)行讀、寫(xiě)或其他操作。在執行讀(寫(xiě))命令之前,先要激活將要讀(寫(xiě))的行,之后便可對該行進(jìn)行突發(fā)讀(寫(xiě))。在控制器的設計中,所有的讀寫(xiě)命令都是不帶預充電的,因此,某一行被激活之后將一直處于激活狀態(tài),直到用戶(hù)發(fā)送突發(fā)終止命令,此時(shí)控制器將自動(dòng)產(chǎn)生一個(gè)預充電命令來(lái)關(guān)閉當前行。這樣,某一行被激活之后用戶(hù)便可進(jìn)行連續的突發(fā)讀(寫(xiě))操作,從而節省了每次突發(fā)讀寫(xiě)所需要的激活時(shí)間,提高了系統的數據吞吐率。  

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

  


  
3 DDR SDRAM 控制器的FPGA實(shí)現
  
3.1 控制電路主狀態(tài)機設計
  
主狀態(tài)機用于控制整個(gè)數據采集系統的工作流程。各功能模塊的配合,命令的發(fā)送,數據的采集、存儲和傳輸都需要狀態(tài)機來(lái)協(xié)調并嚴格控制時(shí)序關(guān)系。其狀態(tài)轉換圖如圖4 所示?刂破魃想娀驈臀粫r(shí)進(jìn)入IDLE 狀態(tài),其中LA 和LD 分別為PCI 局部總線(xiàn)的地址線(xiàn)和數據線(xiàn),上位機的發(fā)送的命令通過(guò)PCI 總線(xiàn)及接口芯片傳送到PCI 局部總線(xiàn),其中地址線(xiàn)的變化將引起狀態(tài)機內部的狀態(tài)轉換,狀態(tài)轉換的同時(shí),相應的配置字將出現在數據線(xiàn)上。配置完參數之后,轉態(tài)機進(jìn)入等待數據狀態(tài)(WAIT_DATA),當觸發(fā)信號滿(mǎn)足要求之后(TRG=‘1’),自動(dòng)進(jìn)入到保存數據狀態(tài)(SAVE_DATA),在此狀態(tài)下,控制程序開(kāi)始進(jìn)行數據采集。指定存儲深度的數據采集完成后,主狀態(tài)機自動(dòng)進(jìn)入等待讀數據狀態(tài),在接受到地址線(xiàn)上的狀態(tài)轉換命令后,分別進(jìn)入讀取A 通道和B 通道數據的狀態(tài)。數據讀完之后,上位機發(fā)送命令使狀態(tài)返回到IDLE 狀態(tài)。  

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


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


  
控制核ddr_sdram 采用自頂而下模塊化的設計方法,由4 個(gè)模塊構成:ddr_sdram 頂層模塊、控制接口模塊、命令模塊和數據路徑模塊。ddr_sdram 頂層模塊初始化并把其余三個(gè)模塊有機地結合起來(lái);控制接口模塊接收CMD 命令和相關(guān)存儲器地址,對命令進(jìn)行譯碼并將請求發(fā)送給命令模塊;命令模塊接收從控制接口模塊譯碼后的命令和地址,產(chǎn)生相應的命令給DDR SDRAM;數據路徑模塊在讀命令READA 和寫(xiě)命令WRITEA 期間處理數據交換?刂平涌谀K包含1 個(gè)命令譯碼器和1 個(gè)16 位的刷新減計數器及相應的控制電路。 命令譯碼器譯碼并將譯碼后的命令及相應的地址轉送給命令模塊。減計數器和相應的控制電路用來(lái)產(chǎn)生刷新命令給命令模塊。其值就是由LOAD_REG2 命令寫(xiě)入到REG2 中的值。當計數器減到0 時(shí),控制接口模塊就向命令模塊發(fā)Request 并一直保持到命令模塊發(fā)Ack 來(lái)響應該請求。一旦控制接口模塊接收到Ack,減計數器就會(huì )重新寫(xiě)入REG2 中的值。命令模塊由1 個(gè)簡(jiǎn)單的仲裁器、命令發(fā)生器及命令時(shí)序器組成。它接收從控制接口模塊來(lái)的譯碼后的命令,同時(shí)接收刷新控制邏輯發(fā)來(lái)的刷新請求命令并產(chǎn)生正確的命令給DDR SDRAM。仲裁器在控制接口發(fā)來(lái)的命令和刷新控制邏輯發(fā)來(lái)的刷新請求命令之間進(jìn)行仲裁。刷新請求命令的優(yōu)先級高于控制接口來(lái)的命令。  

在仲裁器收到命令譯碼器發(fā)來(lái)的命令后,該命令就傳送到命令發(fā)生器,命令時(shí)序器即用3 個(gè)移位寄存器產(chǎn)生正確的命令時(shí)序后發(fā)給DDR SDRAM。1 個(gè)移位寄存器用來(lái)控制激活命令時(shí)序,1 個(gè)用來(lái)控制READA 和WRITEA命令,1 個(gè)用來(lái)計時(shí)操作命令的持續時(shí)間,為仲裁器確定最后的請求操作是否完成。數據路徑模塊提供了DDR SDRAM 到FPGA 的數據通道。在和DDR SDRAM 接口的一方,數據路徑模塊將從DDR SDRAM 過(guò)來(lái)的數據總線(xiàn)寬度翻倍,并在200MHz 的時(shí)鐘頻率接收DDR SDRAM 在100MHz 時(shí)鐘的上下沿送出的數據。在和FPGA 接口的一方,數據路徑模塊將從FPGA 送來(lái)的數據寬度減半并以2 倍的速率送給DDR SDRAM。4 系統實(shí)現的功能及結果分析邏輯分析儀SignalTap II 是Quartus II 軟件中集成的一個(gè)內部邏輯分析軟件,使用它可以觀(guān)察本設計的內部信號波形。在系統的軟件設計和仿真完成之后,將編譯后的文件下載到系統的硬件中,對DDR SDRAM 控制器的狀態(tài)轉移和讀寫(xiě)流程中各個(gè)信號進(jìn)行了實(shí)時(shí)的采集與顯示。
  
如圖8 所示,是控制器讀數據時(shí)嵌入式邏輯分析儀采集到的波形圖。第9 行到第15行的信號顯示的是讀流程中各狀態(tài)之間的切換過(guò)程。讀命令發(fā)出之后,經(jīng)過(guò)CAS 潛伏期,DDR SDRAM 突發(fā)傳輸8 個(gè)數據,并產(chǎn)生選通信號DQS?刂破髟谧x到數據線(xiàn)DQ 上的數據后,將數據寬度加倍,傳送到后端緩存中。  


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


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

  
5 特色描述
  
(1) 本設計在深入了解DDR SDRAM 工作原理的基礎上,確定了DDR SDRAM 控制器的總體方案和模塊化設計方法。
(2) 用FPGA實(shí)現的DDR SDRAM的控制器能在很高的速度下完成數據的讀寫(xiě)和復雜的控制操作,工作可靠。
(3) 該控制器解決了DDR SDRAM 用于高速數據采集的關(guān)鍵技術(shù)問(wèn)題,對增加數據采集系統的緩存容量具有重要意義。
本文地址:http://selenalain.com/thread-17746-1-1.html     【打印本頁(yè)】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀(guān)點(diǎn)和對其真實(shí)性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問(wèn)題,我們將根據著(zhù)作權人的要求,第一時(shí)間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

相關(guān)視頻

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
午夜高清国产拍精品福利|亚洲色精品88色婷婷七月丁香|91久久精品无码一区|99久久国语露脸精品|动漫卡通亚洲综合专区48页