|
摘要: 介紹了在 PPGA 芯片上實(shí)現(xiàn)數(shù)字頻率計(jì)的原理。對(duì)各種硬件除法進(jìn)行了比較 , 提出了高速串行 BCD 碼除法的硬件算法,并將其應(yīng)用在頻率計(jì)設(shè)計(jì)中。 關(guān)鍵詞: 頻率測量 周期測量 FPGA VHDL 狀態(tài)機(jī) 數(shù)字頻率計(jì)是計(jì)算機(jī)、通訊設(shè)備、音頻視頻等科研生產(chǎn)領(lǐng)域不可缺少的測量儀器。采用 VDHL 編程設(shè)計(jì)實(shí)現(xiàn)的數(shù)字頻率計(jì),除被測信號(hào)的整形部分、鍵輸入部分和數(shù)碼顯示部分以外,其余全部在一片 FPGA 芯片上實(shí)現(xiàn),整個(gè)系統(tǒng)非常精簡,而且具有靈活的現(xiàn)場可更改性。在不更改硬件電路的基礎(chǔ)上,對(duì)系統(tǒng)進(jìn)行各種改進(jìn)還可以進(jìn)一步提高系統(tǒng)的性能。該數(shù)字頻率計(jì)具有高速、精確、可靠、抗干擾性強(qiáng)和現(xiàn)場可編程等優(yōu)點(diǎn)。 在設(shè)計(jì)中,所有頻段均采用直接測頻法對(duì)信號(hào)頻率進(jìn)行測量,克服了逼近式換擋速度慢的缺點(diǎn);采用了門控信號(hào)和被測信號(hào)對(duì)計(jì)數(shù)器的使能端進(jìn)行雙重控制,提高了測量的精確度;在運(yùn)算單元采用了高速串行 BCD 碼除法,不僅提高了運(yùn)算速度,而且減小了資源消耗。
1 系統(tǒng)結(jié)構(gòu)及基本設(shè)計(jì)原理 以一個(gè) 8 位十進(jìn)制、測量范圍為 1Hz~100MHz 的數(shù)字頻率計(jì)為例,采用 100MHz 的標(biāo)準(zhǔn)頻率信號(hào),說明設(shè)計(jì)的基本原理及實(shí)現(xiàn)。設(shè)計(jì)的數(shù)字頻率計(jì)由測量頻率模塊、計(jì)算模塊和譯碼模塊組成,如圖 1 所示。測頻模塊采用兩個(gè)十進(jìn)制計(jì)數(shù)器分別測出門控時(shí)間內(nèi)的標(biāo)準(zhǔn)信號(hào)和被測信號(hào)的周期數(shù) Ns 和 Nx 。計(jì)算模塊則根據(jù)公式 Fx / Nx=Fs/Ns 算出 Fx ,通過譯碼即可得到被測信號(hào)頻率的 7 段數(shù)碼顯示。 數(shù)字頻率計(jì)的設(shè)計(jì)原理實(shí)際上是測量單位時(shí)間內(nèi)的周期數(shù)。這種方法免去了實(shí)測以前的預(yù)測,同時(shí)節(jié)省了劃分頻段的時(shí)間,克服了原來高頻段采用測頻模式而低頻段采用測周期模式的測量方法存在換擋速度慢的缺點(diǎn)。 為克服低頻段測量的不準(zhǔn)確問題,采用門控信號(hào)和被測信號(hào)對(duì)計(jì)數(shù)器的使能信號(hào)進(jìn)行雙重控制,大大提高了準(zhǔn)確度,如圖 2 所示。 當(dāng)門控信號(hào)為 1 時(shí),使能信號(hào)并不為 1 ,只有被測信號(hào)的上升沿到來時(shí),使能端才開始發(fā)送有效信號(hào),兩個(gè)計(jì)數(shù)器同時(shí)開始計(jì)數(shù)。當(dāng)門控信號(hào)變?yōu)?0 時(shí),使能信號(hào)并不是立即改變,而是當(dāng)被測信號(hào)的下一個(gè)上升沿到來時(shí)才變?yōu)?0 ,計(jì)數(shù)器停止計(jì)數(shù)。因此測量的誤差最多為一個(gè)標(biāo)準(zhǔn)時(shí)鐘周期。當(dāng)采用 100MHz 的信號(hào)作為標(biāo)準(zhǔn)信號(hào)時(shí),誤差最大為 0 . 01 μ s 。
2 高速串行 BCD 碼除法運(yùn)算原理 利用 FPGA 實(shí)現(xiàn)二進(jìn)制除法運(yùn)算,一種方法是采用逼近法,這種方法速度低、準(zhǔn)確性不高。另一種方法是采取被除數(shù)與除數(shù)的倒數(shù)相乘的方法,即將除數(shù)作為寄存器的地址,其倒數(shù)的小數(shù)部分作為寄存器的內(nèi)容,通過一次寄存器尋址來計(jì)算除數(shù)的倒數(shù)。這種方法在一個(gè)時(shí)鐘周期內(nèi)即可完成一個(gè)完整的除法運(yùn)算,雖然速度較高,但對(duì)于多字節(jié)除法運(yùn)算,不僅程序復(fù)雜,而且占用資源較多。根據(jù)頻率計(jì)的實(shí)際情況,本設(shè)計(jì)采用串行除法運(yùn)算,利用多個(gè)時(shí)鐘周期完成一個(gè)完整的除法運(yùn)算,從而兼顧了頻率計(jì)對(duì)速度和資源兩方面的要求。 2 . 1 多位串行 BCD 碼減法原理 在數(shù)字串行除法運(yùn)算中,減法運(yùn)算是必不可少的部分。數(shù)字串行 BCD 碼的減法運(yùn)算是將 P 位的 BCD 碼分為 P 個(gè)寬為 4 的二進(jìn)制數(shù),然后從低位開始相減,在 P 個(gè)時(shí)鐘周期內(nèi)完成減法操作。如果輸入的操作數(shù)位數(shù)為 8 ,那么串行 BCD 碼減法器可以在 8 個(gè)時(shí)鐘周期內(nèi)完成 8 位 BCD 碼減法運(yùn)算。 數(shù)字串行減法的控制也比較簡單, 1 位 BCD 碼減法運(yùn)算完成,進(jìn)行移位操作,并且移位次數(shù)加 1 ,然后通過采用 start 信號(hào)指示新計(jì)算周期。當(dāng)移位次數(shù)為 n 時(shí),輸出移位寄存器完成串/并轉(zhuǎn)換,輸出結(jié)果。設(shè)計(jì)者可以根據(jù)實(shí)際情況,通過選擇不同的 n ,提高設(shè)計(jì)的靈活性。本設(shè)計(jì)選擇 n=8 。 該設(shè)計(jì)在提高速度的同時(shí),節(jié)省了資源。實(shí)驗(yàn)證明,采用 1OOMHz 的工作頻率,實(shí)現(xiàn)一個(gè) 8 位 BCD 碼串行減法運(yùn)算,耗用的資源卻小于實(shí)現(xiàn) 2 位 BCD 碼并行減法運(yùn)算所耗用的資源。 2 . 2 多位串行 BCD 碼除法原理 本設(shè)計(jì)采用循環(huán)式除法運(yùn)算,循環(huán)原理可以用下面的公式表示[ 1 ]: ω[ j+1 ] =r ω[ j ] -dqj+1 式中,ω[ j ]為第 j 步的余數(shù),ω[ 0 ]為被除數(shù); d 為除數(shù) ;qj+1 為第 j+1 步所得的商; r 為與移位步長有關(guān)的常數(shù),在此取為 16 。 除法運(yùn)算循環(huán)圖表如圖 3 所示。 循環(huán)步驟如下: ·將ω[ j ]左移四位,構(gòu)成 r ω[ j ]。 ·通過多次 BCD 碼減法運(yùn)算,求得部分商 qJ+1 ,得到部分余數(shù)。 ·部分余數(shù)、部分商移位,準(zhǔn)備下次循環(huán)。 高速串行 BCD 碼除法是建立在 BCD 碼減法運(yùn)算基礎(chǔ)上的循環(huán)運(yùn)算。用被除數(shù)減除數(shù)得到部分余數(shù)的 BCD 碼,如果夠減,則使商加 1 ;否則,余數(shù)和商同時(shí)左移四位,并記錄移位的次數(shù) m ,根據(jù)對(duì)有效位數(shù)的不同要求,可以對(duì) m 進(jìn)行賦值,如果要求保留 8 位有效數(shù)字,則 m=8 。 在這種循環(huán)除法運(yùn)算中,減少循環(huán)的次數(shù)是提高運(yùn)算速度比較有效的方法。在一般循環(huán)式除法運(yùn)算中,是從低位開始進(jìn)行循環(huán)相減,循環(huán)次數(shù)等于商。如果是 8 位除法運(yùn)行,則得到一個(gè) 8 位的商,要進(jìn)行 8 位次的 BCD 碼減法循環(huán),例如: 56895230 / 8=7111903 . 8 ,要進(jìn)行 7111903 . 8 次循環(huán),計(jì)算的速度可想而知。 在本設(shè)計(jì)中借鑒了一般十進(jìn)制除法的運(yùn)算方法,從高位開始相減,大大減少了循環(huán)次數(shù)。下面以一個(gè)例子說明它的原理: ·將被除數(shù)和除數(shù)移位,使其第一位 BCD 碼不為 0000 ,并記錄移位的次數(shù) P( 例如: 56895230 |