|
LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.std_logic_arith.ALL;
USE IEEE.std_logic_signed.ALL;
ENTITY refund IS
PORT (clk : IN std_logic;
rst : IN std_logic;
cancel : IN std_logic;
ok : IN std_logic;
clear : INOUT std_logic;
sum : IN integer RANGE 0 TO 20;
sum_10 : IN integer RANGE -10 TO 15;
sum_50 : IN integer RANGE -10 TO 15;
sum_100 : IN integer RANGE -10 TO 15;
Rsum_10 : IN integer RANGE 0 TO 15;
Rsum_50 : IN integer RANGE 0 TO 15;
Rsum_100 : IN integer RANGE 0 TO 15;
en_deliver : OUT std_logic;
RC10 : OUT std_logic;
RC50 : OUT std_logic;
RC100 : OUT std_logic);
END refund;
ARCHITECTURE Behavioral OF refund IS
CONSTANT value : integer :=13;
SIGNAL sum2,i,m,n : integer RANGE 20 DOWNTO 0;
SIGNAL cash_out_flag : std_logic;
BEGIN
PROCESS(rst,clk,cancel,ok)
BEGIN
IF (rst='1') THEN
RC10 <= '0';
RC50 <= '0';
RC100 <= '0';
en_deliver <= '0';
i <= 0;
m <= 0;
n <= 0;
clear <= '0';
sum2 <= 0;
cash_out_flag <= '0';
ELSE
IF (cancel='1') THEN
i <= sum_10;
m <= sum_50;
n <= sum_100;
END IF;
IF (ok='1') THEN
cash_out_flag<='1';
i <= Rsum_10;
m <= Rsum_50;
n <= Rsum_100;
END IF;
IF (rising_edge(clk)) THEN
sum2 <= sum;
IF ((sum = value AND cash_out_flag ='1') OR(sum =0 AND sum2 /= 0)) THEN
clear <= '1';
cash_out_flag<='0';
ELSE
clear <= '0';
END IF;
IF (i > 0) THEN
i <= i-1;
RC10 <= '1';
ELSE
RC10 <= '0';
END IF;
IF (m > 0) THEN
m <= m-1;
RC50 <= '1';
ELSE
RC50<='0';
END IF;
IF (n > 0) THEN
n<=n-1;
RC100<='1';
ELSE
RC100<='0';
END IF;
IF (ok='1' AND sum >= value) THEN
en_deliver<='1';
ELSE
en_deliver<='0';
END IF;
END IF;
END IF;
END PROCESS;
END Behavioral; |
|