Advertisement
Guest User

Untitled

a guest
Jan 18th, 2020
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.29 KB | None | 0 0
  1. library IEEE;
  2. library wyswietlacz;
  3. use IEEE.STD_LOGIC_1164.ALL;
  4. use IEEE.STD_LOGIC_ARITH.ALL;
  5. use IEEE.STD_LOGIC_UNSIGNED.ALL;
  6.  
  7. entity automat is
  8. port (CLK : in std_logic;
  9. reset : in std_logic;
  10. wybor : in STD_LOGIC_VECTOR(7 downto 0);
  11. Moneta_In_1 : in std_logic;
  12. Moneta_In_2 : in std_logic;
  13. Moneta_In_5 : in std_logic;
  14. wplacono_kwote : in std_logic;
  15. kawa_espresso,kawa_biala,kawa_americano,kawa_latte,herbata,herbata_z_cytryna,barszcz_czerwony,wrzatek : out std_logic;
  16. error : out std_logic;
  17. wyswietlacz_1,wyswietlacz_2,wyswietlacz_3,wyswietlacz_4 :out std_logic_vector (0 to 6)
  18. );
  19.  
  20. end entity;
  21.  
  22. architecture behavior of automat is
  23.  
  24. ----------------------------------------------------------------------------------------------------------------------
  25.  
  26. type stany is (
  27. stan_poczatkowy,
  28. wrzuc_monete,
  29. wybierz_napoj,
  30. wybrano_kawa_espresso,
  31. wybrano_kawa_biala,
  32. wybrano_kawa_americano,
  33. wybrano_kawa_latte,
  34. wybrano_herbata,
  35. wybrano_herbata_z_cytryna,
  36. wybrano_barszcz_czerwony,
  37. wybrano_wrzatek,
  38. kawa_espresso_out,
  39. kawa_biala_out,
  40. kawa_americano_out,
  41. kawa_latte_out,
  42. herbata_out,
  43. herbata_z_cytryna_out,
  44. barszcz_czerwony_out,
  45. wrzatek_out
  46. );
  47.  
  48. signal stan_obecny,stan_nastepny: stany;
  49. signal cena_kawa_espresso,cena_kawa_biala,cena_kawa_americano,cena_kawa_latte,cena_herbata,cena_herbata_z_cytryna,cena_barszcz_czerwony,cena_wrzatek : std_logic_vector(3 downto 0);
  50. signal ilosc_kawa_espresso,ilosc_kawa_biala,ilosc_kawa_americano,ilosc_kawa_latte,ilosc_herbata,ilosc_herbata_z_cytryna,ilosc_barszcz_czerwony,ilosc_wrzatek : std_logic_vector(3 downto 0);
  51. signal reszta_sig : std_logic_vector(0 to 3);
  52. signal wplacono : STD_LOGIC_VECTOR(0 to 3);
  53. signal wyswietl_liczbe_napojow : std_logic_vector(0 to 3);
  54. signal wyswietl_numer_napoju : std_logic_vector(0 to 3);
  55. signal wyswietl_cene_napoju : std_logic_vector(0 to 3);
  56. signal auto: natural range 0 to 99999999 := 0;
  57. ----------------------------------------------------------------------------------------------------------------------
  58.  
  59. component wyswietlacz
  60. port(wejscie : in std_logic_vector (0 to 3);
  61. wyjscie :out std_logic_vector (0 to 6));
  62. end component;
  63.  
  64. ----------------------------------------------------------------------------------------------------------------------
  65.  
  66. begin
  67.  
  68. --process(CLK,reset) -- jesli nie dziala cos to tu jest wersja na push buton i PIN_CLK zmiencie na PIN_F6 to jest pushbutton 3
  69. --begin
  70. -- if(reset = '0') then
  71. -- stan_obecny <= stan_poczatkowy;
  72. -- elsif(clk'event and clk = '1') then
  73. -- stan_obecny <= stan_nastepny;
  74. -- end if;
  75. --end process;
  76.  
  77. automatyka: process(reset,clk) is -- PIN_F6 , reset to slider 9
  78. begin
  79.  
  80. if(reset = '0') then
  81. stan_obecny <= stan_poczatkowy;
  82. auto <= 00000000;
  83.  
  84. elsif (rising_edge(clk)) then
  85. auto <= auto + 1;
  86. if(auto = 50000000) then
  87.  
  88.  
  89. auto <= 00000000;
  90. end if;
  91.  
  92. end if;
  93. end process automatyka;
  94.  
  95. ----------------------------------------------------------------------------------------------------------------------
  96.  
  97. process(stan_obecny,Moneta_In_1,Moneta_In_2,Moneta_In_5)
  98. begin
  99. case stan_obecny is
  100. when stan_poczatkowy =>
  101. kawa_espresso <= '0';
  102. kawa_biala <= '0';
  103. kawa_americano <= '0';
  104. kawa_latte <= '0';
  105. herbata <= '0';
  106. herbata_z_cytryna <= '0';
  107. barszcz_czerwony <= '0';
  108. wrzatek <= '0';
  109. error <= '0';
  110.  
  111. cena_kawa_espresso <= "0010";
  112. cena_kawa_biala <= "0010";
  113. cena_kawa_americano <= "0010";
  114. cena_kawa_latte <= "0010";
  115. cena_herbata <= "0010";
  116. cena_herbata_z_cytryna <= "0010";
  117. cena_barszcz_czerwony <= "0010";
  118. cena_wrzatek <= "0010";
  119.  
  120. ilosc_kawa_espresso <= "0010";
  121. ilosc_kawa_biala <= "0010";
  122. ilosc_kawa_americano <= "0010";
  123. ilosc_kawa_latte <= "0010";
  124. ilosc_herbata <= "0010";
  125. ilosc_herbata_z_cytryna <= "0010";
  126. ilosc_barszcz_czerwony <= "0010";
  127. ilosc_wrzatek <= "0010";
  128.  
  129. stan_nastepny <= wrzuc_monete;
  130.  
  131. ----------------------------------------------------------- -----------------------------------------------------------
  132.  
  133. when wrzuc_monete => -- wrzuc monete --> push butony 0 - 2 , wplacono kwote slider 8
  134. wplacono <= "0000";
  135. wyswietl_liczbe_napojow<="0000";
  136. wyswietl_numer_napoju<="0000";
  137. wyswietl_cene_napoju<="0000";
  138. reszta_sig <= "0000";
  139. if(Moneta_In_1 = '1')then
  140. wplacono <= (wplacono + "0001" );
  141. stan_nastepny <= wrzuc_monete;
  142. elsif(Moneta_In_2 = '1')then --wrzuc 1$
  143. wplacono <= (wplacono + "0010" );
  144. stan_nastepny <= wrzuc_monete;
  145. elsif(Moneta_In_5 = '1')then --wrzuc 2$
  146. wplacono <= (wplacono + "0101" );
  147. stan_nastepny <= wrzuc_monete;
  148. elsif(wplacono_kwote = '1')then --wrzuc 5$
  149. stan_nastepny <= wybierz_napoj;
  150. end if;
  151.  
  152. ------------------------------------------------------------ -----------------------------------------------------------
  153.  
  154. when wybierz_napoj => --wybierz napoj
  155. if (wybor = "0000001" ) then -- kawa_espresso
  156. wyswietl_numer_napoju<="0001";
  157. wyswietl_cene_napoju<=cena_kawa_espresso;
  158. kawa_espresso <= '1';
  159. kawa_biala <= '0';
  160. kawa_americano <= '0';
  161. kawa_latte <= '0';
  162. herbata <= '0';
  163. herbata_z_cytryna <= '0';
  164. barszcz_czerwony <= '0';
  165. wrzatek <= '0';
  166. wyswietl_liczbe_napojow<=ilosc_kawa_espresso;
  167. stan_nastepny <= wybrano_kawa_espresso;
  168.  
  169. elsif (wybor = "0000010") then -- stan początkowy to kawa_biala
  170. wyswietl_numer_napoju<="0010";
  171. wyswietl_cene_napoju<=cena_kawa_biala;
  172. kawa_espresso <= '0';
  173. kawa_biala <= '1';
  174. kawa_americano <= '0';
  175. kawa_latte <= '0';
  176. herbata <= '0';
  177. herbata_z_cytryna <= '0';
  178. barszcz_czerwony <= '0';
  179. wrzatek <= '0';
  180. wyswietl_liczbe_napojow<=ilosc_kawa_biala;
  181. stan_nastepny <= wybrano_kawa_biala;
  182.  
  183. elsif (wybor = "000100") then -- kawa_americano
  184. wyswietl_numer_napoju<="0011";
  185. wyswietl_cene_napoju<=cena_kawa_americano;
  186. kawa_espresso <= '0';
  187. kawa_biala <= '0';
  188. kawa_americano <= '1';
  189. kawa_latte <= '0';
  190. herbata <= '0';
  191. herbata_z_cytryna <= '0';
  192. barszcz_czerwony <= '0';
  193. wrzatek <= '0';
  194. wyswietl_liczbe_napojow<=ilosc_kawa_americano;
  195. stan_nastepny <= wybrano_kawa_americano;
  196.  
  197. elsif (wybor = "0001000") then -- kawa_latte
  198. wyswietl_numer_napoju<="0100";
  199. wyswietl_cene_napoju<=cena_kawa_latte;
  200. kawa_espresso <= '0';
  201. kawa_biala <= '0';
  202. kawa_americano <= '0';
  203. kawa_latte <= '1';
  204. herbata <= '0';
  205. herbata_z_cytryna <= '0';
  206. barszcz_czerwony <= '0';
  207. wrzatek <= '0';
  208. wyswietl_liczbe_napojow<=ilosc_kawa_latte;
  209. stan_nastepny <= wybrano_kawa_latte;
  210.  
  211. elsif (wybor = "0010000") then -- herbata
  212. wyswietl_numer_napoju<="0101";
  213. wyswietl_cene_napoju<=cena_herbata;
  214. kawa_espresso <= '0';
  215. kawa_biala <= '0';
  216. kawa_americano <= '0';
  217. kawa_latte <= '0';
  218. herbata <= '1';
  219. herbata_z_cytryna <= '0';
  220. barszcz_czerwony <= '0';
  221. wrzatek <= '0';
  222. wyswietl_liczbe_napojow<=ilosc_herbata;
  223. stan_nastepny <= wybrano_herbata;
  224.  
  225. elsif (wybor = "0100000") then -- herbata_z_cytryna
  226. wyswietl_numer_napoju<="0111";
  227. wyswietl_cene_napoju<=cena_herbata_z_cytryna;
  228. kawa_espresso <= '0';
  229. kawa_biala <= '0';
  230. kawa_americano <= '0';
  231. kawa_latte <= '0';
  232. herbata <= '0';
  233. herbata_z_cytryna <= '1';
  234. barszcz_czerwony <= '0';
  235. wrzatek <= '0';
  236. wyswietl_liczbe_napojow<=ilosc_herbata_z_cytryna;
  237. stan_nastepny <= wybrano_herbata_z_cytryna;
  238.  
  239. elsif (wybor = "1000000") then -- barszcz_czerwony
  240. wyswietl_numer_napoju<="1000";
  241. wyswietl_cene_napoju<=cena_barszcz_czerwony;
  242. kawa_espresso <= '0';
  243. kawa_biala <= '0';
  244. kawa_americano <= '0';
  245. kawa_latte <= '0';
  246. herbata <= '0';
  247. herbata_z_cytryna <= '0';
  248. barszcz_czerwony <= '1';
  249. wrzatek <= '0';
  250. wyswietl_liczbe_napojow<=ilosc_barszcz_czerwony;
  251. stan_nastepny <= wybrano_barszcz_czerwony;
  252.  
  253. elsif (wybor = "10000000") then -- wrzatek
  254. wyswietl_numer_napoju<="1001";
  255. wyswietl_cene_napoju<=cena_wrzatek;
  256. kawa_espresso <= '0';
  257. kawa_biala <= '0';
  258. kawa_americano <= '0';
  259. kawa_latte <= '0';
  260. herbata <= '0';
  261. herbata_z_cytryna <= '0';
  262. barszcz_czerwony <= '0';
  263. wrzatek <= '1';
  264. wyswietl_liczbe_napojow<=ilosc_wrzatek;
  265. stan_nastepny <= wybrano_wrzatek;
  266. end if;
  267.  
  268. ------------------------------------------------------------ -----------------------------------------------------------
  269.  
  270. when wybrano_kawa_espresso =>
  271. if (cena_kawa_espresso - wplacono = "0000") then
  272. reszta_sig <= "0000";
  273. stan_nastepny <= kawa_espresso_out;
  274. elsif ((cena_kawa_espresso - wplacono) > "0000") then
  275. reszta_sig <= (cena_kawa_espresso - wplacono);
  276. stan_nastepny <= kawa_espresso_out;
  277. elsif ((cena_kawa_espresso - wplacono) < "0000") then
  278. error <= '1';
  279. stan_nastepny <= wrzuc_monete;
  280. end if;
  281.  
  282. when wybrano_kawa_biala =>
  283. if (cena_kawa_biala - wplacono = "0000") then
  284. reszta_sig <= "0000";
  285. stan_nastepny <= kawa_biala_out;
  286. elsif ((cena_kawa_biala - wplacono) > "0000") then
  287. reszta_sig <= (cena_kawa_biala - wplacono);
  288. stan_nastepny <= kawa_biala_out;
  289. elsif ((cena_kawa_biala - wplacono) < "0000") then
  290. error <= '1';
  291. stan_nastepny <= wrzuc_monete;
  292. end if;
  293.  
  294. when wybrano_kawa_americano =>
  295. if (cena_kawa_americano - wplacono = "0000") then
  296. reszta_sig <= "0000";
  297. stan_nastepny <= kawa_americano_out;
  298. elsif ((cena_kawa_americano - wplacono) > "0000") then
  299. reszta_sig <= (cena_kawa_americano - wplacono);
  300. stan_nastepny <= kawa_americano_out;
  301. elsif ((cena_kawa_americano - wplacono) < "0000") then
  302. error <= '1';
  303. stan_nastepny <= wrzuc_monete;
  304. end if;
  305.  
  306. when wybrano_kawa_latte =>
  307. if (cena_kawa_latte - wplacono = "0000") then
  308. reszta_sig <= "0000";
  309. stan_nastepny <= kawa_latte_out;
  310. elsif ((cena_kawa_latte - wplacono) > "0000") then
  311. reszta_sig <= (cena_kawa_latte - wplacono);
  312. stan_nastepny <= kawa_latte_out;
  313. elsif ((cena_kawa_latte - wplacono) < "0000") then
  314. error <= '1';
  315. stan_nastepny <= wrzuc_monete;
  316. end if;
  317.  
  318. when wybrano_herbata =>
  319. if (cena_herbata - wplacono = "0000") then
  320. reszta_sig <= "0000";
  321. stan_nastepny <= herbata_out;
  322. elsif ((cena_herbata - wplacono) > "0000") then
  323. reszta_sig <= (cena_herbata - wplacono);
  324. stan_nastepny <= herbata_out;
  325. elsif ((cena_kawa_espresso - wplacono) < "0000") then
  326. error <= '1';
  327. stan_nastepny <= wrzuc_monete;
  328. end if;
  329.  
  330. when wybrano_herbata_z_cytryna =>
  331. if (cena_herbata_z_cytryna - wplacono = "0000") then
  332. reszta_sig <= "0000";
  333. stan_nastepny <= herbata_z_cytryna_out;
  334. elsif ((cena_herbata_z_cytryna - wplacono) > "0000") then
  335. reszta_sig <= (cena_herbata_z_cytryna - wplacono);
  336. stan_nastepny <= herbata_z_cytryna_out;
  337. elsif ((cena_herbata_z_cytryna - wplacono) < "0000") then
  338. error <= '1';
  339. stan_nastepny <= wrzuc_monete;
  340. end if;
  341.  
  342. when wybrano_barszcz_czerwony =>
  343. if (cena_barszcz_czerwony - wplacono = "0000") then
  344. reszta_sig <= "0000";
  345. stan_nastepny <= barszcz_czerwony_out;
  346. elsif ((cena_barszcz_czerwony - wplacono) > "0000") then
  347. reszta_sig <= (cena_barszcz_czerwony - wplacono);
  348. stan_nastepny <= barszcz_czerwony_out;
  349. elsif ((cena_wrzatek - wplacono) < "0000") then
  350. error <= '1';
  351. stan_nastepny <= wrzuc_monete;
  352. end if;
  353.  
  354. when wybrano_wrzatek =>
  355. if (cena_wrzatek - wplacono = "0000") then
  356. reszta_sig <= "0000";
  357. stan_nastepny <= wrzatek_out;
  358. elsif ((cena_wrzatek - wplacono) > "0000") then
  359. reszta_sig <= (cena_wrzatek - wplacono);
  360. stan_nastepny <= wrzatek_out;
  361. elsif ((cena_wrzatek - wplacono) < "0000") then
  362. error <= '1';
  363. stan_nastepny <= wrzuc_monete;
  364. end if;
  365.  
  366. ----------------------------------------------------------- -----------------------------------------------------------
  367.  
  368. when kawa_espresso_out =>
  369. kawa_espresso <= '0';
  370. ilosc_kawa_espresso<=(ilosc_kawa_espresso - "0001");
  371. wyswietl_liczbe_napojow<=ilosc_kawa_espresso;
  372. stan_nastepny <= wrzuc_monete;
  373.  
  374. when kawa_biala_out =>
  375. kawa_biala <= '0';
  376. ilosc_kawa_biala<=(ilosc_kawa_biala - "0001");
  377. wyswietl_liczbe_napojow<=ilosc_kawa_biala;
  378. stan_nastepny <= wrzuc_monete;
  379.  
  380. when kawa_americano_out =>
  381. kawa_americano <= '0';
  382. ilosc_kawa_americano<=(ilosc_kawa_americano - "0001");
  383. wyswietl_liczbe_napojow<=ilosc_kawa_americano;
  384. stan_nastepny <= wrzuc_monete;
  385.  
  386. when kawa_latte_out =>
  387. kawa_latte <= '0';
  388. ilosc_kawa_latte <=(ilosc_kawa_latte - "0001");
  389. wyswietl_liczbe_napojow<=ilosc_kawa_latte;
  390. stan_nastepny <= wrzuc_monete;
  391.  
  392. when herbata_out =>
  393. herbata <= '0';
  394. ilosc_herbata <=(ilosc_herbata - "0001");
  395. wyswietl_liczbe_napojow<=ilosc_herbata;
  396. stan_nastepny <= wrzuc_monete;
  397.  
  398. when herbata_z_cytryna_out =>
  399. herbata_z_cytryna <= '0';
  400. ilosc_herbata_z_cytryna <=(ilosc_herbata_z_cytryna - "0001");
  401. wyswietl_liczbe_napojow<=ilosc_herbata_z_cytryna;
  402. stan_nastepny <= wrzuc_monete;
  403.  
  404. when barszcz_czerwony_out =>
  405. barszcz_czerwony <= '0';
  406. ilosc_barszcz_czerwony<=(ilosc_barszcz_czerwony - "0001");
  407. wyswietl_liczbe_napojow<=ilosc_barszcz_czerwony;
  408. stan_nastepny <= wrzuc_monete;
  409.  
  410. when wrzatek_out =>
  411. wrzatek <= '0';
  412. ilosc_wrzatek <=(ilosc_wrzatek - "0001");
  413. wyswietl_liczbe_napojow<=ilosc_wrzatek;
  414. stan_nastepny <= wrzuc_monete;
  415.  
  416. ----------------------------------------------------------------------------------------------------------------------
  417.  
  418. end case;
  419. end process;
  420.  
  421. ----------------------------------------------------------------------------------------------------------------------
  422.  
  423. GATE1: wyswietlacz port map (wejscie => wyswietl_numer_napoju , wyjscie =>wyswietlacz_1);
  424. GATE2: wyswietlacz port map (wejscie => wyswietl_cene_napoju , wyjscie =>wyswietlacz_2);
  425. GATE3: wyswietlacz port map (wejscie => reszta_sig , wyjscie =>wyswietlacz_3);
  426. GATE4: wyswietlacz port map (wejscie => wyswietl_liczbe_napojow , wyjscie =>wyswietlacz_4);
  427.  
  428. end behavior;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement