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