新聞中心

EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 基于FPGA 的DDR SDRAM控制器在高速數(shù)據(jù)采集系統(tǒng)中應(yīng)用

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

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

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

本文引用地址:http://2s4d.com/article/201610/308599.htm

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

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

1 DDR SDRAM 的控制原理及存儲(chǔ)功能的實(shí)現(xiàn)

DDR SDRAM 支持的常用命令有7 種:空操作(NOP)、激活操作(Active)、突發(fā)讀(BurstRead)、突發(fā)寫(Burst Write)、自動(dòng)刷新(Autorefresh)、預(yù)充電(Precharge)、模式寄存器配置(Mode Register Set)。所有的操作命令都是通過信號(hào)線RAS_N、CAS_N、WE_N 共同控制來(lái)實(shí)現(xiàn)的。在對(duì)DDR SDRAM 進(jìn)行存取數(shù)據(jù)操作之前,首先要對(duì)其初始化,即設(shè)置DDR SDRAM的普通模式寄存器和擴(kuò)展模式寄存器,確定DDR SDRAM 的工作方式,這些設(shè)置包括突發(fā)長(zhǎng)度、突發(fā)類型、CAS 潛伏期和工作模式以及擴(kuò)展模式寄存器中的對(duì)DDR SDRAM 內(nèi)部延遲鎖定回路(DLL)的使能與輸出驅(qū)動(dòng)能力的設(shè)置。

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

對(duì)DDR SDRAM 的讀和寫操作是基于突發(fā)的,即從一個(gè)選定的地址單元開始,連續(xù)存取已設(shè)置長(zhǎng)度的地址單元,該長(zhǎng)度就是所謂的突發(fā)長(zhǎng)度。DDR SDRAM 提供的可編程的讀或?qū)懙耐话l(fā)長(zhǎng)度為2,4 或8。數(shù)據(jù)的存取以一個(gè)激活命令(Active)開始,接著便是讀(BurstRead)或?qū)?Burst Write)命令。與激活命令一起被觸發(fā)的地址位用來(lái)選擇將要存取的區(qū)和頁(yè)(或行),與讀或?qū)懨钜黄鸨挥|發(fā)的地址位用來(lái)選擇突發(fā)存取的起始列單元。讀命令被觸發(fā)后,數(shù)據(jù)將在1.5~3 個(gè)時(shí)鐘周期之后出現(xiàn)在數(shù)據(jù)總線上。這個(gè)延遲就是所謂的CAS 潛伏期(CAS latency),即從DDR SDRAM 內(nèi)核讀出數(shù)據(jù)到數(shù)據(jù)出現(xiàn)在數(shù)據(jù)總線上所需要的時(shí)間。CAS 潛伏期的大小與SDRAM 的速度和存儲(chǔ)器的時(shí)鐘頻率有關(guān)。當(dāng)要存取一個(gè)不同行的地址單元時(shí),需要通過一個(gè)預(yù)充電(Precharge)操作關(guān)閉當(dāng)前行。

自動(dòng)刷新(Autorefresh)命令用來(lái)周期性地刷新DDR SDRAM,以保持其內(nèi)部的數(shù)據(jù)不丟失。2 DDR SDRAM 控制器的設(shè)計(jì)DDR SDRAM 控制器的功能包括:

(1)初始化DDR SDRAM;

(2)簡(jiǎn)化DDR SDRAM的讀寫時(shí)序;

(3)將DDR SDRAM 接口的雙時(shí)鐘沿?cái)?shù)據(jù)轉(zhuǎn)換為單時(shí)鐘沿?cái)?shù)據(jù),使得對(duì)DDR SDRAM 的操作類似于普通RAM;

(4)控制器還要產(chǎn)生周期性的刷新命令來(lái)維持DDR SDRAM 內(nèi)的數(shù)據(jù)而不丟失。其控制轉(zhuǎn)換圖如圖1 所示。

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

2.1 DDR SDRAM 的讀操作流程

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

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

3.1 控制電路主狀態(tài)機(jī)設(shè)計(jì)

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

3.2 DDR SDRAM 控制器各模塊結(jié)構(gòu)圖

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

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

