基于CPCI總線的FPGA加載設計
4.2 參數(shù)模塊
由于以突發(fā)模式下載到Spartan-3E 的數(shù)據(jù)是以32 bit 為單位的,且三片F(xiàn)PGA 需要的參數(shù)各不相同,因此需要對下載到Spartan-3E 的數(shù)據(jù)進行整理分類,再根據(jù)不同需求,下載到三片F(xiàn)PGA 中去。
狀態(tài)參數(shù)的上傳與下載流程相反。
4.3 FPGA 加載模塊
DMA 方式下載到Spartan-3E 的32 bit數(shù)據(jù)在塊內(nèi)是連續(xù)的,但是塊與塊之間是不連續(xù)的,為了保證FPGA 加載過程不中斷,在Spartan-3E 中需要一個FIFO 將數(shù)據(jù)進行緩沖,從而保證BIT 數(shù)據(jù)流的連續(xù)性。為了確保加載數(shù)據(jù)在FIFO 中讀不空,在設計中當FIFO 中的可讀的數(shù)據(jù)大于一定門限的時候觸發(fā)加載邏輯,同時為了防止FIFO 寫滿導致丟失數(shù)據(jù),當FIFO中可讀的數(shù)據(jù)到達一定門限后,就不再請求DMA.通過這樣的保護,可以保證BIT 流加載文件在加載邏輯開始后可以連續(xù)不斷的輸入給FPGA,直到FPGA 加載完成。
工控機按照32 bit 讀取BIT 文件存在Byte 翻轉(zhuǎn)的情況,下載到Spartan-3E 后需要再把32 bit的數(shù)據(jù)進行翻轉(zhuǎn)過來,只需要用FIFO 讀時鐘32 倍頻的時鐘進行計數(shù),將FIFO 讀出的32 bit 數(shù)據(jù)按照翻轉(zhuǎn)的對應關(guān)系順序送出讀取即可滿足要求。
為了區(qū)分3片F(xiàn)PGA 的加載,設計兩比特的標志位,用以區(qū)分不同的FPGA.在加載FPGA 之前先通過軟件先下載兩比特標志位,配置模塊根據(jù)標志位,切換數(shù)據(jù)流向,從而可以配置3 片不同的FPGA.
5 軟件設計
PCI9656 芯片的驅(qū)動程序從其配套的SDK 開發(fā)包中獲取,工控機的控制軟件由C++語言完成,開發(fā)環(huán)境基于Borland 公司的C++Builder6.
在PLX公司提供的軟件開發(fā)包中,含有PCI9656與上位機通信的動態(tài)庫文件Plxapi.dll.該文件包含了眾多函數(shù),可以直接調(diào)用。在設計中用PlxIoPortWrite 和PlxIoPortRead 來實現(xiàn)突發(fā)數(shù)據(jù)的下載和上傳,用PlxDmaBlockTransfer來實現(xiàn)FPGA的配置數(shù)據(jù)流的下載和大量實時數(shù)據(jù)的上傳。
6 結(jié)語
本文提出了基于CPCI 總線的FPGA 動態(tài)加載的設計與實現(xiàn),在40 M 的工作時鐘下,在對同一塊FPGA 進行加載時,加載速度可以達到JTAG 加載方式的10 倍之多。該設計可以對三片F(xiàn)PGA 芯片進行快速穩(wěn)定的下載,與常規(guī)PROM 加載方式相比有著快速靈活的優(yōu)勢,對加載速度和實時性要求比較高的系統(tǒng)設計中,具有很強的可操作性和可借鑒性。
評論