📄 seller.vhd
字号:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_SIGNED.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SELLER IS
PORT ( TICKET_2YUAN,TICKET_4YUAN: IN STD_LOGIC;
TICKET_1,TICKET_2,TICKET_3: IN STD_LOGIC;
COIN_05,COIN_1,PAPER_1,PAPER_2,PAPER_5,PAPER_10: IN STD_LOGIC;
TICKET_OUT: OUT STD_LOGIC;
CHANGE: OUT INTEGER RANGE 0 TO 200;
ANNOUNCEMENT: OUT STD_LOGIC;
MONEY_C:BUFFER INTEGER RANGE 0 TO 200;
MONEY_TO_C:BUFFER INTEGER RANGE 0 TO 200;
RETURNTO:IN STD_LOGIC;
CLK: IN STD_LOGIC);
END SELLER;
ARCHITECTURE BEHAVE OF SELLER IS
SIGNAL MONEY_TO_CHARGE : INTEGER RANGE 0 TO 200;
SIGNAL MONEY_INPUT : INTEGER RANGE 0 TO 200;
SIGNAL MONEY_CHARGED: INTEGER RANGE 0 TO 200;
SIGNAL EXCHANGE: INTEGER RANGE -200 TO 200;
SIGNAL Y,Z:INTEGER :=0;
SIGNAL TICKET_O:STD_LOGIC;
signal BACKTO: std_logic;
SIGNAL HOLD:INTEGER RANGE 0 TO 200;
BEGIN
MONEY_TO_C<=MONEY_TO_CHARGE;
MONEY_C<=MONEY_CHARGED;
CHANGE<=EXCHANGE;
HOLD<=MONEY_TO_CHARGE;
TICKET_OUT<=TICKET_O;
BACKTO<=RETURNTO;
SELECT_TICKET:PROCESS( CLK,TICKET_O )
VARIABLE X: INTEGER RANGE 0 TO 200;
BEGIN
IF (CLK'EVENT AND CLK='1') THEN
IF (TICKET_2YUAN='1') THEN
IF (TICKET_1='1') THEN X:= 20;
ELSIF (TICKET_2='1') THEN X:= 40;
ELSIF (TICKET_3='1') THEN X:= 60;
END IF;
ELSIF (TICKET_4YUAN='1') THEN
IF (TICKET_1='1') THEN X:= 40;
ELSIF (TICKET_2='1') THEN X:= 80;
ELSIF (TICKET_3='1') THEN X:= 120;
END IF;
ELSE NULL;
END IF;
--MONEY_TO_CHARGE <= X;
END IF;
MONEY_TO_CHARGE<=X;
IF(TICKET_O='1')THEN
MONEY_TO_CHARGE<=0 AFTER 100 NS;
ELSIF(TICKET_O='0' AND MONEY_CHARGED=0) THEN MONEY_TO_CHARGE<=0 AFTER 100 NS;
END IF;
END PROCESS SELECT_TICKET;
CALCUL_MONEY:PROCESS( CLK )
--VARIABLE X :INTEGER RANGE 0 TO 200;
BEGIN
IF (CLK'EVENT AND CLK='1') THEN
IF COIN_05='1' THEN Y<= Y+5 ;
ELSIF COIN_1='1' OR PAPER_1='1' THEN Y<= Y+10;
ELSIF PAPER_2='1' THEN Y<= Y+20;
ELSIF PAPER_5='1' THEN Y<= Y+50;
ELSIF PAPER_10='1' THEN Y<= Y+100;
ELSE Y<=0 AFTER 100 NS;
END IF;
END IF;
MONEY_CHARGED<=Y;
END PROCESS CALCUL_MONEY;
GIVE_TICKET:PROCESS( CLK ,RETURNTO)
VARIABLE X:INTEGER RANGE 0 TO 200;
BEGIN
IF (CLK'EVENT AND CLK='1') THEN
IF HOLD < MONEY_CHARGED THEN TICKET_O<='1'; EXCHANGE<=MONEY_CHARGED-HOLD;
ELSIF (HOLD = MONEY_CHARGED AND MONEY_CHARGED>0) THEN TICKET_O<='1';EXCHANGE<=0;
ELSIF HOLD > MONEY_CHARGED THEN
IF(RETURNTO='1') THEN EXCHANGE<=MONEY_CHARGED;
ELSE ANNOUNCEMENT<='1';EXCHANGE<=0;
END IF;
ELSIF MONEY_CHARGED=0 THEN ANNOUNCEMENT<='0';EXCHANGE<=0; TICKET_O<='0' AFTER 100 NS;
--ELSIF HOLD>MONEY_CHARGED AND RETURNTO='1' THEN EXCHANGE<=HOLD;
END IF;
END IF;
END PROCESS GIVE_TICKET;
END BEHAVE;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -