「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

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

相关推荐
RisunJan31 分钟前
【行测】实词辨析
学习
m0_626535201 小时前
双线性插值学习
学习
YJlio1 小时前
进程和诊断工具学习笔记(8.24):Handle——谁占着不放?句柄泄漏排查、强制解锁与检索技巧
服务器·笔记·学习
charlie1145141911 小时前
面向C++程序员的JavaScript 语法实战学习4
开发语言·前端·javascript·学习·函数
IUGEI2 小时前
【后端开发笔记】JVM底层原理-内存结构篇
java·jvm·笔记·后端
wdfk_prog2 小时前
[Linux]学习笔记系列 -- [kernel]trace
linux·笔记·学习
charlie1145141912 小时前
勇闯前后端Week2:后端基础——HTTP与REST
开发语言·网络·笔记·网络协议·学习·http
一 乐3 小时前
学习辅导系统|数学辅导小程序|基于java+小程序的数学辅导小程序设计与实现(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·学习·小程序
走在路上的菜鸟3 小时前
Android学Dart学习笔记第四节 基本类型
android·笔记·学习
陈橘又青3 小时前
CANN在智能安防场景中的落地实践:释放硬件潜能,简化AI开发
人工智能·网络协议·学习·ai·编辑器