摘要: 介紹了在PPGA芯片上實現數字頻率計的原理。對各種硬件除法進行了比較,提出了高速串行BCD碼除法的硬件算法,并將其應用在頻率計設計中。
關鍵詞: 頻率測量 周期測量 FPGA VHDL 狀態機
數字頻率計是計算機、通訊設備、音頻視頻等科研生產領域不可缺少的測量儀器。采用VDHL編程設計實現的數字頻率計,除被測信號的整形部分、鍵輸入部分和數碼顯示部分以外,其余全部在一片FPGA芯片上實現,整個系統非常精簡,而且具有靈活的現場可更改性。在不更改硬件電路的基礎上,對系統進行各種改進還可以進一步提高系統的性能。該數字頻率計具有高速、精確、可靠、抗干擾性強和現場可編程等優點。
在設計中,所有頻段均采用直接測頻法對信號頻率進行測量,克服了逼近式換擋速度慢的缺點;采用了門控信號和被測信號對計數器的使能端進行雙重控制,提高了測量的精確度;在運算單元采用了高速串行BCD碼除法,不僅提高了運算速度,而且減小了資源消耗。
1 系統結構及基本設計原理
以一個8位十進制、測量范圍為1Hz~100MHz的數字頻率計為例,采用100MHz的標準頻率信號,說明設計的基本原理及實現。設計的數字頻率計由測量頻率模塊、計算模塊和譯碼模塊組成,如圖1所示。測頻模塊采用兩個十進制計數器分別測出門控時間內的標準信號和被測信號的周期數Ns和Nx。計算模塊則根據公式Fx/Nx=Fs/Ns算出Fx,通過譯碼即可得到被測信號頻率的7段數碼顯示。
數字頻率計的設計原理實際上是測量單位時間內的周期數。這種方法免去了實測以前的預測,同時節省了劃分頻段的時間,克服了原來高頻段采用測頻模式而低頻段采用測周期模式的測量方法存在換擋速度慢的缺點。
為克服低頻段測量的不準確問題,采用門控信號和被測信號對計數器的使能信號進行雙重控制,大大提高了準確度,如圖2所示。
當門控信號為1時,使能信號并不為1,只有被測信號的上升沿到來時,使能端才開始發送有效信號,兩個計數器同時開始計數。當門控信號變為0時,使能信號并不是立即改變,而是當被測信號的下一個上升沿到來時才變為0,計數器停止計數。因此測量的誤差最多為一個標準時鐘周期。當采用100MHz的信號作為標準信號時,誤差最大為0.01μs。
2 高速串行BCD碼除法運算原理
利用FPGA實現二進制除法運算,一種方法是采用逼近法,這種方法速度低、準確性不高。另一種方法是采取被除數與除數的倒數相乘的方法,即將除數作為寄存器的地址,其倒數的小數部分作為寄存器的內容,通過一次寄存器尋址來計算除數的倒數。這種方法在一個時鐘周期內即可完成一個完整的除法運算,雖然速度較高,但對于多字節除法運算,不僅程序復雜,而且占用資源較多。根據頻率計的實際情況,本設計采用串行除法運算,利用多個時鐘周期完成一個完整的除法運算,從而兼顧了頻率計對速度和資源兩方面的要求。
2.1 多位串行BCD碼減法原理
在數字串行除法運算中,減法運算是必不可少的部分。數字串行BCD碼的減法運算是將P位的BCD碼分為P個寬為4的二進制數,然后從低位開始相減,在P個時鐘周期內完成減法操作。如果輸入的操作數位數為8,那么串行BCD碼減法器可以在8個時鐘周期內完成8位BCD碼減法運算。
數字串行減法的控制也比較簡單,1位BCD碼減法運算完成,進行移位操作,并且移位次數加1,然后通過采用start信號指示新計算周期。當移位次數為n時,輸出移位寄存器完成串/并轉換,輸出結果。設計者可以根據實際情況,通過選擇不同的n,提高設計的靈活性。本設計選擇n=8。
該設計在提高速度的同時,節省了資源。實驗證明,采用1OOMHz的工作頻率,實現一個8位BCD碼串行減法運算,耗用的資源卻小于實現2位BCD碼并行減法運算所耗用的資源。
2.2 多位串行BCD碼除法原理
本設計采用循環式除法運算,循環原理可以用下面的公式表示[1]:
ω[j+1]=rω[j]-dqj+1
式中,ω[j]為第j步的余數,ω[0]為被除數;d為除數;qj+1為第j+1步所得的商;r為與移位步長有關的常數,在此取為16。
除法運算循環圖表如圖3所示。
?
循環步驟如下:
·將ω[j]左移四位,構成rω[j]。
·通過多次BCD碼減法運算,求得部分商qJ+1,得到部分余數。
·部分余數、部分商移位,準備下次循環。
高速串行BCD碼除法是建立在BCD碼減法運算基礎上的循環運算。用被除數減除數得到部分余數的BCD碼,如果夠減,則使商加1;否則,余數和商同時左移四位,并記錄移位的次數m,根據對有效位數的不同要求,可以對m進行賦值,如果要求保留8位有效數字,則m=8。
在這種循環除法運算中,減少循環的次數是提高運算速度比較有效的方法。在一般循環式除法運算中,是從低位開始進行循環相減,循環次數等于商。如果是8位除法運行,則得到一個8位的商,要進行8位次的BCD碼減法循環,例如:56895230/8=7111903.8,要進行7111903.8次循環,計算的速度可想而知。
在本設計中借鑒了一般十進制除法的運算方法,從高位開始相減,大大減少了循環次數。下面以一個例子說明它的原理:
·將被除數和除數移位,使其第一位BCD碼不為0000,并記錄移位的次數P(例如:56895230/80000000,p=8)。
·比較最高位的大小,如果除數的最高位大于被除數的最高位,則將除數右移4位,同時將P減1(即:56895230/08000000,且p=7)。
·得到的數盧為小數點的位置(F:7說明小數點的位置在第七位數后)。
·循環相減。當部分余數小于08000000,再將部分余數左移四位,繼續進行相減。循環m次后即可得到m個有效數字的結果,然后根據p可以確定小數點的位置。
使用這種方法計算一個8位數的除法運算,循環減法次數最大為80次,每次循環使用時間為8個時鐘周期。如果工作頻率為100MHz,則最長的運算時間為6.4μs,運算速度大大提高。
圖4
3 設計實現
采用VHL語言設計一個復雜的電路系統,運用自頂向下的設計思想[2],將系統按功能逐層分割的層次化設計方法進行設計。在頂層對內部各功能塊的連接關系和對外的接口關系進行了描述,而功能塊的邏輯功能和具體實現形式則由下一層模塊來描述。根據頻率計的系統原理框圖(圖1),運用自頂向下的設計思想,設計的系統頂層電路圖如圖4所示。各功能模塊采用VHDL語言來描述。
在計數模塊中,通過譯碼完成的信號COMP和標準信號計數器的溢出信號ov2對門控信號CL進行控制。可以根據不同的情況選擇門控信號的時間范圍,使設計具有一定的靈活性。采用門控信號CL和被測信號BSN對兩個8位十進制計數器進行同步控制[3]。根據D觸發器的邊沿觸發的特點,可以將輸入的門控信號CL作為D觸發器的輸入信號,而將被測信號BSN作為D觸發器的脈沖控制信號,使觸發器的輸出端只有在被測信號BSN上升沿時才發生變化,實現了對使能信號的雙重控制。
本設計比較重要的一部分是運算單元。由于在運算單元中采用的是串行運算,因此其工作頻率必須足夠高。在FPGA中實現時,如何提高串行BCD碼除法運算的速度是比較關鍵的問題。
BCD碼減法運算采用行波進位方法,因此必須盡量減小進位邏輯上的延遲。ACEX 1K系列的每個LE中都提供了一個專用的進位鏈和級聯鏈,充分利用這些資源可以提高多位串行BCD碼減法的性能。根據ACEX1K系列周期約束,其延時為:
Tclk=Tco+B+Tsu-(E-C)
式中,Tco為clock-output的延時,Tsu為建立時間,兩個時間均可達到1~2ns;B表示數據延時,為0.6ns;E-C)表示時鐘傾斜[4]。因此,總時鐘延時為4.6ns,即工作頻率可以達到200MHz以上。本文采用100MHz的工作頻率,提高了運算速度。為了減小延時、提高工作效率,在對布局布線進行精確控制以后,把BCD碼減法運算做成模塊,在除法運算過程反復調用,達到了模塊復用效果,大大提高了資源的利用率。
在整個BCD碼除法運算單元,首先通過輸入數據決定信號是否超出測量范圍。
·當ov1為1時,該信號的頻率大于1Hz;
·當NS ·當NS=NX,該信號的頻率為1Hz; ·當NS>NX,該信號頻率在測量范圍內。 根據輸入的NS和NX計算輸入信號的頻率。 本頻率計設計采用8位的十進制計數器,隨后應用狀態機實現了高速串行BCD碼除法運算,計算出頻率值。對BCD碼減法模塊的復用,減小了資源的利用。 當今VLSI的發展日新月異,FPGA的容量和速度成倍地增長,而價格卻逐年下降,這將使得基于FPGA設計的數字頻率計優勢更加明顯。相信這一技術必將得到更加廣泛的應用。
除法運算通過雙狀態機的設計控制一個BCD碼減法運算。所有狀態用同一時鐘進行控制,實現了系統的同步設計,消除了異步邏輯中存在的種種險象。各個狀態之間的關系如圖5所示。當計數模塊完成計數時,則將數輸入除法模塊,開始移位以確定輸入的值;然后發clrs信號到BCD碼減法運算單元開始運算,循環相減。當循環結束時,發回一個HNS信號,部分余數開始移位,進行下一輪的循環。最終輸出FOUT,即運算單元結束。
評論
查看更多