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

Verilog時(shí)鐘分頻(偶數(shù)分頻、奇數(shù)分頻、小數(shù)分頻、半整數(shù)分頻)

這篇具有很好參考價(jià)值的文章主要介紹了Verilog時(shí)鐘分頻(偶數(shù)分頻、奇數(shù)分頻、小數(shù)分頻、半整數(shù)分頻)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

偶數(shù)分頻

偶數(shù)分頻最容易實(shí)現(xiàn),可以用計(jì)數(shù)器實(shí)現(xiàn)。計(jì)數(shù)值小的時(shí)候也可以使用DFF直接完成。這里使用計(jì)數(shù)器實(shí)現(xiàn),計(jì)數(shù)達(dá)到分頻系數(shù)一半的時(shí)候進(jìn)行翻轉(zhuǎn)(占空比為50%)。對應(yīng): ???VL37 時(shí)鐘分頻(偶數(shù))

/**
	使用計(jì)數(shù)方式實(shí)現(xiàn)了8分頻
*/
module even_div(
    input     wire  rstn,
    input     wire  clk,
    output    reg   clk_out
);

reg [1:0] count;
/**
    count operation
*/
always @(posedge clk or negedge rstn) begin
    if(~rstn) begin
        count <= 2'b0;
    end
    else begin
        count <= count + 1'b1;
    end
end


