在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 實(shí)驗(yàn)17:分頻器

            實(shí)驗(yàn)17:分頻器

            作者: 時間:2023-10-12 來源:電子森林 收藏

            設(shè)計(jì)一個任意整數(shù)。

            本文引用地址:http://www.biyoush.com/article/202310/451444.htm

            時鐘信號的處理是的特色之一,因此也是設(shè)計(jì)中使用頻率非常高的基本設(shè)計(jì)之一。一般在FPGA中都有集成的鎖相環(huán)可以實(shí)現(xiàn)各種時鐘的分頻和倍頻設(shè)計(jì),但是通過語言設(shè)計(jì)進(jìn)行時鐘分頻是最基本的訓(xùn)練,在對時鐘要求不高的設(shè)計(jì)時也能節(jié)省鎖相環(huán)資源。在本實(shí)驗(yàn)中我們將實(shí)現(xiàn)任意整數(shù)的分頻器,分頻的時鐘保持50%占空比。 

            1,偶數(shù)分頻:偶數(shù)倍分頻相對簡單,比較容易理解。通過計(jì)數(shù)器計(jì)數(shù)是完全可以實(shí)現(xiàn)的。如進(jìn)行N倍偶數(shù)分頻,那么通過時鐘觸發(fā)計(jì)數(shù)器計(jì)數(shù),當(dāng)計(jì)數(shù)器從0計(jì)數(shù)到N/2-1時,輸出時鐘進(jìn)行翻轉(zhuǎn),以此循環(huán)下去。

            2,奇數(shù)分頻: 如果要實(shí)現(xiàn)占空比為50%的奇數(shù)倍分頻,不能同偶數(shù)分頻一樣計(jì)數(shù)器記到一半的時候輸出時鐘翻轉(zhuǎn),那樣得不到占空比50%的時鐘。以待分頻時鐘CLK為例,如果以偶數(shù)分頻的方法來做奇數(shù)分頻,在CLK上升沿觸發(fā),將得到不是50%占空比的一個時鐘信號(正周期比負(fù)周期多一個時鐘或者少一個時鐘);但是如果在CLK下降沿也觸發(fā),又得到另外一個不是50%占空比的時鐘信號,這兩個時鐘相位正好相差半個CLK時鐘周期通過這兩個時鐘信號進(jìn)行邏輯運(yùn)算我們可以巧妙的得到50%占空比的時鐘。

            總結(jié)如下:對于實(shí)現(xiàn)占空比為50%的N倍奇數(shù)分頻,首先進(jìn)行上升沿觸發(fā)進(jìn)行模N計(jì)數(shù),計(jì)數(shù)選定到某一個值進(jìn)行輸出時鐘翻轉(zhuǎn),然后經(jīng)過(N-1)/2再次進(jìn)行翻轉(zhuǎn)得到一個占空比非50%奇數(shù)n分頻時鐘。再者同時進(jìn)行下降沿觸發(fā)的模N計(jì)數(shù),到和上升沿觸發(fā)輸出時鐘翻轉(zhuǎn)選定值相同值時,進(jìn)行輸出時鐘時鐘翻轉(zhuǎn),同樣經(jīng)過(N-1)/2時,輸出時鐘再次翻轉(zhuǎn)生成占空比非50%的奇數(shù)n分頻時鐘。兩個占空比非50%的n分頻時鐘進(jìn)行邏輯運(yùn)算(正周期多的相與,負(fù)周期多的相或),得到占空比為50%的奇數(shù)n分頻時鐘。

            用行為級描述任意整數(shù)分頻器
            程序清單divide.v

             module divide #
             (								//parameter是verilog里參數(shù)定義
             parameter	WIDTH	=	24,		//計(jì)數(shù)器的位數(shù),計(jì)數(shù)的最大值為 2**(WIDTH-1)
             parameter	N		=	12_000_000		//分頻系數(shù),請確保 N<2**(WIDTH-1),否則計(jì)數(shù)會溢出
             )
             (
             input		clk,		//clk連接到FPGA的C1腳,頻率為12MH
             zinput		rst_n,		//復(fù)位信號,低有效,
             output		clkout		//輸出信號,可以連接到LED觀察分頻的時鐘
             ); 
             reg	[WIDTH-1:0]	cnt_p,cnt_n;	//cnt_p為上升沿觸發(fā)時的計(jì)數(shù)器,cnt_n為下降沿觸發(fā)時的計(jì)數(shù)器
             reg	clk_p,clk_n;	//clk_p為上升沿觸發(fā)時分頻時鐘,clk_n為下降沿觸發(fā)時分頻時鐘 
             /**********上升沿觸發(fā)部分**************************************/
             //上升沿觸發(fā)時計(jì)數(shù)器的控制
             always @(posedge clk or negedge rst_n)	//posedge和negedge是verilog表示信號上升沿和下降沿
            	begin		//當(dāng)clk上升沿來臨或者rst_n變低的時候執(zhí)行一次always里的語句
            		if(!rst_n)
            			cnt_p <= 1'b0;
            		else if(cnt_p == (N-1))
            			cnt_p <= 1'b0;
            		else 
            			cnt_p <= cnt_p + 1'b1;		//計(jì)數(shù)器一直計(jì)數(shù),當(dāng)計(jì)數(shù)到N-1的時候清零,這是一個模N的計(jì)數(shù)器
            	end 
            //上升沿觸發(fā)的分頻時鐘輸出,如果N為奇數(shù)得到的時鐘占空比不是50%;如果N為偶數(shù)得到的時鐘占空比為50%
            always @(posedge clk or negedge rst_n)
            	begin
            		if(!rst_n)
            			clk_p <= 1'b0;
            		else if(cnt_p < (N>>1))			//N>>1表示右移一位,相當(dāng)于除以2取商
            			clk_p <= 1'b0;
            		else 
            			clk_p <= 1'b1;		//得到的分頻時鐘正周期比負(fù)周期多一個clk時鐘
            	end
            	/*****************下降沿觸發(fā)部分**************************************/
            	//下降沿觸發(fā)時計(jì)數(shù)器的控制        	
            	always @(negedge clk or negedge rst_n)
            	begin
            		if(!rst_n)
            			cnt_n <= 1'b0;
            		else if(cnt_n == (N-1))
            			cnt_n <= 1'b0;
            		else 
            			cnt_n <= cnt_n + 1'b1;
            	end 
            	//下降沿觸發(fā)的分頻時鐘輸出,和clk_p相差半個clk時鐘
            always @(negedge clk or negedge rst_n)
            	begin
            		if(!rst_n)
            			clk_n <= 1'b0;
            		else if(cnt_n < (N>>1))  
            			clk_n <= 1'b0;
            		else 
            			clk_n <= 1'b1;	//得到的分頻時鐘正周期比負(fù)周期多一個clk時鐘
            	end
            	/*************************************************************************/
            	wire	clk1 = clk;				//當(dāng)N=1時,直接輸出clk
            	wire	clk2 = clk_p;			//當(dāng)N為偶數(shù)也就是N的最低位為0,N[0]=0,輸出clk_p
            	wire	clk3 = clk_p & clk_n;	//當(dāng)N為奇數(shù)也就是N最低位為1,N[0]=1,輸出clk_p&clk_n。正周期多所以是相與 
            	assign clkout = (N==1)? clk1:(N[0]? clk3:clk2);	//條件判斷表達(dá)式
            	endmodule
            1. 打開,建立工程。
            2. 新建設(shè)計(jì)文件,并鍵入設(shè)計(jì)代碼。
            3. 根據(jù)邏輯綜合并分配管腳,在本實(shí)驗(yàn)中引腳分配如下:clk—C1,rst_n—L14,clkout—N13
            4. 如果仿真無誤,構(gòu)建并輸出編程文件,燒寫至FPGA的Flash之中。
            5. 觀察輸出結(jié)果。




            關(guān)鍵詞: 分頻器 FPGA Lattice Diamond Verilog HDL

            評論


            相關(guān)推薦

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

            關(guān)閉