计数器code

理论学习:

计数是一种最基本的运算,计数器就是实现着这种运算的逻辑电路。在数字系统中,计数器主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能。

code

实现不带标志信号的计数器

复制代码
module    counter
    #(
        parameter        CNT_MAX    =    32'd24_999_999
    )

(
    input    wire    sys_clk          ,
    input    wire    sys_rst_n        ,

    output   reg    led_out    
);


    reg    [31:0]    cnt    ;


    always@(posedge sys_clk or negedge sys_rst_n    )
    begin
        if( sys_rst_n == 1'b0 )
        begin
            cnt    <=    32'd0    ;
        end
        else if( cnt == CNT_MAX )
        begin
            cnt    <=    32'd0    ;
        end
        else
        begin
            cnt    <=    cnt    + 1'b1    ;
        end
    end

    always@(posedge sys_clk or negedge sys_rst_n)
    begin
        if( sys_rst_n    ==    1'b0 )
        begin
            led_out    <=    1'b0    ;
        end
        else if( cnt == CNT_MAX )
        begin
            led_out    <=    ~led_out    ;
        end
    end


endmodule

实现带标志信号的计数器

复制代码
module    counter
    #(
        parameter    CNT_MAX    =    32'd24_999_999
    )

(
    input    wire    sys_clk      ,
    input    wire    sys_rst_n    ,

    output   reg     led_out

);

    reg    [31:0]    cnt         ;
    reg              cnt_flag    ;
    
    always@(posedge sys_clk or negedge sys_rst_n )
    begin
        if( sys_rst_n == 1'b0 )
        begin   
            cnt    <=    32'd0    ;
        end
        else if( cnt == CNT_MAX )
        begin
            cnt    <=    32'd0    ;
        end
        else
        begin
            cnt    <=    cnt    + 1'b1    ;
        end
    end

    always@(posedge sys_clk or negedge sys_rst_n )
    begin
        if( sys_rst_n == 1'b0 )
        begin
            cnt_flag    <=    1'b0    ;
        end
        else if( cnt == CNT_MAX - 1'b1 )
        begin
            cnt_flag    <=    1'b1
        end
        else
        begin
            cnt_flag    <=    1'b0    ;
        end
    end

    always@( posedge sys_clk or negedge sys_rst_n )
    begin]
        if( sys_rst_n == 1'b0 )
        begin
            led_out    <=    1'b0    ;
        end
        else if( cnt_flag == 1'b1 )
        begin
            led_out    <=    ~led_out    ;
        end
    end



endmodule

对比发现,第一种方法用了两个always,第二种方式用了三个always,发现第一种方法产生了两组寄存器,第二种产生了三组寄存器。

相关推荐
9527华安8 小时前
Xilinx系列FPGA实现DP1.4视频收发,支持4K60帧分辨率,提供2套工程源码和技术支持
fpga开发·音视频·dp1.4·4k60帧
cycf11 小时前
高速接口基础
fpga开发
forgeda17 小时前
从Vivado集成Lint功能,看FPGA设计的日益ASIC化趋势
fpga开发·vivado·lint·eco·静态检查功能
hexiaoyan8271 天前
国产化FPGA开发板:2050-基于JFMK50T4(XC7A50T)的核心板
fpga开发·工业图像输出·vc709e板卡·zynq 通用计算平台·模拟型号处理
雨洛lhw1 天前
The Xilinx 7 series FPGAs 设计PCB 该选择绑定哪个bank引脚,约束引脚时如何定义引脚电平标准?
fpga开发·bank·电平标准
红糖果仁沙琪玛1 天前
FPGA ad9248驱动
fpga开发
minglie11 天前
XSCT/Vitis 裸机 JTAG 调试与常用命令
fpga开发
沐欣工作室_lvyiyi1 天前
基于FPGA的电梯控制系统设计(论文+源码)
单片机·fpga开发·毕业设计·计算机毕业设计·电子交易系统
阿sir1982 天前
ZYNQ PS XADC读取芯片内部温度值,电压值。
fpga开发
@晓凡2 天前
NIOS ii工程移植路径问题
fpga开发·nios ii