奇數分頻--不使用負邊沿觸發verilog實現(佔空比50%)
阿新 • • 發佈:2020-08-17
奇數分頻電路的程式碼,有兩種情況:①使用帶負沿觸發的DFF(要求佔空比50%),②不使用帶負沿觸發的DFF;
使用帶負邊沿觸發的:https://www.cnblogs.com/shadow-fish/p/13383903.html
不適用帶負邊沿觸發:實質是向帶負邊沿觸發的DFF靠攏。實驗程式為3分頻,佔空比為50%。
module test ( input clk, input rst, output wire d_out ); reg [1:0]cnt; reg d_out_1; reg d_out_2; reg d_out_3; wireclk_1; always @(posedge clk or negedge rst) begin if(!rst) begin cnt <= 2'b0; end else if (cnt == 2'b10) begin cnt <= 2'b0; end else begin cnt <= cnt + 1'b1; end end always @(posedge clk or negedgerst) begin//佔空比1/3 if(!rst) begin d_out_1 <= 'b0; end else if (cnt < 2'b10) begin d_out_1 <= 1'b0; end else begin d_out_1 <= 1'b1; end end assign clk_1 = ~clk; always @(posedge clk_1 or negedge rst) begin//佔空比1/3, if(!rst) begin d_out_2 <= 'b0; d_out_3 <= 'b0; end else if (cnt < 2'b10) begin d_out_2 <= 'b0; d_out_3 <= d_out_2; end else begin d_out_2 <= 'b1; d_out_3 <= d_out_2; end end assign d_out = d_out_1 | d_out_3;//也可以使用相與,則佔空比要求為2/3。 endmodule
測試檔案:
`timescale 1ns/10ps module test_tb; reg clk; reg rst; wire d_out; test u1( .clk(clk), .rst(rst), .d_out(d_out) ); initial begin clk = 1'b1; rst = 1'b0; #8; rst = 1'b1; end always #5 clk = ~clk; endmodule
模擬結果: