【文章內(nèi)容簡介】
if。 基于 FPGA 的等精度頻率計的設(shè)計與實現(xiàn) 16 end if。 if t=1001 then i=1。 else i=0。 end if。 end process。 end decade。 程序說明:此程序為十進制加法計數(shù)器,整個計數(shù)器的工作方式是在時鐘脈沖信號上升沿之際,計數(shù)值就會加 1,且計數(shù)器的計數(shù)范圍是 0~ 9(即十進制的 0~9)。 計數(shù)器的仿真波形如下圖: 圖 計數(shù)器仿真波形圖 計數(shù)器仿真波形說明:計數(shù)器的復位信號( reset)為零和使能信號( en)置一時鐘的上升沿時,計數(shù)器開始計數(shù),當計數(shù)達到九以后且在時鐘的上升延, co由低電平變?yōu)?高電平,但由于信號的傳輸延遲, co 產(chǎn)生了延遲。 ( 2)脈沖產(chǎn)生的 VHDL 程序: library ieee。 use 。 entity onepluse is port(apluse,clk,reset: in std_logic。 blevel: out std_logic)。 end onepluse。 architecture s_machine of onepluse is type state_type is(first,second,third)。 signal state: state_type。 begin 基于 FPGA 的等精度頻率計的設(shè)計與實現(xiàn) 17 process(clk) begin if( reset=39。139。)then state= first。 elsif clk39。event and clk=39。139。 then case state is when first= if apluse=39。139。 then state=second。 end if。 when second= if apluse=39。139。 then state=third。 end if。 when third= if apluse=39。139。 then state=third。 end if。 end case。 end if。 end process。 with state select blevel=39。139。 when second, 39。039。 when others。 end s_machine。 脈沖取樣器的程序說明:這個程序的作用是產(chǎn)生計數(shù)器所需要的閘門時間,它經(jīng)過 10 位計數(shù)器分頻后的方波作為輸入,在時鐘脈沖的控制下,產(chǎn)生一定時間的脈沖作為閘門信號。 脈沖取樣器的波形仿真: 基于 FPGA 的等精度頻率計的設(shè)計與實現(xiàn) 18 圖 脈沖取樣器的波形仿真圖 ( 3)仿真結(jié)果說明:該程序所產(chǎn)生的輸出脈沖 blevel 恰好是輸入方波 apluse 的一個周期,且方波 apluse 須與時鐘 clk 保持一定的同步,這樣才能使輸出達到所需要的要求。 Reset 是復位信號,在 reset=1 時,輸出清零, reset=1 時輸出為一定時間的脈沖。 閘門 閘門是由控制器控制一個四路選擇器,從而選擇實際信號,作為取樣脈沖。而時基信號的產(chǎn)生是由 10 分頻程序( ctmn10)和 onepluse 脈沖產(chǎn)生程序所生成的電路模塊組成。 (1) 四路選擇器的 VHDL 程序: library ieee。 use 。 entity mux4 is port(s: in std_logic_vector(1 downto 0)。 a0,a1,a2,a3:in std_logic。 y :out std_logic)。 end mux4。 architecture haves of mux4 is begin y=a0 when s=00 else a1 when s=01 else 基于 FPGA 的等精度頻率計的設(shè)計與實現(xiàn) 19 a2 when s=10 else a3 when s=11。 end haves。 ( 2) 四路選擇器的程序說明:此模塊是為了根據(jù)相應(yīng)的被測頻率的大小來選擇適當?shù)拈l門時間,擴大頻率的測量范圍和測量精度。 ( 3) 四路選擇器的波形仿真:如下圖: 圖 四路選擇器波形仿真圖 (4) 波形仿真說明:選擇器是由選擇信號 s 的狀態(tài)來選擇輸入信號,當 s為 0、 時, 其輸入信號分別是 a0、 a a a3。然后由 y 輸出其選擇的信號。 ( 5)時基信號產(chǎn)生的電路由 10 分頻程序( ctmn10)和 onepluse 脈沖產(chǎn)生程序所生成的電路模塊組成。其圖如(附圖)等精度頻率計原理圖所示: 原理圖說明:以 4KHZ 時鐘為本電路的基準頻率,基準時鐘 CLK 進入 T 觸發(fā)器(保證與時鐘同步)產(chǎn)生上述 onepluse 程序所要的 apluse 周期為 的脈沖,同時用 10分頻模塊產(chǎn)生周期分別為 , 脈沖。這樣即產(chǎn)生了所需要的閘門時間。這是利用層次化設(shè)計思想,能很好的利用已編譯 好的模塊,避免重復編程,減小工作量。 計數(shù)器的電路設(shè)計 ( 1)計數(shù)器 是用來記錄被測信號在閘門時間內(nèi)的脈沖個數(shù)。從而測出頻率。它 的電路可由計數(shù)器基本模塊組成。其圖如(附圖)等精度頻率計原理圖所示: ( 2) 原理圖說明:計數(shù)器是由 8 個十進制計數(shù)模塊( ctmn10)和 T 觸發(fā)器組成, CLK 作為被測頻率的輸入端, EN 為使能端,當 enable(EN)=‘ 1’時,計數(shù)器計數(shù),當 enable(EN)=‘ 0’時,計數(shù)器停止計數(shù)。每一個 ctmn10 模塊的 CO 輸出端作為下一個 ctmn10 的使能端,因 CO 是 CLK 的十分頻, 即在第二個計數(shù)模塊時每個脈沖計一次數(shù),所以它的計數(shù)結(jié)果作為可計數(shù)器的十分位,同理,第三個計數(shù)?;?FPGA 的等精度頻率計的設(shè)計與實現(xiàn) 20 塊的計數(shù)可作為計數(shù)器的百位,依此類推。其輸出 CO 若有高電平輸出,則表明計數(shù)結(jié)果超過 ,計數(shù)器計數(shù)溢出。兩個 D觸發(fā)器的作用是為了保證輸出COUT 與 fx的同步和防止毛刺等誤輸出信號,讓控制器能及時發(fā)出控制信號。此計數(shù)器是頻率計數(shù)器的主要模塊,使能端 enable 的脈沖是由一模塊提供的閘門信號經(jīng)四選一的四位選擇器選擇出的信號,可選的信號的脈沖寬度分別為 ,和 。 鎖 存器的電路設(shè)計 鎖存器是把計數(shù)器的計數(shù)結(jié)果鎖入鎖存器,不會由于周期性的清零信號 reset對計數(shù)器進行清零,為下 1S 的計數(shù)操作準備。 鎖存器的 VHDL 程序: library ieee。 use 。 entity reg32 is port(ld,reset: in std_logic。 d : in std_logic_vector(31 downto 0)。 qnum : out std_logic_vector(31 downto 0))。 end reg32。 architecture s_haves of reg32 is begin process(ld) begin if reset=39。139。 then qnum=00000000000000000000000000000000。 elsif ld39。event and ld=39。139。 then qnum=d。 end if。 end process。 end s_haves。 鎖存 器的程序說明:該鎖存器的鎖存時間由輸入 ld 控制,每當 ld 發(fā)生一次脈沖跳變(上升沿),輸出端 qnum 變化一次。在此上頻率計數(shù)器中 ld 由計數(shù)模塊提基于 FPGA 的等精度頻率計的設(shè)計與實現(xiàn) 21 供,即 clk1s 輸出端。此脈沖的頻率為 1S。也就是說,鎖存器鎖存數(shù)據(jù)的時間至少應(yīng)為 1s。這樣就保證了有足夠的顯示時間。 . 5 顯示電路設(shè)計 計數(shù)器中記錄的結(jié)果通過鎖存器鎖存后,由下載板上的七段數(shù)碼管顯示輸出。只要將鎖存器中的輸出接到數(shù)碼管相應(yīng)的管腳上,計數(shù)的每一位都由數(shù)碼管顯示,然后小數(shù)點由二極管顯示,從而確定記錄結(jié)果。 控制電路的設(shè)計 控制電路由一個 控制器來完成,它能根據(jù)外圍部件的狀態(tài),發(fā)出相應(yīng)的控制信號,使系統(tǒng)正常運轉(zhuǎn),根據(jù)要求來可用狀態(tài)機來描述。 其狀態(tài)轉(zhuǎn)移圖如下。 Reset Start_100k Start_10k Start_1k ldt=’1’ ldt=’1’ ldt=’1’ ldt=’1’ ldt=’1’ ldt=’1’ F100k_t F10k_t F1k_t Cntover=’1’ tover=’1’ tover=’1’ F100k_over F10k_over F1k_over Cnthis0=’1’ this0=’1’ this0=’1’ F100k_low F10k_low F1k_low 圖 控制器狀態(tài)轉(zhuǎn)換圖 控制器的 VHDL 程序: library ieee。 use 。 entity control is port(clk,reset:in std_logic。 tover,this0,ldt,t1some:in std_logic。 基于 FPGA 的等精度頻率計的設(shè)計與實現(xiàn) 22 sel_std_f :out std_logic_vector(1 downto 0)。 clear,fxover :out std_logic。 hundot,tendot,unitdot :out std_logic)。 end control。 architecture s_have of control is type state_type is(start_f100k,f100k_over,f100k_low,f100k_t, start_f10k,f10k_over,f10k_low,f10k_t, start_f1k,f1k_over,f1k_low,f1k_t)。 signal state:state_type。 begin process(clk) begin if reset=39。139。then state=start_f10k。