色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > verilog語言實(shí)現(xiàn)任意分頻

          verilog語言實(shí)現(xiàn)任意分頻

          作者: 時(shí)間:2017-10-13 來源:網(wǎng)絡(luò) 收藏

          原文出自:是指使輸出信號(hào)頻率為輸入信號(hào)頻率整數(shù)分之一的。在許多電子設(shè)備中如電子鐘、頻率合成器等,需要各種不同頻率的信號(hào)協(xié)同工作,常用的方法是以穩(wěn)定度高的晶體振蕩器為主振源,通過變換得到所需要的各種頻率成分,是一種主要變換手段。早期的多為正弦分頻器,隨著數(shù)字集成電路的發(fā)展,脈沖分頻器(又稱數(shù)字分頻器)逐漸取代了正弦分頻器。下面以Verilog HDL 語言為基礎(chǔ)介紹占空比為50%的分頻器。1偶分頻偶分頻比較簡(jiǎn)單,假設(shè)為N分頻,只需計(jì)數(shù)到N/2-1,然后時(shí)鐘翻轉(zhuǎn)、計(jì)數(shù)清零,如此循環(huán)就可以得到N(偶)分頻。代碼如下。module fp_even(clk_out,clk_in,rst);output clk_out;input clk_in;input rst;reg [1:0] cnt;reg clk_out;parameter N=6;always @ (posedge clk_in or negedge rst)beginif(!rst) begin cnt = 0; clk_out = 0; endelse begin if(cnt==N/2-1) begin clk_out = !clk_out; cnt=0; end else cnt = cnt + 1; endendendmodule可以通過改變參量N的值和計(jì)數(shù)變量cnt的位寬實(shí)現(xiàn)任意偶分頻。偶分頻(N=6)的RTL原理圖:

          本文引用地址:http://cafeforensic.com/article/201710/365693.htm

          偶分頻(N=6)的行為仿真結(jié)果:

          2奇分頻實(shí)現(xiàn)奇數(shù)(N)分頻,分別用上升沿計(jì)數(shù)到(N-1)/2,再計(jì)數(shù)到N-1;用下降沿計(jì)數(shù)到(N-1)/2,再計(jì)數(shù)到N-1,得到兩個(gè)波形,然后把它們相或即可得到N分頻。代碼如下:module fp_odd(clk_out,clk_p,clk_n,clk_in,rst);output clk_out;output clk_p,clk_n;input clk_in,rst;reg [2:0] cnt_p,cnt_n;reg clk_p,clk_n;parameter N=5;always @ (posedge clk_in or negedge rst)begin if(!rst) cnt_p = 0; else if(cnt_p==N-1) cnt_p =0; else cnt_p = cnt_p + 1;endalways @ (posedge clk_in or negedge rst)begin if(!rst) clk_p = 0; else if(cnt_p==(N-1)/2) clk_p = !clk_p; else if(cnt_p==N-1) clk_p = !clk_p;endalways @ (negedge clk_in or negedge rst)begin if(!rst) cnt_n = 0; else if(cnt_n==N-1) cnt_n =0; else cnt_n = cnt_n + 1;endalways @ (negedge clk_in or negedge rst)begin if(!rst) clk_n = 0; else if(cnt_n==(N-1)/2) clk_n = !clk_n; else if(cnt_n==N-1) clk_n = !clk_n;endassign clk_out = clk_p | clk_n;endmoduleRTL SchemaTIc:

          Simulate Behavioral Model:

          同理,可以通過改變參量N的值和計(jì)數(shù)變量cnt_p和cnt_n的位寬實(shí)現(xiàn)任意奇分頻。3任意占空比的任意分頻在程序設(shè)計(jì)中,我們往往要對(duì)一個(gè)頻率進(jìn)行任意分頻,而且占空比也有一定的要求這樣的話,對(duì)于程序有一定的要求,現(xiàn)在在前面兩個(gè)實(shí)驗(yàn)的基礎(chǔ)上做一個(gè)簡(jiǎn)單的總結(jié),實(shí)現(xiàn)對(duì)一個(gè)頻率的任意占空比的任意分頻。比如: FPGA系統(tǒng)時(shí)鐘是50M Hz,而我們要產(chǎn)生的頻率是880Hz,那么,我們需要對(duì)系統(tǒng)時(shí)鐘進(jìn)行分頻。很容易想到用計(jì)數(shù)的方式來分頻:50000000/880 = 56818。顯然這個(gè)數(shù)字不是2的整冪次方,那么我們可以設(shè)定一個(gè)參數(shù),讓它到56818的時(shí)候重新計(jì)數(shù)就可以實(shí)現(xiàn)了。程序如下:module div(clk, clk_div);input clk;output clk_div;reg [15:0] counter;always @(posedge clk)if(counter==56817) counter = 0;else counter = counter+1;assign clk_div = counter[15];endmodule分頻的應(yīng)用很廣泛,一般的做法是先用高頻時(shí)鐘計(jì)數(shù),然后使用計(jì)數(shù)器的某一位輸出作為工作時(shí)鐘進(jìn)行其他的邏輯設(shè)計(jì),上面的程序就是一個(gè)體現(xiàn)。下面我們來算一下它的占空比:我們清楚地知道,這個(gè)輸出波形在counter為0到32767的時(shí)候?yàn)榈停?2768到56817的時(shí)候?yàn)楦?,占空比?0%多一些,如果我們需要占空比為50%,那么我們需要再設(shè)定一個(gè)參數(shù),使它為56817的一半,使達(dá)到它的時(shí)候波形翻轉(zhuǎn),就可以實(shí)現(xiàn)結(jié)果了。程序如下:module div(clk, clk_div);input clk;output clk_div;reg [14:0] counter;always @(posedge clk)if(counter==28408) counter = 0;else counter = counter+1;reg clk_div;always @(posedge clk) if(counter==28408) clk_div = ~clk_div;endmodule繼續(xù)讓我們來看如何實(shí)現(xiàn)任意占空比,比如還是由50 M分頻產(chǎn)生880Hz,而分頻得到的信號(hào)的占空比為30%。56818&TImes;30%=17045module div(clk,reset,clk_div,counter);input clk,reset;output clk_div;output [15:0] counter;reg [15:0] counter;reg clk_div;always @(posedge clk)if(!reset) counter = 0;else if(counter==56817) counter = 0;else counter = counter+1;always @(posedge clk)if(!reset) clk_div = 0;else if(counter17045) clk_div = 1;else clk_div = 0;endmoduleRTL級(jí)描述:

          仿真結(jié)果:

          4小結(jié)通過以上幾個(gè)例子對(duì)比不難發(fā)現(xiàn),借助計(jì)數(shù)器來實(shí)現(xiàn)任意點(diǎn)空比的任意分頻的方法簡(jiǎn)單,且用語言進(jìn)行行為描述時(shí),代碼簡(jiǎn)潔、易懂、通用。通過以上的學(xué)習(xí),對(duì)分頻器有了比較深刻的認(rèn)識(shí),將在以后的學(xué)習(xí)中會(huì)有廣泛的應(yīng)用。



          關(guān)鍵詞: verilog 分頻器 電子電路

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