高速數(shù)字記錄系統(tǒng)中光纖下載卡的邏輯設(shè)計
數(shù)據(jù)記錄及下載系統(tǒng)
如圖1所示,雷達(dá)信號預(yù)處理機將采樣到的信號進(jìn)行一系列處理工作,最后形成一路或多路的光纖數(shù)據(jù),送交外面的兩個分支。一個分支是送交雷達(dá)信號處理機,進(jìn)行真正的雷達(dá)信號實時分析處理。這個分支我們不關(guān)心。另一個分支是通過RocketIO傳送至一塊或多塊數(shù)據(jù)記錄板。
圖1 數(shù)據(jù)記錄及下載系統(tǒng)框圖
數(shù)據(jù)記錄在現(xiàn)場進(jìn)行,存儲到記錄設(shè)備后,有兩個用途,一是回放,即回放到雷達(dá)信號處理機中,復(fù)現(xiàn)進(jìn)入時的情景;另一種是下載,即下載到本地微機上,對數(shù)據(jù)進(jìn)行檢查和處理。下載過程一般在實驗室進(jìn)行,下載方式有兩種,一種是網(wǎng)絡(luò)下載,另一種是光纖下載。
網(wǎng)絡(luò)下載的缺點是速度慢,受網(wǎng)絡(luò)帶寬和芯片處理能力的限制,其傳輸速率一般為30~60Mb/s。優(yōu)點是不需要額外的設(shè)備,只要設(shè)備支持網(wǎng)絡(luò)通信即可。本地微機作為主控機,控制下載并存放下載的數(shù)據(jù)。
光纖下載是將記錄設(shè)備的光口和專用的光纖下載卡互連,數(shù)據(jù)傳輸至光纖下載卡后,然后通過PCI總線轉(zhuǎn)存至主機硬盤上。光纖下載的優(yōu)點是下載速度快,采用Xilinx FPGA提供的高速串行鏈路IP核RocketIO,其下載速度可以達(dá)到2.5Gb/s,去掉開銷也能達(dá)到2Gb/s,即250Mb/s,比網(wǎng)絡(luò)下載提高了近一個數(shù)量級。缺點是普通微機沒有光口,需要額外的光纖下載設(shè)備,插入本地微機,和記錄設(shè)備對接,完成光纖下載。如圖1中的粗黑的光纖和64位/66M的PCI總線就是供光纖下載之用。
光纖下載卡結(jié)構(gòu)
圖2為光纖下載卡結(jié)構(gòu)圖。如圖2所示,光纖下載設(shè)備的和核心為一塊Xilinx的V2 pro系列FPGA,其外圍有兩組DDR,用于數(shù)據(jù)的緩存。為了和外部交換板的光口互連,還有一個光模塊。下載設(shè)備的另一端通過PCI總線和主機相連,主機可以是X86處理器或PPC處理器。
圖2 光纖下載卡結(jié)構(gòu)
可見下載設(shè)備的硬件結(jié)構(gòu)比較簡潔,其復(fù)雜之處在于FPGA內(nèi)部的邏輯的控制。在FPGA設(shè)計中,除需要例化MGT核,PCI核外還要設(shè)計控制邏輯進(jìn)行數(shù)據(jù)傳輸?shù)目刂啤?/P>
數(shù)據(jù)傳輸一般來說有三種方式,包括程序直接控制方式、中斷控制方式和DMA方式。
程序直接控制方式就是由用戶進(jìn)程來直接控制內(nèi)存或CPU和外圍設(shè)備之間的數(shù)據(jù)傳送。它的優(yōu)點是控制簡單,缺點是CPU和外圍設(shè)備只能串行工作,CPU的大部分工作時間浪費在對外部數(shù)據(jù)的讀取過程中,其利用率很低。
中斷控制方式是外圍設(shè)備收到數(shù)據(jù)后,向CPU發(fā)送中斷。CPU收到中斷后,再控制數(shù)據(jù)在其內(nèi)存和外圍設(shè)備之間的傳輸。它的優(yōu)點是大大提高了CPU的利用率且能支持多道程序和設(shè)備的并行操作。它的缺點是由于數(shù)據(jù)緩沖寄存器比較小,如果中斷次數(shù)較多,仍然會占用大量CPU時間。在外圍設(shè)備較多時,由于中斷次數(shù)的急劇增加,可能造成CPU無法響應(yīng)中斷而出現(xiàn)中斷丟失的現(xiàn)象。如果外圍設(shè)備速度比較快,可能會出現(xiàn)CPU來不及從數(shù)據(jù)緩沖寄存器中取走數(shù)據(jù)而丟失數(shù)據(jù)的情況。
DMA方式是在外圍設(shè)備和內(nèi)存之間開辟直接的數(shù)據(jù)交換通路進(jìn)行數(shù)據(jù)傳送。外圍設(shè)備通過通用總線直接訪問內(nèi)存,將其收到的數(shù)據(jù)寫入內(nèi)存或?qū)⒁l(fā)送的數(shù)據(jù)讀出內(nèi)存。上述操作完成后,再通過中斷的方式通知CPU,由CPU進(jìn)行后繼的處理。它的優(yōu)點是除了在數(shù)據(jù)塊傳送開始時需要CPU的啟動指令,在整個數(shù)據(jù)塊傳送結(jié)束時需要發(fā)中斷通知CPU進(jìn)行中斷處理之外,不需要CPU的干涉。
可見,下載設(shè)備和微機之間通過主DMA方式進(jìn)行通信,可以大大的提高數(shù)據(jù)傳輸速率。66MHz/64位寬的PCI總線在理想情況下可以提供近500Mb/s的傳輸速率,可以比較容易的達(dá)到250Mb/s的光纖下載速度,所以下載的瓶頸在于硬盤的讀寫速度。普通硬盤的平均讀寫速度在60Mb/s,采用4個盤一組的陣列盤,差不多可以達(dá)到60×4=240Mb/s的速度。
由上述數(shù)據(jù)可以看出,采用64位的PCI總線,用主DMA方式進(jìn)行數(shù)據(jù)傳輸,下載的最大速度將大于200Mb/s。
FPGA邏輯內(nèi)部結(jié)構(gòu)???
邏輯總體結(jié)構(gòu)圖如圖3所示,數(shù)據(jù)流方向為:串行的光纖數(shù)據(jù)首先進(jìn)入ATM(Aurora Transmit Module)模塊,由ATM模塊內(nèi)部的Xilinx RocketIo核將串行數(shù)據(jù)轉(zhuǎn)換成并行32位數(shù)據(jù)。并行數(shù)據(jù)經(jīng)過FIFO進(jìn)行緩存后,進(jìn)入PING64模塊。Pin64模塊內(nèi)部邏輯產(chǎn)生主DMA時序,并將FIFO數(shù)據(jù)送上內(nèi)部總線。Pcim_lc將內(nèi)部總線信號轉(zhuǎn)換成PCI總線信號并送出去。各個模塊的功能具體如下。
圖3 FPGA內(nèi)部結(jié)構(gòu)圖
● Pcim_lc模塊為Xilinx提供的PCI64位的軟核;
● Ping64模塊包括和PCI64軟核的接口以及主DMA處理邏輯;
● ATM為和光纖輸入的接口模塊,采用Xilinx提高的Aurora協(xié)議對數(shù)據(jù)進(jìn)行控制,ATM只需提高用戶邏輯和Aurora的接口即可;
● CRM為時鐘和復(fù)位信號產(chǎn)生模塊。
ATM模塊和ping64模塊之間接口為標(biāo)準(zhǔn)FIFO接口,設(shè)置此FIFO的目的有兩個:一是時鐘域轉(zhuǎn)換,外部輸入的主時鐘為125MHz,而RocketIO采用32位模式,在2.5Gb/s的速率下,邏輯的主工作時鐘為62.5MHz。而ping64模塊采用PCI總線提供的PCI66MHz時鐘。兩者時鐘不在同一個時鐘域,所以用異步FIFO將時鐘域隔離。二是數(shù)據(jù)的緩存。根據(jù)FIFO的almost full信號產(chǎn)生反壓信號,送交RocketIO,使對端收到反壓信號后,停止發(fā)送數(shù)據(jù)。
所用Xilinx的RocketIO核其實為aurora 核,這是一個雙向串行數(shù)據(jù)通信鏈路控制器,能將反壓信號隨數(shù)據(jù)一起發(fā)往對端。其接口相對簡單,有兩種模式,一種是幀模式,另一種是流模式,可以根據(jù)應(yīng)用靈活選擇。在本項目中采用的是幀模式。
主DMA處理的軟硬件流程
在DMA處理中,采用內(nèi)存乒乓操作來提高系統(tǒng)的吞吐量。軟件中的驅(qū)動采用Windriver開發(fā),其工作主要分三部分。
1? 初始化,包括申請內(nèi)存,配置DMA列表,配置DMA相關(guān)寄存器,啟動邏輯開始工作。
2? 中斷處理函數(shù)。在此函數(shù)中,屏蔽中斷,并啟動DPC處理。
3? DPC(延遲過程調(diào)用),根據(jù)邏輯提供的狀態(tài)標(biāo)識,將相應(yīng)的內(nèi)存塊的數(shù)據(jù)搬移至硬盤中,然后取消中斷屏蔽,復(fù)位狀態(tài)標(biāo)識,使系統(tǒng)可以接收下一個中斷。
數(shù)據(jù)的搬移不在中斷處理函數(shù)中完成,是由于中斷處理函數(shù)具有較高的優(yōu)先級,如果將耗時的數(shù)據(jù)搬移放在這里進(jìn)行,會明顯降低系統(tǒng)的響應(yīng)時間。而DPC的優(yōu)先級在所有的外部中斷之下,不會因此而降低對其他外部中斷的響應(yīng)速度。
主DMA邏輯的主要工作是讀取驅(qū)動配置的DMA列表,根據(jù)列表中的內(nèi)存地址和長度,對內(nèi)存進(jìn)行主DMA寫操作。操作完成后,通過置位狀態(tài)標(biāo)識,通知驅(qū)動來讀取數(shù)據(jù)。狀態(tài)機轉(zhuǎn)移如圖4所示。
圖4 DMA主狀態(tài)機轉(zhuǎn)移圖
● IDLE狀態(tài):在此狀態(tài)下,等待軟件的使能信號。使能信號有效則進(jìn)入JUDGE狀態(tài),否則等待。
● JUDGE狀態(tài):在此狀態(tài)下,判斷乒乓標(biāo)志。根據(jù)乒乓標(biāo)志決定本次處理應(yīng)該選擇哪一個內(nèi)存塊。
● RD_TBL狀態(tài): 發(fā)出讀DMA列表的地址信息。然后進(jìn)行GET_TBL狀態(tài)接收列表數(shù)據(jù)。
● GET_TBL狀態(tài):在此狀態(tài)下,讀取DMA列表數(shù)據(jù),并將列表中的內(nèi)存地址和長度信息寫入相應(yīng)的寄存器中。然后進(jìn)入REQ狀態(tài)。
● REQ狀態(tài):在此狀態(tài)下,對異步FIFO的空信號進(jìn)行判斷。如果非空,則進(jìn)入PROCESS狀態(tài),否則在REQ狀態(tài)等待。
● PROCESS狀態(tài):在此狀態(tài)下,進(jìn)行數(shù)據(jù)傳輸。由于PCI主DMA對burst長度有限制,當(dāng)傳輸完預(yù)定長度的數(shù)據(jù)后,首先對本次長度進(jìn)行判斷。如果未完則進(jìn)入REQ狀態(tài)等待,否則判斷本列表是否最后一個列表。如果是,則進(jìn)行IDLE狀態(tài)。否則進(jìn)入RD_TBL狀態(tài)讀取下一條DMA列表表項的數(shù)據(jù),繼續(xù)處理。
評論
查看更多