国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FPGA基礎設計(二):任意分頻器(奇數(shù),偶數(shù),小數(shù))

這篇具有很好參考價值的文章主要介紹了FPGA基礎設計(二):任意分頻器(奇數(shù),偶數(shù),小數(shù))。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

前言

FPGA開發(fā)板上一般只有一個晶振,即一種時鐘頻率。數(shù)字系統(tǒng)設計中,時間的計算都要以時鐘作為基本單元,對基準時鐘進行不同倍數(shù)的分頻而得到各模塊所需時鐘頻率,可通過Verilog代碼實現(xiàn);倍頻可通過鎖相環(huán)【PLL】實現(xiàn)。

分頻原理

把輸入信號的頻率變成成倍的低于輸入頻率的輸出信號;每經(jīng)歷幾個單位時鐘周期就輸出一個時鐘周期。
例:clk_in為12MHz; clk_out為2MHz.則分頻系數(shù)為6。那么如何實現(xiàn)6分頻:
??把輸入信號作為計數(shù)脈沖(邊沿觸發(fā)一次,計數(shù)一次),
當計數(shù)6次,為輸出信號的一個周期,此時輸入信號經(jīng)歷了6個周期,置0,重新開始計數(shù),循環(huán)往復。(前提:輸入信號占空比50%)
而輸出信號的不同占空比的實現(xiàn)無非是輸出信號經(jīng)歷的單位周期輸出高低電平不同;

偶數(shù)分頻

?? 6分頻

占空比50%:6分頻電路:一個always塊實現(xiàn)一個模3計數(shù)器。
???? 另一個always塊實現(xiàn)當計數(shù)到2(從0計數(shù)到2,計數(shù),3次)輸出信號翻轉,
???? 占空比50%。
占空比不是50%:先實現(xiàn)模6計數(shù)器,然后可任意設計當計數(shù)到某個值輸出高電平,再計數(shù)到另一個值輸出低電平。

