0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于FPGA的分頻器設(shè)計(jì)

CHANBAEK ? 來(lái)源:小小研究生 ? 作者:xxyjs2020 ? 2023-06-23 16:52 ? 次閱讀

數(shù)電基礎(chǔ)

板載晶振提供的時(shí)鐘信號(hào)頻率是固定的,不一定滿(mǎn)足需求,因此需要對(duì)基準(zhǔn)時(shí)鐘進(jìn)行分頻。要得到更慢的時(shí)鐘頻率可以 分頻 ,要得到更快的時(shí)鐘頻率可以 倍頻 。我們有兩種方式可以改變頻率,一種是 鎖相環(huán) (PLL,后面章節(jié)會(huì)講解),另一種是用 Verilog代碼描述。

用Verilog代碼描述的往往是分頻電路,即 分頻器 。分頻就是輸出信號(hào)的頻率是輸入信號(hào)的1/n。原理是,輸入信號(hào)為計(jì)數(shù)脈沖,每n個(gè)脈沖輸出就翻轉(zhuǎn)一次。就可以看作是對(duì)輸入信號(hào)的“分頻”。十進(jìn)制的計(jì)數(shù)器對(duì)應(yīng)十分頻,如果是二進(jìn)制的計(jì)數(shù)器那就是二分頻,還有四進(jìn)制、八進(jìn)制、十六進(jìn)制等等以此類(lèi)推。

設(shè)計(jì)規(guī)劃

實(shí)現(xiàn)6分頻,第一種方法是僅實(shí)現(xiàn)分頻,第二種方法是降頻:

圖片

圖片

時(shí)鐘信號(hào)周期為1格,輸出信號(hào)周期為6格,因此頻率為原來(lái)的1/6,也就是6分頻。

方法一:只需要讓計(jì)數(shù)器從0計(jì)數(shù)到2,就讓clk_out輸出信號(hào)取反。

方法二:方法一得到的新時(shí)鐘信號(hào)和真正的時(shí)鐘信號(hào)有區(qū)別,在高速系統(tǒng)中 不穩(wěn)定 。因?yàn)樵?a target="_blank">FPGA中凡是時(shí)鐘信號(hào)都要連接到全局時(shí)鐘網(wǎng)絡(luò)上,它能夠使時(shí)鐘信號(hào)到達(dá)每個(gè)寄存器的時(shí)間都盡可能相同,以保證更低的時(shí)鐘偏斜(Skew)和抖動(dòng)(Jitter)。用分頻的方式產(chǎn)生的clk_out信號(hào)并沒(méi)有連接到全局時(shí)鐘網(wǎng)絡(luò)上,但sys_clk則是由外部晶振直接通過(guò)管腳連接到了FPGA的專(zhuān)用時(shí)鐘管腳上,自然就會(huì)連接到全局時(shí)鐘網(wǎng)絡(luò)上。因此我們可以產(chǎn)生一個(gè)clk_flag標(biāo)志信號(hào),從0計(jì)數(shù)到5,就變高電平,下一個(gè)時(shí)鐘電平變?yōu)榈碗娖讲⒕S持5個(gè)時(shí)鐘間隔。和方法1對(duì)比,相當(dāng)于把clk_out的上升沿信號(hào)變成了clk_flag的脈沖電平信號(hào)。雖然需要多使用一些寄存器資源但是能使系統(tǒng)更加穩(wěn)定。

編寫(xiě)代碼

module divider_six
(
input wire sys_clk , //系統(tǒng)時(shí)鐘50MHz
input wire sys_rst_n , 
output reg clk_out 
)
;


 reg [1:0] cnt; 
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt <= 2'b0;
 else if(cnt == 2'd2)
 cnt <= 2'b0;
 else
 cnt <= cnt + 1'b1;


 //clk_out:6分頻50%占空比輸出
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 clk_out <= 1'b0;
 else if(cnt == 2'd2)
 clk_out <= ~clk_out;


 endmodule

我們觀察cnt和clk_out的變化條件:計(jì)數(shù)器發(fā)生改變的條件有兩個(gè),一個(gè)是時(shí)鐘上升沿,一個(gè)是復(fù)位有效(復(fù)位下降沿)。計(jì)數(shù)器發(fā)生的改變有兩個(gè),要么+1要么清零。清零條件有兩個(gè):復(fù)位和溢出。因此第一個(gè)always塊中有三個(gè)判斷條件:復(fù)位和溢出時(shí)清零,其他的時(shí)候+1。

clk_out的變化條件:時(shí)鐘上升沿和復(fù)位有效(復(fù)位下降沿)。復(fù)位時(shí)clk_out為低電平,溢出時(shí)取反。

圖片

module divider_six
(
input wire sys_clk , //系統(tǒng)時(shí)鐘50MHz
input wire sys_rst_n , 
output reg clk_flag
);


 reg [2:0] cnt; 
 //cnt:計(jì)數(shù)器從0到5循環(huán)計(jì)數(shù)
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 cnt <= 3'b0;
 else if(cnt == 3'd5)
 cnt <= 3'b0;
 else
 cnt <= cnt + 1'b1;


 //clk_flag:脈沖信號(hào)指示6分頻
 always@(posedge sys_clk or negedge sys_rst_n)
 if(sys_rst_n == 1'b0)
 clk_flag <= 1'b0;
 else if(cnt == 3'd4)
 clk_flag <= 1'b1;
 else
 clk_flag <= 1'b0;


 endmodule

和方法1相似,區(qū)別在于輸出的變化不同,從0計(jì)數(shù)到4輸出變?yōu)?,否則為0。cnt溢出的條件是計(jì)數(shù)到5,輸出的變化是計(jì)數(shù)到4。

圖片

編寫(xiě)testbench

`timescale 1ns/1ns
module tb_divider_six();
reg sys_clk;
reg sys_rst_n;
wire clk_out;


//初始化系統(tǒng)時(shí)鐘、全局復(fù)位
 initial begin
 sys_clk = 1'b1;
 sys_rst_n <= 1'b0;
 #20
 sys_rst_n <= 1'b1;
 end


 //sys_clk:模擬系統(tǒng)時(shí)鐘,每10ns電平翻轉(zhuǎn)一次,周期為20ns,頻率為50MHz
 always #10 sys_clk = ~sys_clk;
 //--------------------divider_sixht_inst--------------------
 divider_six divider_six_inst
 (
 .sys_clk (sys_clk ), //input sys_clk
 .sys_rst_n (sys_rst_n ), //input sys_rst_n
 .clk_out (clk_out ) //output clk_out
 );
 endmodule

兩種方法的testbench代碼一樣,除了輸出是clk_out還是clk_flag。

對(duì)比波形

如果波形沒(méi)有出來(lái),可以在modelsim通過(guò)view的transcript查看錯(cuò)誤。

方法1得到的波形

圖片

方法2得到的波形

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1630

    文章

    21782

    瀏覽量

    604982
  • 晶振
    +關(guān)注

    關(guān)注

    34

    文章

    2898

    瀏覽量

    68194
  • 分頻器
    +關(guān)注

    關(guān)注

    43

    文章

    447

    瀏覽量

    50017
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1351

    瀏覽量

    110223
  • 時(shí)鐘信號(hào)
    +關(guān)注

    關(guān)注

    4

    文章

    451

    瀏覽量

    28627
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于FPGA的通用數(shù)控分頻器設(shè)計(jì)方案

    本文首先介紹了各種分頻器的實(shí)現(xiàn)原理,并在FPGA開(kāi)發(fā)平臺(tái)上通過(guò)VHDL文本輸入和原理圖輸入相結(jié)合的方式,編程給出了仿真結(jié)果。最后通過(guò)對(duì)各種分頻的分析,利用層次化設(shè)計(jì)思想,綜合設(shè)計(jì)出了一種基于F
    發(fā)表于 05-07 09:43 ?5220次閱讀
    基于<b class='flag-5'>FPGA</b>的通用數(shù)控<b class='flag-5'>分頻器</b>設(shè)計(jì)方案

    基于FPGA的任意數(shù)值分頻器的設(shè)計(jì)

    【摘要】:介紹了基于FPGA的任意分頻系數(shù)的分頻器的設(shè)計(jì),該分頻器能實(shí)現(xiàn)分頻系數(shù)和占空比均可以調(diào)節(jié)的3類(lèi)
    發(fā)表于 04-26 16:09

    FPGA分頻器設(shè)計(jì)

    誰(shuí)幫忙設(shè)計(jì)一下模數(shù)轉(zhuǎn)換芯片ADC0809以及串行通信部分均需要有相應(yīng)的時(shí)鐘驅(qū)動(dòng)。而此次選擇的Altera CycloneⅡ系列FPGA中的EP2C5T144C8的系統(tǒng)時(shí)鐘為20MHz,因此根據(jù)需要
    發(fā)表于 05-09 11:53

    ISE serdes Aurora,init_clk頻率是多少?

    ; reference_clk_1_p_r,GTXQ0_N => reference_clk_1_n_r, 我應(yīng)該使用哪種方式,根據(jù)參考設(shè)計(jì)將其連接到250 Mhz,或者使用低至50 Mhz的fpga分頻器?
    發(fā)表于 07-27 12:10

    基于FPGA 的等占空比任意整數(shù)分頻器的設(shè)計(jì)

    基于FPGA 的等占空比任意整數(shù)分頻器的設(shè)計(jì) 給出了一種基于FPGA 的等占空比任意整數(shù)分頻電路的設(shè)計(jì)方法。首先簡(jiǎn)要介紹了FPGA 器件的
    發(fā)表于 02-22 14:22 ?39次下載

    基于CPLD/FPGA的多功能分頻器的設(shè)計(jì)與實(shí)現(xiàn)

    基于CPLD/FPGA的多功能分頻器的設(shè)計(jì)與實(shí)現(xiàn) 引言   分頻器在CPLD/FPGA設(shè)計(jì)中使用頻率比較高,盡管目前大部分設(shè)計(jì)中采用芯片廠家集成的鎖相環(huán)資源 ,但是對(duì)于要求
    發(fā)表于 11-23 10:39 ?1360次閱讀
    基于CPLD/<b class='flag-5'>FPGA</b>的多功能<b class='flag-5'>分頻器</b>的設(shè)計(jì)與實(shí)現(xiàn)

    什么是分頻器 分頻器介紹

    什么是分頻器 分頻器介紹     分頻器是指將不同頻段的聲音信號(hào)區(qū)分開(kāi)來(lái),分別給于放大,然后送到相應(yīng)頻段的揚(yáng)聲中再進(jìn)行重放
    發(fā)表于 02-05 17:51 ?4476次閱讀

    應(yīng)用于倍頻電路的預(yù)置可逆分頻器設(shè)計(jì)

    分析了應(yīng)用于倍頻電路的預(yù)置可逆分頻器的工作原理,推導(dǎo)了觸發(fā)的驅(qū)動(dòng)函數(shù)。并建立了基于simulink 和FPGA分頻器模型,實(shí)驗(yàn)結(jié)果表明分頻器
    發(fā)表于 08-17 16:50 ?2085次閱讀
    應(yīng)用于倍頻電路的預(yù)置可逆<b class='flag-5'>分頻器</b>設(shè)計(jì)

    FPGA實(shí)現(xiàn)小數(shù)分頻器

    介紹了一種基于FPGA的雙模前置小數(shù)分頻器分頻原理及電路設(shè)計(jì),并用VHDL編程實(shí)現(xiàn)分頻器的仿真.
    發(fā)表于 11-29 16:43 ?48次下載
    <b class='flag-5'>FPGA</b>實(shí)現(xiàn)小數(shù)<b class='flag-5'>分頻器</b>

    fpga分頻器程序參考程序

    發(fā)表于 09-09 14:14 ?11次下載

    用Verilog實(shí)現(xiàn)基于FPGA的通用分頻器的設(shè)計(jì)

    用 Verilog實(shí)現(xiàn)基于FPGA 的通用分頻器的設(shè)計(jì)時(shí)鐘分頻包括奇數(shù)和偶數(shù)分頻
    發(fā)表于 07-14 11:32 ?46次下載

    一種基于FPGA分頻器的實(shí)現(xiàn)

    一種基于FPGA分頻器的實(shí)現(xiàn)說(shuō)明。
    發(fā)表于 05-25 16:57 ?16次下載

    基于CPLD/FPGA的半整數(shù)分頻器設(shè)計(jì)方案

    基于CPLD/FPGA的半整數(shù)分頻器設(shè)計(jì)方案
    發(fā)表于 06-17 09:37 ?21次下載

    FPGA分頻器的設(shè)計(jì)方法

    FPGA分頻器是一種常用于數(shù)字信號(hào)處理、通信系統(tǒng)、雷達(dá)系統(tǒng)等領(lǐng)域的電路,其作用是將信號(hào)分成多個(gè)頻段。
    發(fā)表于 05-22 14:29 ?2358次閱讀
    <b class='flag-5'>FPGA</b><b class='flag-5'>分頻器</b>的設(shè)計(jì)方法

    FPGA學(xué)習(xí)-分頻器設(shè)計(jì)

    分頻器設(shè)計(jì) 一:分頻器概念 板載時(shí)鐘往往 是 有限個(gè)( 50MHZ/100MHZ/24MHZ/60MHZ… ),如果在設(shè)計(jì)中需要其他時(shí)鐘時(shí),板載時(shí)鐘不滿(mǎn)足時(shí),需要對(duì)板載時(shí)鐘進(jìn)行分頻 / 倍頻,目的
    的頭像 發(fā)表于 11-03 15:55 ?2073次閱讀
    <b class='flag-5'>FPGA</b>學(xué)習(xí)-<b class='flag-5'>分頻器</b>設(shè)計(jì)