Download as pdf or txt
Download as pdf or txt
You are on page 1of 296

Ontwerp van digitale systemen

in VHDL

Luc Friant

Inhoud - 1 -
Inhoud - 2 -
Inhoud
Voorwoord
1. Hoofdstuk 1 Algemene structuur in VHDL
2. Hoofdstuk 2 De beschrijving van sequentiële logica in VHDL
3. Hoofdstuk 3 Reactie timercircuit
4. Hoofdstuk 4 Seriële Communicatie
5. Hoofdstuk 5 VGA interface met UP2 Education Kit
6. Hoofdstuk 6 Elektronische tellers
7. Hoofdstuk 7 S/PDIF-tester met MachXO
8. Hoofdstuk 8 Technologie van programmeerbare logica
9. Hoofdstuk 9 A/D- en D/A omvormers
10. Hoofdstuk 10 CPLD interface voor een ADC
11. Hoofdstuk 11 Een Matrix Keypad Encoder Systeem
12. Hoofdstuk 12 Geheugens
13. Hoofdstuk 13 Toepassingen in de markt
14. Appendix A Korte beschrijving van VHDL
15. Appendix B VHDL referentie
16. Appendix C Pinning van het ISP Starter Kit
17. Appendix D Parallel-JTAG-interface
18. Referenties

Inhoud - 3 -
Voorwoord

Dit handboek is bedoeld voor iedereen die wenst kennis te maken met
het ontwerpen van digitale systemen met behulp van VHDL.
Verder vind je hier heel wat uitgewerkte voorbeeldschakeling die be-
schreven zijn in VHDL. Na een grondige omschrijving van het ontwerp
volgt een analyse en vereenvoudiging. Daarna werden de ontwerpen
uitgetest en gesimuleerd met ontwikkelsoftware van Altera en/of Lattice.
De ontwerpen werden op ontwikkelbordjes van deze fabrikanten uitge-
test.

Het boek is bedoeld voor studenten hoger onderwijs.


Het is handig voor de lezer wanneer hij de basis gelegd heeft in digitale
systemen wat betreft combinatorische en sequentiële schakelingen.
Het is de bedoeling dat zowel de elektronicus als de ICT-georiënteerde
technicus de basis kan leggen in het ontwerpen van digitale systemen
met VHDL. Een aanrader is het handboek digitale systemen van Lies-
beth Kenens en Kris de Backer.

Het handboek wordt op het Internet vervolledigd met heel wat extra in-
formatie. Zo vind je hier een korte samenvatting van de verschillende
hoofdstukken, aangevuld met labproeven. De ontwikkelsoftware is voor
studenten vrij beschikbaar bij fabrikanten zoals Lattice en Altera.

Op de CD-ROM bij dit boek vindt u de meeste ontwerpvoorbeelden in


VHDL.
http://docweb.khk.be

Uiteraard blijft het mogelijk dat u als lezer nog op- en aanmerkingen hebt
of met de auteur van gedachten wilt wisselen. U bent daarbij van harte
toe uitgenodigd.

Zomer 2006
Luc Friant

Inhoud - 4 -
1. Hoofdstuk 1 Algemene structuur in VHDL .................................. 2
1.1 Inleiding. ............................................................................ 2
1.2 Beschrijving van combinatorische logica............................ 2
1.3 Beschrijving van een eenvoudige combinatorische schakeling. .... 3
1.4 Entity.................................................................................. 4
1.5 std_logic............................................................................. 4
1.6 Mode.................................................................................. 5
1.7 Type .................................................................................. 5
1.8 Architectuurblok. ................................................................ 6
1.9 Beschrijving van een 2 naar 4 decoder. .............................. 7
1.10 Gestructureerde beschrijving van een ontwerp. .................. 9
1.11 Beschrijving van een 4 bit fulladder .................................. 10
1.12 Hierarchy van het ontwerp................................................ 11
1.13 Packages. ........................................................................ 12
1.14 Syntax packages.............................................................. 12
1.15 Concatenatie operator...................................................... 13
1.16 Generate statement.......................................................... 15
1.17 Process statement. .......................................................... 16
1.18 IF THEN ELSE stuctuur.................................................... 16
1.19 CASE............................................................................... 18
1.20 WHEN ELSE.................................................................... 20
1.21 WITH SELECT................................................................. 21
1.22 Oefeningen. ..................................................................... 22

Hoofdstuk 1 Algemene structuur in VHDL - 1 -


1. Hoofdstuk 1
Algemene structuur in VHDL
1.1 Inleiding.
De standaard in de industrie voor de beschrijving van een digitale schakeling
is VHDL.
(VHSIC Hardware Description Language)
VHSIC Very high speed integrated circuit
Een elektronisch CAD pakket is in staat een VHDL beschrijving te aanvaar-
den en te produceren in het geval dat de gebruiker een schema zou ingege-
ven hebben. Dit brengt met zich mee dat VHDL ook een methode is om
ontwerpen van het ene CAD pakket naar het andere over te brengen.
VHDL is niet alleen een beschrijving van een systeem maar bevat ineens
ook de oplossing. Deze oplossing evenwel is op een zodanig hoge manier
beschreven dat de computer zelf nog heel wat werk heeft om daar een wer-
kende schakeling voor samen te stellen. VHDL beschrijvingen kunnen ook
steeds gesimuleerd worden, zodat men op voorhand een vrij goede controle
heeft op het ganse ontwerp.
Men zal VHDL gebruiken zowel voor het ontwerp van een PAL, CPLD,
FPGA als het ontwerp van semi custom IC’s. Daarom kan men zeggen dat
VHDL een silicon compiler is.
Het is de bedoeling om zelf de meeste VHDL beschrijvingen te lezen en te
begrijpen en eventueel relatief kleine problemen in VHDL op te lossen.
Tevens heeft de lezer al de nodige basiskennis verworven van de klassieke
digitale systemen.

1.2 Beschrijving van combinatorische logica.


Behandelende begrippen
Entity: Beschrijving van alle in- en uitgangen
Architecture: structuur dat de relatie geeft tussen de in- en uitgangen, sig-
nalen en de variabelen gebruikt in het ontwerp
Port: De naam van de in- of uitgang van in entity
Mode (of a port): geeft aan of het een in- of uitgang is
Signal: Interne verbinding in een ontwerp
Variabele: Een stuk intern geheugen
Type: geeft aan welke waardes er kunnen gebruikt worden voor een poort,
signal of variabele
Library: een verzameling van reeds eerder gecompileerde VHDL bestanden
Package: Een groep van VHDL bestanden dat kan gebruikt worden in een
ontwerp
IEEE Standard 1164: De standaard voor de verschillende VHDL types,
bewerkingen, inclusief de STD_LOGIC and STD_LOGIC_VECTOR types.
Concurrent: gezamenlijk, op hetzelfde moment
Concurrent signal assignment: Een relatie tussen alle in- en uitgangen
waarop alle uitgangen gezamelijk reageren idien er een verandering optreed
op een ingang of een signaal.

Hoofdstuk 1 Algemene structuur in VHDL - 2 -


Selected signal assignment statement: Een gezamelijke toekenning van
een signaal waarvan de waarde van het signal dat toegekend wordt afhan-
kelijk is van de waarde van een ander signaal of variabele.
Comment: commentaar
Vector: Een groep van digitale signalen of variabelen gewoonlijk genum-
merd van hoog naar laag en kan aangesproken worden als enkele multibit
variabele.
Bit string literal: Een groep van bits, of een vector waar een waarde wordt
aan toegekend BV: (“001011”).
Concatenatie: Toevoegen van een signaal aan een bus (vector)

1.3 Beschrijving van een eenvoudige combinatorische schakeling.

door
1 & B1

ignition
buzzer
1

& B2
sbelt
1

Figuur 1 Logische schema van buzzer

Merk op dat de beschrijving in VHDL geen sequentiële beschrijving is maar


een beschrijving is van de onderlinge verbindingen tussen de in- en uitgan-
gen. (beschrijving van de hardware)
Het is geen taal waar er een programma wordt uitgevoerd instructie per in-
structie, zoals bij een microcontroller in assembler.

Hoofdstuk 1 Algemene structuur in VHDL - 3 -


Het vereenvoudigen van de combinatorische vergelijking hoeft niet meer te
gebeuren met Karnaugkaarten maar gebeurt door de compiler zelf.

1.4 Entity
Na het oproepen van libraries staat in de entity de beschrijving van de in- en
uitgangen. De naam van de entity is willekeurig maar gezien het ontwerp
zinvol gekozen. De naam van het bestand is hetzelfde als de naam van de
entity. (buzzer.vhd)

1.5 std_logic
Alle in- en uitgangen van het type std_logic
Het STD_Logic (standard logic) type, ook genoemd IEEE Std Multi-Valued
Logic, geeft een range van verschillende output waardes meer dan alleen
maar ‘0’ en ‘1’.
Elke poort, signaal, of variabele van het type STD_LOGIC of
STD_LOGIC_VECTOR kan onderstaande waarden bevatten.

‘U’, —— Uninitialized
‘X’, —— Forcing Unknown
‘0’, —— Forcing 0
‘1’, —— Forcing 1
‘Z’, —— High Impedance
‘W’, —— Weak Unknown
‘L’, —— Weak 0
‘H’, —— Weak 1
‘-’, —— Don’t care

De "dwingende" niveaus worden geacht om het equivalent van een output


aan te nemen.
De "zwakke" niveaus zijn gespecificeerd door een pull-up of pull-down weer-
stand.
De `Z ' wordt gebruikt als hoog impedante tristate buffer.
De meerderheid van toepassingen kan door ‘X ', ‘ 0 ', ‘1 ', en ‘Z ' waarden
worden behandeld.
Om STD_LOGIC in een VHDL- ontwerp te gebruiken, moet u de volgende
verwijzing gebruiken:
De bibliotheek VHDL roept IEEE en het pakket std_logic_1164 aan voor de
beschrijving van de entity.

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

Hoofdstuk 1 Algemene structuur in VHDL - 4 -


1.6 Mode
De verschillende modes van een poort zijn:
- in: voor een ingangssignaal
- out: voor een uitgangssignaal
- inout: voor een bidirectioneel signaal. Dit zijn signalen (pennen) die
zowel input- als outputpennen kunnen zijn. Een typisch voorbeeld is
een databus van een geheugencomponent.
- buffer: een signaal dat op één plaats in de VHDL beschrijving een
waarde krijgt, maar dat op (eventueel meerdere) plaats(en) in de-
zelfde beschrijving als input gebruikt wordt en dat ook output is voor
het volledige ontwerp.

1.7 Type
Het type van een poort, signaal, of variabele geeft aan welke waardes er
kunnen gebruikt worden. Bijvoorbeeld een signaal van het type bit kan al-
leen de waarde ‘0’ en ‘1’ toegekend krijgen.
Een signaal van het type integer kan om het even welke waarde zijn, de
waarde wordt gelimiteerd naar computersysteem en VHDL compiler.

Type Values How written


BIT ‘0’, ‘1’ Single quotes
STD_LOGIC ‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, Single quotes
(see Section 1.6.1) ‘L’, ‘H’, ‘-‘
INTEGER Integer values No quotes
BIT_VECTOR Multiple instances of ‘0’ and ‘1’ Double quotes (“00101”)
STD_LOGIC_VECTOR Multiple instances of ‘U’, ‘X’, Double quotes (“11ZZ00”)
‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-‘
_____________________________________________________________
Het type std_logic is een belangrijk type. Het is evenwel geen standaard
VHDL, maar een type dat door IEEE als standaard gedefinieerd is. De
meeste VHDL implementaties supporteren dan ook dit type, op voorwaarde
dat men op de eerste lijnen deze bibliotheek aanduidt door middel van vol-
gende bevelen.

Library ieee;
Use ieee.std_logic_1164.all;

Waarom wordt het type std_logic het meeste toegepast desondanks dat het
ontwerp alleen maar een ‘1’ en een ‘0’ gebruikt? Men gebruik dit type om-
wille van de compatibiliteit met andere bibliotheken, (Altera library lpm) daar
wordt dit type ook het meeste toegepast.

Nadat men de beschrijving heeft gegeven van de entity, geeft men de be-
schrijving van de functie van de schakeling in het architectuurblok.

Hoofdstuk 1 Algemene structuur in VHDL - 5 -


1.8 Architectuurblok.
Voorbeeld 1:
(buzzer.vhd)

Opmerkingen:
- Er zijn meerdere architecturen mogelijk voor één ontwerp. Vandaar
de naam van de architectuur.
- In het ontwerp buzzer kan men evenwel gebruik maken van de sig-
nalen: B1 & B2, echter deze zijn niet zichtbaar voor de buitenwereld.
- Alle statements zijn concurrent, dit wil zeggen dat ze in het digitaal
systeem gelijktijdig zullen uitgevoerd worden. Een rechtstreeks ge-
volg daarvan is dat de volgorde van de statements in het architec-
tuurblok geen rol speelt.
- Indien er haakjes geschreven worden, worden deze van links naar
rechts uitgevoerd.
- De operatoren and, or, nand, xor en not zijn standaard. Merk op dat
nand, nor en not niet associatief zijn:
a nand b nand c is niet gelijk aan (a nand b) nand c.
- Tekst die na - - staat is commentaar.

door
1 & B1

ignition
buzzer
1

& B2
sbelt
1

Figuur 2 Logische schema van buzzer

Hoofdstuk 1 Algemene structuur in VHDL - 6 -


1.9 Beschrijving van een 2 naar 4 decoder.

D1 D0

1
&
Y0

& Y1

&
Y2

& Y3

Figuur 3 2 naar 4 decoder


Voorbeeld 2: Met behulp van afzonderlijke variabelen
(decode1.vhd)

Voorbeeld 3: Met behulp van vectoren


(decode2.vhd)

Hoofdstuk 1 Algemene structuur in VHDL - 7 -


In voorbeeld 3 wordt de breedte van de in- en uitgangen beschreven met
een vectornotatie:
STD_LOGIC_VECTOR (3 downto 0);
Er bestaat ook de volgende mogelijkheden:
STD_LOGIC_VECTOR (0 to 3);
STD_LOGIC_VECTOR (1 to 4);
STD_LOGIC_VECTOR (4 downto 1);
Opgelet!
Probeer consequent te zijn in het gebruik van vectoren, en maak er geen
mengeling van wat dat leidt tot syntax fouten!

Voorbeeld 4: In- en uitgangen die als groep worden behandeld.


”geselecteerde signaal toekenning”
(decode2a.vhd)

Men maakt één uitgang hoog voor elke binaire combinatie van de ingangen
d0 en d1. Kies dan een signaal y dat de binaire waarde van de ingangen
aanneemt. De defaultwaarde is dat alle uitgangen laag zijn.
Bovenstaande beschrijving noemt men een geselecteerde signaal toeken-
ning.
Simulatie van een 2 naar 4 decoder

Figuur 4 Simulatie van een 2 naar 4 decoder

Hoofdstuk 1 Algemene structuur in VHDL - 8 -


1.10 Gestructureerde beschrijving van een ontwerp.
Met behulp van eenvoudige componenten is het mogelijk om in een ander
ontwerp deze component te gebruiken. Men bekomt alzo een gestructu-
reerde beschrijving.
Voorbeeld: ontwerp van een n bit fulladder
Door het ontwerp van een n bit fulladder te herleiden tot een 1 bit fulladder
bekomt met een gestructureerde beschrijving.
Vergelijkingen van een 1 bit fulladder:
sum = (A ⊕ B) ⊕ C
carry = AB + C(A ⊕ B)

Waarheidstabel
a b c carry sum
0 0 0 0 0
0 0 1 0 1
0 1 0 0 1
0 1 1 1 0
1 0 0 0 1
1 0 1 1 0
1 1 0 1 0
1 1 1 1 1

Beschrijving van een 1 bit fulladder:


(fulladder.vhd)

Figuur 5 Blokschema van entity FULLADDER

Hoofdstuk 1 Algemene structuur in VHDL - 9 -


Het is nu de bedoeling om bovenstaand ontwerp een 1 bit fulladder te ge-
bruiken als component in het ontwerp van een 4 bit fulladder.

Figuur 6 Schema van een 4 bit fulladder


1.11 Beschrijving van een 4 bit fulladder
(fourbitadd.vhd)

Merk op dat in het ontwerp de in- en uitgangen als een vector worden voor-
gesteld. Zorg ervoor dat bij het gebruik van vectoren daar waar mogelijk is
ze voor te stellen van hoog naar laag (downto).
Met het statement “component” wordt de 1 bit fulladder ingevoegd in het
ontwerp. Elke concretisering van een component vereist een component
concretisering statement.
Poorten worden expliciet toegekend met behulp van de => operator.
Poorten worden impliciet toegekend met behulp van de overeenkomstige
naam van de poort in de declaratie van de component zelf.

Hoofdstuk 1 Algemene structuur in VHDL - 10 -


Men gebruikt hiervoor het statement port map. In bovenstaand ontwerp
hebben we gekozen voor een impliciete toekenning van de poorten in het
ontwerp.

De declaratie van de component gebeurd zoals in onderstaande beschrijving.

In software ontwikkeltools is het mogelijk om de hiërarchie van het ontwerp


weer te geven.

1.12 Hiërarchie van het ontwerp.

Figuur 7 Hiërarchie van FOURBITADD

Blokschema van de 4 bit fulladder

Figuur 8 Blokschema van FOURBITADD


Simulatie van een 4 bit fulladder

Figuur 9 Simulatie van een 4 bit fulladder

Hoofdstuk 1 Algemene structuur in VHDL - 11 -


1.13 Packages.
Een package is een ongecompileerde verzameling van VHDL beschrijvingen
die kunnen gebruikt worden in verschillende entiteiten. (entitys)
De naam van een library moet reeds in het begin van een VHDL file voor de
beschrijving van de entiteit worden gedeclareerd.

We kunnen in het geval van het ontwerp van een 4 bit fulladder een package
aanmaken met een component 1 bit fulladder.

1.14 Syntax packages.


LIBRARY __library_name;
USE __library_name._package_name.ALL;

Voorbeeld van de beschrijving van een package

Merk op dat de package geen body bevat. De package body is een optio-
neel gedeelte dat we in dit handboek niet gebruiken.

De de beschrijving van een 4 bit fulladder door gebruik te maken van boven-
staande package.
(fourbitadd.vhd)

Hoofdstuk 1 Algemene structuur in VHDL - 12 -


Men heeft dus drie bestanden nodig:
• fulladder.vhd; hier staat de beschrijving van de component
• fulladder_package.vhd; hier worden de entitys van de componenten
beschreven
• fourbitadd.vhd; het ontwerp
In het ontwerp wordt met het statement use work.fulladder_package.all de
package aangesproken. In de architectuur van het ontwerp komt dan het
statement “component fulladder” te vervallen.
In het ontwerp wordt gebruik gemaakt van een impliciete beschrijving van de
component zelf.

1.15 Concatenatie operator.


De concatenatie operator wordt gebruikt om signalen samen te bundelen in
een bus.
Voorbeeld:
Wanneer we aan een 2 naar 4 decoder een enable ingang toevoegen, dan
kunnen we met de concatenatie operator ‘&’ de ingang En toevoegen aan de
vector w.

En w(1) w(0)
1

1
1

& Y (0)

& Y (1)

& Y(2)

& Y (3)

Figuur 10 Logische schema van een 2 naar 4 decoder

Enw <= w & En;


EN wordt rechts toegevoegd
inputs outputs
w(1),w(0),En y(3),y(2),y(1),y(0)
0 0 1 0 0 0 1
0 1 1 0 0 1 0
1 0 1 0 1 0 0
1 1 1 1 0 0 0
x x 0 0 0 0 0

Hoofdstuk 1 Algemene structuur in VHDL - 13 -


VHDL beschrijving van een 2 naar 4 decoder met een hoog actieve enable
En gebruik makend van concatenatie.
(dec2to4.vhd)

Figuur 11 Simulatie van een 2 naar 4 decoder

Hoofdstuk 1 Algemene structuur in VHDL - 14 -


1.16 Generate statement.

Een generate statement wordt gebruikt om met meerdere concretiseringen


tot een bepaalde hardwarestructuur te komen.
Men baseert zich op de waarde van één of meerdere indexvariabelen om
het vereiste aantal herhalingen tot stand te brengen.
Voorbeeld van een 4 bit fulladder.

G1 is een label, en de naam van de component is fulladder.

De volledige beschrijving van een 4 bit fulladder met behulp van een genera-
te statement
(fourbitadd.vhd)

Door toevoeging van een integer waarde is het mogelijk om nu een n bit
fulladder te beschrijven. Men hoeft in de beschrijving nog enkel integer
waarde ‘n’ aan te passen.
Men gebruikt het statement ‘generic’ om een integer variabele te declareren.

Hoofdstuk 1 Algemene structuur in VHDL - 15 -


Voorbeeld van een n bit fulladder met behulp van Generate statement
(nbitadd.vhd)

1.17 Process statement.


Een process is een stuk VHDL code dat sequentieel zal worden uitgevoerd.
Dit is dus in tegenstelling met de statements die buiten een process staan.

1.18 IF THEN ELSE stuctuur.


We nemen het voorbeeld van een mulitplexer.

Figuur 12 Principe van een multiplexer


Afhankelijk van de waarde van S krijgt de uitgang f de waarde van W 0 of W 1.

Figuur 13 Het schema van mux2to1 in de Amerikaanse symboliek.


Men heeft hier gekozen voor een som van producttermen.

Hoofdstuk 1 Algemene structuur in VHDL - 16 -


Door gebruik te maken van een process kan men deze eenvoudige multi-
plexer beschrijven.
(mux2to1.vhd)

Het process wordt vooraf gegaan door een label proc1. Dit is facultatief.
Welke ingangen afhankelijk zijn in het process wordt weergegeven tussen
haakjes in een sensitivitylijst. Het zijn de ingangen w0, w1 en s.
Het process wordt uitgevoerd wanneer een signaal die in de sensitivitylijst
voorkomt tussen de haakjes verandert.
De beschrijving wordt weergeven met een IF THEN ELSE structuur.
Wordt bovenstaande beschrijving gecompileerd dan bekomt men een circuit
volgens volgende combinatorische vergelijking.

F = (not s and w0) or (s and w1)

Een foutief alternatief om deze multiplexer te beschrijven, want de compiler


geeft hierop een ‘warning’.

Hoofdstuk 1 Algemene structuur in VHDL - 17 -


Binnen het process heeft men een dubbele toekenning van f.
Enkel de laatste toekenning heeft effect op de uitgang.
f <= w1;
Deze beschrijving kan soms tot triviale circuits leiden.
Men geeft de voorkeur aan onderstaande beschrijving.

Voorbeeld van een multiplexer die geen echte multiplexer is!


Omdat w0 en w1 zijn weggelaten in de sensitivitylijst. De wijziging van w0
en w1 worden pas weergegeven wanneer s van waarde veranderd.

Het is eveneens op te merken dat een IF tatement moet worden afgesloten


met een END IF en niet met een ENIF. Omwille van het sequentiële karak-
ter van een IF, is een IF bevel alleen toegelaten binnen een process!

1.19 CASE
Een case is een statement net zoals een IF statement dat alleen toegelaten
is binnen een process.
Voorbeeld:

Hoofdstuk 1 Algemene structuur in VHDL - 18 -


Voorbeeld van een case structuur om een 2-to-4 binary decoder te beschrij-
ven.
(dec2to4.vhd)

En w(1) w(0)
1

1
1

& Y (0)

& Y (1)

& Y(2)

& Y (3)

Figuur 14 Logische schema van een 2 naar 4 decoder met ingang enable

Hoofdstuk 1 Algemene structuur in VHDL - 19 -


Voorbeeld van een BCD naar 7-segmentdecoder door gebruik te maken van
een case statement.

1.20 WHEN ELSE

Bij conditie afhankelijke signalen wordt de waarde van een poort of een sig-
naal toegekend afhankelijk van een conditie. Men gebruikt de WHEN ELSE
structuur maar dan buiten een process.
Voorbeeld:

Hoofdstuk 1 Algemene structuur in VHDL - 20 -


1.21 WITH SELECT
Een WITH SELCT is een alternatief voor een case, maar dan buiten een
process, net zoals de WHEN ELSE.
Voorbeeld

VHDL operatoren

Hoofdstuk 1 Algemene structuur in VHDL - 21 -


1.22 Oefeningen.

Oefening 1
Programmeer een 2 bit naar 7 segment omvormer door gebruikt te maken
van gestructureerde beschrijving.

Oefening 2
1 dobbelsteen en 1 comparator:
Als we op de drukknop drukken zal de digitale dobbelsteen een waarde ge-
nereren van 1 tot 6.
De digitale dobbelsteen zal een waarde van 1 t.e.m. 6 doorsturen naar een
comparator. Als de comparator aan staat ("En = 1"), zal de uitgang F hoog
worden als de waarde op de input groter is dan drie.
Is de input waarde kleiner dan drie zal er een rood lichtje branden.

dobbelsteen

F
compare
a >3
b
c Rood
En
<=3

Opgave 1
Programmeer bovenstaande comparator voor 1 dobbelsteen.

Een kansspel met 4 dobbelstenen.


dobbelsteen dobbelsteen dobbels teen dobbelsteen
S0 S1 S2 S3

F(0) c(1)b(1)a(1) F(1) c(2)b(2)a(2) F(2) jackpot


c(0)b(0)a(0) com pare com pare compare c(3)b(3)a(3) com pare
a >3 a >3 a >3 a >3
b b b b
c c c c
Enable
En En En En
<=3 <=3 <=3 <=3

Rood0 Rood1 Rood2 Rood3

Men gaat vervolgens 4 comparatoren met elkaar verbinden en elke compa-


rator voorzien van een digitale dobbelsteen.

Hoofdstuk 1 Algemene structuur in VHDL - 22 -


Men drukt op S1 waardoor de eerste dobbelsteen een waarde geeft.
Is deze waarde hoger dan 3 zal de tweede dobbelsteen geactiveerd worden
waardoor je op S2 kan drukken.
Is de waarde van de tweede dobbelsteen groter dan 3 zal de derde dobbel-
steen geactiveerd worden waardoor we op S3 kunnen drukken.
Is de waarde van de derde dobbelsteen groter dan 3 zal de vierde dobbel-
steen geactiveerd worden waardoor we op S4 kunnen drukken.
Is de waarde van de vierde dobbelsteen groter dan 3 zal de uitgang Jackpot
oplichten.

Opgave2
Programmeer de jackpot en gebruik packages
Een .vhd file van 1 comparator (1 dobbelsteen)
Een .vhd file van de package
Een .vhd file van het top design ( ons jackpot spel )
dobbelsteen dobbelsteen dobbels teen dobbelsteen
S0 S1 S2 S3

F(0) c(1)b(1)a(1) F(1) c(2)b(2)a(2) F(2) jackpot


c(0)b(0)a(0) com pare com pare compare c(3)b(3)a(3) com pare
a >3 a >3 a >3 a >3
b b b b
c c c c
Enable
En En En En
<=3 <=3 <=3 <=3

Rood0 Rood1 Rood2 Rood3

Oefening 3
Ontwerp in VHDL een kwadratische codeomvormer.
Geef twee oplossingen.
1. door de som van de productermen op te schrijven
2. met de structuur: output <= '1' when input = "1010" or input = "1001" else '0';

Een kwadratische omvormer wordt dikwijls gebruik bij debietmetingen waar


het debiet wordt bepaald door een verschildruktransmitter.

Hoofdstuk 1 Algemene structuur in VHDL - 23 -


Oefening 4
Ontwerp een 4-to-1 multiplexer

Ontwerp een 16-to-1 multiplexer met behulp van een PACKAGE.


Gebruik in het ontwerp een GENERATE Statement
Gebruik onderstaande ENTITY
Gebruik onderstaand schema

Hoofdstuk 1 Algemene structuur in VHDL - 24 -


Oefening 5
1. Ontwerp een 2 naar 4 binary decoder.

w0 1

w1 1 & y0

& y1

& y2

En & y3

2. Ontwerp een 4-to-16 binary decoder met behulp van PACKAGES.


3. Ontwerp een 4-to-16 binary decoder met behulp van een
GENERATE statement.

Oefening 6
Ontwerp een 12-bit adder door gebruik te maken van een GENERATE
statement. Laat het resultaat zien op drie 7-segmentdisplay’s.

Hoofdstuk 1 Algemene structuur in VHDL - 25 -


Hoofdstuk 1 Algemene structuur in VHDL - 26 -
2. Hoofdstuk 2 De beschrijving van sequentiële logica in VHDL .. 2
2.1 Inleiding. ..................................................................................... 2
2.2 Beschrijving van geheugens. (flipflops)......................................... 3
2.3 Beschrijving van tellers in VHDL................................................... 5
2.4 Ontwerp van een 2 digit BCD-teller.............................................. 7
2.5 Ontwerp van een 8-bit bidirectionele teller met parallelle load........ 9
2.6 Registers................................................................................... 14
2.7 Bufferregisters. .......................................................................... 14
2.8 Schuifregisters........................................................................... 15
2.9 Toepassingen van schuifregisters. ............................................. 16
2.10 Beschrijiving van een register..................................................... 17
2.11 Beschrijving van een schuifregister. ........................................... 18
2.12 Alternatieve beschrijving voor een schuifregister......................... 22
2.13 Beschrijving van een 4-bit schuifregister..................................... 24
2.14 Het dender vrij maken van een schakelaar. ................................ 25
2.15 VHDL-code van een dendervrije schakelaar. .............................. 32
2.16 Oefeningen ............................................................................... 33

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 1 -


2. Hoofdstuk 2
De beschrijving van sequentiële logica in VHDL

2.1 Inleiding.

Onder de noemer van sequentiële logica vallen de schakelingen die gebruik


maken van een kloksignaal. Men gebruikt hiervoor volgende basis compo-
nenten zoals:
flipflops, tellers, registers, schuifregisters, …..
Het is in dit hoofdstuk de bedoeling om een aantal basis schakelingen te
beschrijven in VHDL om alzo een aantal bijzonderheden in deze program-
meertaal te demonstreren.
Nadien worden er een aantal praktische toepassingen beschreven in de
volgende hoofdstukken.

Behandelende begrippen
D-flipflop: basis van een statische geheugencel
Sensitivitylijst: geeft aan welke signalen worden behandelt in een process
Asynchrone reset: heeft voorrang op de klok
Binaire teller: is een teller die alle combinaties af gaat
Bidirectioneel: is in twee richtingen
Register: dient om informatie tijdelijk in op te slaan
Schuifregister: dient om informatie serieel te verwerken
IEC: Int. Electro - technical Commission
BCD: Binary Coded Decimal
Modulo teller: tot een bepaalde waarde tellen

Figuur 1 D-flipflop op experimentele print

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 2 -


2.2 Beschrijving van geheugens. (flipflops)
(d_flipflop.vhd)
Voor de entity d_flipflop kan met vele architecturen schrijven.
Voorbeeld van de entity d_flipflop:

Enkele voorbeelden zijn hier op z’n plaats.

Nieuw in bovenstaande beschrijving is dat er geen sensitivitylijst is gebruikt.


Dat wil zeggen dat het process altijd loopt. In het process staat evenwel een
wait bevel. Het process zal daar wachten tot dat:
Clk’event: event is een attribuut en is true wanneer clk van waarde verandert
en clk = ‘1’.
Beter is onderstaande beschrijving van een d_flipflop:

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 3 -


Meeste ontwerpers geven de voorkeur om het statement:
if clk'event and clk = '1' te gebruiken, omdat men dan in de declaratie van
het process nog andere signalen kan mee nemen in de sensitivitylijst.
Indien men gebruik maakt van het statement:
wait until (clk'event and clk='1'); is er geen sensitivitylijst van toepassing.
Aan te raden is om consequent bij meerdere processen het statement:
if clk'event and clk = '1' te gebruiken.

Voorbeeld van een D-flipflop met een asynchrone reset:


(asyn_d_flipflop.vhd)

Voorbeeld van een D-flopflip met een synchrone reset:


(syn_d_flipflop.vhd)

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 4 -


2.3 Beschrijving van tellers in VHDL.
Binaire tellers:
Er zijn in VHDL verschillende mogelijkheden om tellers te ontwerpen.
- Zelf zoeken naar de Booleaanse vergelijkingen met Karnaugh Kaar-
ten. We gebruiken een CASE statement om het toestandsdiagram
van de teller te beschrijven.
- Gebruik een voor gedefinieerde teller uit een bibliotheek van een fa-
brikant zoals Altera; MAX+PLUS II Library (LPM) (Library of Para-
meterized Modules) en map de poorten in de poorten van het VHDL
ontwerp
Voorbeeld van een eenvoudige 8-bit binaire teller met asynchrone clear.
(ct_simp.vhd)

Wanneer er een verandering van een signaal dat in de sensitivitylijst staat


plaats vindt, dan wordt het proces uitgevoerd. Nadien wordt elke actie syn-
chroon uitgevoerd met het signaal van de klok. Indien eerder de clear wordt
bediend heeft deze actie voorrang op de klok. Met andere woorden de klok
is asynchroon.
De berekende waarde van de teller wordt bijgehouden in variabele count dat
van het type integer is met een range van 0 tot 255. De teller beschikt trou-
wens over 256 verschillende toestanden. Het is een lokale variabele welke
we binnen het process hebben gedefinieerd.

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 5 -


De waarde count wordt opnieuw vernieuwd met behulp van het IF statement
van de vorm:

De regel (IF (clear=’0’) THEN) resulteerd in een asynchrone clear onafhan-


kelijk van de klok, de clear zet variabele count terug op ‘0’.
Tot slot moet de waarde van count overgedragen worden aan de uitgangen
van het ontwerp. Dit gebeurt met de regel: q<=count.
Merk op dat we hier twee verschillende toekenning gebruiken:
- een variabele wordt met operator := toegekend
- een signaal of output wordt met operator <= toegekend

Figuur 2 Simulatie van een 8-bit binaire teller

Indien men 100 klok signalen willen tellen (van 0 tot 99) voegen we volgend
statement toe in het process.
Het gaat hier over een modulo 100-teller

In onderstaande simulatie is het getal 63H (99D) de hexadecimale voorstel-


ling van de teller. Men ziet ook duidelijk in de simulatie het effect van de
asynchrone clear.

Figuur 3 Simulatie van een modulo 100-teller

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 6 -


2.4 Ontwerp van een 2 digit BCD-teller.
(BCDcount.vhd)
Indien men een 2 digit BCD-teller wenst te ontwerpen moeten we de uitgang
van de teller opsplitsen in 2 vectoren namelijk BCD0 en BCD1.
Wanneer men voor de uitgangen mode buffer kiest hoeft men in architecture
geen gebruik te maken van signalen. D.w.z. dat deze uitgangen terug als
ingang kunnen gebruikt worden in het ontwerp. Het is dan tevens mogelijk
om de teller uit te lezen met behulp van twee 7-segment decoders.
We gebruiken onderstaande entiteit (entity)

Men bekomt dan onderstaand blokschema.

Figuur 4 Blokschema van BCDCOUNT

De teller begint te tellen als ingang E (Enable) ‘1’ is en de clear is synchroon.


Beschrijving van het proces om een 2-digit 99-teller in BCD-code te beko-
men.

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 7 -


Simulatie van een 2 digit BCD teller.

Figuur 5 Simulatie van een 2 digit BCD teller

Merk op dan Enable en Clear synchroon zijn.

De volledige beschrijving van een 2-digit BCD-teller.


(BCDcount.vhd)

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 8 -


2.5 Ontwerp van een 8-bit bidirectionele teller met parallelle load.

Figuur 6 Blokschema van een 8-bit bidirectionele teller met parallelle load

De teller begint te tellen als COUNT-ENA = ‘1’.


De teller kan asyncroon worden gereset met de ingang CLEAR.
Met de ingang DIRECTION kunnen we de teller laten begingen vanaf een
vooraf ingestelde waarde op ingangen P[7..0] en de asynchrone ingang
LOAD.
De uitgangen zijn 8 bit breed QD[7..0]
De uitgang MAX_MIN is hoog actief.

Men gebruikt onderstaande entity om de teller te beschrijven.

De functies clear en load zijn asynchroon en maken deel uit van de sensitivi-
tylijst in het process. Iedere keer dat er zich een verandering voordoet aan
de ingangen clk, clear en load wordt het process uitgevoerd.

Ingangen clear en load worden gecontroleerd met het IF STATEMENT en


zijn onafhankelijk van de klok. Vandaar dat zij ook in het begin van het
PROCESS worden gecontroleerd.
De teller wordt met één verhoogd op voorwaarde dat clk’EVENT true is,
count_ena ‘1’ is & direction ‘1’ is.

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 9 -


De teller wordt met één verlaagd op voorwaarde dat clk’EVENT true is,
count_ena ‘1’ is & direction ‘0’ is.

De count waarde wordt aan de uitgangen van de outputs toegekend met


behulp van een signaal toekenning

De mogelijke resultaten op de toekenning van het signaal zijn:


• qd _ 0 (clear _ 0),
• qd _ p (load _ 1 AND clear _ 1),
• increment qd (count_ena _ 1 AND direction _ 1),
• decrement qd (count_ena _ 1 AND direction _ 0), or
• geen verandering op qd (count_ena _ 0).

Op het einde wordt de teller gedecodeerd naar een MAX_MIN uitgang die:
Hoog actief is bij het optellen en de teller op 255 of FFH staat.
Hoog actief is bij het aftellen en de teller op 0 = 00H staat.

Figuur 7 Simulatie van 8-bit bidirectionele teller met parallelle load

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 10 -


De bidirectionele functie van het ontwerp wordt gesimuleerd.
Merk op dat de eerste puls op de MAX_MIN uitgang een MAX is en dat de
tweede puls een MIN is! Controlleer dit bij de overgang van 1 naar 0 bij
direction.

De volledige beschrijving van een 8-bit bidirectionele teller met parallelle


load. Clear en load zijn asynchroon.
(pre_ct8a.vhd)

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 11 -


Op eenvoudige wijze kan met de beschrijving van een 8-bit bidirectionele
teller met parallelle load aanpassen naar een synchrone clear en
load.

Het PROCESS statement heeft maar één ingang in de sensitivitylijst staan.


De load en clear worden maar één keer geëvalueerd in het PROCESS, na-
melijk nadat CLK’EVENT AND CLK true is.

De volledige beschrijving van een 8-bit bidirectionele teller met parallelle


load. Clear en load zijn synchroon.
(pre_ct8s.vhd)

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 12 -


Simulatie van 8-bit bidirectionele teller met parallelle load

Asynchrone clear en load.

Figuur 8 Simulatie van 8-bit bidirectionele teller met parallelle load

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 13 -


2.6 Registers.

In digitale systemen moet vaak gedurende een zekere tijd binaire informatie
of codewoord worden opgeslagen. Dit gebeurt dan in een register. Het regis-
ter heeft zoveel flipflops als dat er bits zijn in de binaire informatie.
Soms is het nodig om de informatie in het register één bit te verplaatsen.
Dergelijk register noemen we dan een schuifregister.
De informatietoevoer en -afvoer in het register kan serieel of parallel gebeu-
ren.
Het algemeen IEC-symbool van een 4-bitregister is voorgesteld in Figuur 9.
De vier gelijke blokjes stellen de vier flipflops voor. Het bovenste blokje stelt
de bijkomende logica voor.
Registers kunnen gebruikt worden als schuifregisters, tellers, serie-parallel
omvormer, codegeneratoren, enz.

Figuur 9 Het IEC-symbool van een 4-bitregister

2.7 Bufferregisters.

Bufferregisters hebben tot doel een binair woord op te nemen en voor een
bepaalde tijd te houden.
Aan de ingangen van Figuur 9 X0, X1, X2, en, X3 wordt het binaire code-
woord aangesloten. Bij het optreden van de klokimpuls wordt het binaire
woord in de flipflops opgeslagen zodanig dat Q3 = X3, Q2 = X2, Q1 = X1
en Q0 = X0 wordt. Dit is een asynchrone reset omdat deze ingang onafhan-
kelijk is van het kloksignaal C1.
Door de clear-ingang laag te maken worden alle flipflops gereset zodat het
ingeschreven woord Q = “0000” is.
Wordt nu de clear ingang op hoog gezet, dan is het register klaar om een
bepaald woord in geheugen op te nemen.
De gemeenschappelijke besturingssignalen (R, S, C1 en L) voor al de D-
flipflops bevinden zich in het besturingsblok.

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 14 -


Met de load (L) kan het register al of niet geladen worden.
De load is hoog actief.
Met de reset (R) kan het volledige register op nul gezet worden.
De reset is laag actief.
Met de set (S) kan het volledige register op één gezet worden.
De set is laag actief.
Wordt de load ingang op "1" gezet, dan wordt de X informatie doorgespeeld
naar de respectievelijke D-ingangen.
Wordt de laod ingang op "0" gezet dan wordt de Q informatie doorgespeeld
naar de respectievelijke D ingangen.
Klokimpuls C1 leert ons dat alle D-ingangen hierop reageren. Hier is dit op
de 0-1 flank of de stijgende flank. Bij de load-ingang (L) is geen polariteit
indicator getekend vandaar dat deze ingang hoog actief is, in tegenstelling
tot de reset- en de set ingang.

Figuur 10 Het IEC-symbool van een 4-bitregister

2.8 Schuifregisters.

Een schuifregister dient om informatie dat het bevat één of meerdere posi-
ties naar links of naar rechts te verschuiven. De verschuiving gebeurt slechts
één positie ineens; bij iedere klokimpuls verschuift de informatie slechts over
één naburige flipflop. Het aantal schuifimpulsen of klokimpulsen dat nodig is
om de volledige informatie in het geheugen op te nemen is daarom gelijk
aan het aantal flipflops dat het register bevat.

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 15 -


2.9 Toepassingen van schuifregisters.
Schuifregisters worden in digitale schakelingen, en vooral in de computer-
techniek, zeer veel gebruikt.
We noemen hier enkele toepassingen op.
• Bufferregisters worden gebruikt om gedurende een bepaalde tijd
een binair codewoord te bewaren.
• Schuifregisters in de serie in- serie uit mode kunnen gebruikt worden
als vertragingsregister. De opgeslagen data zal aan de uitgang ver-
schijnen met een vertraging van N impulsen. In die mode kan het
schuifregister ook gebruikt worden als tijdelijke opslag van informatie.
• Een bijzondere toepassing in de serie in- serie uit mode is de "Ring-
teller" en "Johnson teller".
• Schuifregisters in de parallel in- parallel uit mode vinden toepassing
bij karakter- en codegeneratoren. Voor een herhaling van de code
wordt de schakeling gecombineerd met een ringteller die het rond-
schuiven verzorgt. Uiteraard kan een dergelijk schuifregister gebruikt
worden als buffer- of geheugenregister.
• Schuifregisters in de serie in- serie uit mode worden o.a. gebruikt bij
data-transmissie. Dit zal het geval zijn waar de bewerking of verwer-
king van de digitale signalen bit per bit gebeurt (serieel) en bv. het
zichtbaar maken van de informatie parallel moet zijn. Denken we
hier bijv. aan het uitvoeren van rekenkundige bewerkingen en het
zichtbaar maken van het resultaat op een display.
• Schuifregisters in de serie in- serie uit mode worden o.a. gebruikt bij
datatransmissie. Dit zal het geval zijn waar de digitale informatie
over een lange afstand moet overgebracht worden. Denken we hier
o.a. aan de digitale afstandsbediening van ons T.V. toestel en tele-
text.
• A/D omvormers S.A.R. (Successive approximation register)
• Het dendervij maken van een schakelaar
• Het weg filteren van ruis in een kloksignaal

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 16 -


2.10 Beschrijiving van een register.
Onderstaande code is een beschrijving van een 8-bit register met asynchro-
ne clear.
(reg8.vhd)

Het blokschema van een 8-bit register

Figuur 11 Blokschema van REG8

Beter is een beschrijving te geven waarvan het aantal bit van het register
afhankelijk wordt gemaakt van een integer value.
Men maakt dan gebruik van het statement:

Het aantal in- en uitgangen is dan afhankelijk van de integer value N.

Om ervoor te zorgen dat het register op ‘0’ wordt gezet, onafhankelijk van
het aantal bits, gebruikt men onderstaand statement:

Bovenstaand statement is equivalent aan onderstaand statement:

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 17 -


De volledige beschrijving van een n-bit register.
(regn.vhd)

Het blokschema van een n-bit register waarbij N=16.

Figuur 12 Blokschema van REGN

2.11 Beschrijving van een schuifregister.


Volgens onderstaand schema wordt een 4-bit schuifregister beschreven.

Figuur 13 Het schema van een 4-bit schuifregister

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 18 -


Een subcircuit bestaande uit een D- flipflop en een 2 naar 1 multiplexer
wordt gebruikt. De entity van dit subcircuit is muxdff en wordt als component
gebruikt in de beschrijving van het 4-bit schuifregister.
(muxdff.vhd)

Afhankelijk van ingang sel wordt ofwel D0 ofwel D1 vergrendeld op de uit-


gang Q. Onderstaande hardwareschakeling geeft dit weer.

Figuur 14 Logisch schema van muxdff

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 19 -


Door gebruik te maken van 4 maal een muxdff kan men een 4-bit schuifre-
gister bekomen zoals in ondertaande digitale schakeling.

Figuur 15 Logische schema van een 4-bit schuifregister

Men gebruikt muxdff als component.


(shift4.vhd)

Let op de volgorde van de beschrijving van de in- en uitgangen van compo-


nent muxdff.

Merk op dat er voor uitgang Q mode buffer is gekozen. Zo vermijd men in


de architecture een signaal.

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 20 -


Handig is het wanneer de beschrijving wordt uitgebreid naar een n-bit schuif-
register. Men maakt dan gebruik van een GENERATE statement.
In dit voorbeeld bekomt men dan een 4-bit schuifregister. Door een integer
waarde aan te passen naar 32 bekomen we en 32-bit schuifregister.
(shiftn.vhd)

Hiërarchie van een n-bit schuifregister

Figuur 16 Hiërarchie van een n-bit schuifregister


Q(3) Q(2) Q(1) Q(0)

0 1 0 0

Clock Q Clock Q Clock Q Clock Q


W D1 D1 D1 D1
1
D0 D0 D0 D0
0
Sel Sel Sel Sel
1
0
L
1

1
0

R(3) R(2) R(1) R(0)

Figuur 17 Logische schema van een 4-bit schuifregister

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 21 -


2.12 Alternatieve beschrijving voor een schuifregister.
(shift4.vhd)

Wanneer er een signaal dat beschreven staat na WAIT UNTIL heeft het
signaal invloed op de uitgangen van de D-FF’s.
De parallelle load wordt met onderstaand statement beschreven:

Het schuiven wordt met onderstaand statement beschreven en is synchroon


met de klok.

De volgorde van de regels speelt geen rol, alles wordt in het PROCESS op
hetzelfde moment uitgevoerd. (concurrent) Men kan dus ook onderstaand
statement gebruiken:

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 22 -


Men kan de alternatieve beschrijving ook uitbreiden naar een n-bit schuifre-
gister.
(shifta.vhd)

In bovenstaande beschrijving wordt een loop statement gebruikt.


VHDL kent twee types loop statements:
- FOR-LOOP
- -WHILE LOOP
Syntax:

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 23 -


2.13 Beschrijving van een 4-bit schuifregister.
(shiftreg.vhd)
Blokschema

Figuur 18 Blokschema van SHIFTREG

Beschrijving

Merk op dat met onderstaand statement het schuifregister al is beschreven.

De vier uitgangen van het signaal “shift” worden op de vier uitgangen van
het ontwerp(entity) gezet.

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 24 -


Men kan vorige beschrijving ook uitbreiden naar een n-bit schuifregister.
(shgiftregn.vhd)

Voorbeeld van een 8-bit schuifregister

Merk op dat voor de uitgang q mode buffer is gekozen.


Zo moet er voor dat het process wordt beschreven geen signaal worden
gedefinieerd.

We kunnen het schuifregister gebruiken om ruis, reflecterende pulsen, of


timing hazards weg te filteren. Een veel gebruikte toepassing is het dender-
vrij maken van een schakelaar. Bij deze toepassing wordt de laatste be-
schrijving van een schuifregister toegepast.

2.14 Het dender vrij maken van een schakelaar.


Dender op een schakelaar wordt geproduceerd elke keer een schakelaar
wordt bediend. De “knip” van de schakelaar veroorzaakt geen stabiel signaal
op een digitaal programmeerbaar systeem. Het bedienen van de schakelaar
kan meerdere impulsen genereren op een systeem wanneer hij wordt be-
diend.

Figuur 19 Het dender vrij maken van een schakelaar

Er komen als het ware meerdere stijgende en dalende flanken voor op de


uitgang van een schakelaar.

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 25 -


Figuur 20 Het dender vrij maken van een schakelaar

De dender blijft ongeveer 20 ms aanwezig op de uitgang van een schake-


laar. Dit alles is weergegeven in de twee volgende figuren.

Figuur 21 Het dender vrij maken van een schakelaar

Figuur 22 Het dender vrij maken van een schakelaar

Men kan de dender van een schakelaar weg filteren met behulp van een
4-bit schuifregister. Voor dat de schakellaar op “1” werd gezet stond er nog
een “0” op Din van het schuifregister, zodat de uitgang van de andpoort op
“0” staat.

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 26 -


Figuur 23 Het dender vrij maken van een schakelaar

Na ongeveer 20 ms is de dender op de schakelaar verdwenen en na vier


stijgende flanken van het kloksignaal staan de vier uitgangen van het schuif-
register op “1” zodat de uitgang van de andpoort ook op “1” komt te staan.

Figuur 24 Het dender vrij maken van een schakelaar

Voor dat de dender op de schakelaar is verdwenen krijgen we onderstaande


situatie.

Figuur 25 Het dender vrij maken van een schakelaar

In 20 ms dat er dender zit op de schakelaar wordt dit signaal via de seriële


ingang van het schuifregister vier maal ingeklokt.

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 27 -


Figuur 26 Het dender vrij maken van een schakelaar

Klokimpuls 1

Figuur 27 Het dender vrij maken van een schakelaar

Klokimpuls 2

Figuur 28 Het dender vrij maken van een schakelaar

Klokimpuls 3

Figuur 29 Het dender vrij maken van een schakelaar

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 28 -


Klokimpuls 4

Figuur 30 Het dender vrij maken van een schakelaar

Pas na 4 klokimpulsen zal de uitgang van de andpoort op “1” komen te


staan.

Figuur 31 Het dender vrij maken van een schakelaar

In het geval dat de schakelaar terug naar “0” gaat.

Figuur 32 Het dender vrij maken van een schakelaar

Vanaf de eerste stijgende flank wordt de uitgang van de andpoort “0”.

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 29 -


Figuur 33 Het dender vrij maken van een schakelaar

Bij de volgende stijgende flank blijft de uitgang van de andpoort “0” staan.

Figuur 34 Het dender vrij maken van een schakelaar

Bij de volgende vier stijgende flanken blijft de uitgang van de andpoort op


“0” staan.

Figuur 35 Het dender vrij maken van een schakelaar

Figuur 36 Het dender vrij maken van een schakelaar

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 30 -


Figuur 37 Het dender vrij maken van een schakelaar

Figuur 38 Het dender vrij maken van een schakelaar

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 31 -


2.15 VHDL-code van een dendervrije schakelaar.
Blokschema:

Figuur 39 Blokschema van DEBOUNCE

Beschrijving
(debounce.vhd)

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 32 -


2.16 Oefeningen

Oefening 1

Ontwerp volgens onderstaand schema een switch debouncer voor een nor-
maal geopende drukknop. De drukknop bedient een logische nul.
Gebruik onderstaande entity.

Figuur 40 Switch debouncer voor een normaal geopende drukknop

Oefening 2
Ontwerp in vhdl met behulp van een schuifregister onderstaande ringteller.
Q(0)
Q(3) Q(2) Q(1)

0 0 1 0
Clock

Clock Q Clock Q Clock Q Clock Q


x
D1 D1 D1 D1
w
1 D0 D0 D0 D0
Sel Sel Sel Sel

1
0
L

Figuur 41 Ringteller

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 33 -


Zorg dat de teller zelfstartend is.
Met L kiezen we op- of aftellen.
L = 1 dan is x de shift-input. (shift left)
L = 0 dan is w de shift-input. (shift right)

Zorg ervoor dat onderstaande timing wordt gerespecteerd.

Figuur 42 Timing ringteller

Maak daarna een uitbreiding voor een n-bit ringteller.

Hoofdstuk 2 Beschrijving van sequentiële logica in VHDL - 34 -


3. Hoofdstuk 3 Reactie timercircuit. .................................................... 2
3.1 Inleiding. .................................................................................... 2
3.2 Sturing van het timercircuit. ........................................................ 3
3.3 Uitlezing en sturing van het timercircuit....................................... 4
3.4 Het timercircuit in VHDL. ............................................................ 5
3.5 Realisatie van het timercircuit met behulp van ispLEVER. .......... 9
3.6 Oefening: ................................................................................. 10

Hoofdstuk 3 Reactie timercircuit - 1 -


3. Hoofdstuk 3
Reactie timercircuit.
3.1 Inleiding.
We ontwerpen een circuit dat de reactietijd van een persoon kan meten.
Het circuit doet een led branden bij een actieve input op actie. Met behulp
van een drukknop moet de persoon in kwestie dan zo snel mogelijk
reageren. De tijd tussen het starten (actie) en het stoppen van de meting
(reactie) wordt weergegeven met behulp van een timer.
Het princiepschema wordt in Figuur 1 weergegeven.

Figuur 1 princiepschema van het reactie timercircuit

De meting wordt gestart door input “actie” even op ‘1’ te zetten. Hierdoor
wordt met behulp van een multiplexer de D-flipflop geset waardoor het ledje
gaat branden. Input enable wordt ‘1’ waardoor de teller begint te tellen. De
tijd begint te lopen en wordt gestopt van zodra de D-flipflop wordt gereset.
Het resetten van de D-flipflop gebeurt met druknop “reactie”.
Met behulp van een BCD-99 teller wordt de reactietijd gemeten.
Deze teller wordt geklokt met een kloksignaal van exact 10 Hz. Men kan
alzo de reactietijd meten tot op een nauwkeurigheid van 0,1 seconde.
Indien we willen meten met een nauwkeurigheid van 0,01 seconde dan moet
er gekozen worden voor een kloksignaal van 100 Hz.

Hoofdstuk 3 Reactie timercircuit - 2 -


3.2 Sturing van het timercircuit.

Elektronisch kan de schakeling met D-flipflop, multiplexer, ledje en


drukknoppen er uit zien zoals in Figuur 2.

Figuur 2 sturing van het reactie timercircuit

In de plaats van een teller te kiezen met een enable-ingang wordt er hier
gekozen voor een telpoort. Het 10 Hz signaal wordt aangeboden aan een
telpoort die wordt open gezet van zodra de D-flipflop op ‘1’ staat. Met
drukknop reset wordt het reactie timercircuit terug opnieuw klaar gezet voor
een volgende nieuwe meting.
De uitlezing van de gemeten tijd kan gebeuren via onderstaande traditionele
componenten;
- 2 BCD-tellers (bv: 74xx160)
- 2 BIN/7-SEG omvormers (bv: 74xx47)
Figuur 3 geeft de teller wee. Figuur 4 geeft het volledige ontwerp weer.
Het is nu de bedoeling om de volledige schakeling te ontwerpen in een
programmeerbare component, bv: een CPLD M4A5-64/32 van Lattice, of
een CPLD EPM128S van Altera.

Hoofdstuk 3 Reactie timercircuit - 3 -


3.3 Uitlezing en sturing van het timercircuit.

Figuur 3 De uitlezing van het reactie timercircuit

Figuur 4 Het volledige schema van het reactie timercircuit

Hoofdstuk 3 Reactie timercircuit - 4 -


3.4 Het timercircuit in VHDL.
Indien de klok een frequentie heeft van 25 MHz moet deze nog gedeeld
worden naar bv. 10Hz.
Om het geheel te programmeren gebruiken we de entity REACTION en
twee componenten:
- SEG7
- BCDCOUNT

Entity REACTION

Figuur 5 Blokschema van REACTION

Component SEG7

Figuur 6 Blokschema van SEG7

Component BCDCOUNT

Figuur 7 Blokschema van BCDCOUNT

Beschrijving entity van component SEG7:

Beschrijving entity van componenet BCDCOUNT:

Beschrijving van entity REACTION:

Hoofdstuk 3 Reactie timercircuit - 5 -


Beschrijving van component SEG7:
(seg7.vhd)

Beschrijving van component BCDCOUNT:


(bcdcount.vhd)

Hoofdstuk 3 Reactie timercircuit - 6 -


In de beschrijving van architecture reaction wordt gebruik gemaakt van
signaal q. Dit signaal wordt gebruikt om de frequentie van 25 MHz te delen
door 2.500.000 om een frequentie te bekomen van 10Hz.
Het proces deler_25MHz wordt hier onder beschreven:

We kiezen voor actief lage drukknoppen. De beschrijving van de sturing van


het reactie timercircuit gebeurt in het proces flipflop.

De concretisering van de componenten SEG7 en BCDCOUNT gebeurt in


onderstaande beschrijving:

Het signaal q zorgt voor een klok van 10Hz en BCDCOUNT telt als signaal
LED ‘1’ is.

Simulatie van het reactie timer circuit:

Figuur 8 Simulatie van het reactie timercircuit

Hoofdstuk 3 Reactie timercircuit - 7 -


De volledige beschrijving van het reactie timercircuit:
(reaction.vhd)

Hoofdstuk 3 Reactie timercircuit - 8 -


3.5 Realisatie van het timercircuit met behulp van ispLEVER.
Men kan het ontwerp uittesten op een ontwikkelbordje van Lattice.
We gebruiken een CPLD M4A5-64/32.
Figuur 9 geeft onderstaande projectnavigator van ispLEVER weer en laat
het ontwerp met de verschillende processen zien.

Figuur 9 De verschillende processen van het reactie timercircuit

actie

reset reactie

Figuur 10 Het ontwikkelbordje met een CPLD van Lattice

Hoofdstuk 3 Reactie timercircuit - 9 -


Met behulp van de constraint editor kan men de in- en uitgangen voorzien
van de juiste pinnummers die overeen komen met de PCB van het bordje.

Figuur 11 De constraint editor van ispLEVER

3.6 Oefening:

Maak een uitbreiding van de toepassing reactie timercircuit met een uitlezing
van 4 digits; Digit3, Digit2, Digit2, Digit0.

Hoofdstuk 3 Reactie timercircuit - 10 -


4. Hoofdstuk 4 Seriële Communicatie ............................................ 2
4.1 Interface van een PS/2 toetsenbord.................................... 2
4.2 Scancodes van een PS/2 toetsenbord. ............................... 3
4.3 Maak- en verbreek codes van een PS/2 toetsenbord .......... 4
4.4 Het PS/2 serieel Date Transmissie Protocol. ...................... 4
4.5 Scancode Set 2 voor een PS/2 Toetsenbord. ..................... 7
4.6 PS/2 interface in VHDL....................................................... 9
4.7 Oefening: ......................................................................... 13

Hoofdstuk 4 Seriële Communicatie - 1 -


4. Hoofdstuk 4
Seriële Communicatie
4.1 Interface van een PS/2 toetsenbord.

Figuur 1 Een PS/2 toetsenbord

Een PS/2 poort bestaat uit 6 pinnen:


- VDD pin 4
- Ground pin 3
- Data pin 1
- Klok pin 5
- 2 niet gebruikte pinnen

Figuur 2 Een PS/2 poort

Figuur 3 Een PS/2 poort

Figuur 4 Een PS/2 poort

Hoofdstuk 4 Seriële Communicatie - 2 -


Klok en datalijn zijn open collector en bidirectioneel. De klok wordt normaal
gecontroleerd door het toetsenbord, maar kan ook worden gecontroleerd
door het systeem zelf, in ons geval de programmeerbare component.
De programmeerbare component kan de datatransmissie van het toetsen-
bord stoppen. De datalijn bevat dus de gegevens (data) tussen het systeem
en het toetsenbord. Het toetsenbord en het systeem kunnen verschillende
boodschappen en commando’s tussen elkaar uitwisselen.

Tabel 1 Commando’s van een PS/2 toetsenbord

Tabel 2 Boodschappen van een PS/2 toetsenbord

4.2 Scancodes van een PS/2 toetsenbord.


Het toetsenbord wordt geëncodeerd door de toetsen van het toetsenbord te
plaatsen in een matrix van rijen en kolommen. Alle rijen en kolommen wor-
den periodiek op een hoge frequentie getest door een encoder die contro-
leert of de status van een toets verandert. De data van een toets wordt seri-
eel verzonden naar de computer om de scancode te achterhalen. Elke toets
die wordt ingedrukt genereert een unieke scancode gebaseerd op een adres
identificatie in de switch matrix. Er zijn verschillende variëteiten mogelijk op
het gebied van scancodes, en deze zijn afhankelijk van het type toetsen-
bord.

Hoofdstuk 4 Seriële Communicatie - 3 -


Het PS/2 toetsenbord heeft twee sets scancodes. De default scancode
wordt gezet wanneer de computer wordt opgestart, tenzij er door de compu-
ter een commando wordt verzonden naar het toetsenbord voor een alterna-
tieve scancode. Om een interface in VHDL te programmaren tussen het
toetsenbord en een programmeerbaar systeem is het makkelijkst om te kie-
zen voor de default scancode zodat het programmeerbaar system geen
commando’s hoeft te genereren.

4.3 Maak- en verbreek codes van een PS/2 toetsenbord


De scancodes van een toetsenbord bestaan uit een maak- en verbreek co-
des. Een maak code wordt verzonden telkens men een toets heeft inge-
drukt. Een verbreek code wordt verzonden telken men een toets loslaat.
Voor de meeste toetsen, is de verbreek code een bitstroom van F0 gevolgd
door de maak code van de toets. Zo kan u controleren of er meer dan één
toets is ingedrukt. Het laat u tevens toe te controleren welke toets het eerst
is losgelaten. Ook wanneer er een toets continu wordt ingedrukt zendt het
toetsenbord op een typische snelheid de code tot dat de toets wordt los ge-
laten en de verbreek code wordt gezonden.

4.4 Het PS/2 serieel Date Transmissie Protocol.


De scancode wordt serieel verzonden in 11 bits op de bidirectionele datalijn.
Indien de datalijn in rust is, (geen data over de datalijn) dan is de data- en de
klok lijn hoog actief. Onderstaande figuur laat de transmissie zien van één
enkele toets:

1. startbit
2. 8 data bits bestaande uit de toets scancode van LSB naar MSB
3. Oneven pariteit bit berekend uit de 8 databits zodat de som van het
aantal bits inclusief de parity bit oneven is.
4. Een stopbit (‘1’)

Beschrijving van gebeurtenissen gedurende het verzenden van data of


comado’s van het toetsenbord.

1. Het toetsenbord controleert of beide lijnen data & klok niet actief zijn
(lijn in rust). Een niet actieve lijn wordt als een ‘1’ herkend. Indien
beide lijnen niet actief zijn is het toetsenbord klaar om een startbit
(‘0’) te verzenden.
2. Het toetsenbord trekt de klok gedurende 35 µs laag. Om een startbit
te verzenden.
3. Het toetsenbord zendt dan de overige 10 bits met een klok van
ongeveer 14.27 KHz. De seriële data bestaande uit 8 bits wordt ge-
volgd door een oneven pariteitbit en een stopbit (‘1’). Indien het
toetsenbord meerdere karakters wenst te versturen, dan volgt er
onmiddellijk opnieuw een startbit gevolgd door 8 databits een pari-
teitbit en een stopbit.

Hoofdstuk 4 Seriële Communicatie - 4 -


Figuur 5 Serieel datatransmissie protocol
Wanneer men bovenstaan algoritme gaat implementeren in een program-
meerbare component is het nodig om het kloksignaal te filteren. Trouwens
wanneer men een elektrische impuls verstuurd over een elektrische snoer,
(twisted pair) wordt deze vervormd. Tevens ontstaan er reflecties. Sommi-
ge PS/2 toetsenborden hebben meer last van reflecties dan andere en zijn
niet in staat goede klokimpulsen af te leveren aan het systeem. (program-
meerbare component) Onderstaande schakeling biedt hiervoor een oplos-
sing.
clock_25MHz

8-bit shifregister
KEYBOARD-CLK CLK
SI
LD
D7 Q7
D6 Q6
&
+5V
D5 Q5 keyboard_clk_filtered
D4 Q4
D3 Q3
D2 Q2
D1 Q1
D0 Q0

Figuur 6 Schema voor het weg filteren van reflecties

Men past het principe toe van het dender vrij maken van een schakelaar, dat
reeds eerder is besproken in één van vorige hoofdstukken.
Door gebruik te maken van een 8-bit schuifregister en een andpoort worden
storingen, reflecties, ruis uit het kloksignaal KEYBOARD_CLK weggefilterd.
Deze filter is geïntegreerd in de VHDL beschrijving van KYBOARD dat later
zal worden besproken.

Zoals in Figuur 7 is te zien is het ook mogelijk om commando’s te zenden


naar het PS/2 toetsenbord vanuit de PC of een programmeerbaar systeem.

Hoofdstuk 4 Seriële Communicatie - 5 -


Figuur 7 Serieel datatransmissie protocol voor commando’s
1. Het systeem (PC of programmeerbare component) stuurt de kloklijn
laag (‘0’) gedurende 60 µs om nieuwe data komende van het toet-
senbord te blokkeren.
2. Het systeem stuurt de datalijn laag (‘0’) en geeft de kloklijn vrij om
aan te geven dat het data voor het toetsenbord ter beschikking
heeft.
3. Het toetsenbord zal dan zelf kloksignalen genereren om het com-
mando van het systeem in te lezen.
4. Nadat de stopbit is gegenereerd door het toetsenbord (‘1’) wordt de
datalijn terug vrij gegeven.

Als antwoord op elk bevel zal het toetsenbord een acknowledge (ACK) sig-
naal generen, FAH als teken dat de data goed is ontvangen. Indien het
systeem de datalijn niet vrij geeft, blijft het toetsenbord een klok genereren
als antwoord en zendt een ‘re-send command’ signaal, FEH of FCH naar het
systeem. Zie hiervoor naar de tabel 2. Op een gemiste stopbit of een fout op
pariteit wordt ook met een ‘re-send command’ signaal vanuit het toetsenbord
gereageerd.

Hoofdstuk 4 Seriële Communicatie - 6 -


4.5 Scancode Set 2 voor een PS/2 Toetsenbord.
PS/2 toetsenborden zijn beschikbaar in verschillende talen met verschillende
karakters weergegeven op de toetsen. In twee stappen is de scancode te-
rug te vinden. Een toets nummer wordt gebruikt om in de tabel de scancode
terug te vinden. Het nummer van de toets en de scancode is in volgende
tabel terug te vinden samen met een afbeelding van een Engels toetsen-
bord.

Figuur 8 Een PS/2 toetsenbord men scancode


Tabel 3 De scancode voor een PS/2 toetsenbord

Hoofdstuk 4 Seriële Communicatie - 7 -


Vervolg tabel met de scancode voor een PS/2 toetsenbord

Tabel 4 De scancode voor een PS/2 toetsenbord

Elke toets zendt een maakcode wanneer een toets wordt ingedrukt en een
verbreekcode als de toets wordt los gelaten. Wanneer verschillende toetsen
op hetzelfde moment worden ingedrukt worden er verschillende maak codes
voor een verbreekcode verzonden. Wanneer de spanning wordt opgezet
gebruikt het toetsenbord bovenstaande code als default. Met behulp van
commando’s kan het toetsenbord in een andere scancode set worden gezet.
De PC zendt met een initialisatie commando het toetsenbord in een andere
scancodeset.
De interface die we gaan beschrijven in VHDL is eenvoudiger indien er ge-
bruik wordt gemaakt van het default scancode set.

Hoofdstuk 4 Seriële Communicatie - 8 -


4.6 PS/2 interface in VHDL.

Figuur 9 Blokschema van KEYBOARD

Beschrijving van de entity:

In het voorbeeld worden er geen commando’s naar het toetsenbord ge-


stuurd, men gebruikt de power-on default waardes van het toetsenbord.
Om toch commando’s te verzenden is er een complexe bidirectionele tri-
state klok & data interface nodig. Wanneer de spanning word aangezet
zendt het toetsenbord een testcode “AA” en “00” naar de programmeerbare
chip.

Onderstaande signalen worden gebruikt in het ontwerp.

De klok van het toetsenbord wordt gefilterd door het process Clock_filter.
Dit process gebruikt een 8-bit schuifregister en een Andpoort om reflecte-
rende pulsen, ruis of timing hazards bij sommige toetsenborden te elimine-
ren.

De uitgangssignaal keyboard_clk_filtered zal enkel veranderen indien het


inputsignaal keyboard_clk, hoog of laag is voor acht opéénvolgende 25 Mhz
clokcs. [(1/25000000)*8=320 ns] Dus gedurende 320 ns worden alle storin-
gen van Keybord_clk signaal weg gefilterd. Ruis, reflecterende pulsen, of
timing hazards die in de kabel van een toetsenbord kunnen worden wegge-
filterd.

Hoofdstuk 4 Seriële Communicatie - 9 -


Zo kunnen er geen onechte kloksignalen worden gegenereerd op de pro-
grammeerbare component.

Voorstelling van het Klok_filter process


clock_25MHz

8-bit shifregister
KEYBOARD-CLK CLK
SI
LD
D7 Q7
D6 Q6
&
+5V
D5 Q5 keyboard_clk_filtered
D4 Q4
D3 Q3
D2 Q2
D1 Q1
D0 Q0

Figuur 10 Schema van het Klok_filter process


De VHDL-beschrijving wacht op een startbit en converteert de acht volgende
seriële data bits naar parallel, en bewaart het input karakter in een signaal
charin, en set flag scan_ready, om aan te duiden dat een nieuw karakter is
ingelezen. Het scan_ready signaal of ready flag input is een handshake
signaal dat nodig is om er zeker van te zijn dat er maar één keer per aan-
slag van een toets een nieuwe scancode wordt ingelezen. Scan_ready wordt
geset elke keer er een nieuwe scancode is ontvangen. Het input signaal
read reset het scan_ready handshake singaal.

Het process read_the_key_scan_code wacht tot dat scan_ready hoog gaat.


Het process read_the_key_scan_code leest vanaf dat moment een nieuwe
waarde voor scan_code. Men gebruikt een 9 bit schuifregister, een bitteller
INCNT om het aantal bits te tellen. De teller INCNT wordt met onderstaande
beschrijving op gereset.

Met onderstaande beschrijving wordt er getest of er een startbit op nul staat.

Hoofdstuk 4 Seriële Communicatie - 10 -


Het inschuiven van een scancode gebeurt met een 9 bit schuifregister op het
ritme van een gefilterde klok.:

Na negen gefilterde klokimpulsen wordt de waarde van het schuifregister


overgedragen aan de uitgang scan_code en worden de nodige handshake
signalen READ_CHAR gereset, ready_set geset en de bitteller INCNT gere-
set.

Er worden geen commando’s naar het toetsenbord gestuurd en men ge-


bruikt de default waardes van het toetsenbord. Indien men commando’s wil
sturen naar het toetsenbord moeten de lijnen klok en data bidirectioneel
worden uitgevoerd. De parity bit wordt ook niet getest.

Men kan met een CAD oplossing de beschrijving KEYBOARD uittesten door
de uitgang SCAN_CODE op twee zeven segment displays te zetten. Zie
onderstaande CAD tekening.

Hoofdstuk 4 Seriële Communicatie - 11 -


Beschrijving van de module KEYBOARD:
(keyboard.vhd)

Beschrijving van:
- de entity
- de signalen
- het process read_set
- het process klok_filter

Hoofdstuk 4 Seriële Communicatie - 12 -


Beschrijving van:
- het process read_the-key_scan_code:

4.7 Oefening:

1. Gebruik de keyboard module als input module om de animatie van een


willekeurig looplicht aan te passen.

2. Gebruik de keyboard module als input module om een pulsbreedte ge-


moduleerd signaal aan te passen.

3. Gebruik de keyboard module als input module voor een video game.

Hoofdstuk 4 Seriële Communicatie - 13 -


Hoofdstuk 4 Seriële Communicatie - 14 -
5. Hoofdstuk 5 VGA interface met UP2 Education Kit .................... 2
5.1 Inleiding. ............................................................................ 2
5.2 Technologie van een video display. .................................... 2
5.3 De VGA industrie standaard 640 x 480 pixel mode. ............ 5
5.4 Opbouw van een beeld op een monitor. ............................. 7
5.5 VGA interface in VHDL....................................................... 8
5.6 Beschrijving van de synchronisatiesignalen in VHDL. ......... 9
5.7 Een verticale lijn op het scherm ........................................ 10
5.8 Beschrijving van component VGA_SYNC. ........................ 15
5.9 Video voorbeelden. .......................................................... 19
5.10 Een karakter gebaseerd ontwerp op een VGA interface.... 20

Hoofdstuk 5 VGA interface met UP2 Education Kit - 1 -


5. Hoofdstuk 5
VGA interface met UP2 Education Kit
5.1 Inleiding.
Een VGA videosignaal bestaat uit 5 signalen. Twee zijn TTL compatibel, de
horizontale synchronisatie en de verticale synchronisatie voor het synchroni-
seren van het videosignaal. Drie analoge signalen met een peak-to-peak
niveau van 0,7 – 1,0 V worden gebruikt voor de kleuren. De kleuren zijn
Rood, Groen en Blauw. Zij worden dikwijls samen gebruikt in één woord
”RGB-signaal”. Door het analoog niveau van elk der kleuren Rood, Groen
en Blauw te wijzigen ontstaat er een andere kleur op het scherm van de
monitor.

5.2 Technologie van een video display.


De technologie die wordt gebruikt om een beeld op een computerscherm te
zetten stuurt de videosignalen aan. De hoofdcomponent die hiervoor wordt
gebruikt is een CRT of een Cathode Ray Tube. Figuur 1 geeft de opbouw
van een CRT weer.

Figuur 1 CRT of een Cathode Ray Tube

Een CRT bestaat uit:


A. cathode
B. geleidende coating
C. anode
D. phosphor-coated scherm
E. RGB-elektronenstraal
F. shadow mask

Hoofdstuk 5 VGA interface met UP2 Education Kit - 2 -


Met behulp van een elektronenkanon gevormd met de cathode & anode van
de CRT worden er 3 elektronenstralen afgevuurd op het scherm van de mo-
nitor.
De geleidende coating zorgt voor de afvoer van de elektronen die op het
scherm botsen. Elk van de drie elektronenstralen botsen op een phoshpor-
coated deeltje op het scherm. Met behulp van het shadow mask ontstaat er
een gekleurde pixel op het scherm van de monitor. Figuur 2 laat een detail
van een phoshpor-coated scherm zien.

A. phoshpor-coated deeltje
B. shadow mask
C. glas

Figuur 2 Detail zien van een phoshpor-coated scherm

Een RGB elektronenbundel schrijft het beeld op het scherm bestaande uit
een aantal horizontale lijnen.
Een beeld kan bijvoorbeeld gevormd worden door 480 lijnen van 640 pixels.

Figuur 3 Een beeld van 640 maal 480 pixles

Hoofdstuk 5 VGA interface met UP2 Education Kit - 3 -


Iedere lijn word gevormd door 640 pixels. (640 pixels in een rij)
Een beeld bestaat uit 480 lijnen. (480 pixels in een colom)
60 Maal per seconde (60 Hz) wordt een volledig scherm op het beeld van de
monitor gezet om flikkering te voorkomen. Het menselijk oog detecteert een
flikkering met een refreshrate van 30 Hz. Om interferentie van de fluorise-
rende lichtpuntjes met het shadow mask te reduceren kiest men voor een
refreshrate van 60 Hz.

De sturing van een horizontale lijn wordt gesynchroniseerd met HSYNC.


De sturing van een volledig beeld wordt gesynchroniseerd met VSYNC.

Figuur 4 Het HSYNC- en het VSYNC TTL-signaal

Figuur 5 Een volledig videoframe

Omdat een RGB-elektronenbundel een zekere tijd nodig heeft om terug te


keren(row en guard bands) duurt de scanline time 31,77µs.
Dit komt overeen met 31.77 us * 25175000 = 800 pixels/line.

Hoofdstuk 5 VGA interface met UP2 Education Kit - 4 -


5.3 De VGA industrie standaard 640 x 480 pixel mode.
De horizontale synchronisatie bestaat uit een videosignaal en een HSYNC-
signaal zoals in Figuur 6.

Figuur 6 Horizontale timing

Horizontal Timing
640 Horizonal Dots
Horiz. Sync Polarity NEG
Scanline time (A) 31.77 us * 25175000 = 800 pixels/line
Sync pulse length (B) 3.77 us
Back porch (C) 1.89 us
Active video (D) 25.17 us
Front porch (E) 0.94 us

De verticale synchronisatie bestaat uit een videosignaal en een VSYNC-


signaal zoals in Figuur 7.

Figuur 7 Verticale timing

Vertical Timing in ms
Vert. Sync Polarity NEG
Vertical Frequency 60Hz
Total frame time (O) 16.68 ms
Sync length (P) 0.06 ms
Back porch (Q) 1.02 ms
Active video (R) 15.25 ms
Front porch (S) 0.35 ms

Elke lijn heeft:


- 8 pixels front porch
- 96 pixels horizontal sync
- 40 pixels back porch

Hoofdstuk 5 VGA interface met UP2 Education Kit - 5 -


- 8 pixels left border
- 640 pixels video
- 8 pixels right border
Totaal 800 pixels per lijn

Elk beeld heeft:


- 2 lines front porch
- 2 lines vertical sync
- 25 lines back porch
- 8 lines top border
- 480 lines video
- 8 lines bottom border
Totaal 525 lijnen per beeld.

800 x 525 x 60 Hz = 25,2 MHz


Een pixel neemt ongeveer 1/25,2 MHz = 40 ns in beslag.

In Figuur 8 worden de verschillede tijden van de horizontale- en de verticale


timing weergegeven volgens de VGA industrie standaard 640 x 480.

Bron: http://www.epanorama.net/documents/pc/vga_timing.html

Figuur 8 Tijden van de horizontale- en de verticale timing

Hoofdstuk 5 VGA interface met UP2 Education Kit - 6 -


5.4 Opbouw van een beeld op een monitor.
Elke VGA monitor heeft een interne klok waarbij elke pixel wordt ge-
updated. (25,175 MHz). De periode van één pixel is dan 39,72 ns afgerond
40 ns.
Een VGA monitor wordt gerefreshed met behulp van een verticale en een
horizontale synchronisatie. De timing hiervan wordt beschreven in de VGA
industrie standaard.
In het linkse boven gedeelte van het scherm wordt de refreshcycle gestart.
Nadat het eerste pixel wordt gerefreshed, refreshed de monitor de resteren-
de pixels in de rij. Wanneer de monitor een horizontale refreshimpuls ont-
vangt start de volgende refreshcycle van een rij. Dit proces wordt herhaald
tot de laatste rij van het scherm. Wanneer het laatste pixel van de laatste rij
is gerefreshed wordt met een nieuwe verticale synchronistatie-impuls een
nieuw scherm gestart.

Om nu in VHDL een interface te beschrijven voor een VGA interface hebben


we een tweetal tellers nodig, countX- en countY.
Blokschematisch wordt deze synchronisatie met behulp van de twee tellers
weergegeven zoals in Figuur 9.
CountX generator krijgt z’n kloksignaal van 25,125MHz. Met HSync wordt
countX gereset.

Figuur 9 countX- en countY generator

Bij het schrijven van een volledige lijn wordt met HSync tellerY één positie
verder gezet.
Met VSync wordt countY gereset.

Hoofdstuk 5 VGA interface met UP2 Education Kit - 7 -


5.5 VGA interface in VHDL.
Beschrijving van countX en countY in VHDL.
(count_xy.vhd)

We gebruiken een 10-bit teller (210 = 1024) omdat we respectievelijk moeten


kunnen tellen tot 600 en 800.

Hoofdstuk 5 VGA interface met UP2 Education Kit - 8 -


5.6 Beschrijving van de synchronisatiesignalen in VHDL.

Rekening houdend met eerder beschreven VGA industrie standaard 640 x


480 kunnen we het synchronisatiegedeelte beschrijven. We gebruiken de
entity SyncGen. (syncgen.vhd)

Beschrijving van de architectuur van syncgen:

VGA interface met UP2 Education Kit - 9 -


5.7 Een verticale lijn op het scherm

We kunnen nu de interface uittesten door een verticale lijn te schrijven op


het scherm van een PC-monitor zoals in Figuur 10.

Figuur 10 Een verticale lijn op het scherm

We realiseren de entity LINE:

Figuur 11 Blokschema van LINE

We gebruiken de eerder beschreven componenten count_xy, syncgen, en


debounce.

Figuur 12 De structuur van het ontwerp LINE

Met component debounce kunnen we de verticale lijn naar rechts bewegen.


De component lpm_add_subb is een Library of Parameterized Module die
wordt toegevoegd omdat er rekenkundige bewerkingen worden uitgevoerd in
het ontwerp.

VGA interface met UP2 Education Kit - 10 -


Beschrijving van component debounce.

Figuur 13 Blokschema van DEBOUNCE

Logische schema van component debounce.

Figuur 14 Schema van component debounce

Beschrijving van de entity debounce.

Met uitgang hit laten we een verticale lijn op het scherm naar rechts bewe-
gen. (go_right)

VGA interface met UP2 Education Kit - 11 -


Volledige beschrijving van component DEBOUNCE:
(debounce.vhd)

VGA interface met UP2 Education Kit - 12 -


Volledige beschrijving van het ontwerp LINE.
(line.vhd)

VGA interface met UP2 Education Kit - 13 -


VGA interface met UP2 Education Kit - 14 -
5.8 Beschrijving van component VGA_SYNC.

Figuur 15 Blokschema van VGA_SYNC

Het Altera UP1 ontwikkelbord beschikt over een VGA-interface zoals te zien
is in Figuur 16.
.

Figuur 16 Het Altera UP1 ontwikkelbord

De volgende code genereert de horizontale- en verticale synchronisatie-


impulsen door gebruik te maken van een 10-bit teller, H_count voor de hori-
zontale teller en V_count voor verticale teller. H-count en V-count geeft een
pixel rij- en kolomadres dat kan gebruikt worden als input in andere proces-
sen. De gebruiker kan deze x en y coördinaten gebruiken om de positie te
bepalen van een pixel op het scherm. Het pixeladres wordt gebruikt om een
beeld in RGB kleur op het scherm te zetten. Het bordje beschikt over een
klok van 25,175 MHz om de nodige synchronisatiesignalen te generen vol-
gens de VGA industrie standaard 640 x 480 en volgens de timing in Figuur
8.

VGA interface met UP2 Education Kit - 15 -


Volledige beschijving van het ontwerp VGA_SYNC.
(VGA_SYNC.vhd)

VGA interface met UP2 Education Kit - 16 -


Om RGB data uit te zetten (off) wordt gebruik gemaakt van het signaal vi-
deo_on.
Video_on wordt via een and-poort gestuurd om de RGB outputs te sturen.
Video_on is laag gedurende de tijd dat de beam wordt gereset bij de start
van een nieuwe lijn of beeld.

Voor het genereren van video op het scherm wordt onderstaande code ge-
bruikt:

VGA interface met UP2 Education Kit - 17 -


Alle signalen, RGB en de sync. signalen komen rechtreeks van de uitgang
van een flipflop. Een kleine vertraging van enkelen nanoseconden resulteert
in een troebel beeld. Slechts indien alle uitgangssignalen synchroon komen
van een flipflop zullen deze op hetzelfde moment veranderen en resulteert
dit in een scherp beeld.
De pinnen van de component FLEX EPF 10K20 worden weergegeven in
Figuur 17.

Figuur 17 De pinnen van component FLEX EPF 10K20

Met behulp van “assign” interface kunnen de pinnen van component FLEX
EPF 10K20 worden toegekend.

Figuur 18 Toekenning van de pinnen via “assign” interface

VGA interface met UP2 Education Kit - 18 -


5.9 Video voorbeelden.
Een simpel video voorbeeld van interface VGA_SYNC wordt in onderstaand
schema weergegeven. Het is in principe een voorbeeld van een LED die
wordt bediend als men op drukknop PB1 drukt. Als je PB1 bediend wijzigt
de kleur van het scherm van zwart naar rood.

Figuur 19 VGA_LED.gdf

VGA_SYNC beschikt over de uitgangen pixel row- en column. Eén van


deze uitgangen kunnen gebruikt worden als ingang om bijvoorbeeld op een
bepaald pixeladres de kleur van het beeld te veranderen.

Figuur 20 VGA_BAR.gdf

Er ontstaat een beeld op het scherm bestaande uit 8 verschillende verticale


kleurenbalken.

Figuur 21 Beeld van 8 verschillende verticale kleurenbalken

VGA interface met UP2 Education Kit - 19 -


5.10 Een karakter gebaseerd ontwerp op een VGA interface.

Figuur 22 Voorbeeld van karakters op een scherm met VGA interface

De bedoeling is om in deze applicatie karakters te schrijven op het scherm


van een monitor door gebruik te maken van eerder beschreven interface
VGA_SYNC.
Om deze applicatie mogelijk te maken is het nodig om al de mogelijke karak-
ters op te slaan in een geheugen van de programmeerbare component van
Altera FLEX 10K20. Deze programmeerbare component beschikt over
SRAM cellen. (statische RAM) Dit geheugen bevindt zich in het zogenaam-
de Embedded array block (EAB). De inhoud van het geheugen kan geladen
worden met behulp van een memory-initialistie-file, *.mif.
Vanwege het beperkte geheugen in de component beperken we ons tot 40
karakters op 30 lijnen.
Elk karakter is een pixel georiënteerd beeld op een font van 8 bij 8 dot.
Om het karakter te vergroten op het scherm neemt één dot 2 pixels in be-
slag zodat een karakter 16 bij 16 pixels groot is. Dit is realiseerbaar door de
LSB van de rij- en kolom teller niet te gebruiken. Tevens biedt dit het voor-
deel dat er geen extra hardware in de component wordt ingenomen.
Met de rij- en kolom tellers wordt de kleur van een pixel beïnvloed.

Inhoud van het geheugen voor het karakter ‘A’:


Adres: font data
010 : 00011000 ; % ** %
011 : 00111100 ; % **** %
012 : 01100110 ; % ** ** %
013 : 01111110 ; % ****** %
014 : 01100110 ; % ** ** %
015 : 01100110 ; % ** ** %
016 : 01100110 ; % ** ** %
017 : 00000000 ; % %

VGA interface met UP2 Education Kit - 20 -


Figuur 23 Blokschema van het karaktergeheugen

De kolomteller selecteert elke font bit van links naar rechts in het woord van
het font geheugen als het videosignaal over de rij van het scherm beweegt.
De waarde van pixel data (‘0’ of ‘1’) wordt gebruikt als logisch niveau van het
RGB signaal.
De laagste 3 bits (rij adres) van het adres selecteert de volgende geheu-
genplaats van het karakter-font geheugen wanneer de display beweegt naar
de volgende rij.
Een 3-bit kolom-adres samen met een multiplexer wordt gebruikt om een
overeenkomstige bit uit het geheugen te halen voor een RGB-pixel.

Onderstaande entity CHAR_ROM wordt gebruikt als karakter ROM.

Figuur 24 Blokschema van CHAR_ROM

In de VHDL-beschrijving declareert men de grote van het geheugen met de


functie LPM_ROM en gebruikt men tcgrom.mif bestand om de inhoud van
het geheugen vast te leggen.

VGA interface met UP2 Education Kit - 21 -


Beschrijving van de entity CHAR_ROM
(char_rom.vhd)

Tabel 1 Geheugenmap van 64 karakters op een font van 8 X 8


char adress char adress char adress char adress
@ 00 P 20 Space 40 0 60
A 01 Q 21 ! 41 1 61
B 02 R 22 " 42 2 62
C 03 S 23 # 43 3 63
D 04 T 24 $ 44 4 64
E 05 U 25 % 45 5 65
F 06 V 26 & 46 6 66
G 07 W 27 47 7 67
H 10 X 30 ( 50 8 70
I 11 Y 31 ) 51 9 70
J 12 Z 32 * 52 A 70
K 13 [ 33 + 53 B 70
L 14 Dn arrow 34 , 54 C 70
M 15 ] 35 - 55 D 70
N 16 Up arrow 36 . 56 E 70
O 17 Lft arrow 37 / 57 F 70

VGA interface met UP2 Education Kit - 22 -


Onderstaand schema genereert een testpatroon van 40 karakters over 30
lijnen op het display van een monitor met een VGA-interface.

Figuur 25 Schema van een karkater gebaseerd ontwerp op een VGA interface

Door gebruik te maken van de RGB-inputs van entity VGA_SYNC bekomen


we witte karakters (111=RGB) op een rode achtergrond (100=RGB).
Elk karakter gebruikt een 16 x 16 pixel gebied in een 640 x 480 display ge-
bied. Omdat LSB in het pixel rij en kolom adres wordt overgeslagen neemt
elk font van het karakter een 16 x 16 pixel gebied in beslag. Nochtans ge-
bruiken we een 8 x 8 font geheugen.

VGA interface met UP2 Education Kit - 23 -


VGA interface met UP2 Education Kit - 24 -
6. Hoofdstuk 6 Elektronische tellers................................................ 2
6.1 Inleiding ............................................................................. 2
6.2 Principe van elektronische tellers. ...................................... 2
6.3 Oefening ............................................................................ 4
6.4 Principe van een digitale voltmeter. .................................... 5

Hoofdstuk 6 Elektronische tellers - 1 -


6. Hoofdstuk 6
Elektronische tellers

6.1 Inleiding

Met elektronische tellers bedoelen we de schakelingen die gebruikt worden


in frequentiemeters, toerentellers, tijdsmeters, digitale V-meters enz...
Bij elektronische tellers willen we weten hoeveel impulsen een bepaald sig-
naal bezit in één seconde, m.a.w. we willen de frequentie kennen van het
signaal.
De digitale frequentiemeter is daarom de basisschakeling van alle digitale
tellers. In alle toestellen moet de te meten grootheid omgezet worden in een
pulstrein waarvan het aantal impulsen per seconde evenredig is met de
grootte van het onbekende signaal.
In een digitale gelijkspanningsvoltmeter bijvoorbeeld zal een spanning van
1 V een pulstrein geven van 1000 Hz, 2 V betekent dan 2000 Hz, enz.
Hieronder volgen een aantal basisprincipes.

6.2 Principe van elektronische tellers.


Onderstaand blokschema geeft het principe van een 2-decaden elektroni-
sche teller.

Figuur 1 Blokschema van een 2-decaden elektronische teller.

Hoofdstuk 6 Elektronische tellers - 2 -


De werking van de schakeling kunnen we als volgt samenvatten.
Gedurende een vaste gekende tijd wordt de telpoort open gezet door het
kloksignaal FN. In die tijd telt de teller het aantal impulsen dat FX via de
poort in de teller stuurt.
Het moment dat de teller dicht gaat behoudt de teller zijn telstand.
Door het latchimpuls (L) op het tussengeheugen wordt de tellerinhoud
in het geheugen gebracht en bewaard. Hierdoor komt de stand van de teller
zichtbaar op het display.
De teller zelf mag nu gereset worden (R) zodat alles klaar staat voor een
volgende meting.

Het logisch schema voor de timing van een eenvoudige frequentiemeter


kan eruitzien zoals in Figuur 2.

Figuur 2 Logische schema v.d. timing van een eenvoudige frequentiemeter

Men gebruikt een tijdsbasis van 1 Hz (FN) een meettijd van 1 seconde.
Wanneer we gedurende 1 seconde 1000 impulsen hebben geteld (FX) dan
is de onbekende frequentie gelijk aan 1000 Hz.
Een D-flipflop wordt gebruikt als deler door 2 zodat de telpoort exact 1 se-
conde open staat en 1 seconde dicht staat.

Figuur 3 Timing van een eenvoudige frequentiemeter

Hoofdstuk 6 Elektronische tellers - 3 -


Wanneer de telpoort wordt gesloten zorgen we ervoor dat de waarde van de
teller wordt vergrendeld in een tussengeheugen (latch). Signaal Latch zorgt
hiervoor. Daarna kan de teller gereset worden met signaal Reset.

Figuur 4 Principe van een frequentiemeter

Wanneer we het blokschema uitbreiden naar een 9999-teller is het mogelijk


om frequenties op (fx) te meten tot 1 kHz, als de telpoort 1 seconde open
staat.

6.3 Oefening

Realiseer het algoritme van een eenvoudige frequentiemeter in VHDL.


Zorg voor een meetbereik van 100 Hz met een tijdbasis van 1 seconde.

Hoofdstuk 6 Elektronische tellers - 4 -


6.4 Principe van een digitale voltmeter.

Blokschema van een digitale voltmeter.

Figuur 5 Blokschema van een digitale voltmeter

Aan de ingang van de DVM voorzien we een spanning naar stroomomvor-


mer die op zijn beurt de stroom omvormt naar een impulstrein van een be-
paalde frequentie.

Hoofdstuk 6 Elektronische tellers - 5 -


Figuur 6 Spanning naar frequentieomvormer

Deze frequentie kunnen we dan meten met een frequentiemeter.


Men gebruikt bijvoorbeeld een 2000 teller met tussengeheugen. (latch)

Figuur 7 Een 2000 teller met tussengeheugen (latch)

We regelen de spanningen naar frequentieomvormer af voor een ingang van


0 tot 2 V en een uitgang van 19,99 kHz.

Deze afregeling heeft consequenties met betrekking tot de timing van de


frequentiemeter.

Wanneer we gedurende een tiende van een seconde (0,1 sec.) een meting
uitvoeren, heeft de teller bij een frequentie van 19,99 KHz maar 1999 impul-
sen geteld.

Figuur 8 Timing van de frequentiemeter

Hoofdstuk 6 Elektronische tellers - 6 -


7. Hoofdstuk 7 S/PDIF-tester met MachXO...................................... 2
7.1 Opbouw van het S/PDIF-signaal......................................... 2
7.2 Digitale audio-tester. .......................................................... 4
7.3 Werking van de digitale audio-tester................................... 6
7.4 Blokschema en implementatie van de digitale audio-tester. 7
7.5 ISPLever implementatie van de digitale audio-tester:........ 12
7.6 Het volledige schema van de digitale audio-tester ............ 14
7.7 Samenvatting ................................................................... 16

Hoofdstuk 7 S/PDIF-tester met MACHXO - 1 -


7. Hoofdstuk 7
S/PDIF-tester met MachXO

7.1 Opbouw van het S/PDIF-signaal


Geschiedenis
De digitale audio-interface bij apparatuur zoals CDspelers en DATrecorders
werd oorspronkelijk onder de aanduiding AES/EBU (Audio Engineering So-
ciety, European Broadcasting Union) ingevoerd, die vervolgens voor om-
roepzenders werd gespecificeerd.
In EBU-document Tec. 3250 van november 1985 werd een interface met
een sample-frequentie van 48 kHz (of 32kHz) en 24 audio-bits per kanaal
gespecificeerd.
Met de groei van het aantal CDspelers ontstond een consumentenversie van
de AES/EBU die door Sony en Philips werd gespecificeerd en
daardoor als Sony/Philips Digital Interface (S/PDIF) werd aangeduid.
De professionele AES/EBU-interface en de consumenten- S/PDIF-versie
werden later door de IEC (International Electrotechnical Commission) in de
standaard IEC 958 samengevoegd.
De belangrijkste verschillen tussen de professionele en de S/PDIFinterface
liggen niet in de codering van de audio-gegevens, maar onder andere in de
overdracht van extra informatie in het Channel Status Block. Hierin geeft het
eerste bit aan of er sprake is van professionele of S/PDIF-structuur. De op-
bouw van de frames en de audio-codering is voor beide versies volledig
identiek.

Subframes
De datastroom van een IEC-958-interface bestaat uit subframes,
frames en blokken.
Elk subframe bevat een sample van het audio-signaal en heeft een lengte
van 32 bits. De eerste vier bits (bit0...3) vormen een preamble voor de syn-
chronisatie. Hierbij zijn drie verschillende bitcombinaties mogelijk: B, M en W.
Preamble B geeft aan dat het hier gaat om het eerste woord van een blok,
dat is altijd het linkerkanaal.
Preamble M duidt op een normaal subframe van het linker audio-kanaal.
Tenslotte is er nog preamble W voor het rechter kanaal.
De audio-informatie is opgeslagen in de daaropvolgende 24 bits.
Worden niet alle 24 bits gebruikt, dan worden de meest significante bits op
nul gezet (bij 16 bits: bit 4...11 vast op 0 en bit 12...27 gevuld met de sam-
ple-waarde).
Het subframe wordt afgesloten met de bits validity flag, user data, channel
status en parity.
De validity flag maakt het mogelijk om ongeldige samples aan te geven, die
worden dan niet verder verwerkt.

Hoofdstuk 7 S/PDIF-tester met MACHXO - 2 -


Het bit user data geeft met een bit per subframe extra informatie zoals bij-
voorbeeld tekst.
Het channel status bit geeft ook met een bit per subframe extra informatie
over het transport. Hierbij gaat het bijvoorbeeld om zaken als sample-rate,
audio- of datamode en professionele of consumenten-mode.
Tenslotte is er nog een parity-bit voor het herkenen van transportfouten.
Er worden geen herstelwerkzaamheden uitgevoerd aan eventuele foutieve
sample-waarden, de fouten worden door interpolatie opgelost.

Figuur 1 Opbouw van een S/PDIF-signaal


a) subframe
b) frame en blok
c) biphase-mark-signaal.

Frame en blok
Een frame heeft net zoveel subframes als er audio-kanalen zijn.
Bij de gebruikelijke stereosignalen heeft een frame dus altijd twee
subframes (linker en rechter kanaal). De frames moeten met de
samplefrequentie worden getransporteerd.

Hoofdstuk 7 S/PDIF-tester met MACHXO - 3 -


Bij een CDspeler met een samplefrequentie van 44,1 kHz en een stereo
signaal is de transportsnelheid dus:

2 kanalen x 32 bits per subframe x 44,1 kHz = 2,8224 Mbit/s

Een aantal frames is weer samengevat in een blok. Een zo’n blok
bevat 192 frames, dus 192 samples per kanaal.
Een blok heeft voor de audio-gegevens geen betekenis, maar er ontstaat zo
een structuur in de extra informatie van user data bit en channel status
bit. Doordat het begin van een blok herkend kan worden middels
preamble B kan men die informatie met slechts een bit per subframe
eenduidig coderen.
In totaal ontstaat er een veld met 384 bits (2 x 192 bij stereo). Zoals eerder
is opgemerkt, is de structuur van de channel status verschillend voor de
professionele en S/PDIF-interface. Het eerste bit geeft dan ook aan of het
gaat om professionele audio of consumenten audio.

Biphase-mark-code (BMC)
Elektrisch gezien bestaat de S/PDIF-interface uit een 75-.-coaxkabel
die middels een cinch-steker verbonden is met de bron en de ontvanger.
De bron levert normaal gesproken een signaalspanning van 500 mVtt.
De ontvanger moet genoeg hebben aan een spanning van 200 mVtt om ook
gevoed te kunnen worden uit een coaxkabel van 10 m.
Voor het transport van de gegevens wordt gebruik gemaakt van een bipha-
se-mark-code, die voor elke logische één twee wisselingen van de polariteit
geeft en voor elke logische nul slechts één wisseling.
Het signaal bevat geen gelijkspanningscomponent, zodat een capacitieve
koppeling mogelijk is.
De professionele IEC-958-interface maakt gebruik van een hoger
signaalniveau (3...10 Vtt), een andere kabelimpedantie en een
symmetrische aansluiting. De bron en de ontvanger moeten galvanisch
gescheiden worden om aardlussen te voorkomen.

7.2 Digitale audio-tester.

Deze kleine schakeling kan gebruikt worden voor een snelle test van de
digitale audio-uitgang van CDspelers, DATrecorders en MiniDisc-spelers. Er
zijn maar weinig onderdelen nodig in dit ontwerp, omdat we gebruik maken
van een MachXO640C van Lattice.
MachXO Digital Audio is compatibel met alle digital audio CD bronnen die
gebruik maken van een S/PDIF of TOSLNK verbinding. (volgens AES/EBU)

Hoofdstuk 7 S/PDIF-tester met MACHXO - 4 -


Het ontwerp toont de uitstekende prestaties van de programmeerbare com-
ponent MachXO aan:
• De signaaloverdracht is digitaal van in- tot uitgang
• Eén enkele voedingspanning en interne klok
• Compatibel systeem mat alle digital audio-bronnen (S/PDIF/Toslink)

Figuur 2 EV-Board voor LCMXO640C-3TN144C

Eigenschappen EV-Board voor LCMXO640C-3TN144C


TQFP-144 witch 0,5 mm Finepitch
external Power-Supply (5 - 20 V)
linear 3V3-Voltage Regulator
25 MHz Oscillator (3V3)
8 LEDs - one Port
linear 2V5-Voltage Regulator for LVDS
2 SMA-Connectors for LVDS (not assembled)
Power-LED
Push Button Switch
Reverse Voltage Protection
JTAG programming interface (10pol + 8pol)
Afmetingen: 83 * 61 mm
Lattice-Software ISPstarter freeware

Benodigdheden:
MachXO EV-Board
TORX147PL Toslink receiver
Hoofdtelefoon – actieve luidsprekers
Hoofdtelefoon plug
Toslink fiber optic kabel

Hoofdstuk 7 S/PDIF-tester met MACHXO - 5 -


7.3 Werking van de digitale audio-tester.

Figuur 3 De verschillende aansluiting op het EV-Board

De CDspeler wordt aangesloten aan het EV-bordje met behulp van een
Toslink fiber optic kabel.
De spanning wordt opgezet en led1 gaat nog niet branden omdat er nog
geen data wordt ingelezen.
Wanneer de CDspeler wordt gestart gaat led1 branden als teken dat er data
wordt ingelezen. De muziek die gegenereerd wordt door de CDspeler is te
beluisteren via een hoofdtelefoon of actieve luidsprekers.
Met leds D3-D8 wordt het geluidsniveau van het muziekstuk weergegeven.
Wanneer met op drukknop SW drukt wordt een digital filter bediend die het
stemgeluid uit het muziekstuk haalt, standaard staat de filter in de mode
stereo.

Als Toslink receiver wordt een TORX147PL van Toshiba gebruikt.

Figuur 4 Toshiba TORX147PL

Hoofdstuk 7 S/PDIF-tester met MACHXO - 6 -


De aansluiting van de hoofdtelefoon kan rechtstreeks op de pinnen 76, 78
en GND.

Figuur 5 Aansluiting hoofdtelefoon

Wanneer gebruik wordt gemaakt van actieve luidsprekers is het nodig om


capaciteiten en weerstanden te gebruiken om het ‘POP-effect’ in te luidspre-
kers weg te halen wanneer de spanning wordt opgezet.
C9/C10 = 3,3µF en R9/R10 = 100K
Houd er rekening mee dat het audio-signaal een spanningsniveau heeft van:
-1,72 V tot +1,72 V en niet mag aangesloten worden op een high end audio-
keten.

Figuur 6 Aansluiting actieve luidsprekers

7.4 Blokschema en implementatie van de digitale audio-tester.

Blokschema van de digitale audio-tester

Figuur 7 blokschema van de digitale audio-tester

Hoofdstuk 7 S/PDIF-tester met MACHXO - 7 -


De volgende blokken worden gebruikt:
• Reset Inverter
• Klokgenerator
• Manchester decoder + Sync. Detect
• AES/EBU Deframer
• Data aligner en digitaal filter
• PWM generators (Puls With Modulation)

Reset Inverter:

Figuur 8 Reset Inverter

Dit blok inverteert het actief lage nReset signaal naar een actief hoog Reset
signaal. Het voorziet TORX147PL van een 3,3 V voeding via pin 2.

Klokgenerator:

Figuur 9 Klokgenerator

Dit gedeelte activeert de interne oscillator (17-24 MHz) en verdubbelt de


frequentie (32-48 MHz) omdat de decoder minstens een klok nodig heeft
van 23 MHz.

Manchester decoder + Sync. Detect:

Figuur 10 Manchester decoder + Sync. Detect

Hoofdstuk 7 S/PDIF-tester met MACHXO - 8 -


S/PDIF gebruikt biphase-mark-code voor het transport van gegevens. Voor
elke logische ‘1’ ontstaan er twee wisselingen van polariteit en voor elke
logische ‘0’ slechts één wisseling.

Figuur 11 Biphase-mark-code

Manchester decoder + Sync. Detect zorgt voor:


Detectie oversampeling van binnenkomende data.
Meten van de tijd tussen polariteitwisselingen wat neerkomt op een kor-
te/medium/lange pulsdetectie. Hiervoor moet de decoder beschikken over
een klokoscillator van voldoende hoge frequentie. Lange pulsen duiden op
synchronisatiepatronen (preamble). Korte pulsen duiden op actuele databits
(muziek).

Een preamble wordt vertaald naar:


X: start van kanaal A (links)
Y: start van kanaal B (rechts)
Z: start van kanaal A + start van een block

Figuur 12 Preamble Forms

Hoofdstuk 7 S/PDIF-tester met MACHXO - 9 -


AES/EBU Deframer:

Figuur 13 AES/EBU Deframer

Module AES/EBU Deframer zorgt voor het binnen lezen van de data van de
decoder.

Figuur 14 Frame/block Format

Module AES/EBU Deframer zorgt tevens voor het uitpakken van de audio-
samples.

Figuur 15 Sub-frame Format

Hoofdstuk 7 S/PDIF-tester met MACHXO - 10 -


Data aligner + digitaal filter:

Figuur 16 Sample aligner + digitaal filter

Deze module buffert de audio-samples en vormt ze om naar parallel als


input voor de PWM-modules.
De module werkt in twee modes selecteerbaar via een switch.
In default-mode geeft de data aligner 8bit stereo uit naar de PWM-modules.
Een digitale filter gebruikt een algoritme om de stem van het muziekstuk te
filteren naar een 8-bit mono-signaal voor de PWM-modules.

PWM generators (Puls With Modulation):

Figuur 17 PWM audio-generators

Deze module gebruikt twee PWM’s die werken op 32-48 MHz (int clk x 2) om
de audio-signalen te genereren.
De bekomen frequenties van de PWM’s zijn ongeveer 172 KHz, hoog ge-
noeg voor een samplerate van 44,1 KHz die gebruikt wordt door de decoder.
Een PWM-frequentie van 172 KHz laat ons toe om geen filters te gebruiken
op de PWM-uitgangen.
3de harmonische is 57 KHz
5de harmonische is 34 KHz
de
7 harmonische is 24 KHz
de
9 harmonische is 19 KHz en dit is de eerste harmonische in het audio-
frequentiebereik.

Hoofdstuk 7 S/PDIF-tester met MACHXO - 11 -


7.5 ISPLever implementatie van de digitale audio-tester:

Figuur 18 ISPLever implementatie

BUFBA en OSCC staan aangeduid met een vraagteken, maar het zijn har-
de macroblokken die in de MachXO devices zitten maar die niet 'zichtbaar'
zijn in de code. Je kan dit vergelijken met een C-programma waar een stuk-
je assembly instaat.
BUFBA is een echte buffer die men aanroept om een delay in te lassen voor
de verdubbeling van de interne klok.
OSCC is de interne oscillator die in de MachXO beschikbaar is.
De 'Place and Route' (PAR) tool weet waar hij deze items moet vinden in het
device.

Hoofdstuk 7 S/PDIF-tester met MACHXO - 12 -


Deframer en Rugged_cdr zijn zogenaamde Black Boxes.
Van deze functionele blokken wordt geen source code gebruikt maar wel
een netlist.

Bij elk van deze black boxes hoort een file met de extensie .ngo (de netlist)
die je onder de documents vindt in het project, en een .sym (symbool voor in
schematic) die gewoon in de projectdirectory terug te vinden zijn.

Het voordeel hiervan is dat complexe Intellectual Property (IP) aan gebrui-
kers kunnen geven worden om te evalueren, maar toch de eigenlijke rechten
en source kunnen behouden blijven bij Lattice.

Als gebruiker kan je toch volledig gebruik maken van deze blokken, in elke
device van de desbetreffende familie, ongeacht van package.
Je kan tevens de functionaliteit en timing simuleren met Modelsim simulatie.

Figuur 19 Sources in Project met Deframer en Rugged_CDR.ngo

Hoofdstuk 7 S/PDIF-tester met MACHXO - 13 -


7.6 Het volledige schema van de digitale audio-tester

Figuur 20 Ontwerp van de digitale audio-tester linker gedeelte

Figuur 21 Ontwerp van de digitale audio-tester rechter gedeelte


PCB van lay-out van EV-Board voor LCMXO640C-3TN144C

Hoofdstuk 7 S/PDIF-tester met MACHXO - 14 -


Figuur 22 PCB van lay-out van EV-Board voor LCMXO640C-3TN144C

Specifieke eigenschappen van de MachXO:


• Toepasbaar als niet vluchtige component
• Sleep mode: met 100 x minder vermogenverbruik
• TransFR: logica is heerprogrammeerbaar tijdens werking van het
systeem
• Embedded memory: Ram blokken tot 27K
• Programmeerbare I/O buffers naar verschillende technologieën toe
zoals; LVCMOS 3.3/2.5/1.8/1.5/1.2, LVTTL, PCI, LVDS, Bus-LVDS,
LVPECL, RSDS
• Programmeerbare oscillator met PLLs aan boord
• IEEE standaard 1149.1 Boundary Scan
• Voeding 3,3 V, 2,5 V, 1,8 V of 1,2V

Hoofdstuk 7 S/PDIF-tester met MACHXO - 15 -


7.7 Samenvatting
S/PDIF of S/PDIF staat voor Sony/Philips Digital Interface Format, ook wel
IEC 958 type II genoemd en maakt deel uit van de IEC-60958 standaard.
Dit is een collectie van hardware en low-level protocolspecificaties voor het
transporteren van digitale stereo PCM-signalen tussen verschillende appara-
ten en stereo componenten.
S/PDIF is de consumentenversie van de standaard die ook wel bekend is als
AES/EBU. Deze standaard voorziet in kleine veranderingen in het gebruikte
protocol en kan gebruikt worden i.c.m. goedkopere hardware.

Toepassingen
S/PDIF wordt hoofdzakelijk gebruikt bij CD-spelers en DVD-spelers die CDs
afspelen, maar is ook gangbaar geworden bij andere audiocomponenten
zoals MiniDiscs en moderne geluidskaarten in computers. S/PDIF is ook
populair in auto audio, waar een grote hoeveelheid kabels vervangen kan
worden door een enkele glasvezelkabel. Het voordeel van een optische
datatransmissie is, dat die immuun is voor elektrische stoorsignalen.
Een andere veel gebruikte toepassing van de S/PDIF-interface is het trans-
porteren van gecomprimeerde digitale audio zoals gedefiniëerd in de stan-
dard IEC 61937. Deze modus wordt gebruikt om een DVD-speler aan een
home theater receiver te verbinden die Dolby Digital of DTS surround sound
ondersteund.

Hardwarespecificaties
De "S/PDIF" specificatie staat verschillende typen kabels en connectors toe.
De elektrische kabels worden meestal aangeduid met "coaxiaal" en "RCA-
connector". De optische variant wordt meestal "optisch" of "TOSLINK" ge-
noemd, maar soms ook EIAJ optisch. Er bestaan omvormers om een elektri-
sche RCA S/PDIF connector om te zetten naar TOSLINK en omgekeerd,
echter meestal maar in één richting. Alle omvormers vereisen een externe
voeding. De optische versie is toepasbaar in brede variëteit van applicaties
door z'n immuniteit voor elektrische stoorsignalen.
S/PDIF is ontwikkeld van een standaard die gebruikt wordt in het gebied van
de professionele audio, ook wel bekend als AES/EBU welke gebruikt wordt
bij de Digitale Audio Tape (DAT) systemen en voor datatransmissie in pro-
fessionele studio-opnamen. S/PDIF is indentiek op protocolniveau, maar de
connectors zijn gewijzigd van XLR naar, of de elektrische coaxiale RCA-
connector of de optische TOSLINK connector. Beide zijn goekoper en mak-
kelijker in gebruik dan de XLR-connector. De kabel is ook gewijzigd van een
kabel met een impedantie van 110 Ω (Ohm) met gebalanceerde twisted pair
in de al reeds meer gangbare en dus goedkopere 75 Ω coaxiale kabel i.c.m.
de RCA connector i.p.v. de "F" connector zoals gebruikelijk bij kabeltelevisie.
S/PDIF is, in alle opzichten, een consumenten versie van het AES/EBU for-
maat.

Hoofdstuk 7 S/PDIF-tester met MACHXO - 16 -


Protocol specificaties
S/PDIF wordt gebruikt om digitale signalen te versturen in verschillen forma-
ten. De meest gebruikte formaten zijn het 48kHz formaat dat bij DAT wordt
gebruikt en het 44.1kHz formaat dat wordt gebruikt voor CD audio. Om bei-
de systemen te kunnen ondersteunen en ook andere, indien nodig, heeft het
formaat geen gedefinieerde data rate. In plaats daarvan wordt de data ver-
stuurd d.m.v. Biphase Mark Code, welke één of twee overgangen heeft per
bit, zodat de originele word klok van het signaal kan worden afgetrokken.
S/PDIF is bedoeld voor het verzenden van 20 bit audiostromen plus ander
gerelateerde informatie. Het aantal bits kan worden verlaagd tot 16 bits door
het toevoegen van voorloopnullen of tot 24 bits door de extra informatie na
te sturen.
Het low-level protocol is bijna hetzelfde zoals bij de AES/EBU standaard en
wordt beschreven in het AES/EBU artikel. Het enige verschil is het "kanaal-
statusbit".

De kanaalstatusbitt in de S/PDIF
Er is één kanaalstatusbit in elke subframe, waarbij elk audioblok een 192
bits lang is. Dit betekent dat er 192/8 = 24 bytes beschikbaar zijn in elk au-
dioblok. De betekenis van het kanaalstatusbit is compleet verschillend bij
AES/EBU en de S/PDIF.
Bij de S/PDIF is het 192 bit woord verdeel in 12 woorden van elk 16 bits. De
eerste 6 bits van het eerste woord is een controlecode. De betekenis van de
bits in het controlecode zijn weergegeven in onderstaande tabel:

Hoofdstuk 7 S/PDIF-tester met MACHXO - 17 -


Hoofdstuk 7 S/PDIF-tester met MACHXO - 18 -
8. Hoofdstuk 8 Technologie van programmeerbare logica ............ 3
8.1 Inleiding ............................................................................. 3
8.2 Voordelen bij het gebruik van PLD’s ................................... 6
8.2.1 PLD’s zijn (her)programmeerbaar........................... 6
8.2.2 Een PLD bespaart ruimte op de printplaat .............. 6
8.2.3 Een PLD is verenigbaar met discrete componenten 6
8.2.4 We kunnen de inhoud beveiligen tegen spiekers .... 6
8.2.5 Een PLD schakelt relatief snel .............................. 6
8.3 Opbouw van programmeerbare logische bouwstenen......... 7
8.3.1 Bipolaire fuse-based verbindingen.......................... 7
8.3.2 Floating gate verbindingen ..................................... 8
8.3.3 Static-RAM verbindingen........................................ 8
8.3.4 PAL-architectuur (Programmable Array Logic)........ 9
8.4 De macrocellen van een PAL ........................................... 11
8.4.1 De macrocellen van de 22CV10A......................... 11
8.4.2 De Security Cell ................................................... 17
8.4.3 De elektronische handtekening............................. 17
8.5 MACH 4 CPLD FAMILY ................................................... 18
8.5.1 Product-term array: .............................................. 19
8.5.2 Logic Allocator:..................................................... 20
8.5.3 Macrocell: ............................................................ 20
8.5.4 Output Switch Matrix: ........................................... 22
8.5.5 Input Switch Matrix: .............................................. 22
8.6 isp-technologie................................................................. 24
8.6.1 De JTAG-interface en het Boundary Scan-proces. 24
8.6.2 Interfaces bij isp-componenten ............................. 27
8.6.3 De LSC Lattice interface....................................... 27
8.6.4 Wire ispJTAG Interface volgens IEEE 1149.1 ....... 28
8.6.5 isp-design en implementatie ................................. 29
8.6.6 Design flow .......................................................... 30
8.6.7 Dataformaat, JEDEC-bestand .............................. 31
8.7 Commerciële producten CPLD’s en FPGA’s..................... 33

Hoofdstuk 8 Technologie van programmeerbare logica - 1 -


8.7.1 Het CPLD-concept van Altera MAX familie ........... 33
8.7.2 Het CPLD-concept van Lattice.............................. 35
8.7.3 Field-Programammable Gate Arrays..................... 36
8.7.4 Altera FLEX 10K als FPGA................................... 39
8.7.5 Het FPGA-concept van Lattice ............................. 42
8.8 Samenvatting: .................................................................. 44
8.9 Oefeningen ...................................................................... 46

Hoofdstuk 8 Technologie van programmeerbare logica - 2 -


8. Hoofdstuk 8
Technologie van programmeerbare logica

8.1 Inleiding

In de digitale elektronica beschikt men over een brede keuze aan compo-
nenten om logische schakelingen te ontwikkelen.
De ‘conventionele’ IC’s uit de standaard logica, ook wel discrete logica ge-
noemd (TTL, CMOS) voeren een vaste functie uit, gedefinieerd door de fa-
brikant van de component. De gebruiker dient een aantal verschillende
componenten met elkaar te verbinden om de gewenste schakeling op te
bouwen. Deze werkwijze heeft het voordeel van zijn populariteit.
Wanneer men enkel de componenten in rekening brengt, kan ze goedkoop
worden genoemd. Een nadeel is dat men, zelfs voor een relatief eenvoudige
schakeling, snel een grote hoeveelheid componenten en de overeenkomsti-
ge ruimte op de gedrukte schakeling (PCB) nodig heeft.
Elke wijziging van het ontwerp resulteert in een aanpassing van de PCB
layout.
De ontwikkelingstijd voor dergelijke schakelingen is vrij lang met een van-
zelfsprekende invloed op de kostprijs.

Een ASIC (Application Specific Integrated Circuit) is een IC waarvan de


functie eveneens specifiek is voor een toepassing, maar bepaald wordt door
de gebruiker. ASIC’s zijn opgebouwd uit een groot aantal logische cellen:
poorten, flipflop’s, en zelfs meer complexe functie’s zoals controllers, RAM
enz.. De realisatie van een ASIC vergt echter productietechnieken die enkel
door een gespecialiseerde fabrikant kunnen worden uitgevoerd.
Ondanks de hoge integratiegraad kunnen ook hier de ontwikkelingstijden vrij
lang zijn, zeker indien tijdens de ontwerpfase fouten worden gemaakt en de
IC’s opnieuw geproduceerd moeten worden.
Om rendabel te zijn dienen deze bouwstenen in grote aantallen te worden
aangemaakt.
Een programmeerbare logische bouwsteen of PLD (Programmable Logic
Device) is een IC dat door de gebruiker zelf kan ‘geconfigureerd’ worden om
een bepaalde logische functie uit te voeren. PLD’s vervangen meestal een
hele reeks discrete componenten.
Zij bestaan uit cellen samengesteld uit poorten en (eventueel) flipflop’s die
via een bepaalde procedure intern aan elkaar worden gekoppeld tot een
schakeling met de door de gebruiker gewenste functionaliteit. Dit proces is
dikwijls omkeerbaar.
Een geconfigureerde (geprogrammeerde) PLD kan dan in zijn oorspronkelij-
ke toestand hersteld worden. Dit betekent dat de verbindingen tussen de
logische cellen ‘gewist’ worden en door andere kunnen vervangen worden,
zodat een IC-bouwsteen met een nieuwe functie ontstaat. Dit is vooral be-
langrijk tijdens de ontwerpfase, zodat fouten snel kunnen gecorrigeerd wor-
den.

Hoofdstuk 8 Technologie van programmeerbare logica - 3 -


Een PLD koppelt de voordelen van discrete componenten aan de voordelen
van ASIC’s:

• Eenvoud in ontwerp en productie, zonder tussenkomst van een ge-


specialiseerd fabrikant.

• De grote verscheidenheid van de op de markt zijnde componenten


voor programmeerbare logica betreffende werkingssnelheid en ver-
bruik van energie laat de gebruiker toe een gepaste keuze te maken
in functie van de te realiseren toepassing(en).

• Eenvoudige gedrukte schakeling. De PCB is sterk vereenvoudigd


omdat het aantal bouwstenen vermindert. Bovendien bieden PLD’s
een vrij grote flexibiliteit in het plaatsen van in- en uitgangspinnen.
Daar de meeste functies van de schakeling intern worden gereali-
seerd, kan men beginnen met het ontwikkelen van de PCB lay-out
op het ogenblik dat de in- en uitgangen gekend zijn. De werkelijke
details van het inwendige van een PLD kunnen dan onafhankelijk
van het eindontwerp worden uitgewerkt. Noodzakelijke aanpassin-
gen kunnen uitgevoerd worden binnen de PLD en hebben geen in-
vloed meer op de PCB lay-out.

• Snelheid is één van de hoofdredenen waarom ontwerpers PLD-


bouwstenen gebruiken. De PLD-elementen kunnen dikwijls betere
prestaties leveren dan de snelste discrete logica. De looptijd van de
signalen is kort vanwege de zeer korte verbindingen binnen de
bouwsteen.

• Daar PLD’s worden gebruikt om meerdere discrete schakelingen te


vervangen, zal het energieverbruik van een ontwerp zeker lager zijn
dan dat van de gecombineerde discrete componenten samen.

• De betrouwbaarheid is een gebied waar meer en meer zorg aan be-


steed wordt. De ontwerpen worden steeds groter en complexer en
dit heeft meerdere chips voor gevolg. Meerdere chips betekenen
een kleinere betrouwbaarheid van het ontwerp, er zijn "meer dingen
die verkeerd kunnen gaan". Een oplossing om het aantal chips in
een systeem te reduceren zal bijdragen tot een grotere betrouw-
baarheid. Een benadering met programmeerbare logica kan een be-
trouwbaarder oplossing bieden, daar het ontwerp een kleiner aantal
elementen vereist. Door een vermindering van het aantal chips kan
men kleinere PCB's gebruiken. Dit vermindert overspraak en andere
potentiële stoorbronnen waardoor het hele ontwerp mooier en be-
trouwbaarder wordt.

Hoofdstuk 8 Technologie van programmeerbare logica - 4 -


• Voor ieder praktisch ontwerp moeten de kosten binnen de perken
blijven. De kost is bijna altijd een factor bij het overwegen van een
nieuw ontwerp of bij een ontwerpverandering. Maar, een be-
rekening van de totale ontwerpkost kan misleidend zijn als men niet
alle aspecten ervan beschouwt. Veel van de kosten zijn moeilijk in te
schatten. Het is bijvoorbeeld moeilijk het marktverlies van het pro-
duct, te wijten aan een te late introductie, te beoordelen. De grootste
voordelen tegenover een discreet ontwerp bekomt men door het feit
dat een enkele PLD verschillende discrete chips kan vervangen. De
ingenomen ruimte op een gedrukte schakeling wordt gemiddeld met
25% verminderd als men met PLD's werkt.

• De manier van ontwerpen wordt sterk vereenvoudigd door de ont-


werpmiddelen die nu op de markt zijn. Ontwerpsoftware en pro-
grammeerbare componenten laten toe ontwerpen te implementeren
met een minimum aan tijdverlies. Simulatie laat ons toe het ontwerp
functioneel te testen vooraleer het element geprogrammeerd wordt.

Om al deze redenen zal de programmeerbare logica meer en meer de voor-


keur krijgen boven de klassieke oplossingen met discrete componenten.
Wat de verdere indeling van de programmeerbare logische bouwstenen in
PLD’s, FPGA’s (Field Programmable Gate Arrays) en CPLD’s (Complex
Programmable Logic Devices ) betreft onthouden we enkel dat dit te maken
heeft met de interne structuur, de oplopende inwendige complexiteit en het
steeds groter wordende aantal logische cellen per IC in de vermelde volgor-
de van PLD, over FPGA tot CPLD.
Deze indeling kan nog meer worden verfijnd en verschilt soms per fabrikant.

Digitale logica

Standaard Logica Programmeerbare Logica ASIC’

TTL - 74xx CMOS – 4xxx PLD’s FPGA’s CPDL’s

Hoofdstuk 8 Technologie van programmeerbare logica - 5 -


8.2 Voordelen bij het gebruik van PLD’s
8.2.1 PLD’s zijn (her)programmeerbaar
We kunnen logica ontwerpen aan de hand van een pro-
grammeertaal zoals ABEL-HDL, AHDL, VHDL, … waardoor
het ontwerp veel sneller vordert. Laten we hierbij eens een
steekje vallen, dan kan de component meestal opnieuw
geprogrammeerd worden. Programmeren duurt enkele
seconden… Opnieuw te programmeren types vinden we
terug in de window-versie (voorzien van een venstertje) of
als elektrisch te wissen PAL. De types met een venstertje
worden met UV-licht gewist en deze laten dan enkele minuten op zich wach-
ten.
8.2.2 Een PLD bespaart ruimte op de printplaat
Omdat PAL technologie verschillende soorten poorten
en allerhande andere logica in zich draagt, kan een
volledige schakeling in één PAL worden
ondergebracht.

8.2.3 Een PLD is verenigbaar met discrete componenten


Een PAL is meestal van huize uit een CMOS-
component. Hij is voorzien van de nodige stuurlogica
om de gekende andere technologieën te kunnen ver-
vangen. We moeten echter wel rekening houden met
zijn fan-in en fan-out.

8.2.4 We kunnen de inhoud beveiligen tegen spiekers


Een PAL biedt de mogelijkheid om een protect bit of
security bit aan- of uit te zetten. Het wordt hierdoor
eenvoudiger om een digitaal ontwerp te beschermen
tegen ongewenst kopiëren.

8.2.5 Een PLD schakelt relatief snel


Normalerwijze bouwen we met een PAL in feite enkele
twee lagen structuur op, waardoor de totale doorlooptijd
van het signaal beperkt blijft. Uiteraard zal deze tijd
beduidend verhogen wanneer we uitgangssignalen gaan
teruglussen omdat bijvoorbeeld de gewenste functie te
complex is voor verwerking in één stap. Hierdoor gaat
dan ook de twee lagen structuur verloren.

Hoofdstuk 8 Technologie van programmeerbare logica - 6 -


8.3 Opbouw van programmeerbare logische bouwstenen
Men kan de programmeerbare logische bouwstenen volgens allerlei criteria
indelen. We beperken ons hier tot een indeling volgens de technologie
waarmee de interne logische cellen met elkaar worden verbonden
tot een schakeling. Bij PLD's worden de logische functies gerealiseerd door
de "op elektrische wijze" doorverbinden (al dan niet omkeerbaar) van de
cellen die in de chip aanwezig zijn. Dit kan echter ook gebeuren door het
verbreken van bestaande, niet gewenste verbindingen. Men onderscheidt
daarbij een aantal verschillende verbindingsvormen.

8.3.1 Bipolaire fuse-based verbindingen


Bij deze techniek worden de functies geprogrammeerd door alle niet ge-
wenste verbindingen op elektrische wijze "door te smelten" zoals een zeke-
ring. De eventueel te verbreken verbindingen zijn gerealiseerd als weer-
standselement of als PN-overgang (diode, transistor). Dit onomkeerbare
principe vindt men onder andere terug bij PROM’s en PAL's (Programmable
Array Logic).

Figuur 1 Basic PAL Architecture

Hoofdstuk 8 Technologie van programmeerbare logica - 7 -


8.3.2 Floating gate verbindingen
In dit geval gebruikt men erasable (wisbare) cellen (zoals bij bepaalde ge-
heugen-IC’s) om de interne verbindingen te realiseren. Correctie van fouten
of het maken van een nieuwe toepassing met dezelfde chip is hier eenvou-
dig.
Bij de EPLD’s (Erasable Programmable Logic Device) wordt de
oorspronkelijke toestand hersteld door belichting met UV-licht ( zoals bij
EPROM geheugens).
Bij de EEPLD’s ( Electrically Erasable PLD’s) gebeurt dit langs elektrische
weg (zoals bij EEPROM geheugens) en kan het (her)configureren of
(her)programmeren eventueel zelfs gebeuren terwijl het IC in de (niet actie-
ve) schakeling is opgenomen (in-circuit programming).

8.3.3 Static-RAM verbindingen


Bij sommige PLD's worden de verbindingen gerealiseerd door de toestanden
(0 of 1) van statische RAM-geheugencellen. Dit geeft geheel nieuwe moge-
lijkheden. Door dergelijke PLD's samen met een microcontroller of micropro-
cessor in een schakeling op te nemen, is het mogelijk deze schakeling
dynamisch aan te passen aan de toepassing. De logica kan zeer snel van
aard veranderen, zonder dat er ook maar één enkele wijziging aan de be-
drading gebeurt. De logicaschakeling wordt geladen vanuit een (eventueel
extern) processorgeheugen en zal onmiddellijk de nieuwe functie realiseren.

Figuur 2 Basis Pal Architecture

Hoofdstuk 8 Technologie van programmeerbare logica - 8 -


8.3.4 PAL-architectuur (Programmable Array Logic)
Bij nadere studie van het grote aanbod PLD's, die vaak slechts op enkele
details verschillen, blijkt dat het in feite gaat om een beperkt aantal concep-
ten en varianten daarvan. De databoeken van PLD-leveranciers tonen de
interne opbouw van de componenten in de vorm van een principeschema.
De kunst bestaat er in om, in deze steeds complexere schema's, een basis-
concept en de daarop aangebrachte extra voorzieningen te herkennen. We
beperken ons tot het veel gebruikte PAL-concept.
In onderstaande figuur lijken de EN-poorten slechts één ingangslijn te heb-
ben.

Figuur 3 PAL 18CV8

Deze lijn refereert echter naar de productlijn. De lijnen die loodrecht op de


productlijnen van de EN-poorten staan vormen de mogelijke ingangen. Deze
figuur toont een PAL-cel met 8 mogelijke producttermen met 36 mogelijke
ingangen, afkomstig van 18 ingangspinnen. Er wordt hier, symbolisch,
slechts één ingang van de cel voorgesteld.
Een PLD bevat steeds meerdere van dergelijke cellen, ook wel macrocellen
genoemd, met gemeenschappelijke ingangslijnen.
De PAL-architectuur wordt veel toegepast, onder andere in EPLD’s en
EEPLD’s. Bij deze architectuur is de EN -matrix (AND-array) programmeer-
baar. Op elke EN-poort worden alle ingangsvariabelen aangeboden. Met
behulp van de te maken of te verbreken verbindingen kan, door programme-
ring, worden bepaald welke signalen door een EN-poort gebruikt worden. De
uitgang van elke EN-poort komt op een OF-poort terecht (som van product-
termen = sum of products = SOP).
De producttermen zijn dus gegroepeerd als vaste ingangen van een OF-
poort. Het aantal ingangen van de OF-poort beperkt het maximale aantal te
sommeren producttermen.
In een PLD met PAL-architectuur worden dus door de programmering de
gewenste producttermen vastgelegd. Alle producttermen die dan aanwezig
zijn worden naar buiten gevoerd.
Het inverteren van ingangsvariabelen gebeurt dadelijk na het bufferen van
de ingang. We hebben dus alle logische elementen in huis om een volwaar-
dige combinatorische schakeling op te bouwen. Dikwijls is een PAL nog
voorzien van instelbare macrocellen, vlak achter de of-poort, om een uit-
gangtype te kiezen of om sequentiële circuits te kunnen blazen.

Hoofdstuk 8 Technologie van programmeerbare logica - 9 -


Merk op dat de en-poorten welke we in hun geheel niet nodig hebben, de
schakeling niet zullen beïnvloeden.
Wanneer we immers alle ingangen van deze poorten intact laten, dan geldt:

A . /A = 0

De desbetreffende en-poort zal hierbij dus nooit een “1” produceren op de


ingang van de of-poort waarmee ze verbonden is.

We merken even op dat het aantal en-poorten per of-poort bij het type
18CV8 vast ligt op 8 en deze symmetrisch opgebouwd zijn.
Bij het type 22CV10A is dit aantal variabel naargelang welke uitgang men
kiest en de en-poorten zijn asymmetrisch opgebouwd.
Sommige uitgangen bevatten of-poorten waar vrij veel en-poorten mee ge-
koppeld zijn, andere bezitten heel wat minder en-poorten.
Wanneer de PAL asymmetrisch is opgebouwd houdt men best rekening met
de complexiteit van de te realiseren functie.
Is deze vrij groot, dan kiest men best een uitgang met veel en-poorten aan
de of-poort. Is de te realiseren functie vrij eenvoudig, dan kiest men best een
uitgang welke minder en-poorten bezit aan de of-poort.
Hierdoor wordt de bezetting van de PAL efficiënter en zul je hem zo volledig
mogelijk kunnen benutten.
De ontwikkeltool ispLEVER van Lattice gebeurt dit automatisch en worden
de producttermen automatisch optimaal gekozen, zodat er complexere
schakeling kunnen ontworpen worden in een vrij kleine PLD die de 22CV10
is. Zie onderstaande figuur.

Figuur 4 PAL 22CV10

Hoofdstuk 8 Technologie van programmeerbare logica - 10 -


8.4 De macrocellen van een PAL
Meestal bevat een PAL tegenwoordig “macrocellen”. Een macrocel kan men
in feite beschouwen als een digitale schakeling vlak achter de uitgang van
de of-poort voor het realiseren van een uitgang. Deze macrocel bevat één of
meerdere multiplexers, waarvan de adreslijnen worden bepaald door specia-
le programmeerbare configuratiebits.
De configuratiebits worden gezet of terug gezet d.m.v. zogeheten “attribu-
ten”. Deze vinden we in elke geschikte HDL-taal terug onder de keywords of
identifiers die eigen zijn aan de HDL-taal.
Door dus deze attributen te declareren in de broncode, worden de configura-
tiebits juist gezet, welke de adreslijnen van de multiplexers besturen. Hier-
door creëren we in feite de gewenste signaalweg vanaf de uitgang van een
of-poort tot aan de uitgangspin van onze PAL.
Bij het doorlopen van de gekozen signaalweg kunnen we onze functie nog
verder laten beïnvloeden. Hiervoor zijn inverters, flipflops, set, reset, terug-
koppelingen naar de en-matrix, enz… voorzien in de macrocel vooraleer we
onze PAL echt via een uitgangspin verlaten.
Uiteraard moeten de digitale componenten die het signaal moeten beïnvloe-
den wel hiervoor aanwezig zijn in onze macrocel. We dienen hiermee reke-
ning te houden bij de keuze van een PAL.

8.4.1 De macrocellen van de 22CV10A


Situering van de macrocel
De eigenlijke macrocel bevindt zich in het kader met dikke zwarte rand.
Links hiervan vinden we de of-poort waarvoor de macrocel een functie moet
routeren. Per functie hebben we een of-poort met bijhorende macrocel. Aan
de verschillende ingangen van onze of-poort vinden we de uitgangen terug
van de verschillende en-poorten die met onze of-poort zijn verbonden. Het is
eigenlijk vlak vóór de poorten dat we de diodematrix terugvinden die de pro-
grammeerbare zekeringen bevat.

Figuur 5 Macrocell PAL 22CV10A

Hoofdstuk 8 Technologie van programmeerbare logica - 11 -


Signalen die de macrocel binnenkomen
We zien dat de uitgang van de of-poort de macrocel binnengaat en vindt ook
een “output enable”-stuursignaal om de uitgangsbuffer op ingang of uitgang
te configureren. De en-poort voor dit “output enable (FEN)” signaal kunnen
we aanspreken vanuit onze broncode m.b.v. een sleutelwoord. Dit is ook zo
voor “Synchronous Preset (SP)” voor het zetten van de flipflop en de “Asyn-
chronous Clear (AC)” voor het terugzetten van de flipflop. Het kloksignaal
(Clk), noodzakelijk voor de werking van de flipflop, kunnen we hardwarema-
tig aanleggen op pin 1 van de pal. Merk ook op dat een pal steeds werkt met
D-flipflops welke niet afzonderlijk te klokken zijn. Het laatste ingangssignaal
dat mogelijk is, komt van onverwachte zijde, de I/O-pin. Wanneer we immers
de output buffer uitschakelen met “output enable”, dan kunnen we via de
bijhorende I/O-pin een signaal de macrocel binnen sturen naar onze en-
matrix, om daar mee te spelen bij het bepalen van uitgangstoestanden. We
spreken hier van “External Feedback (EF)”. Merk op dat hiervoor de in-
gangsselector juist moet staan. Dit signaal komt op de en-matrix binnen via
een “true / complement buffer”. Hierdoor wordt elk stuursignaal naar de pal
gebufferd om de signaalbron niet te belasten. De ingangsselector laat hier
enkel nog toe de gevormde functie uit de matrix rechtstreeks terug de matrix
in te sturen via “registered feedback (RF)”. Bij het type 18CV8, is ook nog
rechtstreekse combinatorial feedback mogelijk.

Signalen die de macrocel verlaten


Wanneer we de uitgangsbuffer niet actief zetten door “output enable” uit te
zetten, dan kan er geen enkel signaal de macrocel nog uit. De uitgang van
de macrocel heeft dan een zeer hoge impedantie, die het mogelijk maakt om
een pal te gebruiken op een gemeenschappelijke bus zoals een adresbus,
controlebus,… e.d.
Activeren we de uitgangsbuffer wél met een “output enable” signaal, dan zijn
er verschillende signaalwegen mogelijk. We kunnen een combinatorisch
gevormde functie door de macrocel leiden via de bovenste signaalweg van
de uitgangslector. Er zal op deze wijze niets aan de functie wijzigen. Hier-
door komt het signaal naar buiten zoals het gevormd was aan de uitgang
van de of-poort. De functie blijft combinatorisch en zal ook niet van teken
veranderen, ze komt actief hoog naar buiten “Combinatorial High, CH”. Ui-
teraard mag aan de nu gebruikte I/O-pin géén ingangssignaal liggen, omdat
de uitgangsbuffer signalen vanuit de pal naar buiten zal sturen!
Wanneer we het combinatorisch gevormde signaal één ingang lager in de
uitgangslector sturen, wordt onze functie omgekeerd nadat ze door de of-
poort gevormd werd. Het signaal blijft wel combinatorisch “Combinatorial
Low, CL”.

We kunnen onze combinatorische functie vanuit de of-poort door een flipflop


sturen, waardoor ze één klokperiode later op de uitgangen van de flipflop
verschijnt. Kiezen we m.b.v. de uitgangslector voor de normale uitgang van
de flipflop, dan verschijnt het signaal “Registered High (RH)” aan de uitgang
van de macrocel. Kiezen we via de uitgangslector voor de inverse uitgang

Hoofdstuk 8 Technologie van programmeerbare logica - 12 -


van de flipflop, dan verschijnt het signaal “Registered Low (RL)” aan de uit-
gang van de macrocel. Merk op dat het latchen van de data gebeurt op de
stijgende flank van de klok.

Besturen van de macrocel


De macrocel kan op verschillende wijzen bestuurd of geconfigureerd wor-
den. Om de flipflop te gebruiken leggen we op pin 1 van de pal een klok-
signaal op TTL- niveau, net zoals de voedingsspanning van de pal. De fre-
quentie van dit kloksignaal mag oplopen tot ongeveer 33 MHz. Uiteraard
hangt het precieze cijfer af van het type pal dat men kiest. Merk op dat bij
een pal de het kloksignaal meestal gemeenschappelijk is voor alle aan-
wezige macrocellen wat bij een (E)PLD dikwijls niet zo is. De data-ingang
van de D-flipflop hangt rechtstreeks aan de of-poort die de macrocel vooraf
gaat. Het signaal op de D-ingang is dus via de en-matrix te programmeren.
De “synchronous preset” en de “asynchronous clear” zijn te program-
meren via hiervoor gereserveerde sleutelwoorden in de HDL-taal die men
gebruikt. Het asynchroon zetten van de flipflop kan op elk willekeurig tijdstip
gebeuren. Het terugzetten gebeurt normalerwijze synchroon, dus op de vol-
gende stijgende flank van de klok. Willen we het karakter van deze bestu-
ringslijnen wijzigen, dan moeten we dit expliciet zo programmeren.

Wanneer we de “output enable” willen programmeren en hierdoor dus de


uitgangsbuffer willen besturen, dan kan dit ook via hiervoor gereserveerde
sleutelwoorden in de HDL-taal. Deze “output enable” kan dynamisch ge-
bruikt zeer handig zijn om de pal bruikbaar te maken op een gemeenschap-
pelijke bus of bestuurbaar te maken door een busmanager. We kunnen deze
controlelijn eveneens statisch gebruiken. Wanneer we immers de I/O-pin
achter de macrocel als uitgang wensen te gebruiken, dan zetten we “output
enable” actief. Uiteraard mag er nooit een ingangssignaal op de I/O-pin
staan als “output enable” actief is! Moet de I/O-pin dienen als ingang, dan
zetten we “output enable” non-actief.
Verder zijn er nog twee configuratiebits (A en B) beschikbaar die we even-
eens kunnen programmeren vanuit onze HDL-taal. We maken hiervoor ge-
bruik van zogenaamde attributen, welke pal-afhankelijk zijn. In de source-
code of broncode wordt immers steeds aangegeven over welk type pal het
gaat. Hierdoor kent de HDL-compiler de eigenschappen van de gebruikte
pal en zal hij dus ook de beschikbare attributen kennen van de gebruikte
component. Door gebruik van deze attributen worden de configuratiebits op
éénduidige wijze ingesteld. Hierdoor zullen de adreslijnen van de ingangsse-
lector en de uitgangsselector bepaald worden, waardoor beide multiplexers
in een bepaalde stand worden geprogrammeerd. Daarmee is de uiteindelijke
signaalweg vanaf de of-poort tot aan de I/O-pin bepaald. Merk op dat
“output enable”, “synchronous preset” en “asynchronous clear” dynamisch
programmeerbaar zijn, terwijl de configuratiebits d.m.v. de attributen enkel

Hoofdstuk 8 Technologie van programmeerbare logica - 13 -


statisch worden gebruikt. Volgende tabel laat zien hoe het gesteld is met de
twee configuratiebits van de 22CV10A:

Tabel 1 Mogelijke instellingen van een macrocell PAL 22CV10

Merk op dat we beschikken over 2 bits, dus 22 = 4 mogelijke configuraties,


welke hier volledig voorzien zijn. Bit “B” wordt echter voor beide multiplexers
gebruikt, waardoor deze adreslijn niet volledig onafhankelijk meer werkt. We
zien dat we voor de ingangsselector maar één bit (“B”) over houden. Hier-
door is er maar keuze tussen twee manieren van terugkoppelen: “RF of EF”.
Bij het type 18CV8 hadden we meer terugkoppelmogelijkheden. De uitgang
blijft echter even soepel instelbaar.
Soorten Programmable Array Logic:
Hierover kunnen we in principe vrij kort zijn. Normalerwijze geven de eerste
letters van het type een identificatie van de fabrikant. De cijfers vooraan in
het typenummer geeft het totaal aantal mogelijke ingangen weer. In het mid-
den van het type krijgen we een identificatie van de inwendige technologie
en de aard van de pal. De cijfers die hierop volgen geven het totaal aantal
mogelijke uitgangen weer. Meestal volgt hierop een streepje, gevolgd door
een cijfer. Dit laatste cijfer is meestal een kenteken voor de te verwachten
propagation delay time en vormt dus onrechtstreeks een indicatie van de
snelheid. Enkele voorbeelden:
10H8 Een ouder type met max. 10 ingangen en
max. 8 uitgangen, welke actief Hoog zijn,
nog in TTL-technologie. De “C” voor CMOS
technologie ontbreekt.
16L8 Een ouder type met max. 16 ingangen en
max. 8 uitgangen, welke actief Laag zijn,
nog in TTL-technologie.
20R6 Een ouder type met max. 20 ingangen en
max. 6 uitgangen, voorafgegaan door een
flipflop. R betekent: “Registered”.
PEEL 18CV8 Een modern type van fabrikant ICT met
max. 18 ingangen en max. 8 uitgangen,
voorzien van macrocellen (V) in (C)MOS
technologie.
PEEL 22V10-25 Een modern type van ICT met max. 22 in-
gangen, max. 10 uitgangen, voorzien van
macrocellen (V), toch nog in TTL technolo-
gie met propagation delay van max. 25 ns.
isp22CV10A-5 Een zelfde type, deze keer van Lattice,
voorzien van isp-technologie, gebouwd in
CMOS met 5 ns propagation delay.

Hoofdstuk 8 Technologie van programmeerbare logica - 14 -


Block diagram van de PAL 22CV10

Figuur 6 Blokschema van een PAL 22VC10

Pin Configuration

Figuur 7 Verschillende behuizingen

Hoofdstuk 8 Technologie van programmeerbare logica - 15 -


Figuur 8 PAL22CV10 Logic Array Diagram

Hoofdstuk 8 Technologie van programmeerbare logica - 16 -


Figuur 9 Spec’s van de PEEL22CV10

8.4.2 De Security Cell

Om te voorkomen dat een uitgeleverde (dus in de applicatie gemonteerde)


ispGAL wordt uitgelezen en gekopieerd, kan de zogeheten Security Cell
gezet worden. Als dat eenmaal is gebeurd, kan niemand de inhoud van de
ispGAL uitlezen. Deze mogelijkheid kan van pas komen wanneer het IC in
een dongle als kopieerbeveiliging voor (dure) software wordt toegepast. Om
die reden beveelt Lattice overigens aan om bij het programmeren van een
isp-IC via een printerpoort aangesloten download-kabel een eventueel al
aanwezige dongle te verwijderen – om te voorkomen dat die per ongeluk
wordt gewist. Een ispGAL-IC kan, ook als de Security Cell gezet is, opnieuw
worden geprogrammeerd – waarbij de Security Cell al dan niet opnieuw kan
worden gezet. Door dat herprogrammeren wordt de oorspronkelijke inhoud
onherroepelijk gewist. Het is dus absoluut onmogelijk de inhoud van een
beveiligd IC te ‘kraken’.

8.4.3 De elektronische handtekening

In een ispGAL is een geheugenbereik van 64 bits gereserveerd voor de


opslag van ‘willekeurige’ (applicatiespecifieke) gegevens – bijvoorbeeld ver-
sienummer, aanmaakdatum, klantnummer enz.. Deze ‘elektronische hand-
tekening’ kan te allen tijde worden uitgelezen, ook wanneer de Security Cell
gezet is. Ook kan dit geheugenbereik op elk moment opnieuw worden ge-
programmeerd.
Wanneer de gehele ispGAL opnieuw wordt geprogrammeerd, dan wordt
daarbij eveneens de elektronische (signature) gewist – om te voorkomen dat
na het programmeren nog gegevens staan die bij een andere versie horen.
Zoiets kan immers tot tragische misverstanden leiden!

Hoofdstuk 8 Technologie van programmeerbare logica - 17 -


8.5 MACH 4 CPLD FAMILY
(Complex Programmable Logic Device) Features:
• E2CMOS 3.-V & 5-V CPLD
• Flexible architecture
• High speed
• 32 tot 256 macrocells; 32 tot 384 registers
• 44 tot 256 pin in PLCC, TQFP en BGA behuizingen
• Programmeerbaar met ispLEVER van Lattice

M4-64/32 bevat:
• 64 Macrocells
• 32 I/O Pins

Functionele beschrijving:
De MACH4 family bestaat uit verschillende PAL-blocks verbonden met een
Centrale Switch Matrix.

Figuur 10 CPLD MACH4

Een PAL-block bevat:


• Product-term array
• Logic allocator Macrocells
• Output switch matrix
• I/O cells Input switch matrix
• Clock generator

Hoofdstuk 8 Technologie van programmeerbare logica - 18 -


8.5.1 Product-term array:

De product-term array bavat de basislogica.


De inputs naar de AND gates komen van de central switch matrix (Table5).

Tabel 2 Pal Block Inputs

Figuur 11 Product-term aray

Hoofdstuk 8 Technologie van programmeerbare logica - 19 -


8.5.2 Logic Allocator:

De Logic Allocator verdeelt de producttermen naar de verschillende macro-


cells in product term clusters.

Figuur 12 Logic Allocator

8.5.3 Macrocell:

De macrocel bestaat uit een:

• geheugencel
• routing resources
• een clock multiplexer
• initialisatie control

De marcrocell werkt in twee modes, synchroon & asynchroon

Hoofdstuk 8 Technologie van programmeerbare logica - 20 -


De macrocell in de synchrone– en asynchrone mode

Figuur 13 De macrocell in de synchrone– en asynchrone mode

De flipflop kan geconfigureerd worden als: D-type, T-type latch, S-R register,
J-K register.

De prioriteitsingangen van de flipflops (RESET & Preset) zijn afhankelijk van


de mode, synchrone- of asynchrone mode.

Hoofdstuk 8 Technologie van programmeerbare logica - 21 -


8.5.4 Output Switch Matrix:

De Output Switch Matrix stuurt de uitgang van de Macrocell naar de I/O-


pins.

Figuur 14 Output Switch Matrix


8.5.5 Input Switch Matrix:

De Input Switch Matrix optimaliseert de routing van de inputs doorheen de


central switch matrix.

Figuur 15 Input Switch Matrix

Hoofdstuk 8 Technologie van programmeerbare logica - 22 -


Block Diagram M4-64/32

Figuur 16 Block Diagram M4-64/32

Hoofdstuk 8 Technologie van programmeerbare logica - 23 -


8.6 isp-technologie

“In System Programmability”, de mogelijkheid om de logica van een com-


ponent te voorzien of te wijzigen voor, tijdens of na aanmaak in zijn definitie-
ve werkomgeving.
“Isp” is stilaan uitgegroeid tot een standaard in programmeerbare hardware
op systeem- en componentniveau. Deze componenten zijn dus zeer snel en
flexiebel aan te passen, wat zeer handig is bij hardwarefouten en upgraden
via floppy of per telefoonlijn. Hierdoor zijn ook op vrij eenvoudige wijze multi-
functionele toestellen te ontwerpen, waar men steeds vertrekt van een zelf-
de hardware basisconfiguratie. De componenten worden immers meestal
rechtstreeks op de printplaat bevestigd. Geen kromme of afgebroken pootjes
meer, inpluggen en uittrekken van componenten uit een IC voet.
De isp-componenten zijn vervaardigd uit UltraMOS E²CMOS. Wissen en
herprogrammeren gebeurt in enkele luttele seconden.
Er zijn geen speciale protocollen of toestellen nodig om deze componenten
te programmeren. Een voedingsspanning van +5V is meestal wel voorhan-
den in b.v. een PC. Er hoeft enkel nog een 5-aderige interface voorzien te
zijn om isp-componenten te programmeren op de printplaat waar ze hun
normale taak zullen verrichten. Men kan zelfs de stimuli (test-vectoren) laten
opwekken om de rest van de printplaat te testen.

8.6.1 De JTAG-interface en het Boundary Scan-proces

Figuur 17 De JTAG-interface en het Boundary Scan-proces

“Boundary Scan” volgens IEEE Standaard 1149.1 van Philips is eveneens


mogelijk. Hierbij kan de test verlopen d.m.v. een “TAP” of Test Access Port.
Deze bevat een seriële verbinding en enkele controlelijnen.
Over het algemeen zijn de componenten bedoeld om te werken in een tem-
peratuurbereik van 0°C tot 70°C zoals de meeste commer ciële componen-
ten. Ze zouden minstens 10.000 maal te programmeren en te wissen zijn en
hebben een verwachte levensduur van minstens 20 jaar. UltraMOS
E²CMOS is niet vluchtig geheugen, dus geen backup batterijen of geheu-
genverlies na powerdown.
Er is eveneens een “security cell” voorzien om de inhoud te beschermen

Hoofdstuk 8 Technologie van programmeerbare logica - 24 -


tegen kopiëren. Men kan echter zelfs bij een beveiligde component nog wel
de functiecodes en de identificatie uitlezen.
Het programmeren kan gebeuren via PC, programmeertoestel, embedded
controller, …
Bij het programmeren wordt de fuse map uit een JEDEC-bestand gecon-
verteerd naar een dataformaat. Dit wordt serieel de component binnenge-
schoven, samen met de bijhorende adressen en commando's (b.v. “isp-
STREAM”)
Het programmeren gebeurt onder controle van een fabrikant afhankelijke
interne tri-state statusmachine in de isp-component. Soms kan men hiervoor
ook kiezen voor een IEEE Std 1149.1 1990 Boundary Scan Test Access
Port interface. De isp-instructies zoals “PROGRAM”, “BULK ERASE”,
“ADDRESS SHIFT” en dergelijke worden uitgevoerd via de instructieregis-
ters van de component en de interface.

Figuur 18 JTAG-interface en het Boundary Scan-proces

Figuur 19 Print met JTAG-interface ISP Starter Kit

Hoofdstuk 8 Technologie van programmeerbare logica - 25 -


Over het algemeen worden de conventionele componenten geprogram-
meerd met specifieke programmeertoestellen, omdat de programmeerspan-
ningen meestal liggen tussen +12 tot +24V.
Bij isp-componenten zijn spanningen tussen +3.3V en +5V gangbaar.
De programmeersignalen kunnen betrokken worden uit de normale TTL-
poorten. Voor het programmeren van isp-componenten bestaan eenvoudige
hulpmiddelen, denken we maar aan b.v. “ispVM System” van fabrikant Latti-
ce Semiconductor Corporation. Deze gebruikt dan de parallelle poort van de
PC.
Figuur 149 geeft een gedeeltelijk overzicht van de isp-componentenreeks
van isp-fabrikant Lattice:

Figuur 20 De isp-componentenreeks van isp-fabrikant Lattice

Figuur 21 De interface van “ispVM System” van fabrikant Lattice met keuze van de
‘Cable and I/O Port Setup’

Hoofdstuk 8 Technologie van programmeerbare logica - 26 -


8.6.2 Interfaces bij isp-componenten

Deze interfaces zijn 4- of 5-aderig uitgevoerd naargelang de gebruikte com-


ponent. Via de seriële interface kunnen instructies als “PROGRAM”,
“VERIFY” en “ERASE” worden meegegeven.
De meest voorkomende signalen zijn:
“Serial Data In” (SDI),
“MODE select” (MODE),
“Serial Data Out” (SDO) en
“Serial ClocK”. (SCLK)
Bij sommige uitvoeringen vinden we bovendien een laag actieve “ispEN”, om
nog 4 andere controlesignalen mogelijk te maken. Is deze pin niet actief, dan
worden de extra 4 pinnen als “dedicated” (vaste) ingangen beschouwd.

8.6.3 De LSC Lattice interface

Deze interface maakt gebruik van interne een tri-state statusmachine van
Lattice:
MODE : MODE CONTROL
SDI : SERIAL DATA IN
SDO : SERIAL DATA OUT
SCLK : SERIAL CLOCK
“MODE” en “SDI” zijn controle signalen.
“SDI” en “SDO” zorgen voor het dataverkeer naar en van het schuifregister.
“SCLK” levert het kloksignaal.
De grotere ispLSI-componenten bezitten ook nog een actief lage “ispEN” lijn,
welke laag staat als de component in programmeermode staat.
Een hoge “ispEN” laat “user defined” functies toe tijdens de normale werking

Figuur 22 De LSC Lattice interface

Hoofdstuk 8 Technologie van programmeerbare logica - 27 -


8.6.4 Wire ispJTAG Interface volgens IEEE 1149.1

Boundary Scan TAP (Test Access Point)


TMS : Test Mode Select (vergelijk met MODE)
TDI : Test Data In (vergelijk met SDI)
TDO : Test data Out (vergelijk met SDO)
TCK : Test ClocK (vergelijk met SCLK)

Bij de TAP wordt de statusmachine echter enkel bestuurd door “TMS”.


“TDI” wordt hier dus enkel gebruikt voor het binnenschuiven van adressen of
instructies.
Ook hier bezitten de complexere ispLSI componenten een actief lage “is-
pEN” lijn, welke laag staat in programmeermode. Wanneer deze lijn hoog
staat, kunnen “user defined” functies worden uitgevoerd.
Er kan bovendien nog een optionele actief lage “TRST” lijn aanwezig zijn,
waarmee de TAP controller asynchroon teruggezet kan worden.

Figuur 23 Wire ispJTAG Interface volgens IEEE 1149.1

Figuur 24 Wire ispJTAG Interface volgens IEEE 1149.1

Hoofdstuk 8 Technologie van programmeerbare logica - 28 -


8.6.5 isp-design en implementatie

Figuur 25 isp-design en implementatie


In bovenstaande figuur zien we hoe een ontwerp uiteindelijk op een PCB
terecht komt.
Om een ontwerp in te geven, werken we met “logic design tools”.
Hierin vinden we onder andere een softwarepakket om een ontwerp in te
geven. Het ingeven van een schema, een gewenste golfvorm of de bronco-
de van een ontwerp, noemt men in het Engels “design entry”.
Onder de “logic design tools” hoort meestal ook een “fitter”.
Dit is een software pakket dat ons ontwerp minimaliseert en eventueel op-
splitst, wanneer het ontwerp binnen een gekozen component niet meer zou
passen.
Deze “fitter” kan men eventueel ook de keuze van een component toever-
trouwen. Meestal bezit deze “fitter” ook de software voor compilatie.
Bij compilatie wordt het schema, de golfvorm of de broncode verwerkt en
omgezet naar de eigenlijke code die in de component moet worden binnen-
geschoven.
Het uiteindelijke resultaat hiervan vinden we meestal terug in een “JEDEC”
bestand. Dit JEDEC bestand bevat alle gegevens die in de component moe-
ten worden geprogrammeerd. Een JEDEC kan je beschouwen als normale
leesbare tekens en je kunt deze dus als “tekst” naar een programmeertoe-
stel doorsturen.
Zit het ontwerp gedefinieerd in het JEDEC-bestand, dan gaan we de “pro-
gramming tools” gebruiken om de eigenlijk component te programmeren.
FiguFiguur 25 toont hiervoor twee pakketten, namelijk “ispDaisyChainDown-
load” en “ispCode”.

Hoofdstuk 8 Technologie van programmeerbare logica - 29 -


“ISPDaisyChainDownload” is een softwarepakket dat met behulp van de
parallelle poort van een PC het programmeren van isp-componenten ver-
zorgt, welke op een PCB zijn aangebracht. Desondanks de parallelle poort
gebruikt wordt, gaat het tóch om een seriële verbinding, met een volledig
eigen protocol dat gebruik maakt van een “ketting”. Alle isp-componenten
die voorkomen in deze “ketting” kunnen serieel worden aangesproken en
geprogrammeerd of getest worden. Het pakket werkt hierbij dus op een vrij
ongebruikelijke wijze met de parallelle poort van de PC.
De isp-componenten kunnen echter ook op parallelle wijze worden gepro-
grammeerd.
“ispCode” is een softwarepakket dat kan gebruikt worden om de broncode
van de isp-componenten te schrijven in “C”. Na compilatie zal de werkwijze
verder verlopen zoals hierboven beschreven.
Het “P.C.Board” stelt enkel het PCB voor dat we ontwerpen, met daarop de
isp-componenten waarmee we het PCB wensen te voorzien.

8.6.6 Design flow

Figuur 26 Design flow

“Design entry” gebeurt d.m.v. “CAD software”. Na het eigenlijke ingeven van
het ontwerp, gebeurt de compilatie, eveneens door de CAD software. De
fitting controleert het ontwerp en probeert dit te laten passen binnen de ge-
kozen component. Als alles in orde is wordt een JEDEC bestand (“fuse
map”) aangemaakt. Het ingeven van een ontwerp kan door combinatie van
ABEL of VHDL, schema, logische vergelijkingen, statusmachines of waar-
heidstabellen. Hierin verschilt ispLEVER van Lattice in niets van de traditio-
nele ontwerptechnieken. Na het aanmaken van een JEDEC bestand, kan
men m.b.v. programmeersoftware de isp-componenten gaan programmeren,
denken we maar aan b.v. “ispVM System” van fabrikant Lattice Semiconduc-
tor Corporation.

Hoofdstuk 8 Technologie van programmeerbare logica - 30 -


8.6.7 Dataformaat, JEDEC-bestand

In een programmeerbare IC kunnen elektronische verbindingen worden


gemaakt of verbroken. Bij de eerste programmeerbare componenten werden
deze verbindingen, die fuse (‘zekeringen’) werden genoemd, door middel
van kortdurende stroompulsen doorgebrand. De informatie over welke fuses
wel en welke niet doorgebrand moesten worden, stond toen en staat nog
steeds in een zogenaamde JEDEC-bestand.
Dat bestand wordt door de programmeersoftware gegenereerd conform de
schakeling van het te programmeren IC.
Bij het feitelijke programmeren van het IC wordt het JEDEC-bestand door de
programmeersoftware ingelezen en doorgegeven aan de programmeer-
hardware die er vervolgens zorg voor draagt dat de juiste verbindingen in
het programmeerbare IC worden gemaakt of verbroken.
JEDEC is een acroniem voor Join Electronic Devices Engineering Council;
dit is een standaardiseringorganisatie binnen de EIA (Electronic Industries
Association- de club van elektronicaproducenten in de Verenigde Staten).
Door de JEDEC is het Standaard Data Transfer Format between Data Pre-
paration System an Programmable Logic Device Programmer gedefinieerd,
dus het data-overdrachtsprotocol tussen de programmeersoftware en de
programmeerhardware. Deze standaard heet JESD3-C en kan via het Inter-
net gratis worden gedownload van www.jedec.org.
In de JEDEC-standaard 3-C is het te gebruiken dataformaat exact voorge-
schreven. De voorschriften betreffen een programmeerdataveld en een
stestdataveld met de bijbehorende variabelen.
Aan de hand van het eenvoudige voorbeeld simple in paragraaf 3 wordt een
JEDEC-bestand weergegeven.

- eerste teken STX (Start of Text)


- dataveld ASCII-karakters
- laatste teken ETX (End of Text)

Elk volgende veld begint steeds met een bepaalde letter (identifier), gevolgd
door een reeks data en afgesloten met een asterisk. Er zijn verschillende
identifiers gedefinieerd. Hierna noemen we enkele belangrijke identifiers

C Fuse Checksum – controlegetal voor het gehele L-veld


Dit getal controleert of de gehele dataoverdracht correct is verlopen
L Fuse List – bevat de te programmeren data; eerst wordt in decimale
vorm het beginadres van het te programmeren geheugenbereik op-
gegeven ( het nummer van de eerste fuse), gevolgd door een uit’0’
en ‘1’ bestaande datareeks.
QV Maximum Numbers of Test Vectors
QF Number of Fuses in Device – aantal fuses in de de component
QP Number of Device Package Pins – werkelijk aantal pennen van het
IC; ook ongebruikte pennen worden meegeteld
G Security Fuse

Hoofdstuk 8 Technologie van programmeerbare logica - 31 -


Na het ETX-karakter volgt nog een 16-bit controlegetal dat is gevormd uit
alle verzonden ASCII-tekens (inclusief STX en ETX) zodat het program-
meerapparaat eventuele overdrachtsfouten kan herkennen.
In de JEDEC-standaard 3-C zijn nog veel meer identifiers gedefinieerd en
beschreven; hierboven hebben we slechts een indruk willen geven van het
dataformaat.

JEDEC-bestand van het eenvoudig ABEL voorbeeld simple in hoofd-


stuk 8.2.

<STX>ispLEVER 3.1 Lattice Semiconductor Corp.


JEDEC file for: P22V10G V9.0
Created on: Thu Aug 26 23:47:54 2004

eenvoudig ABEL voorbeeld


*
QP24* QF5892* QV8* F0*
X0*
NOTE DEVICE NAME: GAL22V10B-10LP*
NOTE Table of pin names and numbers*
NOTE PINS A1:1 A2:2 A3:3 N1:4 N2:5 N3:6 AND:14 NAND:23*
L0044 11111111111111111111111111111111111111111111*
L0088 11111111111101110111011111111111111111111111*
L5368 11111111111111111111111111111111111111111111*
L5412 01110111011111111111111111111111111111111111*
L5808 01000000000000000011*
N test and gate*
V0001 000XXXXXXXXNXLXXXXXXXXXN*
V0002 100XXXXXXXXNXLXXXXXXXXXN*
V0003 010XXXXXXXXNXLXXXXXXXXXN*
V0004 111XXXXXXXXNXHXXXXXXXXXN*
N test nand gate*
V0005 XXX000XXXXXNXXXXXXXXXXHN*
V0006 XXX100XXXXXNXXXXXXXXXXHN*
V0007 XXX010XXXXXNXXXXXXXXXXHN*
V0008 XXX111XXXXXNXXXXXXXXXXLN*
C15B6*
<ETX>D26F

Hoofdstuk 8 Technologie van programmeerbare logica - 32 -


8.7 Commerciële producten CPLD’s en FPGA’s

Onderstaande tabel geeft een globaal overzicht van verschillende fabrikan-


ten die programmeerbare componenten produceren.

Tabel 3

8.7.1 Het CPLD-concept van Altera MAX familie

Het concept van Altera is een multiple array matrix (MAX)-architectuur.


Altera maakt gebruik van een electrically erasable programmable logic devi-
ce (EEPLD).

Figuur 27 Altera MAX 7000


Men gaat uit van een ruggengraat bestaande uit een programmable inter-
connect array (PIA), dat voor de onderlinge verbindingen naar en van logic
array blocks (LAB) moet zorgen. Elke LAB bestaat telkens uit een groep van
bijvoorbeeld 16 macrocellen. Globale inputs zoals de voedingen, klok, clear

Hoofdstuk 8 Technologie van programmeerbare logica - 33 -


en output-enable worden naar alle LAB’s, en dus naar de macrocellen, door-
verbonden. Functies en bouwblokken worden zo mogelijk binnen een LAB
gerealiseerd. Mocht het nodig zijn in verband met de complexiteit van een
te realiseren bouwblok of omdat er binnen een LAB niet voldoende reserve-
ruimte meer is om meer dan één LAB te gebruiken, dan kan de onderlinge
bedrading van de LAB’s via de PIA worden doorgelust. Naburige LAB’s
kunnen elkaar ook aansturen.

Figuur 28 laat het interne schema zien van een LAB. Een LAB is opge-
bouwd uit een macrocel-array met daarin de 16 macrocellen. Een I/O-block
zorgt voor de communicatie van de macrocellen met de buitenwereld en de
communicatie van de buitenwereld met de PIA. Voor de optimalisatie van
het ontwerp zorgt een expander-productterm-array.

Figuur 28 Macrocel MAX 7000

Elke macrocel op zijn beurt bestaat uit een PAL-opbouw met vijf 4-input-
AND-poorten. De functie kan door de gebruiker desgewenst worden geïn-
verteerd door via een AND-poort een EXOR aan te sturen.
Door drie multiplexers aan te sturen kan er worden gekozen uit een globale
klok of een lokale klok, een globale reset of een lokale reset en of de functie
al dan niet registered, geklokt via een flipflop, naar de outputklem wordt ge-
stuurd.
De expander-product-terms worden gevoed door de globale inputs, door de
inputbus, door de PIA, door de I/O-terugkoppeling en door de macrocel-
terugkoppeling. De EPT’s sturen elke afzonderlijke macrocel in het gehele
systeem aan.
De I/O-control vindt plaats door een AND-poort een tri state-enable aan te
laten sturen. Als het enable-signaal laag is wordt de klem als onafhankelijke
inputklem toegepast. De pin krijgt het uitgaande niveau van een macrocel
als het enable-signaal hoog is.

Hoofdstuk 8 Technologie van programmeerbare logica - 34 -


8.7.2 Het CPLD-concept van Lattice

Eerder werd al de MACH 4 CPLD besproken in dit hoofdstuk.


Figuur 29 laat nogmaals blokschematisch het concept zien van een CPLD
van Lattice.

Figuur 29 Het CPLD-concept van Lattice

De CPLD bestaat uit een Central Switch Matrix met daar rond vier Pal
Block’s.

Logic Allocator:
De Logic Allocator verdeelt de producttermen naar de verschillende macro-
cells in product term clusters.

Macrocell:
De macrocel bestaat uit een:
geheugencel, routing resources, een clock multiplexer, en een initialisatie
control. De marcrocell werkt in twee modes, synchroon & asynchroon

De Output Switch Matrix:


De Output Switch Matrix stuurt de uitgang van de Macrocell naar de I/O-
pins.

Input Switch Matrix:


De Input Switch Matrix optimaliseert de routing van de inputs doorheen de
central switch matrix.

Hoofdstuk 8 Technologie van programmeerbare logica - 35 -


Pal Block Clock Generation:
Elke MACH 4 component heeft vier pinnen die kunnen geconfigureerd wor-
den als input of clock-input.

Output/ Buried Macrocells.


Zijn ongebruikte Macrocells. Deze komen tot stand indien men niet toekomt
met het aantal beschikbare producttermen per macrocel. Deze informatie is
beschikbaar in een list-file na het compileren van uw source-code.

8.7.3 Field-Programammable Gate Arrays

10.000 Gates zijn bij moderne ontwerpen lang niet voldoende meer.
Om meer schakelingen te kunnen ontwikkelen in één chip is men genood-
zaakt om nieuwe technologie te ontwikkelen.
Het concept van een Field-Programammable Gate Arrays kan meerdere
complexe digitale ontwerpen op zich nemen in één chip.

Het concept bestaat uit een matrix bestaande uit:


een aantal Logic Blocks, Intercennection Switches en I/O blocks.
Figuur 30 geeft de structuur van een FPGA weer.

Figuur 30 Structuur van een FPGA

Hoofdstuk 8 Technologie van programmeerbare logica - 36 -


De logica wordt gerealiseerd in een zogenaamde lookup table (LUT)
Een LUT is een statisch geheugen van 16 bits. Vier ingangen worden ge-
bruikt als adres voor het LUT-geheugen. De waarheidstabel voor het ge-
wenste netwerk wordt tijdens het programmeren van de component in het
geheugen van de LUT opgeslagen. Wanneer de spanning van de compo-
nent wegvalt gaan de gegevens voor de logische schakeling verloren.

Vandaar dat de data van de schakeling, een JEDEC-bestand of een POF-


bestand in een appart geheugen staat. Meetstal wordt hiervoor een serieel
geheugen gebruikt. Men noemt zo een geheugen een Boot PROM.

Als eenvoudig voorbeeld laten we een LUT zien met twee adresingangen.

Figuur 31 Een LUT met 2 adresingangen


Volgende logische schakeling kan worden geprogrammeerd:

f1 = /x1./X2+x1.x2

Men bekomt dan volgende inhoud in de LUT:

Figuur 32 inhoud in de LUT

Hoofdstuk 8 Technologie van programmeerbare logica - 37 -


Voorbeeld van een LUT met drie adresingangen.

Figuur 33 Een LUT met drie adresingangen


Voorstelling van een FPGA logisch block met een flipflop en een LUT.

Figuur 34 Een flipflop in een FPGA

Tot slot laten we een eenvoudig voorbeeld zien van een FPGA met een
aantal LUT’s die zijn voorgeprogrammeerd. Er zijn drie ingangen aangeslo-
ten, x1, x2, en x3 die de functie f realiseren. De rode pijlen laat zien hoe de
functie tot stand komt. In een klein serieel geheugen staat de data van de
verschillende verbindingen. Bij het opzetten van de voedingsspanning wordt
de inhoud van dit serieel geheugen gedownload naar de programmeerbare
component.

Hoofdstuk 8 Technologie van programmeerbare logica - 38 -


Figuur 35 Een gedeelte van een voorgeprogrammeerde FPGA

8.7.4 Altera FLEX 10K als FPGA

Als voorbeeld laten we de structuur zien van een FPGA van Altera, namelijk
de FLEX 10K. Deze heeft een logic element met een LUT bestaande uit vier
adresingangen. Dit alles wordt weergegeven in Figuur 36.
De volledige structuur van een FPGA wordt weergegeven in Figuur 37, het
is namelijk een FLEX 10K. De FLEX 10K bestaat uit een verzameling van
logische array blocks (LABs). Elk logische element bevat een lookup table
(LUT). De structuur van een logic array block wordt in Figuur 38 weergege-
ven. In de chip worden nog zogenaamde embedded aaray blocks toege-
voegd (EAB). Dit is extra geheugen dat kan gebruikt worden om data op te
slaan (bv. ASCII-karakters). Zie bijvoorbeeld de toepassing CHAR_ROM
van hoofdstuk 5. In de VHDL-beschrijving declareert men de grote van het
geheugen met de functie LPM_ROM en gebruikt men een tcgrom.mif be-
stand om de inhoud van het geheugen vast te leggen. Dat extra geheugen
kan op verschillende manieren worden geconfigureerd, bv: 256x8, 512x4,
1024x2,of 2048x1. Bijvoorbeeld in zo een FLEX 10K kan een microcontroller
voor een eindgebruiker worden geprogrammeerd. (bv. De Altera Nios pro-
cessor)

Hoofdstuk 8 Technologie van programmeerbare logica - 39 -


Figuur 36 Logic element met een LUT bestaande uit vier adresingangen

Figuur 37 FLEX 10K FPGA

Hoofdstuk 8 Technologie van programmeerbare logica - 40 -


Figuur 38 FLEX 10K logic array block

Tabel 4 Mogelijkdeden van de FLEX 10K

Hoofdstuk 8 Technologie van programmeerbare logica - 41 -


8.7.5 Het FPGA-concept van Lattice

Het PGA-concept van Lattice heeft als belangrijkste eigenschap t.o.v. de


concurrenten dat telkens door middel van twee daarvoor gereserveerde
aansluitpennen het programmeren, respectievelijk het herprogrammeren,
van de component wordt mogelijk gemaakt terwijl de component gewoon op
de PCB blijft zitten. Het is het in-system-programmable- (isp) of het in-
circuit- programmable-concept (icp) dat onmiskenbare voordelen biedt voor
de ontwerper van prototypen van complexe digitale systemen. Lattice heeft,
net als een aantal concurrenten de Boudary Scan architectuur in het concept
opgenomen, zodat het testen van PCB’s eenvoudiger kan worden.
Bovendien kan de isp-PGA niet allen via de door de fabrikant geleverde
software maar ook via deze boudary-scan-architectuur worden
ge(her)programmeerd.

Figuur 39 Het FPGA-concept van Lattice

De Lattice-architectuur is opgebouwd rond een Global Routing Pool (GRP).


De GRP is een zeer omvangrijke Programmable Interconnect Array (PIA)
zoals die bij Altera wordt toegepast.
Aan de randen van Figuur 40 zijn met I/O de verbindingen met de buitenwe-
reld aangegeven. De signalen van elke I/O-pen gaan via een inputbus naar
de Global Routing Pool (GRP). Vanuit deze grote verbindingsmatrix worden
de ingangssignalen, de daaruit gevormde producttermen en de uitgangen
naar de Generic Logic Blocs gevoerd (GLB).
Op de uitgangen van de Global Routing Pool zijn de Generic Logic Blocs
aangesloten, elk van die blocks is in feite een klein GAL-blok. Hier worden
de logische combinaties gemaakt.

Hoofdstuk 8 Technologie van programmeerbare logica - 42 -


Figuur 40 De Lattice-Architectuur met de Global Routing Pool

De I/O-cell is vergelijkbaar met die van andere PLD’s. Elke klem kan naar
keuze als input-klem of als output-klem worden gebruikt. Bij het gebruik van
zowel input-klem of als output-klem kan de functie al dan niet geklokt wor-
den verwerkt. Door in een GLB de functies met drie, vier, vijf of zeven pro-
ducttermen met elkaar te combineren zijn ook functies mat acht, negen, tien,
elf, twaalf, veertien, zestien of negentien producttermen te verkrijgen. Nog
grotere aantallen moeten door combinaties over meerdere GLB’s worden
samengesteld. Door het gebruiken van intelligente software zal het pro-
grammeertoestel een zuinige combinatie van producttermen voor complexe
functies realiseren.
Om een indruk te geven omtrent de omvang van de complexiteit van de te
programmeren ISP gegeven we hierbij de volgende oriënterende vergelij-
king:
Elk GLB kan vier relatief eenvoudige functies bevatten. Laten we veronder-
stellen dat er gemiddeld per GLB twee redelijk complexe functies en één
eenvoudige functie gerealiseerd kunnen worden. Er zijn 32 GLB’s en daar-
mee 64 tamelijk complexe functies en nog 32 eenvoudige functies. Dat
geeft ongeveer een grootorde van 96 functies ofwel ruim 9 stuks 22V10’s.
Tot slot fabrikanten zullen onderling de parameterspecificaties van hun ei-
gen bouwstenen systematisch overwaarderen en tegelijkertijd die van de
concurrenten onderwaarderen.

Hoofdstuk 8 Technologie van programmeerbare logica - 43 -


8.8 Samenvatting:

PLD-architecturen

Een PLD is de verzamelnaam voor programmeerbare componenten.


Elke digitale schakeling is opgebouwd uit combinatorische logica en, voor de
opslag van bits, verschillende soorten flipflops. Beide bestaan op hun beurt
weer uit booleaanse AND-, OR- of NOT-elementen of zelfs alleen NAND-
poorten (NOT-AND). Het aantal van die poorten ('gates') is een ruwe maat
voor de complexiteit van het IC, maar de functionaliteit wordt bepaald door
de aanwezige verbindingen. In een normale chip liggen die vast, maar in
een PLD (programmable logic device) is een groot aantal wissels ('switches')
aangebracht. Hierdoor kunnen verbindingen worden gemaakt of verwijderd
en wordt het IC configureerbaar. Als die wissels in SRAM zijn uitgevoerd, is
de functionaliteit zelfs als een bitstroom van een pc te downloaden of van
een ROM te booten, net als bijvoorbeeld systeemsoftware. Het verschil is
dat bij een PLD de schakeling zelf geconfigureerd wordt. Het 'programma'
hiervoor kan op hoger niveau in een HDL (hardware description language)
zijn geschreven.

Er zijn ruwweg drie gangbare PLD-architecturen met een oplopend niveau


van complexiteit.

1. De eenvoudigste wordt wel SPLD (simple programmable logic devi-


ce) genoemd en bestaat uit een aantal lijnen die via NOT-, AND- en
OR-poorten een combinatorische functie leveren die eventueel in
een register kan worden opgeslagen.
Bij een PAL is de and-array programmeerbaar.
Bij een PLA is de or-array programmeerbaar.

2. In een CPLD (complex pld) zijn meerdere SPLD's gecombineerd in


logische blokken rondom een centraal gebied met ook weer pro-
grammeerbare connecties. Complex programmable logic device
(of ook wel: CPLD) is een programmeerbare logica-chip. Een CPLD
bestaat uit een aantal in de chip vastgelegde poortjes en flipflops die
door het IC een andere programmering te geven, op een andere
manier met elkaar verbonden worden. Hierdoor is er telkens weer
een andere digitale logische schakeling mee te realiseren. Fabrikan-
ten van CPLD's zijn onder andere Lattice Semiconductors, Altera en
Xilinx. Een grote tegenhanger van de CPLD is de FPGA.

Hoofdstuk 8 Technologie van programmeerbare logica - 44 -


3. FPGA staat voor Field Programmable Gate Array.
In een FPGA (field programmable gate array) tot slot zijn logische
blokken en hun instelbare verbindingen omringd door aparte
in/uitvoerblokken. Het aantal pinnen kan tot een paar honderd oplo-
pen. Huidige FPGA's kunnen meerdere miljoenen poorten bevatten
en hebben de capaciteit om een volledige CPU of DSP (digital signal
processor) met perifere logica te implementeren.

Een FPGA valt onder de programmeerbare logica. Hieronder ver-


staat men geïntegreerde circuits (chips) waarvan de functie na de
fysieke productie door de klant kan worden geconfigureerd.
FPGA's zijn ontstaan uit de behoefte om grote digitale schakelingen
in relatief kleine aantallen te realiseren. Vóór het FPGA-tijdperk
moest alles met logische bouwstenen samengesteld worden, het-
geen erg veel tijd en printruimte kostte.

Sinds de komst van de programmeerbare logica kan een elektronicus zo'n


schakeling als een soort programma schrijven (in bijvoorbeeld VHDL of Veri-
log), waarna het voor de chip gecompileerd wordt en in de chip "geladen".
Op dezelfde manier is de schakeling ook weer eenvoudig te wijzigen.

Het schrijven en testen van deze code is echter nog steeds arbeidsintensief.
De basis van een FPGA is een array van identieke cellen welke op een aan-
tal gedefinieerde manieren geconfigureerd kan worden. Zo'n cel bevat altijd
tenminste een geheugenplaats (flipflop) voor 1 bit aan informatie met daarbij
enkele logische poorten (AND, OR) welke de inhoud van deze of andere
geheugenplaatsen controleren/bepalen. Door nu verschillende cellen aan
elkaar te knopen kunnen verschillende functies worden gerealiseerd. De
uiteindelijke functie van de FPGA wordt bepaald door de configuratie van
iedere cel en de onderlinge verbindingen. Op deze manier kunnen zeer
complexe digitale functies worden verkregen, van videocontrollers tot CPU's
(bv. Xilinx MicroBlaze of Altera Nios processor).

De belangrijkste spelers op de FPGA-markt: Xilinx, Altera, Lattice, QuickLo-


gic, Actel.

Hoofdstuk 8 Technologie van programmeerbare logica - 45 -


8.9 Oefeningen

1. Is het aantal producttermen per macrocell van programmeerbare


componenten altijd constant? Geef een verklaring.

2. Tel het aantal input lijnen van onderstaande AND/OR Logic Array.

3. Wat is een JTAG-interface en wat is Boundary Scan?

4. Met welk dataformaat (file) worden programmeerbare componenten


geprogrammeerd?

5. Wat is het verschil tussen een PAL en een PLA?

6. Wat is het verschil tussen een PAL en een CPLD?

7. Wat is het verschil tussen de security Cell en de elektronische


handtekening?
8. Wat kan je vertellen over onderstaand blokschema, en waarvoor
dient de Logic Allocator?

Hoofdstuk 8 Technologie van programmeerbare logica - 46 -


9. Geef de definitie van een PAL, een PLA en een ROM.
10. War wordt bedoeld met SPLD?
11. Wat wordt bedoeld met fuse programmable en electrically program-
mable?
12. Beschrijf het PGA-concept van Lattice
13. Beschrijf het MAX-concept van Altera.
14. Wat wil output/buried macrocell zeggen?
15. Waarvoor dient het extra geheugen in een FLEX 10K, en waarvoor
kan het gebruikt worden?
16. Bespreek de samenstelling van een LUT.
17. Wanneer blijft een applicatie permanent in een programmeerbare
component als de voedingspanning wegvalt?
18. Wat is het verschil tussen een CPLD en FPGA?
19. Noem een aantal fabrikanten van programmeerbare componenten.

Hoofdstuk 8 Technologie van programmeerbare logica - 47 -


Hoofdstuk 8 Technologie van programmeerbare logica - 48 -
9. Hoofdstuk 9 A/D- en D/A omvormers........................................... 2
9.1 Inleiding ............................................................................. 2
9.2 Digitaal-analoog omvormers............................................... 4
9.2.1 De ideale D/A omvormer................................................................. 4
9.2.2 Digitale verzwakkers ....................................................................... 7
9.2.3 Unipolaire omvormer ....................................................................... 8
9.2.4 Bipolaire codes ................................................................................ 9
9.2.5 Multiplying D/A omvormer............................................................. 12
9.3 Praktische uitvoering van D/A omvormers ........................ 12
9.3.1 De binair gewogen D/A omvormer. .............................................. 13
9.3.2 D/A omvormer met R/2R ladder ................................................... 14
9.3.3 D/A parameters en definities ........................................................ 18
9.3.4 Resolutie........................................................................................ 18
9.3.5 Statische fouten bij DAC's............................................................. 19
9.3.6 Lineariteit of relatieve nauwkeurigheid ......................................... 20
9.3.7 Differentiële lineariteit en monotoniciteit....................................... 21
9.3.8 Insteltijd (Settling-time).................................................................. 23
9.3.9 Schakelsnelheid (Slewing rate) .................................................... 23
9.3.10 Update rate.................................................................................... 23
9.3.11 Bruikbare resolutie ........................................................................ 23
9.3.12 Ingangscodes ................................................................................ 23
9.3.13 Vierkwadrant vermenigvuldiging................................................... 23
9.4 Analoog-digitaal omvormers............................................. 24
9.4.1 Teller principe (Single digital ramp) .............................................. 24
9.4.2 Omvormer met enkelvoudige integratie. ...................................... 26
9.4.3 Omvormer met dubbele integratie. ............................................... 27
9.4.4 Omvormer met viervoudige integratie. ......................................... 29
9.4.5 A/D omvormer van het opéénvolgend-benaderingstype ............. 30
9.4.6 Bespreking van het blokschema van de ADC0804 ..................... 32
9.4.7 Digitaal geluid ................................................................................ 33
9.4.8 A/D omvormer van het paralleltype .............................................. 35
9.4.9 De pipeline omvormer ................................................................... 36
9.4.10 De sigma-delta-omvormer ........................................................... 39
9.5 Samenvatting ................................................................... 41
9.6 Oefeningen ...................................................................... 43

Hoofdstuk 9 A/D- D/A omvormers - 1 -


9. Hoofdstuk 9
A/D- en D/A omvormers

9.1 Inleiding

Het doel van interfacing is twee of meer toestellen met elkaar verbinden
zodanig dat zij in optimale werkingsomstandigheden met elkaar kunnen
communiceren. Dit veronderstelt schakelingen die de in en- of uitgangssig-
nalen van het ene toestel compatibel maken voor het andere.
De meeste fysische processen leveren ons na omzetting met sensoren ana-
loge signalen. De conversie van analoge naar digitale signalen, en omge-
keerd, vervult dus een belangrijke rol in de huidige stand van de techniek.
Deze conversies heeft geleid tot de fabricatie van geëigende bouwstenen,
de A/D- en D/A omvormers.
Bij D/A omvormers wordt de digitale informatie omgezet in een equivalente
informatie. Een typisch voorbeeld hiervan vinden we bij de sturing van de
pen van een schrijver.
In zeker opzicht is een D/A omvormer een decoder, daar hij verbonden is
met de uitgang.
Bij de A/D omvormers wordt de analoge informatie omgezet in een equiva-
lent digitaal signaal. Zo worden de analoge signalen van opnemers (bij me-
ting van temperatuur, druk, ....) omgezet in digitale signalen, klaar voor ver-
dere verwerking in de digitale eenheid.
De A/D omvormer is vergelijkbaar met een encoder-schakeling.

D/A omvormer ---- decoder ---- per binaire waarde één eenduidig uitgangs-
signaal.

A/D omvormer ---- encoder ---- het analoog ingangssignaal wordt geënco-
deerd naar een binair gecodeerde uitgang.

Figuur 1 Interfacing met AD & DA omvormers

Hoofdstuk 9 A/D- D/A omvormers - 2 -


AD & DA omvormers worden in alle takken van de industrie toegepast.
Bijvoorbeeld:
Een industriële drukomvormer.

Figuur 2 Een industriële drukomvormer

Figuur 3 Blokschema van een industriële drukomvormer

De gegevens van de A/D omvormer wordt verwerkt in een microcontroller.

Hoofdstuk 9 A/D- D/A omvormers - 3 -


9.2 Digitaal-analoog omvormers

9.2.1 De ideale D/A omvormer

Figuur 4 De unipolaire omvormer

2n combinaties geeft 2n niveaus

Figuur 4 stelt een ideale D/A omvormer voor. De input bestaat uit een digi-
taal signaal D en een referentiewaarde R (spanning, stroom, lading ...). De
output is een analoog signaal A (spanning, stroom, lading ...), dat aan de
volgende betrekking voldoet:
A=RxD
Het signaal D is een digitaal signaal beschreven door de bits B1, B2, ... Bn.
De n-bits kunnen 2n combinaties vormen die voor één gegeven R signaal 2n
analoge output niveaus kunnen geven. Met n = 8 kunnen 256 verschillende
niveaus gegenereerd worden.
De fractionele code wordt gedefinieerd als: (met B1 = MSB en Bn = LSB)

R = Vref = 1

zodat 0 ≤ D ≤ 1- 2 n

Hoofdstuk 9 A/D- D/A omvormers - 4 -


In de meeste gevallen is R een referentiespanning, Vref = 10V als voor-
beeld.
Voor Vref > 0 en D≥0 wordt A≥0 en spreekt men een unipolaire omvormer
met positieve referentie (UPR).
Voor Vref<0 en D≥0 wordt A≤0 en spreekt men van een unipolaire omvor-
mer met negatieve referentiespanning (UNR).

Als voorbeeld geeft men een ideale 3 bit D/A.


Een drie-bit omvormer heeft 23 = 8 discrete gecodeerde niveaus.
Dus een totaal van acht verschillende inputs en acht corresponderende out-
puts, gaande van 0 tot 7/8 van de volle schaal.

Figuur 5 Idiale 3 bit D/A omvormer

1LSB = FS/8 (FS=Full Scale)

Het verschil tussen twee opéénvolgende uitgangsniveaus kan uitgedrukt


worden in een absolute waarde.
Met deze driebit omvormer en een referentiespanning van 10V, kan men
stellen dat iedere uitgangswaarde dus (1/23).10V = 10V/8 groter is dan de
vorige uitgangswaarde.
Diezelfde driebit omvormer kan natuurlijk evengoed met een een 5 V refe-
rentie werken zodat de onderlinge afstand tussen twee opéénvolgende uit-
gangen slechts 5/8 V bedragen.
Meestal wordt de onderlinge afstand relatief uitgedrukt.
Men zegt dat deze 1 LSB (last significant bit) bedraagt.
FS
1LSB = n
2

Hoofdstuk 9 A/D- D/A omvormers - 5 -


Voorbeeld: n=8
10 10
FS = 10V wordt: 1LSB = =
28 256

Merk op dat de maximale uitgang van de D/A omvormer nooit de referentie


R is, maar steeds Amax = R - 1 LSB.

Voor n = 8 en FS=10V wordt dit:


10V 255
A max = 10V − = .10V
256 256

Het aantal discrete uitgangsniveaus die kunnen weergegeven worden noemt


men de resolutie. Ze kan uitgedrukt worden als de "n bit resolutie".
Anderzijds definieert men de afwijking van de uitgang ten opzichte van de
verwachte waarde als de nauwkeurigheid.
Deze resolutie (of onderscheidingsvermogen) is dus in het geval van een
FS = 10 V en vier bits ongeveer gelijk aan 600 mV (10 V/16) = 625mV.
Maar ieder niveau kan wel nauwkeurig zijn tot op bijvoorbeeld 10 mV.
De 10 mV duidt de nauwkeurigheid (of accuracy) aan, anders uitgedrukt
zegt men 10 V/10 mV = 1000 is ongeveer 210 of een 10 bit nauwkeurigheid.

Figuur 6 De nauwkeurigheid t.z.v. de resolutie

Voor het cijfervoorbeeld is de afstand tussen twee niveaus 600 mV en de


fout op ieder niveau 10 mV.
Het heeft dus geen zin om de resolutie te verkleinen (aantal bits laten toe-
nemen) als de nauwkeurigheid groter is dan de resolutie.
Ideaal is een nauwkeurigheid van 1/2LSB.
VB: 10bitresolutie 1/1024 is ongeveer gelijk aan0,1%  nauwkeurigheid
moet dan < 0,05%.

Hoofdstuk 9 A/D- D/A omvormers - 6 -


9.2.2 Digitale verzwakkers

Tabel 1 De verzwakking in functie van het aantal bits

Figuur 7 Digitale verzwakkers

Voor 1 LSB aan de ingang is de verzwakking (in dB) gelijk aan:

20 log A/R

VB: n = 4
R = 10V
1LSB = 0,625V
20 log 0,625/10 = -24,1 dB
Ofwel
-n
20 log 2
20 log 2-4 = -24,1dB

Dus voor een 4bit omvormer is de maximale verzwakking = -24,1dB.


Zie hiervoor tabel 1.

Hoofdstuk 9 A/D- D/A omvormers - 7 -


9.2.3 Unipolaire omvormer

Tabel 2 De relatie tussen de digitale ingang en de uitgang van een 8-bit omvormer
Scale 10 V FS Staight Binary Complementary Binary
FS-1LSB 9,96 1111 1111 0000 0000
+3/4FS 7,50 1100 0000 0011 1111
+1/2FS 5,00 1000 0000 0111 1111
+1/4FS 2,50 0100 0000 1011 1111
+1/8FS 1,25 0010 0000 1101 1111
+1LSB 0,04 0000 0001 1111 1110
0 0,00 0000 0000 1111 1111

Figuur 8 Transferfunctie van een unipolaire omvormer

Merk op dat dit een unipolaire omvormer is, dit wil zeggen dat de uitgang
enkel positieve (of enkel negatieve) waardes kan aannemen. De eenvoudige
(straight) binaire code gaat van (00 ... 0)2 tot (11 ... 1)2 en bestrijkt de zone
0 V tot (Vref -1 LSB). Merk op dat met (11 ... 1)2 niet Vref maar (Vref -1 LSB)
gegenereerd wordt.
Soms wordt ook de complementaire of 1-c code gebruikt, bijgevolg worden
alle bits geïnverteerd.

Hoofdstuk 9 A/D- D/A omvormers - 8 -


9.2.4 Bipolaire codes

Naast de unipolaire D/A omvormers bestaan er ook bipolaire D/A omvormers


die zowel positieve als negatieve signalen leveren.
De meest gebruikte codes zijn: bipolaire codes
- tekenbit + absolute grootte
- offset binary
- 2's complement.

Tekenbit + absolute grootte


Bij de tekenbit gevolgd door de absolute grootte bevat de meest beduidende
bit het teken terwijl de volgende bits de grootte leveren.
Zo is : 0100 = +4
en : 1100 = -4

Offset binary
Met de offset binary schrijfwijze gaat het om een verschoven binaire code
waarbij de helft van de maximale code overeenkomt met een uitgangssig-
naal van 0 volt. De code wordt verder uitgewerkt in tabel 3.

Tabel 3 Verschillende offset binary codes

De laagste digitale code (00 ... 0)2 stelt dus het laagste uitgangsniveau voor,
nl. -FS, terwijl (11 ... 1)2 overeenkomt met +FS - 1 LSB.

2's Complement.
De 2-c methode is dezelfde als de binary code uitgenomen dat de MSB ge-
complementeerd is. Dit heeft voor gevolg dat de digitale input (00 ... 0)2
overeenkomt met de analoge 0-waarde.
Deze code wordt het meest aangewend omdat digitale tekensystemen
eveneens in de 2-c mode werken.

Hoofdstuk 9 A/D- D/A omvormers - 9 -


Transferfunctie van bipolaire codes:
Offset binary
2’s complement
Sign + magnitude (tekenbit + absolute waarde)

Figuur 9 Transferfunctie van een bipolaire omvormer

Tabel 4 BCD code

Binair gecodeerde decimalen (BCD) worden ook veel gebruikt zoals weer-
gegeven in tabel 4. In BCD worden de 4 digits gebruikt om elk decimaal
cijfer weer te geven. Deze code kan ook gebruikt worden voor bipolaire
waarden indien een extra tekenbit voorzien wordt.

Tabel 5 De verschillende codes voor een 4bit omvormer

Hoofdstuk 9 A/D- D/A omvormers - 10 -


Men kan ook een UPR 4bit D/A omvormer ombouwen tot een 3bit bipolaire
werking. Dit gebeurt door een dubbele referentie te gebruiken, R' = 2R en
door de nul te verschuiven tot op de helft van het volledig bereik (d.w.z. 1/2
full scale aftrekken van de D/A uitgang). Uit tabel 5 volgt dat een
2'complement DAC verkregen wordt door bij de offset binary DAC eenvoudig
de tekenbit te inverteren.

Men kan dus schrijven dat:

Men kan ook stellen dat voor :


D=0 A' = 0 A = -R
D = 1/2 A' = R A=0
D = 1 - 1 LSB A' = 2R - 1 LSB A = R - 1 LSB

Hoofdstuk 9 A/D- D/A omvormers - 11 -


9.2.5 Multiplying D/A omvormer

Indien bij een bipolaire DAC Rref positief is dan spreekt men van een bipo-
laire omvormer met positieve referentie (BPR).
Is Rref negatief dan wordt dit een bipolaire omvormer met negatieve referen-
tie (BNR).
Indien nu de vaste referentiespanning vervangen wordt door een analoog
variërend ingangssignaal met -FS ≤ R ≤ + FS en de omvormer is bipolair
dan kan de DAC beschouwd worden als een 4 kwadrant vermenigvuldiger.
De analoge output is het product van de digitale input D en de analoge
ingang .
Een dergelijke omvormer wordt een "multiplying DAC" genoemd (MDAC),
die kan gebruikt worden als een digitaal gecontroleerde veranderlijke ver-
zwakker, ideaal bestemd voor microprocessor gecontroleerde verzwakkers,
filters enz.

Figuur 10 Multiplying D/A omvormer

9.3 Praktische uitvoering van D/A omvormers

In de huidige stand van de technologie heeft het nog weinig zin de verschil-
lende realisatiemethoden grondig te bespreken.
De constructeurs leveren ons immers D/A omvormers in één behuizing. Een
zekere basiskennis is echter gewenst om de specifieke gegevens van de
fabrikant te begrijpen en om een goede keuze te kunnen maken uit het
marktaanbod.

Hoofdstuk 9 A/D- D/A omvormers - 12 -


9.3.1 De binair gewogen D/A omvormer.

Figuur 11 laat het principe zien van een binair gewogen D/A omvormer.
Is de schakelaar gesloten dan komt dit overeen met de toepassing van de
desbetreffend bit (een logische “1”). Is de schakelaar open, dan stemt deze
toestand overeen met een logische “0”.

Figuur 11 De binair gewogen D/A omvormer

De operationeel versterker is geschakeld als inverterende somversterker.


De opéénvolgende versterkingen zijn dus:
-1, -1/2, -1/4, en -1/8.
Kiezen wij als referentiespanning bijv. 5 V, dan is de uitgangsspanning:

Uu = -(1x5+1/2x5+1/4x5+1/8x5)V = -9,375V

Uiteraard doet zich dat voor als alle schakelaars gesloten zijn m.a.w. voor de
binaire ingangscode 1111.
De spanning -9,375V komt overeen met de max-waarde.
(Amax = FS - 1LSB)
Hieruit kunnen we ook afleiden dat 1LSB gelijk is aan -9,375/15 = -0,625 V.
De resolutie in % wordt dan gelijk aan 0,625 / 9,375 * 100% = 6,6%
Algemeen kunnen we stellen dat we de resolute in % kunnen bepalen op
twee manieren:
1LSB 1
Resolutie in % = x100% = n .100%
FS - 1SLB 2 −1
Opmerkingen:
1. Een BCD D/A omvormer bezit uiteraard dezelfde overdrachtfunctie
als de binaire omvormer. De maximum uitgangsspanning is ui-
teraard voor de code 1001.
2. Hoe kleiner de waarde van de ingangsweerstanden, hoe hoger de
nauwkeurigheid.
3. De nauwkeurigheid van de omzetting wordt mede bepaald door de
nauwkeurigheid van de referentiespanning.
4. De weerstand van de (elektronische) schakelaar moet uiteraard
klein zijn t.o.v. de waarde van de weerstand R.

Hoofdstuk 9 A/D- D/A omvormers - 13 -


9.3.2 D/A omvormer met R/2R ladder

Figuur 12 is een interessante variante op het voorgaande schema de D/A


omvormer met R/2R laddernetwerk.
Hierin worden slechts twee verschillende waarden van weerstanden ge-
bruikt.

Figuur 12 D/A omvormer met R/2R ladder

Belangrijk is verder dat het laddernetwerk niet belast wordt door de verster-
ker, gezien hij geschakeld is als spanningsvolger. Hierbij is Uu = Ui.
Wij berekenen de uitgangsspanning aan de hand van enkele opéénvolgende
stappen. Voor de eenvoud van de berekeningen kiezen we een 3-bit om-
vormer zoals getekend is in Figuur 13.

Figuur 13 3-bit omvormer

Voor S2S1S0 = 000


De uitgangsspanning is dan gelijk aan 0 V.

Hoofdstuk 9 A/D- D/A omvormers - 14 -


Voor S2S1S0 = 001
Het laddernetwerk kunnen wij tekenen zoals voorgesteld in Figuur 14. Op-
éénvolgende toepassing van de stelling van Thévenin brengt ons naar het
eindresultaat.

Figuur 14 Voor S2S1S0 = 001

Voor S2S1S0 = 010


Figuur 15 illustreert de berekeningen.

Figuur 15 Voor S2S1S0 = 010

Hoofdstuk 9 A/D- D/A omvormers - 15 -


Voor S2S1S0 = 011

Uit de twee voorgaande berekeningen volgt:

001 geeft Uu = Ur/8 = Ct.1

010 geeft Uu = Ur/4 = (Ur/8).2 = Ct.2

Dus 011 geeft: Ct.1 + Ct.2 = Ct.3

Voor S2S1S0 = 100


De waarde van Uu volgt uit de schema's van Figuur 16.

Figuur 16 Voor S2S1S0 = 100

Opmerkingen:
De opbouw van de schakeling bevat méér weerstanden dan de binair gewo-
gen D/A omvormer.
De schakelaars moeten dubbelpolig uitgevoerd zijn.
Door de schakeling van de Op-Amp. te wijzigen kan de uitgangsspanning
gemakkelijk aangepast worden.

Praktische uitvoering:
Als voorbeeld van een R/2R laddernetwerk nemen we de component
ZN428 van Plessey Semiconductors.
Dit is een 8-bit microprocessor compatible DAC.

Figuur 17 ZN428 van Plessey Semiconductors

Hoofdstuk 9 A/D- D/A omvormers - 16 -


Figuur 18 R2R laddernetwerk van ZN428 van Plessey Semiconductors

Hoofdstuk 9 A/D- D/A omvormers - 17 -


9.4 D/A parameters en definities

9.4.1 Resolutie

De resolutie is de kleinste verandering van het uitgangssignaal als gevolg


van de kleinste verandering van het digitale ingangssignaal.
Wij kunnen ook zeggen:
Het is de kleinste aangroei van de uitgangsspanning (of -stroom) die men
kan onderscheiden.
De resolutie is op de eerste plaats functie van het aantal bits, ze wordt klei-
ner naarmate het aantal bits toeneemt.
Meestal wordt de resolutie in % weergegeven:
1LSB 1
Resolutie in % = x100% = n .100%
FS - 1SLB 2 −1

Voor een 4-bits D/A omvormer met een UFS van 10 V is de resolutie
0,625 V of 6,66%.
Voor een 8-bits DAC worden deze cijfers resp. 0,03906 V of 0,392 %.
Hieruit blijkt duidelijk dat de resolutie snel afneemt met de woordlengte.
Het is ook mogelijk de resolutie uit te drukken door de woordlengte,
zo spreekt men bijv. van een 8-bits resolute.
Minder gebruikelijk is de uitdrukking dynamiek in plaats van resolutie.
Hiermee wordt bedoeld:

D (dynamiek) in dB = 20 . log(UFS/1LSB) = 20 log 2-n


Signaal-ruisverhouding = 20 log 2-n = kwantiseringsfout

In Figuur 19 is de overdrachtkarakteristiek van een ideale 3-bits DAC voor-


gesteld. Voor elk van de acht ingangscodes staat een discrete waarde van
de uitgangsspanning voorgesteld door een punt op de grafiek.

Figuur 19 De overdrachtkarakteristiek van een ideale 3-bits DAC

Hoofdstuk 9 A/D- D/A omvormers - 18 -


De ideale DAC geeft stappen van exact 1 LSB per codestap en geen fout
noch bij zero-uitgang, noch bij volle schaaluitgang. Hij schakelt oneindig snel
van de ene naar de andere stap zonder overgangsfouten.
Hij geeft ook geen verandering door de tijd of door de temperatuur. Merk wel
op dat de werkelijke overdrachtkarakteristiek discontinu is en weergegeven
wordt door de trapkromme. Tussen het nulpunt en de FS-waarde wordt
veelal een rechte lijn getekend om het ideale verloop van de DAC weer te
geven. In de praktijk blijkt echter dat verschillende foutbronnen oorzakelijk
zijn van een afwijking van het ideale verloop.

9.4.2 Statische fouten bij DAC's

D/A omvormer vertonen 4 fundamentele statische fouten:

Zero offset

Dit is het foutsignaal dat optreedt als digitale ingangscode nul volt vereist
aan de uitgang. (zie Figuur 20)
Deze fout is aanwezig bij alle codes en in dezelfde toegevoegde waarde. De
fout kan steeds gecorrigeerd worden door de zogenaamde nulregeling.

Versterkingsfout (Schaalfactor)

Bij een dergelijke fout zal de werkelijke helling van de overdrachtkarakteris-


tiek afwijken van de verwachte ideale karakteristiek. De fout treedt ook op bij
alle codes en in evenredige mate. Ze kan ook bijgeregeld worden.
(zie Figuur 20)

Figuur 20 De offset en de versterkingsfout

Hoofdstuk 9 A/D- D/A omvormers - 19 -


9.4.3 Lineariteit of relatieve nauwkeurigheid

Deze specificatie vergelijkt de werkelijke uitgangsspanning met de theoreti-


sche en wordt uitgedrukt als een procent van de maximum uitgangsspan-
ning. Deze fout is niet te compenseren. De lineariteit van een DAC wordt
geïllustreerd in Figuur 21.
Als de maximum uitgangsspanning van een DAC bijv. 10 V is, met een
nauwkeurigheid van 0,2%, dan is de max. foutspanning die kan optreden
20 mV.

Resolutie en nauwkeurigheid zijn eigenschappen die nauw met elkaar sa-


menhangen. Inderdaad: ideaal zou een DAC, in het slechtste geval, een fout
in nauwkeurigheid mogen bezitten van ± 1/2 van de LSB. Een 10-bits om-
vormer bijv. heeft een resolutie van 1/1024 of ong. 0,1%. De nauwkeurigheid
zou dus kleiner moeten blijven dan 0,05%.

Figuur 21 Lineariteit of relatieve nauwkeurigheid

Het heeft dan ook geen zin om in het gegeven voorbeeld de nauwkeurigheid
sterker op te drijven naar bijv. 0,01%, wat alleen de kostprijs doet stijgen
terwijl de eigenschappen van de bouwteen als dusdanig er niet bij winnen.

Anderzijds heeft het ook geen zin de resolutie op te drijven, als de nauwkeu-
righeid slecht is. Dit leidt enkel tot een niet-efficiënt gebruik van de ingangs-
bits.

De nauwkeurigheid van een D/A omvormer is op de eerste plaats afhankelijk


van de tolerantie van de weerstanden. Verder spelen de juistheid van de
referentiespanning en de versterking van de operationele versterker een rol.

Hoofdstuk 9 A/D- D/A omvormers - 20 -


Onder absolute nauwkeurigheid van een DAC verstaan we het verschil tus-
sen de verwachte analoge uitgangsspanning voor een welbepaalde in-
gangscode en de gemeten waarde voor diezelfde code. Uiteraard heeft het
meten van de absolute nauwkeurigheid slechts zin in welbepaalde stan-
daardvoorwaarden.

9.4.4 Differentiële lineariteit en monotoniciteit

Differentiële lineariteit is het verschil tussen de werkelijke stapgrootte en de


ideale stapgrootte . Het is de maximale afwijking in LSB uitgedrukt tussen
de werkelijke en de ideale waarde van een stap indien de ingangscode met
1 bit verandert.

Indien een stap precies 1 LSB verschilt van de vorige, is de differentiële


lineariteit fout = 0. Deze fout kan niet gecompenseerd worden. Figuur 22
geeft hiervan een voorbeeld.

Figuur 22 Differentiële lineariteit en monotoniciteit

Nemen we als voorbeeld een 10-bits DAC met een UFS van 10 V. 1 LSB is
dan 9,7 mV. Als nu de werkelijke verandering van de uitgangsspanning
slechts 2 mV is, is de differentiële lineariteit gelijk aan:

10 mV - 2 mV = 8 mV, dit is een afwijking van 4/5 LSB.

Dit is een procentuele afwijking t.o.v. UFS van :


8.10 −3
.100% = 0,08%
10

Hoofdstuk 9 A/D- D/A omvormers - 21 -


Monotoniciteit vereist van de omvormer een steeds groter wordende uit-
gangsspanning voor een oplopende digitale code. Niet monotoniciteit is een
gevolg van een te grote differentiële lineariteitsfout (> -1 LSB). Dit is even-
eens voorgesteld in Figuur 22.

Een DAC zal zeker monotoon zijn als de specificatie van niet-lineariteit klei-
ner is dan ±1/2 LSB. In het slechtste geval is de stapgrootte dan nul; name-
lijk als de 2 aangrenzende punten een lineariteitsfout hebben van respectie-
velijk +1/2 LSB en -1/2 LSB.

Het feit dat een DAC monotoon is betekend echter niet dat zijn lineariteit
beter is dan ±1/2 LSB. Dit wordt weergegeven in Figuur 23. Merken we hier-
bij op dat voor de meeste toepassingen in regeltechniek (gesloten lussen)
de monotoniciteit een absolute vereiste is i.v.m. het z.g. "hunting" - effect.
(terugkoppeling)

Figuur 23 Monotoniciteit

Opmerking:

Een omvormer met een differentiële niet-lineariteit van ±1/2 LSB max. is
strenger gespecificeerd dan een omvormer met gegarandeerde monotonici-
teit.

Hoofdstuk 9 A/D- D/A omvormers - 22 -


9.4.5 Insteltijd (Settling-time)

Dit is de tijd die nodig is om een uitgangsspanning te bereiken die + of - 1/2


LSB van de uiteindelijke spanningswaarde is. Deze tijd ligt tussen 25 ns en
100 µs.

9.4.6 Schakelsnelheid (Slewing rate)

De schakelsnelheid wordt gedefinieerd uit de stijgsnelheid.

∆Uu
(V/µs)
∆t

9.4.7 Update rate

Deze eigenschap geeft aan met welke snelheid de ingangsdata kan ingege-
ven worden. Ze wordt uitgedrukt in kHz of MHz.

9.4.8 Bruikbare resolutie

Het is altijd mogelijk om een n-bits DAC te gebruiken als een (n-1), (n-2), ...
DAC door de ingangen van lagere orde met de logische "0" te verbinden.
De resolutie wordt uiteraard verhoogd.
De lineariteitsfouten blijven dezelfde breukwaarde van de oorspronkelijke
stapwaarde behouden. Hierdoor kan een niet-monotone n-bits D/A omvor-
mer herleid worden tot een monotone (n-1) D/A omvormer.

9.4.9 Ingangscodes

Naast de natuurlijke binaire ingangscodes worden nog andere binaire codes


gebruikt zoals de BCD-code, de 2’-complementcode (uitstekend geschikt
voor bipolaire werking), de offset binaire code, enz.
Deze laatste code wordt bekomen door het uitgangssignaal van de DAC
bipolair te maken. Dit kan eenvoudig bereikt worden door het uitgangssig-
naal een negatieve halve schaalwaarde te geven. Het uitgangssignaal zal
dan negatief zijn voor alle codes waarvoor het MSB "0" is en positief als het
MSB "1" is.

9.4.10 Vierkwadrant vermenigvuldiging

Door de referentiespanning instelbaar te maken kan een vermenigvuldiging


van variabelen uitgevoerd worden (ingangscode x referentiespanning). Kan
de referentiespanning zowel positief als negatief zijn en is de uitgang bipo-
lair, dan zegt men dat de DAC een vierkwadrant vermenigvuldiging kan uit-
voeren (MDAC).

Hoofdstuk 9 A/D- D/A omvormers - 23 -


9.5 Analoog-digitaal omvormers

Bij ADC's is het de bedoeling om een analoog ingangssignaal om te zetten


in een digitale code die een voorstelling is van dit analoog ingangssignaal.
In dit hoofdstuk beperken wij ons tot de bespreking van enkele gangbare
types, om daardoor de specificaties en het gebruik beter te leren kennen.

9.5.1 Teller principe (Single digital ramp)

Figuur 24 is een eenvoudig blokschema van een ADC getekend volgens het
tellerprincipe.

Figuur 24 Teller principe (Single digital ramp)

Door het startsignaal wordt de klok doorgegeven naar de digitale binaire


teller, waardoor een reeks opéénvolgende codes opgewekt worden. Het
uitgangssignaal van de teller stuurt een D/A omvormer die de opgewekte
code omzet in een evenredig analoog uitgangssignaal Ur. Dit Ur-signaal
wordt in een comparator vergeleken met het oorspronkelijk analoog in-
gangssignaal Ui. Zodra deze twee signalen aan elkaar gelijk zijn zal de con-
trole-eenheid de teller stoppen. Het digitaal getal in de teller is dan equiva-
lent aan Ur, en in sterke benadering ook aan Ui, uiteraard binnen de gren-
zen van de resolutie en de nauwkeurigheid.

De bouwsteen is eenvoudig en goedkoop te realiseren, bezit een goede


nauwkeurigheid, maar een lange conversietijd. De meettijd is afhankelijk van
de grootte van de te meten analoge ingangsspanning.

Hoofdstuk 9 A/D- D/A omvormers - 24 -


De schakeling in Figuur 25 illustreert meer precies de samenstelling van een
dergelijke omvormer. Ieder klokimpuls verhoogt de binaire teller met 1. Dit
duurt tot Ur = Ui is.

Figuur 25 Voorbeeld van een teller principe (Single digital ramp)

De werking van de A/D omvormer kan als volgt nader omschreven worden:
Een positieve startimpuls zet de binaire teller op 0 en belet de doorgang van
de klokimpuls door de and-poort.
Door het feit dat de teller op "0" staat is de uitgangsspanning van de DAC 0V
(Ur =V).
Hierdoor is Ui > Ur zodat de uitgangsspanning van de comparator hoog is.
Zodra de startimpuls "0" wordt, worden de klokimpulsen doorgelaten en
naar de teller gestuurd.
De uitgangsspanning van de DAC (Ur) neemt toe is stappen gelijk aan de
resolutie.
Dit proces gaat verder tot Ur dezelfde waarde bereikt als Ui. Op dit moment
wordt de uitgang van de comparator laag waardoor de teller stopt.

Hoofdstuk 9 A/D- D/A omvormers - 25 -


9.5.2 Omvormer met enkelvoudige integratie.

We beschouwen het blokschema van Figuur 26.

Figuur 26 Omvormer met enkelvoudige integratie

De conversie-impuls start een lineaire zaagtand en set tevens een flipflop


zodanig, dat klokimpulsen aan een teller (binair, BCD enz.) kunnen worden
toegevoerd.
Op het moment dat de zaagtandspanning de analoge ingangsspanning juist
overtreft, zal de comparator omkippen, evenals de flipflop, en worden de
klokimpulsen geblokkeerd.
De telleruitgang is weer een maat voor de analoge ingangsspanning.

Dit type van A/D omvormer kenmerkt zich door:


• lage snelheid,
• gering aantal bits,
• beperkte nauwkeurigheid, vooral omwille van de gebruikte zaag-
tandgenerator,
• frequentie van de klokgenerator moet stabiel zijn.

Hoofdstuk 9 A/D- D/A omvormers - 26 -


9.5.3 Omvormer met dubbele integratie.

De omvormer met dubbele integratie is gebaseerd op dezelfde principes als


het voorgaande type, maar elimineert de meeste nadelen ervan.
Figuur 27 geeft het blokschema weer van een omvormer met dubbele inte-
gratie.

Figuur 27 Omvormer met dubbele integratie

In deze omvormer wordt het analoge ingangssignaal via een elektronische


schakelaar (S) toegevoerd aan een integrator. Op hetzelfde moment wordt
de teller gestart en krijgt deze de klokimpulsen. Na een vooraf ingestelde
vaste tijd t1 wordt weer via de schakelaar een referentiespanning (Ur) met
tegengestelde polariteit als Ui aan de integrator gelegd. Gelijktijdig wordt ook
de teller op nul gezet en weer gestart. De uitgangsspanning van de integra-
tor neemt nu af met een vaste helling, bepaald door:
Ur
RC
Wanneer zijn uitgangsspanning nul wordt, wat met een comparator wordt
nagegaan, zal de teller weer stilgezet worden. Mede uit Figuur 28 kan men
afleiden dat:

Ui.t1 = Ur.t2
t2
Ui = .Ur
t1

Hoofdstuk 9 A/D- D/A omvormers - 27 -


Figuur 28 Werking omvormer met dubbele integratie

Aangezien Ur en t1 constant zijn, zal t2 een maat zijn voor Ui. Daar nu deze
tijdsduur ook de telleruitgang bepaalt, zal dus ook de digitale uitgang even-
redig zijn met Ui.

Figuur 29 Werking omvormer met dubbele integratie als de frequentie daalt

Hoofdstuk 9 A/D- D/A omvormers - 28 -


Deze A/D omvormer heeft een aantal belangrijke voordelen:
De nauwkeurigheid wordt niet meer beïnvloed door de klokfrequentie en de
integrator (vooral C), zolang deze maar stabiel blijven binnen de conversie-
tijd. De nauwkeurigheid en stabiliteit worden nu vooral bepaald door die van
de referentiespanning.

Voorbeeld van een dalende oscillatorfrequentie:


Daalt de frequentie met bijv. 5%, dan zal de eerste helling 5% toenemen in
vergelijking met de verwachte waarde. De tweede helling zal dan ook 5%
meer tijd nodig hebben om tot nul te dalen. Gezien de klokimpulsen geteld
worden gedurende het beschreven tijdsinterval t2, klokimpulsen die zelf
5% trager zijn, zal het uiteindelijk resultaat juist zijn.
Figuur 29 laat de werking hiervan zien bij een dalende oscillatorfrequentie.
Wel moet er veel belang gehecht worden aan het constant houden van de
ontlaadstroom.

9.5.4 Omvormer met viervoudige integratie.

Een A/D omvormer met viervoudige integratie (quad slope omvormer) heeft
twee cycli van dubbele integratie, respectievelijk met ingang nul en met het
om te zetten analoog signaal. De uitgang die men bij de eerste omzetting
bekomt (fout) wordt digitaal afgetrokken van het resultaat dat men bij de
tweede cyclus bekomt. Men beschikt aldus over een uiterst nauwkeurige,
trage omvormer. Vb. AD 7550.

Hoofdstuk 9 A/D- D/A omvormers - 29 -


9.5.5 A/D omvormer van het opéénvolgend-benaderingstype

In tegentelling met voorgaande typen, waar steeds gebruik gemaakt wordt


van een teller, is deze A/Domvormer gebaseerd op een "weegschaalprinci-
pe". Figuur 30 geeft het blokschema weer van een A/D omvormer van het
opéénvolgend- benaderingstype.

Figuur 30 A/D omvormer van het opéénvolgend-benaderingstype

De analoge ingangsspanning wordt ook hier in een comparator vergeleken


met de spanning, geleverd door een interne D/A omvormer. Het geheel
wordt eerst gereset en na de startimpuls wordt de MSB-uitgang van de D/A
omvormer (bv. 5 V) vergeleken met Ui. Is de ingang groter dan de MSB, dan
blijft deze laatste behouden en verschijnt als een "1" aan de uitgang van het
register. Is integendeel de ingangsspanning kleiner dan de MSB-waarde,
dan wordt deze laatste als een "0" ervaren en wordt de vergelijking met de
daarop volgende bit geprobeerd enz. Dit systeem van vergelijken kan zo
doorgevoerd worden tot de LSB, waarbij dan tevens het register volzet is.
Men krijgt zo een digitale uitgang (serie of parallel, naargelang van de op-
bouw van het schuifregister), die de analoge ingangsspanning in "gewicht"
heeft gecodeerd.
De kenmerken van dit type zijn:
Hoge resolutie (mogelijk tot 16 bits).
Snel, gezien de vaste conversietijd per bit (bv. 100 ns); bij een 10-bits-
uitvoering is een conversiefrequentie van 1MHz bereikbaar.
De omvormer kan gesynchroniseerd worden met een uitwendige klokgene-
rator. De nauwkeurigheid hangt in grote mate af van de stabiliteit van de
referentiebron, de D/A omvormer en de comparator.
Dit type A/D omvormer leent zich goed voor microcontroller-interfaces.

Hoofdstuk 9 A/D- D/A omvormers - 30 -


Figuur 31 Werking A/D omvormer van het opéénvolgend-benaderingstype

De ADC0804 van National Semiconductor.

Figuur 32 De ADC0804 van National Semiconductor.

Hoofdstuk 9 A/D- D/A omvormers - 31 -


9.5.6 Bespreking van het blokschema van de ADC0804

De spanning die het laddernetwerk geeft, wordt ingesteld met behulp van
analoge schakelaars in het IC. Het meest significante bit wordt het eerst
"getest" en na acht vergelijkingen (64 klokimpulsen) staat aan de acht uit-
gangen van het laddernetwerk een binaire code die de waarde van het in-
gangssignaal vertegenwoordigt (1111 1111 = volle schaal).

Die code wordt vervolgens overgebracht naar de uitgang (output latches).


Op dat moment wordt een interruptsignaal gegeven via een INTR-FF..
Er zijn twee ingangen waarmee de omvormer kan worden geactiveerd, /WR
en /CS.

Eerst moet het IC "geselecteerd" met een "0" op /CS.


Als de /WR-ingang van "1" naar "0" gaat, worden de interne SAR-
tussengeheugens gereset. Zolang /CS en /WR hierna "0" blijven, blijft de
omvormer in een reset-toestand.

De omzetting begint pas tussen 1 en 8 klokperiodes na dat minstens één


van deze ingangen hoog is geworden.
De reset-toestand (/CS en /WR beide nul) houdt het volgende in:
De start-FF. wordt geset, waardoor de interrupt-FF. gereset wordt.
In D-FF 1 wordt een "1" gezet en deze staat na één klokpuls op de ingang
van het acht-bits schuifregister. Die "1" wordt ook doorgegeven
naar de NAND-poort G1 en die levert dan in combinatie met het kloksignaal
een reset-signaal voor de start-FF.

Als daarna op één van de ingangen /CS en /WR een "1" verschijnt, wordt de
start-FF. gereset en kan het schuifregister de "1" van de D-FF. inlezen,
waardoor de omzetting wordt gestart.

Nadat de "1" door het hele schuifregister is geklokt, verschijnt hij aan de Q-
uitgang van dit register ten teken dat de omzetting kan worden beëindigd.
Via G2 zorgt het "1"-signaal ervoor dat de digitale niveaus worden ingelezen
in de output latches.

Bij de volgende klokimpuls wordt de "1" in D-FF. 2 gelezen en dat heeft tot
gevolg dat de interrupt-FF. wordt geset en via een invertor een "0" aan de
/INTR-uitgang verschijnt.

Bij het lezen van de data zorgt de combinatie van /CS en /RD dat de inter-
ruptFF. weer wordt gereset en dat de data in de outputlatches aan de uit-
gang verschijnen (gewoonlijk zijn die uitgangen hoogohmig).

Hoofdstuk 9 A/D- D/A omvormers - 32 -


9.5.7 Digitaal geluid

Digitaal geluid staat voor een digitale voorstelling van geluid.


Digitale opslag van geluid dus, wat nodig is om geluid te verwerken met
behulp van een computer. Digitale opslag van geluid werd (door Sony ) voor
het eerst commercieel toegepast in 1982 door het op de markt brengen van
de CD of Compact Disc. Voor 1982 was het al mogelijk in de huiskamer
digitaal geluid op te nemen met een PCM-adaptor.
Een PCM-adaptor is een elektronisch apparaat dat analoog geluid omzet
naar digitaal geluid dat weer wordt omgezet naar een pseudo-video signaal,
dat kan worden opgeslagen op videoband.
De samplefrequentie, 44.1 kHz, die wordt gebruikt in de Compact Disc is
ontleend aan zo'n PCM-adaptor.
Hoewel de term vaak gebruikt wordt is het belangrijk te vermelden dat hij
niet rechtstreeks met geluid te maken heeft, aangezien het hier niet om ge-
luid gaat maar om een gedigitaliseerde vorm ervan.
Deze digitale voorstelling van geluid kan van oorsprong:
a) volledig handmatig ingevoerd zijn (bijvoorbeeld door toetsen op een
klavier aan te slaan) , bestandsformaten van dit type : MIDI
b) een écht geluid zijn, dat gedigitaliseerd werd. Bestanden van deze
oorsprong noemt men bitstroom bestanden,
bestandsformaten van dit type : wave, mp3, ogg, …
c) een combinatie zijn van de 2 voorgaande. Deze bestanden noemt
men modules,Bestandsformaten van dit type : xm, s3m, mod, it, ...
Dit resulteert in een groot aantal verschillende types bestandsformaten voor
digitaal geluid.
Het verschil tussen modules en MIDI zit hem voornamelijk in de manier
waarop instrumenten worden opgeslagen. Bij MIDI wordt enkel een num-
meraanduiding opgeslagen per instrument. Bij modules wordt per instrument
een geluidsmonster (bitstroom-formaat) van dat instrument opgeslagen.

Een analoog signaal (bv:stem) kan met een analoog naar digitaal omvormer
omgezet naar “samples”, digitale getallen (0 en 1).
Dit gebeurt meestal in groepjes van 16 bits (2 bytes) per meting.
De snelheid waarmee men meet, noemt met de “sample rate”.
Hoe dikwijls per seconde dit gebeurt noemt men de “samplefrequentie”.

Figuur 33 Een gedigitaliseerd analoog signaal

Hoofdstuk 9 A/D- D/A omvormers - 33 -


Voorbeeld:
Voor de ADC0804 van National Semiconductor bedraagt de klokfrequentie
1
fclk =
1,1RC
de conversietijd = 64 * de periode van de klok
de conversietijd = 64 * 1,1 RC
1
Sample rate =
1,1RC.64
Volgens Nyquist moet de samplerate 2 maal zo groot zijn als de hoogste in
de informatie voorkomende frequentie aan de ingang.
Hoogste frequentie van het analoog signaal is de helft van de samplerate!
geluid in speelgoed 4 kHz
telefoon 8 kHz x 8bit adc 64kbs voor 1 isdn-channel
AM radio 11 kHz
CD 44,1kHz
DVD 96 kHz

Voor telefonie, CD & DVD:


Voor telefonie (stem) wordt normaal 14 bit gebruikt.
Praktisch 8bit en logaritmisch vertikaal volgens de µwet.
Dwz dat er in het begin meer samples worden genomen dan op het einde.
Dit komt de spraakherkenning bij telefonie bij 8bit ten goede.
Voor CD is de bitdepth 16bit
16bit ADC
per bit  6 dB
½  20log 0,5 = - 6dB dynamiek
16 x 6 = 96 db
(Tabel 1 De verzwakking in functie van het aantal bits)
Voor audio-DVD  samplerate van 96 kHz met een bitdepth = 24bit
dynamisch bereik van 144 dB
20 log 2n  20 log 224 = 144,5 dB
dus per bit komt er 6dB bij
Hoeveel liedjes kunnen er op een CD?
1 s samplen met 16 bits per meting, in CD-kwaliteit
(44100 metingen/s) en in stereo (L + R = 2 kanalen)

Aantal bytes data voor 1 s muziek =


1 s x 16 bits/meting x 44100 metingen/s x 2 kanalen (L+R) = 1411200 bits
Er gaan 8 bits in één byte: 1411200 bits = 1411200 / 8 = 176400 bytes

1 liedje met een tijdsduur van 3 min vraagt dus plaats voor:
3 min = 3 x 60 s = 3 x 60 x 176400 bytes = 31752000 bytes of ong. 32 MB

Een gewone cd heeft plaats voor 650 MB


en kan dus 650 MB / 32MB = ong. 20 liedjes
van 3 min bevatten.

Hoofdstuk 9 A/D- D/A omvormers - 34 -


9.5.8 A/D omvormer van het paralleltype

De A/D omvormer van het paralleltype (Simultaneous or flash omvormers,


Parallel comparators) bezitten de snelste conversietijd.
De schakeling is opgebouwd rond een aantal vergelijkers. Door een resistie-
ve potentiometerschakeling worden de inverterende ingangen vast inge-
steld. Het te digitaliseren analoge ingangssignaal wordt aangesloten aan alle
niet-inverterende ingangen.
Hierdoor zullen die comparatoren schakelen waarvan de Ui hoger is dan Ur.
Hierdoor wordt, na encodering, een binair signaal opgewekt.
Het blokschema hiervan is getekend in Figuur 34.

Figuur 34 A/D omvormer van het paralleltype

Nemen wij als voorbeeld, in het schema, een referentiespanning van 8 V.


De spanningen aan de inverterende ingangen zijn dan resp. 2 V, 4 V en 6 V.

Voor een analoog ingangssignaal dat kleiner is dan 2 V nemen alle compa-
ratoren een laag niveau aan (C2C1C0 =000).
De binaire uitgangscode wordt dan B1B0 = 00.

Voor signalen tussen 2 V en 4 V wordt de onderste comparator hoog en de


andere blijven laag (C2C1C0 = 001).
De uitgangscode wordt B1B0 = 01.

Voor Ui tussen 4 V en 6 V worden de signalen: C2C1C0 = 011


en B1B0 =10.

Hoofdstuk 9 A/D- D/A omvormers - 35 -


Voor Ui hoger dan 6 V krijgen we: C2C1C0 = 111 en B1B0 = 11.

Uit het bovenstaande weten we dat een 2-bits ADC 3 comparatoren nodig
2
heeft (2 - 1).
n
Zo heeft een n-bits omvormer 2 -1 comparatoren nodig.
Het is nu juist dit groot aantal comparatoren die een ernstig nadeel zijn voor
dit type omvormer. De conversietijd is slechts afhankelijk van de vertragings-
tijd van de comparatoren en de encoderingspoorten.
Op de markt zijn parallel omvormers te bekomen met 16 tot 256 verschillen-
de uitgangstoestanden (4-bits tot 8-bits).

9.5.9 De pipeline omvormer

De pipeline omvormer is wat minder snel, heel wat minder eenvoudig, maar
al veel nauwkeuriger dan de flash omvormer. Om het principe van de pipeli-
ne omvormer uiteen te zetten geven we hierbij een pipeline-ADC die een
analoog signaal omzet naar een zes bit binair signaal.
De pipeline bestaat uit drie trappen. Elke trap verzorgt twee bits van de out-
putcode. Het idee van de pipeline omvormer is gebaseerd op het achter-
eenvolgens, in een aantal trappen, berekenen van één of meer bits van de
uitgangscode, te beginnen bij de m.s.b.'s. Daarna wordt via een DAC de
analoge tegenwaarde van de reeds berekende code teruggekoppeld naar,
c.q. afgetrokken van, het analoge ingangssignaal. Van het resterende ver-
schil wordt dan telkens in een volgende trap het minder significante deel van
de uitgangscode berekend.

Figuur 35 De pipeline omvormer

Hoofdstuk 9 A/D- D/A omvormers - 36 -


De pipeline-ADC is te beschouwen als een digitaal systeem dat moet wor-
den bestuurd door een controller. De controller is dan een sequentiële ma-
chine. Het analoge ingangssignaal wordt toegevoerd aan een sample and
hold-circuit. De hierin getekende schakelaars zijn in de praktijk MOS-FET's
die door de controller op het juiste moment, in tegenfase, moeten worden
aangestuurd.
Het in ruststand gesloten contact zet het analoge ingangssignaal op de con-
densator C. Zolang het contact gesloten blijft is de momentele waarde van
de spanning over de condensator dus identiek aan het ingangssignaal. Als
de controller het moment bepaalt waarop het analoge ingangssignaal ge-
converteerd moet worden, dan wordt het verbreekcontact geopend en tege-
lijkertijd het maakcontact gesloten. Vanaf dat moment verandert de span-
ning over de condensator niet meer. De lading op de condensator kan na-
melijk nergens meer naartoe. De ingangsimpedantie van de OpAmp is on-
eindig groot, omdat de ingangen rechtstreeks gates van FET's zijn.

Als we ervan uitgaan dat op de uitgang van de volledig teruggekoppelde


OpAmp een spanning staat die precies gelijk is aan de spanning over de
condensator. De OpAmp zal bij het belasten van de uitgangsspanning
de benodigde energie leveren en ervoor zorgen dat de uitgangsspanning
precies gelijk blijft aan de sample-spanning. De uitgangsspanning wordt met
het flash-principe omgezet naar een binaire code van twee bits. Zo worden
de twee m.s.b.'s van het binaire uitgangssignaal bepaald. Als
de twee m.s.b.'s berekend zijn gebeuren er twee dingen:

Om te beginnen worden de twee bits toegevoerd aan en 2-bit-DAC. De DAC


zet de code 00, 01, 10 of 11 om in een analoog signaal. De grootte van het
analoge signaal hangt af van de code en van het referentiesignaal. We trek-
ken nu het berekende analoge uitgangssignaal van de DAC af van het oor-
spronkelijke analoge signaal. Het verschil van deze beide signalen bevat de
informatie waarmee de overige bits van de output-code moeten worden be-
rekend. We zijn nu zo handig om het verschilsignaal te vermenigvuldigen
met het exacte vermenigvuldigingsgetal 4. Daarmee bereiken we dat het
signaal voor de volgende twee bits opnieuw kan worden vergeleken met de
oorspronkelijke referentiespanning.

We zetten de twee m.s.b.'s bovendien op de ingangen van een twee bit


breed schuifregister. Op de positive edge van het kloksignaal worden de
twee m.s.b.'s in het schuifregister ingeklokt. Tegelijk met het inklokken van
de twee m.s.b.'s wordt door de controller de sample and hold-schakeling van
de tweede trap geactiveerd.

Vervolgens worden de twee volgende bits berekend, op de ingangen van


een tweede schuifregister gezet, omgezet in een volgend 2-bit-DAC naar
een analoog signaal en afgetrokken van het restant van het analoge signaal.

Hoofdstuk 9 A/D- D/A omvormers - 37 -


Bij de tweede positieve edge van het kloksignaal worden de twee m.s.b.'s in
het eerste register een positie opgeschoven naar rij 2 en tegelijkertijd wor-
den de beide volgende bits in de eerste rij van het tweede schuifregister
ingeklokt. De controller activeert nu bovendien de sample and hold-
schakeling van de derde trap.

Daarna worden de twee l.s.b.'s berekend en op de ingangen van een derde


schuifregister gezet. Aangezien we in ons voorbeeld slechts tot zes bits
gaan, hoeven we verder geen verschilsignalen meer te berekenen en om te
zetten naar volgende bits. Bij de derde positieve edge van het kloksignaal
worden de twee m.s.b.'s in het eerst register één positie opgeschoven naar
rij 3, de twee bits in het tweede schuifregister naar rij 2 en tegelijkertijd wor-
den de beide l.s.b.'s in de eerste rij van het derde schuifregister ingeklokt.
Op de uitgangen van de drie schuifregisters staat nu de gevraagde binaire
code van het uitgangssignaal.

Wanneer er een groter aantal bits in de uitgangscode vereist wordt, moeten


er meer conversietrappen in de pipeline worden opgenomen. De lengte van
het shuifregister moet daarbij ook worden vergroot.
Voor veertien bits zijn er zo zeven trappen nodig en bovendien zeven schuif-
registers met een lengte afnemend van zeven rijen naar één rij.

Voor trappen van drie bits moet de versterkingsfactor van de OpAmp 8 zijn.
De binaire code komt dan sneller, met minder klokimpulsen, op de uitgangen
ter beschikking. Om bijvoorbeeld met één extra klokimpuls de acht bits van
een flash omvormer tot zestien te verdubbelen, zouden we een exacte ver-
sterkingsfactor 256 nodig hebben. Dit blijkt in de praktijk niet haalbaar.

We hebben nu gezien dat er met de flash omvormer in één enkele klokim-


puls een uitgangscode van acht bits haalbaar is. Er zijn pipeline omvormers
in de handel die: met twee trappen van elk vijf bits een uitgangscode van
tien bits, met vier trappen van elk drie bits een uitgangscode van twaalf bits,
met zeven trappen van elk twee bits een uitgangscode van veertien bits en
met zestien trappen van elk één bit een uitgangscode van zestien bits reali-
seren. Voor elke trap is er een extra klokimpuls nodig om voor die trap de
output-code te berekenen. We zien dus dat we voor een grotere nauwkeu-
righeid
moeten betalen in de benodigde tijd voor de conversie.

Als we een sinusvormig signaal van 25 KHz wensen om te vormen en elke


sinus viermaal per periode bemonsteren, dan moeten we iedere 10 µs een
sample nemen. Dit komt overeen met een samplefrequentie van 100 KHz.
Stel dat de signalen met een amplitude van 1‰ van het referentiesignaal
nog gedetecteerd moeten kunnen worden, dan moet 0,5 l.s.b. ≤ 1‰ zijn. Bij
tien bits geldt: 1 l.s.b. = 1/1024. Een omvormer van tien bits voldoet dus net
niet. Daarom kiezen we een omvormer van twaalf bits. Voor de conversie
van die twaalf bits hebben we met de pipeline omvormer vier trappen, en
dus vier klokimpulsen nodig. De klokfrequentie moet dus ≥400 KHz zijn.

Hoofdstuk 9 A/D- D/A omvormers - 38 -


9.5.10 De sigma-delta-omvormer

Tot slot van de pipeline omvormer bespreken we nog een materiaalbespa-


rende versie. Deze staat bekend als de Σ − ∆ − ADC − converter . Het is een
versie met slechts één circuit met comparators, één DAC en één versterker
die exact een factor 4 moet versterken. Bovendien wordt de binaire code in
slechts één schuifregister ingeschoven en telkens in zijn geheel in een me-
mory geschreven. Verder zijn er drie sample and hold-schakelingen.

Figuur 36 De (sigma-delta-omvormer) Σ − ∆ − ADC − converter

De eerste sample and hold neemt de analoge ingangsspanning over en


zorgt na het aansturen van het signaal 'fB' first Bit, voor de conversie van het
m.s.b.-paar. De twee overige sample and holdschakelingen houden om
beurten de even en oneven om te vormen signalen vast, waardoor de des-

Hoofdstuk 9 A/D- D/A omvormers - 39 -


betreffende bit-paren kunnen worden berekend, terwijl de andere telkens het
versterkte verschilsignaal tot op de capaciteit laat komen.

Als de omvormer een analoog signaal Vin moet gaan omvormen, dan stuurt
de controller voor de eerste twee m.s.b.'s het signaal 'fB=1' aan, waardoor:
a) de analoge ingangsspanning Vin, die tot dan toe op de condensator
stond, gesampled en tijdens de gehele klokperiode vastgehouden
wordt;
b) de tweebits flash-schakeling de twee m.s.b.'s berekent;
c) de verschilspanning van Vin en de analoge tegenwaarde van de be-
rekende m.s.b.'s nu, na de exacte vermenigvuldiging met 4, op de
ingangen van de sample and hold-schakeling voor zowel de even
bit-paren als de oneven bit-paren staat.

Op de eerstvolgende negatieve edge van het kloksignaal:


d) worden de berekende twee m.s.b.'s in de eerste rij van het schuifre-
gister ingeklokt;
e) stuurt de controller 'fB'-signaal weer in de stand 'fB=0', waardoor de
analoge Vin weer tot op de condensator van de sample and hold
komt;
f) stuurt de controller het signaal 'even=1' aan. Het met exact 4 ver-
menigvuldigde verschilsignaal tussen Vin en de tegenwaarde van de
twee m.s.b.'s uit c wordt gesampled en tijdens de gehele klokperio-
de vastgehouden;
g) berekend de tweebits flash-schakeling het eerste even bit-paar;
h) krijgt nog slechts de oneven sample and hold-schakeling de volgen-
de exact met 4 vermenigvuldigde, verschilspanning toegevoerd. Uit
de nieuwe verschilspanning kunnen de resterende bits van het binai-
re uitgangssignaal worden berekend.

Bij de tweede negatieve edge:

i) wordt inmiddels berekende eerste even bit-paar in de eerste rij van


het schuifregister ingeklokt;
j) schuift het m.s.b.-paar naar de tweede rij;
k) stuurt de controller het signaal 'odd=1' aan. Het volgende paar one-
ven bits kan weer worden berekend;
l) stuurt de controller het signaal 'even=0' aan, zodat de volgende ver-
schilspanning weer tot op de condensator komt, enz. enz.

De sample and hold-circuits worden, zoals gezegd, om beurten gebruikt


voor een gesampelde waarde of voor het doorgeven van de versterkte ver-
schilspanning. Na afloop van de cyclus staat de binaire uitgangscode paar
voor paar in de rijen van het schuifregister, wordt met het 'write'-signaal naar
het geheugen geschreven en kan tijdens het berekenen van de volgende
uitgangscode worden uitgelezen.

Hoofdstuk 9 A/D- D/A omvormers - 40 -


9.6 Samenvatting
Een digitaal naar analoog omvormer (kortweg DAC genoemd) zet een digi-
taal signaal om naar een analoog signaal. Een DAC doet het tegenoverge-
stelde van de AD-omvormer.
Eigenschappen
Bereik: minimale en maximale uitgangsspanning of -stroom.
Bemonsteringsfrequentie: aantal wijzigingen in signaalniveau per seconde.
Resolutie: aantal verschillende signaalniveaus (meestal in bits uitgedrukt).
De notatie van bemonsteringsfrequentie met resolutie wordt meestal weer-
gegeven in de volgende vorm:
Bemonsteringsfrequentie/Resolutie n108MHz/12bit
Toepassingen
DA-omvormers worden onder meer toegepast in:
• CD- en DVD- spelers.
• Procesautomatisering
• Meetapparatuur in elektronica: Signaalgeneratoren
• Geluidskaarten in PC's
Een AD-omvormer of Analoog-Digitaal-omvormer (ADC) zet een ana-
loog signaal, bijvoorbeeld een spraaksignaal, om in een digitaal signaal.
Een AD-omvormer is de tegenhanger van de DA-omvormer. Deze zet digita-
le signalen om een analoog signaal.
Een analoog signaal is per definitie een signaal wat continu in tijd en in am-
plitude is (de resolutie is oneindig). Wanneer een analoog signaal digitaal
gemaakt wordt betekend dit dat het signaal in tijd en in amplitude gediscreti-
seerd moet worden. Een discreet (digitaal) signaal is de tegenhanger van
een continu signaal, een signaal wat altijd bestaat en alle mogelijke waarden
aan mag nemen. Om het signaal digitaal te maken zal er dus met vaste tus-
senpozen (bemonsteringsfrequentie) een monster genomen moeten worden
waarna ook dit monster gediscretiseerd wordt. Om de zoveel tijd wordt er
dus een sample genomen welke opgeslagen wordt als een digitaal getal. Dit
digitale getal is eindig in resolutie (discreet) en kan dus niet zoals een ana-
loog getal alle waarden voorstellen.
Ter illustratie een korte uitleg hoe het signaal door de AD-omvormer loopt.
Als eerste bewerking wordt een laagdoorlaatfilter ingezet om aliasing tegen
te gaan. Vervolgens neemt de ADC op regelmatige tijdstippen een signaal-
monster (sample); dit houdt in dat op een bepaald moment wordt gekeken
wat de exacte signaalwaarde is. Bij spraaktelefonie wordt in de meeste sys-
temen 8000 keer per seconde een signaalmonster genomen (bemonste-
ringsfrequentie is 8 kHz) waarmee de maximaal verwerkbare frequentie
4000Hz wordt (Nyquist criterium).
Ieder monster wordt dan een woord dat uit meerdere bits bestaat. Het aantal
bits bepaalt hoe exact het signaal gereproduceerd wordt. Door deze omzet-
ting naar bits wordt elk signaalmonster gekwantiseerd in amplitude; kwanti-
seren is het afronden naar een zekere waarde, afkomstig uit een eindig
waardenbereik. Analoge signalen kunnen immers een oneindig aantal waar-
den aannemen. Doordat per monster het waardenbereik waarnaar wordt

Hoofdstuk 9 A/D- D/A omvormers - 41 -


afgerond eindig is, is er per monster een eindig aantal symbolen (bijvoor-
beeld bits) voldoende om de afgeronde waarde te representeren.
Kwantisatie leidt tot een vervorming van het signaal. Het verschil tussen het
originele signaal en het gekwantiseerd signaal wordt wel kwantisatieruis
genoemd. Hoe fijner de kwantisatie, des te hoger het aantal benodigde bits
om het gekwantiseerd signaal vast te leggen, des te lager de kwantisatie-
ruis. Bij audiocd's worden 16 bits per monster gebruikt, waardoor kwantisa-
tieruis bij gemiddeld signaalniveau doorgaans niet hoorbaar is.
Na bemonsteren en kwantiseren zegt men dat het signaal digitaal is gewor-
den.
Voorbeeld: bij een spraaksignaal wordt vaak gewerkt met een bemonste-
ringsfrequentie van 8 kHz en met 256 mogelijke niveaus per signaalwaarde.
Om 1 signaalniveau aan te duiden zijn 8 bits voldoende. Op deze manier
wordt een spraaksignaal omgezet naar een digitaal signaal van
8000*8=64000 bits per seconde.
Nyquist-frequentie
In, onder meer, de telecommunicatie en de elektronische signaalverwerking
is de Nyquist-bemonsteringsfrequentie de theoretisch minimaal benodigde
bemonsteringsfrequentie waarmee een gegeven, in bandbreedte begrensd
signaal volledig kan worden gerepresenteerd, m.a.w. op betrouwbare wijze
kan worden gereconstrueerd vanuit de bemonsterde waardes. Als de hoog-
ste in het signaal voorkomende frequentie f0 is, dan is de Nyquist-
bemonsteringsfrequentie 2f0. Omgekeerd, bij een gegeven bemonsterings-
frequentie f, is de maximale frequentie f/2 die uit het bemonsterde signaal
correct kan worden gereconstrueerd de Nyquist-frequentie.
Als een signaal wordt bemonsterd met bemonsteringsfrequentie f, dan is
iedere aanwezige signaalcomponent boven een frequentie f/2 niet betrouw-
baar reconstrueerbaar vanuit de signaalmonsters. De frequentie f/2 staat
bekend als de Nyquist-frequentie, onder verwijzing naar het Nyquist-
Shannon bemonsteringstheorema. De frequentiecomponenten die boven de
Nyquist-frequentie liggen gaan niet verloren, maar worden gemengd met de
componenten van een lager frequnetie. Na bemonstering is deze vermen-
ging niet meer ongedaan te maken. Dit ongewenste effect wordt aliasing
genoemd.
Bijvoorbeeld, Compact Disc-geluid met een bemonsteringsfrequentie van
44.100 Hz kunnen geen frequenties die hoger zijn dan 22.050 Hz opgesla-
gen worden.
Opmerking 1: De feitelijke bemonsteringsfrequentie die nodig is om het ori-
ginele signaal te kunnen reconstrueren moet in de praktijk enigszins hoger
zijn dan de Nyquist-bemonsteringsfrequentie omdat filters een eindige over-
gang hebben.
Opmerking 2: De Nyquist-bemonsteringsfrequentie is ook de maximale fre-
quentie waarbij ideale ‘pulsen’ door een ideaal laagdoorlaat-kanaal kunnen
worden gestuurd. M.a.w.: als het kanaal alle frequenties doorlaat van W (in
Hz) of lager, dan is het mogelijk om door dit kanaal 2W pulsen/sec te trans-
porteren. Evenals in opmerking 1, is de feitelijk haalbare pulsherhalingsfre-
quentie enigszins lager, vanwege niet-perfecte pulsvormen en filters die in
praktisch realiseerbare systemen worden toegepast.

Hoofdstuk 9 A/D- D/A omvormers - 42 -


9.7 Oefeningen
Oefening 1

Van een 8-bits D/A omvormer is de analoge uitgangsspanning gelegen tus-


sen 0 V en +10 V. Hoveel
volt bedraagt elke stap.

Oefening 2

Hoe groot wordt de stap in oefening 1, als de uitgangsspanning gelegen is


tussen -8 V en +8 V?

Oefening 3

Een DAC moet een uitgangsspanning kunnen afgeven tussen -10 V en +10
V. De resolutie moet ten
minste 0,01 V zijn. Hoeveel digitale ingangen zijn er nodig.

Oefening 4

Als de DAC 0800 voorzien is om een uitgangsspanning te leveren tussen -


10V en +10 V, hoeveel is
dan de uitgangsspanning voor de digitale ingangsinformatie 00000101 en
00110110?

Oefening 5

Wat is een D/A omvormer? Verklaar het principe.


Toon aan, dat de nauwkeurigheid van een D/A omvormer evenredig is met
het aantal bits.
Welke voordelen heeft een D/A omvormer met R-2R-laddernetwerk t.o.v.
een eenvoudig type?
Welke specificaties zijn van belang bij D/A omvormers?

Oefening 6

Een 8-bits-omzeter (single digital ramp) wordt gestuurd door een klokoscilla-
tor met een frequentie van 500 kHz. De D/Aomvormer levert een maximum
uitgangsspanning van 5,12V.
Bepaal:
- De maximum conversietijd.
- De gemiddelde conversietijd.
- De resolutie van de omvormer.
- De digitale code van een uitgansspanning van 1,4 V.
- De maximum conversiesnelheid.

Hoofdstuk 9 A/D- D/A omvormers - 43 -


Oefening 7

Teken het verloop van Ur samen met Ui, de uitgang van de comparator, en
het kloksignaal van een 8-bits-omzeter (single digital ramp)

Figuur 37 een 8-bits-omzeter (single digital ramp)

Oefening 8

Onwerp de encodeerschakeling van een 2-bit A/D omvormer van het paral-
letype.

Oefening 9

1. Wat is een D/A omvormer? Verklaar het principe.


2. Toon aan, dat de nauwkeurigheid van een D/A omvormer evenredig
is met het aantal bits.
3. Welke voordelen heeft een D/A omvormer met R-2R-laddernetwerk
t.o.v. een eenvoudig type?
4. Welke specificaties zijn van belang bij D/A omvormers?
5. Wat is een A/D omvormer? Geef een overzicht van de belangrijkste
typen.
6. Hoe komt het dat ook bij A/D-omzetting de nauwkeurigheid toe-
neemt met het aantal bits?
7. Welk type van A/D omvormer geeft de snelste omzetting? Waarom?
8. Naar welk type van A/-omzetting gaat de voorkeur voor computer-
koppelingen?
9. Welke specificaties zijn van belang bij A/D omvormers?
10. Geef het blokschema van een A/D omvormer die werkt volgens het
teller principe, en verklaar de werking.

Hoofdstuk 9 A/D- D/A omvormers - 44 -


11. Een omvormer van het opéévolgend-benaderingstype bezit een 4-
bits register en een Ur van 16V. Beschrijf de opéénvolgende stap-
pen die uitgevoerd worden om een analoge ingangsspanning van
3,2V om te zetten in een digitaal uitgangssignaal.
12. Geef een blokschema van een ADC die werkt met een dubbele hel-
ling en gebruik maakt van een 10-bits teller. De klokfrequentie be-
draagt 100 kHZ en de referentiespanning is 5V. Waaraan wordt de
binaire uitgangscode gelijk voor een analoge ingangsspanning van
3V?

Oefening 10
Bepaal aan de hand van onderstaand schema het theorema van Nyquist.

Oefening 11
Geef, voor elk van de punten in de overdrachtkarakteristiek van onderstaan-
de figuur, de lineariteitsfouten en de differentiële lineariteitsfouten.

Hoofdstuk 9 A/D- D/A omvormers - 45 -


Hoofdstuk 9 A/D- D/A omvormers - 46 -
10. Hoofdstuk 10 CPLD interface voor een ADC............................. 2
10.1 Toestandsmachines ........................................................... 2
10.1.1 Toestandmachines zonder controle ingang.................... 2
10.1.2 Toestandsmachines met controle- in- en uitgangen. ...... 4
10.2 CPLD interface voor een Analoog naar Digitaal omvormer.. 7
10.3 Een CPLD gebaseerd data acquisitie netwerk .................. 12
10.4 Oefeningen ...................................................................... 13

Hoofdstuk 10 CPLD interface voor een ADC - 1 -


10. Hoofdstuk 10
CPLD interface voor een ADC
10.1 Toestandsmachines

Een toestandsmachine (fine state machine) is een digitale schakeling, waar-


bij de uitgangen een eindig aantal unieke toestanden doorlopen.
Het doorlopen van de toestanden gebeurt op het ritme van een klok.

10.1.1 Toestandmachines zonder controle ingang.

Bijvoorbeeld een 3-bit Gray Code Counter.

Figuur 1 Toestandsdiagram van een 3-bit Gray Code Counter

We zien dat hier 8 toestanden zijn benoemd. S0 tot en met S7.


De overgang van de éne toestand naar de andere toestand gebeurt op het
ritme van een klok, en aan de overgang moet geen voorwaarde worden
voldaan.

In VHDL worden de verschillende toestanden gedefinieerd met een opge-


somd type (enumerated type).
Voorbeeld:

Beschrijving van de entity van een 3-bit Gray Code counter:

Figuur 2 Blokschema van entity GRAY_CT1

Hoofdstuk 10 CPLD interface voor een ADC - 2 -


De architectuur van een 3-bit Gray counter:
(gray_ct1.vhd)

Hoofdstuk 10 CPLD interface voor een ADC - 3 -


Men kan de uitgangen ook rechtstreeks beschrijven in de toestand (state).
Bv:

10.1.2 Toestandsmachines met controle- in- en uitgangen.

Een toestandsmachine kan ook beschikken over een aantal in- en uitgan-
gen. Men kan dan gaan van de éne toestand naar de ander toestand op
voorwaarde van een bepaalde conditie.
Een voorbeeld:

Figuur 3 Toestandsdiagram

Om te gaan van toestand start  toestand continue moet in1 laag zijn.
Als in1 hoog is dan blijven we in toestand start zitten. Om van toestand
continue  toestand start te gaan moet er aan geen voorwaarde worden
voldaan. We spreken dus van conditie afhankelijke overgangen en conditie

Hoofdstuk 10 CPLD interface voor een ADC - 4 -


onafhankelijke overgangen.

Figuur 4 Timing van de toestandsmachine

VHDL beschrijving van toestandsmachines met controle-ingangen en


uitgangen.
In principe is de beschrijving ongeveer hetzelfde als toestandsmachines
zonder controle ingangen.
De toestanden zullen worden gedefinieerd met behulp van een CASE-
statement en de voorwaarden worden met het IF THEN-statement beschre-
ven.

Figuur 5 Blokschema van entity STATE_X1

Beschrijving van de entity STATE_X1

Hoofdstuk 10 CPLD interface voor een ADC - 5 -


Volledige beschrijving van toestandsmachines met controle-ingangen
en uitgangen.

Simulatie van de toestandsmachine STATE_X1

Figuur 6 Simulatie van de toestandsmachine STATE_X1

Hoofdstuk 10 CPLD interface voor een ADC - 6 -


10.2 CPLD interface voor een Analoog naar Digitaal omvormer.

Het is de bedoeling om een data-acquisitie-netwerk te ontwerpen met een


ADC0808.
De ADC0808 beschikt over een 8 kanaalanaloge multiplexer met ingangen
IN0 tot IN7. Deze ingangen zijn te selecteren via een analoog kanaal select
input, of adres bestaande uit 3 bits. ADD A tot ADD C met ADD C de msb.
van het adres. Voor dat een analoog signaal wordt omgezet moet het adres
vergrendeld worden in het adresregister van de omvormer met behulp van
ALE (Adres Latch Enable)

Figuur 7 ADC0808

Het conversieproces start op de stijgende flank van START.


START en ALE kunnen samen worden aangesloten.

Figuur 8 Timing van een analoog naar digitaal omvormer

Hoofdstuk 10 CPLD interface voor een ADC - 7 -


End-of-conversion is een teken dat de omzetting is afgelopen, EOC wordt
laag. Het omzettingsproces werk op het ritme van een klok.
Na een EOC kan de digitale uitgang gelezen worden door Output Enable
hoog te zetten (OE). Wanneer OE laag is dan bevinden de digitale uitgan-
gen zich in hoog impedante toestand.

Men kan een toestandmachine ontwerpen dat de ADC controleert en de


digitale uitgang vergrendelt in een 8-bit latchregistger.

Figuur 9 Een ADC Interface met één uitgangskanaal en een manuele selec-
tie van de analoge ingang

Hoofdstuk 10 CPLD interface voor een ADC - 8 -


De controller is een toestandsmachine die een laag actieve impuls accep-
teert om de ingang “go” zodat één geselecteerde analoge ingang wordt om-
gezet naar een 8-bit digitale waarde, en deze vergrendelt in een 8-bit latch.
De selectie van de analoge ingang gebeurt manueel met behulp van dip-
switches aangesloten op ingangen ADD A tot ADD C.
De volledige toestandmachine kan worden geprogrammeerd in een CPLD
bv. EPM7128SLC84-7 van Altera.
Met gegeven toestandsdiagram kan men de controller ontwerpen.

Figuur 10 Toestandsdiagram voor de controller van de ADC

We gebruiken 2 synchrone ingangen “go” en “eoc”.


De asynchrone reset zet de controller in de “idle” toestand, dit is niet te zien
in het toestandsdiagram.
Volgende uitgangen worden gebruikt, “sc” (start conversion), “oe” (output
enable), en “en” (latchenable)

Hoofdstuk 10 CPLD interface voor een ADC - 9 -


De toestanden zijn de volgende:
• idle Wacht op go = 0 (PB bedient). Alle uitgangen zijn laag.
• start Wacht op go = 1 (PB is los). Volgende toestand is wait1 en
maakt sc =1 (start/ale puls). De andere uitgangen zijn laag.
• wait1 Wacht op eoc = 0 (EOC is laag gedurende, en niet boor de
omzetting is gestart) eoc mag niet getest worden op 1 na de omzet-
ting. Alle uitgangen zijn laag.
• wait2 Wacht op eoc = 1 (omzetting is afgelopen)
Wanneer de omzetting is afgelopen is de volgende toestand read.
Uitgangen oe = 1 en en = 1.
• read Enable ADC output (oe = 1) en maak de latch transparant
(en = 1).
• store Houd de ADC output enabled, zet de latch in mode geheu-
gen (en = 0) De waarde van de ADC staat nu bewaard in output
latch.

De frequentie van de klok op de ADC0808 moet liggen tussen 10kHz en


1280kHz.
De oscillator op het UP1 board bedraagt 25,175 MHz en moet dus gedeeld
worden.
Een 5-bit teller kan hiervoor dienst doen.
25,175 MHz/32 = 786,7 kHz

Figuur 11 5-bit teller om de klok te delen door 32

Wanneer we toestand “Idle” verwijderen uit het toestandsdiagram dan gaat


het ontwerp continu de analoge ingang omzetten naar een digital waarde.
Het toestanddiagram ziet er dan uit zoals in Figuur 12.
Er moet dus niet telkens op de drukknop “go” gedrukt worden. De schake-
ling van het ontwerp blijft ongewijzigd.

Hoofdstuk 10 CPLD interface voor een ADC - 10 -


Figuur 12 Toestandsdiagram voor continu ADC-omzetting met een ADC-controller

Voor de berekening van de hoogste frequentie van het analoog ingangssig-


naal dat nog kan omgezet worden gaan we als volgt tewerk.

Voor een klok van 787kHz.


Een conversiecyclus neemt 64 klokimpulsen in beslag. (zie datasheets van
de ADC0808)

De controller neemt ongeveer 13 klokimpulsen in beslag plus 2µsec.

De ADC0808 heeft 2µsec. nodig om zijn inwendig register te updaten.

1
TS = 3
x77klokimp ulsen + 2µsec = 99,8x10 − 6 seconden
787 x 10 klokimpuls en/seconde
1
fs = = 10,02kHz
99,8x10 - 6 s

Volgens het theorema van Nyquist is de maximale frequentie aan de analo-


ge ingang beperkt tot 5,01kHz.

Hoofdstuk 10 CPLD interface voor een ADC - 11 -


10.3 Een CPLD gebaseerd data acquisitie netwerk

Onderstaand schema laat een CPLD gebaseerd data-acquisitie-netwerk


zien.
Het bestaat uit een controller, decoder, deler door vier en vier 8-bit registers.
Er worden vier analoge ingangen gedigitaliseerd.

Figuur 13 Een CPLD gebaseerd data acquisitie netwerk

De controller, decoder, deler door vier en vier 8-bit registers worden gepro-
grammeerd in een CPLD.
De 2-bit teller (deler door vier) selecteert steeds één analoge ingang van de
ADC0808.
Nadat een analoge waarde is omgezet en is overgedragen in één van de
vier 8-bit latches, moet de teller met één worden verhoogd om een volgende
analoge ingang te selecteren. Figuur 14 laat een bijkomende toestand zien
in het toestandsdiagram. De bijkomende toestand krijgt de naam “incr”.

Hoofdstuk 10 CPLD interface voor een ADC - 12 -


Nadat de waarde van de ADC is weggeschreven in een latch gaat CTN_EN
hoog welke de teller toelaat na een volgend kloksignaal te incrementeren
zodat men van toestand store in toestand incr terecht komt.

Figuur 14 Toestandsdiagram van een 4-kanaals data acquisitie netwerk

Om de verschillende toestanden van het data-acquisitie-netwerk in één


CPLD te programmeren moet deze over voldoende I/O beschikken.
Men heeft 32 outputs nodig (vier 8-bit latches) omdat men maar vier analoge
kanalen gebruikt. Indien men alle 8 analoge kanalen van de ADC0808 ge-
bruikt heeft men 64 outputs nodig.
Men kiest dan voor een krachtiger CPLD met meer pinnen bv:
EPM7128SQC100; 100-pin quad flat-pack.

10.4 Oefeningen
Oefening 1
Programmeer een looplicht door gebruik te maken van toestandsmachines.
Voorzie de mogelijkheid om met ingangen verschillende variaties te selecte-
ren.

Oefening 2
Programmeer een modulo n-teller door gebruik te maken van toestandsma-
chines. Voorzie de mogelijkheid om met ingangen verschillende modes te
selecteren.

Hoofdstuk 10 CPLD interface voor een ADC - 13 -


Hoofdstuk 10 CPLD interface voor een ADC - 14 -
11. Hoofdstuk 11 Een Matrix Keypad Encoder Systeem .................. 2
11.1 Inleiding ............................................................................. 2
11.2 Uitlezing van een matrix keypad ......................................... 3
11.3 Uitlezing van een matrix keypad bij aanslag van een toets.. 4
11.4 Oefening: ........................................................................... 5

Hoofdstuk 11 Een Matrix Keypad Encoder Systeem - 1 -


11. Hoofdstuk 11
Een Matrix Keypad Encoder Systeem
11.1 Inleiding

Figuur 1 Een matrix keypad encoder systeem

Een toetsenbord onder de vorm van een matrix keypad encoder systeem is
georganiseerd in de vorm van een matrix.
Bovenstaande matrix bestaat uit vier rijen en vier kolommen.
We kunnen dus in dit voorbeeld 16 verschillende karakters gebruiken op het
toetsenbord.

Wanneer een bepaalde toets wordt ingedrukt dan maakt een overeenkom-
stige kolom contact met een overeenkomstige rij. Bijvoorbeeld als toets “0”
wordt ingedrukt dan zorgt het contact dat rij nul verbonden is met kolom 0.

Hoofdstuk 11 Een Matrix Keypad Encoder Systeem - 2 -


11.2 Uitlezing van een matrix keypad
Om een matrix keypad uit te lezen kan men gebruikt maken van een 2 naar
4 decoder, een 4 naar 1 multiplexer, een 16-bit teller en een vier bit datare-
gister samen met een BCD naar 7-segmentdecoder.

Figuur 2 Uitlezing van het keypad als er geen toets wordt ingedrukt.

Met een 4-bit binaire teller worden alle kolommen en rijen gecontroleerd.
Met een 2 naar 4 decoder worden de kolommen gecontroleerd.
Met de 4 naar 1 multiplexer worden de rijen gecontroleerd.
Wanneer er geen toets wordt ingedrukt dan doven alle segmenten van het
7-segmentdisplay omdat:
• I0 tot en met I3 van de mux. op “1” staan
• en de uitgang Z op “1” staat
• zodat het data register gedisabled is.

Hoofdstuk 11 Een Matrix Keypad Encoder Systeem - 3 -


11.3 Uitlezing van een matrix keypad bij aanslag van een toets

Wanneer nu bijvoorbeeld toets 5 wordt ingedrukt wordt met behulp van de


desbetreffende schakelaar kolom 2 verbonden met rij 2. (O1 & I1)

Figuur 3 Uitlezing van een matrix keypad

De bedoeling is dat er een “5” op het 7-segmentdisplay komt te staan.

Zolang de uitgangen van de binaire teller niet gelijk zijn aan de kolomwaarde
en de rijwaarde van de desbetreffende toets blijft de uitgang van de multi-
plexer gelijk aan “1”. Zie Figuur 3.

Hoofdstuk 11 Een Matrix Keypad Encoder Systeem - 4 -


Vanaf het moment dat de binaire teller op “0101” komt te staat wordt O1 en
Z laag.
De klok wordt geblokkeerd en het binaire getal “0101” = 5 wordt in het data-
register vergrendeld. Figuur 4 geeft de uitlezing van een matrix keypad
weer.

Figuur 4 Uitlezing van een matrix keypad


11.4 Oefening:
Programmeer het Matrix Keypad Encoder System in een CPLD of een
FPGA.

Hoofdstuk 11 Een Matrix Keypad Encoder Systeem - 5 -


Hoofdstuk 11 Een Matrix Keypad Encoder Systeem - 6 -
12. Hoofdstuk 12 Geheugens............................................................. 2
12.1 Inleiding ............................................................................. 2
12.2 Random Access Memory ................................................... 3
12.2.1 Statische RAM ............................................................. 4
12.2.2 1K4-RAM type 2114 in het IEC symbool........................ 4
12.3 Dynamic Random Access Memory..................................... 6
12.3.1 Dynamische RAM......................................................... 6
12.3.2 De dynamische RAM 4116 ........................................... 7
12.3.3 Single Inline Memory Module ........................................ 8
12.3.4 Dual Inline Memory Module........................................... 9
12.4 ROM ................................................................................ 10
12.5 Programmable Read Only Memory................................... 10
12.6 Erasable Programmable Read Only Memory.................... 10
12.7 Electrically Erasable Programmable Read Only Memory .. 11
12.8 Flashgeheugen ................................................................ 12
12.9 Embedded memory in Altera FPGA’s ............................... 13
12.10 Het niet vluchtig geheugen in FPGA’s van Lattice ........ 14
12.11 Oefeningen.................................................................. 15

Hoofdstuk 12 Geheugens - 1 -
12. Hoofdstuk 12
Geheugens
12.1 Inleiding
Het geheugen van een computer bestaat uit een groot aantal kleine eenhe-
den van dezelfde grootte. Elk van deze eenheden is toegankelijk via een
uniek nummer. Dit wordt een geheugenadres (Eng: memory address) ge-
noemd.

Byte
De adresseerbare eenheden van het geheugen zijn meestal bytes (8 bits).
Alleen voor hele simpele processoren, zoals die in toetsenborden gebruikt
worden, worden wel 4-bits processoren gebruikt.

Woord
De fysieke geheugeneenheden (woorden) zijn tegenwoordig meestal groter,
namelijk 32-bits (4 bytes) of 64-bits (8 bytes). Dit heet de woordbreedte van
een computer. Er bestaan computers met woordbreedtes van meer dan 64
bits. Vroeger heeft men wel computers gemaakt met een woordbreedte van
12 en 48 bits, maar dit is tegenwoordig niet meer gebruikelijk.

Adresruimte
Zulke adressen worden doorgaans geschreven in hexadecimale vorm. Bij-
voorbeeld, een geheugen van 64kB kan geadresseerd worden door met de
adressen van 000016 tot en met FFFF16. Dit is een 16-bits adres. De 8-bits
processoren uit de jaren 80 hadden doorgaans een adresruimte van deze
grootte. Tegenwoordig is een adresruimte van gigabytes gebruikelijk, en dit
neemt alsmaar toe. Voor het adresseren van 4 gigabyte is een 32-bits adres
nodig.

Adresbus
De microprocessor heeft aan de buitenkant een aantal verbindingen die de
adresbus heten. Op deze verbindingen (32 stuks in het geval van een 32-
bits adresbus) komt het adres te staan waarvan de processor de waarde uit
het geheugen wil lezen of schijven. De data wordt via de databus uitgewis-
seld. De grootte hiervan is gelijk aan de woordbreedte van de computer.

Swapping
De adresbus van de processor is tegenwoordig niet rechtstreeks verbonden
met de geheugenchips. De memory manager zit hier nog tussen. Deze ver-
taalt de geheugenadressen zoals de processor ze ziet naar de fysieke
adressen zoals die in de geheugenchips staan. Het belangrijkste doel hier-
van is dat weinig gebruikte stukken geheugen tijdelijk op de harde schijf
bewaard kunnen worden. Dit mechanisme wordt swapping genoemd. Het

Hoofdstuk 12 Geheugens - 2 -
geheugen dat op deze manier wel te adresseren is, maar niet echt bestaat
(omdat het naar de schijf geswapt is) heet virtueel geheugen.

Von Neumann
Computers die met het systeem van een adresseerbaar geheugen werken
(dit zijn bijna alle computers) heten Von Neumann computers. Zowel het uit
te voeren programma als de gegevens staan in dit geheugen. Het gegeven
dat minder informatie over de databus gestuurd kan worden dan de
microprocessor kan verwerken heet de Von Neumann bottleneck.
Computers die niet volgens de Von Neumann architectuur werken zijn ma-
chines als neurale netwerken. Er bestaat ook een zogenaamde Harvard
architectuur, maar dat is slechts een variant op Von Neumann

12.2 Random Access Memory

Random Access Memory (RAM) is geheugen waarvan iedere geheugen-


plaats even snel toegankelijk is (in tegenstelling tot bijvoorbeeld een harde
schijf waarbij gewacht moet worden tot de betreffende plek onder de leeskop
doordraait). Daarnaast kan RAM-geheugen zowel gelezen als geschreven
worden.
De eerste elektronische computers hadden soms naast de relais en
buizenschakelingen een zogenaamd trommelgeheugen, bestaande uit een
grote trommel bedekt met een magnetiseerbare laag die ongeveer 100 keer
per seconde ronddraaide en die op enkele tientallen regels een honderdtal
woorden had staan. Elke regel werd afgelezen door een eigen leeskop. Op
een trommelgeheugen kwam elke geheugenplaats dus ongeveer elke 10
milliseconde een keer langs, en kon dan gelezen of geschreven worden.
Maar dit was dus geen RAM.
Na het trommelgeheugen kwam het werkgeheugen in de vorm van magneti-
seerbare ringetjes (ringkern geheugen). Dit was wel RAM.
Gedurende de jaren 70 van de 20e eeuw kwamen geïntegreerde geheugen-
schakelingen op de markt. In 1974 dacht men nog dat het nooit mogelijk zou
zijn om meer dan 8kB op één chip te maken (de chip brandt zichzelf binnen
enkele minuten kapot), in 2003 zijn er chips op de markt die elk een GB
kunnen bevatten. (1 GB = 1024 MB = 1048576 kB = 1073741824 bytes =
8589934592 bits) Inmiddels worden kleinere 8MB chips "gestackt" op 1 gro-
te chip. Ze worden dan als het ware op elkaar geplakt. Hierdoor kunnen er
wel 32 of zelfs 64 chips in 1 chip-package zitten.
Het werkgeheugen van de moderne computer bestaat uit twee soorten
RAM: DRAM (dynamische RAM), en het nog snellere maar duurdere SRAM
(statische RAM).
Een bit in dynamisch RAM bestaat effectief uit een kleine condensator dat
een aantal keren per seconde opnieuw moet worden gevuld om de inhoud
niet kwijt te raken. Voor elke geheugencel is maar één transistor nodig om
die ene nul of één te bewaren.

Hoofdstuk 12 Geheugens - 3 -
Elk bit in statisch RAM bestaat uit een transistorschakeling die zijn staat
zelfstandig onthoudt zolang er een voedingsspanning is. De transistorscha-
keling die een nul of één kan onthouden heet een flipflop, en daar zijn twee
transistors voor nodig.
In tegenstelling tot ROM is RAM niet alleen zeer snel te lezen maar ook te
schrijven (in ongeveer enkele nanoseconden).

12.2.1 Statische RAM

Deze IC's bestaan uit FF's. opgebouwd uit vier transistoren. De geheugenin-
houd blijft bewaard zolang de voedingsspanning behouden blijft. Dit nadeel
kan men opvangen door het geheugen van een batterijvoeding te voorzien.
Daar NMOS IC's te veel stroom vergen zal men steeds meer en meer
CMOS geheugens gebruiken. Dit omdat CMOS geheugens hun informatie
kunnen bewaren bij verlaagde spanning en de benodigde stroom bestaat uit
een kleine lekstroom. CMOS IC's zijn heden even snel als NMOS geheu-
gens vandaar dat deze laatste van de markt verdwijnen. Dit maakt dat de
moderne computers nog enkel CMOS statische RAM's gebruiken.

12.2.2 1K4-RAM type 2114 in het IEC symbool.

Figuur 1 1K4-RAM 2114

De S.RAM 2114 bevat:

10 Adresingangen (210 = 1024), genummerd van A0 tot en met A9 voor de


adressen 0 tot en met 3FFH.
Een /CS-ingang of de chipselect ingang. Deze ingang wordt gebruikt om
de chip te selecteren.

Hoofdstuk 12 Geheugens - 4 -
Een WE ingang of de lees/schrijfingang.
Vier I/O lijnen. Die aanduiding leert ons dat de data in- en uitgelezen wordt
via dezelfde lijnen. Deze lijnen zijn dus bidirectioneel. Dat de uitgangen "3-
status uitgangen" zijn, zien we aan de omgekeerde driehoek en het cijfer 3.
De data wordt in de RAM ingelezen als /CS = 0 en WE = 0 zijn. Dit zien we
in het symbool door de polariteitindicatoren en de aanduiding "write".
Het uitlezen van de data gebeurt door de chip te activeren
/CS = 0 en de lees/schrijfingang hoog te maken (WE = 1).
Om de uitgangen in HI. toestand te brengen volstaat het /CS hoog te maken.
Dergelijk geheugen kan gebruikt worden als datageheugen van een micro-
processorsysteem.

Tabel 1 geeft het verband weer tussen de geheugencapaciteit, het aantal


bits, het aantal adreslijnen en het eindadres in hex.-decimale notatie.

Tabel 1 het verband tussen geheugencapaciteit, aantal bits, aantal adreslijnen

Figuur 2 Een samengesteld geheugen SRAM van 64K8

Hoofdstuk 12 Geheugens - 5 -
12.3 Dynamic Random Access Memory

Dynamic random access memory, kortweg DRAM, is een type RAM waarbij
iedere bit in een eigen condensator wordt opgeslagen. De opgeslagen
lading lekt snel weg en moet daarom periodiek worden ververst. Vanwege
dit herladen wordt het dynamische RAM genoemd, in tegenstelling tot
SRAM. Het voordeel ten opzichte van SRAM is, dat er weinig componenten
per bit nodig zijn: één transistor en condensator per bit, vergeleken met zes
transistors in SRAM. Hierdoor kan met DRAM een hogere integratiedicht-
heid behaald worden. DRAM verliest de gegevens als de voedingsspanning
wegvalt en is daarom een vluchtig geheugen.

12.3.1 Dynamische RAM

In dynamische RAM's heeft men het aantal transistoren per bit kunnen be-
perken tot 1. Vandaar dat er in een Dynamische RAM chip 4 X meer bits
zitten dan in statische RAM.
Een geheugenbit in dynamische RAM bestaat uit een condensator.
Een opgeladen condensator komt overeen met een "1".
Een ontladen condensator komt overeen met een "0".
Deze condensatoren lekken echter leeg zodat men om de 2 ms de informa-
tie terug moet schrijven in de dynamische RAM. Op de chip is er echter ex-
tra hardware voorzien om dit herinschrijven te vergemakkelijken.
Zo volstaat het bij de meeste dynamische RAM's om 128 opéénvolgende
adressen aan te bieden om alle bits uitgelezen en heringeschreven te heb-
ben. Dit herinschrijven noemt men de refresh.
De refresh kan op verschillende manieren gebeuren:
- Ofwel zorgt de microprocessorhardware ervoor.
- Ofwel zorgt een CRT controller ervoor.
- Ofwel zal men er een refreshcontroller bijbouwen welke de microprocessor
om de 2 ms even laten stoppen en de 128 opéénvolgende adressen aan-
biedt aan de geheugens, en waarna de microprocessor verder kan werken.
Dynamische RAM gebruikt men voor grotere geheugens. Omdat grote ge-
heugens nogal veel adreslijnen hebben zal men het adres in twee delen
aanbieden. Hierdoor reduceert men het aantal pinnen tot 16 voor een 256 K
X 1 bit geheugen.

Hoofdstuk 12 Geheugens - 6 -
12.3.2 De dynamische RAM 4116

Figuur 3 Dynamische RAM 4116


De 4116 is een dynamische RAM die 16384 woorden bevat van 1 bit.
In het symbolenschema (IEC) zien we dat er 7 adresingangen beschikbaar
zijn. Nochtans verwachten wij hier 14 ingangen gezien 214 = 16384.
In de 4116 wordt hiervoor als volgt tewerk gegaan:
Eerst moeten de rijadressen aangesloten worden aan de ingangen; door het
/RAS-signaal (Row Address Strobe) 0 te maken wordt de rij adresinformatie
in de chip opgenomen en bewaard in een register.
Daarna is een gelijkaardige bewerking nodig voor de kolom adresinformatie
met de /CAS-ingang (Colom Adress Strobe).
De adresinformatie moet echter stabiel aanwezig zijn vóór de 1-0 overgang
(dalende flank) van het /RAS of /CAS-signaal.
In het IC zijn alle in-en uitgangen TTL compatible.
De uitgang kan in een HI toestand geschakeld worden teneinde uitbreiding
mogelijk te maken. (verhogen van de geheugencapaciteit)
Via de tijdsdiagrammen in datasheets kunnen de lees- en schrijf cyclus be-
ken worden.

Hoofdstuk 12 Geheugens - 7 -
12.3.3 Single Inline Memory Module

Figuur 4 Single Inline Memory Module


Single Inline Memory Module (SIMM) zijn RAM-modules die het eigenlijke
werkgeheugen van een computer vormen. SIMM is een verouderde variant
van het huidige DIMM-systeem, ze worden anno 2005 nauwelijks meer ver-
kocht. SIMM-modules gebruiken contactpunten aan 1 kant van de module.
Hierdoor is het aantal contactpunten op een SIMM-kaart lager dan het aantal
op een DIMM-kaart. Er bestaan 2 varianten, een 3.5 inch formaat met 30
contactvlakjes, en een 4.25 inch formaat met 72 contactvlakjes.
De 30 pin-variant kan 8-bit dataverkeer aan. Met een breedte van de ge-
heugenbus van 32-bits zijn daarom altijd modules in veelvouden van 4 no-
dig. De variant met 72 pinnen kan 32-bit dataverkeer aan, waardoor slechts
1 kaart nodig is voor het zelfde effect. Systemen met een geheugenbus-
breedte van 64-bits zouden veelvouden van 8 respectievelijk 2 modules
nodig hebben, ware het niet dat dergelijke systemen meestal alleen geschikt
zijn voor de modernere DIMM modules.

Figuur 5 SIMM block diagram

Hoofdstuk 12 Geheugens - 8 -
12.3.4 Dual Inline Memory Module

Figuur 6 Dual Inline Memory Module


Dual Inline Memory Modules (DIMM) zijn RAM-modules die het eigenlijke
werkgeheugen van een computer vormen. DIMM's zijn de modernere ver-
sies van het verouderende SIMM-systeem. Ze heten "Dual" omdat ze in
tegenstelling tot SIMM's aan beide kanten van het 'reepje' een printplaat en
aansluitcontactpunten hebben zitten.
DIMM's zijn verkrijgbaar in verschillende versies, o.a. 5 volt en 3 volt, gebuf-
ferd of ongebufferd, SDR SDRAM (168 aansluitingen) of DDR SDRAM (184
aansluitingen).
SDR staat voor Single Data Rate en DDR staat voor Dual Data Rate en
slaat op het aantal bits dat het geheugen per kloktik kan verwerken.
SDRAM staat voor Synchronous Dynamic RAM.
De oorspronkelijke SDR versie werden verkocht in de varianten PC66.
PC100 en PC133, waar het getal de doorvoersnelheid van de geheugenbus
in MHz aangeeft.
Bij de modernere varianten wordt de doorvoersnelheid in (Mega)bytes per
seconde weergegeven, omdat de modules per keer 32 bits = 4 bytes kunnen
transporteren zijn deze getallen een stuk hoger, bijvoorbeeld PC2100,
PC2700 of PC3200 voor resp. een 533, 677 of 800 Mhz bus.
De meeste recente AMD en Pentium gebaseerde PC's gebruiken ofwel SDR
SDRAM in de goedkopere versies of DDR SDRAM in de high-end modellen,
beide op 3,3 volt. Deze laatsten hebben een doorvoersnelheid die twee keer
zo hoog ligt als die van SDR SDRAM (vandaar de benaming DDR: Dual
Data Rate).

Hoofdstuk 12 Geheugens - 9 -
12.4 ROM

ROM staat voor Read Only Memory. (Eng. 'Alleen leesbaar geheugen')
ROM-geheugen wordt gebruikt overal waar een apparaat ook wanneer het
uitstaat een programma moet bewaren (normaal RAM-geheugen verliest zijn
inhoud wanneer er geen spanning meer is), of wanneer het nooit of slechts
zelden nodig is om het programma te wijzigen. ROM is, in tegenstelling tot
wat sommige mensen denken, zeker niet sneller dan RAM; daarom werd op
oude pc's het ROM door de computer snel in RAM gekopieerd alvorens het
te gebruiken. Dit proces heette ROM shadowing.
Het ROM-geheugen is relatief traag, en kan na 2003 niet erg veel kleiner,
goedkoper en sneller meer worden (het zou zijn inhoud langzaam verliezen
als het nog kleiner gemaakt wordt).
De naam ROM wordt veelal exclusief voor het masker-ROM gebruikt. Bij
deze oervorm wordt de data tijdens het fabricageproces in de chip aange-
bracht. Dit gebeurt door delen van de chip selectief weg te laten.

12.5 Programmable Read Only Memory

Programmable Read Only Memory (PROM), ofwel programmeerbaar alleen


lezen geheugen, is een vervolgontwikkeling op het ROM-geheugen. Het
bood het voordeel van elektrische programmering. Verder heeft het dezelfde
eigenschappen als een ROM: de geheugeninhoud blijft bewaard ook wan-
neer het een apparaat uitstaat. De beperking van eenmalige programmering
leidde ertoe dat wisbare geheugens werden ontwikkeld.

12.6 Erasable Programmable Read Only Memory

Figuur 7 IC EPROM 2716

Hoofdstuk 12 Geheugens - 10 -
Een Erasable Programmable Read Only Memory (EPROM), ofwel wisbaar,
programmeerbaar, alleen lezen geheugen, is een geïntegreerde schakeling.
EPROMs worden in allerlei apparaten toegepast waarin gegevens opgesla-
gen moeten blijven als het apparaat uitstaat, maar die niet veranderen tij-
dens normaal gebruik (bijvoorbeeld het BIOS, en elk apparaat waarin een
processor gebruikt wordt, zoals een chipkaart).
De gegevens in een EPROM kunnen weer worden gewist door de chip, die
achter een stukje glas in de behuizing zichtbaar is, enige tijd (een paar minu-
ten) aan UV licht van een ultraviolet lamp bloot te stellen. Hiervoor is specia-
le laboratoriumapparatuur nodig. Vervolgens kunnen in een speciaal appa-
raat nieuwe gegevens in het geheugen worden geschreven. Dit wis- en
schrijfproces kan, afhankelijk van de kwaliteit van de EPROM, een aantal
keren worden herhaald.
In plaats van de EPROM wordt sinds 1995 steeds vaker een EEPROM en
sinds 2000 het Flashgeheugen gebruikt.

12.7 Electrically Erasable Programmable Read Only Memory


Electrically Erasable Programmable Read Only Memory (EEPROM), ofwel
elektrisch wisbaar, programmeerbaar alleen lezen geheugen, kan met be-
hulp van een elektrische spanning gewist worden. Oudere typen EEPROM
hadden vaak minstens 12 volt nodig, maar moderne typen EEPROM laten
zich vaak al bij 5 of zelfs 3V wissen.
Het grote voordeel van dit type geheugen is dat het gewist en opnieuw be-
schreven kan worden terwijl het is ingebouwd in elektrische apparatuur.
Meestal kan dit proces zo'n 10.000 tot 20.000 maal herhaald worden, duur-
dere varianten halen zelfs de 100.000 maal.
De naam "EEPROM" wordt vooral gebruikt voor kleinere geheugens die de
inhoud kunnen wijzigen zonder eerst een gedeelte te hoeven wissen (alleen
het gewijzigde deel wordt automatisch eerst gewist).
Omdat de herschrijfbaarheid beperkt is (in tegenstelling tot statisch of dyna-
misch RAM-geheugen, zoals in PC's te vinden is), wordt bij de meeste toe-
passingen het geheugen in blokken opgedeeld. Een speciale controller
houdt bij welke blokken het vaakst gebruikt zijn en verdeelt zo de te be-
schrijven data gelijkmatig over het beschikbare geheugen.
Omdat elke schrijfactiviteit gepaard gaat met het wissen van een blok (een
sector) is het schrijven van EEPROM geheugen vaak een langzaam proces.
De leesprestaties zijn daarentegen veelal uitstekend.
Door massaproductie is EEPROM geheugen tegenwoordig zo goedkoop
geworden dat het nagenoeg alle andere vormen van ROM-geheugen ver-
drongen heeft.

Hoofdstuk 12 Geheugens - 11 -
12.8 Flashgeheugen

Figuur 8 Flashmodule, geïntegreerd op een PCB-bord (onderaan)

Onder flashgeheugen ("Geheugenkaart") verstaat men een niet-vluchtige


vorm van elektronische dataopslag op basis van de EEPROM techniek.
Deze techniek maakt het mogelijk om d.m.v. één programmeeractie op ver-
schillende plekken in het geheugen te schrijven of te wissen. Flashgeheugen
is 'persistent' geheugen: het behoudt de data als de spanning wordt afgezet.
De naam "FLASH" is ontstaan, omdat dit type EEPROM in één keer (in een
flits) volledig of gedeeltelijk gewist kan worden, om er vervolgens iets anders
in te schrijven.
Er zijn twee types flashgeheugen: NOR- en NAND flash, gebaseerd op de
schakelingen die worden gebruikt om een data item op te slaan.
Flashgeheugen wordt onder andere gebruikt als BIOS-ROM in pc's, in MP3-
spelers en USB sleutels. Het wordt ook gebruikt in geheugenkaarten voor
digitale camera's, mobiele telefoons en PDA's.
Flashgeheugen wordt veel gebruikt om ingebedde systemen te booten en
om configuratiedata op te slaan in plaats van op een gewone harde schijf
zoals in een pc. Om een aantal redenen wordt vaak schrijftoegang tot het
bestandssysteem op de flash genegeerd; tenzij voor upgrades van dergelij-
ke systemen. Door een ontbreken van mechanische onderdelen (zoals die
aanwezig zijn in een harde schijf), is flashgeheugen ook robuuster en daar-
door te prefereren bij ontwerpen die niet vast gemonteerd zijn.
Een van de grote nadelen van flashgeheugen is dat de schrijftoegang zeer
traag is. Alvorens een dataonderdeel gewijzigd kan worden, moet een volle-
dige sector gewist worden (alle bits worden op '1' gezet), waarna de nodige
bits op '0' gezet worden. Een typische grootte van een flashchip is 64 kB: om
een byte te wijzigen (bijv. een karakter), moeten er meer dan 64.000 bytes
worden gewist en herschreven.

Hoofdstuk 12 Geheugens - 12 -
Door de robuuste uitvoering is flashgeheugen bestand tegen water, stoten,
ontploffingen en ander onheil.
Typen flash geheugenkaarten:
Secure Digital (SD)
CompactFlash
SmartMedia
Multi Media Card
Reduced Size MMC
Mini Secure Digital
Micro Secure Digital
xD-Picture Cards.
Een USB sleutel gebruikt dezelfde technologie maar is een apparaat op
zich, het is geen geheugenkaart.

12.9 Embedded memory in Altera FPGA’s

Ondersteunende toepassingen zoals digitaal signaalverwerking (DSP), elek-


tronische gegevensverwerking, en de functies van de systeemcontrole, biedt
het embedded geheugen dat in FPGA’s van vandaag wordt gebruikt hoge
geheugenbandbreedte aan, ze zijn veelzijdig en kunnen een verscheiden-
heid van geheugenfuncties uitvoeren, zoals:
• Directe toegang (RAM)
• ROM
• First-in, first-out (FIFO)
• Dual port memory
• Schuifregisters
De TriMatrix geheugenarchitectuur is een nieuwe evolutie in embedded
memorys in FPGAs van Altera.
Het geheugen wordt samengesteld van drie verschillende geheugenstructu-
ren die een grote verscheidenheid van geheugenfuncties kunnen uitvoeren
en in complexe ontwerpen worden gebruikt.
Men gebruikt de kleinere M512 blokken als FIFO registers.
Voor (IP) “intellectual property” gebruikt men de M4K memorys.

Figuur 9 Embedde memory in Altera FPGA’s

Hoofdstuk 12 Geheugens - 13 -
12.10 Het niet vluchtig geheugen in FPGA’s van Lattice
De meeste FPGA’s beschikken niet over de mogelijkheid om hun applicatie
te behouden als de spanning is weggevallen. Dus bij het opzetten van de
voedingsspanning moet het systeem eerst worden opgestart (external boot),
en dit kost tijd. Bij non-volatiele FPGA oplossingen blijft de applicatie in
FLASH memory zitten.

Figuur 10 non-volatile FPGA oplossingen

De LatticeXP FPA familie combineert SRAM en FLASH in één component.


FLASH & SRAM kunnen worden geconfigureerd met behulp van een JTAG-
poort of een sysCONFIG-poort.
In user mode kan het SRAM geheugen worden geconfigureerd vanuit
FLASH met behulp van één commando of door een input pin te triggeren.
Dit wordt Real Time Reprogramming genoemd.

Figuur 11 Real Time Reprogramming


Non-volatiele FPGA oplossingen bieden de mogelijkheid om applicaties
onmiddellijk te laten starten van zodra de voedingsspanning wordt opgezet.
Met heeft dus geen Boot PROM meer nodig.

Figuur 12 Boot PROM

Hoofdstuk 12 Geheugens - 14 -
Bij de meeste programmeerbare componenten kan het bootproces worden
uitgelezen wat leid tot security problemen.
Bij non volatiele FPGA oplossingen is dit security probleem opgelost omdat
het bootproces inwendig in de FPGA gebeurt.

Figuur 13 Security in FPGA’s


12.11 Oefeningen

Oefening 1
• Hoeveel adreslijnen heeft een geheugen van 1MB?
• Wat is het verschil tussen een statische en een dynamisch geheu-
gen wat de opbouw betreft?
• Wat is het verschil tussen een statische en een dynamisch geheu-
gen wat de read- en de write cyclus betreft?
• Hoe kan je met 4 geheugenblokken van 1MB een geheugen realise-
ren van 8MB? Welke component heb je extra nodig en geef dit weer
is een blokschema. Geef tevens een beschrijving in VHDL.

Oefening 2
Teken een blokschema van een microcomputersysteem en benoem de fun-
damentele delen.
Integreer in het blokschema tevens een adresdecoderingsysteem dat de 64
geheugenmap opdeelt in vier stukken van 16K.
Om te beginnen teken eerst de geheugenmap van 64K.

Oefening 3
Ontwerp een adresdecoderingsysteem dat de 64K geheugenmap opdeelt in
8 gelijke memoryblokken van 8K.
- Het RAM-gedeelte zit vanaf adres $0000.
- De PIA zit vanaf f adres $A000.
- De ACIA zit vanaf adres $B000.
- Viermaal 4K EPROM zit vanaf adres $C000.
Om te beginnen teken eerst de geheugenmap van 64K.
Geef tevens een beschrijving in VHDL.

Hoofdstuk 12 Geheugens - 15 -
Oefening 4
Ontwerp een adresdecoderingsysteem voor een 16K memoryblok, bestaan-
de uit 8 memory's van 2K.
De adresdecodering moet ervoor zorgen dat de memoryblok van 16K begint
vanaf adres $8000.
Het I/O-gedeelte volgt direct achter het 16K memoryblok, en er moet 8K
EPROM voorzien zijn vanaf adres $E000.
Integreer dit adresdecoderingsysteem in een blokschema van een micro-
computersysteem.
Om te beginnen teken eerst de geheugenmap van 64K.
Geef tevens een beschrijving in VHDL.

Oefening 5
Ontwerp een adresdecoderingsysteem dat een blok van 20K bestaande uit 5
memory's van 4K begint vanaf adres $7000.
Integreer dit adresdecoderingsysteem in een blokschema van een micro-
computersysteem.
Om te beginnen teken eerst de geheugenmap van 64K.
Geef tevens een beschrijving in VHDL.

Oefening 6
Ontwerp een adresdecoderingsysteem met de 74...138 voor 8 memory's van
4K.
Het geheugenblok van 32K moet beginnen op adres $8000.
Om te beginnen teken eerst de geheugenmap van 64K.
Geef tevens een beschrijving in VHDL.

Oefening 7
Verklaar de werking van onderstaand adresdecoderingsysteem.

Figuur 14 Voorbeeld van flexibele adresdecodering.

Hoofdstuk 12 Geheugens - 16 -
13. Hoofdstuk 13 Toepassingen in de markt.................................... 1
13.1 Programmeerbare systemen in de automobielsector .......... 1
13.2 Programmeerbare systemen in de verbruikers elektronica.. 3

13. Hoofdstuk 13
Toepassingen in de markt
13.1 Programmeerbare systemen in de automobielsector

Figuur 1 Programmeerbare systemen in de automobielsector

In de automobielsector zijn programmeerbare systemen niet meer weg te


denken. De auto is geëvolueerd tot een mini-intelligente omgeving. In elke
auto zijn 20 tot 80 microprocessoren aanwezig voor functies als ABS, auto-
matische lichtcontrole bij duisternis, airbag en automatische ruitenwissers.
De auto’s van de toekomst zijn in staat om zogenaamde contextuele infor-
matie te verschaffen, bv. de dichtstbijzijnde vrije parkeerplaats, restaurant of
geldautomaat aangeven, historische of geologische uitleg geven over het
gebied waar je doorrijdt, enz. Door communicatie tussen de auto en de par-
keerautomaat of het tolsysteem kan er automatisch betaald worden. Ver-
keerslichten worden bijgeregeld wanneer een ziekenwagen vlakbij is.

Zullen we onze auto’s laten updaten via het internet? Het belang van elek-
tronica en software in auto’s neemt snel toe. Intussen komt al meer dan
90% of zelfs 95% van de innovaties binnen automotive van uit de elektroni-
ca. Ruim de helft van de R&D-kosten en gemiddeld de helft van de storin-
gen zit in de elektronica. Het imago van sommige belangrijke autobouwers
staat echt op het spel. Ter illustratie, een marktanalist Arthur D. Little voor-
spelt dat de productiekosten van een auto over vijf jaar voor 35 % uit elek-
tronica (22 %) en software (13%) bestaan. Van de softwarekosten gaat de
helft in infontainmentsystemen zitten en bijna een derde in motormanage-
ment en de versnellingsbak. De toegevoegde waarde zal vrijwel geheel uit
software komen. Bij elkaar zullen bits in 2010 voor 75% het onderscheidend
vermogen van een auto bepalen. Verschillende automerken zullen voor een
groot deel dezelfde onderdelen hebben, maar vanwege de software rijden

Hoofdstuk 13 Toepassingen in de markt - 1 -


ze toch anders. Oversturen of ondersturen, dat soort dingen regel je straks
allemaal met software. Auto’s hoeven niet meer voor nieuwe olie, maar voor
nieuwe software naar de garage. Motorregelingen zijn allemaal elektro-
nisch. Software-updates kunnen straks over het internet.

Figuur 2 Engine Control Unit van een auto

Automotieve elektronica, een nieuwe opleiding? Het is voorlopig onvoor-


spelbaar wat er tussen elektronica, informatica en werktuigbouwkunde alle-
maal speelt, maar we hopen van harte dat ze tot een gezamenlijke automo-
tive-portfolio kunnen komen, want de wereld beperkt zich niet meer tot één
dicipline. In de toekomst zullen studenten werktuigkundige niet alleen leren
hoe een verbrandingsmotor werkt, maar de automotive elektronica (pro-
grammeerbaar systemen) zal een heel belangrijk onderdeel kunnen worden
in hun vakdomein.

Hoofdstuk 13 Toepassingen in de markt - 2 -


13.2 Programmeerbare systemen in de verbruikers elektronica

Momenteel zijn er op de markt tal van toepassingen terug te vinden waarbij


programmeerbare componenten worden gebruikt.
Bv: DVD spelers, digitale camera’s, digitale camcorders, MP3 spelers, Smart
Card readers, enz. Onderstaande blokschema’s laten een aantal toepas-
singen zien waar programmeerbare componenten worden gebruikt.
Toepassingen waar de MACHXO worden gebruikt:

Figuur 3 digitale camcorder

Figuur 4 MP3 spelers

Hoofdstuk 13 Toepassingen in de markt - 3 -


Figuur 5 Smart Card reader
Besluit:
Toepassingen in programmeerbare systemen zijn veelzijdig.
Steeds verschijnen er nieuwe toestellen op de markt met verschillende tech-
nologieën. Deze nieuwe technologieën moeten op elkaar afgestemd zijn om
een goed product te kunnen afleveren.
Tot slot is er voor elektronici en ICT-opgeleide mensen nog veel toekomst
weggelegd in verschillende sectoren van de markt.
Moge dit boek technici motiveren om steeds opnieuw de technologische
evolutie verder te blijven opvolgen.

zomer 2006

Hoofdstuk 13 Toepassingen in de markt - 4 -


14. Appendix A ................................................................................... 1
14.1 Korte beschrijving van VHDL.............................................. 1
14.2 De elektronische invalshoek: .............................................. 1
14.3 De logische invalshoek:...................................................... 2

14. Appendix A
14.1 Korte beschrijving van VHDL

VHDL staat voor VHSIC Hardware Description Language. Het is een pro-
grammeertaal waarmee digitale geïntegreerde schakelingen en program-
meerbare logica in FPGAs kunnen worden beschreven en gemodelleerd.
Vaak wordt de beschrijving ingevoerd in IDE software, zodat naderhand het
model van de digitale schakeling gesimuleerd en getest kan worden. Daarna
kan overgaan worden naar de daadwerkelijke fysische realisatie van het
ontwerp, of in het geval van FPGAs, wordt het ontwerp gecompileerd.
Oorspronkelijk is de programmeertaal ontworpen door het ministerie van
defensie (Department of Defense) van het Amerikaanse leger, maar is in-
middels uitgegroeid tot een algemeen aanvaarde beschrijving van digitale
schakelingen. Verilog is een andere veelgebruikte 'hardware description
language' (HDL). De IEEE is de organisatie die standaardisatie van VHDL
tot stand brengt (IEEE 1076).
Uitgaande van deze VHDL-beschrijving kan een hardwareontwerp gemaakt
worden. De taal wordt gebruikt als beschrijving van elektronische chips.
VHDL bestaat reeds langer dan de FPGA. Toen de FPGA's verschenen, is
het gebruik van VHDL in een stroomversnelling gekomen, omdat de ont-
werpcyclus vanaf de beschrijving tot aan de realisatie van een elektronisch
circuit enkele grootte-orden sneller geworden is. Bij de beschrijving van een
elektronisch circuit met VHDL moet met drie invalshoeken rekening worden
gehouden:
Omdat VHDL een elektronisch circuit beschrijft dat nadien moet worden
gerealiseerd, moet er rekening worden gehouden met de elementaire hard-
ware-aspecten van het te ontwerpen schema.

14.2 De elektronische invalshoek:


Een FPGA's maakt contact met de buitenwereld via zijn pinnetjes, in VHDL
poorten genoemd. Bij ontwerpbordjes zijn vele van deze pinnetjes verbon-
den met hardware op de kaart. Voorbeelden zijn: de klok, knopjes, schake-
laars, een input/output connector. Op deze manier zijn deze randtoestellen
beschikbaar voor de schakelingen binnen de FPGA. Beschikbaar wil zeggen
dat zij niet zijn opgenomen in de schakeling. Om ze op te nemen moet een
expliciete verbinding gemaakt worden met de pinnetjes op de rand van de

Appendix A - 1 -
FPGA. Op een typische FPGA zoals de Spartan 2 van Xilinx zijn er meer
dan 200 pinnetjes (208 in de PQ208-behuizing, waarvan 140 I/O pinnetjes).
Het is essentieel de lijst van verbindingen naar deze hardware te kennen.
Deze staat in de handleiding van het bordje, en is typisch terug te vinden in
een bestand.

14.3 De logische invalshoek:


De programmeertaal VHDL laat toe individuele elektronische componenten
te beschrijven, en deze hiërarchisch te verbinden. In die zin is VHDL verge-
lijkbaar met een gestructureerde programmeertaal, waarin het hoofdpro-
gramma de globale schakeling voorstelt en de functies te beschrijving geven
van de componenten.
Een elektronische component is een entiteit met de volgende eigenschap-
pen:
• Input - output poorten, dit zijn de pinnetjes waarmee de
component verbonden wordt met zijn omgeving.
• Inwendige signalen, dit zijn de draden waarop logische elek-
trische signalen lopen.
• Een architectuur, dit is de functionele beschrijving van com-
ponent. Uitgaande van deze beschrijving wordt hardware
gevormd die uit de input signalen de output signalen gene-
reert.
De ontwerper kan gebruik maken van drie elementen:
• Elementaire operaties die binnen VHDL bekend zijn, zoals bitopera-
ties, logische functies, enzovoort .
• Bibliotheekfuncties die aangeboden worden door de constructeur.
Sommige van deze componenten worden ook IPR (intellectual pro-
perty rights) componenten genoemd. Dit gebeurt voornamelijk voor
complexe schakelingen zoals een software processor (bv. MicroBla-
ze).
• Zelfgemaakte componenten, die in een VHDL file staan, of in een
bibliotheek.

Appendix A - 2 -
15. Appendix B Beknopte VHDL referentie ....................................... 2
15.1 VHDL basis........................................................................ 2
15.1.1 Geldige namen..................................................... 2
15.1.2 Commentaar ........................................................ 2
15.1.3 Entity & Architecture............................................. 3
15.1.4 Poorten (ports) ..................................................... 4
15.1.5 Signalen & variabelen........................................... 4
15.1.6 Type..................................................................... 5
15.1.6.1 STD_Logic ............................................................................5
15.1.6.2 Opgesomd type (enumerated type)......................................6

15.1.7 Libraries & Packages............................................ 6


15.2 Gezamenlijke structuren..................................................... 7
15.2.1 Een toekenning van een signaal ........................... 7
15.2.2 Toekenning van geselecteerd signaal................... 7
15.2.3 Conditie afhankelijke signalen .............................. 8
15.2.4 Componenten....................................................... 9
15.2.4.1 Declaratie van een component.............................................9
15.2.4.2 Concretisering van een component...................................10
15.2.4.3 Generische clausule...........................................................11

15.2.5 Generate Statement ........................................... 12


15.2.6 Proces Statement............................................... 13
15.3 Sequentiële beschrijving................................................... 14
15.3.1 IF structuur......................................................... 14
15.3.1.1 Beschrijving van functies met behulp van een klok ...........14

15.3.2 Case structuur.................................................... 15

Appendix B - 1 -
15. Appendix B
Beknopte VHDL referentie
15.1 VHDL basis
Namen
Commentaar
Entity & Architecture
Ports
Signalen & variabelen
Type
std_logic
Opgesomd type (enumerated)
Libraries & Packages

15.1.1 Geldige namen


Een geldige naam in VHDL bestaat uit een letter gevolgd door een getal of
letters zondes spaties. VHDL is niet hoofdletter gevoelig (case sensitive).
Een liggend streepje kan gebruikt worden in een naam, maar een naam mag
niet beginnen of eindigen met een liggend streepje. Twee liggende streep-
jes na elkaar kunnen niet gebruikt worden.
_____________________________________________________________
Voorbeeld geldige namen decode4
just_in_time
What_4
ongeldige namen 4decode (begint met een getal)
in__time (twee liggende streepjes)
_What_4 (begin liggende streepje)
My design (spatie)
Your_words? (speciaal karakter ?)
_____________________________________________________________

15.1.2 Commentaar
Commentaar is verklarende tekst van het vhdl-bestand. Het begint met twee
streepjes.
_____________________________________________________________
Voorbeeld -- dit is commentaar
_____________________________________________________________

Appendix B - 2 -
15.1.3 Entity & Architecture
Elk vhld-bestand bestaat uit een entity en een architecture.
De naam van een vhdl-bestand is dezelfde als de naam van de entity.
In de entity staat de beschrijving van de in- en uitgangen.
In de architecture body staat de hardwarematige beschrijving van de in- en
uitgangen.

Syntax:

________________________________________________________
voorbeeld

________________________________________________________

Appendix B - 3 -
15.1.4 Poorten (ports)
Een poort is een verbinding in het vhdl-ontwerp tussen de entity en de bui-
tenwereld. De mode vertelt in welke richting een port functioneert.
Een port kan in vier verschillende mode’s functioneren:
in (enkel input),
out (enkel output),
inout (in twee richtingen “bidirectioneel”)
buffer (de uitgang wordt teruggekoppeld in het ontwerp)
De mode van een port wordt beschreven in het statement port, of in de be-
schrijving van de entity, of in de beschrijving van de component.
_____________________________________________________________
voorbeeld

____________________________________________________________
15.1.5 Signalen & variabelen
Een signaal is als een interne verbinding van twee of meerdere punten bin-
nen de architecture body. Een signaal wordt voor het begin statement van
een architecture body gezet en behoord tot de globale architectuur van het
ontwerp. De waarde van aan een signaal wordt met de <= operator toege-
kend.
Een variabele is een stukje lokaal geheugen toegekend voor de specifiek
proces. Een variabele wordt gedeclareerd voor het Begin statement van
een proces. De waarde van een signaal wordt met de := operator toege-
kend. In digitale systemen is een proces meestal een sequentieel systeem
bestaande uit een verzameling van flipflops.
_____________________________________________________________
Voorbeeld

_____________________________________________________________

Appendix B - 4 -
15.1.6 Type
Het type van een poort, signaal, of variabele geeft aan welke waardes er
kunnen gebruikt worden. Bijvoorbeeld een signaal van het type bit kan al-
leen de waarde ‘0’ en ‘1’ toegekend krijgen.
Een signaal van het type integer kan om het even welke waarde zijn, de
waarde wordt gelimiteerd naar computersysteem en VHDL compiler.

Type Values How written


BIT ‘0’, ‘1’ Single quotes
STD_LOGIC ‘U’, ‘X’, ‘0’, ‘1’, ‘Z’, ‘W’, Single quotes
(see Section 1.6.1) ‘L’, ‘H’, ‘-‘
INTEGER Integer values No quotes
BIT_VECTOR Multiple instances of ‘0’ and ‘1’ Double quotes
(“00101”)
STD_LOGIC_VECTOR Multiple instances of ‘U’, ‘X’,
Double quotes (“11ZZ00”)
‘0’, ‘1’, ‘Z’, ‘W’, ‘L’, ‘H’, ‘-‘
_____________________________________________________________
15.1.6.1 STD_Logic
Het STD_Logic (standard logic) type, ook genoemd IEEE Std Multi-Valued
Logic, geeft een range van verschillende output waardes meer dan alleen
maar ‘0’ en ‘1’.
Elke poort, signaal, of variabele van het type STD_LOGIC of
STD_LOGIC_VECTOR kan onderstaande waarden bevatten.
‘U’, —— Uninitialized
‘X’, —— Forcing Unknown
‘0’, —— Forcing 0
‘1’, —— Forcing 1
‘Z’, —— High Impedance
‘W’, —— Weak Unknown
‘L’, —— Weak 0
‘H’, —— Weak 1
‘-’, —— Don’t care
De "dwingende" niveaus worden geacht om het equivalent van een output
aan te nemen.
De "zwakke" niveaus zijn gespecificeerd door een pull-up of pull-down weer-
stand.
De ‘Z ' wordt gebruikt als hoog-impedante tristate buffer.
De meerderheid van toepassingen kan door ‘ X ', `’0 ', ‘1 ', en ‘ Z ‘ waarden
worden behandeld.
Om STD_LOGIC in een VHDL- ontwerp te gebruiken, moet u de volgende
verwijzing gebruiken:
De bibliotheek VHDL roept IEEE en het pakket std_logic_1164 aan voor de
beschrijving van de entity.

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

Appendix B - 5 -
15.1.6.2 Opgesomd type (enumerated type)
Een opgesomd type is een door de gebruiker gedefinieerd type dat alle
mogelijke waarden kan bevatten voor een poort, een signaal, of een variabe-
le.
_____________________________________________________________
Voorbeeld

_____________________________________________________________

15.1.7 Libraries & Packages


Een bibliotheek (library) is een verzameling van reeds eerder gecompileerde
VHDL beschrijvingen die kunnen gebruikt worden in een entiteit. (entity)
Een package is een ongecompileerde verzameling van VHDL beschrijvingen
die kunnen gebruikt worden in verschillende entiteiten. (entitys)
De naam van een library moet reeds in het begin van een VHDL-file voor de
beschrijving van de entiteit worden gedeclareerd.
De meest gebruikte library is de library ieee, welke in de package
std_logic_1164 zit vervat, en definieert de STD_LOGIC (sandaard logic)
type.

Syntax
LIBRARY __library_name;
USE __library_name._package_name.ALL;
_____________________________________________________________
Voorbeeld

Appendix B - 6 -
15.2 Gezamenlijke structuren
Een toekenning van een signaal
Toekenning van geselecteerd signaal
Conditie afhankelijke signalen
Componenten
Declaratie van een component
Concretisering van een component
Generische clausule
Generate statement
Process statement

Een gezamenlijke structuur in VHDL fungeert als een aparte component.


Een wijziging in verschillende gezamenlijke structuren heeft effect op alle
structuren tezelfdertijd.
Hetzelfde doet zich voor bij signalen:
Een signaal dat gebruikt wordt in verschillende componenten in een circuit
fungeert in alle componenten tezelfdertijd.

15.2.1 Een toekenning van een signaal


Een toekenning van een signaal aan een poort of een waarde van een sig-
naal is van toepassing bij een Booleaanse vergelijking.

Syntax:

__signal <= __expression;


_____________________________________________________________
Voorbeeld

_____________________________________________________________

15.2.2 Toekenning van geselecteerd signaal


Bij de toekenning van een geselecteerd signaal worden er verschillende
alternatieve waarden gegeven aan een poort of een signaal.
Het kan worden gebruikt bij de implementatie van een waarheidstabel bij
een decoder of multiplexer.

Syntax:

Appendix B - 7 -
_____________________________________________________________
Voorbeeld 1

Voorbeeld2

15.2.3 Conditie afhankelijke signalen


Bij conditie afhankelijke signalen wordt de waarde van een poort of een sig-
naal toegekend afhankelijk van een conditie.

Syntax:

Appendix B - 8 -
_____________________________________________________________
voorbeeld conditie afhankelijke signalen

15.2.4 Componenten
Een VHDL file kan in een ander VHDL file gebruikt worden als een compo-
nent. Men gebruikt onderstaande algemene structuur.

15.2.4.1 Declaratie van een component


Een declaratie van een component gebeurt in principe op dezelfde wijze als
de beschrijving van een entiteit (entity). Het verschil is dat een component
verwijst naar een aparte VHDL file. De namen van poorten in een compo-
nent moeten hetzelfde zijn als gebruikt in een bovenliggend ontwerp.

Syntax:

Appendix B - 9 -
_____________________________________________________________
voorbeeld

15.2.4.2 Concretisering van een component

Elke concretisering van een component vereist een component concretise-


rings-statement.
Poorten worden expliciet toegekend met behulp van de => operator.
Poorten worden impliciet toegekend met behulp van de overeenkomstige
naam van de poort in de declaratie van de component zelf.
Syntax:

_____________________________________________________________
voorbeeld

Appendix B - 10 -
_____________________________________________________________

15.2.4.3 Generische clausule

Een generische clausule geeft de mogelijkheid een component te concreti-


seren met één of meerdere niet gespecificeerde eigenschappen.
De parameter wordt in de generische clausule gespecificeerd met de := ope-
rator.

Syntax:

_____________________________________________________________
Voorbeeld1

Appendix B - 11 -
Voorbeeld2

15.2.5 Generate Statement

Een generate statement wordt gebruikt om met meerder concretiseringen tot


een bepaalde hardwarestructuur te komen.
Het baseert zich op de waarde van één of meerdere indexvariabelen om het
vereiste aantal herhalingen tot stand te brengen.

Syntax:

_____________________________________________________________
Voorbeeld

Appendix B - 12 -
15.2.6 Proces Statement
Een proces is een gemeenschappelijke beschrijving, maar de beschrijvingen
binnen het proces zijn sequentieel.
Bijvoorbeeld, kan een proces een beschrijving zijn van een flipflop, een af-
zonderlijke component waarvan de poorten (i/o’s) gelijktijdig worden beïn-
vloed, maar binnen het proces gedraagt de flipflop sequentieel.
Een proces voert alle beschrijvingen van de signalen uit die zijn opgesomd
in de afhankelijkheidslijst. (sensitivity-lijst)
Het label van een proces is facultatief.

Syntax:

_____________________________________________________________
Voorbeeld:

_____________________________________________________________

Appendix B - 13 -
15.3 Sequentiële beschrijving
IF structuur
Beschrijving van functies met behulp van een klok
Case structuur

Een sequentiële beschrijving in VHDL wordt gebruikt om flipflops, latches,


tellers en registers te beschrijven. Soms wordt in een sequentiële beschrij-
ving ook een combinatorische schakeling beschreven wiens uitgangen af-
hankelijk zijn van de in- en uitgangen van de sequentiële schakeling zelf.

15.3.1 IF structuur
Een IF structuur wordt gebruikt in één of meerder beschrijvingen.

Syntax:

_____________________________________________________________
Voorbeeld

_____________________________________________________________

15.3.1.1 Beschrijving van functies met behulp van een klok

Als impliciet in voorgaande voorbeelden de toestand van het systeem af-


hankelijk is van een kloksignaal dan wordt de attribuut genaamd EVENT
toegevoegd. (klok ‘EVENT AND klok=’1’)
De beschrijving klok ‘EVENT AND klok=’1’ komt overeen met een stijgende
flank van het kloksignaal.

Appendix B - 14 -
15.3.2 Case structuur
Een case structuur wordt gebruikt bij verschillende beschrijvingen die condi-
tieafhankelijk zijn van een andere beschrijving of een signaal.

Syntax:

Voorbeeld:

Appendix B - 15 -
Appendix B - 16 -
16. Appendix C
Pinning van het ISP Starter Kit
Device Pin Pin Definition MACH Inputs LED Comment
1 GND
2 I/O 0 U24-A
3 I/O 1 U24-B
4 I/O 2 U24-C
5 I/O 3 U24-D
6 I/O 4 U24-E
7 I/O 5 U24-F
8 I/O 6 U24-G
9 I/O 7 SW1 U24-H (DP) input only
10 TDI
11 CLK 0 / I 0 CK0 Clock Select with jumper
12 GND
13 TCK
14 I/O 8 U23-A
15 I/O 9 U23-B
16 I/O 10 U23-C
17 I/O 11 U23-D
18 I/O 12 U23-E
19 I/O 13 U23-F
20 I/O 14 U23-G
21 I/O 15 SW2 U23-H (DP) input only
22 VCC
23 GND
24 I/O 16 U26-A
25 I/O 17 U26-B
26 I/O 18 U26-C
27 I/O 19 U26-D
28 I/O 20 U26-E
29 I/O 21 U26-F
30 I/O 22 U26-G
31 I/O 23 SW3 U26-H (DP) input only
32 TMS
33 CLK 1/ I 1 CK1 Clock 4 Hz Clock signal
34 GND
35 TDO
36 I/O 24 U22-A
37 I/O 25 U22-B
38 I/O 26 U22-C
39 I/O 27 U22-D
40 I/O 28 U22-E
41 I/O 29 U22-F
42 I/O 30 U22-G
43 I/O 31 U22-H (DP)
44 VCC

Appendix C - 1 -
ispLEVER Starter Kit

Appendix C - 2 -
17. Appendix D
Parallel-JTAG-Interface
Elektruur Halfgeleidergids 2002

17.1 Beschrijving
Deze schakeling vormt een interface tussen de parallelle poort van een PC
en een zogeheten JTAG-interface.

Oorspronkelijk is een soortgelijke schakeling ontworpen door de firma Altera


onder de naam ‘Byteblaster’. De hier beschreven versie is compatibel met
de Byteblaster (elektrisch gezien is ze nagenoeg gelijk). Dit heeft het voor-
deel dat programma’s die geschreven zijn om in combinatie met de Byte-
blaster gebruikt te worden, ook met deze interface overweg kunnen.
De schakeling op zich is zeer eenvoudig. Connector K1 wordt verbonden
met de parallelle poort van de PC, terwijl de signalen op D0, D1 en D6 via
IC1 naar de JTAG-connector worden geleid. De uitgang van de JTAG-
connector (TDO) wordt op zijn beurt via IC1 weer teruggevoerd naar de PC
via het BUSY-signaal. Op pen 7 van de JTAG-connector is een extra uitgang
voorzien. Dit signaal wordt via IC1 naar de SELECT-ingang van de parallelle
poort geleid. Sommige schakelingen maken dit signaal actief als zij in de
debug-mode staan. Dit is niet echt een vereiste, maar in sommige gevallen
kan dit nuttig zijn (vooropgesteld dat de software deze optie ondersteunt).
Indien gewenst kan men hiermee natuurlijk ook een andere status doorge-
ven aan de PC. IC1 wordt gestuurd door de AUTOFEEDuitgang (actief laag)
van de parallelle poort. Zolang deze hoog is, zullen de uitgangen van IC1 in
hoogohmige toestand zijn.
Hierdoor koppelt men de interface los van de JTAG-connector, zodat de
target-print niet belast wordt door de JTAG-interface.
Alle overige signalen zijn niet specifiek bedoeld voor de JTAGinterface.

Appendix D - 1 -
De functie van deze signalen zorgt er voor dat de software kan controleren
of de interface inderdaad op de (juiste) parallelle poort is aangesloten. Voor
dit doel staan twee mogelijkheden ter beschikking.

1. De eerste daarvan wordt gevormd door de rechtstreekse verbinding


van D5 met de ACK-ingang (actief laag).
2. De tweede is de verbinding van D7 via IC1 met de P.END-ingang
van de parallelle poort. Deze connectie bestaat alleen maar indien
het signaal AUTOFEED (actief laag) actief is.

Deze twee detectiemethoden zijn softwarematig zeer simpel uit te voeren,


zonder dat een eventueel aangesloten printer hierop reageert door enkele
pagina’s met vreemde tekens te produceren, aangezien het STROBEsignaal
(ook actief laag) niet gebruikt wordt.

17.2 Software
Aangezien deze interface bedoeld is om chips te testen, debuggen en/of te
programmeren, is de gebruikte software erg afhankelijk van de chips waar-
mee de schakeling verbonden wordt. Toch geven we een paar tips om snel
aan de slag te kunnen met deze interface. Ten eerste kan er op de webpa-
gina van Altera (www.altera.com) software gedownload worden om Altera-
chips te programmeren via de JTAG-interface.
Ook valt hier een zogenaamde JAM-player te downloaden.

Appendix D - 2 -
Naast de Windows-versie is er tevens een Linux-versie beschikbaar. De
JAM-player is in feite een interpreter van een eigen programmeertaal, die
speciaal gericht is op de JTAGinterface.
Hiermee kan men op een eenvoudige manier met speciale commando’s de
JTAG-interface aansturen. Behalve deze JAM-player bestaan er ook con-
versie-programma’s die verschillende soorten programmeerbestanden om-
zetten naar een JAM-bestand, zodat de JAM-player deze bestanden kan
interpreteren en uitvoeren.
Op het Internet zijn verschillende projecten te vinden van mensen
die bezig zijn met het schrijven van software voor. de JTAG-interface. Omdat
dit allemaal links naar gratis webpagina’s betreft, is een opsomming hiervan
binnen de kortste keren nutteloos, aangezien deze webpagina’s de neiging
hebben om regelmatig van server naar server te verhuizen. Een goede In-
ternet-zoekpagina is in dit geval de beste manier om de geschikte software
op de kop te tikken.

Appendix D - 3 -
Appendix D - 4 -
18. Referenties

1. Digitaal Ontwerpen volgens de top-down aanpak van A.H. Geerts


de
(Academic Service 2 oplage 2003)
2. Fundamentals of Digital Logic with VHDL Design van Stpehen
Brown & Zvonko Vranesic (McGraw-Hill 2005)
3. Rapid prototyping of digital systems van James O. Hamblen an
Michael D. Furman (Kluwer Academic Publishers 2001)
4. Digital Design with CPLD Applications and VHDL van Robert K.
Dueck
5. Advances Digital Systems Experiments and Concepts with CPLDs
van Leo Chartrand (Thomson Delmar Learning)
6. In System Progammable van Andreas Heppner (Segment B.V.)
7. Elektuur januari 2002 & halfgeleidergids 2002
8. Digitale technieken van Patrick Colleman (Campnia Media 1999)
9. Digitale Systemen van Kris De Backer en Liesbeth Kenens
(Campinia Media 2004)
10. MachXO Family Handbook (v.01.4) (Lattice)
11. ispLEVER Starter Kit (Lattice)
12. University Program UP2 Education Kit (Altera)
13. Hardware Design Dipl.-Ing. Jens Kroeger Beratender Ingenieur für
Datentechnik & Nachrichtentechnik & Hochfrequenztechnik
Platinenlayout · Prototypen · Kleinserien · EV-Boards (HWD-
LCMXO640C)
14. http://nl.wikipedia.org/wiki/

Referenties - 1 -

You might also like