本文詳細(xì)介紹了在Xilinx Virtex-6系列FPGA中使用MIG3.7 IP核實現(xiàn)高速率DDR3芯片控制的設(shè)計思想和設(shè)計方案。針對高速實時數(shù)字信號處理中大容量采樣數(shù)據(jù)通過DDR3存儲和讀取的應(yīng)用背景,設(shè)計和實現(xiàn)了適用于該背景的控制狀態(tài)機(jī),并對控制時序作了詳盡的分析。系統(tǒng)測試結(jié)果表明,該設(shè)計滿足大容量數(shù)據(jù)的高速率存儲和讀取要求。
一、引言
隨著軟件無線電[1]思想的提出和FPGA技術(shù)[2]的不斷發(fā)展,高速實時數(shù)字信號處理[3]已經(jīng)成為FPGA的一個重要課題,高速的采樣頻率帶來的是大容量的存儲數(shù)據(jù)。在存儲芯片領(lǐng)域,DDR3以較低的功耗,較快的存儲速度,較高的存儲容量和較低的價格迅速占領(lǐng)市場;同時在繪制PCB板圖時,DDR2對信號完整性[4]的要求比較高,在很多地方都要求T型連接;而DDR3引入了write leveling的模塊[5],專門用于各個模塊間時鐘的對齊,因此可以采用菊花鏈的連接方式,大大方便了PCB互聯(lián)設(shè)計[6]。因此,在FPGA中使用DDR3進(jìn)行大容量數(shù)據(jù)的存儲是一種趨勢。
本文基于Xilinx 公司的Virtex-6芯片,針對高速實時數(shù)字信號處理中大容量采樣數(shù)據(jù)通過DDR3存儲和讀取的應(yīng)用背景,利用官方提供的IP核完成了用戶接口設(shè)計,并在該芯片上完成了驗證和實現(xiàn)。目前,該方案已經(jīng)在某雷達(dá)系統(tǒng)的高速數(shù)據(jù)緩存中得到了應(yīng)用。
二、系統(tǒng)模型
現(xiàn)假定背景是數(shù)字信號處理,由FPGA和DSP共同完成,F(xiàn)PGA主要完成數(shù)據(jù)的實時檢測和初步處理,同時負(fù)責(zé)采集和存儲原始數(shù)據(jù)。DSP主要負(fù)責(zé)信號的進(jìn)一步處理。DSP的實時處理能力有限,那么就需要FPGA把感興趣時間段的數(shù)據(jù)存儲下來,再由DSP一包一包地從中讀取并進(jìn)一步處理。其基本框圖如下:

?
圖1 系統(tǒng)背景框圖
在這里我們主要討論DDR3的控制,提取感興趣的模塊可以得到簡化的框圖:

?
圖2 DDR3用戶接口設(shè)計整體框圖
用戶接口設(shè)計是整個系統(tǒng)的核心,對整個系統(tǒng)進(jìn)行調(diào)度和控制。當(dāng)接收到DSP寫命令的時候,該設(shè)計開啟寫FIFO緩存功能,將對應(yīng)數(shù)據(jù)按照MIG的時序要求寫入DDR3;當(dāng)接收到DSP讀命令的時候,該設(shè)計按照要求產(chǎn)生對應(yīng)的MIG讀時序,控制數(shù)據(jù)進(jìn)入讀FIFO,進(jìn)而完成后續(xù)操作。
三、MIG時序要求
Xilinx MIG v3.7 IP核的一般寫命令操作時序[7]如下圖所示:

?
圖3 MIG用戶接口的時序要求(突發(fā)長度為8)
由以上時序圖可以得到連續(xù)寫命令的控制要點(diǎn):
1、 當(dāng)app_rdy(DDR3核準(zhǔn)備好信號)和app_en(DDR3核使能信號)同時拉高的時候, 寫命令和寫地址有效。
2、 當(dāng)app_wdf_rdy(DDR3寫FIFO準(zhǔn)備好信號)和app_wdf_en(DDR3寫FIFO使能信 號)同時拉高的時候,寫入數(shù)據(jù)有效。
3、 突發(fā)長度為8時每兩個控制周期對應(yīng)一組突發(fā)數(shù)據(jù),則每寫入兩個數(shù)據(jù)就要給出一個 app_wdf_end(幀尾信號)。
4、 寫命令與寫數(shù)據(jù)的操作時序要在兩個時鐘周期以內(nèi)。
四、用戶接口設(shè)計及時序分析
由上面MIG操作時序要求提出基于等待的寫命令寫數(shù)據(jù)同時發(fā)送機(jī)制。這種方式有一個好處:數(shù)據(jù)基本不會留在DDR3的FIFO里面,這樣,就不用考慮app_wdf_rdy會拉低的情況,方便了寫數(shù)據(jù)的操作,提高了時鐘利用率。其基本思路如下圖所示:

?
圖4 基于MIG的用戶接口設(shè)計基本框圖
由上圖設(shè)計的狀態(tài)機(jī)所得的時序如下圖所示:

?
圖5 用戶設(shè)計時序圖
時刻①寫等待狀態(tài),此時檢測到ADFIFO為空,因此保持寫等待狀態(tài)。
時刻②檢測到ADFIFO非空,于是讀使能拉高,下一個狀態(tài)為寫數(shù)據(jù)狀態(tài)。
時刻③已進(jìn)入寫數(shù)據(jù)狀態(tài),此時檢測adata_valid(ADFIFO數(shù)據(jù)有效信號),因為讀使能拉高到讀數(shù)據(jù)有效有一個時鐘的延時,因此當(dāng)檢測到adata_valid有效再使得adfifo_rden(ADFIFO讀使能)拉低的話,讀使能已經(jīng)有效了兩個時鐘了。此時并沒有檢測到ADFIFO數(shù)據(jù)有效信號,狀態(tài)不變繼續(xù)檢測。
時刻④檢測到讀數(shù)據(jù)有效,說明兩個時鐘周期的讀使能信號已經(jīng)發(fā)出,于是讀使能拉低,同時拉高app_wdf_wren(DDR核寫使能信號),將對應(yīng)數(shù)據(jù)發(fā)出。
因為有兩個時鐘的有效數(shù)據(jù),時刻⑤adata_valid依然拉高,繼續(xù)寫入數(shù)據(jù);此時檢測到brust_cnt(幀尾計數(shù)標(biāo)志)為高,給出幀尾信號,同時app_en(核使能信號)拉高,準(zhǔn)備發(fā)送寫命令,下一個狀態(tài)為寫命令狀態(tài)。
時刻⑥已進(jìn)入寫命令狀態(tài),這時app_en已經(jīng)拉高,只要檢測到app_rdy(核準(zhǔn)備好信號)拉高,說明對應(yīng)地址的寫命令已經(jīng)發(fā)出。時刻⑥檢測到app_rdy為低,狀態(tài)不變,繼續(xù)檢測。
經(jīng)過連續(xù)幾個時鐘周期的等待后,時刻⑦檢測到app_rdy為高,說明對應(yīng)地址的寫命令已經(jīng)發(fā)出,地址自動加一,同時app_en信號拉低,再次進(jìn)入寫等待狀態(tài)。
時刻①到時刻⑦詳細(xì)描述了當(dāng)接受到DSP寫命令時用戶接口設(shè)計對各個端口的時序操作,可見與MIG要求時序相符。
讀命令的發(fā)送和寫命令的發(fā)送類似,也比較簡單,在此不再贅述。
五、結(jié)論
使用Xilinx公司生產(chǎn)的Virtex-6芯片進(jìn)行驗證,采樣速率為1Ghz,采樣位寬為12位,擴(kuò)展成16位后進(jìn)行存儲,DDR3內(nèi)部以1067M處理速度,32位的處理帶寬進(jìn)行存儲,寫數(shù)據(jù)時從地址全0寫到地址全1,讀數(shù)據(jù)時也從地址全0讀到全1,經(jīng)對比無誤,說明該控制器能夠較好地進(jìn)行高速讀寫操作。
?
?
?
Virtex-6
DDR3
FPGA
高速實時數(shù)字信號處理
電子發(fā)燒友App



























評論