<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

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

實(shí)驗17:分頻器

作者: 時(shí)間:2023-10-12 來(lái)源:電子森林 收藏
  • (1)熟悉和掌握開(kāi)發(fā)流程和軟件使用方法;
  • (2)通過(guò)實(shí)驗理解和掌握原理;
  • (3)學(xué)習用行為級描述時(shí)序邏輯電路。

設計一個(gè)任意整數。

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

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

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

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

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

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

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




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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>