题解 | #任意小数分频#
任意小数分频
https://www.nowcoder.com/practice/24c56c17ebb0472caf2693d5d965eabb
`timescale 1ns/1ns module div_M_N( input wire clk_in, input wire rst, output wire clk_out ); parameter M_N = 8'd87; parameter c89 = 8'd24; // 8/9时钟切换点 parameter div_e = 5'd8; //偶数周期 parameter div_o = 5'd9; //奇数周期 //*************code***********// //在每87个输入周期,共有3个8分频和7个9分频合成10个平均8.7分频 //输出从高电平开始 reg [7:0] cnt; always@(posedge clk_in, negedge rst) begin if(!rst) begin cnt <= 8'd0; end else begin if(cnt == M_N) cnt <= 8'd1; else cnt <= cnt + 8'd1; end end reg clk_temp; always@(*) begin if(!rst) clk_temp <= 1'b0; else begin case(cnt) 8'd1: clk_temp <= 1'b1; 8'd5: clk_temp <= 1'b0; 8'd9: clk_temp <= 1'b1; 8'd13: clk_temp <= 1'b0; 8'd17: clk_temp <= 1'b1; 8'd21: clk_temp <= 1'b0; 8'd25: clk_temp <= 1'b1; 8'd29: clk_temp <= 1'b0; 8'd34: clk_temp <= 1'b1; 8'd38: clk_temp <= 1'b0; 8'd43: clk_temp <= 1'b1; 8'd47: clk_temp <= 1'b0; 8'd52: clk_temp <= 1'b1; 8'd56: clk_temp <= 1'b0; 8'd61: clk_temp <= 1'b1; 8'd65: clk_temp <= 1'b0; 8'd70: clk_temp <= 1'b1; 8'd74: clk_temp <= 1'b0; 8'd79: clk_temp <= 1'b1; 8'd83: clk_temp <= 1'b0; endcase end end assign clk_out = clk_temp; //*************code***********// endmodule