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

📄 seller.vhd

📁 VHDL编写的地铁售票系统
💻 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 + -