博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FPGA的学习:6分频的实现
阅读量:807 次
发布时间:2019-03-26

本文共 948 字,大约阅读时间需要 3 分钟。

首先画出系统框图和时序图。

`timescale  1ns/1ns

module  divider_six(

    input   wire    sys_clk     ,   //系统时钟50Mhz
    input   wire    sys_rst_n   ,   //全局复位

    output  reg     clk_flag        //指示系统时钟6分频后的脉冲标志信号

);

reg [2:0] cnt;  //用于计数的寄存器

//cnt:计数器从0到5循环计数

always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        cnt <= 3'b0;
    else    if(cnt == 3'd5)
        cnt <= 3'b0;
    else
        cnt <= cnt + 1'b1;

//clk_flag:脉冲信号指示6分频

always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        clk_flag <= 1'b0;
    else    if(cnt == 3'd4)
        clk_flag <= 1'b1;
    else
        clk_flag <= 1'b0;

endmodule

接着进行仿真文件的编写。

`timescale  1ns/1ns

module  tb_divider_six();

wire    clk_out;

reg     sys_clk;

reg     sys_rst_n;

//初始化系统时钟、全局复位

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

//sys_clk:模拟系统时钟,每10ns电平翻转一次,周期为20ns,频率为50Mhz

always #10 sys_clk = ~sys_clk;

divider_six divider_six_inst

(
    .sys_clk    (sys_clk    ),  //input     sys_clk
    .sys_rst_n  (sys_rst_n  ),  //input     sys_rst_n

    .clk_out    (clk_out    )   //output    clk_out

);

endmodule

转载地址:http://fpmyk.baihongyu.com/

你可能感兴趣的文章