📄 counter.vhd
字号:
--/*****************************************************************************
-- * 源文件: counter.vhd
-- * 模块: 计数器/分频器
-- * 版权:
-- * Copyright(C) 北京联华众科科技有限公司
-- * www.lianhua-zhongke.com.cn
-- * 版本: Version 1.0
-- *
-- * 功能说明:
-- * 对输入时钟按照参数指定的分频系数进行分频输出,同时对输入时钟计数,
-- * 计数模值亦由参数指定。
-- * 参数说明:
-- * 输出
-- * counter - 每个输入时钟到来后加1,达到计数器模值unit后恢复为0
-- * carrier - 分频输出,它的频率由输入时钟和分频参数确定
-- * f_carrier = f_clock/divisor
-- *
-- * 输入
-- * clock - 时钟
-- * reset - 复位信号,低电平有效
-- *
-- * 参数
-- * divisor - 分频系数,它的作用可用如下公司描述
-- * 计数器/分频器的输出频率 = 输入时钟 clock 频率/分频系数
-- * inner_counter_width - 内部计数器变量位宽,内部计数器变量>=divisor/2
-- * unit - 计数模值
-- *
-- * 变更记录:
-- * 2006.01.28, 新建
-- *
-- *****************************************************************************/
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;
ENTITY counter IS
GENERIC
(
divisor : INTEGER:= 24000000;
inner_counter_width : INTEGER:= 32;
unit : STD_LOGIC_VECTOR(3 downto 0):= "1111"
);
PORT
(
clock : IN STD_LOGIC;
reset : IN STD_LOGIC;
counter : BUFFER STD_LOGIC_VECTOR(3 downto 0);
carrier : BUFFER STD_LOGIC
);
END counter;
ARCHITECTURE counter_architecture OF counter IS
BEGIN
PROCESS(clock)
VARIABLE delay_counter : INTEGER RANGE 0 TO divisor;
BEGIN
IF (reset = '0') THEN
carrier <= '1';
counter <= "0000";
delay_counter := 0;
ELSE
IF(clock = '1' AND clock'EVENT) THEN
IF (delay_counter = divisor/2-1) THEN
carrier <= NOT carrier;
--var_carrier := NOT var_carrier;
--carrier <= delay_counter[0];
delay_counter := 0;
ELSE
delay_counter := delay_counter+1;
END IF;
IF (counter = unit) THEN
counter <= "0000";
ELSE
counter <= counter+1;
END IF;
END IF;
END IF;
END PROCESS;
END counter_architecture;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -