06.09.2013 Views

Digitale electronica en processoren Digitale electronica en ...

Digitale electronica en processoren Digitale electronica en ...

Digitale electronica en processoren Digitale electronica en ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Digitale</strong> <strong>Digitale</strong> <strong>electronica</strong> <strong>electronica</strong> <strong>electronica</strong> <strong>en</strong> <strong>en</strong> processor<strong>en</strong><br />

processor<strong>en</strong><br />

Hfdst Hfdst 2) Digitaal Digitaal ontwerp<br />

ontwerp<br />

Digitaal Digitaal ontwerp ontwerp in in in grote grote grote lijn<strong>en</strong><br />

lijn<strong>en</strong><br />

Wanneer we e<strong>en</strong> digitaal ontwerp mak<strong>en</strong>, doorlop<strong>en</strong> we e<strong>en</strong> aantal stapp<strong>en</strong> <strong>en</strong> <strong>en</strong> niveaus niveaus van abstractie<br />

om tot het eindproduct te kom<strong>en</strong>. Dit proces is afhankelijk van<br />

- k<strong>en</strong>nis <strong>en</strong> de mogelijkhed<strong>en</strong> van het bedrijf dat de chip maakt,<br />

- de m<strong>en</strong>s<strong>en</strong> die het ontwerp moet<strong>en</strong> mak<strong>en</strong><br />

- waarvoor de chip moet di<strong>en</strong><strong>en</strong><br />

- hoe snel die af moet zijn <strong>en</strong>zo<br />

Docum<strong>en</strong>ter<strong>en</strong> : Van elk systeem dat we mak<strong>en</strong> moet<strong>en</strong> we uiteindelijk opschrijv<strong>en</strong> wat het doet doet, doet<br />

hoe het intern werkt <strong>en</strong> hoe het bedi<strong>en</strong>d bedi<strong>en</strong>d moet word<strong>en</strong>. We kunn<strong>en</strong> achteraf niet in de chip te kijk<strong>en</strong>.<br />

- voor de gebruiker gebruiker, gebruiker<br />

om het digitale systeem te kunn<strong>en</strong> gebruik<strong>en</strong><br />

- voor de hersteller hersteller, hersteller<br />

omdat die moet wet<strong>en</strong> hoe iets ine<strong>en</strong> steekt om het te kunn<strong>en</strong> herstell<strong>en</strong><br />

- om het ding verder te kunn<strong>en</strong> ontwikkel<strong>en</strong> <strong>en</strong> verbeter<strong>en</strong><br />

De De ontwerpcyclus ontwerpcyclus zelf zelf : :<br />

:<br />

Specificatie Synthese Analyse<br />

1) Specificatie : e<strong>en</strong> beschrijving van de functionaliteit van het digitale systeem (wat het doet)<br />

Daarbij hoort de int interface int<br />

erface : de interactie tuss<strong>en</strong> het systeem <strong>en</strong> de buit<strong>en</strong>wereld (bedi<strong>en</strong>ing & control)<br />

Eerste stap is e<strong>en</strong> beschrijving in e<strong>en</strong> natuurlijke taal die ruwweg zegt wat het ding moet do<strong>en</strong> :<br />

dit impliceert e<strong>en</strong> blokschema (flow-chart) waarbij elke blok e<strong>en</strong> eig<strong>en</strong> functionaliteit heeft<br />

met in- <strong>en</strong> uitgang<strong>en</strong> <strong>en</strong> waarbij we logische interconnecties hebb<strong>en</strong> tuss<strong>en</strong> de blokk<strong>en</strong>.<br />

(= soort van weg met ja-nee-vraagjes)<br />

De specificaties in e<strong>en</strong> natuurlijke taal zijn dikwijls zeer onvolledig : taal is dubbelzinnig <strong>en</strong><br />

soms onduidelijk. Daarom wordt de specificatie vaak later aangevuld <strong>en</strong> gewijzigd tijd<strong>en</strong>s het<br />

ontwerpproces wanneer m<strong>en</strong> op dubbelzinnighed<strong>en</strong> of onduidelijkhed<strong>en</strong> stuit.<br />

M<strong>en</strong> moet oppass<strong>en</strong> dat m<strong>en</strong> niet reeds vorm<strong>en</strong> van implem<strong>en</strong>tatie implem<strong>en</strong>tatie of realisatie beschrijft,<br />

omdat de onnodige beperking<strong>en</strong> oplegt : Specificatie mog<strong>en</strong> alle<strong>en</strong> zegg<strong>en</strong> wat wat het ding moet<br />

do<strong>en</strong>, niet hoe het dat moet do<strong>en</strong> !<br />

2) Synthese Synthese : we gaan over van het niveau specificatie, dat zegt wat wat het systeem moet do<strong>en</strong>,<br />

naar e<strong>en</strong> basic beschrijving over hoe we dat gaan do<strong>en</strong> <strong>en</strong> waarmee waarmee. waarmee<br />

We zull<strong>en</strong> beschrijv<strong>en</strong> welke fysische middel<strong>en</strong> we zull<strong>en</strong> gebruik<strong>en</strong> <strong>en</strong> hoe we de functionaliteit<strong>en</strong><br />

zull<strong>en</strong> organiser<strong>en</strong> organiser<strong>en</strong>.<br />

organiser<strong>en</strong><br />

We zull<strong>en</strong> dit do<strong>en</strong> in in stapp<strong>en</strong> stapp<strong>en</strong> : telk<strong>en</strong>s naar e<strong>en</strong> niveau dat lager ligt (meer specifiek). We blijv<strong>en</strong><br />

elk compon<strong>en</strong>t opsplits<strong>en</strong> tot alle compon<strong>en</strong>t voorkom<strong>en</strong> als basic-bouwblokk<strong>en</strong> in de bibliotheek.


- SysteemSynthese : onderverdel<strong>en</strong> in blokk<strong>en</strong> met eig<strong>en</strong> functionaliteit <strong>en</strong> de interconnectie <strong>en</strong><br />

interactie tuss<strong>en</strong> de blokk<strong>en</strong>. (geheug<strong>en</strong>s, processors, ASIC’s)<br />

- ArchitectuurSynthese : elke blok heeft e<strong>en</strong> eig<strong>en</strong> algoritme of flowchart <strong>en</strong> word<strong>en</strong> opgebouwd<br />

uit e<strong>en</strong> aantal compon<strong>en</strong>t<strong>en</strong> op RTL-niveau. (opteller, teller, registers, optellers)<br />

- sequ<strong>en</strong>tieel ontwerp : Finite-state-machine bschrijving omzett<strong>en</strong> in poort<strong>en</strong> <strong>en</strong> flipflops<br />

- combinatorisch ontwerp : booleaanse uitdrukking<strong>en</strong> mak<strong>en</strong> met poort<strong>en</strong><br />

- circuit-ontwerp : poort<strong>en</strong> mak<strong>en</strong> met transistor<strong>en</strong><br />

- fysisch ontwerp : transistors mak<strong>en</strong> met halfgeleideropppervlakk<strong>en</strong><br />

Bibliotheek Bibliotheek van compon<strong>en</strong>t<strong>en</strong> : verzameling ontwerp<strong>en</strong> van basis basis-functionaliteit<strong>en</strong><br />

basis<br />

functionaliteit<strong>en</strong> die op e<strong>en</strong> chip<br />

gemaakt kunn<strong>en</strong> word<strong>en</strong>. Bedoeling is om e<strong>en</strong>voudige basiscompon<strong>en</strong>t<strong>en</strong> niet steeds opnieuw te<br />

moet<strong>en</strong> ontwerp<strong>en</strong>. (economisch) We herbruik<strong>en</strong> dus ontwerp<strong>en</strong> van eerder ontworp<strong>en</strong><br />

functionaliteit<strong>en</strong> <strong>en</strong> combiner<strong>en</strong> die tot e<strong>en</strong> groter ontwerp. Ontbrek<strong>en</strong>de functionaliteit<strong>en</strong> kunn<strong>en</strong><br />

we dan zelf mak<strong>en</strong> of kop<strong>en</strong>.<br />

bibliothek<strong>en</strong> bevatt<strong>en</strong> ontwerp<strong>en</strong> op verschill<strong>en</strong>de niveau’s niveau’s :<br />

- processor<strong>en</strong>, meer specifieke processor<strong>en</strong><br />

- optellers, tellers : meest optimale combinaties van registers <strong>en</strong> poort<strong>en</strong><br />

- logische poort<strong>en</strong> : manier<strong>en</strong> om e<strong>en</strong> logische poort te mak<strong>en</strong> met transistors<br />

- transistor<br />

We zi<strong>en</strong> dat de niveau’s van de bibliothek<strong>en</strong> steeds hoger word<strong>en</strong> omdat de schaal steeds groter<br />

wordt (integratie van grotere del<strong>en</strong>).<br />

De ontwerp<strong>en</strong> in de bibliothek<strong>en</strong> moet<strong>en</strong> zeer goed gedocum<strong>en</strong>teerd zijn. Zo wet<strong>en</strong> ontwerpers<br />

direct hoe ze het ontwerp moet<strong>en</strong> gebruik<strong>en</strong>, zonder de interne werking te moet<strong>en</strong> bestuder<strong>en</strong><br />

3) Analyse Analyse : test<strong>en</strong> of het systeem voldoet aan de de specificaties specificaties. specificaties<br />

Dit do<strong>en</strong> we na elke synthesestap.<br />

We test<strong>en</strong> op :<br />

functionaliteit : doet het wat het moet do<strong>en</strong><br />

kostprijs : deze is ev<strong>en</strong>redig met de oppervlakte van de chip <strong>en</strong> het aantal pinn<strong>en</strong><br />

vermog<strong>en</strong>verbruik : C*f* V² : dit is in de loop der jar<strong>en</strong> sterk toeg<strong>en</strong>om<strong>en</strong><br />

toeg<strong>en</strong>om<strong>en</strong>. toeg<strong>en</strong>om<strong>en</strong><br />

M<strong>en</strong> probeert dit sterk<br />

terug te dring<strong>en</strong> voor (1) mobiele toepassing<strong>en</strong> met batterij<br />

(2) de warmteproductie warmteproductie (al dit vermog<strong>en</strong> wordt omgezet in warmte)<br />

- C is de capaciteit : oppervlakte waarop gewerkt kan word<strong>en</strong> 0.25 naar 4 cm² (we kunn<strong>en</strong><br />

meer op één chip zett<strong>en</strong>)<br />

- f is de frequ<strong>en</strong>tie frequ<strong>en</strong>tie : vooral deze factor is sterk toeg<strong>en</strong>om<strong>en</strong> : 1MHz naar 1GHz (we do<strong>en</strong> meer<br />

bewerking<strong>en</strong> per seconde)<br />

- V is het voltage waarop gewerkt wordt : dit is gedaald in de tijd van 5 naar 1.5 volt (we<br />

gebruik<strong>en</strong> minder stroom omdat we nauwkeuriger werk<strong>en</strong>)<br />

snelheid : hoe snel de chip zijn functionaliteit uitvoert :<br />

- vertraging tuss<strong>en</strong> ingangsignaal <strong>en</strong> e<strong>en</strong> uitgangrespons (het kritische pad)<br />

- klokperiode (= frequ<strong>en</strong>tie)<br />

- tijd die nodig is om e<strong>en</strong> bepaald algoritme of programma uit te voer<strong>en</strong><br />

of de throughput (aantal resultat<strong>en</strong> per seconde)<br />

testbaarheid : we test<strong>en</strong> elke chip wanneer de gemaakt is op foute responsie responsie op testsignal<strong>en</strong><br />

- we will<strong>en</strong> zoveel mogelijk fabricagefout<strong>en</strong> kunn<strong>en</strong> ontdekk<strong>en</strong> ontdekk<strong>en</strong><br />

ontdekk<strong>en</strong><br />

- we will<strong>en</strong> die zo zo snel snel snel mogeli mogelijk mogeli jk kunn<strong>en</strong> ontdekk<strong>en</strong> (met zo weinig mogelijk tests)


Gegev<strong>en</strong>svoorstelling<br />

Gegev<strong>en</strong>svoorstelling<br />

1) Getall<strong>en</strong> Getall<strong>en</strong> digitaal digitaal voorstell<strong>en</strong> voorstell<strong>en</strong> :<br />

Maak in dit stuk goed onderscheidt tuss<strong>en</strong> getall<strong>en</strong> <strong>en</strong> cijfers !<br />

In digitale system<strong>en</strong> zull<strong>en</strong> we alle vorm<strong>en</strong> van getall<strong>en</strong> verwerk<strong>en</strong> <strong>en</strong> opslag<strong>en</strong> als binaire getall<strong>en</strong><br />

bestaande uit bits.<br />

Positieel numeriek systeem : we schrijv<strong>en</strong> e<strong>en</strong> getal D in e<strong>en</strong> bepaald talstelsel als e<strong>en</strong><br />

ope<strong>en</strong>volging van cijfers cijfers. cijfers<br />

De waarde van het getal is de gewog<strong>en</strong> som van de waarde van de cijfers.<br />

De waarde waarde of het gewicht van elk cijfer di hangt af van zijn positie in het getal : elke positie komt<br />

overe<strong>en</strong> met e<strong>en</strong> macht van het grondtal r : d*ri .<br />

Dit grondtal grondtal r noemt de radix <strong>en</strong> is thev<strong>en</strong>s het aantal gebruikte cijfers. De positie van het cijfer (dus<br />

zijn macht van het grondtal) bepal<strong>en</strong> we t.o.v. het radixpunt radixpunt : dat is het cijfer op positie nul dat<br />

gewoon zijn eig<strong>en</strong> waarde heeft (macht 0 van het grondtal). We schrijv<strong>en</strong> het talstelsel waarin e<strong>en</strong><br />

getal geschrev<strong>en</strong> is rechts onder het getal wanneer dit nodig is.<br />

Bv 1234,5610 (in decimale notatie)<br />

m−1<br />

∑<br />

D = d Ld , d Ld<br />

≡ D = d ⋅ r<br />

r m−1 0 −1 −n<br />

i<br />

i=− n<br />

= 1·103 + 2·102 + 3·101 + 4·100 + 5·10−1 + 6·10−2 = 1·1000 + 2·100 + 3·10 + 4·1 + 5·0,1 + 6·0,01<br />

MSB MSB (most-significant-bit) is het cijfer vooraan dat dus het grootste gewicht gewicht <strong>en</strong> dus het meest<br />

bepal<strong>en</strong>d is voor de waarde van het getal. De LSB (least-significant-bit) is het cijfer achteraan <strong>en</strong> heeft<br />

dus het kleinste gewicht gewicht. gewicht<br />

Verschill<strong>en</strong>de talstelsels :<br />

Binair : radix 2 / cijfers 0 <strong>en</strong> 1<br />

Octagonaal : radix 8 / cijfers 0 tot 7<br />

Hexadecimaal : radix 16 / cijfers 0 tot 9 <strong>en</strong> A tot F (A=10 B=11 C=12 D=13 E=14 F=15)<br />

Radix Radix-conversie<br />

Radix<br />

conversie : Overgaan van het <strong>en</strong>e talstelsel naar het andere doe je best door e<strong>en</strong> klein<br />

geme<strong>en</strong> geme<strong>en</strong> veelvoud veelvoud van beide radix<strong>en</strong> te zoek<strong>en</strong>, daarnaar om te zett<strong>en</strong>, de cijfers te hergroeper<strong>en</strong> <strong>en</strong><br />

dan kan je vlot naar de beoogde radix overgaan.<br />

bv. overgaan tuss<strong>en</strong> octale of hexadecimale<br />

hexadecimale radices do<strong>en</strong> we door om te zett<strong>en</strong> naar binair<br />

talstels<strong>en</strong> (radix 2, klein geme<strong>en</strong> veelvoud van 8 <strong>en</strong> 16), dan de bits te groeper<strong>en</strong> in groep groep<strong>en</strong> groep<br />

<strong>en</strong> van<br />

3 of 4, <strong>en</strong> dan kunn<strong>en</strong> we elk groepje appart vlot omzett<strong>en</strong> in e<strong>en</strong> hexadecimaal resp. octagonaal<br />

cijfer.<br />

Wanneer er ge<strong>en</strong> klein geme<strong>en</strong> veelvoud veelvoud is, gaan we best over naar decimaal talstelsel <strong>en</strong> zett<strong>en</strong> we<br />

dan verder om naar het beoogde talstelsel.<br />

We mak<strong>en</strong> gebruik van de formule D = ((…((dm-1) r + dm-2 ) r + … ) r + d1 ) r + d0<br />

overgaan van radix r naar decimaal : beginn<strong>en</strong>d bij het meest beduid<strong>en</strong>de cijfer nem<strong>en</strong> we<br />

telk<strong>en</strong>s e<strong>en</strong> cijfer, verm<strong>en</strong>igvuldig<strong>en</strong> met de radix r <strong>en</strong> tell<strong>en</strong> het volg<strong>en</strong>de cijfer op, … tot we<br />

uiteindelijk het laatste cijfer opgetelt hebb<strong>en</strong>.<br />

overgaan van decimaal decimaal naar radix r : telk<strong>en</strong>s del<strong>en</strong> door radix r, de rest opschrijv<strong>en</strong> als meest<br />

beduid<strong>en</strong>d cijfer, <strong>en</strong> dan het quotiënt nog e<strong>en</strong>s del<strong>en</strong> door radix r, weer rest noter<strong>en</strong>, …<br />

(modulo = bewerking)<br />

i


2) Rek<strong>en</strong><strong>en</strong> Rek<strong>en</strong><strong>en</strong> met met binaire binaire natuurlijke natuurlijke getall<strong>en</strong><br />

getall<strong>en</strong><br />

Optelling <strong>en</strong> aaftrekking<br />

a<br />

ftrekking zijn analoog met het decimale systeem. Steeds de 2 cijfers met hetzelfde<br />

gewicht (dezelfde macht van de radix) optell<strong>en</strong> of aftrekk<strong>en</strong>.<br />

- Overdracht (= carrey) : wanneer we 1+1 krijg<strong>en</strong> wordt dit nul <strong>en</strong> drag<strong>en</strong> we e<strong>en</strong> 1 over naar de<br />

volg<strong>en</strong>de macht van het grondtal.<br />

- L<strong>en</strong><strong>en</strong> L<strong>en</strong><strong>en</strong> (= borrow) : wanneer we 0 – 1 krijg<strong>en</strong>, moet<strong>en</strong> we e<strong>en</strong> 1 gaan l<strong>en</strong><strong>en</strong> bij de hogere macht<br />

(die heeft waarde 2) waar we dan dus 1 van aftrekk<strong>en</strong> <strong>en</strong> nog 1 overhoud<strong>en</strong>.<br />

Verm<strong>en</strong>igvuldiging <strong>en</strong> deling is ook analoog aan het decimaal systeem. Voor elke 1 in de<br />

verm<strong>en</strong>igvuldiger herhal<strong>en</strong> we het verm<strong>en</strong>igvuldigtal onder de ander<strong>en</strong>, <strong>en</strong> elke verm<strong>en</strong>igvuldiger<br />

keer zodanig verschov<strong>en</strong> dat zijn positie overe<strong>en</strong>komt met de positie van de overe<strong>en</strong>komstige 1 (de<br />

juiste macht). Optell<strong>en</strong> van al deze verschov<strong>en</strong> verm<strong>en</strong>igvuldigers geeft het product.<br />

Het aantal optelling<strong>en</strong> is het aantal bits van de verm<strong>en</strong>igvuldiger. (kan ook efficiënter)<br />

bv. Optell<strong>en</strong> : Aftrekk<strong>en</strong> :<br />

Product : Deling :<br />

3) Negatieve Negatieve getall<strong>en</strong><br />

getall<strong>en</strong><br />

Met n bits kan je 2 n getall<strong>en</strong> binair voorstell<strong>en</strong>. Wanneer we nu ook hun 2 n negatieve equival<strong>en</strong>t<strong>en</strong><br />

will<strong>en</strong> gebruik<strong>en</strong>, hebb<strong>en</strong> we 2 n+1 getall<strong>en</strong> <strong>en</strong> hebb<strong>en</strong> we zowiezo e<strong>en</strong> extra bit nodig. We kunn<strong>en</strong> die<br />

bit nu op 2 manier<strong>en</strong> toevoeg<strong>en</strong> :<br />

1) Sing Sing-magnitude<br />

Sing magnitude voorstelling :<br />

We zett<strong>en</strong> hier voor voor elke elke getal getal e<strong>en</strong> tek<strong>en</strong>bit tek<strong>en</strong>bit. tek<strong>en</strong>bit<br />

Het binaire getal bestaat dan uit zijn waarde (magnitude)<br />

<strong>en</strong> e<strong>en</strong> extra bit als tek<strong>en</strong> (sign). De tek<strong>en</strong>bit staat vooraan (MSB) <strong>en</strong> is 0 voor + <strong>en</strong> 1 voor -.<br />

Merk op dat we nu 2 notaties hebb<strong>en</strong> voor 0 (als -0 : 00…0 <strong>en</strong> +0 : 10…0).<br />

Dit is ge<strong>en</strong> ge<strong>en</strong> goed goed systeem systeem voor de optelling (<strong>en</strong> verm<strong>en</strong>igvuldiging, wat neerkomt op e<strong>en</strong> som).<br />

We moet<strong>en</strong> immers voor elke bewerking eerst de tek<strong>en</strong>s vergelijk<strong>en</strong> vergelijk<strong>en</strong> <strong>en</strong> in functie daarvan<br />

handel<strong>en</strong> (tel de tek<strong>en</strong>bits niet zomaal op !).<br />

We kunn<strong>en</strong> op basis hiervan e<strong>en</strong> optel-algoritme opstell<strong>en</strong>, dat traag <strong>en</strong> weinig gebruikt is :<br />

- zelfde zelfde tek<strong>en</strong>s : behoud tek<strong>en</strong> <strong>en</strong> tel op<br />

- verschill<strong>en</strong>d verschill<strong>en</strong>d tek<strong>en</strong> : als zelfde getall<strong>en</strong> : geeft nul /<br />

als verschill<strong>en</strong>de getall<strong>en</strong> : trek kleinste van grootste af <strong>en</strong> neem tek<strong>en</strong> grootste


2) Twee Twee-complem<strong>en</strong>t<br />

Twee complem<strong>en</strong>t<br />

complem<strong>en</strong>t voorstelling :<br />

De tek<strong>en</strong>bit wordt niet expliciet g<strong>en</strong>oteerd maar wordt verwev<strong>en</strong> in het 2-complem<strong>en</strong>t<br />

complem<strong>en</strong>t<br />

complem<strong>en</strong>t.<br />

complem<strong>en</strong>t<br />

(cijfer)----complem<strong>en</strong>t (cijfer) (cijfer) (cijfer) complem<strong>en</strong>t complem<strong>en</strong>t complem<strong>en</strong>t D’ D’ D’ D’ van getal D bekom<strong>en</strong> we door in D elk cijfer te vervang<strong>en</strong> door door zijn<br />

zijn<br />

complem<strong>en</strong>t<br />

complem<strong>en</strong>t, complem<strong>en</strong>t dat is het cijfer dat erbij opgeteld (r-1) geeft. We vervang<strong>en</strong> het grootst mogelijke cijfer<br />

door het kleinst mogelijke, het 2de grootste door het 2de kleinste, <strong>en</strong>z.<br />

- voor radix 10 is dit het 9-complem<strong>en</strong>t<br />

complem<strong>en</strong>t<br />

complem<strong>en</strong>t :<br />

we vervang<strong>en</strong> 9 door 0, 8 door 1, 7 door 2, 6 door 3, 5 door 4, <strong>en</strong> omgekeerd<br />

- voor radix 22<br />

2<br />

is dit het 1-complem<strong>en</strong>t<br />

complem<strong>en</strong>t<br />

complem<strong>en</strong>t : we vervang<strong>en</strong> 0 door 1 <strong>en</strong> omgekeerd<br />

radix----complem<strong>en</strong>t radix radix radix complem<strong>en</strong>t complem<strong>en</strong>t complem<strong>en</strong>t D* D* D* D* van e<strong>en</strong> getal D is r m - D met m het aantal cijfers in D.<br />

- voor radix 10 is dit het 10-complem<strong>en</strong>t : bv. Voor D=591 is D*=10³-591=1000-591=409<br />

- voor radix 2 is dit het 22-complem<strong>en</strong>t<br />

2<br />

complem<strong>en</strong>t : bv. Voor D=101 is D*=2³-101=1000-101=011<br />

Eig<strong>en</strong>schap : D*=D’+1 : Dit is e<strong>en</strong> heel makkelijke manier om het radix radix-complem<strong>en</strong>t radix<br />

complem<strong>en</strong>t complem<strong>en</strong>t van e<strong>en</strong> getal<br />

te te zoek<strong>en</strong> zoek<strong>en</strong>. zoek<strong>en</strong> (handige manier om de negatieve versie van e<strong>en</strong> binair getal te berek<strong>en</strong><strong>en</strong>)<br />

- Wanneer we nu met e<strong>en</strong> vast aantal bits (n) (n) werk<strong>en</strong>, zi<strong>en</strong> we dat D* = rn-D = 0-D = -D<br />

(rn bestaat volledig uit null<strong>en</strong> als we de n laatste cijfers bekijk<strong>en</strong>).<br />

Daarom is D* e<strong>en</strong> logische voorstelling voor -D<br />

- Wanneer we het radix radix-complem<strong>en</strong>t radix<br />

complem<strong>en</strong>t van 0 nem<strong>en</strong>, zi<strong>en</strong> we dat we opnieuw nul krijg<strong>en</strong>, buit<strong>en</strong><br />

het feit dat we overdracht van 1 krijg<strong>en</strong> bij de meest beduid<strong>en</strong>de bit. Lat<strong>en</strong> we die overdracht weg<br />

(= we behoud<strong>en</strong> altijd n cijfers) dan is het radix-complem<strong>en</strong>t van 0 gelijk aan 0.<br />

We zijn nu verlost van -0 <strong>en</strong> +0<br />

E<strong>en</strong> negatief binair getal wordt nu voorgesteld door zijn 2-complem<strong>en</strong>t<br />

complem<strong>en</strong>t : dit is e<strong>en</strong>voudig te<br />

berek<strong>en</strong><strong>en</strong> door alle cijfers om te draai<strong>en</strong>, 1 op te tell<strong>en</strong> <strong>en</strong> de ev<strong>en</strong>tuele overdracht van de meest<br />

beduid<strong>en</strong>de bit weg te lat<strong>en</strong>. 0 wordt wordt nu op op zichzelf afgebeeld afgebeeld, afgebeeld <strong>en</strong> elk cijfer heeft e<strong>en</strong> unieke<br />

negatieve voorstelling. Deze voorstelling van negatieve getall<strong>en</strong> is vooral handig bij optell<strong>en</strong> <strong>en</strong><br />

aftrekk<strong>en</strong>.<br />

- Let wel dat elke voorstelling van e<strong>en</strong> negatief getal in 2-complem<strong>en</strong>t de positieve voorstelling is<br />

e<strong>en</strong> ander getal in sign-magnitude. We moet<strong>en</strong> dus afsprek<strong>en</strong> waar we over bezig zijn (2-<br />

complem<strong>en</strong>t of ‘ ‘sign ‘<br />

sign sign-magnitude<br />

sign magnitude magnitude’) magnitude<br />

- het 2-complem<strong>en</strong>t van e<strong>en</strong> getal van n bits ligt tuss<strong>en</strong> (-2n-1 ) <strong>en</strong> (2n-1-1). We kunn<strong>en</strong> dus met n bits ofwel n positieve getall<strong>en</strong> afbeeld<strong>en</strong>, ofwel (n/2) (n/2)-1 (n/2)<br />

1 positieve <strong>en</strong> n/2<br />

negatieve negatieve. negatieve Het 2-compem<strong>en</strong>t kan nu gebruikt word<strong>en</strong> voor de (n/2) negatieve getall<strong>en</strong>, daar elk<br />

positief getal e<strong>en</strong> n-complem<strong>en</strong>t heeft dat niet tot de (n/2)-1 positieve getall<strong>en</strong> behoort.<br />

Bv. voor 4 bits : getall<strong>en</strong> tss 7 <strong>en</strong> -8 voorstelbaar met 4 bits.<br />

0…7 = 0000…0111 <strong>en</strong> -1…-8 = 1111….1000<br />

- merk op dat elke binaire combi gebruikt is<br />

- merk op dat elk negatief getal e<strong>en</strong> 1 heeft als meest beduid<strong>en</strong>d cijfer, <strong>en</strong> positieve getall<strong>en</strong><br />

<strong>en</strong> nul e<strong>en</strong> 0. Dit zal later handig blijk<strong>en</strong> (heeft dus dezelfde voordel<strong>en</strong> als sign-magnitude).<br />

Optell<strong>en</strong> Optell<strong>en</strong> <strong>en</strong> <strong>en</strong> aftrekk<strong>en</strong> aftrekk<strong>en</strong> is met het 2-complem<strong>en</strong>t veel handiger dan met sing-magnitude.<br />

Regels waarop we moet<strong>en</strong> lett<strong>en</strong> bij het optell<strong>en</strong> :<br />

Wanneer we 2 negatieve getall<strong>en</strong> van n bits in 2-complem<strong>en</strong>t optell<strong>en</strong>, is het correcte resultaat<br />

de n minst minst beduid<strong>en</strong>de bits van het bekom<strong>en</strong> resultaat. Dit komt neer op het lat<strong>en</strong> vall<strong>en</strong> van de<br />

meest beduid<strong>en</strong>de carrey-over bit. Zorg er dus altijd voor dat je altijd met e<strong>en</strong> vast vast aantal bits<br />

werkt. Bv.


Wanneer we 2 getall<strong>en</strong> van n bits met zelfde tek<strong>en</strong> optell<strong>en</strong> kan de som buit<strong>en</strong> het voorstelbare<br />

bereik van n bits vall<strong>en</strong> (zowel te groot als te klein). We krijg<strong>en</strong> dan e<strong>en</strong> verkeerd resultaat bij het<br />

optell<strong>en</strong> : overflow overflow. overflow We kunn<strong>en</strong> overflow detecter<strong>en</strong> door het tek<strong>en</strong> van beide op te tell<strong>en</strong><br />

getall<strong>en</strong> (hebb<strong>en</strong> hetzelfde tek<strong>en</strong>) te vergelijk<strong>en</strong> met dat van het resultaat. Wanneer ze<br />

verschill<strong>en</strong>d zijn hebb<strong>en</strong> we overflow. Bv.<br />

Voor het aftrekk<strong>en</strong> van getall<strong>en</strong> nem<strong>en</strong> we gewoon het 2-complem<strong>en</strong>t van wat er afgetrokk<strong>en</strong> moet<br />

word<strong>en</strong> <strong>en</strong> tell<strong>en</strong> we dat op.<br />

Modulus Modulus : A mod B is de rest van A bij deling door B.<br />

A A rem rem B B = a – ( [het geheel aantal keer dat b in a past] x b)<br />

Wanneer we van e<strong>en</strong> binair binair getal getal modulus 2 n will<strong>en</strong>, komt dit neer op de n laatste bits te lat<strong>en</strong> vall<strong>en</strong><br />

4) Niet Niet gehele gehele getall<strong>en</strong> getall<strong>en</strong> : : floating floating poits poits <strong>en</strong> <strong>en</strong> beweg<strong>en</strong>de beweg<strong>en</strong>de komma<br />

komma<br />

Vaste komma : i gehele getall<strong>en</strong> voor de komma, f fractionele getall<strong>en</strong> na de komma.<br />

Voorgesteld als fix<br />

- optelling : fix + fix geeft getal met f=max(f f=max(f1,f f=max(f<br />

,f ,f2) ,f <strong>en</strong> i=max(i i=max(i1,i i=max(i ,i ,i2)+1 ,i )+1<br />

waarbij de +1 volgt uit de ev<strong>en</strong>tuele overdracht van de binaire som<br />

Tell<strong>en</strong> we n keer hetzelfde getal op dan wordt i=max(i1,i2)+log2(n) daar we telk<strong>en</strong>s overdracht<br />

krijg<strong>en</strong> van 1 bit<br />

- product : fix x fix geeft e<strong>en</strong> getal met f=f f=f1+f f=f +f +f2 +f <strong>en</strong> i=i i=i1+i i=i<br />

+i +i2 +i<br />

De ess<strong>en</strong>tie ess<strong>en</strong>tie is hier dat we bij het uitvoer<strong>en</strong> van bewerking<strong>en</strong> telk<strong>en</strong>s getall<strong>en</strong> bijkrijg<strong>en</strong> bijkrijg<strong>en</strong>. bijkrijg<strong>en</strong><br />

Wanneer we<br />

in e<strong>en</strong> e<strong>en</strong> schakeling e<strong>en</strong> vast aantal bits voorzi<strong>en</strong> voor e<strong>en</strong> getal is dit ge<strong>en</strong> handige manier om te<br />

werk<strong>en</strong>. Daarom zull<strong>en</strong> we het systeem van de vlott<strong>en</strong>de komma komma komma invoer<strong>en</strong> om met e<strong>en</strong> vast aantal<br />

bits per getal te rek<strong>en</strong><strong>en</strong>.


Vlott<strong>en</strong>de komma : In plaats van de komma e<strong>en</strong>der waar in het getal te lat<strong>en</strong> staan, zull<strong>en</strong> we hem<br />

nu telk<strong>en</strong>s tot net achter de meest beduid<strong>en</strong>de bit schuiv<strong>en</strong>. We moet<strong>en</strong> dan onthoud<strong>en</strong> hoeveel<br />

plaats<strong>en</strong> hij verschov<strong>en</strong> is : dit do<strong>en</strong> we door het getal te verm<strong>en</strong>igvuldig<strong>en</strong> met de juiste macht van<br />

de radix (door de macht te onthoud<strong>en</strong> kunn<strong>en</strong> we de komma altijd terug op zijn plaats zett<strong>en</strong>).<br />

E<strong>en</strong> getal in beweg<strong>en</strong>de komma bestaat uit : [signbit][expon<strong>en</strong>t][fractie].<br />

- signbit signbit signbit signbit S SS<br />

S : 0 voor + <strong>en</strong> 1 voor – zodat we het volledige getal kunn<strong>en</strong> lat<strong>en</strong> beginn<strong>en</strong> met (-1) s<br />

- expon<strong>en</strong>t expon<strong>en</strong>t expon<strong>en</strong>t expon<strong>en</strong>t E EE<br />

E : de macht van de radix R waarmee we de mantisse moet<strong>en</strong> verm<strong>en</strong>igvuldig<strong>en</strong><br />

om de komma op de juiste plaats te zett<strong>en</strong>. Is dus ook het aantal plaats<strong>en</strong> dat de komma<br />

verschov<strong>en</strong> is.<br />

We will<strong>en</strong> nu eig<strong>en</strong>lijk liefst niet met negatieve expon<strong>en</strong>t<strong>en</strong> werk<strong>en</strong> : we zull<strong>en</strong> hem coder<strong>en</strong><br />

in excess-code g<strong>en</strong>aamd characteristic. Dit houdt is dat we bij de expon<strong>en</strong>t e<strong>en</strong> bias bias optell<strong>en</strong> :<br />

bias bias B B =2 =2e-1-1<br />

met e het aantal bits voor de fractie. De bias heeft nu de grootte van de meest<br />

negatieve expon<strong>en</strong>t die we kunn<strong>en</strong> voorstell<strong>en</strong> : door er de bias bij op te tell<strong>en</strong> word<strong>en</strong> alle<br />

expon<strong>en</strong>t<strong>en</strong> zijn nu positieve getall<strong>en</strong>. We herstell<strong>en</strong> de expon<strong>en</strong>t door er gewoon de bias<br />

terug af te trekk<strong>en</strong> wanneer we ermee will<strong>en</strong> werk<strong>en</strong>.<br />

- fractie fractie fractie fractie F FF<br />

F : via de expon<strong>en</strong>t wordt de komma tot net achter de meest beduid<strong>en</strong>de bit<br />

geschov<strong>en</strong>. Elk getal ziet er dus uit als 1,abc… met 1 het eerste meest beduid<strong>en</strong>de cijfer. Dit<br />

noem<strong>en</strong> we de mantisse <strong>en</strong> die moet<strong>en</strong> we ook nog onthoud<strong>en</strong>. We wet<strong>en</strong> echter dat het meest<br />

beduid<strong>en</strong>de cijfer 1 is in e<strong>en</strong> binair systeem, dus moet<strong>en</strong> we dit niet onthoud<strong>en</strong>. We<br />

onthoud<strong>en</strong> <strong>en</strong>kel e<strong>en</strong> vast aantal getall<strong>en</strong> na die 1. Dat noem<strong>en</strong> we de fractie fractie. fractie<br />

E<strong>en</strong> getal wordt nu dus als volgt voorgesteld :<br />

Elk deel heeft e<strong>en</strong> vast aantal aantal bits : float betek<strong>en</strong>t 1 signbit, e getall<strong>en</strong> voor de expon<strong>en</strong>t <strong>en</strong><br />

f getall<strong>en</strong> voor de fractie. Standaart waard<strong>en</strong> voor deze getall<strong>en</strong> : IEEE-formaat :<br />

- <strong>en</strong>kelvoudige precisie : e=8 <strong>en</strong> f=23 B = 127<br />

- dubbele precisie : e=11 <strong>en</strong> f = 52 B = 1023<br />

We zi<strong>en</strong> nu dat we met beweg<strong>en</strong>de komma e<strong>en</strong> groter bereik hebb<strong>en</strong> maar minder precisie :<br />

stel dat we e<strong>en</strong> getal voorstell<strong>en</strong> met 4 bits. (neem voor vlott<strong>en</strong>de komma float)<br />

vaste komma : getall<strong>en</strong> van 0 tot 103 voorstelbaar (klein bereik)<br />

altijd e<strong>en</strong> precisie tot op de e<strong>en</strong>heid (goeie precisie)<br />

vlott<strong>en</strong>de vlott<strong>en</strong>de komma : getall<strong>en</strong> van 0 tot 10 99 voorstelbaar (veel groter bereik)<br />

precisie tot op macht van de radix (kan heel weinig precies zijn)<br />

We kunn<strong>en</strong> echter wel met ongeveer dezelfde precisie werk<strong>en</strong> wanneer we dat will<strong>en</strong>,<br />

rek<strong>en</strong><strong>en</strong> met vlott<strong>en</strong>de komma :<br />

- optell<strong>en</strong> : eerst expon<strong>en</strong>t<strong>en</strong> gelijk mak<strong>en</strong> of mantissa’s verschuiv<strong>en</strong> t.o.v. elkaar om gelijke<br />

grootorde te krijg<strong>en</strong>. Dan mantissa’s optell<strong>en</strong> <strong>en</strong> normaliser<strong>en</strong>. Mogelijk verlies van elke<br />

precisie t.o.v. het kleinste getal door normaliser<strong>en</strong>: bv manisses volledig naast elkaar geschov<strong>en</strong><br />

- product product : mantissa’s verm<strong>en</strong>igvuldig<strong>en</strong> <strong>en</strong> expon<strong>en</strong>t<strong>en</strong> optell<strong>en</strong>. Daarna normaliser<strong>en</strong>. We<br />

verliez<strong>en</strong> daarbij hooguit zoveel cijfers als 1 getal heeft, maar het verlies aan precisie is gelijk<br />

voor grootste <strong>en</strong> kleinste getal<br />

- Floating Floating-point<br />

Floating<br />

point point-overflow<br />

point overflow : wanneer de expon<strong>en</strong>t te groot wordt kunn<strong>en</strong> we het getal niet<br />

meer b<strong>en</strong>ader<strong>en</strong>d voorstell<strong>en</strong> <strong>en</strong> wordt het oneindig g<strong>en</strong>oemd


5) Andere Andere codes: codes: BCD, BCD, ASCII, ASCII, ECC, ECC, ECC, …<br />

…<br />

BCD code : Binairy Coded Decimal : Code voor decimale getall<strong>en</strong> voor te stell<strong>en</strong><br />

We k<strong>en</strong>n<strong>en</strong> aan elk cijfer tuss<strong>en</strong> 1 <strong>en</strong> 9 e<strong>en</strong> 4bit binaire code toe die overe<strong>en</strong>stemt met het cijfer :<br />

0=0000, 1=0001, … 9=1001. De andere binaire getall<strong>en</strong> 1010 tot 1111 word<strong>en</strong> niet gebruikt.<br />

- negatieve getall<strong>en</strong> word<strong>en</strong> voorgesteld met hun 10-complem<strong>en</strong>t (zowiezo extra bit nodig)<br />

- optell<strong>en</strong> optell<strong>en</strong> gebeurt zoals altijd, alle<strong>en</strong> moet<strong>en</strong> we oppass<strong>en</strong> met overdracht omdat niet elk binair<br />

cijfer gebruikt is : voor getall<strong>en</strong> tuss<strong>en</strong> 10 <strong>en</strong> 19 moet<strong>en</strong> we de overdracht corriger<strong>en</strong> met 10<br />

ASCII ASCII : : American American Standard Standard Code Code for for Information Information Interchange Interchange : Karaktercode die elke alfabetletter<br />

<strong>en</strong> e<strong>en</strong> hoop toets<strong>en</strong>bord-tek<strong>en</strong>s codeert met 7 bits. Kan makkelijk opgeslag<strong>en</strong> word<strong>en</strong> in 1 byte (8<br />

bits) waarbij de 8ste bit e<strong>en</strong> foutcorrectiebit is.<br />

Booleaanse Booleaanse algebra<br />

algebra<br />

1) 1) Axiomat Axiomatische Axiomat ische definitie van booleaanse algebra algebra<br />

Booleaanse algebra is e<strong>en</strong> set van elem<strong>en</strong>t<strong>en</strong> B {0,1}, e<strong>en</strong> set van operator<strong>en</strong> [+, •, ’ ] <strong>en</strong> axiomas :<br />

Axioma 1 : B is geslot<strong>en</strong> geslot<strong>en</strong> geslot<strong>en</strong> voor + <strong>en</strong> •<br />

het resultaat van optelling of product is opnieuw elem<strong>en</strong>te van B :<br />

x + y ∈ B <strong>en</strong> x • y (= xy) ∈ B<br />

Axioma 2 : B heeft e<strong>en</strong> e<strong>en</strong>heidselem<strong>en</strong>t 0 voor + <strong>en</strong> e<strong>en</strong> e<strong>en</strong>heidselem<strong>en</strong>t 1 voor •<br />

resultaat van bewerking van getal <strong>en</strong> e<strong>en</strong>heidselem<strong>en</strong>t is terug dat getal :<br />

x + 0 = x <strong>en</strong> x • 1 = x<br />

Axioma 3 : B is commutatief commutatief voor + <strong>en</strong> •<br />

plaats van elem<strong>en</strong>t<strong>en</strong> in de bewerking is niet belangrijk :<br />

x + y = y + x <strong>en</strong> x • y = y • x<br />

Axioma 4 : B is distrib distributiviteit<br />

distrib utiviteit voor + <strong>en</strong> •<br />

volgorde der bewerking<strong>en</strong> is niet belangrijk : haakjes uitwerk<strong>en</strong> :<br />

x • (y + z) = (x • y) + (x • z) <strong>en</strong> x + (y • z) = (x + y) • (x + z)<br />

Axioma 5 : B heeft voor + <strong>en</strong> • voor elk getal e<strong>en</strong> complem<strong>en</strong>ta<br />

complem<strong>en</strong>tair complem<strong>en</strong>ta<br />

complem<strong>en</strong>tair<br />

ir elem<strong>en</strong>t<br />

elk elem<strong>en</strong>t heeft e<strong>en</strong> teg<strong>en</strong>gestelde : elke bewerking van e<strong>en</strong> elem<strong>en</strong>t met zijn<br />

teg<strong>en</strong>gestelde geeft het e<strong>en</strong>heidselem<strong>en</strong>t voor die bewerking :<br />

∀ x ∈ B, ∃ x’ ∈ B : x + x’ = 1 <strong>en</strong> x • x’ = 0 (0+1=1 <strong>en</strong> 0•1=0)<br />

Axioma 6 : B heeft minst<strong>en</strong>s minst<strong>en</strong>s 2 2 elem<strong>en</strong>t<strong>en</strong> (cardinality bound)<br />

Verschill<strong>en</strong> Verschill<strong>en</strong> met de gewone algebra : :<br />

In booleaanse algebra bestaat ge<strong>en</strong> inverse bewerking voor de optelling (OR) of de<br />

verm<strong>en</strong>igvuldiging (AND) : aftrekking aftrekking of of deling deling bestaan bestaan niet niet (invers elem<strong>en</strong>t wel)<br />

In gewone algebra is + niet distributief distributief t.o.v. t.o.v. × × : 5 + (2 × 4) ≠ (5 + 2) × (5 + 4)<br />

1 + (1 • 0) = (1+1) • (1+0)<br />

In gewone algebra geldt niet niet dat x + x’ = 1 <strong>en</strong> <strong>en</strong> x x × × x’ x’ = = 0<br />

We definiër<strong>en</strong> nu + + als OR OR, OR<br />

• als AND AND <strong>en</strong> ‘ als inv inverse inv<br />

erse :


2) 2) Theorema’s Theorema’s<br />

Theorema’s<br />

Naast axiomas die we aannem<strong>en</strong> (moet<strong>en</strong> niet bewez<strong>en</strong> word<strong>en</strong>) om booleaanse algebra op te<br />

bouw<strong>en</strong>, kunn<strong>en</strong> we daar nu e<strong>en</strong> aantal theoremas van afleid<strong>en</strong>. Dit zijn handige uitdrukking<strong>en</strong> die<br />

help<strong>en</strong> bij het vere<strong>en</strong>voudig<strong>en</strong> van booleaanse uitdrukking<strong>en</strong>. We kunn<strong>en</strong> booleaanse uitdrukking<strong>en</strong><br />

<strong>en</strong> theoremas bewijz<strong>en</strong> vanuit de axiomas of door e<strong>en</strong> waarheidstabel op te stell<strong>en</strong> stell<strong>en</strong>. stell<strong>en</strong><br />

Elk theorema voor + heeft e<strong>en</strong> duaal duaal theorema dat geldt voor • . Dit heet dualiteit <strong>en</strong> kunn<strong>en</strong> we<br />

makkelijk bewijz<strong>en</strong>: Wanneer we in e<strong>en</strong> uitdrukking alle OR door AND vervang<strong>en</strong> <strong>en</strong> elke 0 door 1<br />

<strong>en</strong> omgekeerd, dan blijft de uitdrukking correct.<br />

Theorema 1 : idempot<strong>en</strong>cy<br />

x x + + x x = = x x <strong>en</strong> Duaal: : x • x = x<br />

Theorema 2 :<br />

x x + + 1 1 = = 1 1 <strong>en</strong> Duaal: : x • 0 = 0<br />

Theorema 3 : absorptie<br />

(y (y • • xx)<br />

x ) + x = x <strong>en</strong> Duaal: (y + x) • x = x<br />

Theorema 4 : involutie<br />

(x’)’ (x’)’ (x’)’ = = xx<br />

x x<br />

Theorema 5 : associativiteit<br />

(x (x + + y) y) + + z z = = x x x + + (y (y + + z) z) z) <strong>en</strong> Duaal: : (x (x (x • • y) y) • • z z = = x x • • (y (y (y • • z)<br />

z)<br />

Theorema 6 : wett<strong>en</strong> wett<strong>en</strong> wett<strong>en</strong> wett<strong>en</strong> van van van van Morgan Morgan Morgan Morgan<br />

(x (x + + + y)’ y)’ = = x’ x’ • • • y’ y’ <strong>en</strong> Duaal: : (x (x (x • • y)’ y)’ y)’ = = x’ x’ + + y’<br />

y’<br />

Dit is e<strong>en</strong> belangrijk theorema : de inverse van e<strong>en</strong> som van term<strong>en</strong> is het product van<br />

de invers<strong>en</strong> van die term<strong>en</strong><br />

3) 3) Booleaanse Booleaanse functies<br />

functies<br />

E<strong>en</strong> booleaanse functie is e<strong>en</strong> uitdrukking<br />

uitdrukking van binaire variabel<strong>en</strong> <strong>en</strong> de bewerking<strong>en</strong> AND, OR <strong>en</strong><br />

NOT NOT. NOT<br />

De functie heeft e<strong>en</strong> binaire binaire waarde voor elke set waard<strong>en</strong> van de binaire variabel<strong>en</strong> variabel<strong>en</strong>. variabel<strong>en</strong><br />

De functie wordt opgelost met prioriteit van bewerking<strong>en</strong> : Haakjes Not And Or<br />

Elke booleaanse functie kan rechtstreeks rechtstreeks gerealiseerd word<strong>en</strong> met poort<strong>en</strong> poort<strong>en</strong>: poort<strong>en</strong><br />

De binaire variabel<strong>en</strong><br />

zijn dan de ingang<strong>en</strong>, het resultaat van de functie is de uitgang. Meerdere uitgang<strong>en</strong> betek<strong>en</strong>d dus<br />

meerdere functies (1 functie per uitgang)<br />

Van elke functie kan e<strong>en</strong> waarheidstabel opgesteld word<strong>en</strong> : e<strong>en</strong> kolom voor elke in- <strong>en</strong> uitgang,<br />

e<strong>en</strong> rij voor elke mogelijke combinatie van ingang<strong>en</strong>. Dus n ingang<strong>en</strong> = 2n rij<strong>en</strong>.<br />

Er zijn verschill<strong>en</strong>de volgordes mogelijk voor de rij<strong>en</strong> :<br />

- Standaart Standaart-code<br />

Standaart<br />

code : in volgorde van stijg<strong>en</strong>de binaire waarde van de ingang<strong>en</strong> sam<strong>en</strong><br />

- Gray Gray-code Gray<br />

code : schikking zodanig dat in 2 ope<strong>en</strong> ope<strong>en</strong>volg<strong>en</strong>de ope<strong>en</strong><br />

volg<strong>en</strong>de rij<strong>en</strong> maar in 1 ingangsvariabele<br />

ingangsvariabele<br />

verschilt<br />

Standaart-code Gray-code


We kunn<strong>en</strong> elke functie inverter<strong>en</strong> : via de wett<strong>en</strong> van de Morgan kunn<strong>en</strong> we zo wissel<strong>en</strong> tuss<strong>en</strong> 2<br />

manier<strong>en</strong> van implem<strong>en</strong>tatie :<br />

Product Product van somm<strong>en</strong> (Or-And) : (a+b+c)(d+e+f)(g+h+i)<br />

elke combinatie waarvoor de uitgang 0 moet zijn is e<strong>en</strong> term van het product<br />

Som om van product<strong>en</strong> (And-Or) : = (abc + def + ghi)<br />

elke combinatie waarvoor de uitgang 1 moet zijn is e<strong>en</strong> term van de som<br />

De morgan : (a’+b’+c’)(d’+e’+f’)(g’+h’+i’) = (abc + def + ghi)’<br />

Ons doel is nu elke booleaanse functie om te vorm<strong>en</strong> naar naar zijn zijn korste korste korste <strong>en</strong> <strong>en</strong> e<strong>en</strong>voudigste e<strong>en</strong>voudigste e<strong>en</strong>voudigste vorm vorm vorm ; de<br />

vorm die het minste kost aan poort<strong>en</strong> om te realiser<strong>en</strong>. We kunn<strong>en</strong> die op de tast do<strong>en</strong> door de<br />

theoremas theoremas theoremas toe toe te te pass<strong>en</strong> pass<strong>en</strong> :<br />

4) ) Canonische Canonische Canonische & & standaard standaard vorm<br />

vorm<br />

Opstell<strong>en</strong> van booleaanse functies vanuit de waarheidstabel<br />

waarheidstabel : Elke booleaanse functie kan beschrev<strong>en</strong><br />

als e<strong>en</strong> som van zijn 11-minterm<strong>en</strong><br />

1<br />

minterm<strong>en</strong> of e<strong>en</strong> product van van zijn zijn 00-maxterm<strong>en</strong><br />

0<br />

maxterm<strong>en</strong> maxterm<strong>en</strong><br />

minterm : booleaanse functie die waar is voor slechts één <strong>en</strong>kele rij van de waarheidstabel :<br />

- 0-minterm als de functie er nul is, 1-minterm als de functie er 1 is.<br />

- e<strong>en</strong> minterm is altijd e<strong>en</strong> product van de n ingangsvariabel<strong>en</strong> al dan niet geïnverteerd<br />

maxterm : booleaanse functie die waar is voor all alle all<br />

e rij<strong>en</strong> rij<strong>en</strong> rij<strong>en</strong> van van de de de waarheidstabel waarheidstabel behalve behalve behalve één één één rij rij. rij<br />

- 0-maxterm als de functie er nul is, 1-maxterm als de functie er 1 is.<br />

- e<strong>en</strong> maxterm is altijd e<strong>en</strong> som van de n ingangsvariabel<strong>en</strong> al dan niet geïnverteerd


Canonische Canonische Canonische Canonische vorm vorm vorm vorm : som van 1-minterm<strong>en</strong> of product van 0-maxterm<strong>en</strong> : elke min- of maxterm<br />

bevat alle ingangs ingangsvariabel<strong>en</strong><br />

ingangs variabel<strong>en</strong> hetge<strong>en</strong> e<strong>en</strong> dure implem<strong>en</strong>tatie oplevert. (= maximale implem<strong>en</strong>tatie)<br />

We moet<strong>en</strong> de canonische vorm dus omvorm<strong>en</strong> tot e<strong>en</strong> e<strong>en</strong>voudigere vorm. Bemerk dat elke<br />

maxterm het complem<strong>en</strong>t is van de overe<strong>en</strong>komstige minterm <strong>en</strong> omgekeerd.<br />

We gebruik<strong>en</strong> de canonische vorm als startuitdrukking omdat we hem makkelijk uit de<br />

waarheidstabel kunn<strong>en</strong> opstell<strong>en</strong>. Dan gaan we door vere<strong>en</strong>voudiging over naar standaart standaartvorm<br />

standaart<br />

vorm vorm :<br />

Standaart Standaart Standaart Standaart vorm vv<br />

vorm<br />

orm orm : som so so som<br />

m m van van van van productterm<strong>en</strong> productterm<strong>en</strong><br />

productterm<strong>en</strong><br />

productterm<strong>en</strong> of e<strong>en</strong> product product product product van van van van somterm<strong>en</strong> somterm<strong>en</strong> somterm<strong>en</strong> somterm<strong>en</strong> met het kleinst mogelijke<br />

aantal aantal variabel<strong>en</strong> variabel<strong>en</strong>. variabel<strong>en</strong> Dit is dus de canonische vorm in e<strong>en</strong>voudigere versie, omdat niet elke productterm<br />

of somterm alle variabel<strong>en</strong> moet bevatt<strong>en</strong>. Dit is de goedkoopste impem<strong>en</strong>tatie in 2 lag<strong>en</strong> (e<strong>en</strong> And<strong>en</strong><br />

e<strong>en</strong> Or-laag). Soms kunn<strong>en</strong> we met meer lag<strong>en</strong> nog goedkoper uitkom<strong>en</strong>. Hoe we de<br />

standaartvorm vind<strong>en</strong> komt straks. Standaartvorm : Meer-lag<strong>en</strong> optie :<br />

5) 16 16 functies functies van van 2 2 variabel<strong>en</strong><br />

variabel<strong>en</strong><br />

Met 2 binaire variabel<strong>en</strong> kunn<strong>en</strong> we<br />

2² 2²=4 2²<br />

=4 =4 mogelijke mogelijke ingangscombinaties<br />

ingangscombinaties<br />

ingangscombinaties<br />

krijg<strong>en</strong>. Voor e<strong>en</strong> willekeurige<br />

functie kan elke ingangscombinatie<br />

e<strong>en</strong> 0 of 1 als als functiewaarde gev<strong>en</strong>.<br />

We kunn<strong>en</strong> dus<br />

4²=16 4²=16 verschill<strong>en</strong>de verschill<strong>en</strong>de functies<br />

functies<br />

definiër<strong>en</strong> op 2 ingangsvariabel<strong>en</strong> :


Logische Logische poort<strong>en</strong><br />

poort<strong>en</strong><br />

Wanneer we bina binair bina<br />

ir ir will<strong>en</strong> werk<strong>en</strong> in e<strong>en</strong> chip moet<strong>en</strong> we op e<strong>en</strong> bepaalde manier manier e<strong>en</strong> e<strong>en</strong> 1 1 <strong>en</strong> <strong>en</strong> e<strong>en</strong> e<strong>en</strong> 0<br />

0<br />

kunn<strong>en</strong> voorstell<strong>en</strong> : We gebruik<strong>en</strong> daarvoor 2 verschill<strong>en</strong>de spanning<strong>en</strong> spanning<strong>en</strong> : VL <strong>en</strong> <strong>en</strong> VVH,<br />

V resp. lage<br />

spanning <strong>en</strong> hoge spanning. We zoud<strong>en</strong> ook 2 verschill<strong>en</strong>de strom<strong>en</strong> kunn<strong>en</strong> gebruik<strong>en</strong>, optische<br />

reflecties (galsvezelprocessor<strong>en</strong>), verschill<strong>en</strong>de drukk<strong>en</strong>, <strong>en</strong>z. (maar spanning is meest handig)<br />

positieve logica : VL = 0 <strong>en</strong> VH = 1 : meest gebruikt<br />

negatieve logica : VL = 1 <strong>en</strong> VH = 0<br />

E<strong>en</strong> actief laag signaal signaal is e<strong>en</strong> signaal dat actief is als als hhet<br />

h et 0 is. Dit is dus de negatieve negatieve logica logica. logica Dit<br />

houdt in dat we e<strong>en</strong> binaire 0 weergev<strong>en</strong> met e<strong>en</strong> bepaald actief signaal (spanning bv), <strong>en</strong> e<strong>en</strong> binaire<br />

1 dus met e<strong>en</strong> passief signaal (ge<strong>en</strong> spanning bv). Actief zijn zijn is is dus dus e<strong>en</strong> e<strong>en</strong> interpretatie interpretatie van van van ee<strong>en</strong><br />

e <strong>en</strong> signaal, signaal,<br />

niet niet niet vvan<br />

v an e<strong>en</strong> e<strong>en</strong> niveau niveau! niveau<br />

Meestal duid<strong>en</strong> we het actief lage signaal aan met X, X* of X’.<br />

Waar <strong>en</strong> waarom gebruikt :<br />

- Bv. de reset reset-ingang<br />

reset<br />

ingang ingang van e<strong>en</strong> toestel is meestal e<strong>en</strong> actief laag signaal : we resett<strong>en</strong> het toestel<br />

als het actieve signaal (0) passief wordt (1 = dus ge<strong>en</strong> signaal meer) reset. RST*=0<br />

- we kunn<strong>en</strong> door te switch<strong>en</strong> tuss<strong>en</strong> actieve <strong>en</strong> passieve signal<strong>en</strong> 1 implem<strong>en</strong>tatie voor 2<br />

verschill<strong>en</strong>de poort<strong>en</strong> gebruik<strong>en</strong> : bv. Actief lage lage OR is is actief actief hoge hoge AND AND. AND<br />

- Actief lage signal<strong>en</strong> word<strong>en</strong> gebruikt in afgeslot<strong>en</strong> afgeslot<strong>en</strong> afgeslot<strong>en</strong> ver verbinding<strong>en</strong><br />

ver binding<strong>en</strong> : inactieve signal<strong>en</strong> moet<strong>en</strong><br />

daar meestal 1 <strong>en</strong> actieve signal<strong>en</strong> 0<br />

- omwille van wired wired-or wired<br />

or functionaliteit<strong>en</strong><br />

functionaliteit<strong>en</strong> bij e<strong>en</strong> ‘op<strong>en</strong> ‘op<strong>en</strong>-drain’<br />

‘op<strong>en</strong><br />

drain’ implem<strong>en</strong>tatie<br />

1) 1) Functionele Functionele eig<strong>en</strong>schapp<strong>en</strong><br />

eig<strong>en</strong>schapp<strong>en</strong><br />

Basispoort<strong>en</strong><br />

Basispoort<strong>en</strong><br />

E<strong>en</strong> logische poort is meestal opgebouwd uit schakelaars met 2 stand<strong>en</strong> (aan- of uitgeschakeld) die<br />

geschakeld (gestuurd) word<strong>en</strong> met e<strong>en</strong> stuursignaal (transistor). Voor e<strong>en</strong> elektrische chip is dit<br />

weerstand 0 of oneindig, voor e<strong>en</strong> druksysteem is dat e<strong>en</strong> op<strong>en</strong> of e<strong>en</strong> geslot<strong>en</strong> klep, voor<br />

lichtprocessor het wel of niet doorlat<strong>en</strong> van licht.<br />

De schakelaar is onderbrok<strong>en</strong> bij e<strong>en</strong><br />

laag laag laag signaal, geslot<strong>en</strong> voor e<strong>en</strong> hoog signaal.<br />

Met invertor<strong>en</strong> kunn<strong>en</strong> we de werking aanpass<strong>en</strong><br />

De schakelaar is meestal e<strong>en</strong> MOS MOS transistor transistor (Metal-Oxide-Semiconductor) : Dit is e<strong>en</strong><br />

spannin spanningsgestuurde spannin gsgestuurde schakelaar die op<strong>en</strong> of geslot<strong>en</strong> is afhankelijk van de spanning op zijn sturing. De<br />

spanning op de sturing noem<strong>en</strong> we VGS, de gr<strong>en</strong>s tuss<strong>en</strong> VL <strong>en</strong> VH noem<strong>en</strong> we VT (dus VL = VGS < VT<br />

<strong>en</strong> VH = VGS > VT). Al deze voltages zijn negatief voor de MOS-transistor.<br />

De transistor is opgebouwd uit e<strong>en</strong> plaatje plaatje metaal <strong>en</strong> e<strong>en</strong><br />

plaatje plaatje plaatje halfgeleider halfgeleider met e<strong>en</strong> isolator tuss<strong>en</strong>. Op het metal<strong>en</strong><br />

plaatje komt de spanning van de Gate (basis) : dit is<br />

de sturing <strong>en</strong> die bepaald of de halfgeleider<br />

tuss<strong>en</strong> source (collector) <strong>en</strong> drain (emittor)<br />

al dan niet geleid<strong>en</strong>d is.


In MOS MOS-technologie<br />

MOS<br />

technologie kunn<strong>en</strong> we 2 soort<strong>en</strong> transistors mak<strong>en</strong> :<br />

NMOS NMOS transistor (P-transistor transistor in boek) : op<strong>en</strong> (niet-geleid<strong>en</strong>d) bij VL op de sturing,<br />

geslot<strong>en</strong> geslot<strong>en</strong> (geleid<strong>en</strong>d) bij VH op de sturing geslot<strong>en</strong> : VH op<strong>en</strong> : VL<br />

PMOS transistor (N-transistor transistor in boek) : op<strong>en</strong> (niet-geleid<strong>en</strong>d) bij VH op de sturing,<br />

geslot<strong>en</strong> geslot<strong>en</strong> (geleid<strong>en</strong>d) bij VL op de sturing geslot<strong>en</strong> : VL op<strong>en</strong> : VH<br />

De werking werking van de N <strong>en</strong> P zijn invers invers, invers<br />

hetge<strong>en</strong> handig is voor de implem<strong>en</strong>tatie van poort<strong>en</strong>. We<br />

kunn<strong>en</strong> nu verschill<strong>en</strong>de poort<strong>en</strong> mak<strong>en</strong> met behulp van de 2 MOS-transistor<strong>en</strong> (afgekort ‘tors’).<br />

De basiswerking basiswerking van de schakeling<strong>en</strong> voor poort<strong>en</strong> : we schakel<strong>en</strong> schakel<strong>en</strong> telk<strong>en</strong>s de tranisitors met de<br />

ingangssignal<strong>en</strong> ingangssignal<strong>en</strong> ingangssignal<strong>en</strong> van van de de poort poort (kom<strong>en</strong> dus op de sturing) <strong>en</strong> op de collectors van de transistors<br />

zett<strong>en</strong> we VL of of VVH<br />

V van van e<strong>en</strong> e<strong>en</strong> e<strong>en</strong> externe externe externe bron bron. bron Externe bron duid<strong>en</strong> we aan met VCC CC CC(H) CC (H) voor hoog<br />

signaal <strong>en</strong> VSS SS SS(L) SS (L) voor laag signaal.<br />

Implem<strong>en</strong>tatie Implem<strong>en</strong>tatie van de 3 basis-poort<strong>en</strong> poort<strong>en</strong> in CMOS-technologie :<br />

Invertor Invertor Invertor Invertor : F = x’<br />

- 2 transistor<strong>en</strong> : 1 N & 1 P<br />

- relatieve vertraagtijd = 1<br />

(invertor is de refer<strong>en</strong>tie voor vertraagtijd)<br />

- wanneer x = VL wordt de <strong>en</strong>e tranistor geslot<strong>en</strong> <strong>en</strong> krijg<strong>en</strong><br />

we VH op de uitgang, wanneer x = VH, wordt de andere<br />

geslot<strong>en</strong> <strong>en</strong> krijg<strong>en</strong> we VL op de uitgang.<br />

NAND----poort<br />

NAND NAND NAND poort poort poort : F = (xy)’<br />

- 4 transistor<strong>en</strong> : 2 N & 2 P<br />

- relatieve vertraagtijd : 1,4<br />

- Als minst<strong>en</strong>s één van beide ingang<strong>en</strong> 0 is,<br />

dan is VL daardoor afgeslot<strong>en</strong> <strong>en</strong> het bov<strong>en</strong>ste<br />

systeem aangeslot<strong>en</strong> <strong>en</strong> krijg<strong>en</strong> we VH op de uitgang,<br />

wanneer beide 1 zijn is VL aangeslot<strong>en</strong>.<br />

NOR----poort NOR NOR NOR poort poort poort : F = (x+y)’<br />

- 4 transistor<strong>en</strong> : 2 N & 2 P<br />

- relatieve vertraagtijd : 1,4<br />

- Voor VH op de uitgang moet<strong>en</strong> beide<br />

ingang<strong>en</strong> 0 zijn. Vanaf dat er één<br />

ingang 1 is, is VH geblokkeerd wordt<br />

VL naar de uitgang gestuurd.


De invertor invertor, invertor NAND <strong>en</strong> NOR NOR zijn de 3 basispoort<strong>en</strong> : Alle andere poort<strong>en</strong> word<strong>en</strong> eruit gebouwd :<br />

Buffer of ‘driver’ : de functie is gelijk aan het ingangssignaal : gebruikt om meer vermog<strong>en</strong> te<br />

kunn<strong>en</strong> gebruik<strong>en</strong> (signaal wordt weer versterkt tot op originele niveau)<br />

F = x = (x’)’<br />

4 tor vertraging = 2<br />

AND AND-poort AND<br />

poort poort : F = xy = ((xy)’)’<br />

6 tor vertraging = 2,4<br />

OR OR-poort OR poort : F = x + y = ((x + y)’)’<br />

6 tor vertraging = 2,4<br />

XOR XOR-poort XOR<br />

poort poort : F = x ⊕ y = xy’ + x’y = ((x + y’) (x’ + y))’<br />

12 tor (cfr. OAI) vertraging = 3,2<br />

XNOR XNOR-poort<br />

XNOR<br />

poort : F = (x ⊕ y)’ = xy + x’y’ = ((x + y)(x’ + y’))’<br />

12 tor (cfr. OAI) vertraging = 3,2<br />

We mak<strong>en</strong> <strong>en</strong>kel inverter<strong>en</strong>de inverter<strong>en</strong>de poort<strong>en</strong> (invertor, NAND <strong>en</strong> NOR) met MOS transistor<strong>en</strong> omwille<br />

van de werking van de transistor<strong>en</strong> :<br />

NMOS transistor transistor is slecht pull pull-up pull<br />

up up : wanneer de NMOS geslot<strong>en</strong> is,<br />

wordt <strong>en</strong>kel VL makkelijk doorgegev<strong>en</strong>,<br />

<strong>en</strong> niet VH omdat VH met VT verminderd wordt.<br />

Daarom zull<strong>en</strong> we de NMOS alle<strong>en</strong> gebruik<strong>en</strong> om de VL aan <strong>en</strong> uit te schakel<strong>en</strong> <strong>en</strong> niet VH.<br />

dus op NMOS NMOS collector alle<strong>en</strong> alle<strong>en</strong> VVL<br />

V<br />

PMOS transistor transistor is e<strong>en</strong> slechte pull pull-down pull<br />

down : wanneer de PMOS geslot<strong>en</strong> is, wordt <strong>en</strong>kel VH<br />

makkelijk doorgegev<strong>en</strong>, <strong>en</strong> niet VL.<br />

Daarom zull<strong>en</strong> we PMOS alle<strong>en</strong> gebruik<strong>en</strong> om VH door te gev<strong>en</strong>.<br />

dus op PMOS collector alle<strong>en</strong> VVH<br />

V<br />

We kunn<strong>en</strong> dus <strong>en</strong>kel VL doorgev<strong>en</strong> met e<strong>en</strong> ingang VH <strong>en</strong> VH doorgev<strong>en</strong> met ingang VL : dit<br />

resulteert zowiezo in inverter<strong>en</strong>de poort<strong>en</strong><br />

Meerdere Meerdere ingang<strong>en</strong> ingang<strong>en</strong> (fan (fan-in) (fan (fan in) in)<br />

Wanneer e<strong>en</strong> poort meerdere ingang<strong>en</strong> heeft, heeft hij ook meer transistors nodig voor zijn werking<br />

<strong>en</strong> zal hij dus duurder duurder <strong>en</strong> trager zijn. We vergelijk<strong>en</strong> e<strong>en</strong> 3-input NAND met e<strong>en</strong> 2-input NAND :<br />

Geeft VH als minst<strong>en</strong>s één van de 3 ingagn<strong>en</strong> 0 is : parallelschakeling van 3 PMOS,<br />

Geeft VL als alle 3 de ingang<strong>en</strong> 1 is : serieschakeling van 3 NMOS<br />

We zi<strong>en</strong> dat we van 4 naar 6 transistors gaan, <strong>en</strong> per extra extra ingang ingang ingang nog nog 2 2 extra extra transistors transistors nodig<br />

hebb<strong>en</strong>. Analoog voor NOR. De vertragingstijd is hier 1,8 (voor 2 ingang<strong>en</strong> is dat 1,4)<br />

VH als : VL als : sam<strong>en</strong> :


De kostprijs kostprijs <strong>en</strong> <strong>en</strong> de de vertraging vertraging van e<strong>en</strong> poort is afhankelijk van van de de Fan Fan-in Fan in (= het aantal ingang<strong>en</strong>) <strong>en</strong><br />

word<strong>en</strong> relatief uitgedrukt t.o.v. de waard<strong>en</strong> voor de Invertor : De invertor kost zoveel als 2<br />

transistor<strong>en</strong> <strong>en</strong> heeft als vertraging de tijd die e<strong>en</strong> transistor nodig heeft om te schakel<strong>en</strong>.<br />

Elke niet niet-inverter<strong>en</strong>de<br />

niet<br />

inverter<strong>en</strong>de poort (AND, OR, …) heeft de waarde van de de inverter<strong>en</strong>de inverter<strong>en</strong>de +1 +1 omdat voor<br />

de niet-inverter<strong>en</strong>de e<strong>en</strong> extra xtra invertor nodig is (<strong>en</strong> die heeft alle waard<strong>en</strong> 1)<br />

(Inverter<strong>en</strong>de poort<strong>en</strong> zijn invertor, NAND <strong>en</strong> NOR)<br />

Kostprijs : - voor inverter<strong>en</strong>de poort : Fan Fan-in Fan<br />

in<br />

- voor niet-inverter<strong>en</strong>de poort<strong>en</strong> : Fan Fan-in Fan<br />

in + 1<br />

Vertraging : - voor inverter<strong>en</strong>de poort : 0.6 + FFan<br />

F<br />

an an-in*0.4 an in*0.4<br />

- voor niet-inverter<strong>en</strong>de poort<strong>en</strong> : 1.6 + Fan Fan-in*0.4 Fan<br />

in*0.4<br />

Meerdere Meerdere operator<strong>en</strong> operator<strong>en</strong> : complexere poort<strong>en</strong><br />

Wanneer we complexe schakeling<strong>en</strong><br />

schakeling<strong>en</strong> krijg<strong>en</strong>, is het soms voordeliger om e<strong>en</strong> bepaalde combinatie<br />

van poort<strong>en</strong> rechtstreeks te te implem<strong>en</strong>ter<strong>en</strong> i.p.v via standaart-poort<strong>en</strong> te werk<strong>en</strong> :<br />

Bv. de 2-wide 2-input AND-OR-Invertor (=AOI) :<br />

F = (xy+zw)’ : F = 0 als ( x = 1 <strong>en</strong> y = 1 ) of ( z = 1 <strong>en</strong> w = 1 )<br />

We kunn<strong>en</strong> deze schakeling implem<strong>en</strong>ter<strong>en</strong> met<br />

8 transistors <strong>en</strong> e<strong>en</strong> vertraging van 2.5,<br />

in plaats van met 2 ANDs <strong>en</strong> e<strong>en</strong> NOR<br />

F F = ((x+y)(z+w))’ : F = 0 als ( x = 1 of y = 1 ) <strong>en</strong> ( z = 1 of w = 1 )<br />

We kunn<strong>en</strong> deze schakeling implem<strong>en</strong>ter<strong>en</strong> met<br />

8 transistors <strong>en</strong> e<strong>en</strong> vertraging van 2.2,<br />

in plaats van met 2 ORs <strong>en</strong> e<strong>en</strong> NAND<br />

2) ) Niet Niet-functionele Niet unctionele unctionele eig<strong>en</strong>schapp<strong>en</strong><br />

Span Spanningsniveau’s<br />

Span Spanningsniveau’s<br />

ningsniveau’s<br />

Logische Logische variabel<strong>en</strong> variabel<strong>en</strong> 0 0 <strong>en</strong> <strong>en</strong> 1 1 word<strong>en</strong> voorgesteld door e<strong>en</strong> bepaald bepaald spanningsgebied<strong>en</strong><br />

spanningsgebied<strong>en</strong>. spanningsgebied<strong>en</strong><br />

VSS SS <strong>en</strong> <strong>en</strong> V<br />

V<br />

<strong>en</strong> VCC CC zijn<br />

de aangelegde spanning<strong>en</strong> aan de transistors, VIL IL <strong>en</strong> <strong>en</strong> VVIH<br />

V IH zijn de absolute gr<strong>en</strong>z<strong>en</strong> tot waar we de<br />

logische variabel<strong>en</strong> definiër<strong>en</strong>. Alles wat er tu tuss<strong>en</strong> tu<br />

ss<strong>en</strong> valt is onbepaald onbepaald. onbepaald<br />

Digitaal werk<strong>en</strong> heeft hierdoor voordel<strong>en</strong> teg<strong>en</strong>over analoge <strong>electronica</strong>. Digitaal kunn<strong>en</strong> we ons veel<br />

makkelijker spanningsvariaties permitter<strong>en</strong> waardoor het systeem robuuste is :<br />

- minder gevoelig voor procesvariaties, die de karakteristiek<strong>en</strong> van de compon<strong>en</strong>t<strong>en</strong> kunn<strong>en</strong> verander<strong>en</strong><br />

- minder gevoelig voor omgevingsvariaties zoals temperatuur, voedingsspanning, <strong>en</strong>z.


Ruismarges Ruismarges Ruismarges Ruismarges : We ontwerp<strong>en</strong> nu e<strong>en</strong> chip om op e<strong>en</strong> bepaald vast voltage te werk<strong>en</strong>. We zi<strong>en</strong> echter<br />

dat tijd<strong>en</strong>s de werking van de chip de spanning willekeurig zal variër<strong>en</strong> rond dit vooropgestelde<br />

voltage. Deze afwijking is het gevolg van variaties op de voedingsspanning, verandering van de<br />

temperatuur in de chip, inductie van andere drad<strong>en</strong>, <strong>en</strong>z. Dit noem<strong>en</strong> we ruis ruis, ruis<br />

<strong>en</strong> we moet<strong>en</strong> hiermee<br />

rek<strong>en</strong>ing houd<strong>en</strong> bij de interpretatie van de voltages als binaire variabel<strong>en</strong> :<br />

We k<strong>en</strong>n<strong>en</strong> aan e<strong>en</strong> bepaalde binaire variabele e<strong>en</strong> spanningsinterval toe. Dit is het interval<br />

waarin de spanning moet ligg<strong>en</strong> wanneer we de binaire variabele uitz<strong>en</strong>d<strong>en</strong> (uitgang uitgang v/d poort)<br />

Wanneer het signaal nu in e<strong>en</strong> andere poort komt (ingang ingang ingang), ingang moet het daar geïnterpreteerd<br />

kunn<strong>en</strong> word<strong>en</strong> als binaire variabele. Er zit nu echter ruis ruis op (het voltage is veranderd) <strong>en</strong> het is<br />

dus mogelijk dat het voltage buit<strong>en</strong> het voo vooropgestelde voo<br />

ropgestelde interval valt. Toch zoud<strong>en</strong> we graag het<br />

signaal nog herk<strong>en</strong>n<strong>en</strong> <strong>en</strong> het niet onbepaald classificer<strong>en</strong> : We moet<strong>en</strong> bij de interpretatie van<br />

e<strong>en</strong> ingangssignaal dus e<strong>en</strong> groter interval voltages toelat<strong>en</strong>. Deze extra toegelat<strong>en</strong> voltages zijn de<br />

ruismarg ruismarges ruismarg ruismarges<br />

es, es één voor lage signal<strong>en</strong> <strong>en</strong> één voor hoge signal<strong>en</strong> : Voor CMOS zijn deze 0.4 volt :<br />

Onlogische Onlogische Onlogische Onlogische spanning<strong>en</strong> spanning<strong>en</strong> spanning<strong>en</strong> spanning<strong>en</strong> : Het overgaan van het <strong>en</strong>e<br />

logische spanningsniveau naar het andere gebeurt<br />

niet og<strong>en</strong>blikkelijk. Hoe snel het ook gebeurt, er is<br />

altijd e<strong>en</strong> kleine periode waar het signaal tuss<strong>en</strong> de<br />

2 2 logische logische spanningsgebied<strong>en</strong> zit <strong>en</strong> dus onbepaald<br />

is. De uitgang veranderd tijd<strong>en</strong>s diezelfde periode<br />

ook mee <strong>en</strong> is dan dus ook binair onbepaald. De<br />

transferfunctie transferfunctie is de functie die het verband<br />

weergeeft tuss<strong>en</strong> ingangsspanning <strong>en</strong><br />

uitgangsspanning<br />

uitgangsspanning: uitgangsspanning wanneer de ingang binair<br />

bepaald is, is de uitgang dat ook, maar alles wat<br />

ertuss<strong>en</strong> ertuss<strong>en</strong> ligt ligt is is is onbepaald onbepaald. onbepaald onbepaald De transferfunctie is<br />

afhankelijk van productieporces <strong>en</strong> omgevingsfactor<strong>en</strong><br />

Bv. bij de invertor : wanneer we overgaan van VH naar VL op de ingang, zal de uitgangsspanning<br />

van VL naar VH moet<strong>en</strong> evoluer<strong>en</strong>. Dit zorgt voor e<strong>en</strong> bepaalde transferfunctie :


Schmitt----trigger<br />

Schmitt Schmitt Schmitt trigger----ingang<strong>en</strong><br />

trigger trigger ingang<strong>en</strong> ingang<strong>en</strong> ingang<strong>en</strong> : ingang<strong>en</strong> voorzi<strong>en</strong> van e<strong>en</strong> invertor<br />

met met hysteresis hysteresis. hysteresis<br />

Stel dat je e<strong>en</strong> ingangssignaal krijgt dat wat schommelt rond VT<br />

(de het transitievoltage dat VL <strong>en</strong> VH scheidt) in het gebied van<br />

voltages waarvan de binaire waarde onbepaald is. Dit kan<br />

voorkom<strong>en</strong> bij het overschakel<strong>en</strong> van de <strong>en</strong>e binaire waarde naar<br />

de andere.<br />

E<strong>en</strong> gewone invertor met e<strong>en</strong> gewone transferfunctie zou<br />

dan ev<strong>en</strong>e<strong>en</strong>s e<strong>en</strong> schommel<strong>en</strong>de schommel<strong>en</strong>de uitgang gev<strong>en</strong> die vooral in<br />

het onbepaalde gebied zit<br />

E<strong>en</strong> Schmitt Schmitt-trigger<br />

Schmitt<br />

trigger trigger-ingang<br />

trigger ingang ingang zal nu werk<strong>en</strong> met 2<br />

transferfuncties <strong>en</strong> 2 schakelspanning<strong>en</strong> VT+ >VT <strong>en</strong> VT- < VT<br />

met daartuss<strong>en</strong> e<strong>en</strong> hysteresis :<br />

- wanneer we op VL zitt<strong>en</strong> zal de uitgang pas VH word<strong>en</strong> wanneer Vin > VT+<br />

- wanneer we op VL zitt<strong>en</strong> zal de uitgang pas VL word<strong>en</strong> wanneer Vin > VVH<br />

V<br />

<strong>en</strong> VH->V >V >VL. >V<br />

VVVVLLLL ----> > > > VHHHH VV<br />

V : de stijgtijd VVVVH ----> > > > VLLLL VV<br />

V : de de daal daaltijd daal<br />

tijd


We will<strong>en</strong> uiteraard zo snel snel mogelijke mogelijke reactie van het systeem. Daarom :<br />

We will<strong>en</strong> bij e<strong>en</strong> verandering in spanning deze zo snel mogelijk aan de 2de poort hebb<strong>en</strong> :<br />

- uitgangsimpedantie RRRRO zo zo klein klein mogelijk mogelijk (poort 1) omdat dan grote strom<strong>en</strong> kunn<strong>en</strong> vloei<strong>en</strong><br />

naar de 2de poort (weinig spanning verlor<strong>en</strong> gaat in de uitgang)<br />

door die grote strom<strong>en</strong> ook groot vermog<strong>en</strong>verbruik (=nadeel van snelheid)<br />

- ingangsimpedantie RRRRI I I zo zo groot groot mogelijk mogelijk (poort 2) om hier zo veel mogelijk spanningsval te<br />

krijg<strong>en</strong> (de stroom wordt hier zoveel mogelijk gebruikt)<br />

CCCC (van (van draad draad & & ingang) ingang) zo zo klein klein mogelijk mogelijk omdat dan de tijdsconstante kleiner is :<br />

vermijdt lange verbinding<strong>en</strong> (hoe langer hoe groter C)<br />

Daarom is RTL RTL-technologie<br />

RTL<br />

technologie niet populair omdat hier RO groot groot is : Bij RTL<br />

wordt in e<strong>en</strong> poort de bov<strong>en</strong>ste reeks transistor<strong>en</strong> PMOS vervang<strong>en</strong> door e<strong>en</strong><br />

weerstand R. Neem de invertor: Bij ingang 1 wordt VCC via de weerstand<br />

kortgeslot<strong>en</strong> op de neutraal <strong>en</strong> is de uitgang 0, bij ingang 0 wordt doorgang naar<br />

neutraal afgeslot<strong>en</strong> <strong>en</strong> wordt VCC door de weerstand geleid naar de uitgang die<br />

dan 1 wordt.<br />

Dit geeft e<strong>en</strong> groot groot vermog<strong>en</strong>verbruik vermog<strong>en</strong>verbruik daar er altijd stroom door de<br />

eerstand stroom <strong>en</strong> in geval van ingang 1 gewoon kortstluiting is<br />

Hierdoor krijgt met ook grote stijgtijd<strong>en</strong> (zie formules tijdsconstant<strong>en</strong>)<br />

Ook de poort<strong>en</strong> zelf zorg<strong>en</strong> voor vertraging vertraging. vertraging<br />

Bij e<strong>en</strong> verandering van de ingang van e<strong>en</strong> poort zi<strong>en</strong> we<br />

pas e<strong>en</strong> tijdje later e<strong>en</strong> verandering op de uitgang. Stel onze ingang van veranderd van VL naar VH <strong>en</strong><br />

e<strong>en</strong> tijdje later van VH terug naar VL.<br />

Uit het vorige wet<strong>en</strong> we dat het verander<strong>en</strong> van de ingang ingang geleidelijk geleidelijk gebeurt gebeurt :<br />

de stijgtijd <strong>en</strong> de daaltijd = de tijd om te wissel<strong>en</strong> tuss<strong>en</strong> 10% (VIL) <strong>en</strong> 90% (VIH) voltage.<br />

We zi<strong>en</strong> dat pas e<strong>en</strong> vaste tijd later de uitgang veranderd veranderd. veranderd<br />

Deze vertragingstijd tuss<strong>en</strong> in- <strong>en</strong><br />

uitgang is gedefiniëerd als de tijd tuss<strong>en</strong> 50% verandering op ingang <strong>en</strong> 50% verandering op de<br />

uitgang. De vertragingstijd<strong>en</strong> voor stijg<strong>en</strong> <strong>en</strong> dal<strong>en</strong> zijn verschill<strong>en</strong>d :<br />

vertragingstijd tPHL PHL : : VVH<br />

V -> > V<br />

> VL<br />

vertragingstijd tPLH PLH : : VVL<br />

V -> > V<br />

> VH<br />

De algem<strong>en</strong>e algem<strong>en</strong>e vertragin vertragingstijd<br />

vertragin gstijd van e<strong>en</strong> poort is dan het gemiddelde van deze 2 : tP = ( (tPLH (<br />

PLH + tPHL HL HL)/2 HL )/2<br />

De vertragingstijd<strong>en</strong> vertragingstijd<strong>en</strong> zijn afhankelijk van de stijg stijg-<strong>en</strong> stijg<br />

<strong>en</strong> daaltijd<strong>en</strong> daaltijd<strong>en</strong>. daaltijd<strong>en</strong><br />

Hoe langer het duurt voor e<strong>en</strong><br />

signaal veranderd op de ingang, hoe langer het ook duurt voor deze verandering is doorgetrokk<strong>en</strong><br />

door de poort


Fan Fan-out Fan out<br />

De Fan Fan-out Fan out out van e<strong>en</strong> poort is het max aantal ingang<strong>en</strong> dat aan zijn uitgang kunn<strong>en</strong> gekoppeld word<strong>en</strong>.<br />

de stroomgedrev<strong>en</strong> technologieën (TTL, ECL, …) werk<strong>en</strong> op basis van stroom stroom die constant tuss<strong>en</strong><br />

de poort<strong>en</strong> vloeit <strong>en</strong> door weerstand<strong>en</strong> geconsumeerd wordt.<br />

Wanneer de uitgang VVH<br />

V<br />

is, vloeit er stroom van de uitgang naar alle verschill<strong>en</strong>de verschill<strong>en</strong>de ingang<strong>en</strong> ingang<strong>en</strong>, ingang<strong>en</strong><br />

<strong>en</strong> we moet<strong>en</strong> er dus voor zorg<strong>en</strong> dat elke ingang voldo<strong>en</strong>de stroom stroom IIH krijgt om e<strong>en</strong> voltage<br />

te hebb<strong>en</strong> dat in de juiste range ligt. De uitgang van de poort levert echter maar e<strong>en</strong> maximale<br />

hoeveelheid stroom IOH. De maximale maximale IIOH<br />

I OH <strong>en</strong> minimale IIIH<br />

I<br />

IH zijn dus bepal<strong>en</strong>d voor de fan-out<br />

Wanneer de uitgang VVL<br />

V<br />

is, vloeit er stroom van de verschill<strong>en</strong>de ingang<strong>en</strong> naar de uitgang uitgang, uitgang<br />

hier moet<strong>en</strong> we zi<strong>en</strong> dat de uitgang al deze stroom IOL kan verwerk<strong>en</strong> <strong>en</strong> dat elke ingang e<strong>en</strong><br />

minimale hoeveelheid stroom IIL kan lever<strong>en</strong>. De maximale IIOL<br />

I<br />

OL <strong>en</strong> minimale IIIL<br />

I<br />

IL IL zijn hier dus<br />

bepal<strong>en</strong>d voor de fan-out.<br />

Alles tesam<strong>en</strong> is de Fan Fan-out Fan<br />

out dus het minimum van IOH OH OH/I OH /I<br />

OL/I /I<br />

/IIH IH <strong>en</strong> IOL OL OL/IIL<br />

IL<br />

de ladingsgedrev<strong>en</strong> technologieën (CMOS CMOS CMOS) CMOS werk<strong>en</strong> op basis van spanning :<br />

In statische toestand (wanneer er niet geschakeld wordt ) vloeit er ongeveer ongeveer ge<strong>en</strong> stroom stroom II ≈ 0.<br />

Bij het overschakel<strong>en</strong> tuss<strong>en</strong> de binaire niveau’s VL <strong>en</strong> VH vloei vloeit vloei<br />

t er wel stroom IO doordat<br />

capaciteit<strong>en</strong> capaciteit<strong>en</strong> moet<strong>en</strong> op- of ontlad<strong>en</strong> word<strong>en</strong> :<br />

- capaciteit van alle verbinding<strong>en</strong> tuss<strong>en</strong> uitgang <strong>en</strong> ingang<strong>en</strong><br />

- ingangscapaciteit van alle aangestuurde poort<strong>en</strong> (=Cin x fan-out)<br />

De fan-out is hier gekoppeld aan de capaciteit van het geheel <strong>en</strong> dus aan de<br />

maximale maximale maximale schakelfrequ<strong>en</strong>tie<br />

schakelfrequ<strong>en</strong>tie schakelfrequ<strong>en</strong>tie : I = C ⋅ dV/dt = C ⋅ f ⋅ ∆V ⇒ f = I/(C ⋅ ∆V)<br />

hoe kleiner C <strong>en</strong> ∆V, hoe groter de schakelfrequ<strong>en</strong>tie


Vermog<strong>en</strong>verbruik<br />

Vermog<strong>en</strong>verbruik<br />

Het vermog<strong>en</strong>verbruik vermog<strong>en</strong>verbruik van e<strong>en</strong> chip is afhankelijk van de gebruikte technologie :<br />

TTL : stroom vloeit wanneer er niet geschakeld wordt, dus ongeveer altij altijd. altij<br />

P = VVCC<br />

V<br />

CC CC*I CC*I<br />

*ICC *ICC<br />

CC want<br />

ongeveer 10mW per poort is. Dit is redelijk veel als je bed<strong>en</strong>kt dat 1 miljo<strong>en</strong> poort<strong>en</strong> dan 10 kW<br />

verbruikt. TTL wordt dus alle<strong>en</strong> gebruikt bij hoge spanning<strong>en</strong> <strong>en</strong> strom<strong>en</strong> (voor buss<strong>en</strong> bv.)<br />

CMOS : stroom vloeit <strong>en</strong>kel als er geschakeld wordt (overgaan van één toestand naar de andere) <strong>en</strong><br />

is dus zo afhankelijk van de schakelfrequ<strong>en</strong>tie : P = VI = CfV². Nu is de periode dat er geschakeld<br />

wordt veel korter dan die waarin er niet geschakeld wordt, <strong>en</strong> dus is CMOS economischer.<br />

bv. Virtex: P = 38 pF ⋅ 160 MHz ⋅ (3,3 V)2 = 66 mW/pin;<br />

als de helft van de 200 pinn<strong>en</strong> gelijktijdig schakel<strong>en</strong> is er 6,6 W nodig<br />

Het vermog<strong>en</strong> vermog<strong>en</strong> moet zo zo beperkt mogelijk gehoud<strong>en</strong> word<strong>en</strong> omdat :<br />

het vermog<strong>en</strong> geleverd moet word<strong>en</strong> door bv. e<strong>en</strong> battery (hoe meer vermog<strong>en</strong>, hoe minder<br />

lang de batterij meegaat)<br />

het volledige vermog<strong>en</strong> wordt gedissipeerd als warmte (bij te hoog vermog<strong>en</strong> zal de chip<br />

oververhitt<strong>en</strong> <strong>en</strong> vereist dus koeling). We zi<strong>en</strong> dat bij CMOS het vermog<strong>en</strong> stijgt met de<br />

frequ<strong>en</strong>tie frequ<strong>en</strong>tie. frequ<strong>en</strong>tie<br />

Wanneer we dus in frequ<strong>en</strong>tie (snelheid) will<strong>en</strong> to<strong>en</strong>em<strong>en</strong>, moet<strong>en</strong> we dat<br />

comp<strong>en</strong>ser<strong>en</strong> door V te verlag<strong>en</strong> (nauwkeuriger werk<strong>en</strong>, C is moeilijk te verlag<strong>en</strong>)<br />

3) ) Verbinding<strong>en</strong><br />

Verbinding<strong>en</strong><br />

Verbinding<strong>en</strong><br />

Busverbinding<strong>en</strong><br />

Busverbinding<strong>en</strong><br />

Traditioneel verbind m<strong>en</strong> de uitgang uitgang van één poort poort met verschill<strong>en</strong>de ingang<strong>en</strong> van ander<strong>en</strong>.<br />

We kunn<strong>en</strong> ook meerdere uitgang<strong>en</strong> bundel<strong>en</strong> in 1 bus bus. bus<br />

E<strong>en</strong> bus is e<strong>en</strong> verbinding waar uitgang<strong>en</strong><br />

van meerdere poort<strong>en</strong> op dezelfde verbinding zijn gezet. We mog<strong>en</strong> echter maar één één uitgangssignaal<br />

(aansturing) (aansturing) tegelijkertijd tegelijkertijd op op de de verbinding verbinding zett<strong>en</strong> <strong>en</strong> daarom moet<strong>en</strong> we elke uitgang afblokk<strong>en</strong> met<br />

e<strong>en</strong> 3-state state state-buffer state buffer buffer. buffer Hiermee schakel<strong>en</strong> we telk<strong>en</strong>s alle uitgang<strong>en</strong> van de bus af, op één uitgang na die<br />

dan de bus stuurt. We kunn<strong>en</strong> zo met de 3-state-buffers kiez<strong>en</strong> welke uitgang wanneer de bus stuurt :<br />

De bus heeft dus telk<strong>en</strong>s de waarde van slechts één van van de de uitgang<strong>en</strong> uitgang<strong>en</strong> !<br />

De De tri tri-state tri state state-buffer state buffer is e<strong>en</strong> buffer met :<br />

3 mogelijke uitgang<strong>en</strong> uitgang<strong>en</strong> : 0, 0, 1 1 <strong>en</strong> Z met Z de ‘hoog hoog hoog-indep<strong>en</strong>dante<br />

hoog indep<strong>en</strong>dante<br />

indep<strong>en</strong>dante’ indep<strong>en</strong>dante of ‘zwev<strong>en</strong>de zwev<strong>en</strong>de zwev<strong>en</strong>de’ zwev<strong>en</strong>de uitgang<br />

waarbij de buffer eig<strong>en</strong>lijk virtueel virtueel is afgekoppeld van de bus.<br />

2 inga ingang<strong>en</strong> inga<br />

ng<strong>en</strong> : de <strong>en</strong>able ingang <strong>en</strong> de uitgang van de poort die hij op de bus zet.<br />

Wanneer <strong>en</strong>able 00<br />

0<br />

is, is de uitgang van de buffer Z <strong>en</strong> is de uitgang dus ontkoppeld van de bus.<br />

Wanneer <strong>en</strong>able 1 is, wordt de uitgang van de buffer gelijk aan de de uitgang uitgang van de poort <strong>en</strong><br />

wordt die dus op de bus gezet. Alle andere buffers hebb<strong>en</strong> op dat og<strong>en</strong>blik <strong>en</strong>able 0, zodat er<br />

maar één uitgang tegelijk op de bus kan staan


Verbind<strong>en</strong> als poort (wired (wired-logic)<br />

(wired<br />

logic)<br />

Op<strong>en</strong> Op<strong>en</strong>-drain Op<strong>en</strong> drain drain- drain of op<strong>en</strong> op<strong>en</strong>-collector<br />

op<strong>en</strong><br />

collector collector-uitgang<strong>en</strong> collector is e<strong>en</strong> manier om complexe poort<strong>en</strong> (met meerdere<br />

inputsignal<strong>en</strong>) te mak<strong>en</strong> zonder daarvoor standaard standaard-poort<strong>en</strong><br />

standaard<br />

poort<strong>en</strong> te gebruik<strong>en</strong>. Dit is TTL TTL-technologie,<br />

TTL<br />

niet CMOS !<br />

Het princippe princippe is dat we de pull pull-up pull<br />

up transistor in de TTL<br />

of de R in RTL-technologie weglat<strong>en</strong> <strong>en</strong> vervang<strong>en</strong> door<br />

e<strong>en</strong> externe weerst weerstand weerst<br />

and die gebruikt wordt door alle op<strong>en</strong>drain-uitgang<strong>en</strong>.<br />

We kunn<strong>en</strong> nu complexe poort<strong>en</strong> mak<strong>en</strong><br />

waarbij elke ingang slechts 1 transistor aanstuurt i.p.v. 2 of<br />

waar er maar 1 pull-up weerstand is in plaats van i.p.v elke<br />

ingang zijn eig<strong>en</strong> pull-up weerstand.<br />

nadel<strong>en</strong> adel<strong>en</strong> : de externe weerstand zorgt voor e<strong>en</strong> grote uitgangsimpedantie<br />

hetge<strong>en</strong> slecht is voor de stijgtijd (grote grote stijgtijd<strong>en</strong> stijgtijd<strong>en</strong>) stijgtijd<strong>en</strong><br />

& Alle andere nadel<strong>en</strong> van TTL <strong>en</strong> RTL<br />

voordel<strong>en</strong> : - uitgang<strong>en</strong> verbind<strong>en</strong> geeft ge<strong>en</strong> kortsluiting kortsluiting, kortsluiting<br />

hetge<strong>en</strong><br />

handig is wanneer we uitgang<strong>en</strong> sam<strong>en</strong> op e<strong>en</strong> bus<br />

will<strong>en</strong> zett<strong>en</strong><br />

- wired logic<br />

Wired Wired-logic<br />

Wired logic : poort<strong>en</strong> gemaakt met op<strong>en</strong>-drain-uitgang<strong>en</strong>. We kunn<strong>en</strong> nu e<strong>en</strong> NAND-poort mak<strong>en</strong><br />

uit 2 transistors <strong>en</strong> e<strong>en</strong> weerstand, waarbij we de uitgang<strong>en</strong> van de transistors gewoon sam<strong>en</strong>br<strong>en</strong>g<strong>en</strong><br />

als uitgang. Dit is e<strong>en</strong> Wired Wired-AND<br />

Wired AND AND. AND De transistors transistors transistors funger<strong>en</strong> als invertor<strong>en</strong> invertor<strong>en</strong>, invertor<strong>en</strong><br />

<strong>en</strong> de AND AND-poort AND<br />

poort is<br />

simpelweg het sam<strong>en</strong>br<strong>en</strong>g<strong>en</strong> sam<strong>en</strong>br<strong>en</strong>g<strong>en</strong> van de de uitgang<strong>en</strong> (drad<strong>en</strong> sam<strong>en</strong>br<strong>en</strong>g<strong>en</strong> als poort : vandaar de<br />

b<strong>en</strong>aming wired-logic). Bemerk dat deze NAND e<strong>en</strong> NOR is voor actief lage signal<strong>en</strong> <strong>en</strong> we dus op<br />

die manier e<strong>en</strong> wired wired-OR wired<br />

OR kunn<strong>en</strong> mak<strong>en</strong>.


4) ) Implem<strong>en</strong>tatietechnologieën<br />

Implem<strong>en</strong>tatietechnologieën<br />

Implem<strong>en</strong>tatietechnologieën<br />

Integrati<strong>en</strong>iveau’s<br />

Integrati<strong>en</strong>iveau’s<br />

SSI: SSI: Small Small Scale Scale Integration<br />

Integration<br />

< 10 poort<strong>en</strong> per verpakking<br />

poort<strong>en</strong> direct verbond<strong>en</strong> aan pinn<strong>en</strong><br />

ontwerp op transistorniveau<br />

gebruikt in ontwerp<strong>en</strong> op poortniveau<br />

MSI: MSI: Medium Medium Scale Scale Integration<br />

Integration<br />

10 – 100 poort<strong>en</strong> per verpakking<br />

registers, optellers, pariteitsg<strong>en</strong>erator<strong>en</strong>, …<br />

ontwerp op poortniveau<br />

gebruikt in ontwerp<strong>en</strong> op ‘Register Transfer Level’ (RTL)<br />

LSI: LSI: Large Large Scale Scale Integration<br />

Integration<br />

100 – 10K poort<strong>en</strong> per verpakking<br />

controllers, datapad<strong>en</strong><br />

ontwerp op RTL-niveau<br />

gebruikt in ontwerp<strong>en</strong> op gedragsniveau<br />

VLSI: VLSI: Very Very Large Large Scale Scale Integration<br />

Integration<br />

10K – 1 Miljo<strong>en</strong> poort<strong>en</strong> per verpakking<br />

geheug<strong>en</strong>, microprocessor, microcontroller, FFT<br />

ontwerp op gedragsniveau : elke chip is gemaakt om 1 specifieke taak uit te voer<strong>en</strong> <strong>en</strong> voert<br />

die taak dan ook beter <strong>en</strong> efficiënter uit dan e<strong>en</strong> programmeerbare chip met programmatuur<br />

gebruikt in ontwerp<strong>en</strong> op systeemniveau<br />

ULSI: ULSI: Ultra Ultra Ultra Large Large Scale Scale Integration Integration ?<br />

?<br />

> 1 Miljo<strong>en</strong> poort<strong>en</strong> per verpakking<br />

2 microcontrollers, 20 DSP-processor<strong>en</strong>,<br />

16 Mbyte geheug<strong>en</strong>, 10 hardware-versnellers,<br />

1 Mgate FPGA, analoge interface, RF, …<br />

ontwerp op systeemniveau : slechts 1 chip voor volledige toepassing<strong>en</strong>


We kunn<strong>en</strong> op 3 verschill<strong>en</strong>de niveaus of manier<strong>en</strong> chips ontwerp<strong>en</strong> :<br />

1) Maatwerk Maatwerk & standaart cell<strong>en</strong> : we ontwerp<strong>en</strong> e<strong>en</strong> chip heel specifiek voor e<strong>en</strong> bepaald doel <strong>en</strong><br />

mak<strong>en</strong> deze zo efficiënt mogelijk mogelijk (qua tijd, responsie, vermog<strong>en</strong>, …). Dit is de duurste duurste optie optie, optie omdat<br />

we heel het ontwerp do<strong>en</strong> voor 1 chip, die alle<strong>en</strong> gebruikt kan word<strong>en</strong> voor wat hij ontwerp<strong>en</strong> is.<br />

Heeft zeer grote dichtheid van poort<strong>en</strong> <strong>en</strong> is zeer efficiënt efficiënt gemaakt.<br />

Ontwerpproces<br />

Ontwerpproces : De chip wordt volledig ontworp<strong>en</strong> op transistor- <strong>en</strong><br />

bedradingsniveau : De poort<strong>en</strong> word<strong>en</strong> geïmplem<strong>en</strong>teerd (met<br />

transistors) op rechthoek<strong>en</strong> (cel<strong>en</strong> cel<strong>en</strong> cel<strong>en</strong>) cel<strong>en</strong> naast elkaar in rij<strong>en</strong> van variabele<br />

l<strong>en</strong>gte <strong>en</strong> standaart hoogt. Bov<strong>en</strong>aan de rij zitt<strong>en</strong> de ingang<strong>en</strong> <strong>en</strong><br />

onderaan de uitgang<strong>en</strong>. We hebb<strong>en</strong> zo e<strong>en</strong> aantal rij<strong>en</strong> rij<strong>en</strong> rij<strong>en</strong> achtere<strong>en</strong>, met<br />

daartuss<strong>en</strong> plaats voor de bedrading (routing channels)<br />

ideaal voor het werk<strong>en</strong> met bibliothek<strong>en</strong> van compon<strong>en</strong>t<strong>en</strong> voor herbruik van ontwerp<strong>en</strong> :<br />

zo kunn<strong>en</strong> we sneller complexe bouwblokk<strong>en</strong> ontwerp<strong>en</strong> ontwerp<strong>en</strong>. ontwerp<strong>en</strong><br />

Elke chipfabricant heeft zijn eig<strong>en</strong><br />

bibliotheek van compon<strong>en</strong>t<strong>en</strong>, aangepast aan zijn procestechnologie. Wanneer je dus e<strong>en</strong> chip<br />

ontwerpt werk je met één bepaalde fabrikant <strong>en</strong> gebruik je die zijn bibliotheek. Het ontwerp<br />

van de chip zelf beperkt zich zo tot de - allocatie van de compon<strong>en</strong>t<strong>en</strong> (placem<strong>en</strong>t)<br />

- allocatie van de bedrading (routing)<br />

chip moet wel vol volledig vol<br />

ledig herontworp<strong>en</strong> word<strong>en</strong> wanneer de technologie wijzigt<br />

Ontwerpschema Ontwerpschema :<br />

Voor Voor gate gate-arry’s gate<br />

arry’s :<br />

2) Gate Gate-Array’s<br />

Gate Array’s : we mak<strong>en</strong> e<strong>en</strong> standaart chip met heel heel veel dezelfde poort<strong>en</strong> allemaal in dezelfde<br />

richting georiënteerd met heel veel interconnecties tuss<strong>en</strong> die poort<strong>en</strong>.<br />

(sea of gates, bv. allemaal NAND-poort<strong>en</strong> met 4 ingang<strong>en</strong> ofzo).<br />

We moet<strong>en</strong> dan ons ontwerp nu omzett<strong>en</strong> naar e<strong>en</strong> ontwerp met alle<strong>en</strong> maar NAND-poot<strong>en</strong> met 4<br />

ingang<strong>en</strong>. Dit is mi minder mi nder efficiënt dan het vorige, maar het voordeel is dat we de standaard chips<br />

goedkoper goedkoper kunn<strong>en</strong> krijg<strong>en</strong> (massa-productie). We moet<strong>en</strong> er alle<strong>en</strong> nog zelf ons ontwerp in<br />

implem<strong>en</strong>ter<strong>en</strong> met e<strong>en</strong> laatste metallisatielaag voor de juiste verbinding<strong>en</strong>.<br />

Het ontwerp ontwerpschema<br />

ontwerp schema is ongeveer hetzelfde als dat voor maatwerk, alle<strong>en</strong> komt er nu voor de<br />

placem<strong>en</strong>t e<strong>en</strong> technologie technologie-mapping<br />

technologie<br />

mapping mapping, mapping we we ons ontwerp omzett<strong>en</strong> naar e<strong>en</strong> ontwerp met alle<strong>en</strong> het<br />

beschikbare soort poort. We moet<strong>en</strong> voor de productie ook maar 1 masker mak<strong>en</strong>. (de verbinding<strong>en</strong>)


3) Field Field-programmable Field programmable design : ook deze chip is e<strong>en</strong> standaard chip die we met massaproductie<br />

goedkoop goedkoop kunn<strong>en</strong> kop<strong>en</strong>. Deze chip heeft e<strong>en</strong> standaard placem<strong>en</strong>t van verschill<strong>en</strong>de soort<strong>en</strong> poort<strong>en</strong><br />

<strong>en</strong> registers <strong>en</strong> standaard routing, waarbij we ons eig<strong>en</strong> ontwerp moet<strong>en</strong> programmer<strong>en</strong>.<br />

Verschill<strong>en</strong>de vorm<strong>en</strong> :<br />

Gebruik Gebruik Gebruik Gebruik mak<strong>en</strong>d mak<strong>en</strong>d mak<strong>en</strong>d mak<strong>en</strong>d van van van van zekering<strong>en</strong> zekering<strong>en</strong> zekering<strong>en</strong> zekering<strong>en</strong> (PLA, PLD) : Alle mogelijke verbinding<strong>en</strong> zijn gemaakt <strong>en</strong> we<br />

moet<strong>en</strong> bepaalde verbinding<strong>en</strong> verbrek<strong>en</strong> om ons eig<strong>en</strong> ontwerp te realiser<strong>en</strong>. Verbrek<strong>en</strong> van<br />

verbinding<strong>en</strong> door met hoge strom<strong>en</strong> zekering<strong>en</strong> (dunnere stukk<strong>en</strong> draad) door te brand<strong>en</strong>.<br />

Dit is irreversibel irreversibel : slechts bijprogrammer<strong>en</strong> mogelijk via extra zekering<strong>en</strong> door te brand<strong>en</strong>.<br />

Voorbeeld<strong>en</strong> :<br />

PLA : Programmable Logic Array : e<strong>en</strong> reeks ingang<strong>en</strong> <strong>en</strong> hun invers<strong>en</strong> word<strong>en</strong> via e<strong>en</strong><br />

rooster naar AND-poort<strong>en</strong> gebracht, waarvan de uitgang<strong>en</strong> dan gecombineerd word<strong>en</strong> in<br />

e<strong>en</strong> aantal OR-poort<strong>en</strong> tot uitgang<strong>en</strong>.<br />

PAL : zelfde systeem,<br />

Verbinding<strong>en</strong> met<br />

zekering<strong>en</strong><br />

maar met vaste OR-matrix<br />

PROM : zelfde systeem,<br />

maar met vaste And-matrix<br />

(voor bv. adresdecoder)<br />

PLD : Uitgebreiding van de PLA met<br />

macro-cell<strong>en</strong> : we zi<strong>en</strong> verschill<strong>en</strong>de<br />

groep<strong>en</strong> OR’s die elk naar e<strong>en</strong> AND<br />

gaan <strong>en</strong> terugkoppeling van e<strong>en</strong> AND<br />

als e<strong>en</strong> ingang.<br />

Ook extra logica <strong>en</strong> flip-flops aan de<br />

uitgang<strong>en</strong>.<br />

OR-matrix<br />

EE---- EE EE EE <strong>en</strong> <strong>en</strong> <strong>en</strong> <strong>en</strong> flash----programmeerbaar<br />

flash flash flash programmeerbaar programmeerbaar<br />

programmeerbaar (CPLD) : De verbinding<strong>en</strong> tuss<strong>en</strong> de<br />

compon<strong>en</strong>t<strong>en</strong> zijn transistor<strong>en</strong> waarvan het poortniveau<br />

opgelad<strong>en</strong> opgelad<strong>en</strong> kan word<strong>en</strong> om de verbinding<strong>en</strong> te mak<strong>en</strong> of te<br />

verbrek<strong>en</strong>. Herprogrammer<strong>en</strong><br />

Herprogrammer<strong>en</strong> is mogelijk, maar traag <strong>en</strong> slechts<br />

e<strong>en</strong> beperkt aantal ker<strong>en</strong> ker<strong>en</strong>. ker<strong>en</strong><br />

Eig<strong>en</strong>lijk e<strong>en</strong> soort van complexe PLD<br />

met extra verbinding<strong>en</strong>.<br />

Gebruik Gebruik Gebruik Gebruik mak<strong>en</strong>d mak<strong>en</strong>d mak<strong>en</strong>d mak<strong>en</strong>d van van van van SRAM SRAM SRAM SRAM (FPGA : Field Programmable Gate-Array) : De verbinding<strong>en</strong> zijn<br />

transistor<strong>en</strong> transistor<strong>en</strong> transistor<strong>en</strong> waarvan het poortniveau in e<strong>en</strong> RAM RAM-geheug<strong>en</strong><br />

RAM<br />

geheug<strong>en</strong> geheug<strong>en</strong> opgeslag<strong>en</strong> wordt. Ook de<br />

poort<strong>en</strong> zijn minder standaard : booleaanse functies inlad<strong>en</strong>. De chip is volledig <strong>en</strong> vlot vlot<br />

herprogrammeerbaar herprogrammeerbaar : (statische of dynamische) herconfiguratie mogelijk. Telk<strong>en</strong>s we de<br />

voedingsspanning aanlegg<strong>en</strong> wordt heel de chip opnieuw gelad<strong>en</strong>.


To Toepassing<strong>en</strong><br />

To epassing<strong>en</strong> :<br />

Voor prototypes & medium volumes ( 5 M poort<strong>en</strong>) @ 400 MHz (in 2004)<br />

FPGA FPGA : volledige programmeerbare chip :<br />

bestaat uit e<strong>en</strong> rooster rooster van programmeerbare logische<br />

blokk<strong>en</strong> blokk<strong>en</strong> ; de CLB’s. CLB’s CLB’s CLB’s (Configureable Logic Block)<br />

- 2 keer 4 ingang<strong>en</strong> die elk in e<strong>en</strong> Logische e<strong>en</strong>heid<br />

word<strong>en</strong> verwerkt. (LUT) In deze logische e<strong>en</strong>heid is hij<br />

het programmer<strong>en</strong> van de chip e<strong>en</strong> booleaanse functie functie<br />

ingelad<strong>en</strong> die nu als poort toegepast wordt op de<br />

ingang<strong>en</strong>. De LUT LUT (Look-Up Table) is e<strong>en</strong> 32-Bit<br />

geheug<strong>en</strong> waarin de functie wordt gestok<strong>en</strong> <strong>en</strong> die daaruit<br />

wordt uitgelez<strong>en</strong> om toe te pass<strong>en</strong>. De 32-Bit geheug<strong>en</strong> is zo bruikbaar als 32-bit SRAM<br />

geheug<strong>en</strong><br />

- De uitgang uitgang van elke logische blok verschijnt rechtstreeks als uitgang (G, F) uit de CLB<br />

<strong>en</strong> wordt ook in e<strong>en</strong> flipflop (FF) opgeslag<strong>en</strong> opgeslag<strong>en</strong> opgeslag<strong>en</strong> (GQ, FQ)<br />

De CLB’s zijn verbond<strong>en</strong> met elkaar via<br />

lijn<strong>en</strong> lijn<strong>en</strong> lijn<strong>en</strong> waarop SchakelMatrices<br />

SchakelM SchakelM SchakelMatrices<br />

atrices atrices SM) (SM SM SM staan<br />

om te bepal<strong>en</strong> welke CLB ins <strong>en</strong> outs met<br />

elkaar verbond<strong>en</strong> word<strong>en</strong>.<br />

- Elk interconnectiepunt<br />

nterconnectiepunt van 2 drad<strong>en</strong> in<br />

de SM bestaat uit 6 transistors die<br />

geprogrammeerd<br />

eprogrammeerd moet<strong>en</strong> word<strong>en</strong> tot het<br />

juiste ontwerp. Elke mogelijke verbinding<br />

van de 4 stukk<strong>en</strong> draad is e<strong>en</strong> combinatie<br />

van op<strong>en</strong> <strong>en</strong> geslot<strong>en</strong> transistors transistors. transistors<br />

Directe Directe Directe Directe verbindingeee<strong>en</strong>nnn verbinding verbinding verbinding tuss<strong>en</strong> naburige blokk<strong>en</strong><br />

Lange Lange Lange Lange lijn<strong>en</strong> lijn<strong>en</strong> lijn<strong>en</strong> lijn<strong>en</strong> om verafgeleg<strong>en</strong> CLB’s te verbind<strong>en</strong><br />

Globale Globale Globale Globale kloklijn<strong>en</strong> kloklijn<strong>en</strong> kloklijn<strong>en</strong> kloklijn<strong>en</strong> zodat de klok overal ev<strong>en</strong><br />

nauwkeurig <strong>en</strong> gelijk is<br />

I/O I/O I/O I/O blokk<strong>en</strong> blokk<strong>en</strong> blokk<strong>en</strong> blokk<strong>en</strong> op de rand voor input <strong>en</strong> output naar<br />

buit<strong>en</strong> (gegev<strong>en</strong>sinput, dataoutput, sturing)


SM<br />

specifieke soort<strong>en</strong> FPGA :<br />

Spartan Spartan-3 Spartan<br />

(gebruikt tijd<strong>en</strong>s de labo’s) : complexere FPGA met meer functies :<br />

2 slices<br />

links<br />

2 slices<br />

rechts<br />

het patroon is gelijkaardig aan de FPGA, maar er zijn verschill<strong>en</strong> :<br />

De logische logische e<strong>en</strong>heid e<strong>en</strong>heid van de FPGA is de CLB. In de spartan-3 bestaat<br />

e<strong>en</strong> CLB uit 4 slices slices, slices<br />

waarbij elke slices ev<strong>en</strong> groot is als e<strong>en</strong> FPGA-<br />

CLB. (spartan CLB dus 4 keer groter dan normaal) 2 slices staan links<br />

in de CLB <strong>en</strong> kunn<strong>en</strong> voor logica gebruikt word<strong>en</strong>, maar ook als RAM<br />

of als schuifregister. De 2 rechts rechtse rechts<br />

<strong>en</strong>kel voor logica.<br />

Met de 2 rechtse slices mak<strong>en</strong> we de Standaa Standaard Standaa<br />

rd logica logica : 2 keer<br />

booleaanse functie van 4 variabel<strong>en</strong> met ev<strong>en</strong>tueel 2 flipflops <strong>en</strong> e<strong>en</strong><br />

functie van 5 met ev. 1 flipflop. (via F5MUX)<br />

De 2 2 linkse linkse sl slices sl ces kunn<strong>en</strong> we gebruik<strong>en</strong> voor extra logica :<br />

- carry logica (incl. AND <strong>en</strong> XOR)<br />

- multiplexers<br />

- 2 × 16 bit gedistribueerde RAM<br />

- 2 × 16 bit schuifregister<br />

de spartan-3 heeft Klokg<strong>en</strong>eratie<br />

Klokg<strong>en</strong>eratie, Klokg<strong>en</strong>eratie<br />

geheug<strong>en</strong> (RAM RAM RAM) RAM <strong>en</strong> verm<strong>en</strong>ig-<br />

vuldigers vuldigers vuldigers zodat die niet meer met veel CLB’s gemaakt moet<strong>en</strong> word<strong>en</strong><br />

maar reeds effici<strong>en</strong>t <strong>en</strong> snel ter beschikking zijn<br />

Andere moderne FPGA’s :<br />

- specifieke transceivers of voor hoge snelheid (bv. Ethernet, 10 Gbit/s + CRC)<br />

- DSP-functies (bijv. MAC)<br />

- microprocessor<strong>en</strong> : (bv. 32 bit PowerPC met specifieke interface voor<br />

hardware-versnellers)<br />

We gebruik<strong>en</strong> in de labo’s Xilinx ISE ISE omgeving voor het ontwerp van programmatie<br />

programmatie van de FPGA<br />

spartan-3’s. We gev<strong>en</strong> eerst het ontwerp in. Dat test<strong>en</strong> we dan op de logische correctheid correctheid. correctheid<br />

Wanneer<br />

de schakeling volledig is wat we will<strong>en</strong>, zull<strong>en</strong> we het ontwerp technology technology-mapp<strong>en</strong><br />

technology<br />

mapp<strong>en</strong> (omzett<strong>en</strong> naar<br />

de FPGA-mogelijkhed<strong>en</strong> <strong>en</strong> de routing voorzi<strong>en</strong>) . Dit ontwerp test<strong>en</strong> we dan in de tijd (tijdsimulatie<br />

tijdsimulatie<br />

tijdsimulatie)<br />

tijdsimulatie<br />

om te zi<strong>en</strong> of er door de delay delay-tijd<strong>en</strong><br />

delay<br />

tijd<strong>en</strong> ge<strong>en</strong> onverwachte ding<strong>en</strong> ding<strong>en</strong> optred<strong>en</strong>. Dan kunn<strong>en</strong> we alles op de<br />

FPGA upload<strong>en</strong> <strong>en</strong> kijk<strong>en</strong> of het werkt.


Hfdst Hfdst 33)<br />

3 3)<br />

) Combinatorische Combinatorische sch schakeling<strong>en</strong><br />

sch akeling<strong>en</strong><br />

Minimalisering Minimalisering van van booleaanse booleaanse functies<br />

functies<br />

1) ) Karnaugh Karnaugh-kaart<br />

Karnaugh kaart<br />

We zull<strong>en</strong> ons best do<strong>en</strong> om booleaanse functies zo veel mogelijk te minimaliser<strong>en</strong><br />

minimaliser<strong>en</strong> (zo klein mogelijk<br />

te mak<strong>en</strong>) : hoe minder complex de functie, hoe minder poort<strong>en</strong> nodig om ze te realiser<strong>en</strong>. Om :<br />

de kostprijs te verlag<strong>en</strong> : hoe minder poort<strong>en</strong> hoe minder duur<br />

sneller sneller te werk<strong>en</strong> : hoe minder poort<strong>en</strong> hoe sneller de responsie van het systeem :<br />

De responsie responsie van e<strong>en</strong> poort wordt uitgedrukt als de tijd nodig om het kritisch pad van het<br />

systeem te doorlop<strong>en</strong>. Kritisch pad = het pad met de grootste vertraging van ingang tot uitgang<br />

bv. F = xy’z + xy’z’ is te vere<strong>en</strong>voudig<strong>en</strong> tot xy’(z + z’) <strong>en</strong> tot xy’<br />

Hoe Hoe kunn<strong>en</strong> we e<strong>en</strong> booleanse functie minimaliser<strong>en</strong> ?<br />

Via manipulatie van Booleaanse uitdrukking<strong>en</strong><br />

uitdrukking<strong>en</strong>. uitdrukking<strong>en</strong><br />

Dit is echter zeer moeilijk moeilijk: moeilijk<br />

er bestaat ge<strong>en</strong><br />

methode om de ope<strong>en</strong>volg<strong>en</strong>de theorema’s te kiez<strong>en</strong> die leid<strong>en</strong> tot de minimale oplossing. We zijn<br />

dus nooit zeker of het de meest minimale oplossing is, <strong>en</strong> de stapp<strong>en</strong> die we moet<strong>en</strong> zett<strong>en</strong> moet<strong>en</strong><br />

we zelf zi<strong>en</strong>.<br />

E<strong>en</strong> voorstelling gebruik<strong>en</strong> waarin opvalt opvalt welke ingang ge<strong>en</strong> belang heeft :<br />

Waarheidstabel<br />

Waarheidstabel : We kunn<strong>en</strong> soms zi<strong>en</strong> dat bepaalde uitgang<strong>en</strong><br />

onafhankelijk zijn van bepaalde ingang<strong>en</strong>. Maar dit valt pas op<br />

wanneer deze gevall<strong>en</strong> echt onder elkaar staan.<br />

bv. Duidelijk dat F = 1 als x = 1 <strong>en</strong> y = 0, dus daar is F onafhankelijk<br />

van z. Dit is echter alle<strong>en</strong> maar duidelijk voor z omdat de lijn<strong>en</strong><br />

voor z = 0 of 1 onder elkaar ligg<strong>en</strong><br />

N-kubus kubus : N-kubus is e<strong>en</strong> n-dim<strong>en</strong>sionale kubus waarbij<br />

elke dim<strong>en</strong>sie met 1 variabele overe<strong>en</strong> komt. Je kan hierin<br />

alle mogelijke combinaties van de variabel<strong>en</strong> voorstell<strong>en</strong> <strong>en</strong><br />

hun onderling<strong>en</strong> verband<strong>en</strong> : vanuit elk punt (stelt 1<br />

mogelijke combinatie van de variabel<strong>en</strong> voor) vertrekk<strong>en</strong> n<br />

lijn<strong>en</strong> naar n punt<strong>en</strong> die slechts 1 bit verschill<strong>en</strong> met de<br />

variabel<strong>en</strong> van dat punt.<br />

Karnaugh Karnaugh-kaart<br />

Karnaugh<br />

kaart : E<strong>en</strong> 2-dim<strong>en</strong>sionele<br />

dim<strong>en</strong>sionele voorstelling van<br />

e<strong>en</strong> n-kubus kubus : tot n = 4 variabel<strong>en</strong> is dit redelijk triviaal<br />

(we hebb<strong>en</strong> dan e<strong>en</strong> vierkant met 16 vakk<strong>en</strong>),<br />

voor n > 4 zull<strong>en</strong> we voor elke e<strong>en</strong>heid groter dan 4<br />

deze vakk<strong>en</strong> telk<strong>en</strong>s 2 keer kopiër<strong>en</strong> zodat we 2n vakk<strong>en</strong><br />

hebb<strong>en</strong>, geschikt in vierkant<strong>en</strong> van 16 vakk<strong>en</strong>.<br />

Elk vak vak heeft dan n bur<strong>en</strong> (dus ook bur<strong>en</strong> in andere<br />

vierkant<strong>en</strong> van 16) die met dat vierkant slechts in 1<br />

variabele variabele verschill<strong>en</strong> verschill<strong>en</strong>.<br />

verschill<strong>en</strong>


Wanneer er meer dan 4 variabel<strong>en</strong> zijn, ligg<strong>en</strong> alle bur<strong>en</strong> niet meer fysisch fysisch fysisch naast naast elkaar elkaar. elkaar Hierdoor<br />

wordt de kaart zeer onoverzichtelijk wordt naar mate er meer variabel<strong>en</strong> kom<strong>en</strong>. We kunn<strong>en</strong> werk<strong>en</strong><br />

met spiegeling spiegeling van de kaart<strong>en</strong> of door gewoon de kaart<strong>en</strong> te herhal<strong>en</strong> herhal<strong>en</strong> <strong>en</strong> de meest beduid<strong>en</strong>de bit te<br />

verander<strong>en</strong> (overal 16 optell<strong>en</strong>).<br />

Gespiegelde Gespiegelde kaart<strong>en</strong> Herhaalde kaart<strong>en</strong><br />

Het invull<strong>en</strong> invull<strong>en</strong> van de Karnaugkaart gebeurt met de<br />

waarheidstabel waarheidstabel : elk vakje komt overe<strong>en</strong> met e<strong>en</strong> rij in de<br />

waarheidtabel. We vull<strong>en</strong> gewoon de uitkomst van de functie in<br />

e<strong>en</strong> bepaalde rij in in het overe<strong>en</strong>komstige vakje.<br />

Minimale oplossing<strong>en</strong> oplossing<strong>en</strong> voor de booleaanse functie vind<strong>en</strong> we dan door zo<br />

groot groot mogelijke mogelijke mogelijke aane<strong>en</strong>sluit<strong>en</strong>de aane<strong>en</strong>sluit<strong>en</strong>de gebied<strong>en</strong> gebied<strong>en</strong> gebied<strong>en</strong> met oppervlakte macht<strong>en</strong> van 2<br />

met dezelfde waarde te selecter<strong>en</strong> <strong>en</strong> de overe<strong>en</strong>komstige variabel<strong>en</strong> te<br />

combiner<strong>en</strong>. Hiervoor zijn verschill<strong>en</strong>de mogelijkhed<strong>en</strong>.<br />

Bv. F = x’y’z’w’ + x’yz’w + x’yzw + xy’z’w’ + xy’zw’ + xyz’w + xyzw<br />

E<strong>en</strong> minimale oplossing daarvoor is yw + xy’w’ + y’z’w’<br />

2) ) Minimalisering Minimalisering met Karnaugh Karnaugh-kaart<br />

Karnaugh<br />

kaart<br />

Minimale Minimale AND AND-OR AND OR realisatie realisatie<br />

Minimalisatie Minimalisatie van booleaanse functie tot AND AND-OR AND<br />

OR implem<strong>en</strong>tatie :<br />

1) Karnaugh Karnaugh-kaart Karnaugh kaart kaart opstell<strong>en</strong> :<br />

Vanuit de de canonische vorm of de waarheidtabel :<br />

- voor elke 1 in de waarheidstabel zett<strong>en</strong> we<br />

e<strong>en</strong> 1 in de karnaughkaart<br />

- ook elke don’t care (wanneer het niet uitmaakt<br />

of de uitgang 0 of 1 is omdat de ingangcombinatie<br />

toch niet voorkomt) gev<strong>en</strong> we weer met e<strong>en</strong> kruis<br />

- de 0<strong>en</strong> zijn niet niet belangrijk<br />

belangrijk


2) ) Priemimplicant<strong>en</strong> Priemimplicant<strong>en</strong> bepal<strong>en</strong> bepal<strong>en</strong> :<br />

We bekijk<strong>en</strong> elke elke 1 in de kaart <strong>en</strong> bepal<strong>en</strong> voor elke 1 de grootst<br />

mogelijke mogelijke mogelijke subkubus subkubus die die minterm bevat. (kunn<strong>en</strong> meerdere<br />

kubuss<strong>en</strong> zijn als ze ev<strong>en</strong> groot zijn). We noter<strong>en</strong> elke<br />

priemimplicant. priemimplicant. De subkubuss<strong>en</strong> kunn<strong>en</strong> ook rechthoek<strong>en</strong> zijn,<br />

kunn<strong>en</strong> over de rand<strong>en</strong> gaan naar alle bur<strong>en</strong> van het vakje, <strong>en</strong> het<br />

aantal vakjes in de subkubus is altijd e<strong>en</strong> macht van van van 22.<br />

2<br />

3) ) Ess<strong>en</strong>tiële Ess<strong>en</strong>tiële priemimplicant<strong>en</strong> priemimplicant<strong>en</strong> bepal<strong>en</strong> bepal<strong>en</strong> :<br />

We zoek<strong>en</strong> nu alle 1’tjes (1-minterm<strong>en</strong> minterm<strong>en</strong> minterm<strong>en</strong>) minterm<strong>en</strong> die slechts in 1<br />

priemimplicant priemimplicant voorkom<strong>en</strong> : dit zijn de ess<strong>en</strong>tiële<br />

priemimplicante<br />

priemimplicant<strong>en</strong> priemimplicante die zeker mee opg<strong>en</strong>om<strong>en</strong> moet<strong>en</strong> word<strong>en</strong><br />

in de minimale functie.<br />

4) ) Minimale Minimale dekking dekking zoek<strong>en</strong> zoek<strong>en</strong> :<br />

Zoek de kleinste set (zo weinig mogelijk) van zo<br />

groot groot mogelijke mogelijke priemimplicant<strong>en</strong> die alle 1-<br />

minterm<strong>en</strong> minterm<strong>en</strong> omvat : We beginn<strong>en</strong> deze set als eerst<br />

met met met de de ess<strong>en</strong>tiële ess<strong>en</strong>tiële ppriemimplicant<strong>en</strong><br />

p riemimplicant<strong>en</strong> <strong>en</strong> daarna<br />

voeg<strong>en</strong> we telk<strong>en</strong>s e<strong>en</strong> priemimplicant toe die<br />

zoveel zoveel mogelijk mogelijk onbedekte onbedekte 11-minterm<strong>en</strong><br />

1 minterm<strong>en</strong> bevat tot<br />

dat we alle 1-<strong>en</strong> hebb<strong>en</strong>.<br />

Dit is e<strong>en</strong> gulzige gulzige (‘greedy’) strategie: we kiez<strong>en</strong> hier telk<strong>en</strong>s de beste oplossing zonder<br />

rek<strong>en</strong>ing te houd<strong>en</strong> met de gevolg<strong>en</strong> op toekomstige keuzes keuzes. keuzes keuzes Daardoor is dit niet<br />

noodzakelijk de meest optimale keuze voor het gehele systeem omdat we soms eerder<br />

geïmplem<strong>en</strong>teerde geïmplem<strong>en</strong>teerde functies kunn<strong>en</strong> herbruik<strong>en</strong> herbruik<strong>en</strong>. herbruik<strong>en</strong><br />

Soms is het beter om niet met AND-OR te werk<strong>en</strong> : AND-OR is e<strong>en</strong> 2-laags laags systeem<br />

waarbij de 1ste laag AND is <strong>en</strong> de 2de laag OR. We kunn<strong>en</strong> soms echter met e<strong>en</strong> 3-laags laags<br />

systeem e<strong>en</strong> goedkopere <strong>en</strong>/of snellere oplossing vind<strong>en</strong><br />

Nog e<strong>en</strong> voorbeeld :


Minimale Minimale Minimale OR OR-AND OR AND realisatie<br />

Deze methode is ongeveer hetzelfde hetzelfde, hetzelfde<br />

alle<strong>en</strong> zull<strong>en</strong> we hier de 0-minterm<strong>en</strong> minterm<strong>en</strong> realiser<strong>en</strong> in e<strong>en</strong> functie<br />

in plaats van de 1-minterm<strong>en</strong>. We beginn<strong>en</strong> dus met alle 0<strong>en</strong> <strong>en</strong> <strong>en</strong> <strong>en</strong> de de don’t don’t don’t cares cares te zoek<strong>en</strong>, daarvan de<br />

priemimplecant<strong>en</strong> <strong>en</strong> ess<strong>en</strong>tiële priemimplicant<strong>en</strong> te zoek<strong>en</strong>, We realiser<strong>en</strong> hier e<strong>en</strong> functie als<br />

Product van somm<strong>en</strong>. Bij de AND-OR implem<strong>en</strong>tatie was dit e<strong>en</strong> som van product<strong>en</strong>.<br />

We kunn<strong>en</strong> dus op verschill<strong>en</strong>de verschill<strong>en</strong>de manier<strong>en</strong> prober<strong>en</strong> om de functie te minimaliser<strong>en</strong>. Elke methode<br />

levert e<strong>en</strong> e<strong>en</strong> voor zijn methode minimale functie functie, functie<br />

<strong>en</strong> we kunn<strong>en</strong> dus elke methode overlop<strong>en</strong> <strong>en</strong> zi<strong>en</strong><br />

welke de best is. Meestal komt snelheid snelheid ook t<strong>en</strong> koste van prijs <strong>en</strong> omgekeerd.


3) ) Meerdere Meerdere uitgang<strong>en</strong> uitgang<strong>en</strong><br />

uitgang<strong>en</strong><br />

Wanneer we e<strong>en</strong> ontwerp ontwerp met meerdere uitgang<strong>en</strong> moet<strong>en</strong> realiser<strong>en</strong>, zull<strong>en</strong> we meerdere<br />

booleaanse booleaanse booleaanse functies functies hebb<strong>en</strong> van de ingangsvariabel<strong>en</strong> die elk één van de uitgang<strong>en</strong> afbeeld<strong>en</strong>. We<br />

moet<strong>en</strong> dan voor elke uitgang e<strong>en</strong> verschill<strong>en</strong>de Karnaugh Karnaugh-kaart<br />

Karnaugh<br />

kaart mak<strong>en</strong>.<br />

We zull<strong>en</strong> bij de minimalisatie<br />

minimalisatie minimalisatie zoals gewoonlijk alle ess<strong>en</strong>tiële priemimplicant<strong>en</strong><br />

bepal<strong>en</strong>. Daaruit selecter<strong>en</strong> we nu de priemimplicant<strong>en</strong> die we zull<strong>en</strong> gebruik<strong>en</strong><br />

voor de minimale functie functie. functie<br />

We zull<strong>en</strong> bij deze selectie zoveel zoveel mogelijk mogelijk gebruik<br />

gebruik<br />

mak<strong>en</strong> van die priemimplicant<strong>en</strong> die al al ess<strong>en</strong>tieel zijn voor e<strong>en</strong> andere functies functies. functies<br />

Deze zijn al al gerealiseerd gerealiseerd (voor die andere functies) <strong>en</strong> kunn<strong>en</strong> dus gratis herbruikt<br />

word<strong>en</strong>.<br />

Bv. bij het mak<strong>en</strong> van b zi<strong>en</strong> we dat yw’ reeds ess<strong>en</strong>tiëel is voor a : herbruik<strong>en</strong><br />

Wanneer we de keuze hebb<strong>en</strong> tuss<strong>en</strong> verschill<strong>en</strong>de reeds gerealiseerde<br />

gerealiseerde<br />

priemimplicant<strong>en</strong><br />

priemimplicant<strong>en</strong>, priemimplicant<strong>en</strong> zull<strong>en</strong> we die pakk<strong>en</strong> die in het kleinst aaantal<br />

a antal fucnties voorkomt voorkomt. voorkomt<br />

Dit do<strong>en</strong> we om de fan fan-out fan<br />

out van elke poort zo laag mogelijk te houd<strong>en</strong>.<br />

Bv. bij het mak<strong>en</strong> van c zi<strong>en</strong> we dat yw’ reeds geïmplem<strong>en</strong>teerd is voor a <strong>en</strong> b <strong>en</strong><br />

zw’ reeds voor a. We hebb<strong>en</strong> hier keuze tuss<strong>en</strong> het hergebruik<strong>en</strong> van yw’ <strong>en</strong> zw’.<br />

We zull<strong>en</strong> kiez<strong>en</strong> voor zw’ omdat yw’ reeds door meer functies wordt gebruikt.<br />

(fans-out van yw’ zou 3 word<strong>en</strong>, waar ze nu 2 is)<br />

Soms kan het ook voordelig zijn om niet niet-priemimplicant<strong>en</strong><br />

niet<br />

priemimplicant<strong>en</strong><br />

priemimplicant<strong>en</strong> te gebruik<strong>en</strong><br />

wanneer we dan meer meer implem<strong>en</strong>taties kunn<strong>en</strong> herbruik<strong>en</strong> (dit is wel e<strong>en</strong> trail-anderror-methode).<br />

De mogelijkhed<strong>en</strong> stijg<strong>en</strong> wanneer er meer lag<strong>en</strong> lag<strong>en</strong> poort<strong>en</strong><br />

toegelat<strong>en</strong> zijn.<br />

4) ) ‘Don’t ‘Don’t care’ care’ condities<br />

condities<br />

Soms is e<strong>en</strong> booleaanse functie voor bepaalde ingangscombinaites niet gedefinieerd<br />

gedefinieerd. gedefinieerd<br />

Dit komt voor<br />

wanneer die ingangsco ingangscombinaties ingangsco<br />

mbinaties nooit voorkom<strong>en</strong> tijd<strong>en</strong>s de werking van het systeem. Het maakt<br />

dan niet uit welke waarde de functie heeft <strong>en</strong> we kunn<strong>en</strong> daar handig gebruik van mak<strong>en</strong> om die<br />

waarde waarde waarde dan dan dan zelf zelf te te te kiez<strong>en</strong> kiez<strong>en</strong>. kiez<strong>en</strong> kiez<strong>en</strong> We kunn<strong>en</strong> dit gebruik<strong>en</strong> om grotere grotere priemimplicant<strong>en</strong> te mak<strong>en</strong>. We<br />

stell<strong>en</strong> de ‘don’t cares’ voor als kruisjes in de karnaughkaart<strong>en</strong> <strong>en</strong> kunn<strong>en</strong> dan grotere gebied<strong>en</strong> van 1<br />

of 0 mak<strong>en</strong> waardoor de booleaanse functie kleiner wordt.<br />

Bv. we beeld<strong>en</strong> e<strong>en</strong> BCD BCD-code BCD<br />

code code af op e<strong>en</strong> 7-segm<strong>en</strong>t segm<strong>en</strong>t display display. display<br />

BCD-code levert 4 ingangsvariabel<strong>en</strong><br />

die binair de waarde van de cijfers 0 tot 9 voorstell<strong>en</strong>. We zoek<strong>en</strong> nu de 7 booleaanse<br />

implem<strong>en</strong>taties implem<strong>en</strong>taties om de 7 segm<strong>en</strong>t<strong>en</strong> aan te stur<strong>en</strong> met de 4 BCD-ingangsvariabel<strong>en</strong>. We kunn<strong>en</strong><br />

echter met die 4 BCD-bits ook de getall<strong>en</strong> 10 tot 15 vorm<strong>en</strong>, maar die zull<strong>en</strong> nooit als ingang<br />

verschijn<strong>en</strong> omdat we die toch niet kunn<strong>en</strong> afbeeld<strong>en</strong> op de 7-segm<strong>en</strong>t display. Voor die<br />

ingangscombinaties maakt het dus niet uit wat de uitgang<strong>en</strong> zijn, aangezi<strong>en</strong> de ingang<strong>en</strong> toch<br />

nooit in die combinatie zull<strong>en</strong> voorkom<strong>en</strong>.


7777----segm<strong>en</strong>t segm<strong>en</strong>t segm<strong>en</strong>t segm<strong>en</strong>t display display display display<br />

Uitwerking van de 7 implem<strong>en</strong>taties van de segm<strong>en</strong>t<strong>en</strong> in functie van de 4 ingang<strong>en</strong>.


5) ) Quine Quine-McCluskey<br />

Quine McCluskey<br />

Deze methode om minimale booleaanse functies te zoek<strong>en</strong> maakt gebruik van tabell<strong>en</strong> tabell<strong>en</strong> om e<strong>en</strong><br />

optimale oplossing te vind<strong>en</strong>. Het is e<strong>en</strong> vaste manier van werk<strong>en</strong> die makkelijk te implem<strong>en</strong>ter<strong>en</strong> is<br />

voor voor CAD CAD-software<br />

CAD software software. software Echter moeilijk met de hand te do<strong>en</strong> (veel rek<strong>en</strong>werk).<br />

De basis is hetzelfde : we zoek<strong>en</strong> priemimplicant<strong>en</strong> : eerst gewoon alle 1’tjes, dan alle mogleijke<br />

groepjes van 2, dan van 4, <strong>en</strong>z. tot we alle priemimplicant<strong>en</strong> hebb<strong>en</strong>. Daarna stek<strong>en</strong> we die in e<strong>en</strong><br />

tabel <strong>en</strong> kijk<strong>en</strong> we welke 1’tjes maar maar door 1 priemimplicant wordt bedekt. Dit zijn de ess<strong>en</strong>tiële ess<strong>en</strong>tiële. ess<strong>en</strong>tiële<br />

Daarna gaan we gewoon alle mogelijke combinaties af <strong>en</strong> kijk<strong>en</strong> wel welke de meest optimale is.<br />

Impact Impact van van technologie<br />

technologie<br />

1) ) Gate Gate-Array Gate Array (NAND, NOR)<br />

Wanneer we e<strong>en</strong> ontwerp will<strong>en</strong> realiser<strong>en</strong> op e<strong>en</strong> chip met met gate gate-arrays gate arrays arrays, arrays moet<strong>en</strong> we dus ons ontwerp<br />

mapp<strong>en</strong> mapp<strong>en</strong> mapp<strong>en</strong> op op de de technologie technologie waarmee de chip chip werkt. In e<strong>en</strong> gate-array-chip hebb<strong>en</strong> we e<strong>en</strong> heleboel<br />

poort<strong>en</strong> poort<strong>en</strong> van éénzelfde type type met éénzelfde éénzelfde aantal ingang<strong>en</strong> : NAND NAND-poort<strong>en</strong><br />

NAND<br />

poort<strong>en</strong> of NOR NOR-poort<strong>en</strong><br />

NOR<br />

poort<strong>en</strong> poort<strong>en</strong> met m<br />

ingang<strong>en</strong> ingang<strong>en</strong> (meestal 3 of 4 ingang<strong>en</strong>). We moet<strong>en</strong> ons ontwerp omzett<strong>en</strong> naar e<strong>en</strong> ontwerp met <strong>en</strong>kel<br />

die soort poort <strong>en</strong> dat aantal ingang<strong>en</strong>.<br />

voor m-NAND NAND NAND-poort<strong>en</strong><br />

NAND poort<strong>en</strong> zull<strong>en</strong> we ons ontwerp baser<strong>en</strong> op INV INV-AND INV<br />

AND AND-OR AND OR ontwerp,<br />

geminimaliseerd met 1-minterm<strong>en</strong> minterm<strong>en</strong> minterm<strong>en</strong><br />

voor m-NOR NOR NOR-poort<strong>en</strong><br />

NOR poort<strong>en</strong> zull<strong>en</strong> we ons ontwerp baser<strong>en</strong> op INV INV-OR INV<br />

OR OR-AND OR AND ontwerp,<br />

geminimaliseerd met 0-minterm<strong>en</strong> minterm<strong>en</strong><br />

Het aanpass<strong>en</strong> aanpass<strong>en</strong> van het ontwerp aan de technologie gaat als vorlgt :<br />

1) Decompositie Decompositie<br />

Decompositie<br />

Decompositie : vervang de n-input AND-poort<strong>en</strong> door m-input AND-poort<strong>en</strong> (herleid het<br />

aantal ingang<strong>en</strong> van elke poort tot m). Dit is meestal het opslits<strong>en</strong> in meerdere poort<strong>en</strong> :<br />

2) Conversie Conversie Conversie Conversie : vervang AND door NAND (of door OR door NOR) : wett<strong>en</strong> van Morgan<br />

3) Optimalisatie Optimalisatie<br />

Optimalisatie<br />

Optimalisatie : eliminatie van dubbele negaties<br />

4) Optimalisering Optimalisering<br />

Optimalisering<br />

Optimalisering vertraging vertraging vertraging vertraging : we tracht<strong>en</strong> alle vertraging<strong>en</strong> van ingang naar uitgang gelijk te<br />

mak<strong>en</strong>. Zo is het kritische pad zo kort mogelijk. Bv. onderstaand ontwerp implem<strong>en</strong>ter<strong>en</strong> met<br />

3-input-NAND-poort<strong>en</strong> : de aangeduide weg is het kritische pad :<br />

origineel origineel origineel origineel<br />

optie optie optie optie 1 11<br />

1<br />

optie optie optie optie 2<br />

22<br />

2


Enkele voorbeeld<strong>en</strong> :<br />

1) wordt 3) wordt<br />

2) wordt 4) wordt<br />

Voor de realisatie van e<strong>en</strong> invertor zijn er 2 opties :<br />

<strong>en</strong> : nadeel is dat hier de stur<strong>en</strong>de poort 2 keer belast wordt in plaats van 1<br />

<strong>en</strong> : nadeel is dat we hier langere bedrading nodig hebb<strong>en</strong> om 1 <strong>en</strong> 0 te lever<strong>en</strong><br />

2) ) Compon<strong>en</strong>t<strong>en</strong>bibliotheek Compon<strong>en</strong>t<strong>en</strong>bibliotheek (AOi, (AOi, OAI OAI, OAI , …)<br />

Wanneer we nu zelf e<strong>en</strong> chip ontwerp<strong>en</strong> op e<strong>en</strong> zo efficiënt mogelijke mogelijke manier manier, manier<br />

(dus op poortniveau<br />

zelf chip mak<strong>en</strong>) dan beschikk<strong>en</strong> we over al alle al<br />

le soort<strong>en</strong> soort<strong>en</strong> poort<strong>en</strong> poort<strong>en</strong> poort<strong>en</strong> die de chipfabrikant<br />

chipfabrikant in zijn<br />

technologie aanbiedt. We kunn<strong>en</strong> hier gebruik mak<strong>en</strong> van alle poort<strong>en</strong> die zich in de bibliotheek bibliotheek van<br />

compon<strong>en</strong>t<strong>en</strong> van de produc<strong>en</strong>t bevindt. Bv. voor ASIC’s hebb<strong>en</strong> we nu naast NAND’s <strong>en</strong> NOR’s ook<br />

OAI’s OAI’s <strong>en</strong> AOI’s ter beschikking. Deze zijn klein <strong>en</strong> snel.<br />

AOI’s <strong>en</strong> OAI’s zijn speciale speciale specifieke poort<strong>en</strong> die ondersteund word<strong>en</strong><br />

door sommige bibliothek<strong>en</strong> (ASIC) <strong>en</strong> die gebruikt kunn<strong>en</strong> word<strong>en</strong> bij het<br />

specifieke ontwerp van chips. We impem<strong>en</strong>ter<strong>en</strong> hier eig<strong>en</strong>lijk 2 lag<strong>en</strong><br />

poort<strong>en</strong> oort<strong>en</strong> <strong>en</strong> e<strong>en</strong> invertor in één poort poort. poort<br />

Het voordeel is dat de AIO-poort veel<br />

goedkoper <strong>en</strong> sneller is dan het 3-lag<strong>en</strong>-systeem.<br />

Dit is dus<br />

bv. e<strong>en</strong> 3-breed, breed, 22-input<br />

2<br />

input input-AOI input AOI is één poort met 6 ingang<strong>en</strong> die dezelfde<br />

symbool voor<br />

booleaanse uitdrukking heeft als e<strong>en</strong> systeem van 3 lag<strong>en</strong> met eerst 3 AND-poort<strong>en</strong> één poort !!!<br />

met 2 ingang<strong>en</strong>, dan 1 OR-poort met 3 ingang<strong>en</strong> <strong>en</strong> dan e<strong>en</strong> invertor.<br />

- De AOI kost 6 (6 ingang<strong>en</strong>) terwijl het 3-lag<strong>en</strong>-systeem 10 kost (= 3x2 + 3 + 1)<br />

- De AOI heeft vertraging 3 (=0.6 + 6x0.4), het 3-lag<strong>en</strong>-systeem vertraging 7 (=3x1.4 + 1.8 + 1)<br />

Technology Technology-mapping<br />

Technology<br />

mapping komt nu neer op het groeper<strong>en</strong> van poort<strong>en</strong> in ons ontwerp zodat elke groep<br />

vervang<strong>en</strong> vervang<strong>en</strong> wordt wordt door door 1 specifieke compon<strong>en</strong>t in de bibliotheek. Dit is complexer dan bij gate-arrays.<br />

We gebruik<strong>en</strong> verschill<strong>en</strong>de methodes voor kleine <strong>en</strong> grote functies :<br />

Kleine Kl Kl Kleine<br />

eine eine functies functies functies functies : we realiser<strong>en</strong> de inverse functie met AND-OR of OR-AND <strong>en</strong> we zett<strong>en</strong> daar<br />

e<strong>en</strong> invertor achter, zodat we dit 3-lag<strong>en</strong>systeem<br />

lag<strong>en</strong>systeem<br />

lag<strong>en</strong>systeem kunn<strong>en</strong> stopp<strong>en</strong> in 1 AOI of of IAO IAO. IAO<br />

Deze <strong>en</strong>e<br />

poort plus invertor zal goedkoper uitkom<strong>en</strong> dan het 2-lag<strong>en</strong>systeem AND-OR of OR-AND. We<br />

vervang<strong>en</strong> vervang<strong>en</strong> gewoon gewoon elke elke 0 0 door door 1 1 <strong>en</strong> omgekeerd <strong>en</strong> optimaliser<strong>en</strong><br />

optimaliser<strong>en</strong> met karnaugh. We krijg<strong>en</strong> dan<br />

als uitgang F’, <strong>en</strong> dus zett<strong>en</strong> we op het einde gewoon e<strong>en</strong> invertor om terug F te krijg<strong>en</strong>.<br />

bv. bij het voorbeeld van optimalisatie kreg<strong>en</strong> we na minimaliser<strong>en</strong> e<strong>en</strong> OR-AND<br />

implem<strong>en</strong>tatie met kost 14 (16%) <strong>en</strong> vertraging 6,2 (56%).<br />

Wanneer we nu echter de inverse van de functie minimaliser<strong>en</strong> kunn<strong>en</strong> we het resultaat in<br />

één grote AOI met 6 ingang<strong>en</strong> stopp<strong>en</strong>. Resultaat : kostprijs van 11 <strong>en</strong> e<strong>en</strong> vertraging van 4.


Grote Grote Grote Grote functies functies functies functies : we volg<strong>en</strong> e<strong>en</strong> vast systeem :<br />

1) Realiseer ealiseer de functie als AND AND-OR AND<br />

OR OR of als OR OR-AND OR<br />

AND AND schema.<br />

2) Transformeer<br />

ransformeer het schema naar NAND of NOR NOR, NOR<br />

omdat dit de<br />

snelste poort<strong>en</strong> zijn. Zo hebb<strong>en</strong> we e<strong>en</strong> ontwerp dat gegarandeerd<br />

zo snel mogelijk is.<br />

3) 3) Bepaal het kritische pad (het pad met de langste delay tuss<strong>en</strong> input <strong>en</strong> output). Door de<br />

realisatie met NAND <strong>en</strong> NOR is dit pad het kortst mogelijke pad pad <strong>en</strong> we will<strong>en</strong> dus dit pad<br />

behoud<strong>en</strong> behoud<strong>en</strong>. behoud<strong>en</strong> (Wat we verder verander<strong>en</strong> mag niet langer word<strong>en</strong> dan dit pad)<br />

4) 4) Vervang Vervang zoveel mogelijk groep<strong>en</strong> van 2 2 lag<strong>en</strong> poort<strong>en</strong> poort<strong>en</strong> op het kritische pad door AOI of of OAI OAI. OAI<br />

Hierdoor verlaagt de kost zonder dat het kritische pad langer wordt.<br />

Wordt met AOI<br />

Wordt met OAI<br />

We kunn<strong>en</strong> ook andere groep<strong>en</strong> van poort<strong>en</strong> op het kritische pad vervang<strong>en</strong> :<br />

Wordt met OAI<br />

Bij deze laatste optie is na het vervang<strong>en</strong> van de bov<strong>en</strong>ste groep poort<strong>en</strong> e<strong>en</strong> nieuw nieuw kritisch<br />

pad pad ontstaan ontstaan !!! Hierop vervang<strong>en</strong> we dan de 2-de (groep) poort<strong>en</strong>.<br />

5) 5) Vervang Vervang zoveel mogelijk groep<strong>en</strong> van 2 2 lag<strong>en</strong> poort<strong>en</strong> buit<strong>en</strong> het het kritische pad pad door e<strong>en</strong><br />

compon<strong>en</strong>t compon<strong>en</strong>t uit uit uit de de bibliotheek bibliotheek.<br />

bibliotheek . Dit geeft e<strong>en</strong> lagere kost.<br />

3) ) FPGA FPGA<br />

FPGA<br />

Wanneer we het vorige toepass<strong>en</strong> op e<strong>en</strong> FPGA, zi<strong>en</strong> we dat wel alles moet<strong>en</strong> opsplits<strong>en</strong> in<br />

subschakeling<strong>en</strong> subschakeling<strong>en</strong> van van 4 4 of of of 5 5 variabel<strong>en</strong> variabel<strong>en</strong>. variabel<strong>en</strong> (De CLB’s hebb<strong>en</strong> alle<strong>en</strong> functies van 4 of 5 variabel<strong>en</strong>). We<br />

hebb<strong>en</strong> hier ge<strong>en</strong> AOI’s <strong>en</strong> OAI’s.<br />

Voor prototypes bij de FPGA of ASIC gebeurt deze aanpassing automatisch<br />

automatisch, automatisch voor het<br />

eindproduct kan handmatig handmatig optimaliser<strong>en</strong> voordelig zijn.


Tijdsgedrag<br />

Tijdsgedrag<br />

1) ) Hazerds Hazerds vermijd<strong>en</strong><br />

vermijd<strong>en</strong><br />

Soms zi<strong>en</strong> we dat e<strong>en</strong> bepaald signaal plots onverwacht veranderd veranderd voor voor e<strong>en</strong> e<strong>en</strong> korte tijd (naar e<strong>en</strong> fout<br />

niveau) <strong>en</strong> dan terug juist wordt. Zo e<strong>en</strong> bijkom<strong>en</strong>de niveauverstoring (‘glitch’ glitch’ glitch’) glitch’ noem<strong>en</strong> we e<strong>en</strong><br />

hazerd.<br />

Hazerds zijn te wijt<strong>en</strong> aan het het feit dat verschill<strong>en</strong>de poort<strong>en</strong> poort<strong>en</strong> poort<strong>en</strong> verschill<strong>en</strong>de verschill<strong>en</strong>de vertraging<strong>en</strong> met<br />

zich mee br<strong>en</strong>g<strong>en</strong>. (het tijdsgedrag van de schakeling dus) Wanneer e<strong>en</strong> signaal door verschill<strong>en</strong>de<br />

poort<strong>en</strong> langs verschill<strong>en</strong>de pad<strong>en</strong> pad<strong>en</strong> moet gaan <strong>en</strong> daarna weer sam<strong>en</strong>gevoegd wordt, is er e<strong>en</strong><br />

probleem. We zi<strong>en</strong> dan dat de verandering op het <strong>en</strong>e pad pad soms voor zit op de andere (minder<br />

poort<strong>en</strong> <strong>en</strong>/of snellere poort<strong>en</strong> teg<strong>en</strong>gekom<strong>en</strong> waardoor het sneller vooruit vooruit gaat). Op de plaats waar<br />

de signal<strong>en</strong> dan weer sam<strong>en</strong>kom<strong>en</strong><br />

sam<strong>en</strong>kom<strong>en</strong> hebb<strong>en</strong> we op e<strong>en</strong> bepaald mom<strong>en</strong>t 2 verschill<strong>en</strong>de verschill<strong>en</strong>de waard<strong>en</strong> waard<strong>en</strong> voor voor<br />

voor<br />

hetzelfde hetzelfde signaal signaal, signaal <strong>en</strong> zal de uitgang dus verkeert zijn. Het probleem lost zich vanzelf op wanneer de<br />

2de verandering de 1ste heeft ingehaald. Aangezi<strong>en</strong> bij deze hazerds de uitgang 2 keer nodeloos<br />

omgeschakelt wordt, is dit verspilling van vermog<strong>en</strong>.<br />

Bv. invertor : stel we takk<strong>en</strong> variabele a voor de invertor af. Wanneer we a verander<strong>en</strong> naar a’, zal<br />

de invertor relatieve tijd 1 nodig hebb<strong>en</strong> voor de uitgang veranderd van a’ naar a. We zi<strong>en</strong> dus dat<br />

tijd<strong>en</strong>s die relatieve tijd 1 de uitgang nog a’ is <strong>en</strong> de ingang ook a’, waardoor zowel de ingang als<br />

de uitgang van de invertor gedur<strong>en</strong>de periode 1 dezelfde waarde hebb<strong>en</strong>.<br />

Statische Statische Statische Statische hazard hazard hazard hazard : constant niveau vertoont gedur<strong>en</strong>de korte periode verstoring :<br />

- statische 1-hazard: uitgang moet 1 blijv<strong>en</strong> maar wordt ev<strong>en</strong> 0<br />

- statische 0-hazard: uitgang moet 0 blijv<strong>en</strong> maar wordt ev<strong>en</strong> 1<br />

bv bv. bv alle ingang<strong>en</strong> zijn 1, <strong>en</strong> we verander<strong>en</strong> y van 1<br />

naar 0. Hierdoor zal eerst b verander<strong>en</strong> na 2.2<br />

(wachttijd van AND). Dan verandert a na 1+2.2<br />

(wachttijd van invertor+AND). Door de invertor zit<br />

er nu e<strong>en</strong> tijdsverschil van 1 tuss<strong>en</strong> verandering<strong>en</strong><br />

in a <strong>en</strong> b. We zull<strong>en</strong> nu zi<strong>en</strong> dat F 2.2 na de<br />

verandering van b 0 wordt, omdat dan a <strong>en</strong> b 0 zijn.<br />

2.2 na de verandering van a <strong>en</strong> dus 1 na het 0<br />

word<strong>en</strong> van de uitgang veranderd die weer in 1<br />

omdat dat a 1 is.<br />

Dynamische Dynamische Dynamische Dynamische hazard hazard hazard hazard : uitgang schakelt niet e<strong>en</strong>maal meer wisselt eerst effe tuss<strong>en</strong> 0 <strong>en</strong> 1<br />

(overgangsverschijnsel<strong>en</strong>) bv. i.pv. direct 1 → 0 blijft het signaal eerst ev<strong>en</strong> op <strong>en</strong> neer beweg<strong>en</strong>)<br />

bv bv. bv x verandertvan 1 naar 0. hierdoor verandert1 later x’ van 0 naar 1<br />

<strong>en</strong> nog 1 later verandert x’’ van 1 naar 0. Door de vertraging van de<br />

2de invertor zal de XOR effe 0 word<strong>en</strong> omdat dan x’ <strong>en</strong> x’’ effe beide<br />

1 zijn. F wordt door de verandering van x eerst 1 zou<br />

normaal 1 moet<strong>en</strong> blijv<strong>en</strong> omdat a 1 is <strong>en</strong> x 0. Maar<br />

door de glitch van a die effe 0 wordt zal F ook effe 0<br />

zijn.


Het verschil verschil tuss<strong>en</strong> de statische hazerd <strong>en</strong> de dynamische is dat bij de dynamische de uitgang F<br />

effectief moet verander<strong>en</strong> van 0 naar 1 <strong>en</strong> daarna e<strong>en</strong> glitch maakt. Dit is op zich ge<strong>en</strong> echt groot<br />

probleem daar de schakeling toch al aan het schakel<strong>en</strong> was. Maar bij statische hazerds zou F<br />

normaal constant zou moet<strong>en</strong> blijv<strong>en</strong>, in plaats van effe te verander<strong>en</strong>. Daarom is e<strong>en</strong> statische<br />

hazerd e<strong>en</strong> groter probleem dan e<strong>en</strong> dynamische (d<strong>en</strong>k ik), daar de rest van de schakeling door de<br />

hazerd hier ook allemaal schakelt waar dat niet de bedoeling is.<br />

We will<strong>en</strong> nu liefst liefst e<strong>en</strong> e<strong>en</strong> ontwerp ontwerp zonder zonder zonder hazerds hazerds. hazerds Oplossing<strong>en</strong> :<br />

We voeg<strong>en</strong> extra poort<strong>en</strong> toe om de disjuncte gebied<strong>en</strong> in de karnaugkaart te bedekk<strong>en</strong>. (hazerds<br />

kom<strong>en</strong> namelijk voor waar 2 groep<strong>en</strong> in e<strong>en</strong> karnaugkaart onafhankelijk schakel<strong>en</strong> bij dezelfde<br />

ingang<strong>en</strong>) .We zull<strong>en</strong> nu naast de 2 verschill<strong>en</strong>de pad<strong>en</strong> waarover de veroorzak<strong>en</strong>de term propageer,t<br />

e<strong>en</strong> ander nder (3de) pad voorzi<strong>en</strong> waar de veroorzak<strong>en</strong>de term niet in zit. Deze extra extra poort<strong>en</strong> poort<strong>en</strong> poort<strong>en</strong> zijn<br />

redundant redundant : ze zijn totaal overbodig voor de logische werking, ze werk<strong>en</strong> alle<strong>en</strong> de hazerd weg.<br />

- voor de 1-hazerds hazerds zull<strong>en</strong> we e<strong>en</strong> extra minterm toevoeg<strong>en</strong> voor disjuncte 1-gebied<strong>en</strong> gebied<strong>en</strong><br />

- voor de 0-hazerds hazerds zull<strong>en</strong> we e<strong>en</strong> extra maxterm toevoeg<strong>en</strong> voor disjuncte 0-gebied<strong>en</strong> gebied<strong>en</strong> gebied<strong>en</strong><br />

bv bv. bv in het eerste voorbeeld hadd<strong>en</strong> we<br />

disjuncte gebied<strong>en</strong> op de karnaugh-kaart.<br />

We zull<strong>en</strong> die nu verbind<strong>en</strong> met e<strong>en</strong> extra<br />

gebied dat de y niet bevat. We br<strong>en</strong>g<strong>en</strong> e<strong>en</strong><br />

extra poort c in die altijd 1 blijft omdat x <strong>en</strong> z<br />

altijd 1 blijv<strong>en</strong> <strong>en</strong> zo zal ook F altijd 1<br />

blijv<strong>en</strong>, ook al word<strong>en</strong> a <strong>en</strong> b effe beide 0.<br />

Hazards zijn moeilijk handmatig te detecter<strong>en</strong> detecter<strong>en</strong>. detecter<strong>en</strong><br />

We zull<strong>en</strong> ons ontwerp moet<strong>en</strong> simuler<strong>en</strong> simuler<strong>en</strong> in de<br />

tijd tijd <strong>en</strong> het tijdsgedrag analyser<strong>en</strong> om hazerds te ontdekk<strong>en</strong>.<br />

De kans kans op hazards vergroot naarmate tPLH <strong>en</strong> tPHL meer verschill<strong>en</strong><br />

(verschil in overgangstijd<strong>en</strong> van laag naar hoog <strong>en</strong> omgekeerd)<br />

Hazerds zijn e<strong>en</strong> probleem als :<br />

- Als signaalovergang<strong>en</strong><br />

signaalovergang<strong>en</strong> gebruikt word<strong>en</strong> om te schakel<strong>en</strong> (bijv. klok) dan kan e<strong>en</strong> hazerd<br />

ongewild aanzi<strong>en</strong> word<strong>en</strong> als e<strong>en</strong> signaalovergang.<br />

- Als signaalniveaus gebruikt word<strong>en</strong> <strong>en</strong> de hazard komt op e<strong>en</strong> slecht og<strong>en</strong>blik (cfr.<br />

sequ<strong>en</strong>tiële schakeling<strong>en</strong>). Slechte og<strong>en</strong>blikk<strong>en</strong> voor e<strong>en</strong> synchrone schakeling zijn hazerds die<br />

sam<strong>en</strong>kom<strong>en</strong> met de klok. Wanneer de hazerd net valt op de klok zal de foute waarde van het<br />

signaal ingelez<strong>en</strong> word<strong>en</strong>, ook al staat deze foute waarde maar heel ev<strong>en</strong> op de draad. Voor e<strong>en</strong><br />

asynchrone schakeling is de hazerd altijd slecht.


Basisbouwblokk<strong>en</strong> asisbouwblokk<strong>en</strong> op op RTL RTL-niveau RTL niveau<br />

1) ) Optell<strong>en</strong> Optell<strong>en</strong> Optell<strong>en</strong> & & aftrekk<strong>en</strong><br />

aftrekk<strong>en</strong><br />

niveau (ADD, (ADD, ALU, ALU, MUX, MUX, …) …)<br />

…)<br />

Interludium : de XOR XOR-poort XOR<br />

poort poort. poort Deze is alle<strong>en</strong> 1 als slechts één van zijn ingang<strong>en</strong> 1 is.<br />

herk<strong>en</strong>baar aan zijn dambordpatroon op de karnaugh-kaart, afhankelijk van de schikking van<br />

de variabel<strong>en</strong>.<br />

voor meerdere meerdere ingang<strong>en</strong> kunn<strong>en</strong> we hem opsplits<strong>en</strong> in in e<strong>en</strong> boom van XOR’s met minder<br />

ingang<strong>en</strong><br />

de XOR is handig bruikbaar als programmeerbare invertor (we kunn<strong>en</strong> stur<strong>en</strong> of het signaal al<br />

dan niet geïnverteerd wordt)<br />

Halve opteller opteller (Half adder) : 2 input input-bits input<br />

bits die opgeteld opgeteld word<strong>en</strong>. Gewone werking van de OR OR-poort OR<br />

poort poort, poort<br />

buit<strong>en</strong> het feit dat wanneer beide ingang<strong>en</strong> ingang<strong>en</strong> 1 zijn, we de uitkomst 0 stell<strong>en</strong> <strong>en</strong> e<strong>en</strong> carry carry-bit carry<br />

bit bit 1 stell<strong>en</strong>.<br />

Deze carry-bit is 1 maar stelt dan de waarde 2 voor.<br />

Volledig Volledige Volledig<br />

e opteller opteller (Full Adder) FA : Houdt ook rek<strong>en</strong>ing met e<strong>en</strong> ev<strong>en</strong>tuele carry carry-bit carry<br />

bit als als ingang<br />

van de vorige optelling (3 ingang<strong>en</strong> nu dus). De werking is analoog met de halve opteller. 0 wanneer<br />

alles 0 is, uitgang 1 wanneer er 1 ingang 1 is, carry als er 2 ingang<strong>en</strong> 1 zijn <strong>en</strong> carry <strong>en</strong> uitgang 1<br />

wanneer alledrie 1. Er zijn verschill<strong>en</strong>de mogelijke implem<strong>en</strong>taties :


Ripple Ripple-carry Ripple<br />

carry opteller : Opteller van 2 nn-bits<br />

n<br />

bits getall<strong>en</strong> getall<strong>en</strong>. getall<strong>en</strong><br />

We hebb<strong>en</strong> dus 2 keer keer n ingang<strong>en</strong> ingang<strong>en</strong>, ingang<strong>en</strong><br />

n<br />

uitgang<strong>en</strong> <strong>en</strong> e<strong>en</strong> carry-uitgang. Realisatie door het aane<strong>en</strong>schakel<strong>en</strong> van van n volledige optellers waarbij<br />

de carry doorgegev<strong>en</strong> wordt.<br />

Carry Carry-look Carry<br />

look look-ahead look ahead opteller : de ripple-carry heeft e<strong>en</strong> redelijk lang kritisch<br />

pad pad van x0 naar cn+1. We kunn<strong>en</strong> dit versnell<strong>en</strong> door cn+1 n+1 appart te berek<strong>en</strong><strong>en</strong><br />

uit c0, x0…xn <strong>en</strong> y0…yn. Dit noemt met carry-look-ahead.<br />

Opbouw Opbouw : de rechter XOR’s di<strong>en</strong><strong>en</strong> voor de algem<strong>en</strong>e som som ssi<br />

s te gev<strong>en</strong> <strong>en</strong> cj+1 j+1<br />

j+1 is<br />

de algem<strong>en</strong>e overdracht overdracht. overdracht<br />

De pi is de som van beide ingang<strong>en</strong> <strong>en</strong> gi is de carry,<br />

beide zonder de input-carry te kijk<strong>en</strong>. De pi (carry carry carry-propagate<br />

carry propagate = xiyi’ + xi’yi)<br />

<strong>en</strong> de gi (carry carry g<strong>en</strong>erate g<strong>en</strong>erate = xiyi) zijn bedoeld voor het cascader<strong>en</strong> van de<br />

optellers tot n-bit optellers. De carry cj+1 j+1 = gi + + c<br />

c<br />

+ ci pi is 1 wanneer er carry is<br />

t<strong>en</strong> gevolge van xi <strong>en</strong> yi of wanneer er één van beide 1 is sam<strong>en</strong> met de carryin.<br />

Wanneer we n optellers in cascade schakel<strong>en</strong> om e<strong>en</strong> n-bit bit opteller te krijg<strong>en</strong>, zull<strong>en</strong> we nu<br />

de carry’s appart berek<strong>en</strong><strong>en</strong> vanuit de pi’s <strong>en</strong> de gi’s in e<strong>en</strong> apparte logische blok : de CLA<br />

g<strong>en</strong>erator (Carry-Look-Ahead). Elke carry cj+1 wordt daar berek<strong>en</strong>d op basis van factor<strong>en</strong> g(i,j)<br />

<strong>en</strong> p(i,j) <strong>en</strong> de vorige carry ci. p(i,j) <strong>en</strong> g(i,j) zijn functies van de pi’s <strong>en</strong> gi’s tot j. We kunn<strong>en</strong> zo<br />

e<strong>en</strong> efficiënte implem<strong>en</strong>tatie van de CLA mak<strong>en</strong>.<br />

De CLA moet volg<strong>en</strong>s de formules nu dus voor e<strong>en</strong> n-bi bi bit bi t opteller opteller opteller e<strong>en</strong> som <strong>en</strong> product<br />

kunn<strong>en</strong> mak<strong>en</strong> van n binaire binaire getall<strong>en</strong> getall<strong>en</strong>. getall<strong>en</strong><br />

Dit impliceert e<strong>en</strong> AND AND <strong>en</strong> <strong>en</strong> e<strong>en</strong> e<strong>en</strong> OR OR poort poort met n<br />

ingang<strong>en</strong> ingang<strong>en</strong>. ingang<strong>en</strong> Wanneer n groot wordt, overstijg<strong>en</strong> we de fan fan-in fan in in. in We moet<strong>en</strong> onze CLA’s dus<br />

beperk<strong>en</strong> beperk<strong>en</strong> in in aantal aantal optellers optellers die eraan hang<strong>en</strong>; meestal 4 4 opt optellers opt optellers<br />

ellers per per CLA CLA. CLA<br />

Wanneer we nu<br />

optellers met meer dan 4 bits will<strong>en</strong> mak<strong>en</strong>, moet<strong>en</strong> we de CLA’s combiner<strong>en</strong> in verschill<strong>en</strong>de<br />

lag<strong>en</strong> : cascade. Elke CLB krijgt dus uitgang<strong>en</strong> gj+1 <strong>en</strong> pj+i om over te drag<strong>en</strong> op de CLA die e<strong>en</strong><br />

trapje hoger staat <strong>en</strong> die 4 CLA’s uit het trapje onder hem combineert.


het kritische pad wordt voor e<strong>en</strong> 2-lag<strong>en</strong> systeem : xi of yi naar ci+n geeft dus 1 XOR, 1 ninput<br />

AND <strong>en</strong> 1 n-input OR. De vertraging wordt dan 6.4 + 0.8n [=3.2 + 2(1.6 + n0.4)].<br />

cascade van kk-bit<br />

k<br />

bit CLA CLA-g<strong>en</strong>erators CLA<br />

g<strong>en</strong>erators g<strong>en</strong>erators in log logk log<br />

(n) niveaus niveaus : bv. k = 4 bit met n=24 (geeft 2.29<br />

niveaus = log 4 24). Vertraging is 3,2 + (2⎡logk n⎤ − 1)×(3,2 + 0,8k) ). Deze vertraging is<br />

logaritmisch stijg<strong>en</strong>d.<br />

Opteller Opteller-Aftrekker<br />

Opteller<br />

Aftrekker (adder-substractor) : We mak<strong>en</strong> nu e<strong>en</strong> systeem waarmee we 2 nn-bit<br />

n<br />

bit getall<strong>en</strong><br />

getall<strong>en</strong><br />

kunn<strong>en</strong> optell<strong>en</strong> <strong>en</strong> aftrekk<strong>en</strong> aftrekk<strong>en</strong>. aftrekk<strong>en</strong><br />

We hebb<strong>en</strong> dan e<strong>en</strong> extra inputbit inputbit inputbit S waarmee we zegg<strong>en</strong> of er e<strong>en</strong><br />

optelling optelling volgt volgt of of e<strong>en</strong> e<strong>en</strong> aftrekking aftrekking. aftrekking<br />

E<strong>en</strong> aftrekking zull<strong>en</strong> we do<strong>en</strong> door het 2-complem<strong>en</strong>t<br />

complem<strong>en</strong>t van het getal<br />

dat afgetrokk<strong>en</strong> moet word<strong>en</strong> op te tell<strong>en</strong> bij het andere. Dit 2complem<strong>en</strong>t<br />

bekom<strong>en</strong> we door elke bit bit van van het 2de getal te te inverter<strong>en</strong> inverter<strong>en</strong>, inverter<strong>en</strong><br />

<strong>en</strong> er 1 bij op te tell<strong>en</strong> tell<strong>en</strong>. tell<strong>en</strong><br />

Deze 1 1 erbij erbij optell<strong>en</strong> optell<strong>en</strong> do<strong>en</strong> we door de carry carry van de eerst FA (Full Adder) op 1 te zett<strong>en</strong>.<br />

(hierdoor komt er 1 bij de som bij, dat is hetzelfde als 1 bij het af te trekk<strong>en</strong> getal te tell<strong>en</strong>.<br />

Om het 2de getal te inverter<strong>en</strong> inverter<strong>en</strong>, inverter<strong>en</strong><br />

zull<strong>en</strong> we XOR’s gebruik<strong>en</strong> gebruik<strong>en</strong>. gebruik<strong>en</strong><br />

We hebb<strong>en</strong> gezi<strong>en</strong> dat we die als<br />

schakelbare invertor<strong>en</strong> hebb<strong>en</strong> gebruik<strong>en</strong>. We zull<strong>en</strong> dus elke ingang yn sam<strong>en</strong> met het S-signaal<br />

door e<strong>en</strong> XOR hal<strong>en</strong>.<br />

- Wanneer S 0 is tell<strong>en</strong> we op <strong>en</strong> zal yn gewoon doorgelat<strong>en</strong> word<strong>en</strong>.<br />

- Wanneer S 1 is zal yn geïnverteerd word<strong>en</strong>.<br />

Detectie Detectie van van overflow overflow overflow : We hebb<strong>en</strong> overflow wanneer de 2 op te te tell<strong>en</strong> tell<strong>en</strong> getall<strong>en</strong> (dus het gewone <strong>en</strong><br />

het geïnverteerde) allebei van van tek<strong>en</strong> tek<strong>en</strong> tek<strong>en</strong> verschill<strong>en</strong> verschill<strong>en</strong> met met het het resultaat resultaat (dus beide hetzelfde tek<strong>en</strong> <strong>en</strong> dat<br />

verschilt van het resultaat).<br />

Het positief positief of of negatief negatief zijn van e<strong>en</strong> getal zi<strong>en</strong> we aan de meest beduid<strong>en</strong>de bit :<br />

0 voor positief <strong>en</strong> 1 voor negatief.<br />

Wanneer we 2 positieve ge getall<strong>en</strong> ge<br />

tall<strong>en</strong> optell<strong>en</strong> optell<strong>en</strong>, optell<strong>en</strong><br />

zal er dus bij overflow carry zijn naar de meest<br />

beduid<strong>en</strong>de bit c3, <strong>en</strong> zal c4 zowiezo 0 zijn omdat zowel x3 als y3 0 zijn voor positieve getall<strong>en</strong>.<br />

Wanneer we 2 2 negatieve getall<strong>en</strong> optell<strong>en</strong> zal er zowiezo carry zijn op c4, <strong>en</strong> bij overflow niet<br />

op c3 omdat de meer negatieve getall<strong>en</strong> x2 <strong>en</strong> y2 0 hebb<strong>en</strong> (zo 2 optell<strong>en</strong> geeft overflow)<br />

<strong>en</strong> de minder negatieve getall<strong>en</strong> x2 <strong>en</strong> y2 1 hebb<strong>en</strong> (zo 2 optell<strong>en</strong> geeft ge<strong>en</strong> overflow).<br />

Dit volgt uit de definitie van het 2 complem<strong>en</strong>t : bv. 7 is 0111 / 1 is 0001 / -1 is 1111 / -8 is 1000.<br />

Om de overflow te te detecter<strong>en</strong> combiner<strong>en</strong> we dus c3 <strong>en</strong> <strong>en</strong> cc4<br />

c in in e<strong>en</strong> e<strong>en</strong> e<strong>en</strong> XOR XOR.<br />

XOR


2) ) Verm<strong>en</strong>igvuldig<strong>en</strong><br />

Verm<strong>en</strong>igvuldig<strong>en</strong><br />

Parallelle Parallelle verm<strong>en</strong>igvuldigers verm<strong>en</strong>igvuldigers : we verm<strong>en</strong>igvuldig<strong>en</strong> 2 2 nn-bits<br />

n bits bits binaire getall<strong>en</strong>.<br />

1-bit bit maal 11-bit<br />

1<br />

bit product : Dit is simpelweg e<strong>en</strong> AND-poort : wanneer er<br />

minst<strong>en</strong>s één van beide 0 is geeft e<strong>en</strong> product 0. Wanneer beide 1 zijn geeft 1<br />

2-bit bit maal 22-bit<br />

2<br />

bit product : Dit geeft maximaal e<strong>en</strong> 4-bit bit bit getal dus moet<strong>en</strong> we 4 bits rek<strong>en</strong><strong>en</strong> als<br />

uitgang. Systeem van verm<strong>en</strong>igvuldig<strong>en</strong> :<br />

we herhal<strong>en</strong> het het verm<strong>en</strong>igvuldigtal verschill<strong>en</strong>de ker<strong>en</strong> onder elkaar,<br />

telk<strong>en</strong>s 1 plaats opgeschov<strong>en</strong> (realiser<strong>en</strong> met drad<strong>en</strong>),<br />

telk<strong>en</strong>s verm<strong>en</strong>igvuldigt verm<strong>en</strong>igvuldigt met het volg<strong>en</strong>de getal uit de verm<strong>en</strong>igvuldiger (met AND- poort<strong>en</strong>),<br />

En uiteindelijk tell<strong>en</strong> we alles op tot de<br />

einduitkomst (met halve optellers).<br />

4-bit bit maal 33-bit<br />

3<br />

bit product : we werk<strong>en</strong> in<br />

stapjes <strong>en</strong> tell<strong>en</strong> telk<strong>en</strong>s e<strong>en</strong> nieuw,<br />

overschov<strong>en</strong> <strong>en</strong> verm<strong>en</strong>igvuldigt<br />

verm<strong>en</strong>igvuldigtal op bij wat we al hadd<strong>en</strong>.<br />

Wanneer we werk<strong>en</strong> met optellers/aftrekkers <strong>en</strong> rek<strong>en</strong>ing<br />

houd<strong>en</strong> met de tek<strong>en</strong>bit tek<strong>en</strong>bit, tek<strong>en</strong>bit<br />

kunn<strong>en</strong> we ook negatieve getall<strong>en</strong><br />

verm<strong>en</strong>igvuldig<strong>en</strong><br />

verm<strong>en</strong>igvuldig<strong>en</strong>. verm<strong>en</strong>igvuldig<strong>en</strong> Wanneer we bv. -1 maal -1 in 4-bitvoorstelling<br />

verm<strong>en</strong>igvuldig<strong>en</strong> krijg<strong>en</strong> we 1111 maal 1111. dit<br />

geeft inderdaad 00000001.<br />

Overgaan naar sign sign-magnitude<br />

sign<br />

magnitude magnitude-voorstelling<br />

magnitude voorstelling geeft meestal minder hardware hardware <strong>en</strong> is dus soms beter.


3) ) (A)LU (A)LU (A)LU : (Aritmetische) & logische e<strong>en</strong>heid<br />

LU : logische e<strong>en</strong>heid : compon<strong>en</strong>t die alle 16<br />

mogelijke mogelijke booleaanse booleaanse booleaanse functies functies van 2 bits kan<br />

realiser<strong>en</strong>. De analoge e<strong>en</strong>heid voor n bits wordt<br />

gemaakt met n e<strong>en</strong>hed<strong>en</strong> voor elk 1 bit. We<br />

selecter<strong>en</strong> selecter<strong>en</strong> de de functie functie die we will<strong>en</strong> toepass<strong>en</strong> op de<br />

ingang<strong>en</strong> met e<strong>en</strong> input van van 4 bits bits SS3S2S1S0<br />

S<br />

, waarmee<br />

we de getall<strong>en</strong> 0 tot 15 kunn<strong>en</strong> ingev<strong>en</strong>. Deze kom<strong>en</strong><br />

elk overe<strong>en</strong> met één van de 16 booleaanse functies :<br />

de codering van de selectiebits is id<strong>en</strong>tiek aan het<br />

functi<strong>en</strong>ummer in de tabel van de mogelijke<br />

Booleaanse functies.<br />

We implem<strong>en</strong>ter<strong>en</strong> implem<strong>en</strong>ter<strong>en</strong> deze logisch e<strong>en</strong>heid als volgt :<br />

ALU ALU : Aritmetische Aritmetische logische e<strong>en</strong>heid : twee 44-bits<br />

4<br />

bits ingang<strong>en</strong> word<strong>en</strong> verwerkt tot één 44-bits<br />

4<br />

bits bits<br />

uitgang uitgang. uitgang Deze uitgang is e<strong>en</strong> bepaalde functie functie van de ingang. Deze functie functie kunn<strong>en</strong> kunn<strong>en</strong> we zelf kiez<strong>en</strong> kiez<strong>en</strong>, kiez<strong>en</strong><br />

zoals we in de LU ook de functie van de ingangsvariabel<strong>en</strong> kond<strong>en</strong> kiez<strong>en</strong>. Opties :<br />

we voer<strong>en</strong> 4 aritmetische bewerking<strong>en</strong> uit op de 4 ingangsbits :<br />

elke an <strong>en</strong> bn kunn<strong>en</strong> word<strong>en</strong> opgetelt opgetelt, opgetelt<br />

, afgetrokk<strong>en</strong>, ‘increm<strong>en</strong>t’ (+1) <strong>en</strong> ‘decrem<strong>en</strong>t’ ( (−1) (<br />

−1)<br />

we voer<strong>en</strong> 4 logische bewerking<strong>en</strong> op de 4 ingangsbits :<br />

elke an <strong>en</strong> bn word<strong>en</strong> gecombineert als AND, OOR,<br />

O<br />

R, INV INV INV of of id<strong>en</strong>titeit (gewoon buffer) buffer). buffer)<br />

We implem<strong>en</strong>ter<strong>en</strong><br />

implem<strong>en</strong>ter<strong>en</strong> implem<strong>en</strong>ter<strong>en</strong> deze ALU met :<br />

Opteller voor arit aritmetische<br />

arit<br />

metische operaties : de FA (full-adders)<br />

Arithmetic Arithmetic-Logic Arithmetic<br />

Logic Logic Ext<strong>en</strong>der (ALE) voor de conditionering van de ingang<strong>en</strong> ingang<strong>en</strong> van de opteller<br />

(cfr. XOR bij aftrekking) <strong>en</strong> voor de logische operaties operaties. operaties<br />

(komt voor de opteller)<br />

We kiez<strong>en</strong> tuss<strong>en</strong> de logische of aritmetisch aritmetische<br />

aritmetisch<br />

functie via 3 ingangsbits SS0,<br />

S<br />

, , SS1<br />

S <strong>en</strong> <strong>en</strong> M. Zij<br />

bepal<strong>en</strong> de carry-in van de eerste FA <strong>en</strong><br />

kom<strong>en</strong> ook in elke ALE om daar te stur<strong>en</strong><br />

M kiest tuss<strong>en</strong> 0 voor logische<br />

bewerking<strong>en</strong> <strong>en</strong> 1 voor artimetische<br />

artimetische<br />

S0 <strong>en</strong> S1 selecter<strong>en</strong> welke welke bewerking we<br />

do<strong>en</strong>. (de functie)


Mogelijke functies in de ALU : De<br />

logische logische logische functies functies bepal<strong>en</strong> we in de ALE <strong>en</strong><br />

word<strong>en</strong> dan gewoon opgeteld met 0 in de<br />

FA. In de FA’s word dan opgetelt opgetelt, opgetelt<br />

<strong>en</strong> via de<br />

carry carry carry in in <strong>en</strong> de 2 de ingang ingang verschill<strong>en</strong>de<br />

verschill<strong>en</strong>de<br />

verschill<strong>en</strong>de<br />

bewerking<strong>en</strong> bewerking<strong>en</strong> op de getal(l<strong>en</strong>) uitgevoerd.<br />

De carry carry-in carry in c0 moet 0 zijn voor alle logische functies functies. functies<br />

Ook voor decrem<strong>en</strong>t<br />

<strong>en</strong> optell<strong>en</strong> is hij 0. Wordt pas gebruikt bij increm<strong>en</strong>t wanneer we via de<br />

carry carry-in carry in in 1 kunn<strong>en</strong> optell<strong>en</strong> bij het getal, <strong>en</strong> om hij het aftrekk<strong>en</strong> e<strong>en</strong><br />

2-complem<strong>en</strong>t<br />

complem<strong>en</strong>t te mak<strong>en</strong>.<br />

De implem<strong>en</strong>tatie implem<strong>en</strong>tatie van de uitgang X <strong>en</strong> Y van de ALE bepal<strong>en</strong> we als als volgt :<br />

X-uitgang uitgang : - voor aritmetische bewerking<strong>en</strong> geeft die gewoon het eerste getal telk<strong>en</strong>s door.<br />

- voor logische bewerking<strong>en</strong> zal hij het resultaat van de bewerking doorgev<strong>en</strong>. Daar<br />

wordt dan gewoon 0 bij optgeteld <strong>en</strong> zo doorgegev<strong>en</strong> naar de uitgang.<br />

Y-uitgang uitgang : - voor logische logische bewerking<strong>en</strong> is die altijd 0 omdat dat 0 bij de andere uitgang wordt<br />

opgeteld <strong>en</strong> die zo als resultaat naar de uitgang gaat.<br />

- voor aritmetische bewerking<strong>en</strong> wordt het 2de getal voor de optelling daar<br />

geprepareed. Voor optelling gewoon B, aftrekk<strong>en</strong> complem<strong>en</strong>t van B, increm<strong>en</strong>t 0<br />

<strong>en</strong> voor decrem<strong>en</strong>t allemaal 1tjes (is -1 in het 2-compem<strong>en</strong>tair binair)<br />

4) ) (De)multiplexer (De)multiplexer <strong>en</strong> <strong>en</strong> Decoders<br />

Decoders<br />

E<strong>en</strong> decorde decorder decorde<br />

r of demultiplexer (demux) is e<strong>en</strong> schakeling die bepaald<br />

aantal aantal ingang<strong>en</strong> ingang<strong>en</strong> ingang<strong>en</strong> omzet naar e<strong>en</strong> groter aantal uit uitgang<strong>en</strong> uit<br />

gang<strong>en</strong> volg<strong>en</strong>s e<strong>en</strong><br />

bepaalde bepaalde codering codering codering <strong>en</strong> daarbij dus redundante redundante info (bits (bits) (bits<br />

toevoegt.<br />

Bv. de 2-naar-4 decoder codeert<br />

2 ingangsbits tot 4 uitgangsbits.<br />

Er is ook e<strong>en</strong> <strong>en</strong>able-ingang<br />

waarmee we alle uitgang<strong>en</strong> 0<br />

kunn<strong>en</strong> mak<strong>en</strong>.


wanneer we de decorders decorders in cascade achtere<strong>en</strong><br />

zett<strong>en</strong>, kunn<strong>en</strong> we grotere decoders mak<strong>en</strong> :<br />

e<strong>en</strong> nm nm-naar nm naar<br />

naar-2 nm<br />

nm decoder mak<strong>en</strong> we door n<br />

niveaus niveaus van gecascadeerde m-naar naar naar-2 naar m decorders<br />

te bouw<strong>en</strong>. We hebb<strong>en</strong> dan (2nm − 1)/(2m − 1)<br />

decoders in totaal nodig.<br />

Bv. 2 niveaus van 2-naar naar naar-4 naar 4 decoders geeft e<strong>en</strong><br />

4-naar naar naar-16 naar 16 decoder : bov<strong>en</strong>aan kom<strong>en</strong> 2 van de<br />

4 ingang<strong>en</strong> A3 <strong>en</strong> A2 binn<strong>en</strong>, die dan gecodeerd naar de 4 <strong>en</strong>able-ingang<strong>en</strong> van de 4 decoders op<br />

het niveau eronder gaan. In elk van die 4 onderste decoders word<strong>en</strong> dan de 2 laatste ingang<strong>en</strong> A1<br />

<strong>en</strong> A0 gecodeerd.<br />

De selector selector of multiplexer (MUX) selecteerd één van de 2 n ingangssignal<strong>en</strong> ingangssignal<strong>en</strong> als als uitgang uitgang. uitgang Deze keuze<br />

wordt bepaald door de n stur<strong>en</strong>de inputssignal<strong>en</strong> die binair de nummer doorgev<strong>en</strong> van het te<br />

selecter<strong>en</strong> kanaal. We kunn<strong>en</strong> e<strong>en</strong> 2-naar-1 mux implem<strong>en</strong>ter<strong>en</strong> op ½ CLB <strong>en</strong> e<strong>en</strong> 4-naar-1 CLB op 1<br />

CLB.<br />

We kunn<strong>en</strong> ook e<strong>en</strong> decoder gebruik<strong>en</strong> om het stur<strong>en</strong>de signaal te ontled<strong>en</strong> <strong>en</strong> te verdel<strong>en</strong> over de 4<br />

ingang<strong>en</strong>. We kunn<strong>en</strong> hierbij AND’s gebruik<strong>en</strong> of 3-state-buffers.<br />

E<strong>en</strong> bus is eig<strong>en</strong>lijk e<strong>en</strong> soort van gedistribueerde versie versie versie van van de de de MUX MUX. MUX De ingang<strong>en</strong> zijn over e<strong>en</strong><br />

lange lijn verdeeld, maar het principe is hetzelfde. De sturing wordt gecodeerd <strong>en</strong> verdeeld over<br />

lijn<strong>en</strong> waarvan er telk<strong>en</strong>s één naar elke aangeslot<strong>en</strong> 3-state-buffer gaat.<br />

Voordel<strong>en</strong> Voordel<strong>en</strong> van van e<strong>en</strong> e<strong>en</strong> bus bus teg<strong>en</strong>over de MUX :<br />

bus is makkelijk uit te bereid<strong>en</strong><br />

de OR OR-poort OR poort in de MUX heeft e<strong>en</strong> beperkte beperkte fan fan-in fan<br />

in<br />

alle ingang<strong>en</strong> moet<strong>en</strong> naar 1 c<strong>en</strong>trale plaats bij de<br />

MUX waar bij de bus gewoon de bus overal passeert.<br />

3-state state state-buffers<br />

state buffers zijn in e<strong>en</strong> FPGA toch gratis omdat<br />

elke CLB er e<strong>en</strong> heeft die aan e<strong>en</strong> horizontale lange<br />

zijn verbond<strong>en</strong> kan word<strong>en</strong>


Ook multiplex<strong>en</strong> ultiplex<strong>en</strong> kunn<strong>en</strong> we cascader<strong>en</strong> cascader<strong>en</strong> om<br />

met bv. 5 keer e<strong>en</strong> 4-naar-1-mux e<strong>en</strong> 16-naar-<br />

1mux te mak<strong>en</strong>. We hebb<strong>en</strong> dan uiteraard 4<br />

sturingskanal<strong>en</strong> nodig. Met de eerst 2<br />

sturingssignal<strong>en</strong> kiez<strong>en</strong> we uit elke groep van 4<br />

één die doormag, <strong>en</strong> uit die 4 kiez<strong>en</strong> we dan met<br />

de 2 overige sturingssignal<strong>en</strong> welke de<br />

uiteindelijke uitgang wordt.<br />

5) Prioriteits<strong>en</strong>co<br />

Prioriteits<strong>en</strong>coder<br />

Prioriteits<strong>en</strong>co der<br />

De prioriteits<strong>en</strong>coder prioriteits<strong>en</strong>coder is de inverse inverse van van de decoder decoder. decoder<br />

Dat wil zegg<strong>en</strong> dat<br />

e<strong>en</strong> prioriteits<strong>en</strong>coder achter e<strong>en</strong> decoder e<strong>en</strong> id<strong>en</strong>titeit geeft. De <strong>en</strong>coder<br />

heeft n uitgang<strong>en</strong> <strong>en</strong> 2n ingang<strong>en</strong> ingang<strong>en</strong>. ingang<strong>en</strong> De uitgang geeft telk<strong>en</strong>s binair de<br />

nummer nummer nummer van van de de plaats plaats van van van de de meest meest meest beduid<strong>en</strong>de beduid<strong>en</strong>de bit in de ingang. Dit<br />

omdat in uitgang van de decoder slechts op één plaats e<strong>en</strong> 1 staat <strong>en</strong> dit<br />

mete<strong>en</strong> de meest beduid<strong>en</strong>de bit is. De <strong>en</strong>coder heeft ook e<strong>en</strong> uitgang Any Any, Any<br />

die slechts 0 geeft wanneer alle uitgang<strong>en</strong> 0 zijn.<br />

Implem<strong>en</strong>tat<br />

Implem<strong>en</strong>tatie<br />

Implem<strong>en</strong>tat<br />

ie : Any combineert alles gewoon in e<strong>en</strong> AND,<br />

A1 moet 1 gev<strong>en</strong> wanneer we D2 <strong>en</strong>/of D3 1 hebb<strong>en</strong> <strong>en</strong> A0 moet<br />

werk<strong>en</strong> wanneer D1 <strong>en</strong> niet D2 of wanneer D3 1 is.<br />

Cascader<strong>en</strong> Cascader<strong>en</strong> van prioriteits<strong>en</strong>coders om meer complexe<br />

<strong>en</strong>coders te mak<strong>en</strong> : 16-naar-4 <strong>en</strong>coder gemaakt uit 6<br />

4-naar-2 <strong>en</strong>coders. Uit elke groep van 4 wordt de<br />

nummer van de meest beduid<strong>en</strong>de bit gehaald door 4<br />

<strong>en</strong>coders. We combiner<strong>en</strong> alle Any’s van die 4<br />

<strong>en</strong>coders in 1 <strong>en</strong>coder, die daar dan A3 <strong>en</strong> A2 uithaalt.<br />

Van de 4 <strong>en</strong>coders word<strong>en</strong> telk<strong>en</strong>s alle U0 <strong>en</strong> U1 appart<br />

sam<strong>en</strong>gebracht in twee multiplex<strong>en</strong>, met als sturing de<br />

uitgang<strong>en</strong> A3 <strong>en</strong> A2. Met de sturing wet<strong>en</strong> we in welke<br />

van de 4 <strong>en</strong>coders de meest beduid<strong>en</strong>de bit zit, <strong>en</strong> in de<br />

multiplex<strong>en</strong> selecter<strong>en</strong> we dan de uitgang<strong>en</strong> van die<br />

<strong>en</strong>coder als A0 <strong>en</strong> A1.


6) Vergelijke Vergelijk<strong>en</strong> Vergelijke n (comparator)<br />

De comparator heeft 2 n-bits bits ingang<strong>en</strong> X <strong>en</strong> Y <strong>en</strong> 2<br />

uitgang<strong>en</strong> uitgang<strong>en</strong> G G <strong>en</strong> <strong>en</strong> LL.<br />

L Hij zal nu de ingang<strong>en</strong> X <strong>en</strong> Y vergelijk<strong>en</strong> vergelijk<strong>en</strong> vergelijk<strong>en</strong> in<br />

numerieke numerieke waard<strong>en</strong> waard<strong>en</strong> <strong>en</strong> op basis daarvan G <strong>en</strong> L bepal<strong>en</strong>.<br />

Bepal<strong>en</strong> van de uitgang<strong>en</strong> :<br />

X > Y dan G = 11,<br />

1<br />

dus G = 0 als X ≤ Y<br />

Y > XX<br />

X<br />

dan L = 11,<br />

1<br />

dus L = 0 als Y ≤ X<br />

X=Y dan is G=0 <strong>en</strong> L=0 L=0<br />

G <strong>en</strong> L zijn nooit allebei sam<strong>en</strong> 1<br />

Implem<strong>en</strong>tatie van e<strong>en</strong> 2-bits comparator : We kijk<strong>en</strong> eerst<br />

naar de meest beduid<strong>en</strong>de bit bit : wanneer die verschill<strong>en</strong> is die met<br />

de 1 de grootste, wanneer die gelijk zijn vergelijk<strong>en</strong> we de minst<br />

beduid<strong>en</strong>de bits.<br />

Cascade Cascade van comparator<strong>en</strong> om grotere getall<strong>en</strong> te vergelijk<strong>en</strong> : 2 manier<strong>en</strong><br />

we vergelijk<strong>en</strong> de minst beduid<strong>en</strong>de bits <strong>en</strong><br />

gebruik<strong>en</strong> die uitgang G <strong>en</strong> L telk<strong>en</strong>s als minst<br />

beduid<strong>en</strong>de ingang om met het volg<strong>en</strong>de<br />

binaire niveau te combiner<strong>en</strong>. G is 1 wanneer<br />

van alle niveaus eronder X de grootste is, <strong>en</strong><br />

anders is L 1. Wanneer beide 0 zijn is wat<br />

eronder zit gelijk.<br />

Het vorige heeft het nadeel nogal lang te zijn<br />

<strong>en</strong> dus minder snel. We kunn<strong>en</strong> nu in<br />

boomvorm werk<strong>en</strong> <strong>en</strong> telk<strong>en</strong>s per 2 naast<br />

elkaarligg<strong>en</strong>de niveaus combiner<strong>en</strong>. We<br />

bekom<strong>en</strong> dan e<strong>en</strong> veel minder lang kritisch pad.<br />

wanneer we één nn-bits<br />

n<br />

bits ingang will<strong>en</strong> vergelijk<strong>en</strong> vergelijk<strong>en</strong> met met e<strong>en</strong> e<strong>en</strong> vaste vaste waarde waarde V (dus niet met e<strong>en</strong> 2de variabele ingang), kunn<strong>en</strong> we dit soms effici<strong>en</strong>ter do<strong>en</strong>. Stel we vergelijk<strong>en</strong> X (8-bits) met vaste<br />

getall<strong>en</strong> : de schakeling moet 1 gev<strong>en</strong> wanneer x de vaste waarde V heeft.


7) Schuifoperaties<br />

Schuifoperaties<br />

Schuifoperaties Schuifoperaties : in e<strong>en</strong> reeks van n bits (woord, cijfer) verschuiv<strong>en</strong> we alle alle bits m po posities po<br />

sities naar<br />

links ‘’. Daarbij gaan dus telk<strong>en</strong>s m bits verlor<strong>en</strong> <strong>en</strong> word<strong>en</strong> er m nieuwe<br />

bits bits geïntroduceerd<br />

geïntroduceerd. geïntroduceerd We kunn<strong>en</strong> om 2 red<strong>en</strong><strong>en</strong> verschuiv<strong>en</strong><br />

verschuiv<strong>en</strong>, verschuiv<strong>en</strong><br />

afhankelijk vanwaar de nieuwe bits<br />

kom<strong>en</strong> :<br />

Logisch schuiv<strong>en</strong> : de nieuwe bits kom<strong>en</strong> van e<strong>en</strong> bijkom<strong>en</strong>de ingang ingang<br />

ingang<br />

Aritmetisch schuiv<strong>en</strong> :<br />

- naar naar links schuiv<strong>en</strong> betek<strong>en</strong>d m null<strong>en</strong> rechts erbijvoeg<strong>en</strong> erbijvoeg<strong>en</strong>,<br />

erbijvoeg<strong>en</strong><br />

- naar rechts rechts schuiv<strong>en</strong> betek<strong>en</strong>d m m bits links erbijvoeg<strong>en</strong> erbijvoeg<strong>en</strong>. erbijvoeg<strong>en</strong><br />

Deze toe te voeg<strong>en</strong> bits links hang<strong>en</strong><br />

af van wat voor getal het is : als we werk<strong>en</strong> met 2-complem<strong>en</strong>t<br />

complem<strong>en</strong>t moet<strong>en</strong> we zorg<strong>en</strong> dat het<br />

tek<strong>en</strong> behoud<strong>en</strong> blijft <strong>en</strong> moet<strong>en</strong> we dus tek<strong>en</strong>bits toevoeg<strong>en</strong> (MBS). Wanneer we werk<strong>en</strong> met<br />

sign sign-magnitude<br />

sign magnitude voeg<strong>en</strong> we null<strong>en</strong> bij.<br />

Deze verschuiving<strong>en</strong> zijn (aritmetrisch) verm<strong>en</strong>igvuldiging<strong>en</strong> met met 2 2m<br />

voor verschuiv<strong>en</strong> naar links<br />

<strong>en</strong> del<strong>en</strong> door 2 m voor verschuiv<strong>en</strong> naar links<br />

Roter<strong>en</strong> Roter<strong>en</strong> : We roter<strong>en</strong> e<strong>en</strong> inputreeks inputreeks van n bits m m posities naar links of rechts : dat betek<strong>en</strong>d dat we<br />

links m bits wegnem<strong>en</strong> <strong>en</strong> die rechts terug bijvoeg<strong>en</strong> of omgekeerd. Hierbij gaan ge<strong>en</strong> bits verlor<strong>en</strong> verlor<strong>en</strong>, verlor<strong>en</strong><br />

de bits die aan de <strong>en</strong>e kant afvall<strong>en</strong> word<strong>en</strong> er aan de andere kant bijgezet.<br />

Implem<strong>en</strong>tatie : Wanneer we e<strong>en</strong> 4-bit bit ingang<strong>en</strong> hebb<strong>en</strong>, hebb<strong>en</strong> we ook e<strong>en</strong> 4-bit bit uitgang uitgang. uitgang<br />

We<br />

hebb<strong>en</strong> ook 3 ingang<strong>en</strong> om om te stur<strong>en</strong> :<br />

S2 bepaald of er iet iets iet<br />

s s gedaan wordt wordt. wordt<br />

Wanneer die 0 is ingang gelijk aan uitgang.<br />

S1 kiest de richting waarin we gaan :<br />

0 voor links links <strong>en</strong> 1 voor rechts rechts. rechts<br />

S0 bepaald wat we do<strong>en</strong> :<br />

0 voor verschuiv<strong>en</strong> <strong>en</strong> 1 voor roter<strong>en</strong> roter<strong>en</strong>. roter<strong>en</strong><br />

E<strong>en</strong> ba barrel ba rrel rotator is e<strong>en</strong> rotator die e<strong>en</strong> met<br />

ingang<strong>en</strong> ingang<strong>en</strong> instelbaar instelbaar aantal aantal ker<strong>en</strong> ker<strong>en</strong> ker<strong>en</strong> naar e<strong>en</strong> vaste<br />

richting richting roteert. Bv. de 8-bit bit barrel left rotator<br />

roteerd de 8 bits van de ingang n keer naar<br />

links, waarbij we getal n kunn<strong>en</strong> instell<strong>en</strong> met<br />

de ingang<strong>en</strong> S0, S1 <strong>en</strong> S2, die binair het aantal<br />

keer draai<strong>en</strong> aanduid<strong>en</strong>.<br />

De implem<strong>en</strong>tatie gebeurt met multiplex<strong>en</strong> :<br />

S1 <strong>en</strong> S2 gaan telk<strong>en</strong>s naar de sturing van de<br />

MUX<strong>en</strong>, <strong>en</strong> zo wordt bepaald welk van de<br />

ingang<strong>en</strong> geselecteerd wordt als uitgang. In<br />

de blokk<strong>en</strong> M wordt via S0 (is 0 wanneer er<br />

verschov<strong>en</strong> wordt) bepaald of we het<br />

originele signaal nem<strong>en</strong> (roter<strong>en</strong>) of e<strong>en</strong><br />

externe input (verschuiv<strong>en</strong>).


Hfdst Hfdst 44)<br />

4 4)<br />

) Sequ<strong>en</strong>tiële Sequ<strong>en</strong>tiële schakeling<strong>en</strong><br />

schakeling<strong>en</strong><br />

Bij de combinatiorische schakeling<strong>en</strong> is de uitgang e<strong>en</strong> directe directe functie functie van<br />

van<br />

de de ingang<strong>en</strong> ingang<strong>en</strong>. ingang<strong>en</strong> Er is daar ge<strong>en</strong> geheug<strong>en</strong>; in de tijd geeft het systeem altijd<br />

gelijke uitgang<strong>en</strong> voor gelijke ingang<strong>en</strong>.<br />

Bij sequ<strong>en</strong>tiële sequ<strong>en</strong>tiële schakeling<strong>en</strong> is de uitgang afhankelijk van de ingang <strong>en</strong> van<br />

de toestand waarin het systeem verkeerd. Deze toestand is afhankelijk van de<br />

voorafgaande voorafgaande ingang<strong>en</strong> ingang<strong>en</strong> <strong>en</strong> is opgeslag<strong>en</strong> in het geheug<strong>en</strong> :<br />

- statisch : bv. flip flops : positieve terugkoppeling<br />

- dynamisch : ding<strong>en</strong> waarvan de toestand kan verander<strong>en</strong> in de tijd<br />

bv. capaciteit<strong>en</strong> die lading opslag<strong>en</strong><br />

Soort<strong>en</strong> Soort<strong>en</strong> sequ<strong>en</strong>tiële schakeling<strong>en</strong> :<br />

Asynchrone schakeling: uitgang<strong>en</strong> & toestand verander<strong>en</strong> wanneer e<strong>en</strong> ingang verandert<br />

verandert<br />

Synchrone schakeling: uitgang<strong>en</strong> & toestand verander<strong>en</strong> alle<strong>en</strong> wanneer de klokingang klokingang<br />

verandert (op vaste, vaste, geklokte geklokte tijdstipp<strong>en</strong> tijdstipp<strong>en</strong>) tijdstipp<strong>en</strong><br />

Deze klok klok is onafhankelijk van de schakeling <strong>en</strong> heeft bepaalde karakteristiek<strong>en</strong> :<br />

- Klokperiode : tijd tuss<strong>en</strong> 2 ope<strong>en</strong>volg<strong>en</strong>de 1 → 0 klokovergang<strong>en</strong><br />

(de tijd van e<strong>en</strong> periode hoog <strong>en</strong> periode laag sam<strong>en</strong>)<br />

- Klokfrequ<strong>en</strong>tie<br />

Klokfrequ<strong>en</strong>tie : 1 / klokperiode, dus het aantal klokperiodes per seconde<br />

- Klokbreedte lokbreedte (‘klok width’) : l<strong>en</strong>gte van de periode waarop de klok 1 is<br />

- ‘Duty Duty Duty cycle’ cycle’ : verhouding van de klokbreedte <strong>en</strong> de klokperiode;<br />

fractie van de klokperiode dat de klok 1 is<br />

- Stijg<strong>en</strong>de Stijg<strong>en</strong>de flank (‘rising edge’) : 0 → 1 klokovergang :<br />

kloksignaal is actief hoog als de synchrone schakeling schakelt tijd<strong>en</strong>s de stijg<strong>en</strong>de flank<br />

- Dal<strong>en</strong>de flan flank flan<br />

(‘falling edge’) = 1→0 klokovergang :<br />

kloksignaal is actief laag als de synchrone schakeling schakelt tijd<strong>en</strong>s de dal<strong>en</strong>de flank<br />

1) ) SR SR latch latch<br />

latch<br />

De De flipflop flipflop als als bouwblok<br />

bouwblok<br />

De SR SR latch latch (set-reset latch) is het simpelste simpelste geheug<strong>en</strong>-<br />

elem<strong>en</strong>t elem<strong>en</strong>t elem<strong>en</strong>t : 2 ingang<strong>en</strong> (set set <strong>en</strong> reset reset), reset<br />

2 toestand<strong>en</strong> (set <strong>en</strong><br />

reset), 2 uitgang<strong>en</strong> (Q Q <strong>en</strong> <strong>en</strong> Q’ Q’), Q’ 2 NOR-poort<strong>en</strong> die gekruist<br />

gekoppelt zijn. Wanneer we de ingang<strong>en</strong> ingang<strong>en</strong> verander<strong>en</strong> verander<strong>en</strong>, verander<strong>en</strong><br />

zal de<br />

uitgang uitgang Q Q verander<strong>en</strong> verander<strong>en</strong> afhankelijk van zijn toestand toestand. toestand<br />

Zolang Set is 0 <strong>en</strong> Reset is 0 : de uitgang uitgang Q zal gel gelijk gel<br />

ijk blijv<strong>en</strong> blijv<strong>en</strong> (niet verander<strong>en</strong>)<br />

Wanneer Set 1 <strong>en</strong> Reset 0 wordt : de uitgang Q komt na 2 poortvertraging<strong>en</strong> zowiezo op op 1<br />

(of blijft 1 als ie al 1 was). Dit is de Set-toestand. Q’ wordt al 0 na 1 klokvertraging.<br />

Wanneer Set Set 0 <strong>en</strong> Reset Reset 1 wordt : de uitgang Q komt na 2 poortvertraging<strong>en</strong> zowiezo op op 00<br />

0<br />

(of blijft 0 als ie al 0 was). Dit is de Reset-toestand. Q’ wordt al 1 na 1 klokvertraging.<br />

Wanneer tegelijkertijd Set <strong>en</strong> Reset van 1 op op 0 vall<strong>en</strong> dan is Q Q ongedefinieerd <strong>en</strong><br />

onvoorspelbaar. Dit komt door de po poortvertraging<strong>en</strong><br />

po<br />

ortvertraging<strong>en</strong> :


- wanneer beide poortvertraging<strong>en</strong> gelijk zijn zull<strong>en</strong> de 2 poort<strong>en</strong> telk<strong>en</strong>s tesam<strong>en</strong> van niveau<br />

verander<strong>en</strong> <strong>en</strong> blijv<strong>en</strong> op <strong>en</strong> neer gaan met als frequ<strong>en</strong>tie de poortvertraging.<br />

- wanneer één van de 2 poort<strong>en</strong> poort<strong>en</strong> minder vertraging heeft zal Q die zijn waarde aannem<strong>en</strong>.<br />

Het uitgangssignaal uitgangssignaal Q kan nu 5 verschill<strong>en</strong>de waard<strong>en</strong> aannem<strong>en</strong> :<br />

0 : het logisch niveau “0”<br />

1 : het logisch niveau “1”<br />

Z : hoog-impedant (zwev<strong>en</strong>d, niet aangeslot<strong>en</strong>)<br />

X : don’t care<br />

U : ongedefinieerd<br />

We kunn<strong>en</strong> de SR latch ook mak<strong>en</strong> met 2 NAND NAND-poort<strong>en</strong>.<br />

NAND<br />

De werking is dan invers <strong>en</strong> de ingangssignal<strong>en</strong> actief laag :<br />

Wanneer Set 0 wordt kom<strong>en</strong> we in de set set-toestand<br />

set<br />

toestand waarbij Q=1 Q=1. Q=1<br />

Wanneer Reset 0 wordt kom<strong>en</strong> we in de reset reset-toestand<br />

reset<br />

toestand toestand waarbij Q=0 Q=0. Q=0<br />

2) ) Geklokte eklokte latch<br />

latch<br />

Geklokte Geklokte SR SR latch :<br />

Bij de geklokte SR latch zal de uitgang QQ<br />

Q<br />

pas kunn<strong>en</strong><br />

verander<strong>en</strong> verander<strong>en</strong> verander<strong>en</strong> wanneer het kloksignaal 11<br />

1<br />

is. We stur<strong>en</strong> de set<br />

<strong>en</strong> reset ingang eerst door e<strong>en</strong> AND AND-poort AND<br />

poort sam<strong>en</strong> met de<br />

klok zodat het 1 word<strong>en</strong> van set of reset pas effect heeft<br />

wanneer de klok 1 is. Wanneer de klok 0 is blijft de<br />

uitgang Q Q dus dus behoud<strong>en</strong> behoud<strong>en</strong>, behoud<strong>en</strong> ongeacht de ingang<strong>en</strong>.<br />

Geklokte Geklokte D D latch latch :<br />

:<br />

Het probleem met de SR latch is dat set <strong>en</strong> reset ingang nooit<br />

nooit<br />

sam<strong>en</strong> sam<strong>en</strong> 1 1 mog<strong>en</strong> zijn. Dit wordt verholp<strong>en</strong> door slechts 1<br />

1<br />

ingang ingang DD<br />

D te nem<strong>en</strong> die set door 1 te word<strong>en</strong> <strong>en</strong> reset door 0<br />

te word<strong>en</strong>. D komt dan rechtstreeks op Set <strong>en</strong> via e<strong>en</strong><br />

invertor op Reset zodat deze nooit sam<strong>en</strong> 1 zijn. Ook hier<br />

betrekk<strong>en</strong> we e<strong>en</strong> klok C : de uitgang volgt de ingang<br />

wanneer c=1 <strong>en</strong> de uitgang blijft gelijk wanneer c=0.<br />

De vertragi vertraging<strong>en</strong><br />

vertragi ng<strong>en</strong> in de overgang<strong>en</strong> :<br />

Wanneer de klok 11<br />

1<br />

is heeft e<strong>en</strong> verandering verandering van D effect op Q <strong>en</strong> op op Q’ Q’: Q’<br />

- vertraging op Q : tHL = 1 + 2,4 + 1,4 = 4,8 / tLH = 2,4 + 1,4 + 1,4 = 5,2<br />

- vertraging op Q’ : tHL = 2,4 + 1,4 = 3,8<br />

Wanneer de klok 00<br />

0<br />

is heeft D ge<strong>en</strong> effect. Wanneer C van 0 naar 1 schakelt zal de uitgang de<br />

waarde van de ingang aannem<strong>en</strong> :<br />

- als D = 1 : tLH = 2,4 + 1,4 + 1,4 = 5,2<br />

- als D = 0 : tHL = 2,4 + 1,4 = 3,8


We zi<strong>en</strong> dat tLH altijd 5.2 is <strong>en</strong> dat tHL minst<strong>en</strong>s 3.8 is,<br />

we noter<strong>en</strong> dit in het symbool van de D latch :<br />

3) ) Gevoeligheid evoeligheid<br />

Level Level-s<strong>en</strong>sitive Level s<strong>en</strong>sitive latch<br />

Voorgaande geklokte latches zijn gevoelig voor het<br />

klokniveau klokniveau : ze onthoud<strong>en</strong> hun waarde wanneer C=0 <strong>en</strong> zijn<br />

transparant wanneer C=1. Transparant wil zegg<strong>en</strong> dat elke<br />

verandering verandering op op op de de ingang ingang effe effect effe<br />

ct heeft op de uitgang (na e<strong>en</strong><br />

kleine vertraging). Dit transparant zijn kan problem<strong>en</strong> gev<strong>en</strong><br />

wanneer we meerdere latches achter achter elkaar will<strong>en</strong> plaats<strong>en</strong><br />

(in bv. schuifregisters). E<strong>en</strong> verandering in het ingangssignaal<br />

kan dan doorrimpel<strong>en</strong> door alle latches tijd<strong>en</strong>s 1 klokperiode<br />

klokperiode.<br />

klokperiode<br />

Dit will<strong>en</strong> we vermijd<strong>en</strong> vermijd<strong>en</strong>: vermijd<strong>en</strong> we hebb<strong>en</strong> liever dat op elke<br />

klokperiode de ingang doorgegev<strong>en</strong> wordt naar 1 volg<strong>en</strong>de<br />

latch <strong>en</strong> niet naar alle daaropvolg<strong>en</strong>de.<br />

We zoud<strong>en</strong> kunn<strong>en</strong> prober<strong>en</strong> om de klokperiodes<br />

klokperiodes aan te pass<strong>en</strong> pass<strong>en</strong> aan aan de omschakeltijd<strong>en</strong> van de<br />

latch, maar die verschill<strong>en</strong> voor hoog-laag / laag-hoog, waardoor dit ge<strong>en</strong> ge<strong>en</strong> ge<strong>en</strong> goede goede goede oplossing oplossing oplossing is. We<br />

kunn<strong>en</strong> ook niet de setup-tijd (c=1) <strong>en</strong> de houd-tijd (c=0) aanpass<strong>en</strong> aan de schakeltijd, omdat de<br />

schakeltijd variabel is.<br />

De oplossing is de flipflop die flankgevoelig<br />

flankgevoelig werkt: we zull<strong>en</strong> de flipflop <strong>en</strong>kel omschakel<strong>en</strong> omschakel<strong>en</strong> op op op e<strong>en</strong><br />

e<strong>en</strong><br />

vaste vaste klokflank klokflank waardoor de flipflop niet meer transparant is. De uitgang kan slecht verander<strong>en</strong> op 1<br />

tijdstip (de flank van de klok) <strong>en</strong> niet meer heel de periode dat de klok 1 is.<br />

Maste Master-Slave Maste Slave Flip Flip-flop Flip<br />

flop flop<br />

E<strong>en</strong> Master Master-Slave<br />

Master<br />

Slave Slave flipflop is e<strong>en</strong> combinatie van e<strong>en</strong> master master-latch<br />

master<br />

latch <strong>en</strong> e<strong>en</strong> slave slave-latch slave<br />

latch : de ingang D<br />

komt op de master master-ingang master<br />

ingang Dm Dm. Dm<br />

De master-uitgang Qm wordt dan gebruikt om de slave-ingang Ds aan<br />

te stur<strong>en</strong>. De uitgang Q is de uitgang van de slave Qs Qs. Qs<br />

Het niet niet-transparant<br />

niet transparant mak<strong>en</strong> gebeurt door éénzelfde kloksignaal rectstreeks aan de slave te hang<strong>en</strong>,<br />

<strong>en</strong> geïnverteerd aan de master master. master<br />

Hierdoor zijn de uitgang<strong>en</strong> van master <strong>en</strong> slave slechts variabel<br />

wanneer de andere onverander onveranderlijk<br />

onverander<br />

lijk lijk is. Hierdoor kan e<strong>en</strong> verandering verandering op de de ingang ngang ngang nooit direct effect<br />

hebb<strong>en</strong> op de uitgang uitgang, uitgang<br />

t<strong>en</strong>zij op e<strong>en</strong> klokflank.<br />

- Bij elke klokovergang 0->1 >1 wordt de master<br />

invariabel invariabel <strong>en</strong> zal de slave de uitgang van de<br />

master doorgev<strong>en</strong> (die niet verandert).<br />

- Bij elke klokovergang 1->0 >0 >0 wordt de slave<br />

invariabel invariabel <strong>en</strong> behoud zijn uitgang terwijl de<br />

master master e<strong>en</strong> e<strong>en</strong> e<strong>en</strong> nieuwe nieuwe waarde waarde kan aannem<strong>en</strong><br />

die hij dan zal doorgev<strong>en</strong> wanneer we<br />

terug 0-> gaan. De uit uitgang uit<br />

ang ang verander verandert verander nu<br />

telk<strong>en</strong>s telk<strong>en</strong>s bij bij 00->1<br />

0 >1 <strong>en</strong> neemt de waarde aan<br />

van de master op de mom<strong>en</strong>t van de<br />

klok klokflank. klok flank.


Edge Edge-triggered Edge triggered Flip Flip-flop Flip<br />

flop<br />

De edge edge-triggered edge triggered flip flip-flop flip<br />

flop bestaat uit 3 SR latches :<br />

de set set-latch, set<br />

de reset reset-latch reset<br />

<strong>en</strong> de output output-latch. output<br />

De<br />

ingang ingang D D komt binn<strong>en</strong> op de Reset Reset-latch Reset<br />

latch latch, latch <strong>en</strong> op de<br />

andere ingang staan de klok <strong>en</strong> de Set-uitgang van de<br />

set-latch. De uitgang Q wordt als reset-uitgang<br />

geleverd naar de output, Q’ wordt de 2de input van de<br />

set-latch. De uitgang Q van de set-latch wordt sam<strong>en</strong><br />

met de reset uitgang in de output output-latch<br />

output<br />

latch gestok<strong>en</strong> die<br />

dan de uitgang<strong>en</strong> Q <strong>en</strong> Q’ levert. De SR latches in<br />

deze flipflop zijn gebouwd met NAND NAND-poort<strong>en</strong><br />

NAND<br />

poort<strong>en</strong> poort<strong>en</strong>, poort<strong>en</strong><br />

waardoor ze invers werk<strong>en</strong> !!!<br />

Wanneer de klok 0 is wordt e<strong>en</strong> verandering in D geregistreerd door de set <strong>en</strong> reset latches<br />

door A A <strong>en</strong> B te verander<strong>en</strong> verander<strong>en</strong>. verander<strong>en</strong><br />

A <strong>en</strong> B hebb<strong>en</strong> telk<strong>en</strong>s e<strong>en</strong> teg<strong>en</strong>gestelde waarde <strong>en</strong> verander<strong>en</strong><br />

tesam<strong>en</strong> tesam<strong>en</strong> tesam<strong>en</strong> met DD.<br />

D<br />

Klok 0 betek<strong>en</strong>t ook dat beide set set- set<br />

<strong>en</strong> reset reset-signaalgang<br />

reset<br />

signaalgang voor de output-latch 1<br />

zijn <strong>en</strong> dat de uitgang Q behoud<strong>en</strong> blijft. (klok zit mee op NAND-poort)<br />

D=1 dan is B=0 <strong>en</strong> A=1 D=0 dan is B=1 <strong>en</strong> A=0<br />

Wanneer de klok overgaat 00->1<br />

0<br />

>1 kan de comb combinatie comb<br />

inatie van A <strong>en</strong> B op dat mom<strong>en</strong>t het set set- set<br />

of reset-<br />

signaal signaal 0 0 mak<strong>en</strong>, waardoor de output output geset of gereset wordt wordt. wordt A <strong>en</strong> B zijn op die mom<strong>en</strong>t elkaars<br />

teg<strong>en</strong>gestelde. Set <strong>en</strong> rest kunn<strong>en</strong> nooit sam<strong>en</strong> 0 word<strong>en</strong> door de doorverbinding van set naar de<br />

NAND van reset : is set 0 kan is reset zowiezo 1 omdat hij e<strong>en</strong> 0 van set op de NAND krijgt.<br />

Wanneer de klok 1 is heeft e<strong>en</strong> verandering in D ge<strong>en</strong> effect op de uitgang, ge<strong>en</strong> effect op set<br />

<strong>en</strong> reset, maar wel op A <strong>en</strong> B. Deze verander<strong>en</strong> onafhankelijk van set <strong>en</strong> reset.<br />

A=1 A=1 A=1 e<strong>en</strong><br />

e n B=0 op stijg<strong>en</strong>de klokflank zorgt voor Set<br />

D heeft ge<strong>en</strong> effect op set/reset A=0 <strong>en</strong> B=1 op stijg<strong>en</strong>de klokflank zorgt voor Reset eset


Wanneer de klok overgaat 11->0<br />

1<br />

>0 word<strong>en</strong> set- <strong>en</strong> reset-signaal weer beide 1, waardoor de uitgang<br />

niet kan verander<strong>en</strong>.<br />

Algeme<strong>en</strong> kunn<strong>en</strong> we stell<strong>en</strong> dat de uitgang <strong>en</strong>kel <strong>en</strong>kel gewijzigd gewijzigd wordt op e<strong>en</strong> stijg<strong>en</strong>de klokflank <strong>en</strong> die<br />

neemt dan de waarde aan van D op de mom<strong>en</strong>t van de stijg<strong>en</strong>de klokflank. Deze werking is volledig<br />

analoog aan die van de Master-Slave flip-flop.<br />

4) Types Types flip flip-flops flip flops<br />

Elke flip-flop is flankgetriggerd<br />

flankgetriggerd. flankgetriggerd<br />

Dit wil zeg dat zijn uitgang uitgang <strong>en</strong>kel<br />

<strong>en</strong>kel<br />

veranderd veranderd op e<strong>en</strong> stijg<strong>en</strong>de of e<strong>en</strong> dal<strong>en</strong>de klokflank klokflank. klokflank<br />

Voor flip-flops die<br />

schakel<strong>en</strong> bij stijg<strong>en</strong>de klokflank<strong>en</strong> wordt de klokinput aangeduid met e<strong>en</strong><br />

kleine driehoek, bij dal<strong>en</strong>de klokflank<strong>en</strong> komt er e<strong>en</strong> invertor (bolletje)<br />

voor de klokingang.<br />

De naam naam van de flipflop is afgeleid van de nam<strong>en</strong> van zijn ingang<strong>en</strong><br />

Elke flip-flop heeft e<strong>en</strong> karakteristieke tabel tabel. tabel<br />

Deze is e<strong>en</strong> korte versie van de waarheidstabel<br />

waarheidstabel<br />

waarbij we Qnext bepal<strong>en</strong> vanuit de ingang<strong>en</strong>. Deze tabel wordt gebruikt om de flip----flop flip flip flip flop flop flop zelf zelf zelf zelf te te te te<br />

ontwerp<strong>en</strong>. ontwerp<strong>en</strong> ontwerp<strong>en</strong> ontwerp<strong>en</strong> (geeft de werking van de ff zelf aan) We kunn<strong>en</strong> er de karateristieke vergelijking uit<br />

hal<strong>en</strong>, die Qnext geeft als functie van de ingang<strong>en</strong> <strong>en</strong> de huidige Q.<br />

Elke flip-flop heeft exitatietabel<br />

exitatietabel. exitatietabel<br />

Deze geeft de ingang<strong>en</strong> ingang<strong>en</strong> ingang<strong>en</strong> weer die nodig zijn om van e<strong>en</strong> gegev<strong>en</strong><br />

huidige huidige uitgang uitgang uitgang Q Q naar naar e<strong>en</strong> e<strong>en</strong> volg<strong>en</strong>de volg<strong>en</strong>de volg<strong>en</strong>de gew<strong>en</strong>ste gew<strong>en</strong>ste Qnext Qnext te gaan bij de volg<strong>en</strong>de klokflank. Deze tabel<br />

wordt gebruikt om sequ<strong>en</strong>tiële ontwerp<strong>en</strong> ontwerp<strong>en</strong> ontwerp<strong>en</strong> ontwerp<strong>en</strong> te te te te mak<strong>en</strong> mak<strong>en</strong> mak<strong>en</strong> mak<strong>en</strong> met met met met de de de de flip----flop flip flip flip flop. flop flop (geeft de werking van de ff in<br />

e<strong>en</strong> circuit aan).<br />

SR SR flip flip-flop flip flop<br />

Heeft 2 ingang<strong>en</strong> S set <strong>en</strong> R reset. Voor S=1 wordt Qnext 1,<br />

voor R=1 wordt Qnext 0, voor beide 0 blijft Q behoud<strong>en</strong>. Beide<br />

1 komt nooit voor.<br />

JK JK flip flip-flop flip flop<br />

Heeft 2 ingang<strong>en</strong> J <strong>en</strong> K. Zijn werking is analoog aan de SR ff.<br />

Het verschil verschil is dat wanneer beide ingang<strong>en</strong> 1 1 zijn, de uitgang uitgang<br />

geïnverteerd geïnverteerd wordt. We krijg<strong>en</strong> dan Q’ als Qnext. We kunn<strong>en</strong><br />

deze ff mak<strong>en</strong> met e<strong>en</strong> SR ff door e<strong>en</strong> e<strong>en</strong>voudige<br />

terugkoppeling terugkoppeling van van de de uitgang<strong>en</strong> uitgang<strong>en</strong> uitgang<strong>en</strong> Q <strong>en</strong> Q’ <strong>en</strong> 2 AND-poort<strong>en</strong>: S=JQ’ =JQ’ <strong>en</strong> R=KQ R=KQ. R=KQ<br />

Wanneer beide J <strong>en</strong> K 0 is de werking evid<strong>en</strong>t.<br />

Wanneer J 11<br />

1<br />

wordt, zal Q’ ofwel 0 zijn <strong>en</strong> dan is Q reeds 1, ofwel zal Q’ 1 zijn <strong>en</strong> dan wordt de<br />

ff geset zodat Q i wordt. Analoog voor reset.<br />

Wanneer beide J <strong>en</strong> K 1 zijn hangt het van de huidige Q af wat er gebeurt, <strong>en</strong> zal de ff zowiezo<br />

van toestand verander<strong>en</strong>. (ofwel geset word<strong>en</strong> als Q’=1 ofwel gereset als Q=1)<br />

JK ff hebb<strong>en</strong> meer don’t don’t cares in hun exitatietabel <strong>en</strong> lever<strong>en</strong> dus goedkopere (simpelere)<br />

aansturing<strong>en</strong> op.


D D flip flip-flop flip flip flop<br />

De werking van de D flip-flop is e<strong>en</strong>voudig : Wanneer de<br />

ingang ingang D D veranderd zal de uitgang Q mee verander<strong>en</strong>.<br />

Deze ff wacht gewoon telk<strong>en</strong>s op de klokflank om de<br />

ondertuss<strong>en</strong> ev<strong>en</strong>tueel gewijzigde waarde van D door te gev<strong>en</strong>.<br />

T T flip flip-flop flip flop<br />

De T T (toggle) (toggle) flip flip-flop flip lop behoudt zijn uitgang wanneer T=0 <strong>en</strong><br />

inverteerd zijn uitgang wanneer T=1. Bij elke klokflank wordt<br />

gekek<strong>en</strong> naar de waarde van TT,<br />

T<br />

<strong>en</strong> wordt Q voor T=0 <strong>en</strong><br />

Q’ Q’ Q’ voor voor T=1 T=1 als Qnext g<strong>en</strong>om<strong>en</strong>.<br />

We kunn<strong>en</strong> deze T ff mak<strong>en</strong> met e<strong>en</strong> XOR <strong>en</strong> e<strong>en</strong> D ff.<br />

Asynchro Asynchrone Asynchro Asynchrone<br />

ne set & & reset<br />

Asynchrone Asynchrone set set <strong>en</strong> <strong>en</strong> <strong>en</strong> reset reset zijn<br />

- e<strong>en</strong> set-ingang (preset preset preset) preset <strong>en</strong><br />

- e<strong>en</strong> reset-ingang (clear clear clear) clear die<br />

niet aan de de klok gelinkt zijn (direct<br />

de uitgang sett<strong>en</strong> of resett<strong>en</strong>) <strong>en</strong> die<br />

voorrang krijg<strong>en</strong> op alle andere<br />

inputsignal<strong>en</strong> (de ander<strong>en</strong> word<strong>en</strong><br />

g<strong>en</strong>egeerd wanneer er e<strong>en</strong> asynchrone<br />

set of reset gebeurt).<br />

Dit wordt gebruikt om de flipflops te initialiser<strong>en</strong> voor gebruik (wanneer de stroom aangezet<br />

wordt is de toestand van de ff onbepaald anders) of om de vorige sequ<strong>en</strong>tiële ingang<strong>en</strong> t<strong>en</strong>iet te<br />

do<strong>en</strong> (herbeginn<strong>en</strong><br />

herbeginn<strong>en</strong><br />

herbeginn<strong>en</strong>).<br />

herbeginn<strong>en</strong><br />

De asynchrone ingang<strong>en</strong> word<strong>en</strong> naar de ff gestuurt als als 1 1 wannneer we will<strong>en</strong> sett<strong>en</strong> of resett<strong>en</strong>.<br />

Ze word<strong>en</strong> aan de ingang van de ff echter geïnverteerd : het zijn actief lage signal<strong>en</strong> signal<strong>en</strong> in de ff zelf.<br />

We mak<strong>en</strong> mak<strong>en</strong> deze door de asynchrone set PPRS<br />

P<br />

RS (preset) te koppel<strong>en</strong> aan :<br />

- aan de set set-ingang set<br />

ingang van de output-latch zodat we uitgang sett<strong>en</strong> wanneer PRS 0 wordt<br />

- aan de NAND van de A-uitgang uitgang zodat wanneer PRS 0 wordt we de andere ingang<strong>en</strong> neger<strong>en</strong><br />

( beide set <strong>en</strong> reset word<strong>en</strong> dan 1)<br />

<strong>en</strong> door de asynchrone reset reset CLR (clear) analoog te koppel<strong>en</strong> aan reset <strong>en</strong> B.<br />

Buit<strong>en</strong> de flip-flop zijn de asynchrone signal<strong>en</strong> actief actief actief laag laag. laag<br />

Dit do<strong>en</strong> we omdat deze signal<strong>en</strong><br />

meestal door onbek<strong>en</strong>de onbek<strong>en</strong>de signal<strong>en</strong> of door e<strong>en</strong> groot groot aantal signal<strong>en</strong> word<strong>en</strong> gestuurd gestuurd. gestuurd<br />

Het<br />

resulter<strong>en</strong>de signaal is dan actief wanneer minst<strong>en</strong>s 1 aanstur<strong>en</strong>d signaal actief is is, is<br />

<strong>en</strong> dat is<br />

makkelijker te realiser<strong>en</strong> met actief lage signal<strong>en</strong> in e<strong>en</strong> wired OR.<br />

We zoud<strong>en</strong> dit kunn<strong>en</strong> implem<strong>en</strong>ter<strong>en</strong> met actief hoge signal<strong>en</strong> in e<strong>en</strong> grote OR OR-poort OR poort poort, poort maar<br />

dat is e<strong>en</strong> slecht idee omdat die niet niet flexibel is : e<strong>en</strong> poort heeft e<strong>en</strong> beperkt aantal aantal ingang<strong>en</strong><br />

ingang<strong>en</strong><br />

(<strong>en</strong> meestal wet<strong>en</strong> we aanvankelijk niet e<strong>en</strong>s hoeveel ingang<strong>en</strong> we nodig hebb<strong>en</strong>), <strong>en</strong> we<br />

zull<strong>en</strong> veel veel te te lange lange verbinding<strong>en</strong> verbinding<strong>en</strong> nodig hebb<strong>en</strong>.<br />

Oplossing is e<strong>en</strong> wired----OR wired wired wired OR, OR OR <strong>en</strong> die vereist actief lage signal<strong>en</strong>.


5) ) Tijdsgedrag<br />

Tijdsgedrag<br />

Set Set-up Set<br />

up up / houdtijd<br />

Set Set-up Set<br />

up up-tijd up tijd : tijd voor de actieve klokflank waarin de ingang<strong>en</strong> niet mog<strong>en</strong><br />

verander<strong>en</strong> verander<strong>en</strong>. verander<strong>en</strong> Dit is de vertraging die zit tuss<strong>en</strong> het ingangssignaal <strong>en</strong> de plaats<br />

waar dat sam<strong>en</strong>gevoegd wordt met de klok.<br />

Bv. bij de geklokte DD-latch<br />

D<br />

latch is dit de<br />

vertraging van de invertor, omdat D<br />

eerst door e<strong>en</strong> invertor moet <strong>en</strong> dan bij<br />

de klok gevoegd wordt. Stel dat D<br />

veranderd vlak voor de klokflank, dan<br />

schakelt de latch eerst voor de vorige<br />

waarde van D, <strong>en</strong> na de schakeltijd van<br />

de invertor veranderd D’ ope<strong>en</strong>s,<br />

waardoor de kans bestaat dat we<br />

ongedefiniëerde toestand<strong>en</strong> te krijg<strong>en</strong>.<br />

Houdtijd : tijd na de actieve klokflank waarin de ingang<strong>en</strong> ingang<strong>en</strong> niet mog<strong>en</strong> verander<strong>en</strong> verander<strong>en</strong>. verander<strong>en</strong> verander<strong>en</strong><br />

Metastabiliteit<br />

Metastabiliteit<br />

Metastabiliteit<br />

E<strong>en</strong> bi bi-stabiel bi<br />

stabiel eleme elem<strong>en</strong>t eleme nt is e<strong>en</strong> elem<strong>en</strong>t met 2 stabiele toestand<strong>en</strong> toestand<strong>en</strong>, toestand<strong>en</strong><br />

waarbij de kans<br />

bestaat dat er e<strong>en</strong> 3de metastabiele toestand tuss<strong>en</strong> ligt. E<strong>en</strong> bi-stabiel elem<strong>en</strong>t in<br />

e<strong>en</strong> schakeling krijg<strong>en</strong> we wanneer we de uitgang van 2 2 invertor<strong>en</strong> invertor<strong>en</strong> (of poort<strong>en</strong><br />

met invertor aan de uitgang, bv. NAND’s) gekruist aan elkaars elkaars ingang ingang hang<strong>en</strong> hang<strong>en</strong>. hang<strong>en</strong><br />

(bv. 2 invertors kruiskoppel<strong>en</strong>) De uitgang van de <strong>en</strong>e poort hangt dan af af van de<br />

uitgang van de andere poort <strong>en</strong> omgekeerd. Voor de 2 invertors zijn er nu 2<br />

stabiele toestand<strong>en</strong> : de <strong>en</strong>e uitgang is 1 <strong>en</strong> de andere 0 of omgekeerd. De<br />

metastabiele toestand bestaat erin dat ze beide gelijk zijn <strong>en</strong> dus erg<strong>en</strong>s tuss<strong>en</strong> 0<br />

<strong>en</strong> 1 ligg<strong>en</strong>. Op die mom<strong>en</strong>t zij ze ongedefinieerd (metastabiliteit moet dus<br />

vermed<strong>en</strong> word<strong>en</strong>). Dit is ge<strong>en</strong> stabiele toestand : wanneer één van beide e<strong>en</strong><br />

klein beetje van dit metastabiel punt afwijkt, zull<strong>en</strong> ze evoluer<strong>en</strong> naar e<strong>en</strong> stabiel<br />

punt.<br />

We kunn<strong>en</strong> e<strong>en</strong> elem<strong>en</strong>t in de metastabiele toestand br<strong>en</strong>g<strong>en</strong> door<br />

marginale triggering (schakel<strong>en</strong> waar het niet mag) :<br />

- wanneer we de minimum pulsbreedte sch<strong>en</strong>d<strong>en</strong><br />

- wanneer we de ingang verander<strong>en</strong> in de set set-up set<br />

up of of in de houddtijd houddtijd. houddtijd<br />

De kans kans dat de uitgang<strong>en</strong> in metastabiele toestand zijn : p nog in meta(t) = exp(−t/τ) met τ e<strong>en</strong><br />

constante die afhangt van :<br />

- van de hoeveelheid ruis (meer verstoring -> vlugger van metastabiel ev<strong>en</strong>wicht afwijk<strong>en</strong>)<br />

- van de steilheid van de curve curve (makkelijker of moeilijker om uit metastabiel ev<strong>en</strong>wicht te kom<strong>en</strong>)


Ontwerp Ontwerp van van synchrone sequ<strong>en</strong>tiële schakeling<strong>en</strong><br />

1) ) Finite Finite state state machines<br />

machines<br />

E<strong>en</strong> FSM (Finite State Machine) is e<strong>en</strong> sequ<strong>en</strong>tiële sequ<strong>en</strong>tiële machine die e<strong>en</strong> beperkt vast vast aantal toestand<strong>en</strong><br />

heeft. Het systeem bevindt zich op elk elk og<strong>en</strong>blik in de tijd in één één van die toestand<strong>en</strong> <strong>en</strong> kan van<br />

daaruit overgaan naar verschill<strong>en</strong>de andere toestand<strong>en</strong> toestand<strong>en</strong> wanneer de input input-variabel<strong>en</strong><br />

input<br />

variabel<strong>en</strong> verander<strong>en</strong>. De<br />

input-signal<strong>en</strong> bepal<strong>en</strong> naar welke toestand toestand de FSM overgaat. De toestand toestand waarin het systeem zich<br />

bevindt wordt opgeslag<strong>en</strong> in flipflops flipflops, flipflops<br />

<strong>en</strong> met e<strong>en</strong> bepaalde schakeling kunn<strong>en</strong> met de input-signal<strong>en</strong><br />

e<strong>en</strong> nieuwe toestand in de flipflops br<strong>en</strong>g<strong>en</strong>.<br />

We zull<strong>en</strong> nu het ontwerp<strong>en</strong> ontwerp<strong>en</strong> van e<strong>en</strong> FSM besprek<strong>en</strong> aan de hand van e<strong>en</strong> voorbeeld :<br />

Ontwerp e<strong>en</strong> modulo 4 teller (‘Count uitgang’), die met 1 verhoogt wanneer de ingang CE<br />

(‘count <strong>en</strong>able’) 1 wordt. Na 3 komt 0 (modulo 4 tell<strong>en</strong>). We mak<strong>en</strong> deze schakeling<br />

synchroon: de teller telt bij elke klokflank 1 bij zolang CE 1 is.<br />

1) We vertal<strong>en</strong> de specificatie (in tekst gegev<strong>en</strong>) naar e<strong>en</strong><br />

toestandsdiagram<br />

toestandsdiagram. toestandsdiagram We bepal<strong>en</strong> alle mogelijke toesta toestand<strong>en</strong> toesta<br />

nd<strong>en</strong> nd<strong>en</strong> <strong>en</strong> de<br />

verband<strong>en</strong> verband<strong>en</strong> verband<strong>en</strong> ertuss<strong>en</strong>. Deze verband<strong>en</strong> vind<strong>en</strong> we door voor<br />

elke elke toestand toestand alle mogelijkhed<strong>en</strong><br />

mogelijkhed<strong>en</strong> voor de input input-variabel<strong>en</strong><br />

input<br />

variabel<strong>en</strong> af<br />

te gaan <strong>en</strong> te kijk<strong>en</strong> naar naar welke andere toestand toestand we bij die<br />

input overgaan. Voor synchrone schakeling<strong>en</strong> wacht<strong>en</strong> we<br />

telk<strong>en</strong>s op de klok om over te gaan naar de volg<strong>en</strong>de toestand.<br />

We kunn<strong>en</strong> het toestandsdiagram ook voorstell<strong>en</strong> als<br />

e<strong>en</strong> tabel tabel. tabel<br />

We zett<strong>en</strong> dat op elke rij rij e<strong>en</strong> toestand toestand. toestand<br />

Voor elke<br />

mogelijke ingangscombinatie hebb<strong>en</strong> we e<strong>en</strong> kolom zodat voor<br />

elke toestand <strong>en</strong> voor elke ingangscombinatie e<strong>en</strong> volg<strong>en</strong>de<br />

toestand is bepaald.<br />

2) Minimaliseer Minimaliseer het aantal toestand<strong>en</strong> toestand<strong>en</strong>. toestand<strong>en</strong><br />

In het voorbeeld hebb<strong>en</strong> we reeds e<strong>en</strong> minimum aantal toestand<strong>en</strong><br />

3) Codeer Codeer Codeer de toestand<strong>en</strong> : voor 2n toestand<strong>en</strong> toestand<strong>en</strong> hebb<strong>en</strong> we n flipflops nodig. Elke toestand krijgt dan<br />

e<strong>en</strong> uni unieke uni<br />

eke code code van n bits bits waarmee deze toestand opgeslag<strong>en</strong> wordt in de flip-flops. We gev<strong>en</strong> best<br />

toestand<strong>en</strong> die veel voorkom<strong>en</strong> codes die niet al te veel bits verschill<strong>en</strong> zodat de schakeling<br />

e<strong>en</strong>voudig blijft. (zodat we bij overgang tuss<strong>en</strong> de toestand<strong>en</strong> niet teveel flipflops moet<strong>en</strong> verander<strong>en</strong>)<br />

Voorbeeld : we zull<strong>en</strong> hier de 4 verschill<strong>en</strong>de toestand<strong>en</strong> coder<strong>en</strong> met elk hun<br />

eig<strong>en</strong> nummer binair voorgesteld. Dit is handig om de uitgang te bepal<strong>en</strong> <strong>en</strong><br />

daarmee verschill<strong>en</strong> de codes bij het overgaan van de <strong>en</strong>e toestand naar de<br />

andere telk<strong>en</strong>s maar 1 bit, zodat we e<strong>en</strong> e<strong>en</strong>voudige schakeling krijg<strong>en</strong> (het zou<br />

dom zijn om count 1 te coder<strong>en</strong> als 11 wanneer we count 0 gecodeert hebb<strong>en</strong><br />

als 00 want dan moet<strong>en</strong> we bij overgaan telk<strong>en</strong>s de 2 flipflops verander<strong>en</strong>)<br />

4) Kies ies het type fli flip-flop fli<br />

flop al naar gelang de schakeling.<br />

Voorbeeld : we nem<strong>en</strong> hier de D flip-flop


5) We moet<strong>en</strong> de schakeling realiser<strong>en</strong> met flipflops <strong>en</strong> combinatorische combinatorische schakeling<strong>en</strong><br />

schakeling<strong>en</strong>. schakeling<strong>en</strong><br />

We zull<strong>en</strong> de<br />

n bits van de volg<strong>en</strong>de toestand (n uitgang<strong>en</strong>) moet<strong>en</strong> bepal<strong>en</strong> bepal<strong>en</strong> vanuit de n huidi huidige huidi<br />

ge bits <strong>en</strong> de de de i<br />

ingangsvariabel<strong>en</strong> ingangsvariabel<strong>en</strong> (n + i ingang<strong>en</strong>). We hebb<strong>en</strong> dus n carnaugh carnaugh-kaart<strong>en</strong><br />

carnaugh kaart<strong>en</strong> die elk n+i ingang<strong>en</strong><br />

combiner<strong>en</strong> tot e<strong>en</strong> uitgang. Deze uitgang<strong>en</strong> zijn dan de Qnext van de flipflops.<br />

Voorbeeld : we hebb<strong>en</strong> hier 2 D-flipflops die aangestuurd moet<strong>en</strong> word<strong>en</strong> vanuit de vorige Q1 <strong>en</strong><br />

Q2 <strong>en</strong> de ingang CE (2 carnaugh-kaart<strong>en</strong> met elk 3 ingangsvariabel<strong>en</strong>)<br />

6) Implem<strong>en</strong>tatie Implem<strong>en</strong>tatie <strong>en</strong> simulatie in het tijdsdomein tijdsdomein :<br />

Er bestaan nu 2 soort<strong>en</strong> FSM : Moore oore oore-type oore waarbij de uitgang<strong>en</strong> gebaseerd zijn op de toestand<strong>en</strong>,<br />

<strong>en</strong> Mealy ealy ealy-type ealy waar de uitgang<strong>en</strong> gebaseerd zijn op de huidige toestand <strong>en</strong> op de de ingang<strong>en</strong> ingang<strong>en</strong>. ingang<strong>en</strong><br />

Moore Moore-type Moore type<br />

E<strong>en</strong> Moore Moore FSM is e<strong>en</strong> systeem waarbij de uitgang<strong>en</strong> van de<br />

FSM <strong>en</strong>kel functie zijn van de huidige toestand toestand, toestand<br />

<strong>en</strong> niet van<br />

de ingang<strong>en</strong>. Elke toestand heeft zijn specifieke waard<strong>en</strong><br />

voor voor de de uitgang<strong>en</strong> uitgang<strong>en</strong>, uitgang<strong>en</strong> die bij g<strong>en</strong>oteerd wordt in de circel van de<br />

toestand in het toestandsdiagram.<br />

Voorbeeld : stel we will<strong>en</strong> met de vorige teller e<strong>en</strong><br />

uitgang Y aanstur<strong>en</strong>: We will<strong>en</strong> dat Y 1 wordt wanneer<br />

de teller 3 is, <strong>en</strong> voor de rest 0 blijft.<br />

Ontwerp Ontwerp van het voorbeeld : we veronderstell<strong>en</strong><br />

dezelfde codering van de toestand<strong>en</strong>. We kunn<strong>en</strong> dan<br />

de tabel van het toestandsdiagram aanvull<strong>en</strong> met e<strong>en</strong><br />

kolom voor de waarde van Y, die <strong>en</strong>kel afhangt van de<br />

huidige toestand.<br />

We mak<strong>en</strong> ook e<strong>en</strong> extra carnaugh-kaart<br />

om de uitgang Y aan te stur<strong>en</strong>. Daar Y<br />

<strong>en</strong>kel afhankelijk is van de toestand, moet<br />

deze kaart <strong>en</strong>kel de Q’s van de ff’s<br />

als ingang<strong>en</strong> bevatt<strong>en</strong>, <strong>en</strong> niet de ingang<strong>en</strong> van het systeem.<br />

De uiteindelijke implem<strong>en</strong>tatie wordt dan :


Sim Simulatie Sim ulatie in de tijd : We zi<strong>en</strong> dat bij de overgang van Count1 naar Count2 de mogelijkheid voor e<strong>en</strong><br />

glitch glitch in de uitgang y bestaat. Q1 <strong>en</strong> Q2 verander<strong>en</strong> daar beide tesam<strong>en</strong> na de klok <strong>en</strong> met de<br />

vertraging van de schakeling. Het kan zijn dat Y<br />

wanneer de uitgang (met de glitch) verbond<strong>en</strong> is aan e<strong>en</strong> e<strong>en</strong> kloksignaal kloksignaal kan dit zorg<strong>en</strong> voor e<strong>en</strong><br />

ongew<strong>en</strong>ste ongew<strong>en</strong>ste actieve actieve klokflank klokflank. klokflank Dit is echter moeilijk te ontdekk<strong>en</strong> omdat de glitch kan verdwijn<strong>en</strong><br />

bij het aanlegg<strong>en</strong> van de meetprobe (hogere capaciteit ⇒ grotere vertraging).<br />

wanneer de uitgang niet verbond<strong>en</strong> is met de klok (in synchrone schakeling<strong>en</strong>) is deze glitch<br />

<strong>en</strong>kel schadelijk als binn<strong>en</strong> set-up/houdtijd. Hij verbruikt ook wel nodeloos vermog<strong>en</strong>.<br />

Mealy Mealy-type Mealy type<br />

De Mealy Mealy FSM FSM FSM is e<strong>en</strong> systeem waarbij de uitgang<strong>en</strong><br />

funct functie funct ie zijn van de huidige toestand (zoals Moore)<br />

maar ook ook van de ingang<strong>en</strong> ingang<strong>en</strong>. ingang<strong>en</strong><br />

De uitgang is dus<br />

gespecifiëerd<br />

gespecifiëerd gespecifiëerd voor alle mogelijke mogelijke toestand<strong>en</strong> <strong>en</strong> alle<br />

mogelijke mogelijke mogelijke combinaties combinaties van van ingang<strong>en</strong> ingang<strong>en</strong>. ingang<strong>en</strong> De waarde van<br />

de uitgang wordt nu g<strong>en</strong>oteerd bij de overgang tuss<strong>en</strong><br />

de toestand<strong>en</strong>, omdat daar de huidige toestand <strong>en</strong> de<br />

ingang<strong>en</strong> gedefinieerd zijn.<br />

Voorbeeld : stel dat we in de vorige teller e<strong>en</strong> uitgang Y invoer<strong>en</strong> die 1 wordt wanneer we in<br />

toestand Count3 zijn <strong>en</strong> als CE 1 is. (Y is 1 wanneer we terug naar Count0 overgaan).<br />

Ontwe Ontwerp Ontwe rp : We veronderstell<strong>en</strong> weer dezelfde codering van de<br />

toestand<strong>en</strong>, <strong>en</strong> specifiër<strong>en</strong> in de tabel van het toestandsdiagram bij<br />

elke volg<strong>en</strong>de toestand de uitgang (met e<strong>en</strong> “/” erachter).<br />

Aangezi<strong>en</strong> Y nu afhangt van de toestand <strong>en</strong> de ingang, zull<strong>en</strong><br />

we voor Y e<strong>en</strong> karnaugh-kaart moet<strong>en</strong> voorzi<strong>en</strong> met als ingang<strong>en</strong><br />

alle Q’s van de ff <strong>en</strong> de ingang<strong>en</strong>.<br />

De uiteindelijke implem<strong>en</strong>tatie <strong>en</strong> tijdssimulatie met weer kans<br />

op e<strong>en</strong> glitch :


Algem<strong>en</strong>e Algem<strong>en</strong>e vorm vorm FSM FSM : E<strong>en</strong> FSM bestaat uit e<strong>en</strong> aantal flipflops flipflops, flipflops aantal afhankelijk van hoeveel<br />

toestand<strong>en</strong> er zijn, die bijhoud<strong>en</strong> in welke toestand het systeem is. Deze word<strong>en</strong> aangestuurt door de<br />

next next-state next state state-logic state logic die ervoor komt <strong>en</strong> die vanuit de huidige toestand <strong>en</strong> de ingang<strong>en</strong> de volg<strong>en</strong>de<br />

toestand bij de volg<strong>en</strong>de actieve kolkflank bepaald. De output utput utput-logic utput logic bepaald dan de uitgang uitgaande<br />

van de toestand (Moore) of van de toestand<strong>en</strong> <strong>en</strong> de ingang<strong>en</strong> (Mealy)<br />

Toestandgebaseerd Toestandgebaseerd model model : : Moore Moore<br />

Inputgebaseerd model model : : Mealy<br />

Mealy<br />

2) ) Het Het ontwerp ontwerp in in in detail detail<br />

detail<br />

Toestandsdiagramma Toestandsdiagramma : : constr constructie constr uctie FSM<br />

Het ontwerp ontwerp van e<strong>en</strong> FSM begint bij het mak<strong>en</strong> van het toestanddiagram vanuit de beschrijving van<br />

het probleem. We moet<strong>en</strong> alle toestand<strong>en</strong> definiër<strong>en</strong>, de overgang<strong>en</strong> ertuss<strong>en</strong> <strong>en</strong> de uitgang<strong>en</strong> ervoor.<br />

Voorbeeld Voorbeeld : modulo 3 opteller <strong>en</strong> aftrekker.<br />

We zull<strong>en</strong> onze vorige teller uitbereid<strong>en</strong> met<br />

e<strong>en</strong> mogelijkheid om af te trekk<strong>en</strong>. We<br />

hebb<strong>en</strong> nu e<strong>en</strong> ingang C (count) die bepaald<br />

of er al dan niet opgeteld of afgetrokk<strong>en</strong><br />

wordt bij de volg<strong>en</strong>de klokflank, <strong>en</strong> e<strong>en</strong><br />

ingang D (direction) die bepaald of we<br />

optell<strong>en</strong> (D=0) of aftrekk<strong>en</strong> (D=1). We<br />

mak<strong>en</strong> ook e<strong>en</strong> uitgang Y die we 1 mak<strong>en</strong><br />

voor optell<strong>en</strong> bij Count2 <strong>en</strong> voor aftrekk<strong>en</strong><br />

bij Count0.


1) Kijk Kijk eerst of het systeem Moore of Mealy is, dus of de uitgang toestands- of inputsgebaseerd is.<br />

Vb: het voorbeeld is inputgebaseerd omdat de uitgang Y afhangt van de toestand<br />

(tellerwaarde) <strong>en</strong> de ingang<strong>en</strong> “C” & “D”<br />

2) Tek<strong>en</strong> Tek<strong>en</strong> Tek<strong>en</strong> het toestandsdiagram :<br />

definieer eerst de initiële initiële toestand (het systeem start)<br />

vanuit de initiële toestand zoek<strong>en</strong> we voor alle mogelijke ingangscombinaties ingangscombinaties de nieuwe nieuwe<br />

toestand<strong>en</strong> toestand<strong>en</strong>. toestand<strong>en</strong> En dan analoog voor elke nieuwe toestand tek<strong>en</strong><strong>en</strong> we voor elke combinatie van<br />

ingang<strong>en</strong> de overgang naar de volg<strong>en</strong>de toestand tot we alle toestand<strong>en</strong> gevond<strong>en</strong> hebb<strong>en</strong> (tot<br />

voor elke toestand elke ingangscombinatie naar e<strong>en</strong> andere gek<strong>en</strong>de toestand leidt)<br />

dan zull<strong>en</strong> we alle alle uitgangswaard<strong>en</strong> uitgangswaard<strong>en</strong> toe toek<strong>en</strong>n<strong>en</strong> toe k<strong>en</strong>n<strong>en</strong> aan elke toestand als het systeem<br />

toestandgebaseerd is, of aan elke overgang voor inputgebaseerd. Wanneer we verschill<strong>en</strong>de<br />

uitgang<strong>en</strong> hebb<strong>en</strong> zull<strong>en</strong> we meestal eerst e<strong>en</strong> volgorde bepal<strong>en</strong> voor de uitgang<strong>en</strong> <strong>en</strong> ze dan<br />

gewoon achter elkaar schrijv<strong>en</strong>.<br />

Bv. wanneer we uitgang x=1 <strong>en</strong> y=0 will<strong>en</strong> schrijv<strong>en</strong> do<strong>en</strong> we xy=10<br />

Minimaliser<strong>en</strong> Minimaliser<strong>en</strong> Minimaliser<strong>en</strong> van van van het het aantal aantal aantal toestand<strong>en</strong> toestand<strong>en</strong> (<strong>en</strong> (<strong>en</strong> ff)<br />

ff)<br />

Wanneer we voor e<strong>en</strong> complex systeem alle mogelijke toestand<strong>en</strong> toestand<strong>en</strong> zoek<strong>en</strong>, zou het kunn<strong>en</strong> dat we<br />

zonder het te beseff<strong>en</strong> equival<strong>en</strong>te toestand<strong>en</strong> hebb<strong>en</strong> gedefinieerd<br />

gedefinieerd. gedefinieerd Dit zijn toestand<strong>en</strong> die eig<strong>en</strong>lijk<br />

volledig volledig volledig gelijk gelijk zijn aan elkaar, waardoor ze eig<strong>en</strong>lijk op op één na allemaal overbodig overbodig zijn. Wanneer we<br />

nu ons aantal toestand <strong>en</strong> flip-flops will<strong>en</strong> mi minimaliser<strong>en</strong><br />

mi<br />

nimaliser<strong>en</strong> nimaliser<strong>en</strong>, nimaliser<strong>en</strong> zull<strong>en</strong> we alle alle groep<strong>en</strong> groep<strong>en</strong> van van equival<strong>en</strong>te equival<strong>en</strong>te<br />

equival<strong>en</strong>te<br />

toestand<strong>en</strong> toestand<strong>en</strong> vervang<strong>en</strong> vervang<strong>en</strong> door door door één één één van van h<strong>en</strong>. h<strong>en</strong>.<br />

h<strong>en</strong>.<br />

Twee FSM zijn equival<strong>en</strong>t equival<strong>en</strong>t equival<strong>en</strong>t als<br />

beide dezelfde uitgangssequ<strong>en</strong>tie<br />

uitgangssequ<strong>en</strong>tie producer<strong>en</strong> voor e<strong>en</strong>zelfde ingangssequ<strong>en</strong>ties<br />

Twee toestand<strong>en</strong> zijn equival<strong>en</strong>t als<br />

- beide toestand<strong>en</strong> dezelfde uitgang<strong>en</strong> producer<strong>en</strong> voor dezelfde ingang<strong>en</strong> (of voor Moore<br />

dezelfde uitgang hebb<strong>en</strong>)<br />

- beide toestand<strong>en</strong> voor dezelfde ingang<strong>en</strong> naar dezelfde dezelfde equival<strong>en</strong>t volg<strong>en</strong>de toestand<strong>en</strong><br />

toestand<strong>en</strong><br />

overgaan (dus voor elke mogelijke ingangscombinatie gaan beide toestand<strong>en</strong> over naar<br />

dezelfde equival<strong>en</strong>te nieuwe toestand)<br />

Eén van de 2 is dan overbodig <strong>en</strong> valt weg.<br />

Zoek<strong>en</strong> Zoek<strong>en</strong> van van equival<strong>en</strong>te equival<strong>en</strong>te toestand<strong>en</strong> toestand<strong>en</strong> :<br />

1) 1) Stel e<strong>en</strong> toestandstabel toestandstabel op waarbij de volg<strong>en</strong>de<br />

toestand<strong>en</strong>/uitgang<strong>en</strong> gegev<strong>en</strong> zijn in functie van de huidige<br />

toestand (per rij) <strong>en</strong> van de ingang<strong>en</strong> (per kolom).<br />

Je kan dit makkelijk do<strong>en</strong> vanuit het toestandsdiagram.<br />

2) We mak<strong>en</strong> e<strong>en</strong> implicatietabel<br />

implicatietabel. implicatietabel<br />

Deze bevat 1 vierkantje<br />

per combinatie van 2 toestand<strong>en</strong> toestand<strong>en</strong>. toestand<strong>en</strong><br />

We kunn<strong>en</strong> dit do<strong>en</strong> door<br />

e<strong>en</strong> 3hoekige tabel te mak<strong>en</strong> <strong>en</strong> de vakjes als volgt te<br />

b<strong>en</strong>oem<strong>en</strong> : verticaal de eerste toestand weglat<strong>en</strong> <strong>en</strong><br />

horizontaal de laatste toestand. We zull<strong>en</strong> nu voor elk vakje<br />

kijk<strong>en</strong> of zijn 2 toestand<strong>en</strong> (één horizontaal <strong>en</strong> één verticaal)<br />

equival<strong>en</strong>t zijn.


Systeem Systeem :<br />

We schrapp<strong>en</strong> (groot kruis) alle vakjes waarvan de toestand<strong>en</strong><br />

verschill<strong>en</strong>de verschill<strong>en</strong>de uitgang<strong>en</strong> uitgang<strong>en</strong> hebb<strong>en</strong>, omdat deze per definitie niet<br />

gelijk kunn<strong>en</strong> zijn.<br />

Bij de overige vakjes kijk<strong>en</strong> voor beide toestand<strong>en</strong> van het<br />

vakje naar de volg<strong>en</strong>de toestand toestand<strong>en</strong> toestand<br />

<strong>en</strong> waarnaar wordt overgegaan<br />

voor elke mogelijke ingang ingang. ingang<br />

We noter<strong>en</strong> dit per mogelijke ingang<br />

in het vakje, met e<strong>en</strong> streepje tuss<strong>en</strong>. De toestand<strong>en</strong> van het<br />

vakje zijn nu equival<strong>en</strong>t als alle koppels in het vakje ook<br />

equival<strong>en</strong>t equival<strong>en</strong>t zijn (omdat ze dan beide overgaan naar dezelfde<br />

toestand<strong>en</strong> voor dezelfde ingang<strong>en</strong>). We noter<strong>en</strong> met andere<br />

woord<strong>en</strong> in de vakjes de toestand<strong>en</strong> die equivalant moet<strong>en</strong> zijn<br />

zijn<br />

opdat opdat de de toestand<strong>en</strong> toestand<strong>en</strong> van van hhet<br />

h t vakje dat dat ook zoud<strong>en</strong> zijn zijn. zijn<br />

We<br />

schrijv<strong>en</strong> OK wanneer we 2 toestand<strong>en</strong> vind<strong>en</strong> die equival<strong>en</strong>t<br />

zijn zonder dat er nog andere toestand<strong>en</strong> daarvoor equival<strong>en</strong>t moet<strong>en</strong> zijn.<br />

Bv. Wanneer voor ingang<strong>en</strong> DC=01 de <strong>en</strong>e toestand overgaat naar 1 <strong>en</strong> de andere naar 5, <strong>en</strong> beide<br />

toestand<strong>en</strong> hebb<strong>en</strong> dezelfde uitgang, dan noter<strong>en</strong> we in het vakja van de 2 toestand<strong>en</strong> 1-5<br />

We zull<strong>en</strong> nu de overige overige vakje vakje vakje prober<strong>en</strong> te schrapp<strong>en</strong> door te kijk<strong>en</strong> naar de koppels koppels die erin staan.<br />

Elk koppel komt ook overe<strong>en</strong> met e<strong>en</strong> vakje : wanneer het vakje van e<strong>en</strong> koppel al geschrapt is,<br />

mog<strong>en</strong> we het vakje waar het koppel instaat ook schrapp<strong>en</strong>.<br />

We illustrer<strong>en</strong> illustrer<strong>en</strong> dit ev<strong>en</strong> met e<strong>en</strong> fictieve tabel :<br />

De vakjes die we nu nog nog niet geschrapt<br />

hebb<strong>en</strong>, daarvan zijn de toestand<strong>en</strong> equival<strong>en</strong>t equival<strong>en</strong>t. equival<strong>en</strong>t<br />

We selecter<strong>en</strong> selecter<strong>en</strong> selecter<strong>en</strong> uit elk koppel equival<strong>en</strong>te<br />

toestand<strong>en</strong> er één <strong>en</strong> schrapp<strong>en</strong> de andere andere. andere<br />

We<br />

kunn<strong>en</strong> nu nieuwe nam<strong>en</strong> uitdel<strong>en</strong> <strong>en</strong> e<strong>en</strong><br />

nieuwe nieuwe nieuwe tabel tabel opstell<strong>en</strong>.<br />

Bv. in ons voorbeeld zijn er 3 vakjes over. Deze<br />

betekek<strong>en</strong> equivalantie tuss<strong>en</strong> d0 <strong>en</strong> u0, tuss<strong>en</strong> d1<br />

<strong>en</strong> u1 <strong>en</strong> tuss<strong>en</strong> d2 <strong>en</strong> u2. We hadd<strong>en</strong> 6 toestand<strong>en</strong>,<br />

we hebb<strong>en</strong> er 3 keer 2 equivalante, dus hebb<strong>en</strong> we<br />

3 toestand<strong>en</strong> over. We noem<strong>en</strong> deze s0, s1 <strong>en</strong> s2.


Codering Codering van van de de toes toestand<strong>en</strong> toes tand<strong>en</strong><br />

We zull<strong>en</strong> nu elke elke toestand toestand toestand e<strong>en</strong> e<strong>en</strong> e<strong>en</strong> code code moet<strong>en</strong> moet<strong>en</strong> gev<strong>en</strong> gev<strong>en</strong> om in de schakeling mee te werk<strong>en</strong>. De toestand<br />

waarin het systeem zich bevindt is opgeslag<strong>en</strong> met deze code code in in de de ff’s ff’s van het systeem. Wanneer we<br />

n n toestand<strong>en</strong> toestand<strong>en</strong> hebb<strong>en</strong> hebb<strong>en</strong> we minst<strong>en</strong>s log log2(n) log<br />

(n) flipfl flipflops flipfl ops <strong>en</strong> dus bits nodig om deze toestand<strong>en</strong> te<br />

coder<strong>en</strong>. We hebb<strong>en</strong> n! n! mogelijkhed<strong>en</strong><br />

mogelijkhed<strong>en</strong> om de codes toe te k<strong>en</strong>n<strong>en</strong> aan de verschill<strong>en</strong>de toestand<strong>en</strong>.<br />

Elk van deze mogelijke codering<strong>en</strong> zal leid<strong>en</strong> tot e<strong>en</strong> andere combinatorische schakeling voor de<br />

overgangslogica <strong>en</strong> outputlogica, elk met hun eig<strong>en</strong> complexiteit <strong>en</strong> kostprijs. We zull<strong>en</strong> dus prober<strong>en</strong><br />

e<strong>en</strong> codering te kiez<strong>en</strong> die zorgt voor e<strong>en</strong> minimale schakeling <strong>en</strong> dus minimale kostprijs kostprijs. kostprijs<br />

Er zijn 3 manier<strong>en</strong> van coder<strong>en</strong> : Straightforward (voor de hand ligg<strong>en</strong>d), Minimum Minimum-bit<br />

Minimum<br />

bit bit-ch bit ch change ch ange <strong>en</strong><br />

One One-hot One hot (één-actief). Er is echter altijd nog verdere verfijning mogelijk (bv. Prioritized-adjac<strong>en</strong>cy<br />

strategy (cfr. boek) )<br />

Straightforward : We kiez<strong>en</strong> hier de meest voor de handligg<strong>en</strong>de code code. code code Deze is makkelijk toe te<br />

k<strong>en</strong>n<strong>en</strong> <strong>en</strong> makkelijk om mee te werk<strong>en</strong>. We zull<strong>en</strong> dit kunn<strong>en</strong> gebruik<strong>en</strong> wanneer de toestand<strong>en</strong> op<br />

elkaar elkaar volg<strong>en</strong> volg<strong>en</strong> of of getall<strong>en</strong> getall<strong>en</strong> voorstell<strong>en</strong> voorstell<strong>en</strong>, voorstell<strong>en</strong> wanneer het toestandsnummer toestandsnummer e<strong>en</strong> e<strong>en</strong> fysieke fysieke betek<strong>en</strong>is betek<strong>en</strong>is heeft. (bv.<br />

e<strong>en</strong> teller) We kunn<strong>en</strong> dan de codering als binaire binaire nummering lat<strong>en</strong> overe<strong>en</strong>kom<strong>en</strong> met de echte<br />

volgorde of nummering van de toestand.<br />

nadeel is dat er meestal meestal meerdere ff’s ff’s tegelijk tegelijk moet<strong>en</strong> verander<strong>en</strong> bij overgang tuss<strong>en</strong><br />

toestand<strong>en</strong> <strong>en</strong> dat kan problem<strong>en</strong> met zich meebr<strong>en</strong>g<strong>en</strong>:<br />

- deze zull<strong>en</strong> zeld<strong>en</strong> zeld<strong>en</strong> exact exact exact tegelijk tegelijk tegelijk verander<strong>en</strong> -> gevaar voor glitches<br />

- elke bitverandering verbruikt vermog<strong>en</strong> -> meer vermog<strong>en</strong>verbruik<br />

- elke extra bitverandering vereist extra extra overgangslogica -> grotere <strong>en</strong> dus duurdere schakeling<br />

Minimum Minimum-bit<br />

Minimum<br />

bit bit-change bit change change-codering<br />

change codering : we mak<strong>en</strong> het aantal bitverandering<strong>en</strong> voor alle<br />

toestandsover<br />

toestandsovergang<strong>en</strong> toestandsover gang<strong>en</strong> sam<strong>en</strong> zo klein mogelijk mogelijk. mogelijk<br />

Zorg bijvoorbeeld dat bij elke overgang de 2<br />

toestand<strong>en</strong> slechts 1 bit verschill<strong>en</strong>, zodat er maar 1 ff moet schakel<strong>en</strong> bij elke overgang. Dit zijn<br />

meestal de schakeling<strong>en</strong> met het minst vermog<strong>en</strong>verbruik <strong>en</strong> de laagste kostprijs. (CMOS)<br />

bv. de gray-code teller voor modulo 4 telt 00->01->11->10->00.<br />

One One-hot One<br />

hot hot-codering<br />

hot codering : We voorzi<strong>en</strong> één flip flip-flop flip<br />

flop per toestand toestand, toestand<br />

dus voor n toestand<strong>en</strong> zijn dat n ff’s <strong>en</strong><br />

n bits. We coder<strong>en</strong> nu elke toestand met alle bits 00,<br />

0<br />

behalve behalve telk<strong>en</strong>s telk<strong>en</strong>s 1 1 bit bit die 1 is (one-hot). De codes<br />

verschill<strong>en</strong> verschill<strong>en</strong> nu nu in in de de plaats plaats van van de de 1 1 : de eerste toestand heeft e<strong>en</strong> 1 op de eerste plaats, de 2de<br />

toestand op de 2de plaats, <strong>en</strong>z.<br />

Nadel<strong>en</strong> : n flip-flops nodig in plaats van log2(n), waardoor flip flip-flop flip<br />

flop flop-deel flop deel van de chip chip duurder<br />

is <strong>en</strong> <strong>en</strong>kel gebruikt wordt voor system<strong>en</strong> met e<strong>en</strong> klein aantal toestand<strong>en</strong> (bv. controller)<br />

Voordel<strong>en</strong> : het ontwerp van de combinatorische combinatorische overgangslogica is is zeer zeer e<strong>en</strong>voudig e<strong>en</strong>voudig <strong>en</strong> dus zeer<br />

snel <strong>en</strong> goedkoop goedkoop. goedkoop<br />

De FPGA FPGA heeft bv. in e<strong>en</strong> halve CLB e<strong>en</strong> kleine combinatorische schakeling <strong>en</strong><br />

e<strong>en</strong> ff dus one-hot is ideaal voor FPGA (behalve voor tellers omdat die teveel toestand<strong>en</strong> hebb<strong>en</strong>)


Bij de impem<strong>en</strong>tatie van One-hot met flip-flops<br />

moet<strong>en</strong> we e<strong>en</strong> keuze mak<strong>en</strong> in het soort ff :<br />

D-ff: Elke overgang die in e<strong>en</strong> toestand<br />

toekomt vereist e<strong>en</strong> AND-poort<br />

SR SR-ff SR ff ff: ff Elke overgang die van e<strong>en</strong> andere<br />

toestand toekomt vereist e<strong>en</strong> AND-poort op<br />

de S-ingang. Elke overgang die naar e<strong>en</strong><br />

andere toestand vertrekt vereist e<strong>en</strong> ANDpoort<br />

op de R-ingang<br />

met D flip flip-flops flip<br />

flops<br />

Keuze Keuze van van het het type type type flip flip-flop flip flip flop<br />

met met SR fflip<br />

f<br />

lip lip-flops lip flops<br />

De 4 4 4 types types flipflop flipflop hebb<strong>en</strong> elk hun eig<strong>en</strong> voordel<strong>en</strong> <strong>en</strong> nadel<strong>en</strong> nadel<strong>en</strong>. nadel<strong>en</strong><br />

E<strong>en</strong> belangrijke parameter is het<br />

aantal don’t don’t cares : hoe meer meer don’t don’t cares cares hoe kleiner de de schakeling <strong>en</strong> dus hoe goedkoper <strong>en</strong> sneller<br />

de schakeling. Hoe meer don’t cares hoe duurder uiteraard.<br />

Om de goedkoopste schakeling te vind<strong>en</strong> moet<strong>en</strong> alle variant<strong>en</strong> uitgeprobeerd word<strong>en</strong><br />

Als e<strong>en</strong> korte ontwerptijd ontwerptijd belangrijk is, zijn D-flip-flops de beste keuze<br />

FPGA’s bevatt<strong>en</strong> <strong>en</strong>kel D-flip-flops<br />

Overzi Overzicht Overzi cht :


Realiser<strong>en</strong> Realiser<strong>en</strong> van van de de combinatorische combinatorische logica<br />

logica<br />

We zull<strong>en</strong> nu de realisatie realisatie van de combinatorische logica vergelijk<strong>en</strong> voor de verschill<strong>en</strong>de verschill<strong>en</strong>de typses<br />

typses<br />

flip flip-flops flip<br />

flops flops. flops We zi<strong>en</strong> dat hoe meer don’t don’t cares cares, cares<br />

hoe e<strong>en</strong>voudiger e<strong>en</strong>voudiger de combinatorische schakeling.<br />

We zull<strong>en</strong> als voorbeeld deze exitatietabell<strong>en</strong> uitwerk<strong>en</strong> :<br />

JK flipflops :<br />

:<br />

SR SR flipflops :


D flipflops flipflops :<br />

:<br />

T flipflops flipflops :<br />

Of beter :<br />

Analyse Analyse van van het het tijdsgedrag<br />

tijdsgedrag<br />

De maximale max max maximale<br />

imale imale klokfrequ<strong>en</strong>tie klokfrequ<strong>en</strong>tie<br />

klokfrequ<strong>en</strong>tie<br />

klokfrequ<strong>en</strong>tie van e<strong>en</strong> sequ<strong>en</strong>tiële<br />

schakeling schakeling bepal<strong>en</strong> we als de inverse van van de<br />

vertraging vertraging van van het het kritisch kritisch pad pad. pad<br />

Het maximum aantal klokcycli in e<strong>en</strong> seconde<br />

is dus het aantal keer dat het kritische pad kan<br />

doorlop<strong>en</strong> word<strong>en</strong> in 1 seconde.<br />

(kritisch pad is de langste combinatorische<br />

vertraging tuss<strong>en</strong> 2 actieve klokflank<strong>en</strong>)<br />

Wanneer we e<strong>en</strong> chip ontwerp<strong>en</strong> ontwerp<strong>en</strong>, ontwerp<strong>en</strong><br />

moet<strong>en</strong> we zijn tijdsgedrag tijdsgedrag zo goed mogelijk analyser<strong>en</strong> analyser<strong>en</strong> <strong>en</strong> de<br />

problem<strong>en</strong> die daarbij opduik<strong>en</strong> oploss<strong>en</strong> of verwaarloz<strong>en</strong>. We zull<strong>en</strong> nu e<strong>en</strong> aantal probl problem<strong>en</strong> probl<br />

em<strong>en</strong> em<strong>en</strong><br />

besprek<strong>en</strong> die in de tijd bij de werking van de chip zull<strong>en</strong> optred<strong>en</strong>. We moet<strong>en</strong> hiermee rek<strong>en</strong>ing<br />

houd<strong>en</strong> houd<strong>en</strong> <strong>en</strong> kijk<strong>en</strong> of ze de correcte werking van onze chip chip niet niet beïnvloed<strong>en</strong> beïnvloed<strong>en</strong> :


1) De ‘clock ‘clock ‘clock ‘clock skew’ skew’ skew’ skew’ is het zeer zeer minieme verschil in de tijdsog<strong>en</strong>blikk<strong>en</strong> waarop e<strong>en</strong> klokflank op<br />

verschill<strong>en</strong>de plaats<strong>en</strong> in de schakeling waarg<strong>en</strong>om<strong>en</strong> word<strong>en</strong>. (in verschill<strong>en</strong>de stukk<strong>en</strong> van de<br />

schakeling) Dit tijdverschil tuss<strong>en</strong> de klokflank<strong>en</strong> in de verschill<strong>en</strong>de flip-flops is te wijt<strong>en</strong> aan :<br />

de verschill<strong>en</strong> in de vertragingstijd van combinatorische logica logica op op de de de klokpad<strong>en</strong> klokpad<strong>en</strong> klokpad<strong>en</strong> : bv. :<br />

- er kunn<strong>en</strong> buffers zitt<strong>en</strong> op het klokpad om de fan-out van<br />

het kloksignaal te vergrot<strong>en</strong><br />

- e<strong>en</strong> kloksignaal kan sam<strong>en</strong> sam<strong>en</strong> met e<strong>en</strong> CE CE signaal eerst door door e<strong>en</strong><br />

e<strong>en</strong><br />

AND AND gaan (‘clock <strong>en</strong>able’, om de klok af te zett<strong>en</strong> voor die ff)<br />

<strong>en</strong> dan pas in de flip-flop kom<strong>en</strong>.<br />

Verschill<strong>en</strong>de stijg/daaltijd<strong>en</strong> t.g.v. verschill<strong>en</strong>de capacitieve belasting van de kloklijn<strong>en</strong>.<br />

Elke kloklijn heeft e<strong>en</strong> weerstand R <strong>en</strong> e<strong>en</strong> capaciteit C met de grond, dus RC-gedrag.<br />

Verschill<strong>en</strong>de looptijd van het kloksignaal over e<strong>en</strong> verbinding door :<br />

- e<strong>en</strong> draad is e<strong>en</strong> transmissielijn bij hoge frequ<strong>en</strong>ties : verschill<strong>en</strong>de drad<strong>en</strong> hebb<strong>en</strong><br />

verschill<strong>en</strong>de vertraging<strong>en</strong><br />

- verschill<strong>en</strong>de doorlooptijd<strong>en</strong> van de schakelmatrices van de FPGA<br />

Verschill<strong>en</strong>de ff’s trigger<strong>en</strong> op e<strong>en</strong> verschill<strong>en</strong>d triggerniveau (trigger op verschill<strong>en</strong>d voltage)<br />

2) We moet<strong>en</strong> glitches glitches glitches glitches prober<strong>en</strong> te vermijd<strong>en</strong><br />

3) De metastabiliteitsproblem<strong>en</strong> metastabiliteitsproblem<strong>en</strong><br />

metastabiliteitsproblem<strong>en</strong><br />

metastabiliteitsproblem<strong>en</strong> :<br />

Metastabiliteit Metastabiliteit is e<strong>en</strong> toestand toestand waarin de schakeling e<strong>en</strong> bepaalde stabiele waarde waarde op op e<strong>en</strong> e<strong>en</strong> e<strong>en</strong> uitgang uitgang<br />

uitgang<br />

heeft die niet niet ove overe<strong>en</strong>komt ove<br />

re<strong>en</strong>komt re<strong>en</strong>komt met e<strong>en</strong> logisch niveau (0, 1 of Z).<br />

Metastabiliteit kan ontstaan in volg<strong>en</strong>de situaties :<br />

bij slecht slecht ontworp<strong>en</strong> synchrone schakeling<strong>en</strong> (dit is de metastabiliteit van de flipflops die<br />

we vroeger hebb<strong>en</strong> uitgelegd)<br />

-> oplossing<strong>en</strong> : lagere klokfrequ klokfrequ<strong>en</strong>tie<br />

klokfrequ<br />

<strong>en</strong>tie nem<strong>en</strong> of snellere logica waardoor de tijd waarin<br />

metastabiliteit kan ontstaan kleiner wordt.<br />

bij synchronisatie : wanneer we asynchrone externe ingang<strong>en</strong> ingang<strong>en</strong> ingang<strong>en</strong> will<strong>en</strong> gebruik<strong>en</strong> in e<strong>en</strong><br />

synchroon sequ<strong>en</strong>tieel circuit, moet<strong>en</strong> we deze eerst synchroniser<strong>en</strong> met de klok van het<br />

systeem. Dit do<strong>en</strong> we door ze eerst door e<strong>en</strong> DD-ff<br />

D<br />

ff te hal<strong>en</strong>. E<strong>en</strong> verandering in niveau van het<br />

externe signaal wordt dan pas in het interne circuit doorgelat<strong>en</strong> op e<strong>en</strong> klokflank, zodat de<br />

verandering<strong>en</strong> verandering<strong>en</strong> van van het het signaal signaal intern intern synchroon synchroon gebeur<strong>en</strong> gebeur<strong>en</strong> met die van de rest van de<br />

schakeling. Het externe signaal kan echter e<strong>en</strong>der wanneer in de tijd verander<strong>en</strong>, <strong>en</strong> dus ook<br />

binn<strong>en</strong> de set set-up set<br />

up up- up <strong>en</strong> de houdtijd<strong>en</strong> van de ff ff. ff<br />

Dit kan metastabiliteit van de ff tot gevolg<br />

hebb<strong>en</strong> wanneer het externe signaal sam<strong>en</strong> met de klok veranderd.<br />

-> oplossing<strong>en</strong> :<br />

volg<strong>en</strong>d blad<br />

We zi<strong>en</strong> dat wanneer 2 ingangn verander<strong>en</strong> op e<strong>en</strong> klokflank, dit verschill<strong>en</strong>de effect<strong>en</strong><br />

kunn<strong>en</strong> hebb<strong>en</strong> : beide verander<strong>en</strong> op de flank, beide verander<strong>en</strong> pas op de volg<strong>en</strong>de<br />

klokflank, ze do<strong>en</strong> verschill<strong>en</strong>de ding<strong>en</strong>, of ze gerak<strong>en</strong> metastabiel. Dit kan bij de D-ff <strong>en</strong>kel<br />

bij overgang van hoog naar laag wanneer de klok van laag naar hoog gaat, omdat dan beide<br />

verandering<strong>en</strong> in het midd<strong>en</strong> van het voltage kunn<strong>en</strong> stopp<strong>en</strong> op e<strong>en</strong> metastabiel voltage.


Probleem robleem :<br />

Het probleem doet zich voor wanneer de<br />

D-ingang veranderd van 1 naar 0 <strong>en</strong> de klok<br />

van 0 naar 1 gaat (of beide omgekeerd). Klok<br />

<strong>en</strong> <strong>en</strong> DD-ingang<br />

DD<br />

ingang verander<strong>en</strong> dus sam<strong>en</strong> sam<strong>en</strong> <strong>en</strong> naar naar<br />

e<strong>en</strong> e<strong>en</strong> teg<strong>en</strong>gesteld teg<strong>en</strong>gesteld niveau niveau. niveau Beide kunn<strong>en</strong> dan<br />

blijv<strong>en</strong> stek<strong>en</strong> op e<strong>en</strong> metastabiel voltage<br />

waarbij beide gelijk zijn.<br />

Door ruis zal dit ev<strong>en</strong>wicht ev<strong>en</strong>wicht verstoord verstoord word<strong>en</strong> <strong>en</strong> door het niet stabiel zijn van het<br />

ev<strong>en</strong>wicht zull<strong>en</strong> we automatisch overgaan naar e<strong>en</strong> stabiele stabiele toestand toestand. toestand Het probleem lost zich<br />

dus na e<strong>en</strong> tijd vanzelf op, maar in de tijd van metastabiliteit kan de schakeling wel volledig<br />

ovoorspelbaar reager<strong>en</strong> :<br />

Het metastabiele metastabiele signaal signaal signaal uit de eerste flipflop (synchronisatie synchronisatie ff ff) ff komt de synchrone<br />

schakeling binn<strong>en</strong> in de combinatorische schakeling <strong>en</strong> daarna in de eerste eerste ff ff ff van het<br />

synchrone systeem. We moet<strong>en</strong> nu zorg<strong>en</strong> dat het ingangssignaal niet meer metastabiel metastabiel is in<br />

de set-up up up-tijd up tijd van de 2 de ff ff ff opdat de 2de ff niet metastabiel zou word<strong>en</strong>, <strong>en</strong> daarbij moet<strong>en</strong> we er<br />

rek<strong>en</strong>ing houd<strong>en</strong> dat dit signaal vertraagd wordt door de combinatorische logica.<br />

De tijd tijd waarin het signaal uit de eerste flipflop dus metastabiel metastabiel mag mag zijn zijn zijn (tmeta) moet dus<br />

kleiner dan tr (de metastability resulotion time) met<br />

tr = tklok – tcomb – tset-up. We hebb<strong>en</strong> dus e<strong>en</strong> hele klokcyclus de tijd om te stabiliser<strong>en</strong>, min de<br />

set-up-tijd <strong>en</strong> vertraging van de combinatorische logica. Hoe groter groter tr, hoe minder kans op<br />

metastabiliteit.<br />

We kunn<strong>en</strong> helaas niet kiez<strong>en</strong> hoe lang e<strong>en</strong> signaal metastabiel blijft, <strong>en</strong> daarom zoek<strong>en</strong> we<br />

e<strong>en</strong> oplossing :<br />

Oplossing Oplossing<strong>en</strong><br />

Oplossing <strong>en</strong> :<br />

We zull<strong>en</strong> het asynchrone asynchrone signaal signaal eerst<br />

door door verschill<strong>en</strong>de verschill<strong>en</strong>de ff’s ff’s ff’s lat<strong>en</strong> passer<strong>en</strong> (2<br />

of 3) voor we het binn<strong>en</strong> br<strong>en</strong>g<strong>en</strong> in het<br />

synchrone systeem. Wanneer nu de<br />

uitgang van de eerste ff metastabiel is, zal die hopelijk niet meer metastabiel zijn in de set-uptijd<br />

van de 2de ff. Wanneer wel, wordt de uitgang van de 2de ff ook metastabiel, <strong>en</strong> we hop<strong>en</strong><br />

dat dan deze metastabiliteit zichzelf oplost voor de set-up-tijd van de 3de ff, <strong>en</strong>z. We verhog<strong>en</strong><br />

op deze manier tr . We kunn<strong>en</strong> dit systeem op 2 manier<strong>en</strong> toepass<strong>en</strong> :<br />

snellere ff’s gebruik<strong>en</strong> met kortere set-up- <strong>en</strong> houdttijd<strong>en</strong> (die verbruik<strong>en</strong> echter wel<br />

.<br />

meer vermog<strong>en</strong>). Hierdoor wordt tr groter. Ook snellere combinatorische logica helpt.<br />

we kunn<strong>en</strong> e<strong>en</strong> zo traag mogelijke klok klok gebruik<strong>en</strong> zodat de periodes van mogelijke<br />

metastabiliteit verder uit elkaar ligg<strong>en</strong>. Ook dit maakt tr groter.<br />

We kunn<strong>en</strong> bv. onze flokfrequ<strong>en</strong>tie kleiner mak<strong>en</strong> (pas om de n klokflank<strong>en</strong> e<strong>en</strong><br />

actieve klokflank nem<strong>en</strong>)<br />

Toepasbaar wanneer de externe<br />

signal<strong>en</strong> niet veel verander<strong>en</strong> t.o.v.<br />

klok <strong>en</strong> als er ge<strong>en</strong> onmiddellijke<br />

reactie op verandering vereist is


Ontwerp Ontwerp van van Asynchrone Asynchrone sequ<strong>en</strong>tiële sequ<strong>en</strong>tiële schakeling<strong>en</strong><br />

schakeling<strong>en</strong><br />

Bij asynchrone schakeling<strong>en</strong> kunn<strong>en</strong> uitgang<strong>en</strong> & toestand verander<strong>en</strong> zodra e<strong>en</strong> ingang verandert,<br />

zonder zonder te te wacht<strong>en</strong> wacht<strong>en</strong> op de volg<strong>en</strong>de klokflank klokflank. klokflank<br />

We beperk<strong>en</strong> ons tot de fundam<strong>en</strong>tele modus : dit houdt in dat<br />

- ge<strong>en</strong> twee (of meer) ingang<strong>en</strong> mog<strong>en</strong> tegelijkertijd verander<strong>en</strong><br />

- e<strong>en</strong> ingangsverandering mag slechts optred<strong>en</strong> als alle effect<strong>en</strong> van de vorige verandering<br />

uitgestorv<strong>en</strong> zijn<br />

Dit is toepasbaar toepasbaar op kleine asynchrone schakeling<strong>en</strong> wanneer we bv. twee synchrone eiland<strong>en</strong> met<br />

verschill<strong>en</strong>de klokk<strong>en</strong> of klokk<strong>en</strong> met e<strong>en</strong> ongek<strong>en</strong>de skew koppel<strong>en</strong>.<br />

1) ) Toestandsdiagramma<br />

Toestandsdiagramma<br />

- E<strong>en</strong> toestand van e<strong>en</strong> synchrone schakeling is elke combinatie van<br />

zijn uitgang<strong>en</strong> uitgang<strong>en</strong>. uitgang<strong>en</strong> De ingang<strong>en</strong> hebb<strong>en</strong> daar <strong>en</strong>kel effect op de uitgang<strong>en</strong><br />

op de klokflank<strong>en</strong>.<br />

- E<strong>en</strong> toestand toestand van e<strong>en</strong> Asynchrone synchrone schakeling is elke mogelijke<br />

combinatie van ingang<strong>en</strong> <strong>en</strong> <strong>en</strong> uitgang<strong>en</strong> uitgang<strong>en</strong>, uitgang<strong>en</strong> omdat e<strong>en</strong> verandering van<br />

e<strong>en</strong> ingang e<strong>en</strong> directe verandering van de uitgang tot gevolg gheeft.<br />

Bv. ontwerp e<strong>en</strong> schakeling met één uitgang Q <strong>en</strong><br />

twee ingang<strong>en</strong> I <strong>en</strong> E waarvoor :<br />

E = 1 & stijg<strong>en</strong>de flank van I ⇒ Q wordt 1 :<br />

dus overgang b → f wanneer QIE overgang 001 → 111<br />

Q blijft 1 tot E 0 wordt :<br />

dus overgang e → a <strong>en</strong> of f → c waneer QIE overgang 1X1 → 0X0<br />

E = 0 ⇒ Q = 0 :<br />

dus de combinatie QIE 1X0 is onmogelijk<br />

We kunn<strong>en</strong> dit vertal<strong>en</strong> naar het volg<strong>en</strong>de<br />

toestandsdiagram toestandsdiagram :<br />

Vanuit elke mogelijke toestand vertrekk<strong>en</strong> pijl<strong>en</strong><br />

naar naar andere andere toestand<strong>en</strong> toestand<strong>en</strong> met voor elke pijl de<br />

ingang die vereist is om die overgang te mak<strong>en</strong>.<br />

Elke toestand heeft e<strong>en</strong> bepaalde uitgang <strong>en</strong><br />

bepaalde ingang<strong>en</strong>. Bij e<strong>en</strong> verandering van de<br />

ingang<strong>en</strong> wordt overgaan naar de volg<strong>en</strong>de<br />

toestand die overe<strong>en</strong>komt met de pijl met die<br />

ingangscombinatie


2) ) Minimalisering Minimalisering aantal aantal toestand<strong>en</strong> toestand<strong>en</strong><br />

toestand<strong>en</strong><br />

We zull<strong>en</strong> ook hier prober<strong>en</strong> ons aantal ttoestand<strong>en</strong><br />

t<br />

oestand<strong>en</strong> te beperk<strong>en</strong> door de<br />

onmogelijke onmogelijke onmogelijke weg weg te te lat<strong>en</strong> lat<strong>en</strong>. lat<strong>en</strong><br />

We stell<strong>en</strong> nu e<strong>en</strong> overgangstabel overgangstabel op waarin we voor elke toestand aangev<strong>en</strong><br />

naar welke volg<strong>en</strong>de toestand we overgaan voor elke ingang.<br />

Wanneer we hier met fundam<strong>en</strong>tele modulus werk<strong>en</strong> kunn<strong>en</strong> er nooit<br />

2 ingangssignal<strong>en</strong> tegelijkertijd verander<strong>en</strong> <strong>en</strong> hebb<strong>en</strong> we ook hier e<strong>en</strong><br />

aantal overgang<strong>en</strong> die onmogelijk zijn.<br />

De stabiele stabiele toestand<strong>en</strong> toestand<strong>en</strong> zijn de toestand<strong>en</strong> waarin we overgaan naar<br />

dezelfde toestand als vanwaar we kom<strong>en</strong>, dus wanneer alles gelijk blijft.<br />

Om het aantal toestand<strong>en</strong> te te minimaliser<strong>en</strong> moet<strong>en</strong> we nu de compatibele<br />

compatibele<br />

toestand<strong>en</strong> toestand<strong>en</strong> sam<strong>en</strong>smelt<strong>en</strong><br />

sam<strong>en</strong>smelt<strong>en</strong>. sam<strong>en</strong>smelt<strong>en</strong> Dit zijn de toestand<strong>en</strong> die voor gelijke ingang<strong>en</strong><br />

dezelfde dezelfde volg<strong>en</strong>de volg<strong>en</strong>de toestand<strong>en</strong> toestand<strong>en</strong> <strong>en</strong> uitgang hebb<strong>en</strong> of don’t cares cares. cares<br />

Dit is meer meer restrictief restrictief dan de equivalt<strong>en</strong>te toesta toestand<strong>en</strong> toesta<br />

nd<strong>en</strong> van de synchrone<br />

schakeling<strong>en</strong> : compatibiliteit vereist namelijk het volg<strong>en</strong>de extra :<br />

de toestand<strong>en</strong> waar we naar overgaan moet<strong>en</strong> gelijk zijn voor<br />

compatibiliteit in plaats van alle<strong>en</strong> maar equival<strong>en</strong>t<br />

dit is nodig weg<strong>en</strong>s don’t cares in de volg<strong>en</strong>de toestand<strong>en</strong><br />

compatibiliteit is niet niet associatief associatief (equival<strong>en</strong>tie wel!): compatibel(a,b)<br />

<strong>en</strong> compatibel(b,c) betek<strong>en</strong>t niet dat compatibel(a,c)<br />

In het voorbeeld zi<strong>en</strong> we volg<strong>en</strong>de compatibiliteit<strong>en</strong> :<br />

a & b; a & c; a & d; c & d; e & f<br />

Dit houdt dus in dat voor elk koppel alle IE’s <strong>en</strong> Q’s gelijk zijn, behalve<br />

voor de don’t cares<br />

We kunn<strong>en</strong> nu bv. a&b, c&d <strong>en</strong> e&f sam<strong>en</strong>nem<strong>en</strong> .<br />

We vervang<strong>en</strong> vervang<strong>en</strong> compatibele compatibele toestand<strong>en</strong> toestand<strong>en</strong> nu door e<strong>en</strong> geme<strong>en</strong>schappelijk<br />

tek<strong>en</strong> tek<strong>en</strong>, tek<strong>en</strong> omdat ze toch gelijkaardig reager<strong>en</strong> reager<strong>en</strong>. reager<strong>en</strong><br />

Wanneer we ge<strong>en</strong> compatibile<br />

toestand<strong>en</strong> meer hebb<strong>en</strong> krijg<strong>en</strong> we de transistietabel transistietabel : minimalisering van<br />

de toestandstabel<br />

3) ) Codering<br />

Codering<br />

We zull<strong>en</strong> nu op dezelfde manier als bij synchrone schakeling<strong>en</strong> coder<strong>en</strong>.


4) ) Realisatie<br />

Realisatie<br />

5) ) Analyse Analyse tijdsgedrag tijdsgedrag : : Races Races Races & & Hazar Hazards Hazar ds<br />

E<strong>en</strong> Race in e<strong>en</strong> schakeling is het feit dat bij e<strong>en</strong> bepaalde toestandsovergang toestandsovergang 2 2 of of meer meer<br />

toestands toestandsvariabel<strong>en</strong><br />

toestands toestandsvariabel<strong>en</strong><br />

variabel<strong>en</strong> moet<strong>en</strong> verander<strong>en</strong> voor 1 veranderde veranderde ingangsbit ingangsbit. ingangsbit<br />

Het optred<strong>en</strong> van e<strong>en</strong> race <strong>en</strong><br />

het soort race hangt af van de vertragings vertragings-karakteristiek<strong>en</strong><br />

vertragings<br />

karakteristiek<strong>en</strong> van de poort<strong>en</strong>.<br />

E<strong>en</strong> race zelf leidt niet tot tot e<strong>en</strong> foute uitgang uitgang. uitgang<br />

vb vb vb race race : wanneer E=1 <strong>en</strong> we I verander<strong>en</strong><br />

van 0 naar 1, gaan we over van toestand 00<br />

naar toestand 11. Hier verander<strong>en</strong> dus<br />

beide beide toestandsvariabel<strong>en</strong> toestandsvariabel<strong>en</strong> terwijl slechts<br />

één één één ingang ingang veranderd is. De vera verandering<br />

vera<br />

ndering<br />

moet daarbij doorgev<strong>en</strong> word<strong>en</strong> van de<br />

schakeling van de <strong>en</strong>e variabele naar de<br />

andere.<br />

Nadel<strong>en</strong> Nadel<strong>en</strong> van e<strong>en</strong> race :<br />

- het vraagt veel tijd vraagt om deze hele verandering door te voer<strong>en</strong> (grote vertraging) omdat<br />

eerst de eerste toestandvariabele veranderd <strong>en</strong> onder invloed daarvan pas de 2de.<br />

- doordat eerst de eerste uitgang verandert <strong>en</strong> pas ev<strong>en</strong> daarna de 2de is de schakeling dus ev<strong>en</strong><br />

in in in e<strong>en</strong> e<strong>en</strong> e<strong>en</strong> foute foute foute toestand toestand. toestand toestand Zulk gedrag di<strong>en</strong>t vermed<strong>en</strong> te word<strong>en</strong>.<br />

Cycle : Race die tot e<strong>en</strong> oscillatie tuss<strong>en</strong> twee toestand<strong>en</strong> leidt. Dit is volledig fout gedrag.<br />

vb vb Cycle Cycle Cycle (andere schakeling !) :<br />

ook hier zi<strong>en</strong> we dat door één<br />

ingangsvariabele aan te pass<strong>en</strong> de<br />

beide uitgangsvariabel<strong>en</strong> om de<br />

beurt verander<strong>en</strong> onder invloed<br />

van elkaar.<br />

Critical race : Race die tot e<strong>en</strong> verkeerde toestand leidt. Dit krijg<strong>en</strong> we in het vorige voorbeeld<br />

bijvoorbeeld wanneer de puls van b’ ongeveer nul is.


We kunn<strong>en</strong> deze ‘critical races races’ races<br />

eliminer<strong>en</strong> eliminer<strong>en</strong> door e<strong>en</strong><br />

toestandscodering toestandscodering te gebruik<strong>en</strong> die altijd maximaal 1<br />

1<br />

toestandsvariabele toestandsvariabele mag wijzig<strong>en</strong> t.g.v. 1 ingangsverandering.<br />

Dit is niet altijd mogelijk (zie voorbeeld)<br />

Doe e<strong>en</strong> zo goed mogelijke toestandscodering<br />

Id<strong>en</strong>tificeer Id<strong>en</strong>tificeer de overblijv<strong>en</strong>de problem<strong>en</strong><br />

Leid de overgang<strong>en</strong> die nog niet in orde zijn<br />

(meer dan 1 toestandsvariabele verander<strong>en</strong>)<br />

om via bijkom<strong>en</strong>de toestand<strong>en</strong> zodat niet langer<br />

2 of meer toestandsvariabel<strong>en</strong> moet<strong>en</strong> wijzig<strong>en</strong><br />

We mak<strong>en</strong> in het voorbeeld e<strong>en</strong> extra toestand toestand bij tuss<strong>en</strong> die waar er 2<br />

toestandsvariabel<strong>en</strong> toestandsvariabel<strong>en</strong> moest<strong>en</strong> moest<strong>en</strong> verander<strong>en</strong> verander<strong>en</strong> bij overgang. Deze di<strong>en</strong>t <strong>en</strong>kel om<br />

de overgang door te gev<strong>en</strong> op e<strong>en</strong> gecontroleerde manier. Dit zorgt voor de<br />

volg<strong>en</strong>de implem<strong>en</strong>tatie<br />

implem<strong>en</strong>tatie :<br />

Initiële toestand : wanneer we de stroom op het circuit aansluit<strong>en</strong> aansluit<strong>en</strong>, aansluit<strong>en</strong> komt de schakeling in e<strong>en</strong><br />

willekeurige willekeurige toestand toestand terecht. Het is mogelijk dat deze willekeurige toestand zo’n don’t care is. Deze<br />

don’t cares zijn echter wel ingevuld e<strong>en</strong>s de implem<strong>en</strong>tatie voltooid is, <strong>en</strong> dus is het mogelijk dat deze<br />

don’t care e<strong>en</strong> stabiele toestand toestand op zich is geword<strong>en</strong>, hoewel die<br />

stabiele toestand eig<strong>en</strong>lijk eig<strong>en</strong>lijk ge<strong>en</strong> deel mag zijn van de schakeling.<br />

Normaal komt de schakeling nooit nooit in die toestand toestand, toestand<br />

maar initieel zou zou<br />

dat dat wel wel kunn<strong>en</strong> kunn<strong>en</strong>. kunn<strong>en</strong> We kunn<strong>en</strong> dus best de don’t cares zelf zo invull<strong>en</strong><br />

dat hij voor e<strong>en</strong>der e<strong>en</strong>der welke ingangstoestand naar e<strong>en</strong> stabiele toestand<br />

gaat met dezelfde ingang. In ons voorbeeld moet<strong>en</strong> we zo zorg<strong>en</strong> dat<br />

het systeem initieel niet in de doorgeeftoestand blijft stek<strong>en</strong>, want<br />

dan werkt het niet.<br />

Bij asynchrone schakeling<strong>en</strong> moet<strong>en</strong> hazards op de toestandsvariabel<strong>en</strong> vermed<strong>en</strong> word<strong>en</strong> omdat<br />

ze tot e<strong>en</strong> verkeerde verkeerde toestand toestand kunn<strong>en</strong> leid<strong>en</strong><br />

- Dit geldt zowel voor statische als als dynamische hazards<br />

- Bij synchrone schakeling<strong>en</strong> geldt dit niet omdat glitches daar moet<strong>en</strong> uitgestorv<strong>en</strong> zijn voor de<br />

volg<strong>en</strong>de klokflank<br />

De vorige implem<strong>en</strong>tatie van het voorbeeld was reeds hazard-vrij<br />

problem<strong>en</strong> problem<strong>en</strong> met skew op de de uitga uitgang<strong>en</strong> uitga<br />

ng<strong>en</strong> ng<strong>en</strong> : Stel dat er erg<strong>en</strong>s in de schakeling<br />

op op 1 1 plaats plaats plaats e<strong>en</strong> e<strong>en</strong> extra extra vertraging vertraging zit (bv. door gebruik van e<strong>en</strong> lange lijn).<br />

Dit kan de werking van de schakeling drastisch in de war stur<strong>en</strong>.<br />

Bv. stel we start<strong>en</strong> met toestand 01 <strong>en</strong> ingang<strong>en</strong> IE 11 <strong>en</strong> we verander<strong>en</strong> i van<br />

1 naar 0.<br />

- de vooropgestelde werking stelt dat de toestand veranderd naar naar 00 00<br />

- de reële reële werking met de vertragin zorgt ervoor dat I voor de onderste<br />

poort later veranderd.<br />

We zi<strong>en</strong> dat de volg<strong>en</strong>de verandering : 01 → 00 00 → 10 10 → 11<br />

11


ess<strong>en</strong>tiële haz hazard haz<br />

ard : toestand waarbij één één <strong>en</strong>kele ingangsverandering de hele schakeling in e<strong>en</strong><br />

verkeerde verkeerde toestand toestand br<strong>en</strong>gt. We kunn<strong>en</strong> dan voor éénzelfde ingangs ingangs- ingangs<br />

<strong>en</strong> toestandscombinatie overgaan<br />

naar verschill<strong>en</strong>de andere toestand<strong>en</strong> toestand<strong>en</strong>. toestand<strong>en</strong><br />

- We herk<strong>en</strong>n<strong>en</strong> herk<strong>en</strong>n<strong>en</strong> deze ess<strong>en</strong>tiële hazard aan het feit dat we e<strong>en</strong> andere andere<br />

eindtoestand eindtoestand krijg<strong>en</strong> wanneer we de ingang 1 of 3 keer keer verander<strong>en</strong> verander<strong>en</strong>. verander<strong>en</strong><br />

(wanneer we in 01 de ingang verander<strong>en</strong> naar 01, kom<strong>en</strong> we in<br />

toestand 00. Wanneer we nu echter terug overgaan naar ingang 11 <strong>en</strong><br />

dan weer naar 01, kom<strong>en</strong> we in toestand 11, die verschilt van 01)<br />

- We kunn<strong>en</strong> deze ess<strong>en</strong>tiële hazards vermijd<strong>en</strong> door toestandsvariabel<strong>en</strong> pas te te wijzig<strong>en</strong> wanneer<br />

alle alle ingangsverandering<strong>en</strong> ingangsverandering<strong>en</strong> aan de poort<strong>en</strong> gekom<strong>en</strong> zijn. Dit vraagt e<strong>en</strong> zorgvuldig zorgvuldig ontwerp op<br />

electrisch niveau, bv door extra vertraging<strong>en</strong> in te voer<strong>en</strong>.<br />

Basisbouwblokk<strong>en</strong> Basisbouwblokk<strong>en</strong> Basisbouwblokk<strong>en</strong> op op RTL RTL-niveau RTL niveau<br />

We zull<strong>en</strong> nu <strong>en</strong>kele ess<strong>en</strong>tiële onderdel<strong>en</strong> van system<strong>en</strong> op register-transfer-niveau besprek<strong>en</strong><br />

1) ) Register<br />

Register<br />

E<strong>en</strong> register is het meest e<strong>en</strong>voudige opslag opslag-compon<strong>en</strong>t<br />

opslag<br />

compon<strong>en</strong>t dat bestaat uit n DD-ff’s<br />

D<br />

ff’s ff’s met<br />

geme<strong>en</strong>schappelijke eme<strong>en</strong>schappelijke klok klok. klok Het register heeft dan n ingang<strong>en</strong> <strong>en</strong> n uitgang<strong>en</strong> om data in <strong>en</strong> uit de n ff’s<br />

te lad<strong>en</strong>. De klok komt in theorie overal in de ff’s tegelijkertijd. We kunn<strong>en</strong> e<strong>en</strong> actief lage Preset Preset <strong>en</strong> <strong>en</strong><br />

e<strong>en</strong> e<strong>en</strong> Clear Clear Clear toevoeg<strong>en</strong> om alle ff’s uitgang 1 of 0 te mak<strong>en</strong>. Clear is meestal asynchroon asynchroon, asynchroon<br />

preset soms<br />

ook. Ze zijn dan onafhankelijk van de klok <strong>en</strong> de ingang<strong>en</strong>. (Deze preset <strong>en</strong> clear moet<strong>en</strong> dan ev<strong>en</strong> 0<br />

word<strong>en</strong> : gebruikt bij initialiser<strong>en</strong> van de system<strong>en</strong>).<br />

We kunn<strong>en</strong> e<strong>en</strong> register laadbaar mak<strong>en</strong> door de klok sam<strong>en</strong> met e<strong>en</strong> <strong>en</strong>able <strong>en</strong>able door e<strong>en</strong><br />

AND AND te lat<strong>en</strong> passer<strong>en</strong>. We zull<strong>en</strong> dan slechts nieuwe data data data in het register lat<strong>en</strong> kom<strong>en</strong><br />

wanneer de CE (<strong>en</strong>able) 1 is. Wanneer deze 0 is blijft de vorige data data opgeslag<strong>en</strong> opgeslag<strong>en</strong> in het<br />

register.<br />

Voordeel Voordeel Voordeel : we moet<strong>en</strong> de ff’s <strong>en</strong>kel <strong>en</strong>kel schakel schakel<strong>en</strong> schakel<br />

<strong>en</strong> <strong>en</strong> wanneer er e<strong>en</strong> nieuwe waarde moet ingelez<strong>en</strong><br />

word<strong>en</strong> in plaats van op elke klokflank, hetge<strong>en</strong> vermog<strong>en</strong>bespar<strong>en</strong>d is.<br />

Nadeel Nadeel : - de CE CE mag alle<strong>en</strong> verander<strong>en</strong> verander<strong>en</strong> wanneer de clk=0<br />

- de afgeleide afgeleide (gated) klokk<strong>en</strong> klokk<strong>en</strong> zijn gevoelig voor<br />

klok klok-skew klok skew skew: skew dat wil zegg<strong>en</strong> dat niet alle klokk<strong>en</strong><br />

van alle registers tegelijkertijd verander<strong>en</strong>.<br />

Wanneer we registers achter elkaar plaats<strong>en</strong> is<br />

het mogelijk dat we door de vertraging<strong>en</strong> van de<br />

klok <strong>en</strong> van het eerste register de set-up of<br />

houdtijd van het 2de register sch<strong>en</strong>d<strong>en</strong>


E<strong>en</strong> oplossing plossing <strong>en</strong> mete<strong>en</strong> e<strong>en</strong> andere<br />

manier manier om e<strong>en</strong> laadbaar register te mak<strong>en</strong> is<br />

met selectors : We stur<strong>en</strong> elke ingang eerst<br />

door e<strong>en</strong> selector sam<strong>en</strong> met de uitgang. De<br />

CE bepaald via deze selector of de nieuwe<br />

ingang de huidige uitgang is (huidige waarde<br />

behoud<strong>en</strong>) of de externe ingang is (nieuwe<br />

data inlad<strong>en</strong>). Dit lost de klok klok-skew klok<br />

skew<br />

problem<strong>en</strong> problem<strong>en</strong> op op doordat alle ff’s dezelfde klok<br />

gebruik<strong>en</strong>, maar deze oplossing is duurder<br />

door de selectors <strong>en</strong> verbruikt meer<br />

vermog<strong>en</strong> vermog<strong>en</strong> omdat er elke klokflank geschakeld<br />

wordt.<br />

2) ) Schuif SchuifRegister<br />

Schuif Register<br />

E<strong>en</strong> schuifregister is e<strong>en</strong> register met slechts 1 ingang ingang, ingang<br />

waarbij telk<strong>en</strong>s als de ingang ingelez<strong>en</strong> wordt<br />

elke elke bit bit 1 1 1 ff ff opschuift opschuift. opschuift We onthoud<strong>en</strong> dus als het war<strong>en</strong> e<strong>en</strong> ope<strong>en</strong>volging van bits bits. bits<br />

De laatste bit valt<br />

uiteraard uiteraard uiteraard telk<strong>en</strong>s telk<strong>en</strong>s weg weg wanneer er e<strong>en</strong> nieuwe bit ingelez<strong>en</strong> wordt. We kunn<strong>en</strong> de waarde van van elke elke ff<br />

uitlez<strong>en</strong> via uitgang<strong>en</strong> uitgang<strong>en</strong>. uitgang<strong>en</strong><br />

De realisatie gebeurt met selectors : we selecter<strong>en</strong> telk<strong>en</strong>s als nieuwe waarde voor elke ff ofwel de<br />

uitgang uitgang van dezelfde ff (onthoud<strong>en</strong>) ofwel de waarde van de vorige ff ff (alle bits 1 ff opschuiv<strong>en</strong>). De<br />

selectors stur<strong>en</strong> we aan met de ingang ingang SE SE, SE<br />

<strong>en</strong> deze bepaalt dus of er geshift wordt of dat de waard<strong>en</strong><br />

gewoon behoud<strong>en</strong> blijv<strong>en</strong> bij de volg<strong>en</strong>de klok.<br />

Toepassing<strong>en</strong> : - Ontvangstregister (Rx) seriële poort<br />

- Vertragingslijn FIR/IIR filters<br />

2 Soort<strong>en</strong> Soort<strong>en</strong> schuifregisters :<br />

Serial Serial-In/Parallel<br />

Serial<br />

In/Parallel In/Parallel-Out<br />

In/Parallel Out schuifregister : 1 ingang <strong>en</strong> n uitgang<strong>en</strong> voor n ff’s : We kunn<strong>en</strong> de<br />

waarde van elke ff uitlez<strong>en</strong>, <strong>en</strong> we kunn<strong>en</strong> slechts 1 bit data tegelijk sett<strong>en</strong>. Dit is wat we net<br />

beschrev<strong>en</strong> hebb<strong>en</strong><br />

Parallel Parallel-In/Serial<br />

Parallel<br />

In/Serial In/Serial-Out<br />

In/Serial Out schuifregister : we kunn<strong>en</strong> ook voor<br />

n ff’s n ingang<strong>en</strong> voorzi<strong>en</strong> <strong>en</strong> slechts 1 uitgang (voor de laatse<br />

ff). Met de ingang voor de selectors SH of LD kunn<strong>en</strong> we dan<br />

kiez<strong>en</strong> tuss<strong>en</strong> 2 manier<strong>en</strong> om het register te gebruik<strong>en</strong> :<br />

ofwel kunn<strong>en</strong> we voor elke ff nieuwe data inlez<strong>en</strong> via<br />

de n ingang<strong>en</strong><br />

ofwel gebruik<strong>en</strong> we het register als schuifrgister<br />

waarbij we telk<strong>en</strong>s van de shift-ingang telk<strong>en</strong>s e<strong>en</strong> waarde in lez<strong>en</strong> op de klok <strong>en</strong> de andere<br />

telk<strong>en</strong>s één ff opschuiv<strong>en</strong>.<br />

We kunn<strong>en</strong> in beide gevall<strong>en</strong> slechts de data van de laatste ff uitlez<strong>en</strong>. In beide gevall<strong>en</strong> kunn<strong>en</strong><br />

we de klok nog door e<strong>en</strong> AND stur<strong>en</strong> om te kiez<strong>en</strong> of we al dan niet schakel<strong>en</strong><br />

Parallel Parallel-In/ Parallel<br />

In/ In/Parallel In/ Parallel Parallel-Out<br />

Parallel Out of Serial Serial-In/Serial<br />

Serial<br />

In/Serial In/Serial-Out<br />

In/Serial Out Out : schuifregisters zijn e<strong>en</strong> combinatie van de 2


3) ) Telle Tellers Telle rs<br />

Synchrone Synchrone tellers<br />

tellers<br />

E<strong>en</strong> teller heeft verschill<strong>en</strong>de verschill<strong>en</strong>de uitgang<strong>en</strong> die sam<strong>en</strong><br />

binair binair e<strong>en</strong> e<strong>en</strong> getal getal voorstell<strong>en</strong>. De teller telt bij dit getal<br />

telk<strong>en</strong>s 1 op op elke klokflank als zijn ingang EE<br />

E<br />

(<strong>en</strong>able)<br />

1 is. Wanneer E 0 is gebeurt er niets. De teller heeft<br />

ook e<strong>en</strong> Clr lr (clear) ingang ingang, ingang<br />

die de waarde van de teller<br />

terug op nul zet zet. zet<br />

Synchrone Synchrone teller teller betek<strong>en</strong>d dat alle ff’s<br />

aan aan éénzelfde éénzelfde éénzelfde kolksignaal kolksignaal hang<strong>en</strong>. In deze tellers<br />

bestaat de kans voor glitches glitches. glitches<br />

We kunn<strong>en</strong> ook e<strong>en</strong> ingang ingang D (direction direction direction) direction toevoeg<strong>en</strong> die zorgt dat we voor D=0 telk<strong>en</strong>s 1<br />

optell<strong>en</strong> optell<strong>en</strong> <strong>en</strong> voor D=1 telk<strong>en</strong>s 1 aftrekk<strong>en</strong> aftrekk<strong>en</strong>. aftrekk<strong>en</strong><br />

Dit noemt met dan e<strong>en</strong> bidirectionele teller. We<br />

moet<strong>en</strong> dan de HA (half-adders) vervang<strong>en</strong> door HAS (half-adder-substractor).<br />

Werking Werking Werking HAS HAS :<br />

Ingang<strong>en</strong> :<br />

- Dir is de richting richting van tell<strong>en</strong> : optell<strong>en</strong> 0 <strong>en</strong> aftrekk<strong>en</strong> 1<br />

- Ci is de telEnable waarbij we dus moet<strong>en</strong> tell<strong>en</strong> wanneer ci=1<br />

- Qi is de huidige huidige waarde van deze teller (onthoud<strong>en</strong> door ff)<br />

- Di is de volg<strong>en</strong>de volg<strong>en</strong>de waarde (na het tell<strong>en</strong>) voor deze ff<br />

- Ci+1 i+1 is de overdracht naar de volg<strong>en</strong>de teller <strong>en</strong> dus mete<strong>en</strong> de<br />

telEnable van de volg<strong>en</strong>de (de volg<strong>en</strong>de moet tell<strong>en</strong> wanneer deze<br />

overdracht heeft).<br />

Werking<br />

- Bit i telt (wisselt) als ci = = 1 1 ⇒ dan wordt Di = Qi XOR ci. (was<br />

de waarde van de teller al 1 dan wordt hij 0, anders wordt het 1)<br />

- Bit i+1 telt als we op deze teller overdracht overdracht overdracht hebb<strong>en</strong> of als we bij<br />

aftrekk<strong>en</strong> te weinig weinig hebb<strong>en</strong> : dan moet ci+1 = 1 :<br />

voor Dir=0 (optell<strong>en</strong>) moet ci+1=1 als bit i 1→0 dus ci+1 = ci AND Qi<br />

voor Dir=1 (aftrekk<strong>en</strong>) moet ci+1=1 als bit i 0→1 dus ci+1 = ci AND Qi<br />

We kunn<strong>en</strong> ook voor elke ff e<strong>en</strong> e<strong>en</strong> ingang voorzi<strong>en</strong> <strong>en</strong> e<strong>en</strong> extra ingang ingang LLD<br />

L (load load load) load waarmee we<br />

als LD=1 =1 =1 stopp<strong>en</strong> stopp<strong>en</strong> stopp<strong>en</strong> met met optell<strong>en</strong> optell<strong>en</strong> <strong>en</strong> gewoon de ingang<strong>en</strong> in in de de ff’s lad<strong>en</strong> lad<strong>en</strong>. lad<strong>en</strong> We voer<strong>en</strong> dan selectors in<br />

om te selecter<strong>en</strong> tuss<strong>en</strong> de ingang<strong>en</strong> <strong>en</strong> de teller.


BCD teller is e<strong>en</strong> teller die binair binair modulo modulo 10 10 telt. We tell<strong>en</strong> dus 0, 1, 2, 3, 4,<br />

5, 6, 7, 8, 9, 0, 1, … We kunn<strong>en</strong> dit implem<strong>en</strong>ter<strong>en</strong> met e<strong>en</strong> gewone 4-bit bit bit teller<br />

die gereset wordt op de volg<strong>en</strong>de klok wanneer zijn teller op 9 staat. Dit do<strong>en</strong><br />

we met e<strong>en</strong> AND poort die 1 geeft wanneer de teller teller 1001 heeft heeft. heeft<br />

We zorg<strong>en</strong> op<br />

alle alle ingang<strong>en</strong> ingang<strong>en</strong> dan voor 0 <strong>en</strong> de AND hang<strong>en</strong> we op de LD zodat er 0 in de ff’s ff’s<br />

gelad<strong>en</strong> gelad<strong>en</strong> gelad<strong>en</strong> wordt.<br />

We kunn<strong>en</strong> ook <strong>en</strong> BCD opteller opteller-aftrekker<br />

opteller<br />

aftrekker mak<strong>en</strong> die reset naar 9<br />

wanneer we 0 hebb<strong>en</strong> <strong>en</strong> naar 0 als we 9 hebb<strong>en</strong>. Hiervoor voorzi<strong>en</strong><br />

we e<strong>en</strong> selector op de ingang<strong>en</strong> van de teller die selecteert tuss<strong>en</strong> het<br />

lad<strong>en</strong> van 0 <strong>en</strong> 9. We hebb<strong>en</strong> dan ook 2 AND’s nodig <strong>en</strong> e<strong>en</strong> OR om te<br />

kijk<strong>en</strong> of het 0 of 9 is e<strong>en</strong> e<strong>en</strong> aftakking van de richting (voor 9 <strong>en</strong><br />

optell<strong>en</strong> wordt 0 <strong>en</strong> voor 0 <strong>en</strong> aftrekk<strong>en</strong> wordt 9).<br />

As Asynchrone As ynchrone tellers tellers<br />

E<strong>en</strong> asynchrone opteller is e<strong>en</strong> teller waarbij<br />

niet niet elke elke ff ff op de klok zit aangeslot<strong>en</strong>. We<br />

zett<strong>en</strong> de klok <strong>en</strong>kel op op de de eerst ff ff <strong>en</strong> verbind<strong>en</strong><br />

telk<strong>en</strong>s de inverse uitg uitgang uitg<br />

van e<strong>en</strong> ff met de<br />

klokingang klokingang van de volg<strong>en</strong>de ff. Hierdoor zal<br />

elke volg<strong>en</strong>de ff schakel<strong>en</strong> wanneer de vorige<br />

van van 1 1 naar naar 0 0 overgaat overgaat (klokflank). Dit is e<strong>en</strong><br />

perfect perfect systeem systeem om binair binair te schakel<strong>en</strong>. Telk<strong>en</strong>s<br />

we overgaan van 1 naar 0 hebb<strong>en</strong> we<br />

overdracht overdracht overdracht naar naar de de volg<strong>en</strong>de volg<strong>en</strong>de ff ff, ff ff die dan waarde<br />

1 krijgt. Wanneer er nog e<strong>en</strong>s overdracht<br />

plaatsvindt wordt de volg<strong>en</strong>de ff terug 0 <strong>en</strong><br />

wordt die daarop 1, <strong>en</strong>z. We gebruik<strong>en</strong> hiervoor<br />

T T ff’s ff’s. ff’s Deze schakel<strong>en</strong> om op e<strong>en</strong> stijg<strong>en</strong>de flank<br />

van de klokingang.


4) ) Geheug<strong>en</strong> Geheug<strong>en</strong> : : registerbank registerbank <strong>en</strong> <strong>en</strong> RAM<br />

RAM<br />

E<strong>en</strong> registerbank is e<strong>en</strong> geheug<strong>en</strong>elem<strong>en</strong>t dat e<strong>en</strong> bepaald aantal bits kan opslag<strong>en</strong>. We kunn<strong>en</strong> het<br />

beschouw<strong>en</strong> als e<strong>en</strong> verzameling van van 2 n registers registers die elk m bits kunn<strong>en</strong> opslaan. De registerbank kan<br />

telk<strong>en</strong>s de m bits voor 1 register tegelijk inlez<strong>en</strong> op de m ingang<strong>en</strong> <strong>en</strong> de m bits van 1 register<br />

weergev<strong>en</strong> op de m uitgang<strong>en</strong> uitgang<strong>en</strong>. uitgang<strong>en</strong><br />

De bank bevat daarvoor 2 decorders (multiplex<strong>en</strong>) om, aangestuurd<br />

met n adresingang<strong>en</strong><br />

adresingang<strong>en</strong>, adresingang<strong>en</strong><br />

te selecter<strong>en</strong> in welk register de m ingangswaard<strong>en</strong> moet<strong>en</strong> geschrev<strong>en</strong> word<strong>en</strong><br />

of de m uitgang<strong>en</strong> uitgelez<strong>en</strong> moet<strong>en</strong> word<strong>en</strong>.<br />

Ingang<strong>en</strong> Ingang<strong>en</strong> Ingang<strong>en</strong> Ingang<strong>en</strong> <strong>en</strong> <strong>en</strong> <strong>en</strong> <strong>en</strong> Uitgang<strong>en</strong> Uitgang<strong>en</strong> Uitgang<strong>en</strong> Uitgang<strong>en</strong> : : : :<br />

m in ingang<strong>en</strong> in<br />

gang<strong>en</strong> Din in om m bits te<br />

schrijv<strong>en</strong><br />

n adresingang<strong>en</strong> WA (write<br />

adress) voor het schrijv<strong>en</strong> die bepal<strong>en</strong><br />

in welk register de m ingang<strong>en</strong><br />

geschrev<strong>en</strong> moet<strong>en</strong> word<strong>en</strong><br />

1 1 WE ingang ingang (write <strong>en</strong>able) die 1<br />

wordt wanneer er geschrev<strong>en</strong> moet<br />

word<strong>en</strong> (dus wanneer ingang<strong>en</strong> <strong>en</strong><br />

adress<strong>en</strong> klaar zijn). Wanneer deze 0<br />

is wordt er niets geschrev<strong>en</strong><br />

m uitgang<strong>en</strong> uitgang<strong>en</strong> Dout out om m bits uit te<br />

lez<strong>en</strong><br />

n adresingang<strong>en</strong> RA (read adress)<br />

voor het lez<strong>en</strong> die bepal<strong>en</strong> uit welk<br />

register de m uitgang<strong>en</strong> gehaalt moet<strong>en</strong> word<strong>en</strong><br />

1 RE RE ingang (read <strong>en</strong>able) die 1 wordt wanneer er gelez<strong>en</strong> kan kan word<strong>en</strong> (dus wanneer de<br />

adress<strong>en</strong> klaar zijn). Wanneer deze 0 is zijn de uitgang<strong>en</strong> hoog-impedant.<br />

1 klok die gebruikt wordt om de ff’s van de registers te schakel<strong>en</strong> (waard<strong>en</strong> word<strong>en</strong><br />

getransporteerd <strong>en</strong> veranderd op de klok)<br />

Het voordeel voordeel van de registerbank is dat er minder drad<strong>en</strong> aan verbond<strong>en</strong> zijn dan aan 2n apparte<br />

registers, <strong>en</strong> dat er maar m ff’s tegelijk tegelijk gebruikt word<strong>en</strong> dus dat we de bank veel goedkoper (met<br />

minder transistors) kunn<strong>en</strong> mak<strong>en</strong>. We kunn<strong>en</strong> wel slechts aan één van de 2 n registers registers registers tegelijk tegelijk tegelijk aan.<br />

Registerbank<strong>en</strong> zijn e<strong>en</strong> snel snelle snel<br />

le le <strong>en</strong> <strong>en</strong> du dure du re manier om geheug<strong>en</strong> te mak<strong>en</strong>, <strong>en</strong> dus <strong>en</strong>kel gelimiteerd<br />

toegepast in microprocessor<strong>en</strong> <strong>en</strong> waar er snel <strong>en</strong> weinig geheug<strong>en</strong> van do<strong>en</strong> is.<br />

Op de voorstelling zi<strong>en</strong> we e<strong>en</strong> 4x3 bit rregisterbank<br />

r<br />

egisterbank egisterbank. egisterbank Hij heeft dus 4 registers van elk 3 bits bits. bits<br />

Er zijn<br />

2 2 keer keer 3 3 ingang<strong>en</strong> ingang<strong>en</strong> <strong>en</strong> 2 multiplex<strong>en</strong><br />

multiplex<strong>en</strong> met elk 2 ingang<strong>en</strong> om elke 3 ingang<strong>en</strong> naar de juiste 3 RFC’s te<br />

br<strong>en</strong>g<strong>en</strong>. Analoog voor de uitgang. Het geheel bevat ook nog e<strong>en</strong> klok, maar die is voor de<br />

overzichtelijkheid weggelat<strong>en</strong>.


E<strong>en</strong> registerbank bestaat dus uit 2n keer m bits, dus<br />

uit net zoveel ff’s. Deze ff’s zitt<strong>en</strong> in de<br />

basisbouwblokk<strong>en</strong> van de registerbank, namelijk de<br />

RFC’s RFC’s (register file cell). Elke registerbank bestaat<br />

dus uit 2nx m RFC’s, e<strong>en</strong> in inputdecorder<br />

in<br />

putdecorder <strong>en</strong> e<strong>en</strong><br />

outputdecorder<br />

outputdecorder. outputdecorder We zi<strong>en</strong> nu dat de meeste RFC’s 2<br />

ingang<strong>en</strong> ingang<strong>en</strong> <strong>en</strong> <strong>en</strong> altijd altijd 2 2 uitgang<strong>en</strong> uitgang<strong>en</strong> hebb<strong>en</strong>. De 2<br />

uitgang<strong>en</strong> uitgang<strong>en</strong> zijn gewoon beide dezelfde uitgang van<br />

de ff <strong>en</strong> kunn<strong>en</strong> met e<strong>en</strong> RE afzonderlijk hoog hoog-impedant<br />

hoog<br />

impedant gemaakt word<strong>en</strong>. (het aantal RE’s is gelijk<br />

aan het aantal uitgang<strong>en</strong> zodat ze elk appart aan of uit gezet kunn<strong>en</strong> word<strong>en</strong>). De 2 ingang<strong>en</strong> word<strong>en</strong><br />

sam<strong>en</strong> met de uitgang naar e<strong>en</strong> selector gebracht die dan selecteert welke van de 3 opnieuw moet<br />

word<strong>en</strong> opgeslag<strong>en</strong>. (deze selectie gebeurt met de WE, die telk<strong>en</strong>s één van deze mogelijke ingang<strong>en</strong><br />

selecteert). Deze 2voud 2voud van in <strong>en</strong> uit volgt uit de manier waarop bewerking<strong>en</strong><br />

bewerking<strong>en</strong> gebeur<strong>en</strong> : wanneer<br />

we met de m bits van één register m bewerkin<strong>en</strong> will<strong>en</strong> uitvoer<strong>en</strong>, hebb<strong>en</strong> we 2 keer m operandi<br />

nodig (e<strong>en</strong> bewerking combineert 2 getall<strong>en</strong> tot 1 nieuw getal). Vandaar de 2 uitgang<strong>en</strong>. We kunn<strong>en</strong><br />

deze resultat<strong>en</strong> in dezelfde klokcyclus nog terug opslag<strong>en</strong> in dezelfde ff’s. We moet<strong>en</strong> daarna wel in<br />

staat zijn om deze m resultat<strong>en</strong> te combiner<strong>en</strong> met m nieuwe bits. Daarom moet e<strong>en</strong> RFC in staat zijn<br />

te selecter<strong>en</strong> tuss<strong>en</strong> 2 ingang<strong>en</strong>, namelijk tuss<strong>en</strong> nieuwe input of resultat<strong>en</strong> van e<strong>en</strong> bewerking.<br />

RAM RAM (random acces memory) is e<strong>en</strong> registerbank<br />

registerbank waar niet niet-sequëntiele niet<br />

sequëntiele geheug<strong>en</strong>toegang mogelijk is.<br />

Het is e<strong>en</strong> wijzigbaar wijzigbaar geheug<strong>en</strong> dat meestal vluchtig gebruikt wordt (veel schrijv<strong>en</strong> <strong>en</strong> herschrijv<strong>en</strong> :<br />

dus niet voor data-opslag (ROM)).<br />

Verschill<strong>en</strong> met de registerbank :<br />

slechts m in/uitgang<strong>en</strong> in plaats van 2m : we gebruik<strong>en</strong> deze om om de de beurt beurt als ingang of als<br />

uitgang, afhankelijk afhankelijk van van de de de RWS RWS (read-write-select). Wanneer RWS 1 is wordt er geschrev<strong>en</strong> op<br />

de ingang<strong>en</strong>, bij 0 gelez<strong>en</strong>. Er is ook e<strong>en</strong> ingang CS (chip select) waarmee de RAM geactiveerd<br />

wordt of gewoon passief blijft. Gebruikt wanneer we meerdere stukk<strong>en</strong> RAM combiner<strong>en</strong> tot één<br />

grote RAM.<br />

- we lez<strong>en</strong> (RE) dus als CS • R/W* (chip staat aan <strong>en</strong> we lez<strong>en</strong> wel of schrijv<strong>en</strong> niet)<br />

- we schrijv<strong>en</strong> (WE) dus als CS • (R/W*)’ (chip staat aan <strong>en</strong> we lez<strong>en</strong> niet of schrijv<strong>en</strong> wel)<br />

RAM makkelijker groter te mak<strong>en</strong> dan registerbank<strong>en</strong> :<br />

- RAM heeft compactere RFC’s RFC’s doordat het minder poort<strong>en</strong> heeft door dat er slecht<br />

dataverkeer in 1 richting tegelijkertijd toegestaan is (in of uit) <strong>en</strong> er dus minder adreslijn<strong>en</strong> <strong>en</strong><br />

minder in-uit lijn<strong>en</strong> zijn. Statische RAM heeft ongeveer 4 à 6 transistors nodig per RFC,<br />

Dynamische RAM slechts één transistor (ook wel minder goed).<br />

- RAM is trager doordat schrijv<strong>en</strong> <strong>en</strong> lez<strong>en</strong> niet tegelijk tegelijk gaat <strong>en</strong> RAM opgebouwd opgebouwd opgebouwd is uit kleine kleine<br />

del<strong>en</strong> del<strong>en</strong> die niet tegelijk gebruikt kunn<strong>en</strong> word<strong>en</strong>. Niet bruikbaar dus wanneer er kleine<br />

tijdsverschill<strong>en</strong> zijn tuss<strong>en</strong> tuss<strong>en</strong>resultat<strong>en</strong> van bewerking<strong>en</strong>.


5) ) LIFO LIFO LIFO : : stapelgeheug<strong>en</strong><br />

stapelgeheug<strong>en</strong><br />

E<strong>en</strong> LIFO (last in first out) is e<strong>en</strong> geheug<strong>en</strong> dat e<strong>en</strong> aantal bits kan<br />

opslag<strong>en</strong> opslag<strong>en</strong> <strong>en</strong> weergev<strong>en</strong> op e<strong>en</strong> speciale manier : Met de ingang Push<br />

Push<br />

kunn<strong>en</strong> we telk<strong>en</strong>s 1 bit toevoeg<strong>en</strong> : deze bit komt dan telk<strong>en</strong>s<br />

bov<strong>en</strong>aan <strong>en</strong> alle vorige bits schuiv<strong>en</strong> dan telk<strong>en</strong>s één plaats plaats op naar<br />

onder (soort schuifregister). We hebb<strong>en</strong> nu ook e<strong>en</strong> ingang ingang Pop Pop die de<br />

laatst laatst toegevoegde toegevoegde toegevoegde bit bit er er terug terug uithaalt uithaalt : deze wordt dan weergegev<strong>en</strong><br />

op de uitgang <strong>en</strong> al de andere bits schuive schuiv<strong>en</strong> schuive<br />

n één plaats op naar bov<strong>en</strong> bov<strong>en</strong>. bov<strong>en</strong><br />

Dit systeem is analoog geïllustreerd met getall<strong>en</strong> in de afbeelding.<br />

De concrete concrete realisatie realisatie van e<strong>en</strong> LIFO met diepte 8 :<br />

<strong>en</strong>able ingang die e<strong>en</strong> actie op de volg<strong>en</strong>de klokflank indiceert wanneer<br />

hij 1 is.<br />

wanneer <strong>en</strong>able 1 is hangt de actie van de LIFO af van de pop/push*<br />

ingang ingang. ingang Wanneer deze 0 is zull<strong>en</strong> we Popp<strong>en</strong>, bij 1 Push<strong>en</strong>.<br />

voor e<strong>en</strong> bidirectionele LIFO zull<strong>en</strong> we 3 ingang<strong>en</strong> voorzi<strong>en</strong> om ofwel links<br />

e<strong>en</strong> e<strong>en</strong> waarde waarde te te kunn<strong>en</strong> kunn<strong>en</strong> push<strong>en</strong>/popp<strong>en</strong> push<strong>en</strong>/popp<strong>en</strong> push<strong>en</strong>/popp<strong>en</strong> ofwel ofwel ofwel rechts rechts. rechts rechts De eerst ingang is de de LL/R*<br />

L<br />

/R*<br />

die kiest tuss<strong>en</strong> rechts (0) <strong>en</strong> links (1), de 2 andere ingang<strong>en</strong> zijn de linkse of<br />

rechtse waarde die gepusht/gepopt moet word<strong>en</strong>.<br />

8 uitgang<strong>en</strong> uitgang<strong>en</strong> die de waarde van de 8 geheug<strong>en</strong>plaats<strong>en</strong> weergev<strong>en</strong>.<br />

2 2 uitgang<strong>en</strong> uitgang<strong>en</strong> die weergev<strong>en</strong> of de LIFO vol is (full=1) of leeg is (empty=1)<br />

Implem<strong>en</strong>tatie Implem<strong>en</strong>tatie van e<strong>en</strong> LIFO k keer diepte 88<br />

8<br />

: k <strong>en</strong>kelvoudige LIFO’s met diepte 8<br />

<strong>en</strong> e<strong>en</strong> teller modulo 8 om de empty <strong>en</strong> <strong>en</strong> de full weer te gev<strong>en</strong>.


We kunn<strong>en</strong> e<strong>en</strong> LIFO ook implem<strong>en</strong>ter<strong>en</strong><br />

zonder zonder schuifregister schuifregister (zonder effectief bits te<br />

verschuiv<strong>en</strong>) maar door gewoon met met schijf schijf- schijf<br />

<strong>en</strong> <strong>en</strong> leesadress<strong>en</strong> leesadress<strong>en</strong> te te werk<strong>en</strong> werk<strong>en</strong>. werk<strong>en</strong> We lat<strong>en</strong> elke<br />

waarde waarde gewoon gewoon staan staan, staan maar houd<strong>en</strong> bij waar<br />

we de volg<strong>en</strong>de waarde moet<strong>en</strong> push<strong>en</strong> of<br />

waar we de vorige waarde moet<strong>en</strong> hal<strong>en</strong> om<br />

te popp<strong>en</strong>. Telk<strong>en</strong>s we push<strong>en</strong> schrijv<strong>en</strong> we<br />

de waarde op de plaats aangeduid in de<br />

schrijfplaats <strong>en</strong> tell<strong>en</strong> we bij schrijf <strong>en</strong> lees 1<br />

op. Telk<strong>en</strong>s we popp<strong>en</strong> hal<strong>en</strong> we eerst de<br />

waarde die we moet<strong>en</strong> popp<strong>en</strong> op <strong>en</strong> trekk<strong>en</strong><br />

dan 1 af van lees- <strong>en</strong> schrijfadres. We<br />

implem<strong>en</strong>ter<strong>en</strong> implem<strong>en</strong>ter<strong>en</strong> dit met 2 tellers die schrijf<strong>en</strong><br />

leesaders bijhoud<strong>en</strong> <strong>en</strong> e<strong>en</strong> RAMgeheug<strong>en</strong><br />

om de waard<strong>en</strong> in te stek<strong>en</strong>.<br />

6) ) FIFO FIFO : : stapelgeheug<strong>en</strong><br />

stapelgeheug<strong>en</strong><br />

De FIFO (first in first out) werkt zeer analoog aan de LIFO, behalve dat we<br />

hier de oudste oudste waarde popp<strong>en</strong> popp<strong>en</strong> in plaats van de nieuwste. We hal<strong>en</strong> dus<br />

telk<strong>en</strong>s bij het popp<strong>en</strong> de waarde waarde op die al het langst in de FIFO zit.<br />

De implem<strong>en</strong>tatie implem<strong>en</strong>tatie is analoog, met dat verschil dat we hier telk<strong>en</strong>s moet<strong>en</strong><br />

bijhoud<strong>en</strong> bijhoud<strong>en</strong> met met e<strong>en</strong> e<strong>en</strong> teller teller wat onze eerste ingelez<strong>en</strong> ingelez<strong>en</strong> waarde was zodat we<br />

die terugvind<strong>en</strong> om te popp<strong>en</strong>. We moet<strong>en</strong> dus tell<strong>en</strong> hoeveel waard<strong>en</strong> er<br />

al in onze FIFO zitt<strong>en</strong> (bv. 5 waard<strong>en</strong>, dan moet<strong>en</strong> we de 5de (onderste)<br />

eruit hal<strong>en</strong>). Met e<strong>en</strong> mux <strong>en</strong> de teller als sturing selecter<strong>en</strong> we de juiste<br />

uitgang<strong>en</strong>.<br />

Ook hier geldt het trucje met het het verander<strong>en</strong> van de lees lees- lees <strong>en</strong> schrijfadre schrijfadress<strong>en</strong><br />

schrijfadre<br />

ss<strong>en</strong> ss<strong>en</strong>, ss<strong>en</strong> hetge<strong>en</strong> de<br />

implem<strong>en</strong>tatie e<strong>en</strong> pak gemakkelijker maakt.


In de werking van de FIFO is het soms<br />

belangrijk te wet<strong>en</strong> wanneer de LIFO<br />

helemaal helemaal vol vol vol is is of of helemaal helemaal leeg leeg is.<br />

Hiervoor wijzig<strong>en</strong> we de implem<strong>en</strong>tatie als<br />

volgt : we gebruik<strong>en</strong> (n+1) (n+1)-bit (n+1)<br />

bit tellers tellers voor<br />

lees <strong>en</strong> schrijfadres bij e<strong>en</strong> diepte van 2^n.<br />

We gebruik<strong>en</strong> dan de n minst beduid<strong>en</strong>de<br />

bits bits als als adress<strong>en</strong> adress<strong>en</strong> voor de RAM. Wanneer de<br />

n n minst minst beduid<strong>en</strong>de beduid<strong>en</strong>de bits bits van lees- <strong>en</strong><br />

schrijfadres gelijk zijn is de FIFO ofwel ofwel ofwel vol<br />

vol<br />

ofwel ofwel leeg. leeg. We kijk<strong>en</strong> dan naar de meest<br />

bedu beduid<strong>en</strong>de bedu id<strong>en</strong>de bits van de 2 tellers : zijn deze<br />

gelijk gelijk dan dan is is is de de FIFO FIFO vol vol, vol zijn ze<br />

verschill<strong>en</strong>d verschill<strong>en</strong>d is is hij hij leeg leeg. leeg Analoge oplossing<br />

voor de LIFO.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!