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