• 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

    仿真代码同三分频一样。

    实验结果:

  • 相关阅读:
    详解ASP.NET MVC 2中强类型HTML辅助方法
    C#3.0规范(四)Lambda 表达式
    HTTP Status 检测器 : SEO在线工具 : SEO 网站优化推广
    CSS 命名规范
    数据库表及字段命名、设计规范
    C#变量命名中的[匈牙利命名法][骆驼命名法][帕斯卡(pascal)命名法]
    C#命名规范
    推荐磁盘分区管理工具Acronis Disk Director Suite 10.0(有效注册码+汉化补丁)
    经典海量jQuery插件
    GET PUT POST的含义(Http)
  • 原文地址:https://www.cnblogs.com/FPGAer/p/13048757.html
Copyright © 2020-2023  润新知