always @(posedge clk or negedge rstn) begin
    if(~rstn) begin
        clk_out <= 1'b0;
    end
    else if(count == 2'b00) begin
        clk_out <= ~clk_out;
    end
end

endmodule

仿真結(jié)果如下
verilog時(shí)鐘分頻,FPGA學(xué)習(xí),fpga開發(fā)

奇數(shù)分頻

不要求占空比為50%的奇數(shù)分頻

不要求占空比為50%,可以與偶數(shù)分頻一樣,根據(jù)計(jì)數(shù)值進(jìn)行波形翻轉(zhuǎn)。
對應(yīng): ???VL42 無占空比要去的奇數(shù)分頻

/**
	不要求占空比的奇數(shù)分頻
	5分頻 3低電平2高電平
	占空比 2/5
*/
module odd_div (    
    input     wire rstn,
    input     wire clk,
    output    reg clko
);

parameter N = 5;

reg [2:0] count;
always @(posedge clk or negedge rstn) begin
    if(~rstn) begin
        count <= 3'd0;
    end
    else if(count == N - 1) begin
        count <= 3'd0;
    end
    else begin
        count <= count + 1'b1;
    end 
end

always @(posedge clk or negedge rstn) begin
    if(~rstn) begin
        clko <= 1'b0;
    end
    else if(count == N - 1 || count == (N >> 1)) begin
        clko <= ~clko;
    end
    else begin
        clko <= clko;
    end
end

endmodule

仿真結(jié)果如下
verilog時(shí)鐘分頻,FPGA學(xué)習(xí),fpga開發(fā)

要求占空比為50%奇數(shù)分頻

無法單純使用計(jì)數(shù)方式來實(shí)現(xiàn),可以利用時(shí)鐘雙邊沿特性產(chǎn)生兩個(gè)占空比不為50%的時(shí)鐘,然后將這兩個(gè)時(shí)鐘信號相與或者相或產(chǎn)生。

比如產(chǎn)生占空比為50%的5分頻時(shí)鐘,可以通過:

  1. 沿源時(shí)鐘上升沿變化的,2cycle高電平,3cycle低電平,周期為5的時(shí)鐘信號。
  2. 沿源時(shí)鐘下降沿變化的,2cycle高電平,3cycle低電平,周期為5的時(shí)鐘信號。
  3. 將上述兩時(shí)鐘信號相或得到占空比為50%的5分頻時(shí)鐘。

或者

  1. 沿源時(shí)鐘上升沿變化的,3cycle高電平,2cycle低電平,周期為5的時(shí)鐘信號。
  2. 沿源時(shí)鐘下降沿變化的,3cycle高電平,2cycle低電平,周期為5的時(shí)鐘信號。
  3. 將上述兩時(shí)鐘信號相與得到占空比為50%的5分頻時(shí)鐘。
/**
	產(chǎn)生	50%占空比 5分頻的時(shí)鐘
	1. 沿源時(shí)鐘上升沿變化的,3cycle高電平,2cycle低電平,周期為5的時(shí)鐘信號。
	2. 沿源時(shí)鐘下降沿變化的,3cycle高電平,2cycle低電平,周期為5的時(shí)鐘信號。
	3. 將上述兩時(shí)鐘信號相與得到占空比為50%的5分頻時(shí)鐘。
*/
module odd_div1(
    input       clk,
    input       rstn,
    output      clko
);

    parameter N = 5;

    reg [2:0] count;
    // 沿時(shí)鐘上升沿變化的時(shí)鐘信號 2低3高
    reg clkp;
    // 沿時(shí)鐘下降沿變化的時(shí)鐘信號
    reg clkn;
    assign clko = clkp & clkn;

    always @(posedge clk or negedge rstn) begin
        if(~rstn) begin
            count <= 3'b0;
        end
        else if(count == N - 1) begin
            count <= 3'b0;
        end
        else begin
            count <= count + 1'b1;
        end
    end

    
    always @(posedge clk or negedge rstn) begin
        if(~rstn) begin
            clkp <= 1'b0;
        end
        else if(count == 3'b1 || count == N - 1) begin
            clkp = ~clkp;
        end
        else begin
            clkp <= clkp;
        end
    end

    always @(negedge clk or negedge rstn) begin
        if(~rstn) begin
            clkn <= 1'b0;
        end
        else if(count == 3'b1 || count == N - 1) begin
            clkn = ~clkn;
        end
        else begin
            clkn <= clkn;
        end
    end

endmodule

仿真波形如下
verilog時(shí)鐘分頻,FPGA學(xué)習(xí),fpga開發(fā)

小數(shù)分頻

對應(yīng) ???VL41 任意小數(shù)分頻

無法做到占空比為50%的小數(shù)分頻,也無法做到分頻后的每個(gè)時(shí)鐘周期都是原時(shí)鐘周期的小數(shù)倍(當(dāng)然如果是x.5是可以做到的)。
因此轉(zhuǎn)換思路,進(jìn)行7.6倍分頻可以理解成分頻后的時(shí)鐘周期 To = 7.6T ,那么 10To = 76T,也就是說只要滿足76個(gè)原時(shí)鐘周期等于10個(gè)分頻后的時(shí)鐘周期即可。
這時(shí)候我們使用7分頻和8分頻的時(shí)鐘來實(shí)現(xiàn)7.6倍分頻的時(shí)鐘,假設(shè) 10個(gè)分頻后的時(shí)鐘 由N個(gè)7分頻的時(shí)鐘和M個(gè)8分頻的時(shí)鐘組成,那么可以得到

	M + N = 10
	N7T + M8T = 76T
	? 
	M + N = 10
	7N + 8M = 76

可以得到N = 4, M = 6。
就是由4個(gè)7分頻的時(shí)鐘和6個(gè)8分頻的時(shí)鐘組成7.6倍分頻的時(shí)鐘。
那么可以有四種方法將這兩種時(shí)鐘進(jìn)行混合:

1. 先4次7分頻再進(jìn)行6次8分頻
2. 先6次8分頻再進(jìn)行4次7分頻
3. 將6次8分頻插入4次7分頻中
4. 將4次7分頻插入6次8分頻中
/**
	實(shí)現(xiàn)8.7倍分頻
	由3個(gè)8分頻和7個(gè)9分頻時(shí)鐘組成10個(gè)分頻后的時(shí)鐘
	=》
	24個(gè)原時(shí)鐘周期用于8分頻
	63個(gè)原時(shí)鐘周期用于9分頻
	
	先進(jìn)行 3次8分頻 再進(jìn)行 7次9分頻
*/

module div_M_N(
   input  wire clk_in,
   input  wire rst,
   output wire clk_out
);

/*
   8N + 9M = 87
   N + M = 10
   M = 7, N = 3
   因此3個(gè)8分頻時(shí)鐘 和 7個(gè)9分頻時(shí)鐘構(gòu)成 8.7分頻時(shí)鐘
*/    

/*
   3*8 = 24 
   87個(gè)原時(shí)鐘周期里前24個(gè)周期 用來8分頻
   7*9 = 63
   后63個(gè)時(shí)鐘周期 用來9分頻

   相當(dāng)于10個(gè)8.7分頻的時(shí)鐘,前3個(gè)分頻后的時(shí)鐘周期由8分頻組成,后7個(gè)由9分頻組成
*/
parameter M_N = 8'd87; 
parameter c89 = 8'd24; // 8/9時(shí)鐘切換點(diǎn)
parameter div_e = 5'd8; //偶數(shù)周期
parameter div_o = 5'd9; //奇數(shù)周期

reg clk_div;
assign clk_out = clk_div;

// 計(jì)數(shù)87
reg [6:0] cnt87;
// 計(jì)數(shù)8
reg [2:0] cnt8;
// 計(jì)數(shù)9
reg [3:0] cnt9;

always @(posedge clk_in or negedge rst) begin
   if(~rst) begin
      cnt87 <= 7'b0;
   end
   else if(cnt87 == M_N - 1'b1) begin
      cnt87 <= 7'b0;
   end
   else begin
      cnt87 <= cnt87 + 1'b1;
   end   
end

/*
   8/9分頻時(shí)鐘切換
*/
always @(posedge clk_in or negedge rst) begin
   if(~rst) begin
      cnt8 <= 3'b0;
      cnt9 <= 4'b0;
   end
   // 8分頻
   else if(cnt87 < c89) begin
      cnt9 <= 4'b0;
      cnt8 <= cnt8 + 1'b1;
   end
   // 9分頻
   else begin
      cnt8 <= 3'b0;
      if(cnt9 == div_o - 1) begin
         cnt9 <= 4'b0;
      end
      else begin
         cnt9 <= cnt9 + 1'b1;
      end
   end
end

always @(posedge clk_in or negedge rst) begin
   if(~rst) begin
      clk_div <= 1'b0;
   end
   // 8分頻
   else if(cnt87 < c89) begin
      if (cnt8 == 3'b0 || cnt8 == 3'b100) begin
         clk_div <= ~clk_div;
      end   
      else begin
         clk_div <= clk_div;
      end
   end
   // 9分頻
   else begin
      // 4高5低
      if (cnt9 == 3'b0 || cnt9 == 3'b100) begin
         clk_div <= ~clk_div;
      end   
      else begin
         clk_div <= clk_div;
      end
   end
end

endmodule

仿真波形如下
verilog時(shí)鐘分頻,FPGA學(xué)習(xí),fpga開發(fā)

半整數(shù)分頻

半整數(shù)分頻實(shí)際上就是特殊一點(diǎn)的小數(shù)分頻,可以按照小數(shù)分頻的方法完成,也可以利用時(shí)鐘的雙邊沿特性完成。

利用雙邊沿特性

假設(shè)要進(jìn)行5.5倍分頻,那么讓分頻后的時(shí)鐘信號2.5個(gè)原周期為高電平,3個(gè)原時(shí)鐘周期為低電平。這樣的信號要由兩個(gè)沿不同時(shí)鐘沿變化的信號產(chǎn)生:

  1. 由5時(shí)鐘周期(沿上升沿變化,2周期高電平,3周期低電平)和6時(shí)鐘周期的信號(沿上升沿變化,2周期高電平,4周期低電平)組成。
  2. 由5時(shí)鐘周期(沿下降沿變化,2周期高電平,3周期低電平)和6時(shí)鐘周期的信號(沿下降沿變化,2周期高電平,4周期低電平)組成。
  3. 將信號1和信號2相或得到 5.5倍分頻的信號。
module half_int_div(
    input  wire clk,
    input  wire rstn,
    output wire clko
);

    reg clkp;
    reg clkn;
    assign clko = clkp | clkn;

    reg [3:0] cnt;
    always @(posedge clk or negedge rstn) begin
        if(~rstn) begin
            cnt <= 4'b0;
        end
        else if(cnt == 4'b1010) begin
            cnt <= 4'b0;
        end
        else begin
            cnt <= cnt + 1'b1;
        end
    end

    always @(posedge clk or negedge rstn) begin
        if(~rstn) begin
            clkp <= 1'b0;
        end
        else if(cnt == 4'd0 || cnt == 4'd1 || cnt ==  4'd6 || cnt ==  4'd7) begin
            clkp <= 1'b1;
        end
        else begin
            clkp <= 1'b0;
        end
    end

    always @(negedge clk or negedge rstn) begin
        if(~rstn) begin
            clkn <= 1'b0;
        end
        else if(cnt == 4'd1 || cnt == 4'd2 || cnt ==  4'd6 || cnt ==  4'd7) begin
            clkn <= 1'b1;
        end
        else begin
            clkn <= 1'b0;
        end
    end

endmodule

仿真波形如下
verilog時(shí)鐘分頻,FPGA學(xué)習(xí),fpga開發(fā)

利用小數(shù)分頻的思路

假設(shè)要進(jìn)行5.5倍分頻,相當(dāng)于在11個(gè)原時(shí)鐘周期里進(jìn)行了兩次5.5分頻。采用5分頻和6分頻來實(shí)現(xiàn)5.5分頻。那么

	5N + 6M = 11
	N + M = 2
	=>
	N = 1, M = 1

也就是說在11個(gè)原時(shí)鐘周期里進(jìn)行了一次5分頻和一次6分頻。文章來源地址http://www.zghlxwxcb.cn/news/detail-816500.html

到了這里,關(guān)于Verilog時(shí)鐘分頻(偶數(shù)分頻、奇數(shù)分頻、小數(shù)分頻、半整數(shù)分頻)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • verilog實(shí)現(xiàn)分頻(奇數(shù)分頻和偶數(shù)分頻,通用版)

    verilog實(shí)現(xiàn)分頻(奇數(shù)分頻和偶數(shù)分頻,通用版)

    大家好,最近寫了一些分頻器的設(shè)計(jì),發(fā)現(xiàn)奇數(shù)分頻和偶數(shù)分頻是比較常用分頻效果,所以寫了一個(gè)比較簡單的分頻代碼, 適用于奇數(shù)分頻和偶數(shù)分頻(不考慮占空比) ,代碼已經(jīng)經(jīng)過測試,需要可自取。 一、上代碼 二、上驗(yàn)證代碼 三、上仿真結(jié)果 圖1:6分頻效果(mult

    2024年02月13日
    瀏覽(18)
  • 「Verilog學(xué)習(xí)筆記」時(shí)鐘分頻(偶數(shù))

    「Verilog學(xué)習(xí)筆記」時(shí)鐘分頻(偶數(shù))

    專欄前言 本專欄的內(nèi)容主要是記錄本人學(xué)習(xí)Verilog過程中的一些知識點(diǎn),刷題網(wǎng)站用的是??途W(wǎng)

    2024年02月03日
    瀏覽(42)
  • 「Verilog學(xué)習(xí)筆記」任意奇數(shù)倍時(shí)鐘分頻

    「Verilog學(xué)習(xí)筆記」任意奇數(shù)倍時(shí)鐘分頻

    專欄前言 本專欄的內(nèi)容主要是記錄本人學(xué)習(xí)Verilog過程中的一些知識點(diǎn),刷題網(wǎng)站用的是牛客網(wǎng)

    2024年01月23日
    瀏覽(61)
  • 【FPGA & Verilog】奇數(shù)分頻器 (50%)

    【FPGA & Verilog】奇數(shù)分頻器 (50%)

    2.1 設(shè)計(jì)輸? 1. 模塊名稱:FrequencyDivider 2. 輸?輸出:CLK、RSTn、CLK_15 2.2 引腳約束 1. 輸?端 ?定義 2. 輸出端 ?定義 2.3 設(shè)計(jì)要求 1. 輸出時(shí)鐘的周期是輸?時(shí)鐘的15倍(15分頻器) 2. 分別實(shí)現(xiàn)?7/15?占空?和 50% 占空?兩種分頻?式 3. 使?RTL View分析電路的區(qū)別 2.4 電路仿真1.

    2024年02月03日
    瀏覽(25)
  • FPGA學(xué)習(xí)——實(shí)現(xiàn)任意倍分頻器(奇數(shù)/偶數(shù)倍分頻器均可實(shí)現(xiàn))

    FPGA學(xué)習(xí)——實(shí)現(xiàn)任意倍分頻器(奇數(shù)/偶數(shù)倍分頻器均可實(shí)現(xiàn))

    在FPGA(可編程邏輯門陣列)中,分頻器是一種用于將時(shí)鐘信號的頻率降低的電路或模塊。它可以根據(jù)輸入的時(shí)鐘信號生成一個(gè)較低頻率的輸出時(shí)鐘信號。 常見的分頻器可以按照固定比例來進(jìn)行分頻,例如將輸入時(shí)鐘頻率除以2、除以4等。因此,如果輸入時(shí)鐘信號的頻率為10

    2024年02月05日
    瀏覽(21)
  • fpga時(shí)鐘分頻——奇數(shù)分頻

    fpga時(shí)鐘分頻——奇數(shù)分頻

    相比偶數(shù)分頻,奇數(shù)分頻相對復(fù)雜,下面我總結(jié)一下如何用verilog實(shí)現(xiàn)。以N(奇數(shù))為例。 總結(jié)如下: a. 上升沿計(jì)數(shù)器和信號寄存器 : 設(shè)置一個(gè)計(jì)數(shù)長度為N的上升沿計(jì)數(shù)器(pos_cnt),并且設(shè)置一個(gè)信號寄存器(pos_clk)。 當(dāng)上升沿計(jì)數(shù)器計(jì)數(shù)到時(shí),信號寄存器翻轉(zhuǎn)。 當(dāng)上升沿計(jì)

    2024年04月17日
    瀏覽(38)
  • Verilog 時(shí)鐘分頻設(shè)計(jì)

    Verilog 時(shí)鐘分頻設(shè)計(jì)

    將觸發(fā)器的反向輸出端接到觸發(fā)器的輸入,可以構(gòu)成簡單二分頻電路。 在此基礎(chǔ)上,將二分頻電路進(jìn)行級聯(lián)可以構(gòu)成四分頻,八分頻電路。電路如下圖所示: ? 對于任意偶數(shù)分頻,或者系數(shù)較大的偶數(shù)分頻,可以使用計(jì)數(shù)器循環(huán)計(jì)數(shù)來實(shí)現(xiàn)分頻。當(dāng)計(jì)數(shù)周期達(dá)到N/2(N為分頻

    2024年02月11日
    瀏覽(22)
  • 時(shí)鐘分頻電路設(shè)計(jì)--verilog(2分頻、3分頻、4分頻)

    時(shí)鐘分頻電路設(shè)計(jì)--verilog(2分頻、3分頻、4分頻)

    module divider( input clk, input resetn, output reg clk_d2, output reg clk_d3_pos, output reg clk_d3_neg, output clk_d3, //reg型不能assign賦值? output reg clk_d4 ); reg [1:0]counter; reg [1:0]counter_3; always@(posedge clk or negedge resetn)begin //4分頻計(jì)數(shù)器模塊 if(~resetn) counter = 2’b0; else if(counter = 2’b11) counter = counter + 1’

    2024年02月06日
    瀏覽(21)
  • Verilog-實(shí)現(xiàn)時(shí)鐘分頻(1KHZ、奇、偶分頻,占空比為50%)

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

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

    2024年02月08日
    瀏覽(20)
  • 【實(shí)驗(yàn)室學(xué)習(xí)】時(shí)鐘分頻器,2、3、4、8分頻 verilog實(shí)現(xiàn)

    【實(shí)驗(yàn)室學(xué)習(xí)】時(shí)鐘分頻器,2、3、4、8分頻 verilog實(shí)現(xiàn)

    記錄時(shí)鐘分頻器的Verilog代碼編寫,主要掌握分頻器設(shè)計(jì)思路 2、4、8分頻設(shè)計(jì)較為容易: 2分頻—設(shè)計(jì)一個(gè)1位的寄存器,當(dāng)原時(shí)鐘上升沿時(shí)取反即可 代碼展示: 4分頻與8分頻—設(shè)計(jì)一個(gè)兩位的計(jì)數(shù)器,4分頻只需在計(jì)數(shù)器計(jì)數(shù)到00B或者10B時(shí)跳變電平即可,8分頻只需在計(jì)數(shù)器計(jì)

    2024年02月11日
    瀏覽(30)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包