题解 | #任意小数分频#

任意小数分频

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

全部评论

相关推荐

牛客10001:G了+1,被前端/客户端给捞起来了,不太想面
投递美团等公司6个岗位 美团求职进展汇总
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务