SVEUČILIŠTE JOSIPA JURJA STROSSMAYERA U OSIJEKUELEKTROTEHNIČKI FAKULTET
Preddiplomski studij
BROJAČ STOTIKI
Konstrukcijske vježbeDigitalna elektronika
Matija Marić
Osijek, 2012/2013.
Sadržaj
1. Uvod......................................................................................................................................1
1.1. Zadatak konstrukcijskih vježbi......................................................................................................1
2. Shematski prikaz sklopa........................................................................................................2
2.1. Brojač stotinki..............................................................................................................................2
2.2. Djelitelj frekvencije......................................................................................................................4
2.3. Prikaz brojača na sedam segmentnim display - ima.....................................................................5
3. Zaključak............................................................................................................................... 8
4. Literatura.............................................................................................................................. 9
5. Prilozi...................................................................................................................................10
5.1.Prikz brojača na sedam segmentnim display - ima (cijeli kod)....................................................10
1. Uvod
Potrebno je projektirati brojač koji broji unazad od 100 do 0. Brzina brojanja treba se odvijati na 100 Hz.
Programski VHDL kod treba se sastojati od tri djela: djelitelj frekvencije, brojač, prikaz na display. Djeliteljem
frekvencije treba frekvenciju razvojnog sustava od 50 MHz smanjiti na 100 Hz, a prikaz se treba vršiti na sedam-
segmentnim display-ima koji se također nalaze na razvojnom sustavu. Kada se napiše programski kod, potrebno
ga je pretvoriti u shematski prikaz pomoću Create Schematic Symbol. Tako kreiran program treba se
implementirati na Spartan 2 ili Spartan 3 razvojni sustav.
1.1. Zadatak konstrukcijskih vježbi
"Projektirati digitalni sat koji broji samo stotinke na tri 7segmentna diplaya. Električnu shemu nacrtati u
programskom paketu Xilinx. Sat krece od 100, i broji do 0, nakon čega se vraća u stanje 100. Implementirati na
FPGA razvojni sustav."
1
2. Shematski prikaz sklopa
Slika 1 prikazuje električnu shemu sklopa Brojač stotinki. Shema se sastoji od jednog ulaza, sedam
izlaza i četiri priključnice tipa inout. Ulaz čini priključnica cp koja predstavlja signal takta i ona se spaja na
signal takta razvojnog sustava. DISPLAY_0, DISPLAY_1, DISPLAY_2 i DISPLAY_3 su tipa inout i oni se
spajaju na četiri sedam - segmentna display-a. Kako sam naziv govori, display-i se sastoje od sedam segmenata,
odnosno dioda koje će se spajati sa preostalih sedam izlaza na shemi (XLXN_33(0), XLXN_33(1), XLXN_33(2),
XLXN_33(3), XLXN_33(4), XLXN_33(5), XLXN_33(6)). Sve te priključnice spojene su na sklop brojac_sto koji
obavlja glavnu funkciju. Sastoji se od tri dijela koja su zadužena za brojanje stotinki i njihov prikaz na display-
ima. Prvi i najvažniji dio je Brojač stotinki. On broji brojeve od 99 do 0 i povezan je s druga dva dijela sklopa
brojac_sto, a to su Djelitelj frekvencije i Prikaz brojača na sedam - segmentnim display-ima. Djelitelj frekvencije
smanjuje frekvenciju razvojnog okruženja od 50 MHz na 100 Hz kako bi se brojevi koje broji Brojač stotinki
mogli brojiti brzinom koja i priliči za stotinke. Ulaz cp sa sheme spaja se upravo na taj dio glavnog sklopa.
Ostale priključnice su spojene na dio Prikaz brojača na sedam - segmentnim display-ima koji ima zadatak
uskladiti rad display-a i segmenata kako bi ispis brojeva bio pravilan.
U sljedećim poglavljima iznesen je i detaljno opisan VHDL kod svakog pojedinog dijela sklopa
brojac_sto.
2.1. Brojač stotinki
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
2
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity brojac_sto is
port(
cp: in std_logic; -- radni takt
AN0: inout std_logic; -- četvrti 7-seg display(stotinke)
AN1: inout std_logic; -- treći 7-seg display(desetinke)
AN2: inout std_logic; -- drugi 7-seg display
AN3: inout std_logic; -- prvi 7-seg display
led: out std_logic_vector(6 downto 0) -- diode na 7-seg display-u
);
end brojac_sto;
architecture Behavioral of brojac_sto is
signal dekadski:integer range 0 to 99 := 99; -- signal brojača i početna vrijednost
signal cp_o: std_logic; -- signal djelitelja frekvencije
begin
AN2<='1'; -- drugi display isključen
AN3<='1'; -- prvi display isključen
s1:entity work.djelitelj_frek100 port map(cp,cp_o); -- pozivanje djelitelja frekvencije
s2:entity work.dekadski_prikaz port map(cp,AN0,AN1,dekadski,led); -- pozivanje prikaza na display-ima
process(cp_o) -- početak procesa koji radi na taktu od 100 Hz
begin
if(cp_o'event and cp_o='1')then -- provjera rastućeg brida
dekadski<=dekadski-1; -- brojač prema dolje, smanjuje se za 1
if dekadski=0 then dekadski<=99; -- reset brojača na početnu vrijednost
end if;
end if;
end process;
end Behavioral;
Program obavlja funkciju brojača koji broji brojeve od 99 do 0. Kada dođe do 0, brojač se vraća na 99
te ponovno broji do 0. Sve se to obavlja brzinom od 100 Hz te šalje na ispis. Kako bi postigli ovakvu funkciju
programa u entity dijelu moramo deklarirati sljedeće: cp, AN0, AN1, AN2, AN3 i led. Iako ni jedan od ovih šest
elemenata nije nužan za izvedbu samog brojača, moraju se deklarirati jer se iz ovog programa pozivaju druga
dva programa (za dijeljenje frekvencije i za ispis) kojima se prosljeđuje upravo ovih šest elemenata.
U architecture dijelu potrebna su još dva signala. Signal dekadski je signal koji će direktno služiti za
brojač dok će signal cp_o biti povratni signal iz dijelitelja frekvencije. Nakon ključne riječi begin isključujemo
prvi i drugi (od četiri) display-a jer za naš brojač su potrebna samo dva pošto se radi o dvoznamenkastim
brojevima. Sljedeće dvije linije koda: s1:entity work.djelitelj_frek100 port map(cp,cp_o); i s2:entity
3
work.dekadski_prikaz port map(cp,AN0,AN1,dekadski,led); su linije kojima povezujemo brojač sa djeliteljem
frekvencije i ispisom brojača. Prva nam osigurava frekvenciju od 100 Hz kojom brojač treba brojati, a druga
ispis na sedam - segmentne display-e. Oba programa koja se pozivaju s ove dvije linije koda detaljno su opisana
u naredna dva poglavlja.
U process dijelu detaljno je opisan rad brojača. Lista osjetljivosti popunjena je signalom cp_o koji je
vraćen iz djelitelja frekvencije i osigurava izvođenje procesa brzinom od 100 Hz. Nakon ključne riječi begin, if
petljom provjerava se rastući brid signala kojim će početi odbrojavanje brojača. Kako bi brojač brojio unazad
potrebna je slijedeća linija koda: dekadski<=dekadski-1;. Signal dekadski je tipa integer i ima raspon od 0 do 99
te je postavljen na početnu vrijednost 99 pri deklariranju. Kada brojač dođe do kraja, odnosno kada dođe do 0,
mora se osigurati njegov povratak na početnu vrijednost i ponovno brojanje u nazad. To se osigurava sljedećom
if petljom: if dekadski=0 then dekadski<=99;. Cijeli process se ponavlja kod ga korisnik ne zaustavi.
2.2. Djelitelj frekvencije
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity djelitelj_frek100 is
port(
cp:in std_logic; -- radni takt
cp_o:buffer std_logic --novi radni takt
);
end djelitelj_frek100;
architecture Behavioral of djelitelj_frek100 is
begin
process(cp)
variable temp:integer range 0 to 250000; -- varijabla brojača
begin
if(cp'event and cp='1')then -- provjera rastućeg brida
temp:=temp+1; -- brojač prema gore, povećava se za 1
if(temp>=250000)then -- provjera brojača
cp_o<=not cp_o; -- postavljanje cp_o
temp:=0; -- postavljenje brojača na početnu vrijednost
end if;
end if;
end process;
end Behavioral;
4
Zadaća programa je podijeliti frekvenciju razvojnog sustava od 50 MHz na 100 Hz. To je potrebno kako
bi brojač iz Brojač stotinki mogao brojiti stotinke pripadajućom brzinom. Sve što je potrebno u entity dijelu
programa je jedan ulaz cp kojem će se dodijeliti radni takt razvojnog sustava i cp_o koji će poprimiti
odgovarajuću vrijednost podijeljene frekvencije.
U architecture dijelu programa postavljamo process kojem u listu osjetljivosti stavljamo cp. Prije
ključne riječi begin deklariramo varijablu temp koja je tipa integer i koja će služit kao brojač. Raspon varijable
temp ovisi o željenoj frekvenciji nakon podjele. Broj se dobije tako da se željena frekvencija pomnoži s dva, a
zatim 50 000 000 (50MHz) podijelimo s dobivenim brojem. U ovom slučaju gdje je željena frekvencija 100 Hz
to je broj 250 000. Nakon begin postavljamo if petlju koja osigurava rad procesa samo na rastući brid. Unutar te
petlje postavljamo brojač koji broji prema gore. Kada brojač dođe do maksimalne vrijednosti, postavlja se
sljedeća if petlja koja i omogućuje očekivano dijeljenje frekvencije: if(temp>=250000) then cp_o<=not cp_o; .
Unutar te iste petlje varijablu temp postavljamo na početno stanje i tako cijeli proces kreće ispočetka.
2.3. Prikaz brojača na sedam - segmentnim display-ima
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity dekadski_prikaz is
port(
cp: in std_logic; -- radni takt
AN0: inout std_logic; -- četvrti 7-seg display(stotinke)
AN1: inout std_logic; -- treći 7-seg display(desetinke)
dekadski: in integer range 0 to 99; -- stotinke
led: out std_logic_vector(0 to 6) -- diode na 7-seg display-u
);
end dekadski_prikaz;
architecture Behavioral of dekadski_prikaz is
signal CTR:std_logic_vector(12 downto 0); -- signal brojača
begin
process (cp)
begin
if (cp'event and cp = '1') then -- provjera rastućeg brida
if(CTR="0000000000000") then -- provjera stanja brojača
if (AN0='0') then -- provjera stanja četvrtog display-ja
AN0 <= '1'; -- isključi četvrti display
5
if dekadski=0 then led<="1000000"; -- postavljanje dioda na display-u
elsif dekadski=1 then led<="1000000";
elsif dekadski=2 then led<="1000000";
.
.
.
elsif dekadski=99 then led<="0010000";
end if;
AN1 <= '0'; -- uključi treći display
elsif (AN1='0') then -- provjera stanja trećeg display-a
AN1 <= '1'; -- isključi treći display
if dekadski=0 then led<="1000000" ; -- postavljanje dioda na display-u
elsif dekadski=1 then led<="1111001" ;
elsif dekadski=2 then led<="0100100" ;
.
.
.
elsif dekadski=99 then led<="0010000";
end if;
AN0 <= '0'; -- uključi četvrti display
end if;
end if;
CTR<=CTR+"0000000000001"; -- brojač prema gore, povećava se za 1
if(CTR>"1000000000000") then -- provjera stanja brojača
CTR<="0000000000000"; -- postavljanje brojača na početnu vrijednost
end if;
end if;
end process;
end Behavioral;
Prikazani kod je skraćeni kod, a potpuni se nalazi u poglavlju Prilozi jer sadrži puno linija koda. Zadaća
ovog programa je prikazivanje brojača na sedam-segmentnim display-ima. U entity dijelu programa najvažniju
ulogu ima ulaz dekadski koji prima brojeve od brojača i pomoću njega se određuje koji broj treba ispisati. Uz
dekadski tu je i izlaz led pomoću kojeg formiramo broja na display-u.
U architecture dijelu programa deklariran je vrlo važan signal CTR koji će nam poslužiti umjesto još
jednog dijelitelja frekvencije. Naime u listu osjetljivosti procesa unesen je radni takt razvojnog sustava cp koji
ima vrijednost 50 MHz. Ta frekvencija prevelika je za ispis brojeva na display-ima te ju treba smanjiti. Kako se
ne bi radio još jedan djelitelj frekvencije, koristi se brojač velikog raspona i ispis se vrši samo u vremenu kada je
brojač na nuli. U svim ostalim kombinacijama ne postoji ispis, a to se postiže sljedećom if petljom:
6
if(CTR="0000000000000") then... . Kada je brojač na nuli prvo se provjerava koji je display uključen. Pošto se
želi prikazati dva različita broja na dva display-a, prvo se mora jedan upaliti, prikazati broj, ugasiti isti, upaliti
drugi, prikazati broj, ugasiti isti. Ovo se mora raditi zbog ograničenja razvojnog sustava, a ovdje je to riješeno na
slijedeći način:
if (AN0='0') then AN0 <= '1'; -- ako je prvi display uključen, isključi ga
if dekadski=0 then led<="1000000"; -- pripremi broj za ispis
AN1 <= '0'; -- uključi drugi display i prikaži broj
elsif (AN1='0') then AN1 <= '1'; -- ili ako je drugi display uključen, isključi ga
if dekadski=0 then led<="1000000" ; --pripremi broj za ispis
AN0 <= '0'; -- uključi prvi display i ispiši broj
end if;
U ovom primjeru kao i u programskom kodu AN0 predstavlja četvrti display razvojnog sustava koji prikazuje
stotinke, AN1 treći display koji predstavlja desetinke, dekadski je broj koji je poslao glavni brojač iz Brojač
stotinki i led je izlaz koji se spaja na led diode sedam-segmentnog display-a. Diode su aktivne na logičku 0 te
samo u tom stanju svijetle. Ovaj program se izvodi u razvojnom okruženju koje zahtjeva Spartan 2 - Pegasus
stoga raspored bitova za svijetljenje led dioda je zrcalan u odnosu na Spartan 3. Na primjer za prikaz nule na
Spartan 2 koristi se sljedeći raspored bitova: "1000000"; dok je na Spartan 3: "0000001". Ovo se odnosi i na sve
ostale brojeve. Kada CTR brojač dosegne svoju maksimalnu vrijednost, potrebno ga je vratiti na nulu čime opet
omogućujemo ispis brojeva i nastavak brojanja prema gore (prestanak ispisa brojeva). Sve ovo se odvija na
rastući brid signala takta, a to je određeno prvom if petljom u procesu nakon ključne riječi begin: if (cp'event
and cp = '1') then... .
7
Zaključak
Zadatak zahtijeva dobro poznavanje programskog paketa Xilinx ISE 9.2i, VHDL koda i razvojnog sustava
Spartan. Potrebno je dobro proučiti dodatnu literaturu kako bi se razumio princip izvršavanja naredbi VHDL
koda uslijed mnogih ograničenja razvojnog sustava. Problematika zadatka rješiva je na više načina, a ovdje je
prikazan samo jedan način koji je možda i najlakši za shvatiti. Ovo se prvenstveno odnosi na ispis brojača
pomoću sedam-segmentnih display-a koji se mogao riješiti na puno kraći, ali kompleksniji način. Osim ispisa,
sve ostalo je napisano sa što manje linija koda koje su jednostavne i lako shvatljive. Uz određene dopune i
izmjene koda, vrlo lako se mogu, osim stotinki, prikazati i sekunde, minute, sati. Stoga gore napisani kod ima i
praktičnu primjenu.
8
3. Literatura
1. Željko Hocenski, Tomislav Matić, Goran Martinović: Priručnik za laboratorijske vježbe iz digitalne
elektronike
2. Tomislav Matić: Auditorne vježbe iz digitalne elektronike
3. Željko Hocenski: Predavanja iz digitalne elektronike
9
4. Prilozi
4.1. Prikaz brojača na sedam segmentnim display - ima (cijeli kod)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity dekadski_prikaz is
port(
cp: in std_logic; -- radni takt
AN0: inout std_logic; -- četvrti 7-seg display(stotinke)
AN1: inout std_logic; -- treći 7-seg display(desetinke)
dekadski: in integer range 0 to 99; -- stotinke
led: out std_logic_vector(0 to 6) -- diode na 7-seg display-u
);
end dekadski_prikaz;
architecture Behavioral of dekadski_prikaz is
signal CTR:std_logic_vector(12 downto 0); -- signal brojača
begin
process (cp)
begin
if (cp'event and cp = '1') then -- provjera rastućeg brida
if(CTR="0000000000000") then --provjera stanja brojača
if (AN0='0') then --provjera stanja četvrtog display-ja
AN0 <= '1'; -- isključi četvrti display
if dekadski=0 then led<="1000000"; -- postavljanje dioda na display-u
elsif dekadski=1 then led<="1000000";
elsif dekadski=2 then led<="1000000";
elsif dekadski=3 then led<="1000000";
elsif dekadski=4 then led<="1000000";
elsif dekadski=5 then led<="1000000";
elsif dekadski=6 then led<="1000000";
elsif dekadski=7 then led<="1000000" ;
elsif dekadski=8 then led<="1000000";
elsif dekadski=9 then led<="1000000";
10
elsif dekadski=10 then led<="1111001" ;
elsif dekadski=11 then led<="1111001" ;
elsif dekadski=12 then led<="1111001";
elsif dekadski=13 then led<="1111001" ;
elsif dekadski=14 then led<="1111001" ;
elsif dekadski=15 then led<="1111001" ;
elsif dekadski=16 then led<="1111001" ;
elsif dekadski=17 then led<="1111001" ;
elsif dekadski=18 then led<="1111001" ;
elsif dekadski=19 then led<="1111001" ;
elsif dekadski=20 then led<="0100100" ;
elsif dekadski=21 then led<="0100100" ;
elsif dekadski=22 then led<="0100100" ;
elsif dekadski=24 then led<="0100100" ;
elsif dekadski=25 then led<="0100100" ;
elsif dekadski=23 then led<="0100100" ;
elsif dekadski=26 then led<="0100100" ;
elsif dekadski=27 then led<="0100100" ;
elsif dekadski=28 then led<="0100100" ;
elsif dekadski=29 then led<="0100100" ;
elsif dekadski=30 then led<="0110000" ;
elsif dekadski=31 then led<="0110000" ;
elsif dekadski=32 then led<="0110000" ;
elsif dekadski=33 then led<="0110000" ;
elsif dekadski=34 then led<="0110000" ;
elsif dekadski=35 then led<="0110000" ;
elsif dekadski=36 then led<="0110000" ;
elsif dekadski=37 then led<="0110000" ;
elsif dekadski=38 then led<="0110000" ;
elsif dekadski=39 then led<="0110000" ;
elsif dekadski=40 then led<="0011001" ;
elsif dekadski=41 then led<="0011001" ;
elsif dekadski=42 then led<="0011001";
elsif dekadski=43 then led<="0011001" ;
elsif dekadski=44 then led<="0011001" ;
elsif dekadski=45 then led<="0011001" ;
elsif dekadski=46 then led<="0011001" ;
elsif dekadski=47 then led<="0011001" ;
elsif dekadski=48 then led<="0011001" ;
elsif dekadski=49 then led<="0011001" ;
11
elsif dekadski=50 then led<="0010010" ;
elsif dekadski=51 then led<="0010010" ;
elsif dekadski=52 then led<="0010010" ;
elsif dekadski=53 then led<="0010010" ;
elsif dekadski=54 then led<="0010010" ;
elsif dekadski=55 then led<="0010010" ;
elsif dekadski=56 then led<="0010010" ;
elsif dekadski=57 then led<="0010010" ;
elsif dekadski=58 then led<="0010010" ;
elsif dekadski=59 then led<="0010010" ;
elsif dekadski=60 then led<="0000010" ;
elsif dekadski=61 then led<="0000010" ;
elsif dekadski=62 then led<="0000010" ;
elsif dekadski=63 then led<="0000010" ;
elsif dekadski=64 then led<="0000010" ;
elsif dekadski=65 then led<="0000010" ;
elsif dekadski=66 then led<="0000010" ;
elsif dekadski=67 then led<="0000010" ;
elsif dekadski=68 then led<="0000010" ;
elsif dekadski=69 then led<="0000010" ;
elsif dekadski=70 then led<="1111000" ;
elsif dekadski=71 then led<="1111000" ;
elsif dekadski=72 then led<="1111000" ;
elsif dekadski=73 then led<="1111000" ;
elsif dekadski=74 then led<="1111000" ;
elsif dekadski=75 then led<="1111000" ;
elsif dekadski=76 then led<="1111000" ;
elsif dekadski=77 then led<="1111000" ;
elsif dekadski=78 then led<="1111000" ;
elsif dekadski=79 then led<="1111000" ;
elsif dekadski=80 then led<="0000000" ;
elsif dekadski=81 then led<="0000000" ;
elsif dekadski=82 then led<="0000000" ;
elsif dekadski=83 then led<="0000000" ;
elsif dekadski=84 then led<="0000000" ;
elsif dekadski=85 then led<="0000000" ;
elsif dekadski=86 then led<="0000000" ;
elsif dekadski=87 then led<="0000000" ;
elsif dekadski=88 then led<="0000000" ;
elsif dekadski=89 then led<="0000000" ;
12
elsif dekadski=90 then led<="0010000" ;
elsif dekadski=91 then led<="0010000" ;
elsif dekadski=92 then led<="0010000" ;
elsif dekadski=93 then led<="0010000" ;
elsif dekadski=94 then led<="0010000" ;
elsif dekadski=95 then led<="0010000";
elsif dekadski=96 then led<="0010000" ;
elsif dekadski=97 then led<="0010000" ;
elsif dekadski=98 then led<="0010000" ;
elsif dekadski=99 then led<="0010000";
end if;
AN1 <= '0'; -- uključi treći display
elsif (AN1='0') then -- provjera stanja trećeg display-a
AN1 <= '1'; -- isključi treći display
if dekadski=0 then led<="1000000" ; -- postavljanje dioda na display-u
elsif dekadski=1 then led<="1111001" ;
elsif dekadski=2 then led<="0100100" ;
elsif dekadski=3 then led<="0110000" ;
elsif dekadski=4 then led<="0011001" ;
elsif dekadski=5 then led<="0010010" ;
elsif dekadski=6 then led<="0000010" ;
elsif dekadski=7 then led<="1111000" ;
elsif dekadski=8 then led<="0000000" ;
elsif dekadski=9 then led<="0010000" ;
elsif dekadski=10 then led<="1000000" ;
elsif dekadski=11 then led<="1111001" ;
elsif dekadski=12 then led<="0100100" ;
elsif dekadski=13 then led<="0110000" ;
elsif dekadski=14 then led<="0011001" ;
elsif dekadski=15 then led<="0010010" ;
elsif dekadski=16 then led<="0000010" ;
elsif dekadski=17 then led<="1111000" ;
elsif dekadski=18 then led<="0000000" ;
elsif dekadski=19 then led<="0010000" ;
elsif dekadski=20 then led<="1000000" ;
elsif dekadski=21 then led<="1111001" ;
elsif dekadski=22 then led<="0100100" ;
elsif dekadski=23 then led<="0110000" ;
elsif dekadski=24 then led<="0011001" ;
13
elsif dekadski=25 then led<="0010010" ;
elsif dekadski=26 then led<="0000010" ;
elsif dekadski=27 then led<="1111000" ;
elsif dekadski=28 then led<="0000000" ;
elsif dekadski=29 then led<="0010000" ;
elsif dekadski=30 then led<="1000000" ;
elsif dekadski=31 then led<="1111001" ;
elsif dekadski=32 then led<="0100100" ;
elsif dekadski=33 then led<="0110000" ;
elsif dekadski=34 then led<="0011001" ;
elsif dekadski=35 then led<="0010010" ;
elsif dekadski=36 then led<="0000010" ;
elsif dekadski=37 then led<="1111000" ;
elsif dekadski=38 then led<="0000000" ;
elsif dekadski=39 then led<="0010000" ;
elsif dekadski=40 then led<="1000000" ;
elsif dekadski=41 then led<="1111001" ;
elsif dekadski=42 then led<="0100100" ;
elsif dekadski=43 then led<="0110000" ;
elsif dekadski=44 then led<="0011001" ;
elsif dekadski=45 then led<="0010010" ;
elsif dekadski=46 then led<="0000010" ;
elsif dekadski=47 then led<="1111000" ;
elsif dekadski=48 then led<="0000000" ;
elsif dekadski=49 then led<="0010000" ;
elsif dekadski=50 then led<="1000000" ;
elsif dekadski=51 then led<="1111001" ;
elsif dekadski=52 then led<="0100100" ;
elsif dekadski=53 then led<="0110000";
elsif dekadski=54 then led<="0011001";
elsif dekadski=55 then led<="0010010" ;
elsif dekadski=56 then led<="0000010" ;
elsif dekadski=57 then led<="1111000" ;
elsif dekadski=58 then led<="0000000" ;
elsif dekadski=59 then led<="0010000" ;
elsif dekadski=60 then led<="1000000" ;
elsif dekadski=61 then led<="1111001" ;
elsif dekadski=62 then led<="0100100" ;
elsif dekadski=63 then led<="0110000" ;
elsif dekadski=64 then led<="0011001" ;
14
elsif dekadski=65 then led<="0010010" ;
elsif dekadski=66 then led<="0000010" ;
elsif dekadski=67 then led<="1111000" ;
elsif dekadski=68 then led<="0000000" ;
elsif dekadski=69 then led<="0010000" ;
elsif dekadski=70 then led<="1000000" ;
elsif dekadski=71 then led<="1111001" ;
elsif dekadski=72 then led<="0100100" ;
elsif dekadski=73 then led<="0110000" ;
elsif dekadski=74 then led<="0011001" ;
elsif dekadski=75 then led<="0010010" ;
elsif dekadski=76 then led<="0000010" ;
elsif dekadski=77 then led<="1111000" ;
elsif dekadski=78 then led<="0000000" ;
elsif dekadski=79 then led<="0010000" ;
elsif dekadski=80 then led<="1000000" ;
elsif dekadski=81 then led<="1111001" ;
elsif dekadski=82 then led<="0100100" ;
elsif dekadski=83 then led<="0110000" ;
elsif dekadski=84 then led<="0011001" ;
elsif dekadski=85 then led<="0010010" ;
elsif dekadski=86 then led<="0000010" ;
elsif dekadski=87 then led<="1111000" ;
elsif dekadski=88 then led<="0000000" ;
elsif dekadski=89 then led<="0010000" ;
elsif dekadski=90 then led<="1000000" ;
elsif dekadski=91 then led<="1111001" ;
elsif dekadski=92 then led<="0100100" ;
elsif dekadski=93 then led<="0110000" ;
elsif dekadski=94 then led<="0011001" ;
elsif dekadski=95 then led<="0010010" ;
elsif dekadski=96 then led<="0000010" ;
elsif dekadski=97 then led<="1111000" ;
elsif dekadski=98 then led<="0000000" ;
elsif dekadski=99 then led<="0010000";
end if;
AN0 <= '0'; -- uključi četvrti display
end if;
end if;
CTR<=CTR+"0000000000001"; -- brojač prema gore, povećava se za 1
15
if(CTR>"1000000000000") then -- provjera stanja brojača
CTR<="0000000000000"; -- postavljanje brojača na početnu vrijednost
end if;
end if;
end process;
end Behavioral;
16
Top Related