便攜式功率分析儀設(shè)計-----硬件設(shè)計(四)
3.4 FPGA內(nèi)部電路設(shè)計本設(shè)計
硬件電路設(shè)計采用了1片F(xiàn)PGA,芯片型號為Altera公司的EP1C6Q240C8 。其作用主要分為數(shù)據(jù)采集控制和頻率測量控制兩個部分。數(shù)據(jù)采集控制部分用于實現(xiàn)ARM寄存器基接口的配置,通道控制,數(shù)據(jù)采集,觸發(fā)與存儲器讀寫控制等;頻率測量控制部分用于利用前端電路已經(jīng)分頻整形的信號對給定門寬進行計數(shù),從而等到該信號的頻率值。這里先對數(shù)據(jù)采樣部分的FPGA內(nèi)部電路進行介紹,頻率測量部分的介紹見后章。
數(shù)據(jù)采集控制部分的FPGA程序主要完成與ARM芯片接口的的配置工作;對寄存器進行譯碼;控制觸發(fā)電平,實現(xiàn)觸發(fā)功能;FIFO讀寫控制;時鐘頻率選擇;采樣時鐘合成與控制;寄存器讀寫操作。以下分別對各部分的功能進行介紹。
3.4.1地址譯碼電路及控制信號
模擬通道中的衰減控制信號,以及對FIFO狀態(tài)的檢測信號等,都是由ARM芯片對其數(shù)據(jù)、地址總線的讀寫來實現(xiàn)的,這就需要為每個端口分配地址。本設(shè)計中,由于是利用LPC2138的兩個通用I/O口,模擬讀寫控制線,由于有獨立的讀寫標志,因此需要4根地址線譯碼,進行端口讀寫。
FPGA中與ARM芯片(LPC2138)接口的寫操作地址譯碼電路。其中,/WR為ARM芯片的寫使能信號,低有效。當寫外部存儲器時,/WR信號變?yōu)榈?,而?WR信號的上升沿時,ARM外部數(shù)據(jù)、地址總線上的數(shù)據(jù)都是很穩(wěn)定的。而且地址總線上的數(shù)據(jù)比數(shù)據(jù)總線上的數(shù)據(jù)先有效。因此,我們可以先對外部地址總線上的數(shù)據(jù)利用譯碼器進行譯碼,等到/WR信號有效時,利用/WR信號的上升沿對外部數(shù)據(jù)總線上的數(shù)據(jù)進行鎖存,完成對外部存儲器的一次寫操作。
其中,寫寄存器部分主要由74374構(gòu)成,實現(xiàn)寄存器寫操作。送寫的數(shù)據(jù)包括觸發(fā)字、FIFO狀態(tài)控制字、DAC控制字、MAX4141通道選擇字等控制字。
同樣在ARM讀操作中,/RD為ARM芯片的輸出時鐘信號,低有效;當每執(zhí)行一次讀操作時/RD產(chǎn)生一個讀時鐘信號,同時ARM外部數(shù)據(jù)總線上的數(shù)據(jù)在兩個讀時鐘周期內(nèi)有效。而且地址總線上的數(shù)據(jù)比數(shù)據(jù)總線上的數(shù)據(jù)先有效。因此,我們可以先對外部地址總線上的數(shù)據(jù)利用譯碼器進行譯碼,等到/RD讀時鐘信號有效時,選通相應(yīng)的緩沖器,從而完成對外部存儲器的一次讀操作。
其中,讀寄存器部分主要由74244構(gòu)成,完成寄存器讀操作,包括讀取FIFO狀態(tài)字、存儲在FIFO中的ADC采集的數(shù)據(jù)等。
3.4.2數(shù)字觸發(fā)電路
功率測量中,為了得到檢波后脈沖的峰值,需要設(shè)置觸發(fā)電平,獲得信號的峰值。為了避免毛刺干擾的影響,觸發(fā)電路設(shè)計中選用窗口電路的設(shè)計方法。并選用上升沿/下降沿觸發(fā)。具體觸發(fā)電平大小的設(shè)置,根據(jù)于采樣得到信號的峰值,如下圖3-18所示,觸發(fā)電路由兩個比較器、選擇器和觸發(fā)器等組成。觸發(fā)電平triglev小于triglev1,構(gòu)成窗口觸發(fā)的兩個電平。第一路比較器實現(xiàn)觸發(fā)電平triglev和采樣得到的信號值比較,當triglev小于此時的信號值,則第二路經(jīng)過比較器輸出的信號被選通到輸出端。第二路比較器實現(xiàn)觸發(fā)電平triglev1和采樣信號比較,當信號高于triglev1則輸出端置高。因此,trig_or比較器的輸出為采樣信號的整形后信號,在后端的trig_s標志為用戶提供上升沿/下降沿觸發(fā)方式的選擇。從而實現(xiàn)窗口觸發(fā)。
3.4.3數(shù)據(jù)的存儲與控制
A/D采樣出來的數(shù)據(jù),是隨采樣時鐘和被測信號的變化而變化的,要能夠再現(xiàn)被測信號,必須要把每次采集的數(shù)據(jù)存入緩存器中,這里介紹的FIFO就是一個典型的緩存器。FIFO是一個先進先出的存儲器,可同時對存儲空間進行讀寫,沒有地址線,第一個讀出來的數(shù)據(jù)是第一個寫進去的數(shù)據(jù),它有現(xiàn)成的集成芯片。由于EP1C6Q240片內(nèi)有92160bits的存儲空間,因此本設(shè)計采用ALTERA公司提供的宏單元庫MEGA_LPM中提供的FIFO庫文件(LPM_FIFO_DC),將FIFO做在FPGA中。對應(yīng)AD9480的存儲主通道信號采樣值的FIFO存儲深度設(shè)為1024,單位為8bits,生成的FIFO如圖3-19所示。
生成的FIFO有一個寫使能信號wrreq,一個寫時鐘信號wrclk,一個讀使能信號rdreq,一個讀時鐘信號rdclk,一個清除端aclr,8bits數(shù)據(jù)輸入端data[7……0]和8bits數(shù)據(jù)輸出端q[];同時還有兩個狀態(tài)端:wrfull(FIFO滿)和rdempty(FIFO空),F(xiàn)IFO被寫滿時wrfull=1,當FIFO被讀空時rdempty=1.如圖3-19中還使用到一個數(shù)據(jù)輸出端wrusedw[9..0],該端口在每一個FIFO寫時鐘到來是更新當前FIFO以寫入數(shù)據(jù)數(shù)量,這將在做預(yù)觸發(fā)方式時使用。
這里之所以不用一般并行RAM而用FIFO主要有如下兩個原因:一方面是它不用地址線,便于電路的連接和控制;更重要的是它可以同時進行讀寫操作,這樣在做預(yù)觸發(fā)功能時是非常方便的。雖然用并行RAM將地址計數(shù)器做成一個環(huán)行計數(shù)器也可以實現(xiàn),這樣就增加了FPGA內(nèi)部的資源,也使電路復(fù)雜化了。[!--empirenews.page--]
本設(shè)計在FPGA中用AHDL語言編寫了對FIFO復(fù)位及讀寫總體控制程序,如下:
BEGIN
DEFAULTS
fifo_wclk=gnd;fifo_rclk=gnd;
trig_clr=vcc;fifo_/wen=vcc;
fifo_/ren=vcc;fifo_/reset=vcc; //控制器默認狀態(tài),F(xiàn)IFO讀寫無效
END DEFAULTS;
IF workstate==0 THEN //通道采集關(guān)閉
fifo_/wen=vcc; //關(guān)閉FIFO寫使能
……//FIFO讀時鐘由ARM提供
ELSIF (workstate==1) THEN //通道采集開啟
fifo_/ren=gnd;
fifo_/wen=gnd; //FIFO讀寫使能同時有效
……
由程序可見,當workstate=0時,可由程序控制對FIFO進行復(fù)位,或者FIFO不復(fù)位,但是此時可對FIFO進行讀操作。一般開始新一輪的采數(shù)之前要對FIFO進行一次復(fù)位,以確保FIFO的狀態(tài)正常且為空。當FIFO存滿后,也要用到此狀態(tài)將FIFO中的數(shù)據(jù)讀出。當workstate=1時,F(xiàn)IFO讀寫均使能:一般在采數(shù)階段要用workstate=1狀態(tài)。本設(shè)計在FPGA中對FIFO復(fù)位及讀寫的觸發(fā)控制采用了兩種模式:
一種為自動觸發(fā)模式,即,當調(diào)整數(shù)字觸發(fā)電路的觸發(fā)電平使其低于采樣信號最大值,且高于其最小值時(既數(shù)字觸發(fā)器觸發(fā)時),液晶屏顯示信號波形由觸發(fā)電平所在位置附近啟始,保持顯示信號的穩(wěn)定;當不觸發(fā)時,則不對FIFO存儲數(shù)據(jù)加以限制。實現(xiàn)方法如上圖以及數(shù)字觸發(fā)電路原理圖所示,在FIFO清空控制端加入一個trig_fifo控制信號并將其與正常FIFO清空控制信號相或,trig_fifo信號由數(shù)字觸發(fā)電路產(chǎn)生,信號特點是在觸發(fā)出現(xiàn)時產(chǎn)生短暫的低電平,用于對FIFO清空數(shù)據(jù),使FIFO在觸發(fā)到來后,其內(nèi)部只保留觸發(fā)點之后的數(shù)據(jù)。
另一種為正常觸發(fā)方式,即,首先在觸發(fā)信號到來前FIFO存儲一段觸發(fā)前的數(shù)據(jù)并不斷刷新,等待觸發(fā)信號到來,這既是預(yù)觸發(fā)。觸發(fā)信號到來后FIFO停止刷新前端預(yù)觸發(fā)數(shù)據(jù),直接存儲采樣數(shù)據(jù);當觸發(fā)信號沒到來是系統(tǒng)則一直等待觸發(fā)。如下:
if (clk'event and clk='1') then
if fifodepth >="0010000000" and trig ='0' then
cntrl<='1';
elsif fifodepth >="0010000000" and trig ='1' then
cntrl<='0';
else
cntrl<='0';
end if;
……
程序中,cntrl信號是讀時鐘控制信號。當cntrl=0時,控制關(guān)閉FIFO讀時鐘,當cntrl=1時,F(xiàn)IFO的讀寫時鐘相同。由程序可以看出,F(xiàn)IFO首先直接寫入128個數(shù)據(jù)(暫定為FIFO深度的10%),此時FIFO讀時鐘關(guān)閉;當FIFO寫入數(shù)據(jù)達到或超過128個時,打開讀時鐘,此時FIFO中存入一個數(shù)的同時也讀出一個數(shù),F(xiàn)IFO已存入的128個數(shù)據(jù)將不斷被刷新;若信號已經(jīng)觸發(fā)時,這時FIFO沒有讀時鐘,只有寫時鐘,也就是說FIFO處于只寫的狀態(tài),進行數(shù)據(jù)存儲。這樣就實現(xiàn)了預(yù)觸發(fā)。
當被采樣信號為連續(xù)波信號時,自動觸發(fā)模式能夠很好的穩(wěn)定顯示的波形,方便用戶觀察,但是由于自動觸發(fā)時FIFO里存儲的只能是觸發(fā)之后的數(shù)據(jù),加之各個模塊的延時導(dǎo)致不能顯示出觸發(fā)時刻以及觸發(fā)之前一段時間的數(shù)據(jù),當被測信號是窄脈沖信號時將由于不能完整顯示脈沖信號,而使用戶不能了解被測信號的全部特征,而且當脈沖信號寬度較窄時,可能因觸發(fā)到FIFO存儲控制信號的延時導(dǎo)致脈沖信號數(shù)據(jù)無法被FIFO存儲。所以在被測信號是窄脈沖信號的,應(yīng)使用正常觸發(fā)方式,利用預(yù)觸發(fā),保證觸發(fā)時刻的信號數(shù)據(jù)能夠顯示出來。
3.4.4時基電路的實現(xiàn)
時基電路是顯示示波部分的重要組成部分,它的作用主要是提供AD的采樣時鐘和FIFO的寫時鐘。
系統(tǒng)源時鐘是由外部晶振提供的標準20MHz頻率信號。由于250MHz時鐘直接分頻產(chǎn)生200MHz時鐘將較為繁瑣,所以我們利用ALTPLL鎖相環(huán)模塊,分別產(chǎn)生250MHz,200MHz頻率信號。將200MHz時鐘經(jīng)過由四個74390和兩個T觸發(fā)器構(gòu)成的二分頻、四分頻器組成的分頻網(wǎng)絡(luò)產(chǎn)生所需要的AD采樣頻率和FIFO寫時鐘。在功率分析儀的控制面板上有一個時基控制按鈕sec/div,不同的時基檔位下對應(yīng)著不同的采樣頻率。每選擇不同的時基檔位時,時鐘選擇信號clk_s0~clk_s3就會輸出不同的值以選擇與檔位相應(yīng)的采樣時鐘;當時基控制設(shè)置在最高采樣率時選擇250MHz采樣時鐘。具體的時基檔位與采樣時鐘以及每個檔位下存儲深度的對應(yīng)關(guān)系如表3-1.





