27_31.PDF
(
408 KB
)
Pobierz
Sterownik wyświetlacza multipleksowanego w VHDL
Sterownik wyświetlacza multipleksowanego w VHDL
P R O J E K T Y
Sterownik wyświetlacza
multipleksowanego
w VHDL
W†artykule przedstawiamy
rozwi¹zanie sterownika
czterech wyúwietlaczy LED
przeznaczonego do
aplikowania w†uk³adach
programowalnych. Nowoúci¹
jest zastosowany sposÛb jego
opisu - zastosowano bowiem
jeden z†najbardziej
popularnych obecnie jÍzyk
opisu sprzÍtu - VHDL.
Wykorzystanie uniwersalnego
jÍzyka HDL pozwala
traktowaÊ prezentowany
projekt jak klasyczny blok IP
(Intellectual Property core).
Rekomendacje: jest to
projekt szczegÛlnie
interesuj¹cy dla fanÛw
nowoczesnych sposobÛw
projektowania urz¹dzeÒ
elektronicznych. Niebywa³a
szansa poznania od úrodka
IP-core'Ûw dla uk³adÛw PLD.
ZacznÍ od wyjaúnienia, dlacze-
go siÍgn¹³em po tak ìciÍøk¹î broÒ
jak VHDL. Uchodzi on doúÊ po-
wszechnie, choÊ nies³usznie, za
jeden z†bardziej skomplikowanych
jÍzykÛw opisu sprzÍtu (HDL -
Hardware Description Language
).
Pomimo doúÊ rygorystycznych re-
gu³ formalnych obowi¹zuj¹cych
podczas pisania programu
w†VHDL jÍzyk ten charakteryzuje
siÍ znaczn¹ uniwersalnoúci¹, co
w†praktyce oznacza, øe dobrze
przygotowany opis bloku funkcjo-
nalnego bÍdzie moøna ìwbudo-
waÊî zarÛwno w†uk³ad PLD, jak
i†ASIC pochodz¹cych od rÛønych
producentÛw - w†obydwu przy-
padkach bÍd¹ one dzia³a³y tak
samo (za wyj¹tkiem parametrÛw
czasowych, ktÛre s¹ silnie powi¹-
zane z†technologi¹ i†struktur¹ lo-
giczn¹ uk³adu). Niebagatelne zna-
czenie dla projektantÛw systemÛw
cyfrowych ma fakt, øe podzbiÛr
jÍzyka VHDL, ktÛry jest obs³ugi-
wany przez programy do syntezy
logicznej, jest niewielki i†stosun-
kowo ³atwy do nauczenia siÍ.
Walor ìuniwersalnoúciî posia-
da takøe Verilog, ktÛry jakkolwiek
bardziej przyjazny uøytkowniko-
wi, nie cieszy siÍ aø tak duø¹
popularnoúci¹ wúrÛd projektan-
tÛw.
Drug¹, czÍsto przytaczan¹ ce-
ch¹ VHDL-a jest moøliwoúÊ opi-
sywania projektowanego uk³adu
na wiele sposobÛw m.in.: przep³y-
wowy (opis úcieøek przesy³ania
danych), behawioralny (opis za-
chowania siÍ bloku w†zaleønoúci
od sygna³Ûw zewnÍtrznych i†we-
wnÍtrznych), czy teø strukturalny
(najczÍúciej spotykan¹ form¹ ta-
Wojsko napędza rozwój technologii
Opracowanie języka VHDL zostało zainicjowane w 1981 roku
przez Departament Obrony USA w celu ujednolicenia opisu
elementów systemów elektronicznych. Przyjęto, że ma to być
język z szerokim zakresem możliwości opisowych, który byłby
akceptowalny przez dowolny symulator i był niezależny od
technologii i sposobu projektowania. Pierwotnie VHDL miał
służyć jednoznacznemu i precyzyjnemu dokumentowaniu
dużych systemów cyfrowych. W 1987 roku VHDL uzyskał
normę IEEE (nowelizowaną w 1993 roku). Dzięki standaryza−
cji i różnorodnemu zastosowaniu (do celów dokumentacyj−
nych, symulacji, adaptacji do układów programowalnych)
powstały efektywne kompilatory tego języka, które
przyczyniły się do jego spopularyzowania. Chociaż powstał
z myślą o opisywaniu dużych systemów, to szybko został
zaadoptowany do opisywania układów programowalnych
(szczególnie układów ASIC i dużych systemów tworzonych
w FPGA).
Elektronika Praktyczna 9/2002
27
Sterownik wyświetlacza multipleksowanego w VHDL
Rys. 1. Ilustracja zasady wyświetlania multipleksowanego
ne s¹ po kolei wszystkie znaki
i†ca³y proces jest powtarzany
z†czÍstotliwoúci¹ wiÍksz¹ niø 50
Hz (licz¹c czÍstotliwoúÊ przypada-
j¹c¹ na kaødy wyúwietlany znak),
dziÍki czemu osoba patrz¹ca na
wyúwietlacz widzi ci¹gle wyúwiet-
lane cyfry.
Schemat blokowy proponowa-
nego rozwi¹zania sterownika 4-
cyfrowego wyúwietlacza pokazano
na
rys. 2
. Do jego wejúÊ zosta³
do³¹czony blok czterech licznikÛw
BCD, dziÍki ktÛremu moøna prze-
testowaÊ dzia³anie sterownika.
Zaczniemy od omÛwienia zasad-
niczej czÍúci projektu, ktÛrego
opis w†jÍzyku VHDL pokazano na
list. 1
. Kaødy z†fragmentÛw fun-
kcjonalnych sterownika opi-
sano osobno (³atwo je za-
uwaøyÊ dziÍki komentarzom
umieszczonym na listingu),
przy czym opisy fragmen-
tÛw synchronicznych (jak
np. licznik wyúwietlanej cyf-
ry) umieúci³em w†niezaleø-
nych procesach.
Ponadstandardowym wy-
posaøeniem sterownika jest
16-bitowy rejestr wejúciowy
typu
latch
, ktÛry moøe pra-
cowaÊ w†trybie przeüroczys-
tym (gdy LD = 1) lub jako
standardowy przerzutnik za-
trzaskowy (dane s¹ w†nim
zatrzaskiwane poprzez zmia-
nÍ stanu wejúcia LD z†1†na
0). W†zaleønoúci od wyma-
gaÒ aplikacji z†rejestru tego
moøna skorzystaÊ lub nie.
W†tym drugim przypadku
moøna siÍ pokusiÊ o†usuniÍ-
cie z†list. 1†fragmentu za-
kiego opisu s¹ rÛwnania
logiczne). Szczerze mÛ-
wi¹c wiÍkszoúÊ jÍzykÛw
HDL, takøe starszej gene-
racji jak np. CUPL czy
ABEL, oferuj¹ podobne
moøliwoúci, ale poddajmy
siÍ modzie...
Przed laty wielką estymą wśród elektroni−
ków cieszyli się ci, którzy potrafili
programować mikroprocesory w asemblerze.
Dziś taka umiejętność jest również ważna,
pozwala bowiem na najbardziej efektywne
wykorzystanie możliwości mikroprocesora
(krótki kod i większa szybkość realizowania
procedur), ale nie jest już niezbędna.
Z czasem pojawiły się bowiem narzędzia
programowe, które pozwalają na programo−
wanie mikroprocesorów w językach wyższego
poziomu, jak np. w C czy nawet w BASIC−u.
Długość kodu wynikowego też nie jest już
parametrem tak krytycznym, gdyż pamięci
o dużej pojemności są powszechnie
dostępne. Wydaje się, że podobnie jest
z opisem układów do realizacji w strukturach
programowalnych. Dobra znajomość języków
opisu sprzętu jest cenną umiejętnością
projektanta, szczególnie wtedy gdy
projektuje duże układy i chciałby efektywnie
wykorzystać zasoby docelowego układu
programowalnego.
Opis projektu
Ze wzglÍdu na moøli-
woúÊ ograniczenia liczby
niezbÍdnych wyprowa-
dzeÒ uk³adu, do sterowa-
nia wyúwietlaczy LED
bardzo czÍsto s¹ stosowa-
ne systemy z†multiplek-
sowaniem. Ciesz¹ siÍ one
powodzeniem zarÛwno
wúrÛd projektantÛw sys-
temÛw mikroprocesoro-
wych, jak wúrÛd projek-
tantÛw urz¹dzeÒ budowa-
nych z†uk³adÛw dyskret-
nych (TTL lub CMOS),
jak i†w†sterownikach wyúwietla-
czy wbudowywanych w†uk³ady
PLD.
Zasada dzia³ania wyúwietlania
multipleksowego jest doúÊ prosta:
segmenty wszystkich wyúwietla-
czy s¹ po³¹czone ze sob¹ rÛwno-
legle i†sterowane z†wyjúÊ jednego
transkodera kodu (przyk³adowo)
BCD na kod wyúwietlacza 7-
segmentowego (
rys. 1
). WspÛlne
elektrody wyúwietlaczy (anody lub
katody) s¹ sterowane niezaleønie
w†taki sposÛb, øe w†danej chwili
zasilana jest tylko jedna z†nich.
Jednoczeúnie na wejúcia dekodera
jest podawany kod znaku, ktÛry
ma byÊ wyúwietlony na wybranej
pozycji. W†ten sposÛb wyúwietla-
Rys. 2. Schemat blokowy prezentowanego projektu w VHDL
28
Elektronika Praktyczna 9/2002
Sterownik wyświetlacza multipleksowanego w VHDL
Rys. 3. Widok okna edytora elementów bibliotecznych
w pakiecie Max+Plus II (bezpłatna wersja Baseline)
Rys. 4. Widok okna programu do syntezy VHDL
Leonardo Spectrum (także dostępny bezpłatnie)
wieraj¹cego opis tego rejestru,
dziÍki czemu zmniejszy siÍ liczba
(o 16) makrokomÛrek niezbÍdnych
do implementacji projektu.
Jak wspomniano wczeúniej, do
testowania sterownika zastosowa-
no cztery liczniki BCD, ktÛrych
opis pokazano na
list. 2
. S¹ to
liczniki pracuj¹ce synchronicznie,
ktÛrych opis podzieli³em na czte-
ry procesy niezaleøne dla kaødej
pozycji (cyfry). Liczniki s¹ zero-
wane asynchronicznie i†wyposa-
øone w†wejúcie zezwolenia na
zliczanie (
ena
), ktÛre uaktywnia
licznik gdy na to wejúcie jest
podana logiczna 1.
Tak przygotowane opisy blo-
kÛw wymagaj¹ po³¹czenia ze so-
b¹, dziÍki czemu powstanie urz¹-
dzenie, ktÛrego schemat blokowy
pokazano na rys. 2. Moøna je
po³¹czyÊ ze sob¹ na wiele rÛø-
nych sposobÛw, z†ktÛrych nie-
w¹tpliwie najwygodniejszy jest
sposÛb graficzny (za pomoc¹ spe-
cjalizowanego edytora schema-
tÛw). Ze wzglÍdu na walory
dydaktyczne w†artykule przed-
stawimy nieco mniej czytelny
sposÛb, ktÛry zilustruje zasadÍ
tworzenia projektÛw hierarchicz-
nych w†jÍzyku VHDL. Hierar-
chiczny opis zestawu: sterownik
wyúwietlaczy multipleksowanych
(plik
latch_dek.vhd
- list. 1)
z†do³¹czonym 4-cyfrowym licz-
nikiem BCD (plik
licznik.vhd
-
list. 2) pokazano na
list. 3
.
Pomocny w†analizie tego opisu
bÍdzie rys. 2, na ktÛrym zosta³y
wyraünie zaznaczone nazwy
wszystkich sygna³Ûw wykorzys-
tanych w†projekcie.
Implementacja
DziÍki zastosowaniu opisu w†jÍ-
zyku VHDL uda³o siÍ uzyskaÊ ³atw¹
jego przenoúnoúÊ pomiÍdzy syste-
mami projektowymi rÛønych produ-
centÛw. Poniewaø prezentowany
przyk³ad jest stosunkowo prosty,
zastosowane w†nim mechanizmy
List. 1. Opis w języku VHDL bloku sterownika 4−cyfrowego wyświetlacza
multipleksowanego (plik
latch_dek.vhd
)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
entity latch_dek is Port (
d: in std_logic_vector(15 downto 0);
ld, clk, res: in std_logic;
dig: out std_logic_vector(3 downto 0);
segm: out std_logic_vector(6 downto 0)
);
end latch_dek;
architecture reg_dek of latch_dek is
signal adr: std_logic_vector(1 downto 0); - linie adresowe MUX-a
signal bcd: std_logic_vector(3 downto 0); - wyj. MUX-a/wej. dekodera
signal d_latch: std_logic_vector(15 downto 0); - wyjscie rejestru latch
begin
- dekoder wyswietlanych cyfr
with adr select
dig <= “1110” when “00”, - cyfra 0 (jedn.)
“1101” when “01”, - cyfra 1 (dzies.)
“1011” when “10”, - cyfra 2 (setki)
“0111” when “11”, - cyfra 3 (tys.)
“1111” when others; - wygaszenie cyfr
- MUX danych do wyswietlania
with adr select
bcd <= d_latch(15 downto 12) when “11”,
d_latch(11 downto 8) when “10”,
d_latch(7 downto 4) when “01”,
d_latch(3 downto 0) when “00”,
“1111” when others;
- licznik adresu wyswietlanej cyfry
licz_adr: process (clk, res) begin
if (res=’1') then adr <= “00”;
elsif (clk=’1' and clk’event) then
adr <= adr + 1;
end if;
end process licz_adr;
- transkoder
with bcd select
- g f e d c b a
segm <= “1000000” when “0000”, - 0
“1111001” when “0001”, - 1
“0100100” when “0010”, - 2
“0110000” when “0011”, - 3
“0011001” when “0100”, - 4
“0010010” when “0101”, - 5
“0000010” when “0110”, - 6
“1111000” when “0111”, - 7
“0000000” when “1000”, - 8
“0010000” when “1001”, - 9
“1111111” when others; - wygaszenie
- rejestr latch
latch: process (ld, d, res)
begin
if res=’1' then
d_latch <= “0000000000000000”;
elsif ld=’1' then
d_latch <= d;
end if;
end process;
end reg_dek;
Elektronika Praktyczna 9/2002
29
Sterownik wyświetlacza multipleksowanego w VHDL
Rys. 5. Wygląd okna systemu projektowego
WebPack ISE (dostępny bezpłatnie
w Internecie)
Spectrum -
rys. 4
) i†Qu-
artus II firmy Altera, Web-
Pack ISE firmy Xilinx
(
rys. 5
) oraz Warp firmy
Cypress (wersja bezp³atna
tego systemu dostÍpna
wy³¹cznie z†ksi¹øk¹ ìJÍzyk
VHDLî Kevina Skahilla,
ktÛra ukaza³a siÍ nak³a-
dem WNT). Warto tutaj
przypomnieÊ, øe kurs po-
s³ugiwania siÍ pakietem
WebPack ISE publikowa-
liúmy w†EPo/oL 4...7/2002.
Projekt by³ kompilo-
wany na uk³ady CPLD
(z serii MAX7000S,
XC9500 i†Flash370i) i†zajmuje
w†nich 30 makrokomÛrek.
wie, ktÛrego schemat znajduje
siÍ na
rys. 6
. Poniewaø zestaw
by³ projektowany do zupe³nie
innych zadaÒ, jego wyposaøenie
jest nieco nadmiarowe (zastoso-
wano w†nim m.in. 5†wyúwietla-
czy, z†ktÛrych tylko 4†wykorzys-
tujemy w†przyk³adzie). Zastoso-
wany w†nim uk³ad XC95018 jest
wyposaøony w†interfejsach
JTAG, za pomoc¹ ktÛrego moøna
programowaÊ jego nieulotn¹ pa-
miÍÊ konfiguracji. Opisy progra-
matorÛw ISP (odpowiednik
DLC5, ktÛry jest obs³ugiwany
przez system WebPack ISE) moø-
na znaleüÊ m.in. w†EP4/2001
(AVT-1303).
Tranzystory T1...T5 (w przy-
k³¹dzie wykorzystane T2...T5)
spe³niaj¹ rolÍ wzmacniaczy pr¹-
dowych steruj¹cych wspÛlne ano-
dy wyúwietlaczy. Segmenty wy-
úwietlaczy s¹ sterowane bezpo-
úrednio z†wyjúÊ uk³adu CPLD (ich
opisu s¹ elementarne i†moøliwe do
przyswojenia przez zdecydowan¹
wiÍkszoúÊ systemÛw projektowych.
Ostateczn¹ wersjÍ prezentowanego
projektu poddano kompilacji przez
systemy (wszystkie dostÍpne bez-
p³atnie): Max+Plus II (wersje: SE
oraz Baseline -
rys. 3
- z†Leonardo
Testowanie
Nic tak dobrze nie robi pro-
jektowi, jak praktyczna weryfi-
kacja jego dzia³ania. Testy prze-
prowadzi³em na prostym zesta-
Rys. 6. Schemat elektryczny modułu ewaluacyjnego
30
Elektronika Praktyczna 9/2002
Sterownik wyświetlacza multipleksowanego w VHDL
List. 2. Opis 4−cyfrowego licznika BCD (plik
licznik.vhd
)
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity licznik is
Port ( res, clk, ena: in std_logic;
ovf: out std_logic;
q: out std_logic_vector(15downto 0)
);
end licznik;
architecture a of licznik is
signal jedn: std_logic_vector(3 downto 0);
signal dzie: std_logic_vector(3 downto 0);
signal setk: std_logic_vector(3 downto 0);
signal tysi: std_logic_vector(3 downto 0);
begin
jedn_cnt: PROCESS (clk, res) BEGIN
if (res=’1') then jedn <= “0000”;
elsif (clk=’1' and clk’event) then
if (ena=’1') then
if (jedn=”1001") then jedn <= “0000”;
else jedn <= jedn + 1;
end if;
end if;
end if;
end process jedn_cnt;
dz_cnt: process (clk, res) begin
if (res=’1') then dzie <= “0000”;
elsif (clk=’1' and clk’event) then
if (ena=’1') then
if (dzie=”1001" and jedn=”1001") then dzie<=”0000";
elsif (jedn=”1001") then dzie <= dzie + 1;
end if;
dopuszczalna obci¹øalnoúÊ pr¹do-
wa ìdo masyî zasilania wynosi
24 mA). Taki sposÛb sterowania
wymusi³ koniecznoúÊ zakodowa-
nia tablicy prawdy transkodera
(list. 1) w†logice ujemnej (czyli
0†jest aktywne). Takøe tranzysto-
ry-drivery (typu PNP) s¹ aktywo-
wane przez 0†logiczne, w†zwi¹zku
z†czym w†opisie dekodera wy-
úwietlanych cyfr (list. 1) sygna³em
aktywnym jest takøe 0.
Uk³ad U3 spe³nia rolÍ zewnÍt-
rznego generatora taktuj¹cego ste-
rownik wyúwietlaczy. Wartoúci
elementÛw R1, R2 i†C5 ustalaj¹
czÍstotliwoúÊ jego pracy na ok.
400 Hz, co w†zupe³noúci wystar-
cza do poprawnego wysterowania
4†wyúwietlaczy.
end if;
end if;
end process dz_cnt;
set_cnt: process (clk, res) begin
if (res=’1') then setk <= “0000”;
elsif (clk=’1' and clk’event) then
if (ena=’1') then
if (setk=”1001" and dzie=”1001" and jedn=”1001") then setk <= “0000”;
elsif (dzie=”1001" and jedn=”1001") then setk <= setk + 1;
end if;
end if;
end if;
end process set_cnt;
tys_cnt: process (clk, res) begin
if (res=’1') then tysi <= “0000”;
elsif (clk=’1' and clk’event) then
if (ena=’1') then
if (tysi=”1001" and setk=”1001" and dzie=”1001" and jedn=”1001" ) then
tysi<=”0000";
Zastosowanie
Prezentowany w†artykule mo-
du³ sterownika wyúwietlaczy jest
jednym z†elementÛw uniwersal-
nego projektu czÍstoúciomierza
z†automatyczn¹ zmian¹ zakre-
sÛw, ktÛry w†ca³oúci opisano za
pomoc¹ jÍzyka VHDL (szczegÛ-
³owo opiszemy go w†jednym
z†najbliøszych wydaÒ EP). Nie
jest to oczywiúcie jego jedyne
moøliwe zastosowanie. Ponie-
waø komplet plikÛw ürÛd³owych
udostÍpniamy w†Internecie (na
www.ep.com.pl
w†dziale
Down-
load>Dokumentacje
), kaødy pro-
jektant bÍdzie mÛg³ wykorzystaÊ
sterownik w†dowolnych w³as-
nych opracowaniach. Pomimo
niedoskona³oúci wspÛ³czesnych
narzÍdzi do syntezy VHDL, dziÍ-
ki zastosowaniu tego jÍzyka opi-
su uda³o siÍ uzyskaÊ 100% prze-
noúnoúÊ pomiÍdzy wczeúniej wy-
mienionymi systemami projekto-
wymi. Istnieje duøa szansa na
kompatybilnoúÊ opisu takøe
w†z†innymi systemami projekto-
wymi (poúrÛd bezp³atnych do-
stÍpne s¹ jeszcze m.in.: Quick-
Works firmy QuickLogic oraz
pakiety Libero i†Designer firmy
Actel), dziÍki czemu moøna ³at-
wo wykorzystaÊ udostÍpnione
opisy dla dowolnego uk³adu PLD
(takøe FPGA).
Piotr Zbysiñski, AVT
piotr.zbysinski@ep.com.pl
elsif (setk=”1001" and dzie=”1001" and jedn=”1001") then tysi <= tysi + 1;
end if;
end if;
end if;
end process tys_cnt;
q <= tysi & setk & dzie & jedn; -
end a;
test.vhd
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
entity test is Port (
clk_ref, res, clk_disp: in std_logic;
a, b, c, d, e, f, g, dig4: out std_logic;
dig: out std_logic_vector(3 downto 0)
);
end test;
architecture cplx of test is
component latch_dek port (
d: in std_logic_vector(15 downto 0);
ld, clk, res: in std_logic;
dig: out std_logic_vector(3 downto 0);
segm: out std_logic_vector(6 downto 0)
);
end component latch_dek;
component licznik port (
res, clk, ena: in std_logic;
q: out std_logic_vector(15 downto 0)
);
end component licznik;
signal q_int: std_logic_vector(15 downto 0);
begin
licznik_kpl: licznik port map (
clk => clk_ref,
res => res,
q => q_int,
ena => ‘1’
);
reg_dek_mux: latch_dek port map (
d => q_int,
clk => clk_disp,
res => res,
dig => dig,
ld => ‘1’,
segm(0) => a,
segm(1) => b,
segm(2) => c,
segm(3) => d,
segm(4) => e,
segm(5) => f,
segm(6) => g
);
dig4 <= ‘1’; - wynika z budowy zestawu eval - nie wplywa na dzialanie bloku
end cplx;
Wzory p³ytek drukowanych w for-
macie PDF s¹ dostÍpne w Internecie
pod adresem:
http://www.ep.com.pl/
?pdf/wrzesien02.htm
.
Elektronika Praktyczna 9/2002
31
Plik z chomika:
bulwion
Inne pliki z tego folderu:
Diuna cd 2.avi
(688586 KB)
diuna 2 pdf.pdf
(110 KB)
833 kobiety i kolor zielony(2).jpg
(1092 KB)
837 bAba iAga(2).jpg
(138 KB)
839 koloroidek(2).jpg
(213 KB)
Inne foldery tego chomika:
- - 1024--Fillm
- - 2024--FULL---
- - 2K wallpapers
- - ART PICS
- - FILMY 2023-2025 WSZYSTKIE NOWOŚCI
Zgłoś jeśli
naruszono regulamin