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

📄 sh.vhd.bak

📁 vhdl编写的自动售货机程序
💻 BAK
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SH IS
	PORT(
		CLK:IN STD_LOGIC;
		RST:IN STD_LOGIC;
		DIN:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
		COMM1,COMM2:IN STD_LOGIC;
		ERROR1,ERROR2:OUT STD_LOGIC;
		COMMODITY1,COMMODITY2:OUT STD_LOGIC;
		GIVE_CHANGE1,GIVE_CHANGE2:OUT STD_LOGIC
		);
END;
ARCHITECTURE BHV OF SH IS
	TYPE FSM_ST IS (S0,S1,S2,S3);
	SIGNAL STATE:FSM_ST;
	SIGNAL COMM_1,COMM_2:STD_LOGIC;
	SIGNAL D_IN:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
	PROCESS(CLK,RST)
	BEGIN
	IF COMM1='1' THEN
		COMM_1<=COMM1;
	ELSIF COMM2='1' THEN
		COMM_2<=COMM2;
	ELSIF RST='1' THEN STATE<=S0;
	ELSIF CLK'EVENT AND CLK='1' THEN
	CASE STATE IS   
		WHEN S0=>
			CASE D_IN IS
				WHEN "00"=>STATE<=S0;COMMODITY1<='0';COMMODITY2<='0';
									GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
									ERROR1<='0';ERROR2<='0';
				WHEN "01"=>STATE<=S1;COMMODITY1<='0';COMMODITY2<='0';
									GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
									ERROR1<='0';ERROR2<='0';
				WHEN "10"=>STATE<=S2;COMMODITY1<='0';COMMODITY2<='0';
									GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
									ERROR1<='0';ERROR2<='0';
				WHEN "11"=>IF COMM_1='1' THEN
								COMMODITY1<='0';
								GIVE_CHANGE1<='0';
								ERROR1<='1';
								STATE<=S0;
								COMM_1<='0';
								COMM_2<='0';
							ELSIF COMM_2='1'THEN
								COMMODITY2<='1';
								GIVE_CHANGE2<='1';
								ERROR2<='0';
								STATE<=S0;
								COMM_1<='0';
								COMM_2<='0';
							ELSIF COMM_1='1' AND COMM_2='1' THEN 
								COMMODITY1<='0';COMMODITY2<='0';
								GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
								ERROR1<='1';ERROR2<='1';
								STATE<=S0;
								COMM_1<='0';
								COMM_2<='0';
							END IF;
				WHEN OTHERS=>ERROR1<='1';ERROR2<='1';STATE<=S0;COMM_1<='0';COMM_2<='0';
			END CASE;
		WHEN S1=>
			CASE D_IN IS
				WHEN "00"=>STATE<=S1;
				WHEN "01"=>STATE<=S2;
				WHEN "10"=>IF COMM_1='1' THEN 
								COMMODITY1<='1';
								GIVE_CHANGE1<='0';
								ERROR1<='0';
								STATE<=S0;
								COMM_1<='0';
								COMM_2<='0';
							ELSIF COMM_2='1'THEN
								COMMODITY2<='0';
								GIVE_CHANGE2<='0';
								ERROR2<='0';
								STATE<=S3;
							ELSIF COMM_1='1' AND COMM_2='1' THEN  
								COMMODITY1<='0';COMMODITY2<='0';
								GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
								ERROR1<='1';ERROR2<='1';
								STATE<=S0;
								COMM_1<='0';
								COMM_2<='0';
							END IF;
				WHEN OTHERS=>IF COMM_1='1' THEN
								ERROR1<='1';
							ELSIF COMM_2='1' THEN
								ERROR2<='1';
							ELSE ERROR1<='1';ERROR2<='1';
							END IF;
							STATE<=S0;
							COMM_1<='0';COMM_2<='0';
			END CASE;
		WHEN S2=>
			CASE D_IN IS
				WHEN "00"=>STATE<=S2;
				WHEN "01"=>IF COMM_1='1' THEN 
								COMMODITY1<='1';
								GIVE_CHANGE1<='0';
								ERROR1<='0';
								STATE<=S0;
								COMM_1<='0';
								COMM_2<='0';
							ELSIF COMM_2='1' THEN
								COMMODITY2<='0';
								GIVE_CHANGE2<='0';
								ERROR2<='0';
								STATE<=S3;
							ELSIF COMM_1='1' AND COMM_2='1' THEN  
								COMMODITY1<='0';COMMODITY2<='0';
								GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
								ERROR1<='1';ERROR2<='1';
								STATE<=S0;
								COMM_1<='0';
								COMM_2<='0';
							END IF;
				WHEN "10"=>IF COMM_1='1' THEN 
								COMMODITY1<='1';
								GIVE_CHANGE1<='1';
								ERROR1<='0';
								STATE<=S0;
								COMM_1<='0';
								COMM_2<='0';
							ELSIF COMM_2='1' THEN
								COMMODITY2<='1';
								GIVE_CHANGE2<='0';
								ERROR2<='0';
								STATE<=S0;
								COMM_1<='0';
								COMM_2<='0';
							ELSIF COMM_1='1' AND COMM_2='1' THEN 
								COMMODITY1<='0';COMMODITY2<='0';
								GIVE_CHANGE1<='0';GIVE_CHANGE2<='0';
								ERROR1<='1';ERROR2<='1';
								STATE<=S0;
								COMM_1<='0';
								COMM_2<='0';
							END IF;
				WHEN "11"=>IF COMM_1='1' THEN
								ERROR1<='1';
							ELSIF COMM_2='1' THEN
								ERROR2<='1';
							ELSE ERROR1<='1';ERROR2<='1';
							END IF;
							STATE<=S0;
							COMM_1<='0';COMM_2<='0';
				WHEN OTHERS=>ERROR1<='1';ERROR2<='1';STATE<=S0;COMM_1<='0';COMM_2<='0';
			END CASE;
		WHEN S3=>
			CASE D_IN IS
				WHEN "00"=>STATE<=S3;							
				WHEN "01"=>IF COMM_2='1' THEN
								COMMODITY2<='1';
								GIVE_CHANGE2<='0';
								ERROR2<='0';
								STATE<=S0;
								COMM_2<='0';
							ELSE 
								COMMODITY2<='0';
								GIVE_CHANGE2<='0';
								ERROR2<='1';
								STATE<=S0;
								COMM_2<='0';
							END IF;
				WHEN "10"=>IF COMM_2='1' THEN
								COMMODITY2<='1';
								GIVE_CHANGE2<='0';
								ERROR2<='0';
								STATE<=S0;
								COMM_2<='0';
							ELSE 
								COMMODITY2<='0';
								GIVE_CHANGE2<='0';
								ERROR2<='1';
								STATE<=S0;
								COMM_2<='0';
							END IF;
				WHEN "11"=>ERROR2<='1';STATE<=S0;COMM_2<='0';
				WHEN OTHERS=>ERROR1<='1';ERROR2<='1';STATE<=S0;COMM_1<='0';COMM_2<='0';
			END CASE;
		WHEN OTHERS=>ERROR1<='1';ERROR2<='1';STATE<=S0;COMM_1<='0';COMM_2<='0';
	END CASE;
	END IF;
	D_IN<=DIN;
	END PROCESS;
END;

⌨️ 快捷键说明

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