基于FPGA的數(shù)據(jù)采集系統(tǒng)的設(shè)計與實現(xiàn)
2 數(shù)據(jù)采集系統(tǒng)軟件設(shè)計方案
FPGA軟件設(shè)計方案中采用了自頂向下的設(shè)計方法,運用Verilog HDL語言來設(shè)計數(shù)字系統(tǒng),分別完成數(shù)字系統(tǒng)內(nèi)部各個子模塊的設(shè)計。數(shù)據(jù)采集系統(tǒng)結(jié)構(gòu)及模塊間的連接示意圖如圖4所示。
由圖4可見,系統(tǒng)主要由3個模塊組成。它們分別是A/D接口adc.v模塊、USB接口usb.v模塊以及頂層top.v模塊,其中在頂層top.v模塊中,完成了對其他兩個模塊的調(diào)用,使它們拼接成為一個完整的系統(tǒng)。其中鎖相環(huán)PLL_1和PLL_2分別給ade.v模塊和usb.v模塊提供時鐘源。
2.1 FPGA控制A/D芯片接口的軟件設(shè)計
在adc.v模塊中,需要完成FPGA對TLV1572的接口邏輯代碼的設(shè)計,其實質(zhì)就是在TLV1572的時序分析的基礎(chǔ)上來設(shè)計邏輯代碼,使得FPGA能夠按照其時序要求完成對A/D芯片的各種控制,包括提供給TLV1572的串行時鐘信號信號ADC_CLK、CS片選信號ADC_CSn以及從TLV1572中讀取出轉(zhuǎn)換完成的串行數(shù)據(jù)S_DATA。
TLV1572的時序圖如圖5所示。
從時序圖可見,A/D芯片的轉(zhuǎn)化過程是在當CS為低電平后,由SCLK的上升沿發(fā)起的,輸出的頭六位二進制數(shù)字均為“0”,此時A/D芯片正處于采樣階段,數(shù)字無效,這六位無效的二進制數(shù)之后,A/D轉(zhuǎn)換完成后的二進制數(shù)據(jù)在SCLK的上升沿被送到總線上,這時,作為系統(tǒng)主控制芯片的FPGA應(yīng)當去采樣總線上的數(shù)據(jù),得到轉(zhuǎn)換后的結(jié)果。
2.2 FPGA控制USB2.0芯片的軟件設(shè)計
在usb.v模塊中,需要完成FPGA對CY7C68013A的接口邏輯代碼的設(shè)計和異步FIFO模塊的設(shè)計。其中,對CY7C68013A的接口邏輯代碼主要是完成對CY7C68013A芯片的端點FIFO的各種控制,包括16位的數(shù)據(jù)信號FIFO_DATA[15:0]、2位端點FIFO選擇信號FIFO_ADDR[1:0]、端點FI-FO滿標志位信號FIFO_Full、端點FIFO寫使能信號FIFO_WR_en。因為adc.v模塊和芯片外部的CY7C68013A工作在不同的時鐘域內(nèi),故異步FIFO模塊設(shè)計部分設(shè)計的目的除了是要完成從ade.v模塊讀取過來數(shù)據(jù)的緩沖,另外就是需要解決異步時鐘域數(shù)據(jù)傳輸可能出現(xiàn)的亞穩(wěn)態(tài)問題。
具體來說,F(xiàn)PGA在工作時需要不斷向CY7C68013A的端點FIFO寫入數(shù)據(jù),而FPGA與CY7C68013A之間的工作模式屬于同步方式,兩者都由PLL _2模塊提供40 MHz的時鐘信號進行工作,那么它們之間的關(guān)系就是同步Slave FIFO的寫操作,由FPGA向CYTC68013A中寫入數(shù)據(jù)。
在Verilog HDL程序設(shè)計中,需要設(shè)計一個狀態(tài)機來完成同步Slave FIFO寫的時序,寫時序如下;1)IDLE:當寫事件發(fā)生時,進狀態(tài)1;2)狀態(tài)1:使FIFOADR[1:0]指向IN FIFO,進狀態(tài)2;3)狀態(tài)2:如果端點FIFO滿,在當前狀態(tài)等待,否則進狀態(tài)3;4)狀態(tài)3:驅(qū)動數(shù)據(jù)到數(shù)據(jù)線上,使SLWR有效,持續(xù)一個IFCLK周期,進狀態(tài)4;5)狀態(tài)4:如需傳輸更多的數(shù),進狀態(tài)2,否則進入IDLE狀態(tài)。
該狀態(tài)轉(zhuǎn)換的狀態(tài)圖如圖6所示。
評論