?? 代碼
//不帶標志位占空比50%
module divider_six(clk,reset,clk_out,cnt);

         input clk;
		 input reset;
		 output reg clk_out;
		 
		 output reg [1:0] cnt;//用于計數(shù)的寄存器; always塊內(nèi),reg型變量
		 
		 always@(posedge clk)
		       if(reset == 1'b0)
				    cnt <= 2'd0;
				 else if(cnt == 2'd2)//從0開始,計數(shù)到2,計數(shù)為3,則6分頻
				    cnt <= 2'd0;
				 else
				    cnt <= cnt + 1'b1;
//計數(shù)3次,輸出翻轉;所以cnt計數(shù)3次作為標志,實現(xiàn)翻轉功能					 
		  always@(posedge clk)
		        if(reset == 1'b0)
				     clk_out <= 1'b0;
				  else if(cnt == 2'd2)
				     clk_out <= ~clk_out;
				  else;
endmodule
?? tb
`timescale 1ns/100ps
`define clk_cycle 50

module divider_six_tb;
  
     reg clk;
	 reg reset;
	 
	 wire clk_out;
	 wire [1:0]cnt;
	 
	 always #(`clk_cycle) clk = ~clk;//產(chǎn)生測試時鐘,時鐘周期100ns(s>ms>us>ns>ps)
	 
	 initial begin
	 
	     clk = 0;
		 reset = 1;
		 
		 #10 reset = 0;
		 #110 reset = 1;
		 #100000
		 $stop;
		 
	 end
	 divider_six u1(
	          .reset(reset),
				 .clk(clk),
				 .clk_out(clk_out),
				 .cnt(cnt)
				 );
endmodule 
?? 仿真波形

FPGA基礎設計(二):任意分頻器(奇數(shù),偶數(shù),小數(shù))
FPGA基礎設計(二):任意分頻器(奇數(shù),偶數(shù),小數(shù))

奇數(shù)分頻

算法:需要在系統(tǒng)時鐘為上升沿和下降沿都工作(不是同時工作)
? ? 產(chǎn)生50%的占空比,需要設計兩個分頻時鐘跳變點,分頻周期的N-1(N-1)/2。
例:13分頻:兩個分頻時鐘跳變點:6[(13-1)/2]和12[13-1],此時輸出保持7個高電平時鐘周期,6個低電平時鐘周期分別在上升沿觸發(fā)clk1和下降沿觸發(fā)clk2,兩者相位相差半個單位周期,clk_out = clk1 & clk2; 之后clk_out占空比50%
如圖仿真波形:

??仿真波形

FPGA基礎設計(二):任意分頻器(奇數(shù),偶數(shù),小數(shù))

??代碼
//13分頻,占空比為50%

module div_13(clk,reset,clk_out,clk1,clk2);

       input clk;
	   input reset;
		 
	   output  clk_out;
		 
	   reg [3:0] cnt;
		 
	   output reg clk1;
	   output reg clk2;

//計數(shù)從0到12		 
		 always@(posedge clk)
		       if(reset == 1'b0 || cnt == 4'd12)
				    cnt <= 4'd0;
				 else
				    cnt <= cnt + 1'b1;
					 
//實現(xiàn)分頻,clk1:7個高電平時鐘周期,6個低電平時鐘周期,上升沿觸發(fā)	
       always@(posedge clk)				 
				 if(reset == 1'b0)
				    clk1 <= 1'b0;
				 else if(cnt == 4'd6)//復位后,計數(shù)到6,開始低電平,保持6個周期,
			       clk1 <= 1'b0;   //此時計數(shù)到12,重新計數(shù),保持高電平直至計數(shù)到6
				 else if(cnt == 4'd12)//計數(shù)到6和12,這兩個是分頻跳變點
			       clk1 <= 1'b1;	  //如何得到?N-1;(N-1)/2
//clk2:下降沿觸發(fā),7個高電平時鐘周期,6個低電平時鐘周期
       always@(negedge clk)	
             if(reset == 1'b0)
		          clk2 <= 1'b0;
			    else if(cnt == 4'd6)
		          clk2 <= 1'b0;
			    else if(cnt == 4'd12)
		          clk2 <= 1'b1;
//clk1,clk2兩者相差半個時鐘周期					 
//clk1,clk2配合作用,都計數(shù)7次后,clk1立即回到低電平,而clk2延遲半個周期					 
		 assign	clk_out = clk1 & clk2;		 					
endmodule		 
??tb
`timescale 1ns/100ps
`define clk_cycle 50

module div_13_tb;
  
    reg clk;
	 reg reset;
	 
	 wire clk_out;
	 wire clk1;
	 wire clk2;
	 
	 always #(`clk_cycle) clk = ~clk;//產(chǎn)生測試時鐘,時鐘周期100ns(s>ms>us>ns>ps)
	 
	 initial begin
	 
	    clk = 0;
		 reset = 1;
		 
		 #10 reset = 0;
		 #110 reset = 1;
		 #100000
		 $stop;
		 
	 end
	 div_13 u1(
	          .reset(reset),
			  .clk(clk),
		      .clk_out(clk_out),
			  .clk1(clk1),
		      .clk2(clk2)
			 );
endmodule 

小數(shù)分頻

?? 說明

1.等效意義上的小數(shù)分頻:例5.3分頻,沒有周期為5.3的分頻電路,實際是輸出時鐘53的周期對應于輸出時鐘的10個周期。
2.按序輸出:時鐘用處不大,沒有意義
3.插入亂序輸出:防止相位抖動,把多出來的脈沖均勻分散開

?半整數(shù)分頻:N+0.5

思路:例:5.5分頻
原時鐘的半周期為單位,此時周期為11可分頻輸出6高5低。
上升沿觸發(fā),使得clk1前6周期輸出高電平【N-1=10為一個跳變點】后5周期輸出低電平【N-1)/2=5為另一個跳變點】;
下降沿觸發(fā)使得clk2前5周期為低電平(cnt為0時的跳變點),后6【cnt=N-1)/2=5】周期為高電平。兩個信號相與即為分頻信號clk_div = clk1 & clk2;,類似奇分頻

??仿真波形

FPGA基礎設計(二):任意分頻器(奇數(shù),偶數(shù),小數(shù))

??代碼
//5.5分頻
//原時鐘周期一半為單位,輸出1高10低,從0到10計數(shù),前6周期高電平,后5周期低電平;
//再使用下降沿觸發(fā)前5周期低電平,前6周期高電平,最后相與
module div_half_1(clk,rst_n,clk_div,clk1,clk2,cnt);

      input clk;
	   input rst_n;
	   
	   output clk_div;
		
	   
	   output reg[3:0] cnt;
	   output reg clk1;
	   output reg clk2;
//從0到10計數(shù) 模11	   
	   always@(posedge clk or negedge rst_n)
	          if(!rst_n)
			    cnt <= 4'd0;
			  else if (cnt==4'd10)
			    cnt <= 0;
			  else
			    cnt <= cnt + 1'b1;
				
	    always@(posedge clk or negedge rst_n)
		       if(!rst_n)
			     clk1 <= 1'b0;
			   else if(cnt==4'd10)//6個周期的高電平N-1=10
			     clk1 <= 1'b1;
			   else if(cnt==4'd5)//5個周期的低電平(N-1)/2=5
			     clk1 <= 1'b0;  //兩個跳變點,(N-1)/2;N-1
//clk2相比于clk1延時半個時鐘周期,			 
		always@(negedge clk or negedge rst_n)
               if(!rst_n)
                 clk2 <= 1'b0;
               else if(cnt==4'd0)//5個周期的低電平
                 clk2 <= 1'b0;
               else if(cnt==4'd5)//6個周期的高電平
                 clk2 <= 1'b1;

assign clk_div = clk1 & clk2;
endmodule				 
??tb
`timescale 1ns/100ps
`define clk_cycle 50

module div_half_1_tb;
  
    reg clk;
	 reg reset;
	 
	 wire clk_out;
	 wire clk1;
	 wire clk2;
	 wire[3:0] cnt;
	 
	 always #(`clk_cycle) clk = ~clk;//產(chǎn)生測試時鐘,時鐘周期100ns(s>ms>us>ns>ps)
	 
	 initial begin
	 
	    clk = 0;
		 reset = 1;
		 
		 #10 reset = 0;
		 #110 reset = 1;
		 #100000
		 $stop;
		 
	 end
	 div_half_1 u1(
	             .rst_n(reset),
				 .clk(clk),
				 .clk_div(clk_out),
				 .clk1(clk1),
				 .clk2(clk2),
				 .cnt(cnt)
				 );
endmodule 

?小數(shù)分頻

?? 5.3分頻

53/10=5.3 設5分頻a次;6分頻次
a+b=10;
5a+6b=53 ->a=7 ; b=3
如何插入排序:6556556555
Verilog實現(xiàn):
脈沖刪除:53個單位周期刪除43個
算法:分母作為累加值,在clk的上升沿cnt加上分母10,判斷是否大于分子,若小于(脈沖刪除標志為1,刪除)繼續(xù)累加,若大于(脈沖刪除標志為0,不刪除)在下一周期減去分子。結果剛好是6556556555(由來:分母-余數(shù)=7,作為累加值,大于分母,輸出N分頻,然后減去分母,繼續(xù)累加7,;小于分母,輸出N+1分頻)

??代碼
//脈沖刪除小數(shù)分頻

module div_5_3_1(clk,rst_n,clk_out,cnt);  

       input clk;
	   input rst_n;
	   
	   output clk_out;
	   
	   parameter fra = 6'd53;//分子
	   parameter den = 6'd10;//分母
	   
	   output reg[5:0] cnt;
	   reg flag_del;//脈沖刪除標志位
				
	   always@(posedge clk or negedge rst_n) begin
	          if(!rst_n)begin
			    cnt <= 6'd0;
				 flag_del <= 1'b0;
			  end
			//大于分子,不刪除  
			  else if(cnt>fra) begin
			    cnt <= cnt + den - fra;
				 flag_del <= 1'b0;
			  end
			//小于分子,累加;刪除:保持高電平
			  else begin
			    cnt <= cnt + den;
			  	 flag_del <= 1'b1;
			  end
		end	
		
		assign clk_out = flag_del ? 1 : clk;

endmodule
??tb
`timescale 1ns/100ps
`define clk_cycle 50

module div_5_3_1_tb;
  
     reg clk;
	 reg reset;
	 
	 wire clk_out;
	 wire [5:0]cnt;
	 
	 always #(`clk_cycle) clk = ~clk;//產(chǎn)生測試時鐘,時鐘周期100ns(s>ms>us>ns>ps)
	 
	 initial begin
	 
	     clk = 0;
		 reset = 0;
		 
		 #10 reset = 0;
		 #110 reset = 1;
		 #100000
		 $stop;
		 
	 end

	 		 div_5_3_1 u1 (
		          .clk(clk),
				  .rst_n(reset),
				  .clk_out(clk_out),
				  .cnt(cnt)
				  );
endmodule 
??仿真波形

FPGA基礎設計(二):任意分頻器(奇數(shù),偶數(shù),小數(shù))

最后

不足之處:未實現(xiàn)參數(shù)化編程;

參考:

https://blog.csdn.net/weixin_43698385/article/details/122773225
https://blog.csdn.net/Reborn_Lee/article/details/97553078
https://blog.csdn.net/wangyanchao151/article/details/81204126?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%B0%8F%E6%95%B0%E5%88%86%E9%A2%91&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-5-81204126.nonecase&spm=1018.2226.3001.4187文章來源地址http://www.zghlxwxcb.cn/news/detail-430275.html

到了這里,關于FPGA基礎設計(二):任意分頻器(奇數(shù),偶數(shù),小數(shù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 偶數(shù)分頻器電路設計

    偶數(shù)分頻器電路設計

    目錄 偶數(shù)分頻器電路設計 1、偶數(shù)分頻器電路簡介 2、實驗任務 3、程序設計 方法1: 3.1、8分頻電路代碼如下: 3.2、仿真驗證 3.2.1、編寫 TB 文件 3.2.2、仿真驗證 方法2: 4、計數(shù)器進行分頻 4.1、仿真測試 ? ? ? ?分頻器在邏輯設計中一直都擔任著很重要的角色,分頻器一般包

    2024年02月09日
    瀏覽(29)
  • FPGA設計開發(fā)(基礎課題):分頻器設計

    FPGA設計開發(fā)(基礎課題):分頻器設計

    一、設計目的 1、掌握分頻器的設計原理; 2、用HDL語言設計分頻器。 二、設計原理 分頻器與計數(shù)器類似,也是要對時鐘脈沖進行計數(shù),但其輸出的不是對時鐘脈沖個數(shù)的計數(shù)值,而是其頻率與時鐘的頻率成固定比例關系的脈沖信號。整數(shù)分頻是所有分頻器中最簡單,最容易

    2024年02月13日
    瀏覽(24)
  • 任意分頻器電路設計

    任意分頻器電路設計

    目錄 任意分頻器電路設計 1、任意偶數(shù)分頻器電路設計 1.2、實驗任務 1.3、程序設計 1.3.1、代碼如下: 1.3.2、編寫仿真 TB 文件 2、任意奇數(shù)分頻器電路設計 2.1、實驗任務 2.2、程序設計 2.2.1、奇數(shù)分頻電路代碼 2.2.2、編寫仿真 TB 文件 2.2.3、仿真驗證 ? ? ? ?偶數(shù)分頻實現(xiàn)比較

    2024年02月16日
    瀏覽(24)
  • 4種FPGA時鐘分頻 【附源碼】:1.偶數(shù)分頻;2.奇數(shù)分頻(占空比50%);3.奇數(shù)分頻(任意無占空比);4.小數(shù)分頻;

    4種FPGA時鐘分頻 【附源碼】:1.偶數(shù)分頻;2.奇數(shù)分頻(占空比50%);3.奇數(shù)分頻(任意無占空比);4.小數(shù)分頻;

    題目來源于??途W(wǎng),完整工程源碼:https://github.com/ningbo99128/verilog 目錄 VL37?偶數(shù)分頻 VL40 奇數(shù)分頻(占空比50%) VL42 奇數(shù)分頻(任意無占空比) VL41 任意小數(shù)分頻(較難) 題目介紹 請使用D觸發(fā)器設計一個同時輸出2/4/8分頻的50%占空比的時鐘分頻器;注意rst為低電平復位。

    2024年01月17日
    瀏覽(18)
  • 分頻器——(任意奇分頻(50%占空比、非50%占空比),任意偶分頻,任意小數(shù)分頻)

    分頻器——(任意奇分頻(50%占空比、非50%占空比),任意偶分頻,任意小數(shù)分頻)

    ????????在數(shù)字系統(tǒng)的設計中經(jīng)常會碰到 需要使用多個時鐘 的情況。時鐘信號的產(chǎn)生通常具有兩種方法,一種是使用PLL(Phase Locked Loop,鎖相環(huán)),可生成 倍頻、分頻信號 ;另一種則是使用硬件描述語言構建一個分頻電路。 ????????分頻器的設計通常分為以下 三類:

    2023年04月23日
    瀏覽(23)
  • 【FPGA】Verilog:時序電路設計 | 二進制計數(shù)器 | 計數(shù)器 | 分頻器 | 時序約束

    【FPGA】Verilog:時序電路設計 | 二進制計數(shù)器 | 計數(shù)器 | 分頻器 | 時序約束

    前言: 本章內(nèi)容主要是演示Vivado下利用Verilog語言進行電路設計、仿真、綜合和下載 示例:計數(shù)器與分頻器 ? ?? 功能特性:?采用?Xilinx Artix-7 XC7A35T芯片? 配置方式:USB-JTAG/SPI Flash 高達100MHz 的內(nèi)部時鐘速度? 存儲器:2Mbit SRAM ??N25Q064A SPI Flash(樣圖舊款為N25Q032A) 通用

    2024年02月02日
    瀏覽(34)
  • FPGA——分頻器

    FPGA——分頻器

    野火學習備忘錄——FPAG分頻 時鐘對于 FPGA 是非常重要的,但板載晶振提供的時鐘信號頻率是固定的,不一定滿 足工程需求,所以分頻和倍頻還是很有必要的。這里通過計數(shù)的方式來實現(xiàn)分頻。 1.通過計數(shù)器來實現(xiàn)6分頻。兩種方式。第一種直接通過計數(shù)方式直接獲取獲取。輸

    2024年02月10日
    瀏覽(31)
  • FPGA【Verilog分頻器】

    FPGA【Verilog分頻器】

    ????????在數(shù)字系統(tǒng)的設計中經(jīng)常會碰到需要使用多個時鐘的情況。時鐘信號的產(chǎn)生通常具有兩種方法,一種是使用PLL(Phase Locked Loop,鎖相環(huán)),可生成倍頻、分頻信號;另一種則是使用硬件描述語言構建一個分頻電路。 ????????分頻器的設計通常分為以下三類:奇

    2024年02月20日
    瀏覽(30)
  • FPGA 多路分頻器實驗

    FPGA 多路分頻器實驗

    1 概述 ????????在 FPGA 中,時鐘分頻是經(jīng)常用到的。本節(jié)課講解 2 分頻、3 分頻、4 分頻和 8 分頻的 Verilog 實現(xiàn)并且學習 generate 語法功能的應。 2 程序設計思路 ????????1)整數(shù)倍分頻,為 2、4、8,這種 2^n 次方倍數(shù)倍數(shù)關系的分頻最容易實現(xiàn),所以我們可以把這 3 種分

    2024年01月19日
    瀏覽(24)
  • 實驗二 基于FPGA的分頻器的設計(基本任務:設計一個分頻器,輸入信號50MHz,輸出信號頻率分別為1KHz、500Hz及1Hz。拓展任務1:用按鍵或開關控制蜂鳴器的響與不響。拓展任務2:用按鍵或開)

    實驗二 基于FPGA的分頻器的設計(基本任務:設計一個分頻器,輸入信號50MHz,輸出信號頻率分別為1KHz、500Hz及1Hz。拓展任務1:用按鍵或開關控制蜂鳴器的響與不響。拓展任務2:用按鍵或開)

    1. 實驗目的: (1) 掌握QuartusⅡ軟件的層次型設計方法; (2) 掌握元件封裝及調(diào)用方法; (3) 熟悉FPGA實驗平臺,掌握引腳鎖定及下載。 2. 實驗任務: (1) 基本任務:設計一個分頻器,輸入信號50MHz,輸出信號頻率分別為1KHz、500Hz及1Hz。 (2) 拓展任務1:用按鍵或開關

    2024年02月06日
    瀏覽(59)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包