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

Verilog-實現(xiàn)時鐘分頻(1KHZ、奇、偶分頻,占空比為50%)

這篇具有很好參考價值的文章主要介紹了Verilog-實現(xiàn)時鐘分頻(1KHZ、奇、偶分頻,占空比為50%)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、將系統(tǒng)時鐘50MHZ分為占空比為50%的1khz時鐘

本篇文章使用Xilinx公司的ISE軟件
1.  頻率:1HZ    周期為1/1HZ=1s。按照這個計算公式計算出頻率為1khz的周期為1ms
2. 因為占空比為50%,在寫代碼時需要一個0.5ms的計數(shù)器
  PS: 占空比:占空比是指在一個脈沖循環(huán)內(nèi),通電時間相對于總時間所占的比例。(在FPGA中我的理解為高電平在一個時鐘周期所占的時間)

<代碼如下>

1khz分頻代碼
module clk_1KHZ(clk,rst_n,clk_1khz );
 input  clk           ;  //50MHZ 
 input  rst_n         ;
 output reg clk_1khz  ;  //T=1ms 占空比為50%
 
 reg[17:0] cnt;
 
 always @(posedge clk or negedge rst_n)
  begin
   if(!rst_n)
	 cnt <= 1'b0;
	else if (cnt == 18'd25_000 - 1)//
	 cnt <= 18'd0;
	else
	 cnt <= cnt + 1'b1;
  end
  
 always @(posedge clk or negedge rst_n)
  begin
   if(!rst_n)
	 clk_1khz <= 1'b0;
	else if (cnt == 18'd24_999)
	 clk_1khz <= ~clk_1khz ;
	else
	 clk_1khz <= clk_1khz ;
	end
endmodule
1khz分頻-testbench
module tb;

	// Inputs
	reg clk;
	reg rst_n;

	// Outputs
	wire clk_1khz;

	// Instantiate the Unit Under Test (UUT)
	clk_1KHZ uut (
		.clk(clk), 
		.rst_n(rst_n), 
		.clk_1khz(clk_1khz)
	);
always #10 clk = ~clk;
	initial begin
		clk = 0;
		rst_n = 0;
		#100;
        rst_n=1;
	end
      
endmodule
仿真圖如下

Verilog-實現(xiàn)時鐘分頻(1KHZ、奇、偶分頻,占空比為50%)

二、偶數(shù)分頻:

  • 通過計數(shù)器實現(xiàn),進行N倍偶數(shù)分頻,通過時鐘觸發(fā)計數(shù)器計數(shù),當計數(shù)器從0計數(shù)到N/2-1時,輸出時鐘進行翻轉(zhuǎn),以此循環(huán)下去。(占空比為50%) ,以下代碼實現(xiàn)8分頻,可根據(jù)實際需求改變參數(shù)輸出需要的時鐘。

<代碼如下>

偶數(shù)分頻代碼
module clk_div_o(clk,rst_n,div_clk_out);
    input  clk         ;
    input  rst_n       ;
    output div_clk_out ;
    
//偶數(shù)分頻部分
   parameter N = 8      ;
   reg       div_clk_out;
   reg [7:0] cnt        ;
always @ (posedge clk or negedge rst_n)
  begin
    if(!rst_n)
       begin
          cnt <= 1; //從1計數(shù)
          div_clk_out <= 0;
       end
    else begin
       if(cnt==N/2)
          begin 
             div_clk_out <= ~div_clk_out; 
             cnt <= 1; 
          end
       else
          cnt <= cnt + 1;
    end
end

endmodule
偶數(shù)分頻testbench
module tb;

	// Inputs
	reg clk;
	reg rst_n;

	// Outputs
	wire div_clk_out;

	// Instantiate the Unit Under Test (UUT)
	clk_div_o uut (
		.clk(clk), 
		.rst_n(rst_n), 
		.div_clk_out(div_clk_out)
	);
always #10 clk = ~clk;
	initial begin
		// Initialize Inputs
		clk = 0;
		rst_n = 0;
                #100
                rst_n = 1;
	end
      
endmodule
仿真圖如下:

三、奇數(shù)分頻:

  • 以7分頻為例。接下來會介紹兩種實現(xiàn)方法(占空比為50%)
    (1)高電平:低電平 = 4 :3(即 1:0 = 4 :3)
    (2)低電平:高電平 = 4 :3(即 0:1 = 4 :3)
    二者實現(xiàn)方式相同,這里只介紹第一種方法
    時序圖如下
    Verilog-實現(xiàn)時鐘分頻(1KHZ、奇、偶分頻,占空比為50%)
    由時序圖看出分別用時鐘上升沿和下降沿得到高電平:低電平 = 4 :3,然后將兩者相與就可以得到7分頻占空比為50%的時鐘

    <代碼如下>

奇數(shù)分頻代碼
module clk_div_j(clk,rst_n,clk_out );
   input clk     ;
   input rst_n   ;
   output clk_out;
   
   
  parameter N = 7;//分頻數(shù)
  reg [7:0] cnt_1;
  reg [7:0] cnt_2;
  reg clk_pos,clk_neg;
 // 1:0   4:3   &
 // 0:1   4:3   |
  always @(posedge clk or negedge rst_n) //上升沿輸出clk_pos
  begin
    if(!rst_n)
      begin
        clk_pos <= 0; 
        cnt_1    <= 1; //這里計數(shù)器從1開始
      end
    else
      begin
        if(clk_pos == 1) 
          begin
            if(cnt_1 == (N+1)/2) //4
            begin
             clk_pos <= ~clk_pos;
             cnt_1 <= 1;
            end
            else
             cnt_1 <= cnt_1 + 1;
          end
        else if(cnt_1 == (N-1)/2)  //3
            begin
              clk_pos <= ~clk_pos;
              cnt_1 <= 1;
            end
        else
            cnt_1 <= cnt_1 + 1;
      end
  end

  always @(negedge clk or negedge rst_n)
                                //下降沿輸出clk_neg
  begin
    if(!rst_n)
      begin
        clk_neg <= 0; 
        cnt_2 <= 1; 
      end
    else
      begin
        if(clk_neg == 1)
          begin
            if(cnt_2 == (N+1)/2)  //4
            begin
             clk_neg <= ~clk_neg;
             cnt_2 <= 1;
            end
            else
              cnt_2 <= cnt_2+1;
          end
        else
          if(cnt_2 == (N-1)/2)  //3
            begin
              clk_neg <= ~clk_neg;
              cnt_2 <= 1;
            end
          else
            cnt_2 <= cnt_2+1;
      end
  end

assign clk_out = clk_pos & clk_neg;

endmodule
奇數(shù)分頻testbench
module tb;

	// Inputs
	reg clk;
	reg rst_n;

	// Outputs
	wire clk_out;

	// Instantiate the Unit Under Test (UUT)
	clk_div_j uut (
		.clk(clk), 
		.rst_n(rst_n), 
		.clk_out(clk_out)
	);
  always #10 clk = ~clk;
	initial begin
		clk = 0;
		rst_n = 0;
		#100;
        rst_n = 1;

	end
      
endmodule
仿真圖如下:

Verilog-實現(xiàn)時鐘分頻(1KHZ、奇、偶分頻,占空比為50%)

本篇隨筆為學習記錄所用,如有錯誤,請各位指正批評。文章來源地址http://www.zghlxwxcb.cn/news/detail-478044.html

到了這里,關(guān)于Verilog-實現(xiàn)時鐘分頻(1KHZ、奇、偶分頻,占空比為50%)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包