Advertisement
Guest User

Untitled

a guest
May 27th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.48 KB | None | 0 0
  1. library ieee;
  2. use ieee.std_logic_1164.all;
  3.  
  4.  
  5. entity automat is
  6.  
  7.  
  8. port
  9. (
  10. -- Input ports
  11. clk,reset,n_5,n_10,n_20 : in std_logic;
  12.  
  13.  
  14. -- Output ports
  15. voda_out,n5_out,n10_out : out std_logic
  16.  
  17. );
  18. end automat;
  19.  
  20. architecture automat_behav of automat is
  21. type state_type is (racunaj,izbaci);
  22. signal state_reg,next_state: state_type;
  23. constant cena_vode: integer := 30;
  24. signal suma:integer range 0 to (cena_vode+15):=0;
  25. signal novcic: integer range 0 to 20;
  26. begin
  27.  
  28. state_transition: process (clk, reset)
  29. begin
  30. if(reset='1') then
  31. state_reg<=racunaj;
  32.  
  33. elsif (rising_edge(clk)) then
  34. state_reg<=next_state;
  35. end if;
  36.  
  37. end process state_transition;
  38.  
  39.  
  40. next_state_logic: process (suma,state_reg)
  41. begin
  42. case(state_reg) is
  43. when racunaj =>
  44. if(suma>=cena_vode) then
  45. next_state<= izbaci;
  46. else
  47. next_state<=racunaj;
  48.  
  49. end if;
  50. when izbaci=>
  51. next_state<= racunaj;
  52. end case;
  53.  
  54.  
  55. end process next_state_logic;
  56.  
  57. novcic<= 5 when n_5='1' else
  58. 10 when n_10='1' else
  59. 20 when n_20='1' else
  60. 0;
  61.  
  62. generisanje_sume:process (clk,reset) -- da li treba state_reg ? razlicito je sekv, komb proces , sekv=> samo kad se menja takt i reset tada se menja izlaz, nije bitno dal se promenio state_reg ako nije rising_edge clk, za komb je bitno jer se izlaz menja (evaluira=proverava dal treba da se promeni) kad god se bilo koji ulaz promeni
  63. begin -- sve sto je sa desne strane <= i sve sto je u if i u case je u sensitiviti listu za kombinacione
  64.  
  65. if(reset='1') then
  66. suma<=0;
  67.  
  68. elsif (rising_edge(clk)) then
  69.  
  70.  
  71. case(state_reg) is --jednak prioritet svakom stanju , a if ne daje
  72. when racunaj =>
  73. suma<=suma+novcic;
  74.  
  75. when izbaci=>
  76. suma<=0;
  77. end case;
  78.  
  79.  
  80. end if;
  81.  
  82. end process generisanje_sume;
  83.  
  84.  
  85.  
  86. output_logic:process(state_reg, suma) --komb
  87. variable kusur: integer range 0 to 15:=0; --da bi upakovalo u promenljivu, ali moze i sve u case
  88. begin
  89. case(state_reg) is
  90. when racunaj =>
  91. voda_out<='0';
  92. n5_out<='0';
  93. n10_out<='0';
  94.  
  95. when izbaci=>
  96. voda_out<='1';
  97. kusur:=suma-cena_vode;
  98. case(kusur) is
  99. when 15=>
  100. n5_out<='1';
  101. n10_out<='1';
  102. when 10=>
  103. n5_out<='0';
  104. n10_out<='1';
  105. when 5=>
  106. n5_out<='1';
  107. n10_out<='0';
  108. when others=>
  109. n5_out<='0';
  110. n10_out<='0';
  111. end case;
  112.  
  113. end case;
  114.  
  115.  
  116. end process output_logic;
  117.  
  118.  
  119. end automat_behav;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement