FPGA/CPLD中常見模塊設(shè)計精華集錦(一)
?。础≤浖崿F(xiàn)
在設(shè)計的總體構(gòu)思和器件選擇完成后,必須進行的工作是建立設(shè)計輸入文件,該文件主要用于描述所設(shè)計電路的邏輯功能。這里使用的是XILINX公司提供的開發(fā)工具FOUNDATION 4.1。本設(shè)計采用硬件描述語言VHDL來設(shè)計,其部分程序如下:
?。澹睿簦椋簦?lvds is
?。穑铮颍?(
pclk: in STD LOGIC;
?。穑悖欤隷62: out std_logic_vector(31 downto 0);?
pclk_4: out std_logic_vector(31 downto 0));
?。澹睿?lvds;
architecture lvds_arch of lvds is
?。悖铮恚穑铮睿澹睿?clkdll
?。穑铮颍簦?clkin: in std_logic;
clkfb : in std_logic;
?。颍螅簦?in std_logic;
?。悖欤耄埃?out std_logic;
?。悖欤耄梗?: out std_logic;
?。悖欤耄保福埃?out std_logic;
clk270: out std_logic;
?。悖欤耄玻?: out std_logic;
clkdv: out std_logic;
?。欤铮悖耄澹洌?out std_logic);
end component;
?。猓澹纾椋?p> ?。颍澹螅澹?n<=‘0' ;
?。酰椋猓酰?: ibufg port map (
?。?=> pclk,
?。?=> clk);
?。酰洌欤欤?clkdll port map( clkin => clk,
?。颍螅?=> reset_n,
clkfb => clkfb,
?。悖欤耄?=> clk0,
clk90 => open,
?。悖欤耄保福?=> open,
?。悖欤耄玻罚?=> open,
?。悖欤耄玻?=> clk2x,
?。悖欤耄洌?=> clkdv,
?。欤铮悖耄澹?=> locked
?。?
bufg_clk0: bufg port map ( i => clk0,
?。铮剑荆悖欤隷int2;
);
?。悖欤耄妫猓迹剑悖欤隷int2;
?。穑颍铮悖澹螅螅ǎ悖欤耄玻?
begin
?。椋?clk2x′event and clk2x=′1′ then
clk_int <=clk int2;
?。悖欤隷int3<= clkdv;
?。穑悖欤隷62(0)<=clk_int;
?。穑悖欤隷62(1)<=clk_int;
…
…
?。穑悖欤隷62(31)<=clk_int;
?。穑悖欤隷4(0)<=clk_int3;
?。穑悖欤隷4(1)<=clk_int3;
…
…
?。穑悖欤隷4(31)<=clk_int3;
?。澹睿?if;
?。澹睿?process;
?。澹睿?lvds_arch;
四、基于FPGA的多種形式分頻的設(shè)計與實現(xiàn)
分頻器是數(shù)字系統(tǒng)設(shè)計中的基本電路,根據(jù)不同設(shè)計的需要,我們會遇到偶數(shù)分頻、奇數(shù)分頻、半整數(shù)分頻等,有時要求等占空比,有時要求非等占空比。在同一個設(shè)計中有時要求多種形式的分頻。通常由計數(shù)器或計數(shù)器的級聯(lián)構(gòu)成各種形式的偶數(shù)分頻及非等占空比的奇數(shù)分頻,實現(xiàn)較為簡單。但對半整數(shù)分頻及等占空比的奇數(shù)分頻實現(xiàn)較為困難。本文利用VHDL硬件描述語言,通過QuartusⅡ3.0開發(fā)平臺,使用Altera公司的FPGA,設(shè)計了一種能夠滿足上述各種要求的較為通用的分頻器。
一、電路設(shè)計
采用FPGA實現(xiàn)半整數(shù)分頻器,可以采用以下方法:設(shè)計一個模N的計數(shù)器,再設(shè)計一個脈沖扣除電路,每來兩個脈沖扣除一個脈沖,即可實現(xiàn)分頻系數(shù)為N-0.5的分頻器。脈沖扣除電路由異或門和一個2分頻器構(gòu)成。本設(shè)計在半整數(shù)分頻器原理的基礎(chǔ)上,對異或門加一個使能控制信號,通過對異或門和計數(shù)器計數(shù)狀態(tài)值的控制,實現(xiàn)同一個電路完成多種形式分頻,如圖1所示。
二、VHDL語言的實現(xiàn)
現(xiàn)通過設(shè)計一個可以實現(xiàn)8.5分頻,等占空比的17分頻,2、4、8、16、32分頻,及占空比為1∶8和4∶5的9分頻等多種形式分頻的分頻器,介紹該通用分頻器的FPGA實現(xiàn)。
由圖1所示的電路原理圖可知,分頻器由帶使能端的異或門、模N計數(shù)器和一個2分頻器組成,本設(shè)計用D觸發(fā)器來完成2分頻的功能,實現(xiàn)方法是:將觸發(fā)器的Q反輸出端反饋回輸入端D,將計數(shù)器的一個計數(shù)輸出端作為D觸發(fā)器的時鐘輸入端。各功能模塊的VHDL語言實現(xiàn)如下。
1.模N計數(shù)器的實現(xiàn)
一般設(shè)計中用到計數(shù)器時,我們可以調(diào)用lpm庫中的計數(shù)器模塊,也可以采用VHDL語言自己設(shè)計一個模N計數(shù)器。本設(shè)計采用VHDL語言設(shè)計一個最大模值為16的計數(shù)器。輸入端口為:使能信號en,復(fù)位信號clr和時鐘信號clk;輸出端口為:qa、qb、qc、qd。其VHDL語言描述略。
2.帶使能控制的異或門的實現(xiàn)
輸入端為:xor_en:異或使能,a和b:異或輸入;輸出端為:c:異或輸出。當(dāng)xor_en為高電平時,c輸出a和b的異或值。當(dāng)xor_en為低電平時,c輸出信號b。其VHDL語言略。
3.2分頻(觸發(fā)器)的實現(xiàn)
輸入端為:時鐘信號clk,輸入信號d;輸出端為:q:輸出信號a,q1:輸出信號a反。其VHDL語言略。
4.分頻器的實現(xiàn)
本設(shè)計采用層次化的設(shè)計方法,首先設(shè)計實現(xiàn)分頻器電路中各組成電路元件,然后通過元件例化的方法,調(diào)用各元件,實現(xiàn)整個分頻器。其VHDL語言略。
三、仿真結(jié)果及硬件電路的測試
本設(shè)計的目的是通用性和簡易性,只要對上述程序稍加改動即可實現(xiàn)多種形式的分頻。
1.實現(xiàn)8.5分頻和等占空比的17分頻
只要將上述程序中,調(diào)用計數(shù)器模塊時端口qa、qb、qc匹配為open狀態(tài),同時置xor_en為高電平即可。從編譯報告看出總共占用8個邏輯單元(logic elements),其仿真波形如圖2~4所示。
圖二
圖三
圖四
由圖中qxiao和clk的波形可以看出,每隔8.5個時鐘周期,qxiao信號產(chǎn)生一個上升沿,從而實現(xiàn)分頻系數(shù)是8.5的分頻,同時在qzheng端得到等占空比的17分頻。設(shè)clk為170MHz,則qxiao輸出為20MHz,qzheng輸出為10MHz。
2.實現(xiàn)占空比為1∶8和4∶5的9分頻
只要上述程序的xor_en置低電平即可在qxiao輸出占空比為1∶8的9分頻信號;在qzheng2輸出占空比為4∶5的9分頻信號。同樣僅占8個邏輯單元(logic elements)。仿真波形如下。
3.實現(xiàn)等占空比的2、4、8、16和32分頻
只要將上述程序中的xor_en置為低電平,同時將計數(shù)器模塊的計數(shù)最大值設(shè)為16即可。仿真波形如下。
由此可見,只要稍微改變計數(shù)器的計數(shù)狀態(tài)值,對異或門進行選通控制,即可實現(xiàn)上述多種形式的分頻。本設(shè)計在Altera公司的EP1K50QC208-3構(gòu)成的測試平臺上測試通過,性能良好。
結(jié)束語
我們在設(shè)計模擬雷達(dá)脈沖信號和用FPGA開發(fā)擴頻芯片時就用到了上述多種形式得分頻。本文旨在介紹一種進行FPGA開發(fā)時,所需多種分頻的實現(xiàn)方法,如果設(shè)計中所需分頻形式較多,可以直接利用本設(shè)計,通過對程序的稍微改動以滿足自己設(shè)計的要求。如果設(shè)計中需要分頻形式較少,可以利用本設(shè)計部分程序,以節(jié)省資源。
fpga相關(guān)文章:fpga是什么
塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理 鑒相器相關(guān)文章:鑒相器原理 脈沖點火器相關(guān)文章:脈沖點火器原理 雙絞線傳輸器相關(guān)文章:雙絞線傳輸器原理 三相異步電動機相關(guān)文章:三相異步電動機原理 鎖相環(huán)相關(guān)文章:鎖相環(huán)原理 三維掃描儀相關(guān)文章:三維掃描儀原理
評論