VHDL:计数器

author-image

作者

VHDL:行为计数器

此示例实现了具备负载、清理和上数/下数功能的行为计数器。它为经过特定设备架构优化,因此性能可能会有所不同。英特尔® FPGA 推荐使用 lpm_counter 函数来实现计数器(参见 VHDL:下数计数器)。此示例用于展示无需 LPM 的计数器实现。

有关在您的项目中使用此示例的更多信息,请访问:

counters.vhd

ENTITY counters IS
    PORT(   
        d       : IN    INTEGER RANGE 0 TO 255;
        clk     : IN    BIT;
        clear   : IN    BIT;
        load    : IN    BIT;
        up_down : IN    BIT;
        qd      : OUT   INTEGER RANGE 0 TO 255);
END counters;

ARCHITECTURE a OF counters IS
BEGIN
    -- An up/down counter
    PROCESS (clk)
         VARIABLE    cnt       : INTEGER RANGE 0 TO 255;
         VARIABLE    direction : INTEGER;
    BEGIN
        IF (up_down = '1') THEN  --Generate up/down counter
            direction := 1;
            ELSE
                direction := -1;
        END IF;
            IF (clk'EVENT AND clk = '1') THEN
                IF (load = '1') THEN         --Generate loadable 
                    cnt := d;                --counter. 删除这些 
                    ELSE                     --行以提升性能
                    cnt := cnt + direction; 
                 END IF;
                --The following lines will produce a synchronous 
                --clear on the counter
                  IF (clear = '0') THEN     
                     cnt := 0;
                  END IF;
             END IF;
    qd <= cnt;   --Generate outputs
    END PROCESS;
END a;