⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 divider.v

📁 一个串口的完整FPGA工程
💻 V
字号:
/*********************************************************************************************************
 **                                  All right reserve 2008-2009(C) 
 **                             Created &maintain by http://www.edaok.net
 **=======================================================================================================
 ** 模 块 名:   division
 ** 描    述:   实现时钟的分频, 分频系数由用户输入
 **
 ** 原 作 者:   Adeko (http://www.edaok.net)
 ** 参 与 者:   (...welcome you join in)
 **
 **=======================================================================================================
 ********************************************************************************************************/

`define CNT_WIDTH       12
module divider (
    clk, 
    rst_n, 
    
    factor, 
    tick_out, 
    enable
);

input               clk;                                        //  全局时钟线, (系统时钟)
input               rst_n;                                      //  全局复位线

input               enable;                                     //  模块使能线
input   [`CNT_WIDTH-1 : 0]    factor;                           //  分频系数
output              tick_out;                                   //  分频输出



reg     [`CNT_WIDTH-1 : 0]    rCnt;
reg                 rPlsTick;


/********************************************************************************************************
 ** 软件仿真时初始化寄存器值
 ********************************************************************************************************/
initial
begin
    rCnt <= `CNT_WIDTH'h0;
    rPlsTick <= 1'b0;
end


/********************************************************************************************************
 ** 计数分频计数器, 输出分频结果脉冲
 ********************************************************************************************************/
always @(posedge clk or negedge rst_n)
begin : DIV_CNT
    if (~rst_n) begin
        rCnt    <= `CNT_WIDTH'h0;
        rPlsTick <= 1'b0;
    end
    else if (enable) begin 
        rCnt    <= rCnt - `CNT_WIDTH'h1;

        if (rCnt == `CNT_WIDTH'h0) begin
            rPlsTick <= 1'b1;
            rCnt    <= factor;
        end
        else begin
            rPlsTick <= 1'b0;
        end
    end 
    else begin 
        rPlsTick <= 1'b0;
        rCnt     <= factor;
    end
end


/*
 *  输出信号
 */
assign  tick_out = rPlsTick;

endmodule

/*********************************************************************************************************
 ** End Of File
 ********************************************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -