聶彬彬,解 放
(中國電子科技集團(tuán)公司第四十七研究所,沈陽110032)
為滿足科研項(xiàng)目需求,本文設(shè)計(jì)了一種可應(yīng)用于數(shù)字上/下變頻、FFT等數(shù)字信號(hào)處理算法評(píng)估驗(yàn)證的通用數(shù)字信號(hào)處理卡,該板卡可將處理后的數(shù)據(jù)在計(jì)算機(jī)上顯示和分析處理。該板卡主要由模擬數(shù)據(jù)輸入/輸出模塊,數(shù)據(jù)存取模塊、數(shù)字信號(hào)處理模塊和數(shù)據(jù)通訊模塊構(gòu)成。模擬數(shù)據(jù)輸入/輸出模塊主要由模數(shù)轉(zhuǎn)換芯片和數(shù)模轉(zhuǎn)換芯片構(gòu)成。該板卡的數(shù)字邏輯部分全部在ALTERA公司生產(chǎn)的Arria GX2系列的EP2AG125EF29芯片內(nèi)部實(shí)現(xiàn),其中數(shù)據(jù)存取模塊由FPGA內(nèi)部的RAM資源和外接DDR2存儲(chǔ)器共同組成,數(shù)據(jù)通訊模塊利用FPGA器件內(nèi)部提供的hard IP實(shí)現(xiàn)本設(shè)計(jì)所需的PICE接口,并利用WinDriver軟件完成PCIE驅(qū)動(dòng)的設(shè)計(jì)和API封裝。本文介紹的板卡內(nèi)部功能框圖如圖1所示。
圖1 通用數(shù)字信號(hào)處理板卡功能框圖
(1)模數(shù)轉(zhuǎn)換芯片使用精度為14位、采樣率65MSPS的AD9244,可滿足較高的模數(shù)轉(zhuǎn)換精度和速度需求。AD9244無需配置,輸出數(shù)據(jù)格式為14位并行數(shù)據(jù),便于與FPGA的接口連接,本設(shè)計(jì)配置2塊 AD9244。
(2)數(shù)模轉(zhuǎn)換芯片采用精度為16位、采樣率為1Gsps的AD9779A。AD9779A為雙通道DAC,采用SPI串行總線接口進(jìn)行配置。由于本文側(cè)重點(diǎn)為通用數(shù)字信號(hào)處理卡的設(shè)計(jì),故對(duì)AD9779A的內(nèi)部寄存器具體內(nèi)容不作介紹。使用AD9779A需要注意2組16位并行數(shù)據(jù)輸入由FPGA驅(qū)動(dòng),兩組16位數(shù)據(jù)在布線時(shí)要按數(shù)據(jù)總線處理,盡量確保等長(zhǎng)。而AD9779A輸出的DATACLK可以作為數(shù)據(jù)參考時(shí)鐘接入FPGA的時(shí)鐘輸入管腳。FPGA輸出并行數(shù)據(jù)添加TCO約束后,可以保證并行數(shù)據(jù)的每一位均幾乎同時(shí)到達(dá)DAC的輸入。設(shè)置AD9779A內(nèi)部寄存器以使DATACLK是否反相,未反相或反相的DATACLK中必有一種配置可以使并行數(shù)據(jù)滿足于DATACLK的建立與保持時(shí)序關(guān)系。這樣可以簡(jiǎn)化當(dāng)FPGA輸出的數(shù)據(jù)率為100MSPS或更高時(shí)的時(shí)序設(shè)計(jì)。
AD9779A的數(shù)據(jù)經(jīng)過濾波等環(huán)節(jié)后可以作為AD9244的輸入,為本數(shù)字信號(hào)處理卡提供信號(hào)源。
本板卡的設(shè)計(jì)目的是用于評(píng)估數(shù)字信號(hào)處理算法,故本文不介紹具體數(shù)字信號(hào)處理模塊的實(shí)現(xiàn)。Altera公司的Arria GX2 125芯片內(nèi)部的邏輯資源可用于實(shí)現(xiàn)不同的算法。
在評(píng)估數(shù)字信號(hào)處理算法時(shí)需要分析數(shù)字信號(hào)處理前/后以及處理過程中各節(jié)點(diǎn)輸出的數(shù)據(jù),由于FPGA內(nèi)部RAM空間有限,故本設(shè)計(jì)采用內(nèi)部RAM與外擴(kuò)DDR2內(nèi)存相結(jié)合的方式來完成大容量數(shù)據(jù)的緩存。為了便于用戶使用DDR2內(nèi)存,本設(shè)計(jì)將DDR2實(shí)現(xiàn)的大容量FIFO_ddr2與由內(nèi)部RAM實(shí)現(xiàn)的FIFO_A和FIFO_B進(jìn)一步封裝為一個(gè)模塊pseudo_fifo。用戶進(jìn)行FIFO寫操作時(shí),數(shù)據(jù)寫入FIFO_A中,用戶進(jìn)行FIFO讀操作時(shí),數(shù)據(jù)從FIFO_B中讀出,pseudo_fifo內(nèi)實(shí)現(xiàn)由FIFO_A向FIFO_ddr2的數(shù)據(jù)搬移邏輯A和由FIFO_ddr2向FIFO_B的數(shù)據(jù)搬移邏輯B。在DDR2實(shí)現(xiàn)大容量FIFO時(shí)使用了DDR2內(nèi)存控制器IP,在FIFO_ddr2內(nèi)部利用格雷碼計(jì)數(shù)器來生成讀/寫地址,根據(jù)讀/寫地址的關(guān)系來生成FIFO_ddr2的空/滿以及近空/近滿等標(biāo)志。數(shù)據(jù)搬移邏輯A完成寫地址遞增操作,數(shù)據(jù)搬移邏輯B完成讀地址遞增操作。數(shù)據(jù)搬移邏輯A對(duì)FIFO_A的讀操作和FIFO_ddr2的寫操作、數(shù)據(jù)搬移邏輯B對(duì)FIFO_ddr2的讀操作和FIFO_B的寫操作,工作在高速時(shí)鐘200MHz。這樣的設(shè)計(jì)使用戶僅需按照FIFO的寫時(shí)序,就可將待觀測(cè)的各個(gè)信號(hào)加入數(shù)據(jù)存取模塊進(jìn)行緩存,而數(shù)據(jù)通訊模塊也僅需按照FIFO的讀時(shí)序?qū)⒕彺嬷械臄?shù)據(jù)讀入,簡(jiǎn)化了數(shù)據(jù)通訊模塊的設(shè)計(jì)。
本設(shè)計(jì)采用容量為2GB的內(nèi)存,該內(nèi)存數(shù)據(jù)位寬為64位,配置內(nèi)存控制器時(shí)使用half rate模式,則FIFO_ddr2的內(nèi)部數(shù)據(jù)寬度為256位(64位X4)。則FIFO_A和FIFO_B的數(shù)據(jù)寬度也設(shè)為256位。這樣可同時(shí)對(duì)256路數(shù)字量進(jìn)行采集,采集深度約為64M,由此可知,該板卡具有普通邏輯分析儀無法比擬的數(shù)據(jù)處理能力。
PCIE插槽正逐漸取代計(jì)算機(jī)主板上的PCI插槽,故本設(shè)計(jì)采用了PCIE協(xié)議作為與計(jì)算機(jī)間的通訊協(xié)議。文中數(shù)據(jù)通訊模塊的設(shè)計(jì)包括固件和軟件兩個(gè)方面。
Arria GX2器件支持PCIE的hard ip實(shí)現(xiàn),對(duì)比soft IP實(shí)現(xiàn)節(jié)省了FPGA的內(nèi)部資源。為了使PCIE的ip core能與數(shù)據(jù)存取模塊進(jìn)行通訊,本設(shè)計(jì)在數(shù)據(jù)通訊模塊內(nèi)部實(shí)現(xiàn)PCIE_interface邏輯。軟件可發(fā)出讀/寫寄存器的命令到本板卡上,PCIE_interface邏輯負(fù)責(zé)對(duì)命令進(jìn)行解釋和執(zhí)行。本板卡上實(shí)現(xiàn)了如下寄存器用于控制和觀測(cè)板卡的工作:
(1)兩個(gè)寄存器用于控制板卡數(shù)據(jù)采集的開始和結(jié)束;
(2)兩片AD9244采集的數(shù)字信號(hào)在數(shù)字信號(hào)處理模塊進(jìn)行正交變換時(shí)會(huì)產(chǎn)生兩組同相(I)/正交(Q)分量共四組數(shù)據(jù),每組256個(gè)共4組FIR系數(shù)寄存器用于加載板卡上數(shù)字濾波器的系數(shù);
(3)抽取率寄存器可用于設(shè)置抽取率;
(4)組DMA基址寄存器、傳輸字節(jié)數(shù)寄存器用于設(shè)置4組DMA通道,以完成4組數(shù)據(jù)的上傳;
(5)一組狀態(tài)寄存器用于表示板卡各子模塊的工作狀態(tài),如FIFO的空/滿、近空/近滿、FIFO寫入/讀出數(shù)據(jù)個(gè)數(shù)。
(6)一組寄存器組用于設(shè)計(jì)數(shù)控振蕩器(NCO)的頻率控制字等。
對(duì)于寄存器讀寫操作實(shí)現(xiàn)較為簡(jiǎn)單,即將來自計(jì)算機(jī)的MWr數(shù)據(jù)包中的地址進(jìn)行譯碼并取出數(shù)據(jù)包中的數(shù)據(jù)完成寄存器寫操作,將MRd數(shù)據(jù)包中的地址進(jìn)行譯碼并以CPld數(shù)據(jù)包返回查詢的寄存器內(nèi)容。
為了將數(shù)據(jù)存取模塊中的海量數(shù)據(jù)上傳至計(jì)算機(jī),不能采用軟件查詢操作方式,而需使用中斷方式。即通過由本板卡發(fā)起的DMA操作,將數(shù)據(jù)存取模塊中的數(shù)據(jù)以MWr數(shù)據(jù)包的方式寫入計(jì)算機(jī)內(nèi)存空間。定義如下狀態(tài)完成DMA操作:
DMA_IDLE:總線空閑
DMA_REQUEST:板卡請(qǐng)求DMA傳輸
DMA_ACK:允許本次DMA傳輸
TX_LENGTH:確定本次傳輸?shù)臄?shù)據(jù)長(zhǎng)度
MWR_REQ:MWr數(shù)據(jù)包desc準(zhǔn)備
MWR_DV:MWr數(shù)據(jù)包數(shù)據(jù)傳輸
MWR_DONE:本次DMA傳輸結(jié)束
DMA_INTERRUPT:所有DMA操作完成產(chǎn)生中斷
DMA_WAIT_INTERRUPT_ACK等待計(jì)算機(jī)軟件處理中斷
利用WinDriver軟件可以簡(jiǎn)化驅(qū)動(dòng)程序的開發(fā),該公司網(wǎng)站有試用版可供使用。該軟件可自動(dòng)生成驅(qū)動(dòng)程序框架,提供可以訪問板卡硬件資源的API,用戶只需調(diào)用API對(duì)板卡固件中實(shí)現(xiàn)的寄存器進(jìn)行讀/寫,即可完成板卡配置和查看板卡狀態(tài)?;镜募拇嫫髯x寫較為簡(jiǎn)單不做介紹,下面簡(jiǎn)單介紹如何由軟件來初始化和完成一次DMA傳輸。
(1)通過讀取板卡狀態(tài)寄存器組中的FIFO寫入數(shù)據(jù)個(gè)數(shù)寄存器,來獲得本次DMA一共需要傳輸?shù)臄?shù)據(jù)字節(jié)數(shù)。
(2)在計(jì)算機(jī)內(nèi)存中分配存儲(chǔ)空間供本次DMA使用。
(3)將分配的內(nèi)存起始地址和待傳輸字節(jié)數(shù)寫入板卡相應(yīng)的寄存器。
(4)板卡根據(jù)DMA基址寄存器和DMA傳輸?shù)淖止?jié)數(shù)寄存器的內(nèi)容來使固件中的DMA狀態(tài)機(jī)開始工作。
(5)當(dāng)所有數(shù)據(jù)上傳完畢后,板卡發(fā)起中斷。
(6)軟件在中斷處理函數(shù)中清除板卡中斷,準(zhǔn)備開始下一次DMA數(shù)據(jù)傳輸。
此板卡可進(jìn)行數(shù)字濾波器、上/下變頻、FFT等算法的硬件仿真測(cè)試,通過外接存儲(chǔ)器的方法增加了板卡的數(shù)據(jù)存儲(chǔ)能力,并通過PCIE協(xié)議將采集到的數(shù)據(jù)轉(zhuǎn)儲(chǔ)到計(jì)算機(jī)內(nèi)存,在計(jì)算機(jī)上可通過對(duì)比MatLab等軟件仿真的結(jié)果與板卡的數(shù)據(jù)處理結(jié)果來分析數(shù)字信號(hào)處理算法的有效性。還可以靈活的修改軟件和固件使其能夠滿足科研項(xiàng)目對(duì)通用數(shù)字信號(hào)處理實(shí)驗(yàn)平臺(tái)的需求。
[1] Altera International Limited.Arria II Device Handbook[J/OL].http://www.altera.com.
[2] Altera International Limited.IP Compiler for PCI Express User Guide[J/OL].http://www.altera.com.
[3] Jungo Ltd.WinDriver.PCI/PCMCIA/ISA Low-Level API Reference[J/OL].http://www.Jungo.com.