基于FPGA的高速實時數(shù)據(jù)采集系統(tǒng)設(shè)計
2.2.1 A/D模塊
本文A/D控制模塊主要就是為了控制ADS8364芯片,提供各個控制信號,以便ADS8364芯片能夠正常進行模數(shù)轉(zhuǎn)換、A/D轉(zhuǎn)換芯片轉(zhuǎn)換后的數(shù)字信號的接收并將這些數(shù)字信號寫入對應(yīng)的FIFO中進行緩存。
輸入引腳:din(15:0):16位A/D模數(shù)轉(zhuǎn)換器轉(zhuǎn)換后的數(shù)字信號的輸入引腳;full(5:0):6路FIFO的滿標(biāo)識引腳,如果該引腳有效則停止往FIFO中寫入數(shù)據(jù),如果該引腳無效則可繼續(xù)向FIFO中寫入數(shù)據(jù),直到該引腳有效為止;ad:開始結(jié)束采集引腳;clk:5 MHz時鐘輸入引腳;rst:復(fù)位引腳。
輸出引腳:dout(1 5:0):16位的數(shù)字信號輸出引腳;wr_en(5:0):6路FIFO的寫使能引腳;xa(2:0):ADS8364的數(shù)據(jù)讀取模式選擇引腳,單通道讀取模式為本設(shè)計系統(tǒng)的讀取數(shù)據(jù)模式;ad clk:5 MHz的ADS8364的時鐘引腳;cs clk:開關(guān)模塊時鐘引腳;hold:控制AD芯片開始采集引腳;wr_clk:FIFO寫時鐘引腳;xcs0:ADS8364芯片片選引腳;xr:ADS8364讀使能引腳;xrs:ADS8364芯片復(fù)位引腳;xw:ADS8 364芯片寫使能引腳,A/D模塊在Modelsim中的仿真圖如圖6所示。本文引用地址:http://www.ex-cimer.com/article/190326.htm
從Modelsim仿真圖可以看出,當(dāng)ADS8364的讀使能信號即xr為上升沿時,則表示通過A/D轉(zhuǎn)換后的數(shù)字信號就轉(zhuǎn)入到相應(yīng)的FIFO中,從而達到數(shù)字信號的緩存作用,為后續(xù)信號實時、大量地傳輸?shù)紻SP進行處理做好了準(zhǔn)備。
2.2.2 FIFO模塊
FIFO(先入先出)既是最先寫入的數(shù)據(jù)也是最先讀出的數(shù)據(jù)的一個堆棧。FIFO具有兩個單一方向的端口,然而沒有像其他存儲器那樣,沒有地址的輸入:一個用于寫,另一個用于讀。FIFO中的數(shù)據(jù)是列隊結(jié)構(gòu),因此,會出現(xiàn)上溢和下溢現(xiàn)象。當(dāng)向一個滿的FIFO中再寫入數(shù)據(jù)時,就會出現(xiàn)上溢,同時如果對一個空的FIFO進行操作時,就會出現(xiàn)下溢。
FIFO由一個雙端口存儲器塊、一個讀端口、一個寫端口和一個控制邏輯模塊組成,存儲器模塊通常采用的是SRAM,但是對某些應(yīng)用也可以使用DRAM。它的結(jié)構(gòu)示意圖如圖7所示。
FIFO是把存儲器結(jié)成一個環(huán),用內(nèi)部的兩個指針來尋址的。FIFO的狀態(tài)并不是看兩個指針的絕對大小,而是根據(jù)他們的相對大小來進行判斷的。一個空的FIFO開始時把讀的指針和寫的指針生成相同的值,寫數(shù)據(jù)時,寫指針增加;讀地址時,讀指針增加。因此,當(dāng)讀指針和寫指針相等時,可能存在兩種情況,即空狀態(tài)和滿狀態(tài)。在不同時鐘域里對FIFO空或滿狀態(tài)的判斷必須遵守的一個原則就是必須保證FIFO為滿的情況下,不能再進行寫操作,在FIFO為空的狀態(tài)下,就不能再進行讀操作,這就是異步FIFO設(shè)計的關(guān)鍵點同樣也是難點。
本文用的是指針附加位比較法,這種方法是給每一個指針的前面多加一個附加位。寫指針:當(dāng)存儲完最后一個數(shù)據(jù)單元后,將向最高位即附加位進位,除最高位外的所有位都將變?yōu)榱悖蛔x指針:當(dāng)讀完最后一個數(shù)據(jù)單元后,也將向最高位進一位。如果兩個地址指針除了最高位外其余位相同時,則表明寫指針比讀指針多循環(huán)了一次,此時馬上停止向FIFO里面再寫入數(shù)據(jù),F(xiàn)IFO存儲器為滿狀態(tài)。如果兩個地址指針?biāo)形煌耆嗤?,則表示寫指針和讀指針具有相同的循環(huán)次數(shù),此時,說明FIFO存儲器為空狀態(tài),此時,就會馬上停止讀取數(shù)據(jù)。
FIFO模塊的輸入端:wdata(15:0):來自A/D的16位寫數(shù)據(jù)端;rclk:瀆數(shù)據(jù)時鐘端;rreq:讀數(shù)據(jù)允許端;rrst_n:讀復(fù)位端;wcl k:寫數(shù)據(jù)時鐘端;wreq:寫數(shù)據(jù)允許端;wrst_n:寫數(shù)據(jù)復(fù)位端。輸出端:rdata(15:0):寫入數(shù)據(jù)總線的讀數(shù)據(jù)端;rempty:讀空端;wfull:寫滿端。本文采用的每一個FIFO的模塊圖如圖8所示。
評論