唐家博
1 前言
分頻器是FPGA設(shè)計中使用頻率非常高的基本設(shè)計之一,盡管在目前大部分設(shè)計中,廣泛使用芯片廠家集成的鎖相環(huán)資源,如altera 的PLL,Xilinx的DLL.來進(jìn)行時鐘的分頻,倍頻以及相移。但是對于時鐘要求不高的基本設(shè)計,通過語言進(jìn)行時鐘的分頻相移仍然非常流行,首先這種方法可以節(jié)省芯片內(nèi)部的鎖相環(huán)資源,再者,消耗不多的邏輯單元就可以達(dá)到對時鐘操作的目的。另一方面,通過語言設(shè)計進(jìn)行時鐘分頻,可以看出設(shè)計者對設(shè)計語言的理解程度。
本文將介紹三種分頻方式,這三種分頻方式包括:基本2分頻法、脈沖計數(shù)法、相位偏移法,通過這三種方式將能夠?qū)崿F(xiàn)絕大部分的分頻需求,也能夠大大節(jié)約FPGA芯片的鎖相環(huán)資源。
2 信號分頻的分類
一般地,通常的信號分頻方式分類包括占空比為50%的分類和占空比不為50%的分類,由于在用verilog HDL語言對FPGA編程的過程中無法同時在一個進(jìn)程中對信號的上升沿和下降沿同時進(jìn)行監(jiān)測,所以在技術(shù)的實現(xiàn)方式上還存在偶次分頻和奇次分頻的差異。在本文中,將從基本的2分頻講到占空比不為50%的奇次分頻的具體實現(xiàn)的策略,以及部分規(guī)律的總結(jié)。
3 各種分頻策略以及其適用的范圍
3.1 基本2分頻法
我們采用一個always進(jìn)程對clk時鐘信號進(jìn)行監(jiān)測,每當(dāng)clk上升沿或下降沿時我們?nèi)》匆淮蝟ut(輸出信號)的取值。這樣我們就能夠?qū)崿F(xiàn)對clk的2分頻。
本方法可以進(jìn)行迭代,我們可以取out1做中間變量對clk進(jìn)行2分頻,然后再對out1進(jìn)行同樣的2分頻,這樣就可以得到我們需要的4分頻。
我們可以得到結(jié)論,,我們通過對clk的2分頻的n次迭代,我們就可以得到2^n次分頻。
3.2 脈沖計數(shù)法
利用2分頻我們能夠得到一些我們需要的偶次分頻,但是沒法實現(xiàn)所有的偶次分頻,比如6分頻、30分頻等。我們在實現(xiàn)這一類分頻的時候我們需要采用上升沿(下降沿)計數(shù)的方式對clk進(jìn)行分頻。
我們在編程時需要定義一個寄存器類型的變量count進(jìn)行計數(shù),如果我們需要進(jìn)行2n次分頻,那么我們就在count計數(shù)到n時把輸出信號out取反并且把count清零并重新計數(shù)。比如6分頻的具體代碼實現(xiàn)如下:
3.3 相位偏移法
由于在FPGA的編程實現(xiàn)中,無法同時在一個進(jìn)程內(nèi)對上升沿和下降沿進(jìn)行監(jiān)測,所以在占空比為50%的奇次分頻的實現(xiàn)上需要不同的解決方案。通常采用兩個相位上相差半個時鐘周期的2n次分頻的中間信號變量相或得到,這就是利用相位偏移法實現(xiàn)的分頻策略。
經(jīng)過總結(jié)我們能夠得到以下的規(guī)律:
我們把半個時鐘周期當(dāng)做一個單位長度,那么2n+1次分頻的信號里就有4n+2個單位長度,而我們需要把4n+2分為兩個2n+1,那么我們就需要兩個相位上相差一個單位長度的,并且占空比為2n/(4n+2)的2n+1次分頻信號相或來得到,而該信號可以由上述的脈沖計數(shù)法得到。
利用上文的規(guī)律,以占空比為50%的5分頻為例,我們需要兩個占空比為(2*2)/(4*2+2)的5分頻信號進(jìn)行合成,其中這兩個信號可以利用脈沖計數(shù)法得到,并且保持相位相差半個時5鐘周期,我們會發(fā)現(xiàn)這兩個信號相或的結(jié)果就是我們需要的占空比為40%的5分頻。具體實現(xiàn)如下:
在實現(xiàn)奇數(shù)次分頻的基礎(chǔ)上,我們可以繼續(xù)實現(xiàn)n次分頻的占空比為x/2n的信號,與脈沖計數(shù)法不同的是,這里的x可以是1到2n-1的任意整數(shù)。
我們把兩個偏移信號命名為sgn1和sgn2,兩個信號由于偏移會有一部分重疊的長度,設(shè)該長度為y,則通過與運算能夠得到占空比為y/2n的信號,如果通過或運算則能得到占空比為(2n-y)/2n的信號。
4 結(jié)束語
利用基本2分頻法、脈沖計數(shù)法、相位偏移法,就基本足夠目前工程上所需要的各種分頻的實現(xiàn),并且每種方法的適用范圍各有不同,相位偏移法適用范圍最廣,同時也最消耗內(nèi)部資源,相對的基本2分頻法適用范圍最窄,也是最省資源。合理利用這些分頻策略將可以為我們的工程中為我們解決實際問題提供不少的幫助。
參考文獻(xiàn)
[1]高培軍.基于FPGA的多種形式分頻的設(shè)計與實現(xiàn) 可編程技術(shù)專題 2004年第六期:30-31
[2]潘松 黃繼業(yè) 潘明 《EDA技術(shù)實用教程》(第四版) 科學(xué)出版社 2010年
[3]林海波.基于CPLD/FPGA的半整數(shù)分頻器的設(shè)計 國外電子元器件 2003年第九期:68-70