基于FPGA和USB2.0的高速數(shù)據(jù)采集系統(tǒng)
2.3 接口電路
2.3.1 FPGA內(nèi)的ADC接口模塊
MAX1425和74HC4051的控制信號(hào)都由FPGA產(chǎn)生,接口電路如圖4所示。本文引用地址:http://2s4d.com/article/188574.htm
FPGA的工作時(shí)鐘為60 MHz,該時(shí)鐘經(jīng)過(guò)分頻后,提供20 MHz給MAX1425作為工作時(shí)鐘,同時(shí)也作為FP-GA內(nèi)其他邏輯的工作時(shí)鐘。由FPGA內(nèi)狀態(tài)機(jī)控制,當(dāng)CS為低和ADC_Convst為高時(shí),MAX1425進(jìn)入采樣保持狀態(tài)。當(dāng)Clock的第一個(gè)上升沿到來(lái),MAX1425開(kāi)始轉(zhuǎn)換。RD輸出為低時(shí),MAX1425把轉(zhuǎn)換結(jié)果放到數(shù)據(jù)總線上,F(xiàn)PGA開(kāi)始讀入10位數(shù)據(jù)(FD[15:0]中的10~15六位數(shù)據(jù)線懸空,使數(shù)據(jù)線和A/D的位數(shù)匹配)。FPGA控制寄存器的Sel[2:O]信號(hào)作為74Hc4051的通道選擇信號(hào),從8路模擬輸入信號(hào)中選擇1路作為MAX1425的輸入。完成一次轉(zhuǎn)換后,當(dāng)ADC_Convst:再次為高時(shí),開(kāi)始下一輪轉(zhuǎn)換。
2.3.2 FPGA內(nèi)的USB接口模塊
圖5是Slave模式下CY7C68013與FPGA的連接示意圖。中間是FPGA中USB接口模塊部分對(duì)應(yīng)的信號(hào)。
2.3.3 FPGA內(nèi)的USB接口控制狀態(tài)機(jī)
FPGA內(nèi)USB接口控制狀態(tài)機(jī)的狀態(tài)轉(zhuǎn)移圖如圖6所示。共有6個(gè)狀態(tài),復(fù)位信號(hào)的模式設(shè)置為異步復(fù)位。狀態(tài)機(jī)主要分為讀、寫(xiě)兩部分:讀取EP2中所包含的命令,存到FPGA的控制寄存器組中;將FPGA的FIFO中的數(shù)據(jù)讀出,寫(xiě)入EP6端點(diǎn)緩沖區(qū)。
該狀態(tài)機(jī)工作過(guò)程為:
①系統(tǒng)加電或復(fù)位后,狀態(tài)機(jī)進(jìn)入空閑狀態(tài)(idle)。
②在空閑狀態(tài)下,當(dāng)EP2不為空時(shí)進(jìn)入read_0狀態(tài),從EP2中讀出PC機(jī)傳來(lái)的控制命令。隨后進(jìn)入read_1狀態(tài),把命令存到FPGA內(nèi)控制寄存器中,并把FPGA內(nèi)的FIFO清空(fifo_ach1='1'),以準(zhǔn)備存儲(chǔ)采樣數(shù)據(jù)。之后再回到idle狀態(tài)。
③在空閑狀態(tài)下,當(dāng)EP2為空(FX2_empty='0'),而FPGA的FIFO不為空(empty='0'),且EP6不滿時(shí),進(jìn)入write_0狀態(tài)。之所以要看EP2是否為空,是想優(yōu)先處理PC機(jī)通過(guò)EP2傳來(lái)的命令。在write_0狀態(tài)下,選中對(duì)CY7C68013的EP6操作(ADDR=2'h2),同時(shí)從FPGA內(nèi)部的FIFO中讀出一個(gè)數(shù)據(jù)。之后進(jìn)入write_1狀態(tài),把數(shù)據(jù)寫(xiě)入CY7C68013。然后進(jìn)入write_2狀態(tài),write_2狀態(tài)的輸出與idle狀態(tài)相同,目的是提供一個(gè)時(shí)鐘周期的延遲。因?yàn)镕PGA工作于60 MHz的時(shí)鐘下,比CY7C68013快,所以加入一個(gè)延遲以保證可靠的數(shù)據(jù)傳輸。
評(píng)論