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

    仿真代码同三分频一样。

    实验结果:

  • 相关阅读:
    Exchange 2016与国内版O365混合部署(1):过程总览
    Office365与本地Exchange混合部署之邮件流介绍详情
    清理Exchange 2013和2016的Log文件(精华)
    Exchange2016日志路径
    C:/inetpub/logs/logfile/路径详解
    使用VMwareVCenterConverter迁移到虚拟机(p2v)
    WindowsServer安全基线
    利用WSUS部署更新程序
    Storefront与NetScaler的集成配置
    运维技巧(13):Exchange证书申请导入
  • 原文地址:https://www.cnblogs.com/FPGAer/p/13048757.html
Copyright © 2011-2022 走看看