基于高速串行BCD碼除法的數(shù)字頻率計(jì)的設(shè)計(jì)
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為與移位步長(zhǎng)有關(guān)的常數(shù),在此取為16。
除法運(yùn)算循環(huán)圖表如圖3所示。
循環(huán)步驟如下:
·將ω[j]左移四位,構(gòu)成rω[j]。
·通過(guò)多次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è)例子說(shuō)明它的原理:
·將被除數(shù)和除數(shù)移位,使其第一位BCD碼不為0000,并記錄移位的次數(shù)P(例如:56895230/80000000,p=8)。
·比較最高位的大小,如果除數(shù)的最高位大于被除數(shù)的最高位,則將除數(shù)右移4位,同時(shí)將P減1(即:56895230/08000000,且p=7)。
·得到的數(shù)盧為小數(shù)點(diǎn)的位置(F:7說(shuō)明小數(shù)點(diǎn)的位置在第七位數(shù)后)。
·循環(huán)相減。當(dāng)部分余數(shù)小于08000000,再將部分余數(shù)左移四位,繼續(xù)進(jìn)行相減。循環(huán)m次后即可得到m個(gè)有效數(shù)字的結(jié)果,然后根據(jù)p可以確定小數(shù)點(diǎn)的位置。
使用這種方法計(jì)算一個(gè)8位數(shù)的除法運(yùn)算,循環(huán)減法次數(shù)最大為80次,每次循環(huán)使用時(shí)間為8個(gè)時(shí)鐘周期。如果工作頻率為100MHz,則最長(zhǎng)的運(yùn)算時(shí)間為6.4μs,運(yùn)算速度大大提高。
圖4
3 設(shè)計(jì)實(shí)現(xiàn)
采用VHL語(yǔ)言設(shè)計(jì)一個(gè)復(fù)雜的電路系統(tǒng),運(yùn)用自頂向下的設(shè)計(jì)思想[2],將系統(tǒng)按功能逐層分割的層次化設(shè)計(jì)方法進(jìn)行設(shè)計(jì)。在頂層對(duì)內(nèi)部各功能塊的連接關(guān)系和對(duì)外的接口關(guān)系進(jìn)行了描述,而功能塊的邏輯功能和具體實(shí)現(xiàn)形式則由下一層模塊來(lái)描述。根據(jù)頻率計(jì)的系統(tǒng)原理框圖(圖1),運(yùn)用自頂向下的設(shè)計(jì)思想,設(shè)計(jì)的系統(tǒng)頂層電路圖如圖4所示。各功能模塊采用VHDL語(yǔ)言來(lái)描述。
在計(jì)數(shù)模塊中,通過(guò)譯碼完成的信號(hào)COMP和標(biāo)準(zhǔn)信號(hào)計(jì)數(shù)器的溢出信號(hào)ov2對(duì)門控信號(hào)CL進(jìn)行控制??梢愿鶕?jù)不同的情況選擇門控信號(hào)的時(shí)間范圍,使設(shè)計(jì)具有一定的靈活性。采用門控信號(hào)CL和被測(cè)信號(hào)BSN對(duì)兩個(gè)8位十進(jìn)制計(jì)數(shù)器進(jìn)行同步控制[3]。根據(jù)D觸發(fā)器的邊沿觸發(fā)的特點(diǎn),可以將輸入的門控信號(hào)CL作為D觸發(fā)器的輸入信號(hào),而將被測(cè)信號(hào)BSN作為D觸發(fā)器的脈沖控制信號(hào),使觸發(fā)器的輸出端只有在被測(cè)信號(hào)BSN上升沿時(shí)才發(fā)生變化,實(shí)現(xiàn)了對(duì)使能信號(hào)的雙重控制。
本設(shè)計(jì)比較重要的一部分是運(yùn)算單元。由于在運(yùn)算單元中采用的是串行運(yùn)算,因此其工作頻率必須足夠高。在FPGA中實(shí)現(xiàn)時(shí),如何提高串行BCD碼除法運(yùn)算的速度是比較關(guān)鍵的問(wèn)題。
評(píng)論