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

📄 bell.vhd

📁 这是一些经典的vhdl example
💻 VHD
字号:
Library IEEE ;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY bell IS
	PORT(					
		 alarmtime			: IN STD_LOGIC_VECTOR(23 DOWNTO 0);	--闹铃时间
		 time 				: IN STD_LOGIC_VECTOR(23 DOWNTO 0); --当前时间
		 alarmon			: IN STD_LOGIC;                     --闹钟开关状态
		 houralarmon		: IN STD_LOGIC;                     --整点报时开关状态
		 clk				: IN STD_LOGIC;                     --时钟
		 alarm_signal 		: OUT STD_LOGIC);                   --蜂鸣器驱动
END bell;
ARCHITECTURE rtl OF bell IS
	SIGNAL alarm			: STD_LOGIC;                        --闹钟引起的铃声
	SIGNAL houralarm		: STD_LOGIC;                        --整点报时引起的铃声
	TYPE state IS(s0,s1,s2,s3,s4);                              --状态机状态
	SIGNAL present_state : state := s0;
	SIGNAL next_state : state :=s0 ;
BEGIN
	--状态机用于产生闹钟引起的铃声
	--状态更新和状态机复位
	PROCESS(clk)
	BEGIN
		IF(alarmon='0')THEN
			present_state <= s0;
		ELSIF(clk'event AND clk='1')THEN
			present_state <= next_state;
		END IF;
	END PROCESS;
	--状态译码
	PROCESS(present_state,time,alarmtime)
	BEGIN
		CASE present_state IS
			WHEN s0 =>
				IF(alarmtime=time)THEN
					next_state <= s1;
				ELSE
					next_state <= present_state;
				END IF;
			WHEN s1 =>
				IF(time(6)='1')THEN
					next_state <= s2;
				ELSE
					next_state <= present_state;
				END IF;
			WHEN s2 =>
				IF(time(6)='0')THEN
					next_state <= s3;
				ELSE
					next_state <= present_state;
				END IF;
			WHEN s3 =>
				IF(time(6)='1')THEN
					next_state <= s4;
				ELSE
					next_state <= present_state;
				END IF;
			WHEN s4 =>
				IF(time(6)='0')THEN
					next_state <= s0;
				ELSE
					next_state <= present_state;
				END IF;
			WHEN OTHERS =>
				next_state <= s0;
		END CASE;
	END PROCESS;
	--输出译码
	PROCESS(present_state)
	BEGIN
		IF((present_state=s3 OR present_state=s4))THEN
			alarm <= '1';
		ELSE
			alarm <= '0';
		END IF;
	END PROCESS;
	--整点报时铃声产生
	PROCESS(houralarmon,time)
	BEGIN
		IF(houralarmon='1' AND time(15 DOWNTO 0)="0000000000000000")THEN
			houralarm <= '1';
		ELSE
			houralarm <= '0';
		END IF;
	END PROCESS;
	--最终的铃声等于闹钟铃声和整点报时铃声的或
	alarm_signal <= alarm OR houralarm;
END rtl;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -