📄 classify2.vhd
字号:
Library IEEE ;
USE IEEE.STD_LOGIC_1164.all;
USE IEEE.STD_LOGIC_ARITH.all;
ENTITY classify2 IS
PORT(clk : IN STD_LOGIC; --全局时钟
sign : IN STD_LOGIC; --待测信号
class : OUT INTEGER RANGE 0 TO 7); --量程编号
END classify2;
ARCHITECTURE rtl OF classify2 IS
--7位BCD码计数器
COMPONENT counter_bcd7
PORT(
--clr计数器清零,en计数使能,clk时钟
clr,ena,clk : IN STD_LOGIC;
--计数器输出,该语句用于实际应用
q : OUT STD_LOGIC_VECTOR(27 DOWNTO 0);
--某位BCD码是否为0
zeros : OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
--计数器进位
cout : OUT STD_LOGIC);
END COMPONENT;
SIGNAL high : STD_LOGIC; --高电平信号
SIGNAL q_sig : STD_LOGIC_VECTOR(27 DOWNTO 0); --7位BCD码计数器输出
SIGNAL zeros_sig : STD_LOGIC_VECTOR(6 DOWNTO 0); --7位BCD码计数器zeros输出
SIGNAL cout_sig : STD_LOGIC; --7位BCD码计数器进位
SIGNAL q_reg : STD_LOGIC_VECTOR(27 DOWNTO 0); --寄存器锁存后的计数器输出信号
SIGNAL zeros_reg : STD_LOGIC_VECTOR(6 DOWNTO 0); --寄存器锁存后的zeros信号
SIGNAL cout_reg : STD_LOGIC; --寄存器锁存后的进位信号
SIGNAL sig_divide2 : STD_LOGIC; --待测信号的二分频
BEGIN
high <= '1';
--7位BCD码计数器
count: counter_bcd7
PORT MAP (clr => sig_divide2,
ena => high,
clk => clk,
q => q_sig,
zeros => zeros_sig,
cout => cout_sig);
--计数器输出的寄存器锁存
PROCESS(clk)
BEGIN
IF(clk='1' AND clk'event) THEN
IF sig_divide2 = '0' THEN
q_reg <= q_sig;
zeros_reg <= zeros_sig;
cout_reg <= cout_sig;
END IF;
END IF;
END PROCESS;
--待测信号二分频
PROCESS(sign)
BEGIN
IF(sign'event AND sign='1')THEN
sig_divide2 <= NOT sig_divide2;
END IF;
END PROCESS;
--由计数器输出译码得到量程信号
PROCESS(zeros_reg, cout_reg, sign)
BEGIN
--寄存器锁存输出保证信号稳定
IF(sign'event AND sign='0')THEN
--计数器值稳定后才开始译码
IF sig_divide2='1' THEN
IF(cout_reg = '1')THEN
class <= 0;
ELSE
IF(zeros_reg(6) = '0') THEN
class <= 1;
ELSIF(zeros_reg(5) = '0') THEN
class <= 2;
ELSIF(zeros_reg(4) = '0') THEN
class <= 3;
ELSIF(zeros_reg(3) = '0') THEN
class <= 4;
ELSIF(zeros_reg(2) = '0') THEN
class <= 5;
ELSIF(zeros_reg(1) = '0') THEN
class<= 6;
ELSIF(zeros_reg(0) = '0') THEN
class <= 7;
ELSE
class <= 7;
END IF;
END IF;
END IF;
END IF;
END PROCESS;
END rtl;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -