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