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

📄 classify2.vhd

📁 VHDL写的大部分程序。希望大家一起学习
💻 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 + -