本文詳細(xì)介紹了在Xilinx Virtex-6系列FPGA中使用MIG3.7 IP核實(shí)現(xiàn)高速率DDR3芯片控制的設(shè)計(jì)思想和設(shè)計(jì)方案。針對(duì)高速實(shí)時(shí)數(shù)字信號(hào)處理中大容量采樣數(shù)據(jù)通過(guò)DDR3存儲(chǔ)和讀取的應(yīng)用背景,設(shè)計(jì)和實(shí)現(xiàn)了適用于該背景的控制狀態(tài)機(jī),并對(duì)控制時(shí)序作了詳盡的分析。系統(tǒng)測(cè)試結(jié)果表明,該設(shè)計(jì)滿足大容量數(shù)據(jù)的高速率存儲(chǔ)和讀取要求。
一、引言
隨著軟件無(wú)線電[1]思想的提出和FPGA技術(shù)[2]的不斷發(fā)展,高速實(shí)時(shí)數(shù)字信號(hào)處理[3]已經(jīng)成為FPGA的一個(gè)重要課題,高速的采樣頻率帶來(lái)的是大容量的存儲(chǔ)數(shù)據(jù)。在存儲(chǔ)芯片領(lǐng)域,DDR3以較低的功耗,較快的存儲(chǔ)速度,較高的存儲(chǔ)容量和較低的價(jià)格迅速占領(lǐng)市場(chǎng);同時(shí)在繪制PCB板圖時(shí),DDR2對(duì)信號(hào)完整性[4]的要求比較高,在很多地方都要求T型連接;而DDR3引入了write leveling的模塊[5],專(zhuān)門(mén)用于各個(gè)模塊間時(shí)鐘的對(duì)齊,因此可以采用菊花鏈的連接方式,大大方便了PCB互聯(lián)設(shè)計(jì)[6]。因此,在FPGA中使用DDR3進(jìn)行大容量數(shù)據(jù)的存儲(chǔ)是一種趨勢(shì)。
本文基于Xilinx 公司的Virtex-6芯片,針對(duì)高速實(shí)時(shí)數(shù)字信號(hào)處理中大容量采樣數(shù)據(jù)通過(guò)DDR3存儲(chǔ)和讀取的應(yīng)用背景,利用官方提供的IP核完成了用戶接口設(shè)計(jì),并在該芯片上完成了驗(yàn)證和實(shí)現(xiàn)。目前,該方案已經(jīng)在某雷達(dá)系統(tǒng)的高速數(shù)據(jù)緩存中得到了應(yīng)用。
二、系統(tǒng)模型
現(xiàn)假定背景是數(shù)字信號(hào)處理,由FPGA和DSP共同完成,F(xiàn)PGA主要完成數(shù)據(jù)的實(shí)時(shí)檢測(cè)和初步處理,同時(shí)負(fù)責(zé)采集和存儲(chǔ)原始數(shù)據(jù)。DSP主要負(fù)責(zé)信號(hào)的進(jìn)一步處理。DSP的實(shí)時(shí)處理能力有限,那么就需要FPGA把感興趣時(shí)間段的數(shù)據(jù)存儲(chǔ)下來(lái),再由DSP一包一包地從中讀取并進(jìn)一步處理。其基本框圖如下:
?
圖1 系統(tǒng)背景框圖
在這里我們主要討論DDR3的控制,提取感興趣的模塊可以得到簡(jiǎn)化的框圖:
?
圖2 DDR3用戶接口設(shè)計(jì)整體框圖
用戶接口設(shè)計(jì)是整個(gè)系統(tǒng)的核心,對(duì)整個(gè)系統(tǒng)進(jìn)行調(diào)度和控制。當(dāng)接收到DSP寫(xiě)命令的時(shí)候,該設(shè)計(jì)開(kāi)啟寫(xiě)FIFO緩存功能,將對(duì)應(yīng)數(shù)據(jù)按照MIG的時(shí)序要求寫(xiě)入DDR3;當(dāng)接收到DSP讀命令的時(shí)候,該設(shè)計(jì)按照要求產(chǎn)生對(duì)應(yīng)的MIG讀時(shí)序,控制數(shù)據(jù)進(jìn)入讀FIFO,進(jìn)而完成后續(xù)操作。
三、MIG時(shí)序要求
Xilinx MIG v3.7 IP核的一般寫(xiě)命令操作時(shí)序[7]如下圖所示:
?
圖3 MIG用戶接口的時(shí)序要求(突發(fā)長(zhǎng)度為8)
由以上時(shí)序圖可以得到連續(xù)寫(xiě)命令的控制要點(diǎn):
1、 當(dāng)app_rdy(DDR3核準(zhǔn)備好信號(hào))和app_en(DDR3核使能信號(hào))同時(shí)拉高的時(shí)候, 寫(xiě)命令和寫(xiě)地址有效。
2、 當(dāng)app_wdf_rdy(DDR3寫(xiě)FIFO準(zhǔn)備好信號(hào))和app_wdf_en(DDR3寫(xiě)FIFO使能信 號(hào))同時(shí)拉高的時(shí)候,寫(xiě)入數(shù)據(jù)有效。
3、 突發(fā)長(zhǎng)度為8時(shí)每?jī)蓚€(gè)控制周期對(duì)應(yīng)一組突發(fā)數(shù)據(jù),則每寫(xiě)入兩個(gè)數(shù)據(jù)就要給出一個(gè) app_wdf_end(幀尾信號(hào))。
4、 寫(xiě)命令與寫(xiě)數(shù)據(jù)的操作時(shí)序要在兩個(gè)時(shí)鐘周期以內(nèi)。
四、用戶接口設(shè)計(jì)及時(shí)序分析
由上面MIG操作時(shí)序要求提出基于等待的寫(xiě)命令寫(xiě)數(shù)據(jù)同時(shí)發(fā)送機(jī)制。這種方式有一個(gè)好處:數(shù)據(jù)基本不會(huì)留在DDR3的FIFO里面,這樣,就不用考慮app_wdf_rdy會(huì)拉低的情況,方便了寫(xiě)數(shù)據(jù)的操作,提高了時(shí)鐘利用率。其基本思路如下圖所示:
?
圖4 基于MIG的用戶接口設(shè)計(jì)基本框圖
由上圖設(shè)計(jì)的狀態(tài)機(jī)所得的時(shí)序如下圖所示:
?
圖5 用戶設(shè)計(jì)時(shí)序圖
時(shí)刻①寫(xiě)等待狀態(tài),此時(shí)檢測(cè)到ADFIFO為空,因此保持寫(xiě)等待狀態(tài)。
時(shí)刻②檢測(cè)到ADFIFO非空,于是讀使能拉高,下一個(gè)狀態(tài)為寫(xiě)數(shù)據(jù)狀態(tài)。
時(shí)刻③已進(jìn)入寫(xiě)數(shù)據(jù)狀態(tài),此時(shí)檢測(cè)adata_valid(ADFIFO數(shù)據(jù)有效信號(hào)),因?yàn)樽x使能拉高到讀數(shù)據(jù)有效有一個(gè)時(shí)鐘的延時(shí),因此當(dāng)檢測(cè)到adata_valid有效再使得adfifo_rden(ADFIFO讀使能)拉低的話,讀使能已經(jīng)有效了兩個(gè)時(shí)鐘了。此時(shí)并沒(méi)有檢測(cè)到ADFIFO數(shù)據(jù)有效信號(hào),狀態(tài)不變繼續(xù)檢測(cè)。
時(shí)刻④檢測(cè)到讀數(shù)據(jù)有效,說(shuō)明兩個(gè)時(shí)鐘周期的讀使能信號(hào)已經(jīng)發(fā)出,于是讀使能拉低,同時(shí)拉高app_wdf_wren(DDR核寫(xiě)使能信號(hào)),將對(duì)應(yīng)數(shù)據(jù)發(fā)出。
因?yàn)橛袃蓚€(gè)時(shí)鐘的有效數(shù)據(jù),時(shí)刻⑤adata_valid依然拉高,繼續(xù)寫(xiě)入數(shù)據(jù);此時(shí)檢測(cè)到brust_cnt(幀尾計(jì)數(shù)標(biāo)志)為高,給出幀尾信號(hào),同時(shí)app_en(核使能信號(hào))拉高,準(zhǔn)備發(fā)送寫(xiě)命令,下一個(gè)狀態(tài)為寫(xiě)命令狀態(tài)。
時(shí)刻⑥已進(jìn)入寫(xiě)命令狀態(tài),這時(shí)app_en已經(jīng)拉高,只要檢測(cè)到app_rdy(核準(zhǔn)備好信號(hào))拉高,說(shuō)明對(duì)應(yīng)地址的寫(xiě)命令已經(jīng)發(fā)出。時(shí)刻⑥檢測(cè)到app_rdy為低,狀態(tài)不變,繼續(xù)檢測(cè)。
經(jīng)過(guò)連續(xù)幾個(gè)時(shí)鐘周期的等待后,時(shí)刻⑦檢測(cè)到app_rdy為高,說(shuō)明對(duì)應(yīng)地址的寫(xiě)命令已經(jīng)發(fā)出,地址自動(dòng)加一,同時(shí)app_en信號(hào)拉低,再次進(jìn)入寫(xiě)等待狀態(tài)。
時(shí)刻①到時(shí)刻⑦詳細(xì)描述了當(dāng)接受到DSP寫(xiě)命令時(shí)用戶接口設(shè)計(jì)對(duì)各個(gè)端口的時(shí)序操作,可見(jiàn)與MIG要求時(shí)序相符。
讀命令的發(fā)送和寫(xiě)命令的發(fā)送類(lèi)似,也比較簡(jiǎn)單,在此不再贅述。
五、結(jié)論
使用Xilinx公司生產(chǎn)的Virtex-6芯片進(jìn)行驗(yàn)證,采樣速率為1Ghz,采樣位寬為12位,擴(kuò)展成16位后進(jìn)行存儲(chǔ),DDR3內(nèi)部以1067M處理速度,32位的處理帶寬進(jìn)行存儲(chǔ),寫(xiě)數(shù)據(jù)時(shí)從地址全0寫(xiě)到地址全1,讀數(shù)據(jù)時(shí)也從地址全0讀到全1,經(jīng)對(duì)比無(wú)誤,說(shuō)明該控制器能夠較好地進(jìn)行高速讀寫(xiě)操作。
?
?
?
Virtex-6
DDR3
FPGA
高速實(shí)時(shí)數(shù)字信號(hào)處理
評(píng)論
查看更多