Andrej Trost

Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
1. stopnja UNI, 2. letnik
Digitalni Elektronski Sistemi
Andrej Trost
Literatura: A. Trost: Načrtovanje digitalnih vezij v jeziku VHDL, FE 2011
Spletna stran: http://lniv.fe.uni-lj.si/des.html
1
Vsebina predmeta Digitalni elekt. sistemi
Kaj je v elektronskih napravah ?
Postopki načrtovanja (zasnove)
procesorji in vmesniki
ocenjevanje načrta, metrike
RTL opis v jeziku VHDL
Uporaba 3 ključnih tehnologij
tehnike načrtovanja
tehnološke izvedbe (int. vezja)
procesorji
2
Digitalni elektronski sistemi
prikazovalnik
Digitalni sistem
podsistemi (moduli)
vmesnik
tiskano vezje
digitalne strukture
3
mikroprocesor, aplikacija
komunikacijski vmesniki
elektronsko vezje
procesor
logična vrata
integrirana vezja
10
>
Digitalni elektronski sistemi
Kaj je v elektronskih napravah ?
“informacijske naprave”
digitalna vezja in procesorji
vmesniki
Značilnosti sodobnih el. naprav ?
nezahtevne za uporabo
enostaven, intuitiven vmesnik
porazdeljene in povezane
več kot 50 v sodobnem vozilu
interakcija
osebne in prenosne naprave
4
info tabla
pametna
kamera
Digitalni sistem: osebni računalnik
5
Računalnik na enem tiskanem vezju
Single Board Computer
6
mikroprocesor, pomnilnik in FLASH disk
vhodno / izhodne enote: USB, Ethernet, RS232
prilagojen operacijski sistem in aplikacije
Računalnik na integriranem vezju (čipu)
mikrokrmilnik (Microcontroller)
7
mikroprocesor,
pomnilnik (RAM in FLASH) in
vhodno / izhodne enote na čipu.
Enostaven operacijski sistem ali
ena aplikacija brez OS
Vgrajeni sistemi (Embedded System)
Definicija vgrajenega sistema (IEEE 1992)
„A computer system that is part of a larger system and performs some
of the requirements of that system.“
računalniški (digitalni) sistem vgrajen v elektronsko napravo
skoraj vsi digitalni sistemi z izjemo splošno-namenskih
računalnikov
letno se prozvede miljone računalnikov in miljarde VS
Skupne značilnosti vgrajenih sistemov
Izvajajo eno nalogo
Dobro omejeni
ponavljajo program
nizka cena, poraba, prostor
Reaktivni
takoj reagirajo na
spremembe v okolici
Izvršijejo operacije v
realnem času
• 60 % vsebuje več različnih integriranih vezij
• 45% vsebuje programirljivo vezje (FPGA)
9
Načrtovanje vgrajenih naprav
poraba časa za posamezne korake
Razvoj: Robert Noyce in integrirana vezja
J. Kilby in R. Noyce izumila mikroelektronsko
vezje na rezini polprevodnika – integrirano vezje
Fairchild Semiconductor 1957
Soustanovitelj podjetja Intel
Sodobno integrirano vezje v ohišju QFP (a) in BGA (b), prerez silicijeve rezine z vezjem (c)
11
Gonilo razvoja: Moorov zakon
Gordon Moore in R. Noyce ustanovila Intel 1968
Moorov zakon: število transistorjev na
integriranem vezju se podvoji vsako leto (od leta
1975)
12
Def: integrirano vezje, ki izvaja vse ali
večino funkcij celotnega elektronskega
sistema
Za sisteme je značilna kompleksnost
vezja
komponente so lahko zelo velika vezja
(npr. RAM), vendar imajo enostavno
strukturo
Sistem lahko vsebuje analogne komp.,
vendar je večina sistema digitalno vezje
13
najbolj kompleksne funkcije lahko
naredimo le z digitalnim vezjem
System-onChip
procesor (CPU)
Pomnilnik (RAM, flash)
Komunikacijski vmesnik
Namenska vezja (IP)
RAM
IP
vmesniki
CPU
Primer 1: digitalna kamera
14
Primer 2: CD / mp3
audio
izhod
analog.
del
audio
dekoder
(CPU)
pomnilnik
Reed-Solomon
korekcija napak
mehanizem
15
analog.
del
servo
krmilnik
(DSP)
zunanji
pomnilnik
Prednosti digitalne tehnike
Digitalni signal je neobčutljiv na motnje, ki jih poznamo iz
analognih sistemov
Digitalna vezja so učinkovita in ekonomična pri obdelavi
signalov
Nekatere algoritme lahko naredimo le z digitalnim vezjem
16
npr. algoritme za zgoščevanje signala, ki zmanjšajo zahteve pri
shranjevanju in prenosu podatkov
Kombinacijska in sekvenčna vezja
x1
.
.
.
xn
fi(x)
x1
.
.
.
xn
si
fi(x)
clk
Kombinacijsko vezje
yi = fi(x1,..,xn)
Sekvenčno vezje
1. Pomnilni elementi
2. Časovni koraki (ura)
yit = fi (x1t,…,xnt, s1t, …,smt)
Sit+1 = gi(x1t,…,xnt, s1t,…,smt)
17
Načrtovanje digitalnih modulov
RTL: delitev na krmilni in podatkovni del
določitev zaporedja operacij (avtomat)
opis gradnikov na podatkovni poti
VHDL
Very high-speed IC
Hardware
Description
Language
modul(arhitektura)
vodilo
xor, +
ROM
clk
register a
register b
podatkovna
pot
prireditveni
stavki
p1: proces
p2: proces
vpis
krmilni
avtomat
beri
komponenta
komponenta
18
q <= n;
p1: process(clk)
begin
if rising_edge(clk) then
n <= n + 1;
end if;
end process;
komponenta
Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
Digitalni Elektronski Sistemi
Model vezja
Opis modela vezja v jeziku VHDL
1
Načrtovanje s programirljivimi vezji
Opis vezja in simulacija (Design Entry Utilities)
Sinteza logičnega vezja (Synthesize)
Prevajanje in tehnološka preslikava
1.
2.
3.
•
4.
določimo lokacije priključkov (User Constraints)
Izdelava prog. datotek in nalaganje vezja
Proces za CPLD
2
Proces za FPGA
Kaj dela opisano vezje?
always @ (a or b)
case (b)
0: c=a;
1: c=2'b01;
default: c=2'b00;
endcase
3
process (a, b)
begin
case b is
when 0 => c <= a;
when 1 => c <= "01";
when others => c <= "00";
end case;
end process;
Izbirni stavek
Primer: c <= a+b when b>0 else a-b;
Kaj naredi program za sintezo vezja?
operatorji +, - so kombinacijska vezja ADD {14}, ADSU {13}
izbirni stavek when … else je izbiralnik MUX {8 celic}
zasedenost
CPLD virov:
{21, 63, 0}
termov
celic
4
flip-flopov
Postopek sinteze vključuje optimizacijo
Stavek: c <= a+b when b>0 else a-b;
primerjalnik (or7, and2) in ADDSUB blok
zasedenost 19 / 55 / 0
Drug zapis: c <= a+b when b>=0 else a-b;
5
zasedenost 17 / 53 / 0
Način opisovanja digitalnih vezij
specifikacija
postopkovni (behavioral)
funkcijski (dataflow, RTL)
logični
nivo transistorjev
geometrija vezja (layout)
Standardizirani jeziki (IEEE)
6
VHDL
Verilog, System Verilog
SystemC
programirljiva
vezja
Nivoji opisa vezja:
SystemC
C
VISOKONIVOJSKI
JEZIKI
SHEMATSKI
OPIS
VHDL
Verilog
Funkcijski opis vezja v jeziku VHDL
stavki opisujejo gradnike vezja
stavki za opis vezja se izvajajo paralelno
vrstni red stavkov ni pomemben (sočasni stavki)
entity adder is
port ( a, b : in std_logic;
carry : in std_logic;
sum : out std_logic);
end adder;
architecture logic of adder is
signal c : std_logic;
begin
sum <= c xor carry;
c <= a xor b;
end one;
7
adder(logic)
a
b
c
sum
carry
deklaracija notranjega
signala
Postopkovni opis vezja v jeziku VHDL
v procesu opišemo delovanje vezja
zgradbo vezja določi program za sintezo vezij
vrstni red stavkov je pomemben (sekvenčni stavki)
arhitektura
p1: process
ventil <= ‘0’;
if pretok > 10 then
ventil <= ‘1’;
end if;
if alarm = ‘1’ then
ventil <= ‘0’;
end if;
end process;
8
p1:
pretok
10
alarm
>
ventil
VHDL model vezja predstavlja poenostavljen
Digitalne vrednosti
Kako razlikujemo med
logično 1 in 0 ?
Statični red
9
med 0 in 1 uvedemo
nedovoljeno stanje
Digitalni čas
Kateri signal se je prej
spremenil ?
Dinamični red
izogibanje “tekmovanju”
med signali
Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
Digitalni Elektronski Sistemi
Delovanje realnega vezja
Omejitve modela vezja
1
Model v VHDLu je poenostavljeno realno vezje
V modelu imamo logične vrednosti 0 in 1, v vezju pa
imamo napetosti
0 = 0V ali nekoliko višja napetost
1 = Vdd (napajanje) ali nekoliko nižja napetost
V modelu ne upošteva pojavo v realnih flip-flopih
če se vhod spremeni istočasno s fronto ure ne moremo
napovedati kaj se bo zgodilo z izhodom
2
dobimo eno ali drugo logično stanje, ne glede na vhod ali
preide v metastabilno stanje, ki preide počasi v eno izmed stabilnih
stanj
Statični red
Statični red določa pravila za uspešen prenos digitalnih
vrednosti med različnimi vezji
Povezovanje dig. integriranih vezij v različnih izvedbah (TTL,
CMOS, LVCMOS…)
Dogovor za potenciale, ki določajo nizko ali visoko stanje
3
Prepovedano območje potencialov
Kako intepretiramo signal s potencialom Vdd / 2 ?
4
da se izognemo dvoumni interpretaciji uvedemo prepovedano
območje, npr.:
logična ‘0’: 0V ≤ VL ≤ 2V
logična ‘1’: 3V ≤ VH ≤ 5V
Šum na signalnih povezavah
Na povezavah v vezju se lahko pojavi šum
Šum predstavimo kot dodatno napetost, ki se prišteje ali
odšteje od napetosti signala
Npr. Un = 0.5V šumne napetosti povzroči
5
CMOS nizko stanje 1V se poveča na 1.5V, kar je še vedno ‘0’
CMOS nizko stanje 2V se poveča na 2.5V, kar je prepovedano
območje !
Rešitev: dodamo šumno mejo
Za oddajnik signala (izhod) določimo manjše dovoljeno
območje kot za sprejemnik (vhod)
6
razlika je šumna meja, ki dovoljuje določen nivo šuma brez
vpliva na kakovost komunikacije
Npr. podatki za 3.3V LVCMOS:
Delovanje flip-flopov
Kateri signal se je prej spremenil ?
Dinamični red
7
izogibanje “tekmovanju” med signali
Metastabilno stanje
V2
Stable point
“0”
“1”
Metastable point
lastnost bistabilnih vezij
čez čas gre v stabilno stanje
nedoločen čas okrevanja
verjetnost za metastabilnost
eksponentno pada s časom
10
Stable point
V1
Sinhronizacija z dvema D flip-flopoma
metastabilno stanje na
izhodu FF1
stanje se stabilizira na
izhodu FF2, če je na voljo
dovolj časa
pri višjih frekvencah ure
uporabimo več zaporednih
D flip-flopov
A
FF1 AW FF2 AS
D
D
Q
Q
Clk
Clk
A
AW
AS
eksponentno pada
P(napake) = P(metastab stanja) x P(ni še stabilno po tw)
Zakasnitev signala je cena za sinhronizacijo, ki se ji ne
moremo izogniti !
11
Načrtovanje vmesnikov
problem komunikacijskih vmesnikov je sinhronizacija
asinhrone signale vzorčimo z višjo frekvenco ure in jih
peljemo čez sinhronizacijsko vezje
težav z metastabilnostjo ne vidimo na simulaciji !
sinhronizacija s FF
rx
D
Q
D
Q
rxs
clk
možna metastabilna stanja
clk
rx
rxs
Sinhronizacija večbitnih signalov
Ali bo prikazano vezje delovalo ?
4-bitni števec dela z uro clk1, vrednost potrebujemo v vezju, ki
preklaplja z uro clk2
counter
clk1
cnt_w
cnt
D
4
Q
4
D
Q
cnt_s
4
clk2
Vsak bit je posebej sinhroniziran
13
Kaj se zgodi ob prehodu števca iz 0111 v 1000 ?
Spremenijo se vsi biti, na izhodu je lahko napačen katerikoli…
Rešitev 1: Grayev števec
Binarni števec zamenjamo z Grayevim, ki naenkrat
spreminja le en bit
v najslabšem primeru bomo prebrali prejšnjo vrednost
števca in v naslednjem ciklu branja dobili pravo
vrednost
0111 => 1. cikel: 0101, 2. cikel: 0101 (brez napak)
0111 => 1. cikel : 0111, 2. cikel : 0101 (napaka)
Takšno vezje se uporablja na naslovne kazalce v
pomnilnikih FIFO
14
kazalec za pisanje šteje z uro clk1
Kazalec za branje šteje z uro clk2
Razlika kazalcev pove koliko je pomnilnik poln
# 0000
# 0001
# 0011
# 0010
# 0110
# 0111
# 0101
# 0100
# 1100
# 1101
# 1111
# 1110
# 1010
# 1011
# 1001
# 1000
# 0000
# 0001
# 0011
# 0010
Rešitev 2: komunikacija z usklajevanjem
Usklajevalni protokol (handshaking) določa časovno okno
v katerem je mogoč prenos podatka
Primer: paralelni vmesnik Centronics
8-bitni asinhroni prenos podatkov za zunanje naprave
PC z negativnim impulzom (strobe) označi nov podatek
ko naprava zazna strobe, postavi busy in prebere podatek
data
0.5µs 0.5µs
strobe
busy
15
Sinhroniziramo le enobitne kontrolne signale (strobe in busy)
Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
Digitalni Elektronski Sistemi
Osnove jezika VHDL
1. del: signali, operacije in simulacija
1
Visokonivojski jeziki za opis vezij
Standardizirani jeziki (IEEE standard)
Modeliranje na različnih nivojih
vhodi
logična vrata, RTL (Register Transfer Level)
nivo obnašanja (zapišemo algoritem)
logika
ura
s simulacijo preverimo delovanje vezja
Sinteza vezja
logika
registri
Funkcionalna in časovna simulacija vezja
VHDL (Very high-speed IC Hardware Description Language)
Verilog
pretvorba vezja na nivo logičnih vrat in flip-flopov
izhodi
Osnovni koncepti jezika VHDL
Model vezja je sestavljen iz:
opisa vmesnika (entity)
opisa delovanja (architecture)
Osnovni elementi opisa vezja so signali, ki predstavljajo
povezave
Pri opisu vmesnika določimo zunanje signale (port) in
parametre vezja
zapišemo ime signala
določimo smer (in, out, inout, buffer)
in podatkovni tip (npr. bit)
entity adder is
port ( a, b : in bit;
carry : in bit;
sum : out bit );
end adder;
Opis delovanja (architecture)
adder(one)
entity adder is
port ( a, b : in bit;
carry : in bit;
sum : out bit );
end adder;
architecture one of adder is
signal c : bit;
begin
sum <= c xor carry;
c <= a xor b;
end one;
a
b
c
sum
carry
deklaracija notranjega
signala
V arhitekturnem stavku določimo notranje in izhodne signale
Zunanji signali
Zunanji signali so enobitni (bit) ali vektorski signali
(bit_vector)
MSB
entity alu is
port ( a, b : in
op : in
c : out
zero :out
end alu;
LSB
alu
a 16
bit_vector(15 downto 0);
bit_vector(3 downto 0);
bit_vector(15 downto 0);
bit );
16
b
16
op
c
zero
4
Podatkovni tip bit pozna dve vrednosti: 0 ali 1
za bolj realistično simulacijo potrebujemo več-vrednostno
logiko ('Z', 'U', 'X')
potrebujemo tudi funkcije za razrešitev
npr. ko signalu vsilimo vrednost ‘0’ in ‘Z’, prevlada vrednost ‘0’
Večvrednostna logika: std_logic
V knjižnici IEEE: std_logic in std_logic_vector
‘U’ nedefinirano stanje
‘X’ kratek stik
‘Z’ visoka impedanca (odprte sponke)
‘H’ pasivno visoko stanje (pullup)
...
vključimo knjižnico
library IEEE;
use IEEE.std_logic_1164.all;
entity adder is
port ( a, b : in std_logic;
carry : in std_logic;
sum : out std_logic );
end adder;
adder
a
b
carry
sum
Prireditveni stavek
S prireditvenim stavkom signalu priredimo konstantno
vrednost ali izraz:
flag <= ‘0’;
sum <= a xor b;
a
sum
b
flag
Prireditveni stavek predstavlja logiko, katere izhod je signal,
ki mu prirejamo vrednost
Za isti signal ne moremo imeti
več sočasnih prireditvenih
stavkov, ker bi opisali kratek stik!
Pogojni prireditveni stavek
Signalu priredimo vrednost ali izraz ob določenem pogoju
a+b
mux <= a when select=‘0’ else b;
flag <= ‘1’ when a>b else ‘0’;
add <= a+b when b>0 else a-b;
a-b
add
Pogojni prireditveni stavek v osnovni obliki predstavlja
izbiralnik (multiplekser)
b>0
izrazi predstavljajo logiko na vhodu izbiralnika, pogoj pa logiko
za izbiro vhoda
Relacijski operatorji:
=
/=
>
>=
<
<=
enako
ni enako
večje
večje ali
enako
manjše
manjše
ali enako
Konstantne vrednosti
Konstantno vrednost tipa bit ali std_logic zapišemo med
enojne narekovaje:
one <= ‘1’;
tristate <= ‘Z’;
Vektorske konstante (bit_vector ali std_logic_ vector)
imajo dvojne narekovaje:
a <= “11110000”;
b <= X”3A”;
c <= (others => ‘0’);
šestnajstiška konstanta
agregat
postavi vse bite vektorja na 0
Deklaracija signalov in konstant
Zunanji signali so deklarirani v stavku port, notranji pa v
arhitekturnem stavku
signalu lahko ob deklaraciji priredimo začetno vrednost
Konstante deklariramo v arhitekturnem stavku
architecture one of test is
signal flag: std_logic;
signal reg: std_logic_vector(3 downto 0) := “0000”;
constant zero: std_logic := ‘0’;
begin
Deklaracija zunanjih signalov
Zunanji signali imajo poleg podatkovnega tipa določeno
tudi smer
in
vhodni signali, ki se lahko pojavljajo le na desni strani prireditvenih
stavkov in v pogojih
out
izhodni signali, ki se lahko pojavljajo le na levi strani prireditvenih
stavkov
inout
dvosmerni signali (npr. dvosmerna vodila), ki se lahko pojavljajo na
obeh straneh prireditev
buffer
izhodni signali, ki pa jih lahko uporabljamo tudi na desni strani
prireditev in v pogojih
Primer deklaracije: buffer
entity increment is
port ( a: in std_logic_vector(3 downto 0);
incr_a : buffer std_logic_vector(3 downto 0);
flag : out std_logic );
end increment;
architecture one of increment is
begin
incr_a <= a + ‘1’;
flag <= ‘1’ when incr_a=“1111” else ‘0’;
end one;
Signal incr_a mora biti deklariran kot buffer, ker se pojavlja
na levi strani prireditve (kot izhod) in v pogoju (kot vhod)
Podatkovni tipi: vektorji
Vektorje uporabljamo za modeliranje večbitnih signalov
(vodil)
Območje indeksov običajno deklariramo od MSB proti LSB
signal a, b, c: std_logic_vector(7 downto 0);
signal high, low: std_logic_vector(3 downto 0);
• Podvektor:
high <= a(7 downto 4); -- 4 bitni podvektor
low <= a(3 downto 0); -- 4 bitni podvektor
sign <= a(7); -- sign je tipa std_logic
Operacije z vektorji
Logične operacije: and, or, not, xor, xnor...
Sestavljanje vektorjev: &
a <= high & low;
b <= sign & “000” & low;
• Pomikanje vektorjev
– pomik naredimo s sestavljanjem in podvektorjem
b <= a(6 downto 0) & ‘0’; -- pomik v levo
c <= ‘0’ & a(7 downto 1); -- pomik v desno
d <= a(6 downto 0) & a(7); -- rotacija v levo
Aritmetične operacije z vektorji
• Aritmetične operacije: +, -, *
– vključimo knjižnjico: std_logic_unsigned (nepredznačena) ali std_logic_signed (predznačena števila)
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
architecture one of test is
signal a, b, sum, inc, m: std_logic_vector(7 downto 0);
signal d, e: std_logic_vector(3 downto 0);
begin
sum <= a + b; -- 8 bitni seštevalnik
inc <= a + ‘1’;
-- ‘1’ se razširi na “00000001” in prišteje
m <= d * e;
-- 4 x 4 biti = 8 bitni rezultat
Podatkovni tipi: signed, unsigned
Predznačeni ali nepredznačeni vektorji
Vključimo knjižnico: IEEE.numeric_std
Definirane osnovne aritmetične operacije
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
architecture one of test is
signal a, b, sum, inc, m: unsigned(7 downto 0);
signal d, e: unsigned(3 downto 0);
begin
sum <= a + b; -- 8 bitni seštevalnik
inc <= a + ‘1’;
-- ‘1’ se razširi na “00000001” in prišteje
m <= d * e;
-- 4 x 4 biti = 8 bitni rezultat
Obravnava VHDL modelov vezij
Simulacija modela
na simulatorju določimo spreminjaje vhodnih signalov in
opazujemo izhode
Sinteza modela
program za sintezo določi zgradbo vezja, ki izhaja iz VHDL
modela
dogodek
a
b
carry
adder(one)
a
b
c
sum
carry
sum
Graf simulacije (waveform)
Sintetizirano vezje
Simulator diskretnih dogodkov
Dogodki so opisani z vrednostjo signala in časom ob
katerem se zgodijo
a
b
1 (100 ns)
1 (200 ns)
carry
sum
1 (105 ns)
0 (205 ns)
Ciklus simulatorja
1. simulator izračunava dogodke na signalih in jih
uvršča na seznam dogodkov
2. po vseh izračunih se poveča simulacijski čas in
3. izvrši dogodke, ki spremenijo vrednosti signalom
Potek simulacije
dogodek
adder
a
b
a
b
c
sum
carry
carry
c
Seznam dogodkov:
a: 0, 1 (T) carry: 0, 1 (T)
sum
korak
čas
a
b
carry
sum
c
seznam
0
0, 1(T)
0
0, 1(T)
0
0
izvrši
T
1
0
1
0
0
izračunaj
T
1
0
1
1(T+∆)
1(T+∆)
izvrši
T+∆
1
0
1
1
1
izračunaj
T+∆
1
0
1
0(T+2∆) 1
izvrši
T+2∆
1
0
1
0
1
Lastnosti realnih kombinacijskih vezij
Izhod se spremeni z zakasnitvijo (∆ > 0)
Večina vezij je večnivojskih
zaporedno vezana logična vrata
v času spremembe so na izhodu motnje!
Primer: seštevalnik in primerjalnik
add <= a + 1;
n <= '1' when add=0 else '0';
zakasnitev
motnja
20
x1
.
.
.
xn
fi(x)
Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
Digitalni Elektronski Sistemi
Osnove jezika VHDL
2. del: proces
1
Procesno okolje
Znotraj procesnega okolja so sekvenčni stavki
vrstni red stavkov je pomemben
med sekvenčne stavke spada pogojni (if) stavek
signalu lahko priredimo vrednost na vač mestih, dejansko se
izvrši le zadnja prireditev
primerjava: process (a, b)
begin
enako <= ‘0’;
if a=b then
enako <= ‘1’;
end if;
end process;
Zgradba procesnega okolja
oznaka: process (seznam signalov)
begin
.....
end process;
Z oznako poimenujemo del vezja, ki ga predstavlja
proces
Simulacija procesa se izvrši ob spremembi enega izmed
signalov iz seznama
pri opisu kombinacijskih vezij moramo navesti vse signale, ki
predstavljajo vhode v proces
Pogojni stavek (if)
–
–
–
Ob izpolnjenem pogoju se izvrši en ali več stavkov, ki so
zapisani za “then”
Opcija: če pogoj ni izpolnjen se izvršijo stavki za “else”
Pogojni stavek zaključimo z “end if ”
if pogoj then
stavki(1);
else
stavki(2);
end if;
if pogoj1 then
stavki(1);
elsif pogoj2 then
stavki(2);
else
stavki(3);
end if;
Primerjava s sočasnimi stavki
Pogojni stavek spada med sekvenčne stavke
uporabljamo ga lahko le znotraj procesa
Pogojni prireditveni stavek je alterativa med sočasnimi
stavki
p_max: process(a, b)
begin
if a>b then
max <= a;
else
max <= b;
end if;
end process;
=
max <= a when a>b else b;
Primerjava (2)
bin2bcd: process(bin)
begin
if bin>9 then
enice <= bin – “1010”;
desetice <= ‘1’;
else
enice <= bin;
desetice <= ‘0’;
end if;
end process;
enice <= bin - ”1010” when bin>9
else bin;
=
desetice <= ‘1’ when bin>9
else ‘0’;
V pogojnem stavku imamo lahko več prireditev
Zaporedje pogojev: prioriteta
p: process(int0, int1, int2)
begin
if int0=‘1’ then
v <= “01”
elsif int1=‘1’ then
v <= “10”;
elsif int2=‘1’ then
v <= “11”;
else
v <= “00”;
end if;
end process;
=
v <=”01” when int0=‘1’ else
“10” when int1=‘1’ else
“11” when int2=‘1’ else
“00”;
int0 ima prednost pred
int1, ki ima prednost pred
int2 ...
Zaporedni pogoji se ovrednotijo s prioriteto
Sekvenčni izbirni stavek (case)
Odločamo se glede na vrednost enega signala
Izbirni stavek nima prioritete
case ime_signala is
when vrednost1 =>
stavki(1);
when vrednost2 =>
stavki(2);
...
when others =>
stavki(n);
end case;
decod: process(digit)
begin
case digit is
when “00” =>
display <= “00111111”;
when “01” =>
display <= “00000110”;
when others =>
display <= “11111001”;
end case;
end process;
Primer: izbiralnik (multipleksor)
Izbiralnik s štirimi vhodi (a, b, c in d)
m: process(mode,a,b,c,d)
begin
if mode=“00” then
mux <= a;
elsif mode=“01” then
mux <= b;
elsif mode=“10” then
mux <= c;
else
mux <= d;
end if;
end process;
m: process(mode,a,b,c,d)
begin
case mode is
when “00” =>
mux <= a;
when “01” =>
mux <= b;
when “10” =>
mux <= c;
when others =>
mux <= d;
end case;
end process;
Sočasni izbirni stavek (with...select)
Na podlagi izbire
priredimo signalu
različne vrednosti (ali
izraze)
with izbira select
signal <= izraz(1) when vrednost1,
izraz(2) when vrednost1,
...
izraz(n) when others;
• Za razliko od case stavka lahko prirejamo vrednost
le enemu signalu
with digit select
display <= “00111111” when “00”,
“00000110” when “01”,
“11111001” when others;
Sekvenčni stavki in sinteza vezja
Prirejanje vrednosti signalom na več mestih
Če signalu pod kakšnim pogojem ne določimo
vrednosti, se bo ohranjala zadnja vrednost
dobimo sekvenčno vezje !
p: process(set_flag, clear_flag)
begin
if set_flag=‘1’ then
flag <= ‘1’;
elsif clear_flag=‘1’ then
flag <= ‘0’;
end if;
end process;
Naredili smo asinhroni
zapah za signal flag !
Opis kombinacijskih vezij
Definiramo vrednosti pri vseh pogojih:
vrednost priredimo pri vsakem “if” in “else” ali
vrednost priredimo na začetku procesa in jo spremenimo v
“if” stavkih
primerjava: process (a, b)
begin
if a=b then
enako <= ‘1’;
else
enako <= ‘0’;
end if;
end process;
primerjava: process (a, b)
begin
enako <= ‘0’;
if a=b then
enako <= ‘1’;
end if;
end process;
Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
Digitalni Elektronski Sistemi
Osnove jezika VHDL
3. del: sekvenčna vezja
1
Opis sekvenčnih vezij
Sinhrona sekvenčna vezja spreminjajo izhode ob fronti
ure
prva fronta: clk’event and clk=‘1’ ali rising_edge(clk)
zadnja: clk’event and clk=‘0’ ali falling_edge(clk)
reg: process (clk)
begin
if rising_edge(clk) then
q <= d;
end if;
end process;
clk
d
q
Sekvenčni elementi in sinteza vezja
Program za sintezo zna narediti register ali flip-flop, če
uporabimo ustrezno obliko opisa vezja
I. oblika: popolnoma
sinhrono vezje
reg: process (clk)
begin
if rising_edge(clk) then
q <= d;
end if;
end process;
II. oblika: asinhroni reset
reg: process (clk, reset)
begin
if reset=‘1’ then
q <= “00000000”;
elsif rising_edge(clk) then
q <= d;
end if;
end process;
Povratne zanke
Znotraj sinhronega procesa lahko uporabljamo
povratno zanko
na podlagi stanja registra izračunamo novo stanje
Npr. števec, pomikalni register, sinhroni avtomat
I. oblika
stev: process (clk)
begin
if rising_edge(clk) then
q <= q + ‘1’;
end if;
end process;
• signal q uporabljamo v
povratni zanki
• če je q zunanji signal,
mora biti buffer
Primer: BCD števec
BCD števec šteje od 0 do 9
II. oblika
I. oblika
stev: process (clk)
begin
if rising_edge(clk) then
if q < 9 then
q <= q + ‘1’;
else
q <= “0000”;
end if;
end if;
end process;
stev: process (clk)
begin
if reset=‘1’ then
q <= “0000”
elsif rising_edge(clk) then
if q < 9 then
q <= q + ‘1’;
else
q <= “0000”;
end if;
end if;
end process;
Zgradba vezja BCD števca
Signal q je register, ki ima na vhodu logiko
povratna zanka je med izhodom registra in logiko
stev: process (clk)
begin
if rising_edge(clk) then
if q < 9 then
q <= q + ‘1’;
else
q <= “0000”;
end if;
end if;
end process;
‘1’
“0000”
clk
+
q
Registri in flip-flopi
Prireditev vrednosti znotraj pogoja za fronto ure
pomeni, da je signal register ali flip-flop
I. oblika
4 bitni
register
flip-flop
acc: process (clk)
begin
if rising_edge(clk) then
a <= a + data;
if a=“1111” then
full <= ‘1’;
else
full <= ‘0’;
end if;
end if;
end process;
Potek simulacije
Procesni stavek se izvede ob spremembi clk
pogoj rising_edge() je izpolnjen, ko gre clk iz 0 na 1
acc: process (clk)
begin
if rising_edge(clk) then
a <= a + data;
if a=“1111” then
full <= ‘1’;
else
full <= ‘0’;
end if;
end if;
end process;
korak
čas
clk
data
a
full
čakaj
0
0, 1
1111
0000
0
račun
T
1
1111
1111
0
izvrši
T+d
1
1111
1111
0
čakaj
T2
0, 1
1111
1111
0
račun
T2+d
1
1111
1110
1
izvrši
T2+d
1
1111
1110
1
Časovni diagram in zgradba vezja
clk
a
1111 1110 1101
full
Signal full se postavi na ‘1’ šele
ob naslednji fronti ure
full je izhod iz flip-flopa !
• Vezje je sestavljeno iz registra (a), flip-flopa (full) in
logike na vhodih obeh sekvenčnih elementov
data
clk
a
logika
logika
full
Opis cevovodnih vezij
vhod
logika
r1
r2
logika
logika
izhod
r3
clk
pipe: process (clk)
begin
if rising_edge(clk) then
r1 <= vhod - “0011”;
if r1>10 then r2 <= r1;
else r2 <= “1010”;
end if;
r3 <= r2 xor “1010”;
end if;
end process;
Pri cevovodnih vezjih se
rezultati operacij sproti
shranijo v registre
clk
r1
r2
r3
a
b
c
a’
b’
c’
a’’
b’’
Signali v sinhronih vezjih
S signali poimenujemo povezave v vezju
Signali pri simulaciji:
ob izračunu izrazov se določi bodoča vrednost signala
(dogodek)
vrednost se priredi, šele ko se dogodki izvršijo
Signali pri sintezi:
v sinhronih procesih (I. ali II. oblika) vsak signal, ki mu
prirejamo vrednost pomeni register ali flip-flop
signali niso primerni za izračun vmesnih rezultatov s
kombinacijsko logiko
Spremenljivke (variable)
Spremenljivke uporabljamo v procesnem okolju za
izračun vmesnih rezultatov
ob izračunu spremenljivka takoj dobi novo vrednost
Deklaracija spremenljivke:
p: process (clk)
variable v: std_logic_vector(7 downto 0);
begin
Prireditveni operator (:=)
v := vhod - “0011”;
Sinteza vezja s spremenljivkami
vhod
logika
r1
logika
izhod
r2
clk
pipe: process (clk)
variable v: std_logic_vector (3 downto 0);
begin
if rising_edge(clk) then
v := vhod - “0011”;
if v>10 then
r1 <= v;
else
r1 <= “1010”;
end if;
r2 <= r1 xor “1010”;
end if;
end process;
spremenljivka ne
predstavlja model
povezave
spremenljivka ne
predstavlja registra
Zmogljivost vezja
zmogljivost vezja omejujejo zakasnitve
kombinacijske zakasnitve
od spremembe na vhodu do spremembe izhodov
poiščemo kritično pot in jo poskusimo skrajšati
ASIC: prevladujejo zakasnitve v logiki
lahko je več enakovrednih kritičnih poti
zmanjšamo s topologijo vrat, obremenitvijo in načrtovanjem
transistorjev
FPGA / CPLD: velike zakasnitve v povezavah
izbira kratkih in namenskih povezav
Poti in zakasnitve
kombinacijske zakasnitve merimo na poteh v vezju
vezje
graf
• največja zakasnitev je na kritični poti
Optimizacija sekvenčnega vezja
Cevljenje (pipelining) z dodajanjem registrov
L : latenca (zakasnitev med vh. in izh.)
T : pretok (frekvenca obdelave podatkov)
brez cevljenja
dvostopenjski cevovod
L=D
T=1/D
L = D + tFF
T≤2/D
D
Q
D
Q
Optimizacija površine vezja
Kompleksno množenje
(a + bi)(c + di) = ac – bd + (bc + ad)i
a
c
x
b
x
d
x
−
x
+
re
a
a
c
b
x
x
−
x
x
im
• 4 mult, 2 addsub
• 2 računska cikla
a
d
+
re
im
• 2 mult, 1 addsub
• 3 računski cikli
Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
Digitalni Elektronski Sistemi
Osnove jezika VHDL
Model in optimizacija vezja
1
Model vezja na nivoju RTL
Algoritem določa obnašanje vezja
Na nivoju RTL je določeno obnašanje vezja ob urinih
ciklih
pri algoritmu ni določen časovni potek izvajanja
sinteza vezij iz algoritma je precej zahtevna
sinteza vezij iz RTL opisa je danes običajna
Modeliramo prenos podatkov med pomnilnimi elementi
in (kombinacijske) transformacije
Primer: šifriranje podatkov
Blokovni algoritem s 4 iteracijami šifriranja
C++
int main(void)
{
char a, b, a_nov, b_nov;
char k[] = {0xff, 0x0f, 0x03, 0x30};
cin >> a;
cin >> b;
for (int i=0; i<=3; i++) {
a_nov = b;
b_nov = (b + k[i]) ^ a;
a = a_nov;
b = b_nov;
}
cout << a << b;
}
VHDL
Behavioral
for i in 0 to 3 loop
a_nov := b;
b_nov := (b + k(i)) xor a;
a := a_nov;
b := b_nov;
end loop;
1. vezje: razvijemo zanko
kombinacijska izvedba zanke
rezultat operacij vsakokrat shranimo v nov signal
sifr1: process(vhod, a0, b0, a1, b1, a2, b2, a3, b3, a4, b4 )
begin
a0 <= vhod(15 downto 8);
b0 <= vhod(7 downto 0);
a1 <= b0;
b1 <= (b0 + k(0)) xor a0;
a2 <= b1;
RTL
b2 <= (b1 + k(1)) xor a1;
a3 <= b2;
b3 <= (b2 + k(2)) xor a2;
a4 <= b3;
b4 <= (b3 + k(3)) xor a3;
end process;
VHDL
Rezultat 1. vezja
• registri na vhodu in izhodu
sifr1
vhd
clk
vhod
k0,k1
k2,k3
izhod
CPLD Xilinx XC95288XL-10
Površina: 56 makrocelic, 32 flip-flopov
Frekvenca ure: 26.8 MHz (53.6 MByte/s)
Kako povečati hitrost vezja?
izh
2. vezje: polna cevovodna izvedba
• cevovodna izvedba zanke
– rezultat vsake iteracije shranimo v register
vhod
a0
b1
a2
k0
b3
a4
k2
izhod
clk
b0
a1
b2
k1
a3
1. cikel
clk
izhod a0
izhod b0
a0
b0
b1
izhod b1
vhod
b0+k(0) xor a0
b0+k(0) xor a0
tpd tk
tpd
k3
b4
opazujmo vhod in
izhod registra b1
frekvenca ure je
omejena s tpd+tk+ts
vezje naj deluje le na
eno fronto ure!
Rezultat 2. vezja
• 4-stopenjski cevovod
vhod
a0
b1
a2
k0
b3
a4
k2
clk
b0
a1
k1
b2
a3
k3
CPLD Xilinx XC95288XL-10
• Površina: 80 makrocelic, 80 flip-flopov
• Frekvenca ure: 90.9 MHz
• Zmogljivost: 181.8 MByte/s
b4
izhod
3. vezje: dvostopenjski cevovod
vhod
a0
b1
a2
k0
b3
a4
k2
clk
b0
a1
k1
b2
a3
k3
b4
CPLD Xilinx XC95288XL-10
• Površina: 54 makrocelic, 48 flip-flopov
• Frekvenca ure: 46.1 MHz
• Zmogljivost: 92.2 MByte/s
izhod
4. vezje: sekvenčni procesor
Vezje razdelimo na podatkovni in kontrolni del
vodilo
clk
xor, +
ROM
register a
register b
podatkovna
pot
sprejmi1
vpis
sprejmi2
vpis
zanka
vpis
beri
krmilni
avtomat
oddaj1
beri
oddaj2
i<3
Podatkovna pot
a_in
A
b_in
K1
K2
K3
K4
B
+
b1
X
b2
4. Krmilni signali
a_in
b_in
loada
enable
A
K1
K2
K3
K4
B
+
b1
X
b2
adr
4. Podatkovna pot v jeziku VHDL
a_in
b_in
loada
enable
A
B
+
b1
k
pod: process(clk)
begin
if rising_edge(clk) then
if enable = '1' then
if loada = '1' then
a <= a_in;
elsif loadb = '1' then
b <= b_in;
else
a <= b;
b <= b2;
end if;
end if;
end if;
end process;
X
b2
b1 <= b + k;
b2 <= b1 xor a;
4. ROM v jeziku VHDL
za opis uporabimo zbirko (array)
architecture RTL of code is
...
type rom_type is array (0 to 3) of
std_logic_vector (15 downto 0);
constant rom : rom_type :=
("0000000000000001",
"0000000000000011",
"0000000000000111",
"0000000000001111");
signal adr: integer range 0 to 3;
...
begin
k <= rom(adr);
K1
K2
K3
K4
adr
4. Krmilno vezje
Algoritmični sekvenčni avtomat
sprejmi1
adr=0; enable=‘0’
loada=‘0’;loadb=‘0’
enable=‘0’
vpis
loada=‘1’; enable=‘1’
sprejmi2
loada=‘0’;
enable=‘0’
vpis
loadb=‘1’; enable=‘1’
zanka
adr++; loadb=‘0’;
adr=3
beri
outa=‘1’
outa=‘0’
beri
outb=‘1’;
Rezultat in primerjava
CPLD Xilinx XC95288XL-10
• Površina: 31 makrocelic, 22 flip-flopov
• Frekvenca ure: 84.7 MHz (10,6 Mbyte/s)
Vezje
Površina
f [MHz]
Mbyte/s
1. vezje
56
26.8
53,6
2. vezje
80
90.9
181,8
3. vezje
54
46.1
92,2
4. vezje
31
84.7
10,6
Končni avtomat (Finite State Machine)
Sekvenčno vezje s povratno zanko
register stanj
vhodna logika
Izhodna logika
Moorov avtomat:
vhodi
clk
16
stanje
logika
logika
izhodi
Primer končnega avtomata
Pri vsakem stanju določimo vrednosti izhodov
Start = ’1’
Enable = ‘0’
Enable = ‘0’
Done = ‘1’
S0
LD
K1
DN
Load = ‘0’
Enable = ‘1’
adr = 3
K2
K4
K3
Load = ‘0’
Enable = ‘1’
adr = 2
17
Load = ‘1’
Enable = ‘1’
Load = ‘0’
Enable = ‘1’
adr = 0
Load = ‘0’
Enable = ‘1’
adr = 1
Opis avtomata v jeziku VHDL
Določimo podatkovni tip, kjer naštejemo stanja
sinhroni proces za register stanj
architecture RTL of avtomat is
...
type stanja is (s0, ld, k1, k2, k3, k4, dn);
signal stanje, naslednje: stanja;
...
begin
K
regstanj: process (clk)
begin
if rising_edge(clk) then
stanje <= naslednje;
end if;
end process;
prehodi med stanji:
preh: process (stanje, start, adr)
begin
case stanje is
when s0 =>
if start = ‘1’ then
naslednje <= ld;
else
naslednje <= s0;
end if;
when ld =>
naslednje <= k1;
18
Avtomat z zunanjim števcem
namesto stanj v katerih spreminjamo adr uporabimo
zunanji števec
Load
Start
Avtomat
clk
Start = ’1’
Dnable
S0
Done
Reset
LD
Enable = ‘0’
Števec
Load = ‘1’
Enable = ‘1’
Reset = ‘1’
Adr
Adr < 4
DN
Ki
Enable = ‘0’
Done = ‘1’
Adr = 4
19
Load = ‘0’
Enable = ‘1’
Reset = ‘0’
Izhodna logika in števec
Kombinacijska logika za izhode (when … else)
Sinhroni proces za zunanji števec
20
Load <= '1' when stanje=ld else '0';
Enable <= '0' when stanje=s0 or stanje=dn else '1';
Done <= ‘1’ when stanje=dn else ‘0’;
Reset <= ‘1’ when stanje=ld else ‘0’;
stev: process(clk)
begin
if rising_edge(clk) then
if Reset=‘1’ then
Adr <= 0;
else
Adr <= Adr + 1;
end if;
end if;
end process;
-- mora biti sinhroni
kombinacijski izhodi imajo
šum ob prehajanju stanj
ne smemo jih uporabiti za
uro ali asinhroni reset…
šum odstranimo, če jih
pošjemo čez D flip-flop
Vhodni signali
Vhodni signali v sinhroni avtomat morajo biti sinhronizirani
z uro !
sicer prekršimo dinamični red in avtomat gre v poljubno stanje
Kako so kodirana stanja?
kodiranje stanj naredi program za sintezo vezja
nekatere kode ne predstavljajo stanja iz diagrama
V stavku case uporabimo when others=> kjer določimo v katero
stanje naj se premakne avtomat, če pride slučajno v nedefinirano stanje
binarno
S0= 000
LD= 001
K1= 010
K2= 011
K3= 100
K4= 101
DN=110
21
one-hot
S0 = 0000001
LD = 0000010
K1= 0000100
K2= 0001000
K3= 0010000
K4= 0100000
DN= 1000000
Končni avtomat z registrskimi operacijami
Kompakten opis sekvenčnega vezja
V enem procesu, opišemo register in prehajanje med stanji ter
operacije (npr. nalaganje registra, povečevanje – števec…)
avtomat: process (clk)
begin
if rising_edge(clk) then
case stanje is
when s0 =>
if start=‘1’ then
stanje <= ld;
reg <= vhod;
end if;
when ld =>
stanje <= ki;
Adr <= 0;
when ki =>
if Adr<3 then
22
Adr <= Adr + 1;
else
stanje <= dn;
end if;
when others =>
stanje <= s0;
end case;
end if;
end process;
Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
Digitalni Elektronski Sistemi
Vmesniki in sekvenčna vezja
Zaporedna in vzporedna vodila
1
Vmesniki in vodila
Električni vmesnik (interface)
sestavljen iz fizičnih povezav in priključkov ter logičnega vezja
Naloga digitalnih vmesnikov
prenos podatkov in dogodkov med dvema napravama
Vodilo (bus)
podatki se prenašajo po vodilu
vodilo omogoča prenos podatkov med dvema ali več napravami
Pasivno vodilo
npr. direktne povezave med procesorjem in pomnilnikom
Vodilo s krmilnikom
2
krmilnik poskrbi za usklajevanje prenosa podatkov
izvaja najnižji – fizični nivo prenosa (phy)
Kaj prenašamo po vodilu
Podatke
Ukaze oz. kontrolne signale
prenašajo se po besedah (byte)
izberi napravo / beri / piši
naslov izvora ali ponora podatkov
Signale, ki jih določa protokol prenosa
zahteve (request), prekinitve (interrupt)
potrditve (acknowledge)
časovno usklajevanje (sinhrono / asinhrono)
Kako prenašamo podatke
vzporedno po besedah (paralelni) ali zaporedno po bitih
(serijski prenos)
po smeri
enosmerno
dvosmerno (dvojno ali 3-stanjsko vodilo)
hkrati v obe smeri
po protokolu
enostaven cikel
blokovni prenos (burst)
manj usklajevanja, večji izkoristek vodila
Sinhronizacija prenosa podatkov
Sinhronizacija je pomembna za doseganje visokih hitrosti
dinamični red – izogibanje tekmovanju med signali
Sistemska sinhronizacija
izvor in ponor imata skupni oscilator za urni takt
podatki
izvor
tcbuf
tc1
tcq
td
ponor
tcbuf
tc2
oscilator
• Upoštevati moramo vse zakasnitve!
– pri nizkih hitrostih prenosa nimamo težav
Sinhronizacija pri izvoru podatkov
Izvor pošilja podatke in uro
source synchronous / clock forwarded (SDRAM)
podatki
izvor
tcq
tc
ura
td
ponor
td
oscilator
– dolžina linij za podatke in uro se mora ujemati
– v ponoru naredimo ponovno sinhronizacijo na
sistemsko uro
Lastna sinhronizacija podatkov
Podatkovni tok vsebuje podatke in uro
serijski prenos podatkov
podatki in ura
izvor
ponor
– izvor dela paralelno/serijsko pretvorbo in kodiranje
podatkov in ure
– ponor dela serijsko/paralelno pretvorbo in
rekonstrukcijo ure s fazno sklenjeno zanko (PLL)
Razvoj komunikacije v digitalnih sistemih
Vzporedni prenos podatkov po tiskanem vezju s
standardnimi napetostnimi nivoji (5V TTL/CMOS)
Paralelna vodila na plošči osebnega računalnika
vodilo ISA (Industry Standard Architecture, 1981/84)
IBM AT vodilo prenaša16 bitov pri 8 MHz, TTL
paralelno vodilo za disk (IDE/ATA)
Vzporedno vodilo Centronics
prenos podatkov do tiskalnika, na krajše razdalje
Zaporedna vodila
RS232, RS485 diferencialni nivoji omogočajo večje razdalje
Hitra zaporedna vodila
8
USB, Ethernet, PCI Express
Vodila v osebnem računalniku
sistemsko vodilo
pomnilnik SDRAM
32 bitov, 33 MHz (133MB/s)
64 bitov, 66 MHz (533MB/s)
hitri zaporedni vmesniki
64 bitov, 133 MHz, SSTL 2.5V
do 533 MHz, SSTL 1.5V
vzporedno vodilo PCI
odvisno od procesorja
PCIe (1-16 GB/s)
SATA (1.5-6 GB/s)
vmesniki za zunanja vodila
zaporedni USB, Ethernet
RS232, PS/2
Zaporedni (serijski) vmesniki
Najprimernejši za komunikacijo na daljše razdalje
Sinhroni serijski vmesniki
Asinhroni vmesniki
pošiljajo tudi uro
pošiljajo le podatke, uro mora sprejemnik rekonstruirati
Protokol določa vrstni red podatkovnih in kontrolnih bitov
Npr. vmesnik PS/2 pošlje najprej start (‘0’), nato pa podatkovne
bite od najnižjega (LSB) proti najvišjemu (MSB)…
Lastnosti zaporednih vmesnikov
Bitna hitrost = frekvenca s katero se prenašajo posamezni
biti, določa periodo za posamezni bit (T= fbit )
Podatkovni okvir
podatkovne bite vedno spremlja nekaj kontrolnih bitov
podatkovni okvir – start, kontrolna vsota ali pariteta, stop
okvir omogoča usklajevanje sprejemnika in oddajnika in
detekcijo ali odpravljanje napak pri prenosu
hitrost prenosa podatkov (podatkovni pretok) je zaradi okvirja
manjša od bitne hitrosti
Prenos poteka po povezavah z običajnimi logičnimi nivoji
(npr. na tiskanem vezju) ali diferencialnih povezavah (za
večje razdalje ali hitrosti prenosa)
11
Sinhroni zaporedni vmesnik – I2C
Ločen prenos ure (SCL) in podatkov (SDA) po vodilu
Enostavni vmesnik z dvema signalnima povezavama
I2C – serijski EEPROM, D/A in A/D pretvorniki, senzorji
Omogoča povezavo več enot na vodilo
Npr. mikroprocesor AVR ima vmesnik TWI (Two Wire
Interface) za komunikacijo po I2C protokolu
Sinhroni zaporedni vmesnik - SPI
Prenos ure (SCLK) ter podatkov iz glavne enote (MOSI)
in v glavno enoto (MISO)
Uporaba:
MMC, SD kartice, senzorji, nalaganje mikrokrmilnikov
prenos podatkov od MSB proti LSB
več podrejenih enot lahko vežemo vzporedno ali v verigo
13
Sinhroni zaporedni vmesnik – I2S
Serijski avdio vmesnik
Prenos ure (SCK), podatkov (SD) in izbire kanala (WS)
Uporaba:
avdio kodeki (AD in DA), digitalni signalni procesorji
enostaven protokol za prenos avdio podatkov
Ostali zaporedni protokoli za avdio
S/PDIF – zahteva ekstrakcijo ure iz podatkov
AC97 – prenos 256 bitnih paketov z avdio podatki in kontrolnimi
podatki za registre kodeka
14
Zgradba vezja za oddajnik I2S
15
Zaporedna pretvorba podatkov v vzporedno
Pretvorba s pomikalnim registrom (SIPO)
zaporedno vežemo toliko DFF, kolikor je dolg podatkivni paket
paziti moramo na zaporedje – prvi poslani bit je MSB ali LSB
Npr. 4-bitni pomikalni register, prvi bit je LSB
podatki se pomikajo v desno, proti LSB
p: process (CLOCK)
begin
if rising_edge(CLOCK) and ENABLE=‘1’ then
sr <= DATA & sr(3 downto 1);
end if;
end process;
16
Vzporedna zaporedna pretvorba (oddajnik)
Zaporedni oddajnik s pomikalnim registrom (PISO)
p: process (CLOCK)
begin
if rising_edge(CLOCK) then
if LOAD=‘1’ then
sr <= d;
else
sr <= ‘0’ & sr(3 downto 1);
end if;
end if;
end process;
DATA <= sr(0);
17
Pretvorba z izbiralnikom
Zaporedno vzporedno pretvorbo lahko naredimo z
registrom in izbiralnikom
18
števec bitov (bit_cnt) določa kateri podatek gre na izhod
Sinhronizacija sprejetih podatkov
Digitalni sistem običajno dela s svojo uro
Sinhronizacija z medpomnilniki
potrebujemo sinhronizacijo podatkov, ki se pomikajo z uro, ki
jo določa hitrost prenosa
uporabimo pomnilnik FIFO (First-In First-Out) z dvemi vrati, na
eni strani vpisuje podatke sprejemnik, na drugi jih bere sistem
Sinhronizacija ob vzorčenju
19
potrebujemo vsaj 2x višjo frekvenco kot je hitrost prenosa
vzorčimo uro in podatke ter detektiramo prehode ure za
določanje trenutka zajemanja podatkov
Asinhroni zaporedni vmesnik – RS232
Asinhroni sprejemnik in oddajnik (UART)
asinhroni podatkovni paketi, sprejemna ura se sinhronizira za
vsak paket – sinhronizacija paketov
vnaprej dogovorjene bitne frekvence
9600, 38400, 115200 bit/s
npr. podatkovni paket 8N1:
Asinhroni zaporedni vmesnik LIN
LIN (Local Interconnect Network)
enostaven protokol, ki je podoben RS232
razvit za avtomobilsko industrijo
V primerjavi z zmogljivejšim avtomobilskim vmesnikom
CAN je počasnejši in enostavnejši
uporaben za monitoring senzorjev
cenena izvedba vmesnika z mikrokrmilnikom
ne vsebuje robustnega odpravljanja napak
ni uporaben za varnostno kritične aplikacije
Podrobnosti prenosa podatkov
Sinhronizacija sprejemnika
min. 13 bitov logična 0, ki mu sledi 1 bit premora
sledi start bit (logična 0) in kombinacija 5516
min.
1 bit start 1
min. 13 bitov
0
1
0
1
0
1
0
Prenos v serijski obliki 8N1
start bit (logična 0), 8 podatkov in stop bit (log. 1)
0
start LSB
bit
1
2
3
4
5
6
7
MSB stop
bit
Asinhroni serijski oddajnik
Algoritmični avtomat
nov podatkovni bit se pošlje ob
clk in pogoju ce=‘1’
s števcem določimo hitrost
prenosa, ce je preliv števca
npr. fclk =1MHz, fbit = 38.4kHz
razmerje je 26,0416… zato
uporabimo števec po modulu
26 s prelivom:
if rising_edge(clk) then
if st < 25 then
st <= st + ‘1’; ce=‘0’
else
st <= “00000”; ce=‘1’
…
23
Asinhroni serijski sprejemnik
Glavna naloga sprejemnika je sinhronizacija paketa
Sinhronizacija s prevzorčenjem
vhodni signal vzorčimo z večkratnikom frekvence prenosa
Npr. signal ce4 je 4 x bitne frekvence
Delovanje sinhronizacije paketa
24
ob zaznanem startnem bitu (rx=0) postavimo števec i = 0
števec se nato povečuje z večkratnikom bitne frekvence
podatke beremo približno na sredini časovnega intervala za
posamezni bit
Asinhroni vzporedni prenos podatkov
Vodilo Centronics
8-bitni asinhroni prenos podatkov za zunanje naprave
Preprost usklajevalni protokol
PC z impulzom (strobe) označi nov podatek
naprava signalizira zasedenost (busy)
data
0.5µs 0.5µs
strobe
busy
• Dodatni signali
– prekinitev ob zaključku
– status naprave (out of paper, error...)
Izvedba vmesnika za vodilo Centronics
Podatke in kontrolne signale vzorčimo z lokalno uro
strobe vzorčimo dvakrat za detekcijo fonte!
clk
data1
stb1
stb2
busy
p: process (clk)
begin
if rising_edge(clk) then
if stb1=‘0’ and stb2=‘1’ then
busy <= ‘1’;
end if;
if stb1=‘1’ and stb2=‘0’ then
d <= data1;
...
Sinhrono vzporedno vodilo Wishbone
odprt standard za vodilo v integriranem vezju
enostaven protokol
različne povezovalne arhitekture
bralni, pisalni, blokovni prenos in RMW prenos
prenos podatka v enem urinem ciklu
točka s točko, deljeno vodilo, stikalo
sistem gospodar/podrejena enota (master/slave)
različne možnosti razširitev
osnovni prenos, registrski prenos
lastni signali (address, data ali cycle tag)
Povezovanje dveh enot
Osnovna povezava master/slave
Protokol vodila Wishbone
Sinhrono vodilo za povezovanje komponent znotraj
integriranega vezja
kontrolne signale gledamo ob fronti ure
CLK_I
STB_O
CYC_O
ACK se postavlja
asinhrono!
ACK_I
WE_O
DAT_O
ADR_O
MASTER
pisalni cikel
bralni cikel (DAT_I dobi podatke)
Primer podrejene enote (slave)
Npr. register na vodilu Wishbone
p: process (clk_i, rst_i)
begin
if rst_i=‘1’ then
q <= “00000000”;
elsif rising_edge(clk_i) then
if stb_i=‘1’ and we_i=‘1’ then
q <= dat_i;
end if;
end if;
end process;
ack_o <= stb_i;
Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
Digitalni Elektronski Sistemi
Osnove jezika VHDL
5. del: komponente in testne strukture
1
Komponente
Model vezja je sestavljen iz para entity-architecture
Modele vezja lahko povezujemo med seboj, tako da v opis
vezja vključimo vezja kot komponente
Strukturno načrtovanje
takšen princip uporabljamo pri risanju sheme vezja
struktura (zgradba) vezja, ki temelji na povezavi komponent
Hierarhična vezja
celotno vezje je sestavljeno iz komponent, ki so spet lahko
zgrajene iz komponent...
Deklaracija komponent v povezovalni strukturi
Komponente deklariramo v strukturi na začetku
arhitekturnega stavka (pred begin)
Navedemo ime komponente in zunanje priključke
(stavek port)
architecture struktura of test is
component reg is
port ( d : in std_logic_vector(7 downto 0);
clk, en : in std_logic;
q : out std_logic_vector(7 downto 0) );
end component;
begin
Vključevanje komponente v strukturo
Komponento vključimo v vezje s stavkom port map
vsaki komponenti damo enolično oznako
v oklepaju navedemo povezave
begin
r1: reg port map (d=>data, clk=>clk, en=>en1, q=>data_reg);
r2: reg port map (d=>data, clk=>clk, en=>en2, q=>op_reg);
...
end struktura;
Vključevanje komponent (2)
oznaka: ime_komp port map (sk1=>sv1, sk2=>sv2, sk3=>open);
Oznaka predstavlja ime dela vezja
oznake uporabljamo za poimenovanje procesov, komponent
in ostalih gradnikov vezja
Ime komponente je ime iz entity stavka
Povezovanje: najprej navedemo ime signala na
komponenti, ki ga priredimo signalu v vezju
če kakšen signal ni povezan, uporabimo open
Strukture za testiranje vezij
Testiranje s simulacijo, kjer simulator ročno nastavljamo
omejene možnosti, predvsem za preprosta vezja
simulator praktično nikoli ne poženemo le enkrat !
Testiranje s testno strukturo
6
v testni strukturi določimo časovni potek vhodov v vezje
ko je testna struktura narejena, jo večkrat uporabimo za
izvedbo simulacije vezja
v simulatorju se ni potrebno ukvarjati z nastavljanjem vrednosti
Testna struktura v jeziku VHDL
Testna struktura - Test Bench
model vezja (entity – architecture), ki običajno nima zunanjih
priključkov
Testna struktura vključuje testirano vezje kot
komponento
Za generiranje stimulatorjev (vhodov v vezje)
uporabljamo VHDL konstrukte brez omejitev
definiramo časovno spreminjanje signalov
uporabljamo stavke za izpis poročil med simulacijo
uporabljamo IO funkcije za branje in zapis datotek
Časovno spreminjanje signalov
Signalu lahko priredimo več dogodkov, ki so vezani na čas:
reset <= ‘0’, ‘1’ after 100 ns, ‘0’ after 200 ns;
data <= “00101100”, “ZZZZZZZZ” after 500 ns;
reset
data 00101110
0
ZZZZZZZZ
500
t(ns)
Kadar je v testu veliko dogodkov uporabimo proces
Prirejanje dogodkov le v najbolj preprostih primerih, npr. za
enkratne dogodke
Primer: test ALE
Deklaracija komponente in notranjih signalov
architecture behavior of test is
component ale is
port ( a, b : in std_logic_vector(7 downto 0);
op : in std_logic_vector(1 downto 0);
rez : out std_logic_vector(7 downto 0) );
end component;
signal a,b: std_logic_vector(7 downto 0);
signal op: std_logic_vector(1 downto 0);
signal rez: std_logic_vector(7 downto 0);
begin
Vključimo komponento v test
UUT: ALE port map (a=>a, b=>b, op=>op, rez=>rez);
9
Test ALE (2): nastavljanje vhodov
Napišemo proces v katerem spreminjamo vhode
časovni potek signalov določajo stavki wait for
uporabimo proces brez seznama signalov
stim_proc : process
begin
a <= "00000011";
b <= "00000010";
op <= "00";
-- operacija AND
wait for 100 ns;
op <= "01";
-- vsota
wait for 100 ns;
-- razlika
op <= "10";
wait for 100 ns;
-- odstej 1
op <= "11";
wait; -- zamrzni proces, da se ne ponavlja
end process;
10
Test ALE(3): rezultat simulacije
Ali lahko testna struktura samodejno preverja vezje?
Da, npr. preverimo ali je vsota takšna, kot jo pričakujemo:
op <= "01";
-- vsota
wait for 100 ns;
assert rez = 5 report "Napaka, vsota ni enaka 5 !";
…
11
Testiranje sekvenčnih vezij
Za generiranje ure uporabimo procesno okolje brez
seznama signalov in stavke wait for
proces se izvaja, dokler ga ne ustavimo z wait
GEN_URE: process
begin
clk <= ‘0’;
wait for 50 ns;
clk <= ‘1’;
wait for 50 ns;
end process;
GEN_URE: process
begin
if endsim=false then
clk <= ‘0’;
wait for 50 ns;
clk <= ‘1’;
wait for 50 ns;
else wait;
end if;
end process;
Primer: testiranje akumulatorja
akumulator_tb
stim
a
op
osc
clk
uut
b
a
op
clk
reg
reg
nula nula
akumulator
V testni strukturi naredimo zunanje povezave v vezju
b
b <= reg
V procesu osc naredimo generator ure
V procesu stim pa določimo časovni potek ostalih vhodov
13
Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
Digitalni Elektronski Sistemi
Načrtovanje v jeziku VHDL
Pravila načrtovanja v jeziku VHDL
1
Pred pisanjem kode naredi načrt
Pred kodiranjem je potrebno poznati strukturo vezja
Nariši diagram podatkovne poti
Naredi diagram stanj sekvenčnega vezja
šele ko so narejeni diagrami začni kodirati
Diagram stanj sekvenčnega vezja: FSM, ASM
3
Določi časovni potek signalov
4
Pravila
Vezje naj bo sinhrono
1.
Pravilno uporabljaj seznam signalov v procesu
2.
5.
6.
7.
5
vsi vhodi v kombinacijsko vezje
signal clk za sekvenčno vezje
le v testni strukturi je seznam lahko prazen
Določi vrednosti vsem izhodom,
3.
4.
Ne uporabljaj asinhronih signalov
pri kombinacijskem vezju v vseh primerih
Priredi vrednosti signalu le v enem procesu
Ne testiraj vrednosti X ali Z
Ne določaj zakasnitev v opisu vezja, ki ga boš sintetiziral
Ne delaj kombinacijskih zank
1. Vezje naj bo sinhrono
V vezju naj bo ena (globalna) ura
namesto deljenih signalov za uro raje uporabi hitro uro in
pogoj za omogočanje (Clock Enable)
Flip-flopi določajo signale za vhode komb. logike, ki ima
izhode vezane na flip-flope
v vsakem urnem ciklu je le ena sprememba vrednosti signala
Če je le možno NE uporabljaj asinhronih reset signalov
asinhroni signali morajo biti brez motenj
Ne uporabljaj nivojsko proženih zapahov (latch)
6
v vezju naj bodo le robno proženi flip-flopi
1. Vezje naj bo sinhrono
Uporabi le en pogoj za fronto ure
sicer se vezje ne bo dalo sintetizirati!
p: process(start, stop)
begin
if rising_edge(start) then
en_reg <= '1';
elsif rising_edge(stop) then
en_reg <= '0';
end if;
end process;
7
p1: process(start, stop)
begin
if stop='1' then
en_reg <= '0';
elsif rising_edge(start) then
en_reg <= '1';
end if;
end process;
1. Vezje naj bo sinhrono
ne uporabljaj asinhronih signalov !
8
2. Pravilno določi seznam signalov v procesu
v kombinacijskem vezju morajo biti vsi vhodi
9
2. Seznam signalov v sekvenčnem procesu
v seznamu je le ura in morebitni asinhroni reset
10
3. Določi vrednosti izhodom v vseh primerih
sicer bodo v vezju zapahi
11
3. Določi vrednosti izhodom v vseh primerih
dovoljen_prehod <= '1' when luc=zelena;
dovoljen_prehod <= '1' when luc=zelena else '0';
ali:
d: process(luc)
begin
if luc=zelena then
dovoljen_prehod <= '1';
elsif luc=rdeca then
dovoljen_prehod <= '0';
end if;
end process;
12
3. Določi vrednosti izhodom v vseh primerih
določi privzete vrednosti
13
4. Vrednost priredimo le v enem procesu!
p1: process(clk)
begin
if rising_edge(clk) then
if tipka='1' then
delam_reg <= '1';
end if;
end if;
end process;
p1: process(clk)
begin
if rising_edge(clk) then
if tipka='1' then
delam_reg <= '1';
elsif q=5 then
delam_reg <= '0';
end if;
end if;
end process;
14
p2: process(clk)
begin
if rising_edge(clk) then
q <= q + 1;
if q=5 then
delam_reg <= '0';
end if;
end if;
end process;
p2: process(clk)
begin
if rising_edge(clk) then
q <= q + 1;
end if;
end process;
5. Ne primerjaj vrednosti z X ali Z!
Deluje na simulaciji, vendar ne po sintezi!
15
6. Ne uporabljaj zakasnitev v opisu vezja
Zakasnitve so del simulacijske testne strukture
programu za sintezo ne moremo določiti zakasnitev
a <= c xor d after 20 ns;
Ne uporabljaj procesov s stavki wait za sintezo vezja !
16
7. Ne delaj kombinacijskih zank
Povratna vezava v kombinacijskem vezju ni dobra praksa
C <= not C;
a <= a + 1;
vezje bo osciliralo ali delovalo le v posebnih primerih
17
Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
Digitalni Elektronski Sistemi
Programirljiva vezja in
mikro-programiranje
FPGA, mikro-programirano krmilno vezje
1
Programirljiva vezja / procesorji
programirljivo vezje
programski biti določajo strukturo (konfiguracijo)
LC
LC
delovanje logičnih celic (LC)
povezave znotraj LC
povezave v povezovalni mreži
LC
mikroprocesor
program določa ukaze, ki jih CPE izvaja
pomnilnik
2
LC
CPE
Programirljiva vezja CPLD / FPGA
Complex Programmable Logic Device
polje PLD gradnikov
Flash tehnologija
manjša vezja
PLD
PLD
PLD
Field Programmable Gate Array
3
matrika LC in povezav, dodatno RAM,
CPU…
CMOS SRAM tehnologija
zelo velika vezja
LC
LC
LC
RAM
LE
CPE
LE
LC
LC
LC
LC
Podrobnejša zgradba FPGA
pri programiranju vpišemo vrednosti v konfiguracijski RAM
tehnološka preslikava
določa delovanje logičnih celic (LC) in povezave v mreži
načrtovano vezje preslikamo v strukturo
vezja FPGA
logična celica
LUT, MUX, DFF
prenosna logika
dodatne funkcije
LC
bx
a4
a3
a2
a1
clk
4
0000 0
0001 1
0010 1
...
vpogledna
tabela
y
MUX
0
D
yq
flip-flop
pomnilni
element
Tehnološko preslikano vezje
Xilinx FPGA
•
•
rezultat avtomatične
preslikave
načrtovanje vezja
poteka na višjem
nivoju
xc3s50 tq144
500 tabel (LUT)
280 D flip-flopov
8 kB DPRAM
~ 270k log. vrat
5
Sekvenčno vezje s povratno vezavo
3-bitni seštevalnik in 3-bitni register = 3-bitni števec
vezje zasede 3 logične celice
0 0 0
+
a0 a1 a2
0 0 1
b0 b1 b2
0 1 0
s0 s1 s2
Sekvenčno vezje ima 23 = 8 stanj (000 do 111)
6
Sekvenčno vezje: krmilni avtomat
Sekvenčno vezje vsebuje n-bitni register za 2n stanj
Diagram prehajanja stanj
7
Izvedba vhodne logike s tabelami (LUT)
vsebina LUT določa prehajanje stanj
mir
t='1'
impulz
t='0'
spusti
8
t
Mikro-programirano krmilno vezje
Krmilni avtomat narejen z LUT je mikro-programiran
mikro-programirano vezje ima krmilne vrednosti shranjene v
pomnilniku vrste ROM ali RAM
mikroukazi so besede v
pomnilniku
mikroprogram je
zaporedje mikroukazov
v programski pomnilnik
vrste RAM lahko
vpisujemo mikroukaze
9
naslov
programski
pomnilnik
5
VHOD
podatek
6
4
stanje
register stanj
4 naslednje stanje
IZHOD
Mikro-programiran krmilnik s števcem
Programski števec omogoča izvedbo skokov
izvajanje algoritmov, ki nimajo vseh mikroukazov v zaporedju
N
programski
pomnilnik
naslov
load
števec
M
podatek
naslov
izhod
N
IZHOD
10
Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
Digitalni Elektronski Sistemi
Procesorji
Mikro-programirana procesna enota, primeri
1
Mikro-programiran krmilnik s števcem
Mikroukazi
mikroprogram se izvaja kot
zaporedje mikroukazov
mikroukazi določajo
krmilne izhode
skočni ukazi ob pogoju
izvršijo skok na nov naslov
krmilni izhodi pogoj
naslov
+1
reg (PC)
podatkovna
pot
naslov
programski
pomnilnik
2
mikroukaz
Mikro-programirana krmilna (procesna) enota
izvršilna enota z ALE
in pomnilnikom
krmilni izhodi pogoj
naslov
+1
reg (PC)
ALE
status
naslov
register
register
register
register
3
podatk.
pomnilnik
programski
pomnilnik
mikroukaz
Mikrooperacije
Aritmetično-logična enota (ALE) izvaja računske
mikrooperacije, npr.:
Krmilni izhodi izbirajo operacijo, operande in izhodni
register
Skočne operacije spremenijo zaporedje izvajanja ukazov
4
operand je v registru ali v pomnilniku
brezpogojni skok, ali pogojni skok, glede na rezultat zadnje
operacije – status: prenos, negativni rezultat, rezultat 0…)
Kode in koraki izvajanja mikrooperacij
za direktno krmiljenje enot z mikroukazi potrebujemo
veliko bitov
npr. 4 bite za ALE, 12 za registre, 16 za pomnilnik….
krmilni signali so kodirani
potrebujemo ukazni dekoder
mikroukazi se izvršijo v več urnih ciklih
bolj optimalna kritična pot in višja frekvenca ure
nekaterih operacij ne moremo narediti v enem ciklu
5
npr. branje in pisanje v pomnilnik
Von Neumannov model računalnika
Centralno procesna enota (CPE) in pomnilnik
vhodno – izhodna enota skrbi za komunikacijo z zunanjostjo
podatkovno vodilo
glavni
pomnilnik
registri
ALE
ukazni reg.
izvršilna enota
prog. števec
naslov
krmilna enota
delovanje CPE določa nabor ukazov
ukazi so prilagojeni programskim jezikom (C/C++)
vhodnoizhodna
enota
Osnovni gradniki mikroprocesorja
Mikroprocesor na integriranem vezju vsebuje izvršilno in
krmilno enoto
Mikroprocesor potrebuje za delovanje:
zunanjo uro in reset
zunanji pomnilnik s programskimi ukazi in podatki
vhodno in izhodno (periferno) enoto za komunikacijo z okolico
periferna enota je lahko del pomnilnika (na določenih naslovih)
ali pa poteka komunikacija preko posebnih V/I ukazov
V praksi potrebujemo vsaj dve vrsti pomnilnika
7
za program takšnega, ki ohranja vsebino (ROM, Flash)
za delovne podatke pa pomnilnik s hitrim branjem in pisanjem
(RAM – Random Access Memory)
Mikroprocesorji za vgrajene naprave
Mikrokrmilniki so sistemi na integriranem vezju, ki
vsebujejo
mikroprocesorsko jedro (izvršilno in krmilno enoto),
programski in podatkovni pomnilnik,
ter različne V/I vmesnike:
vzporedna vrata (Port)
zaporedne komunikacijske vmesnike: I2C, SPI, UART
analogno / digitalne (A / D) in D / A pretvornike
modulatorje (PWM), časovnike, števce…
komunikacijske krmilnike: Ethernet MAC, USB
Primer mikrokrmilnikov
8
Atmel AVR, 8-bitni procesor na razvojnem sistemu Arduino
ARM-7, 32-bitni procesor na razvojnem sistemu Š-ARM
Procesorsko jedro AVR
Ukaze izvaja v dveh korakih (urnih ciklih)
1.
2.
prenesi ukaz iz pomnilnika v ukazni register (fetch)
dekodiraj, izvrši ukaz (ALE) in shrani rezultat (execute)
podatkovno vodilo
Flash
(program)
programski
števec
status
registri
ukazni reg.
ALE
dekodirnik
RAM
(podatki)
9
Procesorsko jedro ARM-7
Ukaze izvršuje v treh ciklih:
prenesi
dekodiraj
izvrši
Beri Pomakni ALE Shrani
ukazni reg.
podatk. reg.
krmilna enota
programski
števec
pomikalnik
ALE
10
množilnik
registri
Učni procesor: CPU-12
koda
naslov
12-bitni podatek
+1
reg (PC)
code
FSM
ALE
adr
naslov
akumulator
glavni
pomnilnik
mikroukaz
ukazi z akumulatorjem, en operand je v pomnilniku
1.
2.
11
prenesi 4-bitno ukazno kodo in naslov operanda iz pomnilnika
prenesi operand (12 bitni podatek) in izvedi ukaz
Potek izvedbe programa
0 : lda 3
1 : add 3
2 : jmp 0
3: 5
12
0001
0000 0011
1000
0000 0011
0100
0000 0000
0000 0000 0101
Nadgradnja: vhodno – izhodna enota
Dat_i
koda
naslov
12-bitni podatek
+1
reg (PC)
code
FSM
ALE
adr
naslov
akumulator
Dat_o
13
glavni
pomnilnik
Wr_o
mikroukaz
Nadgradnja ALE
zgradimo univerzalne celice za posamezen bit
aritmetične operacije: seštej (s prenosom), odštej, prištej 1…
logične operacije: AND, OR, XOR
sel(3:0 p(1:0)
0000
0001
0010
0011
0100
0101
0110
1x01
1x10
1x11
14
00
01
10
11
00
01
10
00
00
00
m(1:0)
Cprop
00
00
00
00
00
00
00
01
10
11
0
0
0
0
0
1
0
0
0
0
Cinv
0
0
0
0
0
0
1
0
0
0
Cset
ukaz
0
0
1
0
1
0
0
0
0
0
lda
add
sub
dec
inc
adc
sbc
anda
ora
xora
Laboratorij za načrtovanje integriranih vezij
Univerza v Ljubljani
Fakulteta za elektrotehniko
Digitalni Elektronski Sistemi
Delovanje procesorja AVR
Zbirnik, primer programa
1
Procesor Atmel AVR ATmega328
Procesorsko jedro AVR
8 bitno, frekvenca do 20 MHz pri 5V / 10 MHz pri 3.3V
131 strojnih ukazov, RISC
zmogljivost 1 ukaz/cikel (20 MIPS pri 20MHz)
(razen skočnih ukazov)
periferne enote: časovniki, vzporedni in zaporedni vmesniki,
večkanalni A/D pretvorniki in modulatorji PWM
Pomnilni elementi
32KB Flash (program)
1KB EEPROM in 2KB SRAM (podatki)
32 registrov
2
8 bitni registri R0-R31
3 registrski pari za16 bitne vrednosti (X,Y, Z)
Delovanje AVR procesorskega jedra
programski števec vsebuje
naslov naslednjega ukaza
IR vsebuje naslednji ukaz
ID vsebuje trenutni ukaz
Registri: R0-R31
ALE – glej označeno
interno podatkovno pot
Flash programski pomnilnik
16 oz. 32 bitni ukazi
RAM vsebuje delovne
podatke
EEPROM trajni podatki
3
počasen dostop, omejeno
število vpisov v pomnilnik
8-bitno podatkovno vodilo
Flash
(program)
prog.
števec
status
registri
ukazni reg.
IR
ALE
ukazni dek.
ID
RAM
(podatki)
EEPROM
Nabor strojnih ukazov procesorja AVR
mikrooperacije
aritmet. / logične podatkovni prenos
a+b
ADD
reg1=reg2
MOV
operacije z biti
a-b
SUB
reg=17
LDI
a<<1
LSL
a&b
AND
reg=mem
LDS
a>>1
LSR,
a|b
OR
reg=*mem
LD
a++
INC
mem=reg
STS
ØC
(ni v C)
ROL,
ROR
a--
DEC
*mem=reg
ST
-a
NEG
periferni
IN
statusni
biti
a=0
CLR
periferni
OUT
SEI,
CLI,
CLZ...
sklad
PUSH
ni
operacije
NOP
sklad
POP
…
…
…
4
…
…
…
Primer ukazov in njihove strojne kode
Naloži neposredno konstanto (Rd <= K)
LDI Rd, K
strojna koda: 1110 bbbb rrrr bbbb
omejitve: registri R16-R31; konstanta K < 255
LDI R16, $2C
koda: 1110 0010 0000 1100 ali $E20C
Seštej in shrani v Rd (Rd <= Rd + Rr)
ADD Rd, Rr
strojna koda: 0000 11rd dddd rrrr
Rd in Rr sta katerakoli registra R0-R31
ADD R16, R17
5
ddddd je 10000, rrrrr je 10001, koda ukaza: $0F01
Strojni program
Naloži program v pomnilnik
na naslov 0 shranimo $E20C
na naslov 1 shranimo $E01F
na naslov 2 shranimo $0F01
0000: $E20C LDI R16, $2C
0001: $E01F LDI R17, $0F
0002: $0F01 ADD R16, R17
Izvršimo zaporedje treh ukazov
nastavi prog. števec na 0 in izvedi 3 ukazne cikle (prenos/izvrši)
Pregled rezultata:
R16
= R16 + R17
= $2C + $0F
= $3B
Kaj se bo izvršilo po teh treh ukazih?
ne vemo, odvisno kaj je zapisano v pomnilniku Flash…
6
Sintaksa ukazov v zbirniku (Assembler)
3 možne oblike, [] pomenijo opcijo
[oznaka:] direktiva operandi [;komentar]
[oznaka:] ukaz operandi [;komentar]
[oznaka:] [;komentar]
Vsaka vrstica je direktiva ali ukaz ali oznaka ali pa prazna
vrstica
komentar začnemo s podpičjem, zaključi se na koncu vrstice
direktiva
ukaz in operand
oznaka
7
komentar
Skočni ukazi in primeri v jeziku C
JMP, RJMP: brezpogojni skok
npr. neskončna zanka:
M_LOOP:
…ukazi…
jmp M_LOOP
while (1) {
...ukazi...
}
CALL, RET: klic podprograma in vrnitev (return)
npr. podprogram:
M_LOOP:
…
CALL FV
…
FV:…ukazi…
RET
8
void fv() { …ukazi…
return;
}
void main () {…
fv();
}
Pogojni stavek
Skoči na L1, če je a==b, sicer skoči na L2
naredimo s kombinacijo pogojnih in brezpogojnih skokov
M_LOOP:
; primerjaj,
CPSE a, b ; preskoči, če a=b
JMP L2
L1:…
; a == b
JMP M_LOOP
L2:…
; a != b
JMP M_LOOP
while (1) {
if (a==b) {
(L1)
} else {
(L2)
}
}
CPSE (compare, skip if equal) preskoči naslednji ukaz (JMP L2)
če sta operanda enaka, tako da se izvršijo ukazi za oznako L1.
Hitro nastane zmešnjava – NARIŠI DIAGRAM POTEKA!
9
Pogojni skočni ukazi
Skok, ki se izvede glede na rezultat prejšnjega ukaza
Aritmetični in logični ukazi shranijo rezultat in zastavice
Primerjava (CP) naredi odštevanje, vendar ne shrani
rezultat ampak samo postavi zastavice
Z=1, če je rezultat 0,
N=1,če je rezultat negativen,
C=1, če je prišlo do prenosa
Npr. BRNE: skok, kadar je rezultat različen od 0 (Z=0)
BREQ, skok, kadar je rezultat enak 0 (Z=1)
10
Zanke s 16-bitnim števcem
For zanka, ki se ponovi 20000-krat ($4E20)
LDI temp0, 0x20
LDI temp1, 0x4E
LOOP:
...
DEC temp0
BRNE LOOP
DEC temp1
BRNE LOOP
; spodnji bajt
; zgornji bajt
for (i=20000; i!=0; i--)
{
...
};
; odštej 1
; skok če !=0
Najprej se DEC temp0 ponovi32-krat (0x20), dokler ni 0
Potem se izvršita vgnezdeni zanki
temp0 se ponovi 256-krat, temp1 pa 78-krat ($4E), kar
je skupaj 19968-krat (če dodamo 32 dobimo 20000)
11
Dostop do perifernih enot
vzporedna vrata (I/O port)
nastavi
4 vh. in
4 izh. bite
beri
vhode
izhodi
12
LDI R19, $F0
OUT DDRD, R19
IN R20, PORTC
LDI R21, $50
OUT PORTD, R21
smer
izhodna vred.
/ pullup
vhodna vred.
DDRx
PORTx
PINx
Seštevanje 16-bitnih nepredznačenih števil
Vsak izmed operandov je shranjen v dveh bajtih
Najprej seštejemo spodnja bajta, nato pa še zgornja bajta
z upoštevanjem prenosa od spodnjih
Npr.
prvi operand je v (R1, R0)
drugi operand je v (R3, R2)
ADD R0, R2
ADC R1, R3
seštej s prenosom
13
+
R1
R0
R3
R2
R1
R0
unsigned short a, b;
a = a + b;
Množenje in deljenje
Nekateri procesorji AVR imajo 8-bitni strojni množilnik
Rezultat se izračuna v dveh urnih ciklih in shrani v R1 R0
Npr. R16 vsebuje vrednost 100, R17 vsebuje vrednost 200
MUL R16, R17
produkt je 16-bitna vrednost, rezultat: R1 <= $4E, R2 <= $20
Množenje ali deljenje z 2 s pomikanjem bitov
Pomakni bite v bajtu na levo (LSL) ali desno (LSR)
Npr. LDI R16, 0b11011100; (22010)
LSL R16; rezultat 0b10111000 (18410) in zastavica C=1
LSR R16; rezultat 0b01101110 (11010), C=0
14
prazna mesta se zapolnijo z ničlami
bit, ki pri prenosu izpade, se shrani v zastavico C
Primer: filtriranje podatkovnega toka
Zaporedje digitalnih vzorcev pošljemo skozi sito
obdelava zvoka, slike …
Filtriranje izvedemo z matematično konvolucijo, kjer
zaporedne vzorce množimo s konstantami in seštejemo
Npr. Gaussovo nizko sito s koeficienti 1/8, 6/8, 1/8
vzorec1
X 1/8
vzorec2
X 6/8
vzorec3
X 1/8
Σ
rezultat1
15
rezultat2
vzorec4
Izvedba konvolucije s procesorjem
8-bitne vzorce preberemo iz PINB
naredimo množenje s 6 in seštejemo 16-bitne vrednosti
naredimo deljenje z 8 s pomikom in rotacijo
loop:
MOV r22, r21 ;premakni
MOV r21, r20 ;premakni
IN r20, PINB ;beri
R22
16
r21, Konst6
r0, r20
r1, Konst0
r0, r22
r1, Konst0
; x6
;vsota
;prenos
;vsota
;prenos
R21
R20
X 6
+
MUL
ADD
ADC
ADD
ADC
PINB
R1
R0
Konst0
R20
R1
R0
Izvedba konvolucije s procesorjem 2
naredimo deljenje z 8 s pomikom in rotacijo
pošljemo rezultat na PORTD
R1
R0
C
LSR
ROR
LSR
ROR
LSR
ROR
r1
r0
r1
r0
r1
r0
; 3x pomik
; in rotacija
OUT PORTD, r0
JMP loop
17
; izhod
Delovanje procesorja
Za izračun enega rezultata potrebujemo 20 urnih ciklov
Kako vemo, kdaj je na voljo podatek (rezultat) ?
1.
Naredimo usklajevalni protokol z uporabo ostalih
priključkov
2.
Napišemo zanko v prekinitveni rutini
18
potrebnih je še več ciklov
procesor ob zuanjem prekinitvenem signalu skoči na rutino
in napravi en računski cikel
komunikacijske enote izvedejo prekinitev, ko dobijo nov
podatek