| 
 | 
 
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; |   
 
 
 
 |