FPGA的学习:5分频的实现

首先先把偶分频的系统框图和时序图画出来。

FPGA的学习:5分频的实现_第1张图片

FPGA的学习:5分频的实现_第2张图片

此次采用降频的原理,了解了原理之后,开始代码的编写。

`timescale  1ns/1ns

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

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

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

//cnt:计数器从0到4循环计数
always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        cnt <= 3'b0;
    else    if(cnt == 3'd4)
        cnt <= 3'b0;
    else
        cnt <= cnt + 1'b1;

//clk_flag:脉冲信号指示5分频
always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        clk_flag <= 1'b0;
    else    if(cnt == 3'd3)
        clk_flag <= 1'b1;
    else
        clk_flag <= 1'b0;

endmodule

实现5分频之后,开始仿真代码的编写。

`timescale  1ns/1ns

module  tb_divider_five();

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_five    divider_five_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

 

你可能感兴趣的:(FPGA,verilog,fpga)