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

📄 sh_more.vhd.bak

📁 vhdl编写的自动售货机程序
💻 BAK
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SH_MORE IS
	PORT(
CLK:IN STD_LOGIC;							--输入端口
RST:IN STD_LOGIC;
DIN:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
COMM: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_MORE IS
TYPE FSM_ST IS (S0,S1,S2,S3);				--定义状态数据类型
SIGNAL STATE:FSM_ST;						--定义状态数据信号
BEGIN
	PROCESS(CLK,RST)
	BEGIN
	IF RST='1' THEN STATE<=S0;				--置位信号
	ELSIF CLK'EVENT AND CLK='1' THEN		--上升沿
	IF COMM='1' THEN						--选中商品1
	CASE STATE IS
		WHEN S0=>
			CASE DIN IS
				WHEN "00"=>STATE<=S0;		--初始化
COMMODITY1<='0';
GIVE_CHANGE1<='0';
ERROR1<='0';				
COMMODITY2<='0';
GIVE_CHANGE2<='0';
ERROR2<='0';
				WHEN "01"=>STATE<=S1;
COMMODITY1<='0';
GIVE_CHANGE1<='0';
ERROR1<='0';
COMMODITY2<='0';
GIVE_CHANGE2<='0';
ERROR2<='0';
				WHEN "10"=>STATE<=S2;
COMMODITY1<='0';
GIVE_CHANGE1<='0';
ERROR1<='0';
COMMODITY2<='0';
GIVE_CHANGE2<='0';
ERROR2<='0';
				WHEN "11"=>ERROR1<='1';STATE<=S0;
											--设定值为3元,输入5元是报错并初始化
				WHEN OTHERS=>
				ERROR1<='1';STATE<=S0;
											--STD_LOGIC数据类型其它情况时报错并初始化 			
				END CASE;
		WHEN S1=>
			CASE DIN IS
				WHEN "00"=>STATE<=S1;		--状态初始化
				WHEN "01"=>STATE<=S2;
				WHEN "10"=>COMMODITY1<='1';
GIVE_CHANGE1<='0';
STATE<=S0;
											--输入3元后输出商品1并初始化
				WHEN "11"=>ERROR1<='1';STATE<=S0;
											--输入1元和2元后再输入5元是报错并初始化
				WHEN OTHERS=>
				ERROR1<='1';STATE<=S0;
											--同上面的WHEN OTHERS语句功能
			END CASE;
		WHEN S2=>
			CASE DIN IS
				WHEN "00"=>STATE<=S2;
				WHEN "01"=>COMMODITY1<='1';
GIVE_CHANGE1<='0';
STATE<=S0;
											--输入3元后输出商品1并初始化
				WHEN "10"=>COMMODITY1<='1';
GIVE_CHANGE1<='1';
STATE<=S0;
											--输入4元后输出商品1并找钱,初始化
				WHEN "11"=>ERROR1<='1';STATE<=S0;
											--输入2元后再输入5元报错并初始化
				WHEN OTHERS=>
				ERROR1<='1';STATE<=S0;
											--同上面的WHEN OTHERS语句功能
			END CASE;
		WHEN S3=>
			CASE DIN IS
				WHEN "00"=>COMMODITY1<='1';
GIVE_CHANGE1<='0';
STATE<=S0;
											--输入3元后送出商品1并初始化
				WHEN "01"=>ERROR1<='1';STATE<=S0;
											--输入不符合规则,报错并初始化,下同
				WHEN "10"=>ERROR1<='1';STATE<=S0;
				WHEN "11"=>ERROR1<='1';STATE<=S0;
				WHEN OTHERS=>
				ERROR1<='1';STATE<=S0;
											--同上面的WHEN OTHERS语句功能
			END CASE;
		WHEN OTHERS=>ERROR1<='1';STATE<=S0;
											--出现其它状态类型后报错并初始化
	END CASE;
	ELSIF COMM='0' THEN
											--选中商品2,以下个语句功能与商品1对应相同
	CASE STATE IS
		WHEN S0=>
			CASE DIN IS
				WHEN "00"=>STATE<=S0;COMMODITY2<='0';GIVE_CHANGE2<='0';ERROR2<='0';
									COMMODITY1<='0';GIVE_CHANGE1<='0';ERROR1<='0';
				WHEN "01"=>STATE<=S1;COMMODITY2<='0';GIVE_CHANGE2<='0';ERROR2<='0';
									COMMODITY1<='0';GIVE_CHANGE1<='0';ERROR1<='0';
				WHEN "10"=>STATE<=S2;COMMODITY2<='0';GIVE_CHANGE2<='0';ERROR2<='0';
									COMMODITY1<='0';GIVE_CHANGE1<='0';ERROR1<='0';
				WHEN "11"=>COMMODITY2<='1';GIVE_CHANGE2<='1';STATE<=S0;
				WHEN OTHERS=>ERROR2<='1';STATE<=S0;
			END CASE;
		WHEN S1=>
			CASE DIN IS
				WHEN "00"=>STATE<=S1;
				WHEN "01"=>STATE<=S2;
				WHEN "10"=>STATE<=S3;
				WHEN "11"=>ERROR2<='1';STATE<=S0;
				WHEN OTHERS=>ERROR2<='1';STATE<=S0;
			END CASE;
		WHEN S2=>
			CASE DIN IS
				WHEN "00"=>STATE<=S2;
				WHEN "01"=>STATE<=S3;
				WHEN "10"=>COMMODITY2<='1';STATE<=S0;
				WHEN "11"=>ERROR2<='1';STATE<=S0;
				WHEN OTHERS=>ERROR2<='1';STATE<=S0;
			END CASE;
		WHEN S3=>
			CASE DIN IS
				WHEN "00"=>STATE<=S3;
				WHEN "01"=>COMMODITY2<='1';STATE<=S0;
				WHEN "10"=>COMMODITY2<='1';GIVE_CHANGE2<='1';STATE<=S0;
				WHEN "11"=>ERROR2<='1';STATE<=S0;
				WHEN OTHERS=>ERROR2<='1';STATE<=S0;
			END CASE;
		WHEN OTHERS=>ERROR2<='1';STATE<=S0;
	END CASE;
	ELSE
	NULL;
	END IF;
	END IF;
	END PROCESS;
END;

⌨️ 快捷键说明

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