控制核ddr_sdram 采用自頂而下模塊化的設(shè)計(jì)方法,由4 個(gè)模塊構(gòu)成:ddr_sdram 頂層模塊、控制接口模塊、命令模塊和數(shù)據(jù)路徑模塊。ddr_sdram 頂層模塊初始化并把其余三個(gè)模塊有機(jī)地結(jié)合起來(lái);控制接口模塊接收CMD 命令和相關(guān)存儲(chǔ)器地址,對(duì)命令進(jìn)行譯碼并將請(qǐng)求發(fā)送給命令模塊;命令模塊接收從控制接口模塊譯碼后的命令和地址,產(chǎn)生相應(yīng)的命令給DDR SDRAM;數(shù)據(jù)路徑模塊在讀命令READA 和寫命令WRITEA 期間處理數(shù)據(jù)交換??刂平涌谀K包含1 個(gè)命令譯碼器和1 個(gè)16 位的刷新減計(jì)數(shù)器及相應(yīng)的控制電路。 命令譯碼器譯碼并將譯碼后的命令及相應(yīng)的地址轉(zhuǎn)送給命令模塊。減計(jì)數(shù)器和相應(yīng)的控制電路用來(lái)產(chǎn)生刷新命令給命令模塊。其值就是由LOAD_REG2 命令寫入到REG2 中的值。當(dāng)計(jì)數(shù)器減到0 時(shí),控制接口模塊就向命令模塊發(fā)Request 并一直保持到命令模塊發(fā)Ack 來(lái)響應(yīng)該請(qǐng)求。一旦控制接口模塊接收到Ack,減計(jì)數(shù)器就會(huì)重新寫入REG2 中的值。命令模塊由1 個(gè)簡(jiǎn)單的仲裁器、命令發(fā)生器及命令時(shí)序器組成。它接收從控制接口模塊來(lái)的譯碼后的命令,同時(shí)接收刷新控制邏輯發(fā)來(lái)的刷新請(qǐng)求命令并產(chǎn)生正確的命令給DDR SDRAM。仲裁器在控制接口發(fā)來(lái)的命令和刷新控制邏輯發(fā)來(lái)的刷新請(qǐng)求命令之間進(jìn)行仲裁。刷新請(qǐng)求命令的優(yōu)先級(jí)高于控制接口來(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)計(jì)時(shí)操作命令的持續(xù)時(shí)間,為仲裁器確定最后的請(qǐng)求操作是否完成。數(shù)據(jù)路徑模塊提供了DDR SDRAM 到FPGA 的數(shù)據(jù)通道。在和DDR SDRAM 接口的一方,數(shù)據(jù)路徑模塊將從DDR SDRAM 過來(lái)的數(shù)據(jù)總線寬度翻倍,并在200MHz 的時(shí)鐘頻率接收DDR SDRAM 在100MHz 時(shí)鐘的上下沿送出的數(shù)據(jù)。在和FPGA 接口的一方,數(shù)據(jù)路徑模塊將從FPGA 送來(lái)的數(shù)據(jù)寬度減半并以2 倍的速率送給DDR SDRAM。4 系統(tǒng)實(shí)現(xiàn)的功能及結(jié)果分析邏輯分析儀SignalTap II 是Quartus II 軟件中集成的一個(gè)內(nèi)部邏輯分析軟件,使用它可以觀察本設(shè)計(jì)的內(nèi)部信號(hào)波形。在系統(tǒng)的軟件設(shè)計(jì)和仿真完成之后,將編譯后的文件下載到系統(tǒng)的硬件中,對(duì)DDR SDRAM 控制器的狀態(tài)轉(zhuǎn)移和讀寫流程中各個(gè)信號(hào)進(jìn)行了實(shí)時(shí)的采集與顯示。

如圖8 所示,是控制器讀數(shù)據(jù)時(shí)嵌入式邏輯分析儀采集到的波形圖。第9 行到第15行的信號(hào)顯示的是讀流程中各狀態(tài)之間的切換過程。讀命令發(fā)出之后,經(jīng)過CAS 潛伏期,DDR SDRAM 突發(fā)傳輸8 個(gè)數(shù)據(jù),并產(chǎn)生選通信號(hào)DQS??刂破髟谧x到數(shù)據(jù)線DQ 上的數(shù)據(jù)后,將數(shù)據(jù)寬度加倍,傳送到后端緩存中。

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

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

5 特色描述

(1) 本設(shè)計(jì)在深入了解DDR SDRAM 工作原理的基礎(chǔ)上,確定了DDR SDRAM 控制器的總體方案和模塊化設(shè)計(jì)方法。

(2) 用FPGA實(shí)現(xiàn)的DDR SDRAM的控制器能在很高的速度下完成數(shù)據(jù)的讀寫和復(fù)雜的控制操作,工作可靠。

(3) 該控制器解決了DDR SDRAM 用于高速數(shù)據(jù)采集的關(guān)鍵技術(shù)問題,對(duì)增加數(shù)據(jù)采集系統(tǒng)的緩存容量具有重要意義。



關(guān)鍵詞: SDRAM FPGA DDR 控制器

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