吳 軍, 沈珊瑚, 蘆浩宇
(杭州師范大學(xué)杭州國際服務(wù)工程學(xué)院,浙江 杭州 311121)
?
基于NIOS II軟核的數(shù)字頻率計實現(xiàn)
吳軍, 沈珊瑚, 蘆浩宇
(杭州師范大學(xué)杭州國際服務(wù)工程學(xué)院,浙江 杭州 311121)
本文利用Cyclone IV E 系列FPGA芯片內(nèi)部資源及NIOS II軟核設(shè)計完成一款等精度數(shù)字頻率計,其測頻功能利用Verilog語言實現(xiàn),對測頻模塊得到的各項數(shù)據(jù)利用C語言編程實現(xiàn),并通過實時運算將數(shù)據(jù)傳送給液晶模塊.本設(shè)計具有測量帶寬大、實現(xiàn)面積小、數(shù)據(jù)傳輸可靠穩(wěn)定等特點,并且由于各部分相互獨立,兩兩之間不相互依賴,系統(tǒng)靈活高效.
NIOS II軟核,FPGA,SOPC,數(shù)字頻率計
數(shù)字頻率計是一種將被測信號的頻率用十進制數(shù)字顯示的數(shù)字測量儀器,數(shù)字頻率計主要用于測量正弦信號、方波信號、脈沖信號以及其它在單位時間內(nèi)變化的物理量等的頻率或周期,也可以用于對這些被測信號的占空比進行測量,或者對其進行計數(shù),以達到計時的目的[1-2].
早期的頻率計采用的是分立式元件,其設(shè)計的周期時間長,而且出來的成品功耗高、體積大、穩(wěn)定性也差,在精度上也得不到保證.中期的頻率計功耗開始降低,體積也大大減小,穩(wěn)定性也得到了提高,最重要的是在精度上有了較大的改善,但是由于數(shù)字頻率計在電路設(shè)計上仍是復(fù)雜困難的,所以同樣導(dǎo)致設(shè)計周期時間長、測量頻率的范圍有限和靈活性差等問題.在2004年,Altera公司推出了基于FPGA器件之上的NIOS處理器,它是一款由用戶自定義的32位RISC嵌入式處理器,能夠自由分配RAM和ROM的大小,用戶通過SOPC Builder[3-5]工具選擇最合適的CPU、外設(shè)接口和存儲接口而不必改動電路板的設(shè)計,可以針對某一特定的功能而進行優(yōu)化改造,在真正意思上實現(xiàn)了集成電路硬件的軟設(shè)計,大大節(jié)省了設(shè)計的成本和周期,同時也提高了電路設(shè)計的靈活性和可移植性,為現(xiàn)代工業(yè)的生產(chǎn)帶來了極大的方便[6-8].
本設(shè)計是一款基于NIOS II處理器的數(shù)字頻率計.其測量要求是對于2.5~5V的脈沖信號:所測量的頻率范圍在1~400MHz,其誤差不超過10-4;所測量的占空比范圍在10%~90%(2MHz之內(nèi)),其誤差不超過10-1.
本設(shè)計的創(chuàng)新特點如下:1) 采用32位的計數(shù)器,大大增加了測量范圍,其理論測量范圍可達4GHz;2) 采用NIOS II軟核計算和處理計數(shù)器的各項數(shù)據(jù),在很大程度上節(jié)省了芯片內(nèi)部資源;3) 采用NIOS II軟核控制液晶,增加了數(shù)據(jù)傳輸?shù)目煽啃耘c穩(wěn)定性.
1.1頻率計整體方案原理
圖1 計數(shù)法測頻原理Fig. 1 Frequency measurement by counting method
本設(shè)計選擇采用計數(shù)法來實現(xiàn)頻率計的設(shè)計.計數(shù)法測頻就是在閘門單位時間內(nèi)對頻率信號的周期個數(shù)進行計數(shù).其原理可用圖1來說明:
假設(shè)a為脈沖信號,其周期為TA;b為閘門信號,其閘門時間為T;c表示計數(shù)的結(jié)果,當(dāng)閘門信號由低電平翻轉(zhuǎn)為高電平時開始對a進行計數(shù),若計數(shù)的結(jié)果為N;那么理論上它們?nèi)咧g存在著如下關(guān)系:
N=T/TA
(1)
但實際上由于閘門時間T和脈沖信號的周期時間TA并不存在關(guān)系,也即無法確定閘門時間T就是脈沖信號周期TA的整數(shù)倍,所以理論上算出來的計數(shù)結(jié)果N和實際中的計數(shù)結(jié)果有計數(shù)出入.
假設(shè)△t1是閘門信號開啟時間到首個計數(shù)脈沖上升沿的時間間隔,△t2是閘門信號關(guān)閉時間到最后一個脈沖信號上升沿的時間間隔,那么在閘門信號的有效計數(shù)時間內(nèi),存在如下關(guān)系:
T=N*TA+ △t1-△t2=(N+△N)*TA
(2)
其中
△N=(△t1-△t2)/TA
(3)
從式(2)可以看出,在閘門有效時間內(nèi)得到的計數(shù)結(jié)果理論值和實際值存在著偏差,偏差值△N的存在是由于系統(tǒng)的工作時間、閘門信號的開啟時間與被測信號的上升沿之間并不一定同步而導(dǎo)致的,被測信號上升沿出現(xiàn)在閘門時間內(nèi)的不確定性決定了△N出現(xiàn)的必然性.當(dāng)閘門時間T接近或等于脈沖周期TA的整數(shù)倍時,△N的絕對值取到最大值,即△N的取值只能在±1之間.所以脈沖計數(shù)的最大量化誤差(絕對誤差)為:
△N=±1
(4)
最大相對誤差為:
△N/N=±1/N
(5)
以上就是對脈沖計數(shù)法測頻的原理分析和誤差分析,但在實際的項目實踐中,往往是根據(jù)被測信號頻率的大小,直接劃分成為直接測頻法和間接測頻法(周期測頻法),以及定制閘門時間的大小,以減小量化誤差,使誤差在允許的范圍之內(nèi).
在實際的應(yīng)用中,當(dāng)被測信號的頻率較高時,采用直接測頻法,當(dāng)被測信號的頻率較低時,采用間接測頻法,由于它的精度僅取決于基準(zhǔn)時鐘的精確度和計數(shù)的誤差(通常計數(shù)的誤差只在正負(fù)1之內(nèi),對于計數(shù)個數(shù)為10萬以上的頻率來說,在誤差允許的范圍之內(nèi)),所以用計數(shù)法測頻無論在高頻段還是在低頻段都可以達到較高的精確度.
如圖2所示,先把待測信號接入放大整形電路中處理,將其轉(zhuǎn)換成固定幅度的方波信號,但保持頻率和占空比不變;然后由FPGA芯片進行采集,在FPGA內(nèi)部的計數(shù)器模塊將對其進行判斷并執(zhí)行相應(yīng)的處理,最后將數(shù)據(jù)傳輸給NIOS II嵌入式處理器,由該處理器對這些數(shù)據(jù)進行運算和處理,并控制液晶顯示最后得出的頻率測量結(jié)果.
1.2頻率測量模塊的原理
頻率測量模塊的主要組成部分是計數(shù)器,首先對經(jīng)前端處理后的信號進行預(yù)判,若判斷的結(jié)果為高頻段,則進入直接測頻法模塊進行測頻;若判斷的結(jié)果為低頻段,則進入間接測頻法模塊進行測頻.其中直接測頻模塊中需要用到的閘門信號由基準(zhǔn)時鐘經(jīng)分頻模塊后產(chǎn)生,對測頻輸出的數(shù)據(jù)不做處理,全部傳輸給NIOS II軟核進行計算和處理.該模塊原理可以用圖3來說明.
圖2 基于FPGA方案頻率計的系統(tǒng)框圖Fig. 2 System framework for cymometer based on FPGA
圖3 頻率測量模塊的原理圖Fig. 3 Illustration for frequency measurement module
1.3液晶顯示模塊的原理
圖4 液晶顯示模塊的原理圖Fig. 4 Illustration for LCD display module
液晶顯示模塊用于顯示測量的頻率結(jié)果,它的控制將由NIOS II處理器來完成,對于頻率測量模塊的各項數(shù)據(jù)能夠在經(jīng)過計算后正確地顯示在液晶上.液晶顯示模塊的原理可以用圖4來說明.
2.1頻率測量模塊的實現(xiàn)
頻率測量模塊主要采用32位的計數(shù)器來實現(xiàn),系統(tǒng)基準(zhǔn)時鐘設(shè)為200MHz.依據(jù)高低頻段不同的方式處理,其理論可測量的頻率范圍為1~4GHz,且其精度在10-4之內(nèi),滿足頻率測量的要求;其理論可測量占空比的頻率范圍在1~2MHz,理論可測量的占空比大小在10%~90%,且其精度在10-2之內(nèi),滿足占空比的測量要求.利用Verilog HDL語言編寫了以下幾個模塊來共同實現(xiàn)頻率的測量功能:分頻計數(shù)模塊、周期計數(shù)模塊、占空比計數(shù)模塊和頻段判斷和處理模塊.下面對這4個子模塊進行詳細(xì)的介紹.
2.1.1分頻計數(shù)模塊
分頻計數(shù)模塊的核心原理是由一個17位的計數(shù)器構(gòu)成,主要用于對系統(tǒng)時鐘信號進行分頻,進而產(chǎn)生需要的閘門信號,本設(shè)計中要用到的閘門時間為1s,故可對200MHz的系統(tǒng)時鐘進行200M分頻(分頻系數(shù)越大,分頻后的信號誤差越小),分頻后的周期正好為1s,符合要求.
該分頻計數(shù)模塊的主要特點在于不是在最后一個計數(shù)結(jié)果抬高電平,而是在中間就開始抬高電平,這樣分頻后的信號,其占空比可以仍為50%;而且分頻的系數(shù)是由用戶自己定義,極大的方便了對該模塊的調(diào)用,下面對該模塊進行仿真說明.
圖5 分頻模塊仿真圖Fig. 5 Simulation for frequency division module
設(shè)置的系統(tǒng)頻率信號周期為5ns(也是下面幾個模塊工作的系統(tǒng)時鐘信號);由圖5可知,分頻系數(shù)為10,根據(jù)理論計算,分頻后的頻率信號周期為:5ns*10=50ns;
由圖5紅色方框內(nèi)的信息可知,仿真得到的信號周期為:340ns-290ns=50ns;與前面的計算結(jié)果一致,所以仿真結(jié)果正確;同時可以發(fā)現(xiàn),分頻后的信號在高電平和低電平計數(shù)個數(shù)是一樣的,即占空比為50%,符合設(shè)計初衷.由于高頻模塊能夠正常工作,而低頻模塊的誤差只會更小,所以驗證了高頻,也就相當(dāng)于驗證了低頻.
2.1.2周期計數(shù)模塊
周期計數(shù)模塊的核心原理是一個32位的計數(shù)器,該模塊的主要功能是對待測頻率信號進行一個周期內(nèi)的計數(shù),并輸出計數(shù)結(jié)果;該模塊的主要特點在于不是對信號的半個周期進行計數(shù),而是對整個周期進行計數(shù),到下一個周期時又清空計數(shù)結(jié)果,重新計數(shù),這樣計數(shù)的好處在于當(dāng)被測頻率信號占空比不為50%時仍能給出正確的頻率計數(shù)結(jié)果.下面將結(jié)合時序圖對該模塊進行仿真說明.
圖6 周期計數(shù)模塊仿真圖Fig. 6 Simulation for cycle count module
設(shè)置待測信號的周期為55ns;根據(jù)理論計算,計數(shù)結(jié)果應(yīng)該為:55ns/5ns=11;由圖6紅色方框內(nèi)的信息可知,仿真結(jié)果為:(687.49ns-632.49ns)/5ns=11;仿真得到的結(jié)果為11,與理論計算值一致,說明該模塊正常工作.因為被測信號周期越長,測量的結(jié)果就會越準(zhǔn)確.因此只要在高頻的信號下測量,計數(shù)結(jié)果是不是正常,就能知道整個模塊能不能正常工作.
2.1.3占空比計數(shù)模塊
占空比計數(shù)模塊的核心也是一個32位的計數(shù)器,與前一個模塊不同的是,該模塊只在被測信號翻轉(zhuǎn)為高電平時開始計數(shù),這樣做的目的在于可以基于前一個模塊的計數(shù)結(jié)果計算出該信號的占空比.假設(shè)在周期計數(shù)模塊對被測信號的計數(shù)結(jié)果為full,在占空比模塊對被測信號的計數(shù)結(jié)果為dH,則占空比的計算公式為:
duty=(t(dH)/t(full))*100%
(6)
該模塊的主要特點是只針對被測信號的高電平持續(xù)時間內(nèi)進行計數(shù),并對下一個高電平到來之前情況計數(shù)結(jié)果,下面將根據(jù)圖來對占空比模塊進行仿真說明.
圖7 占空比計數(shù)模塊仿真圖Fig. 7 Simulation for duty cycle count module
被測信號的周期設(shè)為500ns,其占空比為27%;根據(jù)理論計算,計數(shù)結(jié)果為:(500ns*27%)/5ns=27;
由圖7可知,計數(shù)結(jié)果為:((2.37us-1.87us) *27%/5ns)=27;即仿真結(jié)果為27,與理論計算結(jié)果相同,說明該模塊工作正常.由于在實際過程中,占空比計數(shù)模塊所測量的頻率越高,誤差越大,所以只要驗證誤差較小的高頻信號,若正常,說明此頻率下的其它信號也能正常工作.
2.1.4頻段判斷和處理模塊
頻率判斷和處理模塊為頻率測量模塊的核心重點,相當(dāng)于一個小型的頂層文件,它綜合了前面的分頻、周期和占空比計數(shù)3個模塊,通過例化這3個模塊,使其在這一個模塊中同時工作;該模塊的主要工作是判斷出被測信號的頻率段,并根據(jù)判斷的結(jié)果將待測信號送入不同的模塊中進行計數(shù)測量;當(dāng)判斷結(jié)果為高頻時,在閘門時間內(nèi)采用直接測頻法對該被測信號進行計數(shù),若計數(shù)結(jié)果為cH,則該被測信號的頻率計算公式為:
f=cH/(1Hz)=cH
(7)
若判斷該信號為低頻信號,則把該被測信號當(dāng)作閘門信號,采用間接測頻法對其計數(shù),如果計數(shù)結(jié)果為cL,則該被測信號的頻率計算公式為:
f=(1/5ns)/cL=200000000/cL
(8)
因為本設(shè)計要求的精度為10-4,所以判斷一個信號為高頻還是低頻的中間頻率為:
1Hz/10-4=10KHz;
圖8 頻段判斷和處理仿真圖Fig. 8 Simulation for frequency range judgement
被測信號的周期設(shè)為1us,占空比設(shè)為14%,依據(jù)理論計算,計數(shù)結(jié)果為:
icnt=1us/5ns=200;
即100 高頻段計數(shù)結(jié)果: cH=1s/1us=1000000; 占空比計數(shù)結(jié)果: dH=1us*14%/5ns=28; 由圖8可知,flag=1,dflag=0,cH=1000000,dH=28;這與理論計算的結(jié)果相同,所以頻段判斷和處理模塊工作正常.經(jīng)過該模塊后的數(shù)據(jù),其頻率的具體計算都將傳輸給NIOS II處理器,通過在頂層文件用原理圖的方式相連接,可以省去大量的引腳. 2.2液晶顯示模塊的實現(xiàn) 圖9 液晶的初始化程序圖Fig. 9 Initialization program for LCD 液晶顯示模塊主要在NIOS IDE中用C語言編寫程序?qū)ζ淇刂?根據(jù)液晶的時序來編寫程序,發(fā)送指令控制顯示. 在給液晶傳達指令時,需要注意液晶執(zhí)行各個命令的時間,在本設(shè)計中所用的液晶清屏指令和地址歸為指令執(zhí)行時間為1.6 ms,其它指令均為72us.所以在程序設(shè)計中對液晶初始化的步驟如圖9所示,等待時間大于指令執(zhí)行時間. 在本設(shè)計中要求頻率顯示要根據(jù)結(jié)果自動切換單位,如當(dāng)被測頻率信號的頻率測量結(jié)果大于1000Hz時,則后面的單位自動切換成KHz,同理大于1000KHz時,切換為MHz,這部分比較容易實現(xiàn),在NIOS IDE中用C語言對測量結(jié)果進行判斷并控制液晶顯示即可. 3.1NIOS II 處理器結(jié)構(gòu)圖 圖10 NIOS II軟核原理圖Fig. 10 Illustration for NIOS II soft-core 本設(shè)計中用到的NIOS II軟核是由SOPC Builder工具構(gòu)建而成,CPU選擇性能最高的NIOS II/f型,系統(tǒng)時鐘定義為50MHz,RAM選擇片內(nèi)存儲器,設(shè)置其大小為32KB,此外還設(shè)置了EPCS存儲控制模塊,并鎖定其地址為0x00000000,主要用于程序的調(diào)試和下載;JTAG接口選擇默認(rèn)的標(biāo)準(zhǔn)型,其它數(shù)據(jù)和控制口全部由PIO來定義. 圖10是最后生成的NIOS II軟核原理圖.從圖中可以看到生成了眾多的IO口,都是前面自己定義好的,左邊的端口為輸入口,右邊的端口一般為輸出,但也可以是雙向口,如負(fù)責(zé)傳輸數(shù)據(jù)給液晶的8位數(shù)據(jù)口就是雙向口.其中端口名以EPCS結(jié)尾的接口是由EPCS存儲控制器自動生成的,需要根據(jù)芯片型號自行分配引腳.該原理圖需要放在頂層文件中與前面生成的模塊相連接,實現(xiàn)數(shù)據(jù)的傳遞. 在頂層文件編譯通過后,就可以使用NIOS IDE對NIOS II軟核進行編程控制,主要對傳遞進來的數(shù)據(jù)進行處理和計算,然后將處理后的數(shù)據(jù)傳遞給液晶顯示,從而完成整個系統(tǒng)的流程. 3.2頂層文件原理圖分析 整個系統(tǒng)方案實現(xiàn)的原理圖如下: 圖11 整體方案實現(xiàn)原理圖Fig. 11 Illustration for the whole system implementation 由圖11可知,整個系統(tǒng)用到了兩個鎖相環(huán),其中一個用于生成各種系統(tǒng)時鐘信號,另一個用于生成各種測試用的信號,分頻模塊、周期計數(shù)模塊和占空比計數(shù)模塊都被整合到了頻段判斷和處理模塊里,不在頂層文件里顯現(xiàn)出來;經(jīng)過頻段判斷和處理模塊后的數(shù)據(jù)全部交給了NIOS II處理器處理,這樣可盡量減少調(diào)用資源,使整個系統(tǒng)運行得更加流暢. 3.3系統(tǒng)占用資源分析 圖12 整個系統(tǒng)占用資源分布圖Fig. 12 Resource distribution map for whole system 由于數(shù)據(jù)的計算和處理都是在NIOS嵌入式處理器中完成,這大大減少了系統(tǒng)資源的占有率,整個系統(tǒng)占用的資源情況分布如圖12所示. 由圖12可知,即使使用了32位的計數(shù)器,整個系統(tǒng)所占用的LES也只在31%左右,寄存器資源更是只占20%,由于該芯片內(nèi)存儲總量為42KB,而在NIOS II軟核中就分頻了32KB,所以在存儲方面共占用了75%的資源,PLL鎖相環(huán)使用了2個,芯片也支持2個,所以占用100%,雖然本設(shè)計用了32的計數(shù)器,但由于32位的數(shù)據(jù)口并沒有引出,而是在芯片內(nèi)部的電路直接通過頂層文件連接起來,所以引腳占用也很少,這也是FPGA器件的一大優(yōu)點. 3.4系統(tǒng)硬件測試分析 圖13 液晶顯示測量數(shù)據(jù)圖Fig. 13 LCD display for the measured data 本設(shè)計是基于NIOS II軟核的頻率計設(shè)計,其主要功能是測量脈沖信號的頻率和占空比,并將結(jié)果顯示在液晶屏上.所測量的頻率范圍在1~400MHz,誤差不超過10-4;占空比測量范圍在10%~90%(頻率小于2MHz時),其誤差不超過10-1;在此附上液晶成功顯示測量結(jié)果的圖,并以此作簡單的說明. 如圖13所示,該信號是由FPGA芯片內(nèi)部鎖相環(huán)分頻后發(fā)出的,然后將其接到待測信號的輸入口上,通過設(shè)計好計數(shù)器和頻段判斷將計數(shù)結(jié)果傳送給NIOS II處理器,NIOS II處理器對計數(shù)結(jié)果進行運算后轉(zhuǎn)換成頻率和占空比,最終通過液晶顯示在液晶屏上,由于是由同一塊芯片產(chǎn)生的信號,所以誤差極小,在精度要求范圍內(nèi). 本設(shè)計基于Altera的NIOS II軟核,實現(xiàn)了一款高精度、高帶寬、緊湊靈活的數(shù)字頻率計.對脈沖信號進行頻率測量時,其理論最高測量頻率可達4GHz,但在實際中有很多頻率信號不一定是方波的形式,像正弦波、三角波和鋸齒波等必須要將其轉(zhuǎn)換成方波形式才可以進行測量,這時需要在前端加一個放大整形電路.其次是在本設(shè)計中對液晶的控制是并行模式的,如果能將其改為串行模式,其接線將大大減少,雖然顯示速度會因此而下降,但就目前的運行速度而言,降低后也在接受范圍內(nèi).最后是在后續(xù)的研究中可以使用更低版本的芯片來實現(xiàn),因為這個版本中芯片資源還大有剩余,只占30%左右. [1] ZHOU W. Systematic Research on High-Accuracy Frequency Measurements and Control[J].靜岡大學(xué)大學(xué)院電子科學(xué)研究科研究報告,2001,22:189-191. [2] ASHOUR M A, SALEH H J. An FPGA implementation guide for some different types of serial-parallel multiplier structures[J]. Microelectronics Journal,2000,31(3):161-168. [3] 潘松,黃繼業(yè),潘明.EDA技術(shù)實用教程:VerilogHDL版[M].4版.北京:科學(xué)出版社,2010. [4] 吳軍,沈珊瑚,何忠.基于SOPC的U盤加解密系統(tǒng)實現(xiàn)[J].杭州師范大學(xué)學(xué)報(自然科學(xué)版),2016,15(1):95-101. [5] 王誠.Altera FPGA/CPLD設(shè)計[M].2版.北京:人民郵電出版社,2011. [6] 包本剛.基于FPGA的全同步數(shù)字頻率計的設(shè)計與實現(xiàn)[J].測試技術(shù)學(xué)報,2008,22(2):99-102. [7] 張謹(jǐn),宗發(fā)保,鄒鵬毅,等.基于FPGA的銫光泵磁力儀頻率計設(shè)計[J].海洋測繪,2015,35(2):80-82. [8] 孫虹,何宏,張大建,等.基于VHDL和FPGA的自適應(yīng)數(shù)字頻率計的研究與設(shè)計[J].天津理工大學(xué)學(xué)報,2008,24(1):24-27. Implementation of Digital Frequency Meter Based on Nios II Soft-core WU Jun, SHEN Shanhu, Lu Haoyu (Hangzhou Institute of Service Engineering, Hangzhou Normal University, Hangzhou 311121, China) In this paper, a precise digital frequency meter was implemented using Cyclone IV E series FPGA chip resources and NIOS II soft-core. Verilog Language was used for the frequency measurement function, while C language was used for the data manipulation. Then the data was transferred to the LCD module based on real-time operations. This design owned the features of large measuring bandwidth, small area and stable data transformation. Also each module in the whole system was independent to each other, and the whole system was flexible and highly effective. NIOS II soft-core; FPGA; SOPC; digital frequency meter 2016-04-19 浙江省信息安全聯(lián)盟課題-安全芯片預(yù)研項目(kz13013003);浙江省科技創(chuàng)新計劃項目(2013TD03);杭州師范大學(xué)科研啟動基金項目(PF14002004005). 沈珊瑚(1981-),女,講師,博士,主要從事嵌入式系統(tǒng)及安全芯片實現(xiàn)相關(guān)研究.E-mail:shshen88@163.com 10.3969/j.issn.1674-232X.2016.05.017 TP368 A 1674-232X(2016)05-0549-073 整體方案分析
4 總結(jié)和展望