「Verilog学习笔记」任意小数分频

专栏前言

本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网

复制代码
`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 [3:0] clk_cnt ; 
    reg [6:0] cyc_cnt ;
    reg div_flag ; 
    reg clk_out_r ; 

    always @ (posedge clk_in or negedge rst) begin 
        if (~rst) clk_cnt <= 0 ; 
        else if (~div_flag) clk_cnt <= clk_cnt == (div_e - 1) ? 0 : clk_cnt + 1 ; 
        else clk_cnt <= clk_cnt == (div_o - 1) ? 0 : clk_cnt + 1 ; 
    end

    always @ (posedge clk_in or negedge rst) begin 
        if (~rst) cyc_cnt <= 0 ; 
        else cyc_cnt <= cyc_cnt == (M_N - 1) ? 0 : cyc_cnt + 1 ; 
    end

    always @ (posedge clk_in or negedge rst) begin
        if (~rst) div_flag <= 0 ; 
        else div_flag <= cyc_cnt == (M_N - 1) || cyc_cnt == (c89 - 1) ? ~div_flag : div_flag ; 
    end

    always @ (posedge clk_in or negedge rst) begin 
        if (~rst) clk_out_r <= 0 ; 
        else if (~div_flag) clk_out_r <= clk_cnt <= ((div_e >> 2) + 1) ; // cnt == 0,1,2,3 out输出1
        else clk_out_r <= clk_cnt <= ((div_o >> 2) + 1) ;
    end

    assign clk_out = clk_out_r ; 

//*************code***********//
endmodule

参考资料:题解 | #任意小数分频#_牛客博客

相关推荐
Seraphina3620 分钟前
SQL注入(二)盲注
网络·数据库·经验分享·笔记·sql
白山编程大哥23 分钟前
Carsim 2024.1 专业安装介绍:功能特性与应用场景详解
笔记
hss1234567840 分钟前
整装落地与效果图差距有多大?从毫米级误差到ENF板材的量化拆解
笔记
我命由我123451 小时前
Photoshop - Photoshop 矢量蒙版
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·photoshop
熊猫钓鱼>_>2 小时前
越顺,越空:当 AI 把学习 “优化“ 到消失
人工智能·学习·ai·llm·agent·ai编程·metaai
一条破秋裤2 小时前
02_注册设备号_从主次设备号到成对注销
学习
@codercjw3 小时前
企业实战电机和传感器选型
学习
zhangrelay4 小时前
用ROS2Lyrical实验报告册思路重做蓝桥云课ROS1实验并改进
linux·笔记·学习·ubuntu·机器人
m4Rk_4 小时前
【论文阅读】Agent 记忆机制(91):THEANINE——不删除过时记忆,让 Agent 记住事情是如何变化的
论文阅读·人工智能·学习·开源·github
我命由我123454 小时前
Photoshop - Photoshop 面板和菜单
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·photoshop