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

    仿真代码同三分频一样。

    实验结果:

  • 相关阅读:
    [置顶] 一个懦弱的IT人
    Android ListView的理解(一)
    不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数
    http-使用get和post方式提交数据
    ILOG的一个基本应用——解决运输问题、转运问题
    原生js获取execl里面的值 主要使用ActiveXObject
    (顺序表的应用5.4.2)POJ 1591 M*A*S*H(约瑟夫环问题的变形——变换步长值)
    HDU 3032 Nim or not Nim? (sg函数)
    Hadoop入门实践之从WordCount程序说起
    仅复制备份(简单恢复模式)
  • 原文地址:https://www.cnblogs.com/FPGAer/p/13048757.html
Copyright © 2011-2022 走看看