zoukankan      html  css  js  c++  java
  • FPGAer:二分频、三分频、五分频

    写分频就是写计数器。

    二分频:指把频率分成两部分。比如50MHz的频率,二分频后就是25MHz。由公式T=1/f可知,时钟变为原来的两倍。

    综合代码如下:

    module shizhan(
    input sys_clk,
    input sys_rst_n,
    output reg dri_clk
    );
    always @(posedge sys_clk or negedge sys_rst_n)begin
    if(!sys_rst_n)
    dri_clk<=1'b0;
    else
    dri_clk<=~dri_clk;
    end
    endmodule

    tb代码如下:

    `timescale 1ns/1ns
    module shizhan_tb;
    reg sys_clk;
    reg sys_rst_n;
    wire dri_clk;
    initial begin
    sys_clk<=1'b0;
    sys_rst_n<=1'b0;
    #10 sys_rst_n<=1'b1;
    end
    always #10 sys_clk<=~sys_clk;
    shizhan u_shizhan(
    .sys_clk (sys_clk),
    .sys_rst_n (sys_rst_n),
    .dri_clk (dri_clk)
    );
    endmodule

    实战结果如下:


    三分频

    综合代码如下:

    module clk(
    input sys_clk,
    input sys_rst_n,
    output dri_clk
    );
    reg [2:0]cnt;
    reg dri_clk1;
    reg dri_clk2;
    always @(posedge sys_clk or negedge sys_rst_n)begin
    if(!sys_rst_n)
    cnt<=3'b0;
    else if(cnt<2)
    cnt<=cnt+1;
    else
    cnt<=3'b0;
    end
    always @(posedge sys_clk or negedge sys_rst_n)begin
    if(!sys_rst_n)begin
    dri_clk1<=1'b0;
    end
    else if(cnt==0)begin
    dri_clk1<=~dri_clk1;
    end
    else if(cnt==1)begin
    dri_clk1<=~dri_clk1;
    end
    else
    dri_clk1<=dri_clk1;
    end
    always @(negedge sys_clk or negedge sys_rst_n)begin
    if(!sys_rst_n)
    dri_clk2<=1'b0;
    else
    dri_clk2<=dri_clk1;
    end
    assign dri_clk=dri_clk1|dri_clk2;
    endmodule

    tb仿真代码如下:(ps:这个仿真程序跟二分频一样的,就是名字改成了clk_tb)

    `timescale 1ns/1ns
    module clk_tb;
    reg sys_clk;
    reg sys_rst_n;
    wire dri_clk;
    initial begin
    sys_clk<=1'b0;
    sys_rst_n<=1'b0;
    #10 sys_rst_n<=1'b1;
    end
    always #10 sys_clk<=~sys_clk;
    clk u_clk(
    .sys_clk (sys_clk),
    .sys_rst_n (sys_rst_n),
    .dri_clk (dri_clk)
    );
    endmodule

    实战结果:

    同理,五分频实现如下:

    综合代码如下:

    module clk(
    input sys_clk,
    input sys_rst_n,
    output dri_clk
    );
    reg [2:0]cnt;
    reg dri_clk1;
    reg dri_clk2;
    always @(posedge sys_clk or negedge sys_rst_n)begin
    if(!sys_rst_n)
    cnt<=3'b0;
    else if(cnt<4)
    cnt<=cnt+1;
    else
    cnt<=3'b0;
    end
    always @(posedge sys_clk or negedge sys_rst_n)begin
    if(!sys_rst_n)begin
    dri_clk1<=1'b0;
    end
    else if(cnt==2)begin
    dri_clk1<=~dri_clk1;
    end
    else if(cnt==4)begin
    dri_clk1<=~dri_clk1;
    end
    else
    dri_clk1<=dri_clk1;
    end
    always @(negedge sys_clk or negedge sys_rst_n)begin
    if(!sys_rst_n)
    dri_clk2<=1'b0;
    else
    dri_clk2<=dri_clk1;
    end
    assign dri_clk=dri_clk1|dri_clk2;
    endmodule

    仿真代码同三分频一样。

    实验结果:

  • 相关阅读:
    [day002]剑指 Offer 09. 用两个栈实现队列
    [day003]718. 最长重复子数组
    [linux]关于Ubuntu中Could not get lock /var/lib/dpkg/lock解决方案
    96. 不同的二叉搜索树
    91. 解码方法
    [动态规划]64. 最小路径和
    62.不同路径
    【Java】list根据某一条件进行分组
    【Java】批量生成小程序参数码并打包下载
    【Docker】使用docker制作libreoffice镜像并解决中文乱码问题
  • 原文地址:https://www.cnblogs.com/FPGAer/p/13048757.html
Copyright © 2011-2022 走看看