Zadnje 2 nedelje sam bio bolestan pa sam ih propustio. Uglavnom u ovom zadatku se trebala realizovati stoperica koja broji taktove i pravi sekunde i pali led diode.
Znam ja kako to funkcionise ali ne razumem kod. Pa ako moze neko da mi objasni sta se tu desava.
Code:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity stopwatch is
Port ( iCLK : in STD_LOGIC;
inRESET : in STD_LOGIC;
inSTOP : in STD_LOGIC;
inSTART : in STD_LOGIC;
inCONTINUE : in STD_LOGIC;
oLED : out STD_LOGIC_VECTOR (7 downto 0));
end stopwatch;
architecture stopwatch_arch of stopwatch is
constant cCLKMAX: std_logic_vector:="0000000000000000000000011"; -- broj otkucaja klok signala za vreme 1 sec
signal sENABLE: std_logic:='0'; -- signal za klok
signal sCNT: std_logic_vector (24 downto 0):="0000000000000000000000000"; -- broja? otkucaja kloka
signal sENSEC: std_logic:='0'; -- signal za broja? sekundi
signal sLED: std_logic_vector (7 downto 0):="00000000"; -- izlazni signal
signal sON: std_logic:='0'; -- indikator stanja ?toperice
begin
process (iCLK) begin
if (iCLK'event and iCLK='1') then
if (inRESET='0') then sON<='0'; sENABLE<='0';
elsif (inSTART='0') then sENABLE<='1'; sON<='1';
elsif (inSTOP='0') then sENABLE<='0';
elsif (inCONTINUE='0' and sON='1') then sENABLE<='1';
else
end if;
end if;
end process;
process(iCLK) begin
if(iCLK'event and iCLK='1') then
if(inRESET='0' or inSTART='0') then
sCNT<="0000000000000000000000000";
elsif(sENABLE='1') then
if(sCNT=cCLKMAX) then
sENSEC<='1';
sCNT<="0000000000000000000000000";
else
sCNT<=sCNT+1;
sENSEC<='0';
end if;
else sENSEC<='0';
end if;
end if;
end process;
process(iCLK) begin
if(iCLK'event and iCLK='1') then
if(inRESET='0' or inSTART='0') then
sLED<="00000000";
oLED<=sLED;
elsif (sENSEC='1') then
sLED<=sLED+1;
oLED<=sLED;
else
oLED<=sLED;
end if;
end if;
end process;
end stopwatch_arch;
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity stopwatch is
Port ( iCLK : in STD_LOGIC;
inRESET : in STD_LOGIC;
inSTOP : in STD_LOGIC;
inSTART : in STD_LOGIC;
inCONTINUE : in STD_LOGIC;
oLED : out STD_LOGIC_VECTOR (7 downto 0));
end stopwatch;
architecture stopwatch_arch of stopwatch is
constant cCLKMAX: std_logic_vector:="0000000000000000000000011"; -- broj otkucaja klok signala za vreme 1 sec
signal sENABLE: std_logic:='0'; -- signal za klok
signal sCNT: std_logic_vector (24 downto 0):="0000000000000000000000000"; -- broja? otkucaja kloka
signal sENSEC: std_logic:='0'; -- signal za broja? sekundi
signal sLED: std_logic_vector (7 downto 0):="00000000"; -- izlazni signal
signal sON: std_logic:='0'; -- indikator stanja ?toperice
begin
process (iCLK) begin
if (iCLK'event and iCLK='1') then
if (inRESET='0') then sON<='0'; sENABLE<='0';
elsif (inSTART='0') then sENABLE<='1'; sON<='1';
elsif (inSTOP='0') then sENABLE<='0';
elsif (inCONTINUE='0' and sON='1') then sENABLE<='1';
else
end if;
end if;
end process;
process(iCLK) begin
if(iCLK'event and iCLK='1') then
if(inRESET='0' or inSTART='0') then
sCNT<="0000000000000000000000000";
elsif(sENABLE='1') then
if(sCNT=cCLKMAX) then
sENSEC<='1';
sCNT<="0000000000000000000000000";
else
sCNT<=sCNT+1;
sENSEC<='0';
end if;
else sENSEC<='0';
end if;
end if;
end process;
process(iCLK) begin
if(iCLK'event and iCLK='1') then
if(inRESET='0' or inSTART='0') then
sLED<="00000000";
oLED<=sLED;
elsif (sENSEC='1') then
sLED<=sLED+1;
oLED<=sLED;
else
oLED<=sLED;
end if;
end if;
end process;
end stopwatch_arch;
Eureka!
MILAN DJUKIC
D J U K A
MILAN DJUKIC
D J U K A