`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***********// reg[7:0]clk_count; reg[7:0]cnt; always @(posedge clk_in, negedge rst) begin if(rst == 0)begin clk_count <= 0; end else begin clk_count <= clk_count==M_N-1 ? 0 : clk_count+1; end end wire div_class = clk_count < c89 ? 1 : 0; always @(posedge clk_in, negedge rst) begin if(rst == 0)begin cnt <= 0; end else if(div_class)begin cnt <= cnt==(div_e-1) ? 0 : cnt+1; end else begin cnt <= cnt==(div_o-1) ? 0 : cnt+1; end end reg clk_out_r; always @(posedge clk_in, negedge rst) begin if(rst == 0)begin clk_out_r <= 0; end else if(div_class)begin clk_out_r <= (cnt < div_e>>1) ? 1 : 0; end else begin clk_out_r <= (cnt < div_o>>1) ? 1 : 0; end end assign clk_out = clk_out_r; endmodule