手撕代码——任意偶数分频

手撕代码——任意偶数分频

一、偶数分频器原理与设计

  对时钟进行N倍偶数分频,需要设计一个计数器cnt,当计数器cnt计数到N/2-1和N-1时,对分频时钟进行反转,得到偶数分频时钟信号。

二、完整代码与仿真文件

  任意偶数分频器代码如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/05/22 15:17:31
// Design Name: 
// Module Name: clk_divide_even
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module clk_divide_even
#(
    parameter DIV_PARAM = 4 //分频系数(偶数)
)
(
    input   sys_clk  ,
    input   sys_rst_n,
    output  clk_o     
);

parameter   CNT_WIDTH = $clog2(DIV_PARAM); //计数器位宽

reg     [CNT_WIDTH-1:0]     cnt; //计数器
reg                         clk_o_r;

//计数器
always @(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        cnt <= 'd0;
    else if(cnt == DIV_PARAM-1)
        cnt <= 'd0;
    else
        cnt <= cnt + 1'b1;
end

//偶数分频时钟
always @(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        clk_o_r <= 'd0;
    else if(cnt == DIV_PARAM-1 || cnt ==( DIV_PARAM>>1)-1)
        clk_o_r <= ~clk_o_r;
    else
        clk_o_r <= clk_o_r;
end

assign clk_o = clk_o_r;

endmodule

  仿真代码如下:

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/05/22 15:22:14
// Design Name: 
// Module Name: tb_clk_divide_even
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//


module tb_clk_divide_even();

parameter DIV_PARAM = 4; //分频系数(偶数)

reg   sys_clk  ;
reg   sys_rst_n;
wire  clk_o    ;

initial begin
    sys_clk = 1'b1;
    sys_rst_n <= 1'b0;
    #20
    sys_rst_n <= 1'b1;

end

always #5 sys_clk = ~sys_clk;

clk_divide_even
#(
    .DIV_PARAM(DIV_PARAM) //分频系数(偶数)
)
clk_divide_even
(
    .sys_clk  (sys_clk  ),
    .sys_rst_n(sys_rst_n),
    .clk_o    (clk_o    ) 
);

endmodule

三、仿真结果

  对4分频时钟分频器进行仿真,得到如下结果,仿真通过。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值