名称:自动售货机设计VHDL代码VIVADO仿真(文末获取)
软件:Quartus
语言:VHDL
代码功能:
自动售货机
1、可以投币5元、10元、20元
2、可以取消购买,并退币
3、投币总数大于等于25元时,输出购买成功信号
1. 工程文件
2. 程序文件
3. 程序编译
4. Testbench
5. 仿真图
仿真了投币5+10+20,然后出货;仿真了投币5+10然后取消;
部分代码展示:
LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_unsigned.all; --vending_machine ENTITY vending_machine IS PORT ( clk : IN STD_LOGIC; reset : IN STD_LOGIC; Insert5 : IN STD_LOGIC;--an input from the 5p coin sensor Insert10 : IN STD_LOGIC;--an input from the 10p coin sensor Insert20 : IN STD_LOGIC;--an input from the 20p coin sensor Cancel : IN STD_LOGIC;-- an input from the cancel button. Open_o : OUT STD_LOGIC;-- an output that has value '1' for a single clock cycle when the required sum (25p or more) has been reached, '0' otherwise. Return_o : OUT STD_LOGIC--stop the transaction and the machine returns all coins that have been inserted. ); END vending_machine; ARCHITECTURE behave OF vending_machine IS TYPE State_type IS (s_idle, s_coin, s_sum, s_open, s_return); -- define the State_type?? SIGNAL state : State_Type; -- current state SIGNAL next_state: State_Type; -- next state SIGNAL money : STD_LOGIC_VECTOR(5 DOWNTO 0) := "000000"; BEGIN PROCESS (clk) BEGIN IF (rising_edge(clk)) THEN IF (reset = '1') THEN--reset money <= "000000"; ELSIF (state = s_coin) THEN--input money state IF (Insert5 = '1') THEN money <= money + "000101";--input 5 ELSIF (Insert10 = '1') THEN money <= money + "001010";--input 10 ELSIF (Insert20 = '1') THEN money <= money + "010100";--input 20 END IF; ELSE money <= "000000"; END IF; END IF; END PROCESS; PROCESS (clk) BEGIN IF (rising_edge(clk)) THEN IF (reset = '1') THEN state <= s_idle; ELSE state <= next_state;--next state to current state END IF; END IF; END PROCESS;
源代码
点击下方的公众号卡片获取