Advertisement
Guest User

Untitled

a guest
Jan 21st, 2020
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.48 KB | None | 0 0
  1. -- Autor: Bartłomiej Popiołek
  2. -- Nr indeksu: 243195
  3. -- Układ: Bankomat
  4. -----------------------------
  5. library IEEE;
  6. use IEEE.STD_LOGIC_1164.ALL;
  7. use IEEE.STD_LOGIC_UNSIGNED.ALL;
  8.  
  9. entity bankomat is
  10. port(
  11. clk, reset, karta, pot : in std_logic; -- wejście zegarowe, reset, karata bankomatowa, potwierdzenie
  12. kod, kwota : in std_logic_vector(3 downto 0); -- wejścia z pliku
  13. wyplacona_kwota : out std_logic_vector(3 downto 0)); -- wyjście z kwota wyplacona
  14. end bankomat;
  15.  
  16. architecture bankomat_arch of bankomat is
  17.  
  18. type STANY is (stan_uspienia, PIN, blokada, wybor_kwoty, wyplata, wydruk_potwierdzenia, plik); -- poszczególne stany
  19. signal stan, stan_nast : STANY; -- sygnał stanów
  20. signal srodki : std_logic_vector (3 downto 0) := "1110"; -- sygnał mówiący nam ile mammy środków na koncie
  21. signal proba : std_logic_vector (1 downto 0) := "01";
  22. signal kod_pop : std_logic_vector (3 downto 0) := "0101";
  23.  
  24. begin
  25.  
  26. reg: process(clk, reset)
  27. begin
  28. if(reset = '1') then
  29. stan <= stan_uspienia;
  30. elsif (clk'event and clk = '1') then
  31. stan <= stan_nast;
  32. end if;
  33. end process reg;
  34.  
  35. work:process(stan, karta, kod, kod_pop, proba, kwota, srodki)
  36. begin
  37. stan_nast <= stan;
  38. case stan is
  39. when stan_uspienia =>
  40. if(karta = '1') then
  41. kod_pop <= "0101";
  42. srodki <= "1110";
  43. stan_nast <= PIN;
  44. end if;
  45. when PIN =>
  46. if (karta = '1') then
  47. if (proba = "01") then
  48. if (kod = kod_pop) then
  49. stan_nast <= wybor_kwoty;
  50. elsif (kod /= kod_pop) then
  51. stan_nast <= PIN;
  52. end if;
  53. elsif (proba = "10") then
  54. if (kod = kod_pop) then
  55. stan_nast <= wybor_kwoty;
  56. elsif (kod /= kod_pop) then
  57. stan_nast <= PIN;
  58. end if;
  59. elsif (proba = "11") then
  60. if (kod = kod_pop) then
  61. stan_nast <= wybor_kwoty;
  62. elsif (kod /= kod_pop) then
  63. stan_nast <= blokada;
  64. end if;
  65. end if;
  66. else
  67. stan_nast <= stan_uspienia;
  68. end if;
  69. when blokada =>
  70. if(karta = '1') then
  71. if (kod /= kod_pop) then
  72. srodki <= "0000";
  73. kod_pop <= "0000";
  74. stan_nast <= stan_uspienia;
  75. elsif (kod = kod_pop) then
  76. stan_nast <= wybor_kwoty;
  77. end if;
  78. else
  79. stan_nast <= stan_uspienia;
  80. end if;
  81. when wybor_kwoty =>
  82. if (karta = '1') then
  83. if (kwota = "0000") then
  84. stan_nast <= wybor_kwoty;
  85. elsif (kwota >= "0001") then
  86. stan_nast <= wyplata;
  87. end if;
  88. else
  89. stan_nast <= stan_uspienia;
  90. end if;
  91. when wyplata =>
  92. if(karta = '1') then
  93. if (srodki < kwota) then
  94. stan_nast <= wybor_kwoty;
  95. elsif (srodki >= kwota) then
  96. stan_nast <= wydruk_potwierdzenia;
  97. end if;
  98. else
  99. stan_nast <= stan_uspienia;
  100. end if;
  101. when wydruk_potwierdzenia =>
  102. if(karta = '1') then
  103. if (pot = '1') then
  104. stan_nast <= plik;
  105. else
  106. stan_nast <= stan_uspienia;
  107. end if;
  108. else
  109. stan_nast <= stan_uspienia;
  110. end if;
  111. when plik =>
  112. if (karta = '0') then
  113. stan_nast <= stan_uspienia;
  114. end if;
  115. end case;
  116. end process work;
  117.  
  118. licz_prob:process(reset, clk, kod)
  119. begin
  120. if (reset = '1') then
  121. proba <= "00";
  122. elsif (clk'event and clk = '1') then
  123. if (stan = PIN and kod /= kod_pop) then
  124. proba <= proba + "01";
  125. if proba = "11" then
  126. proba <= "01";
  127. end if;
  128. elsif (kod = kod_pop) then
  129. proba <= proba;
  130. end if;
  131. end if;
  132. end process licz_prob;
  133.  
  134. wyplacona_kwota <= kwota when stan = wydruk_potwierdzenia else "0000";
  135. end bankomat_arch;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement