Professional Documents
Culture Documents
Dig Syst2v3p
Dig Syst2v3p
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 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.
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
door
1 & B1
ignition
buzzer
1
& B2
sbelt
1
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
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
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.
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.
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
D1 D0
1
&
Y0
& Y1
&
Y2
& Y3
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
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
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.
We kunnen in het geval van het ontwerp van een 4 bit fulladder een package
aanmaken met een component 1 bit fulladder.
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)
En w(1) w(0)
1
1
1
& Y (0)
& Y (1)
& Y(2)
& Y (3)
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.
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.
1.19 CASE
Een case is een statement net zoals een IF statement dat alleen toegelaten
is binnen een process.
Voorbeeld:
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
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:
VHDL operatoren
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.
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
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';
w0 1
w1 1 & y0
& y1
& y2
En & y3
Oefening 6
Ontwerp een 12-bit adder door gebruik te maken van een GENERATE
statement. Laat het resultaat zien op drie 7-segmentdisplay’s.
2.1 Inleiding.
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
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
Figuur 6 Blokschema van een 8-bit bidirectionele teller met parallelle load
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.
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.
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.
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.
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.
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:
Om ervoor te zorgen dat het register op ‘0’ wordt gezet, onafhankelijk van
het aantal bits, gebruikt men onderstaand statement:
0 1 0 0
1
0
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:
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:
Beschrijving
De vier uitgangen van het signaal “shift” worden op de vier uitgangen van
het ontwerp(entity) gezet.
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.
Klokimpuls 1
Klokimpuls 2
Klokimpuls 3
Bij de volgende stijgende flank blijft de uitgang van de andpoort “0” staan.
Beschrijving
(debounce.vhd)
Oefening 1
Ontwerp volgens onderstaand schema een switch debouncer voor een nor-
maal geopende drukknop. De drukknop bedient een logische nul.
Gebruik onderstaande entity.
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
1
0
L
Figuur 41 Ringteller
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.
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.
Entity REACTION
Component SEG7
Component BCDCOUNT
Het signaal q zorgt voor een klok van 10Hz en BCDCOUNT telt als signaal
LED ‘1’ is.
actie
reset reactie
3.6 Oefening:
Maak een uitbreiding van de toepassing reactie timercircuit met een uitlezing
van 4 digits; Digit3, Digit2, Digit2, Digit0.
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’)
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.
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
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.
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.
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.
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.
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
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.
Beschrijving van:
- de entity
- de signalen
- het process read_set
- het process klok_filter
4.7 Oefening:
3. Gebruik de keyboard module als input module voor een video game.
A. phoshpor-coated deeltje
B. shadow mask
C. glas
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.
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
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
Bron: http://www.epanorama.net/documents/pc/vga_timing.html
Bij het schrijven van een volledige lijn wordt met HSync tellerY één positie
verder gezet.
Met VSync wordt countY gereset.
Met uitgang hit laten we een verticale lijn op het scherm naar rechts bewe-
gen. (go_right)
Het Altera UP1 ontwikkelbord beschikt over een VGA-interface zoals te zien
is in Figuur 16.
.
Voor het genereren van video op het scherm wordt onderstaande code ge-
bruikt:
Met behulp van “assign” interface kunnen de pinnen van component FLEX
EPF 10K20 worden toegekend.
Figuur 19 VGA_LED.gdf
Figuur 20 VGA_BAR.gdf
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.
Figuur 25 Schema van een karkater gebaseerd ontwerp op een VGA interface
6.1 Inleiding
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.
6.3 Oefening
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.
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.
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.
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.
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)
Benodigdheden:
MachXO EV-Board
TORX147PL Toslink receiver
Hoofdtelefoon – actieve luidsprekers
Hoofdtelefoon plug
Toslink fiber optic kabel
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.
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
Figuur 11 Biphase-mark-code
Module AES/EBU Deframer zorgt voor het binnen lezen van de data van de
decoder.
Module AES/EBU Deframer zorgt tevens voor het uitpakken van de audio-
samples.
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.
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.
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.
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.
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:
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.
Digitale logica
A . /A = 0
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.
Pin Configuration
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.
8.5.3 Macrocell:
• geheugencel
• routing resources
• een clock multiplexer
• initialisatie control
De flipflop kan geconfigureerd worden als: D-type, T-type latch, S-R register,
J-K register.
Figuur 21 De interface van “ispVM System” van fabrikant Lattice met keuze van de
‘Cable and I/O Port Setup’
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
“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.
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
Tabel 3
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.
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.
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
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.
Als eenvoudig voorbeeld laten we een LUT zien met twee adresingangen.
f1 = /x1./X2+x1.x2
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.
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)
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.
PLD-architecturen
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).
2. Tel het aantal input lijnen van onderstaande AND/OR Logic Array.
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 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
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
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
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.
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.
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.
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.
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.
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.
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”.
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.
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.
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.
9.4.1 Resolutie
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:
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)
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.
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:
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.
∆Uu
(V/µs)
∆t
Deze eigenschap geeft aan met welke snelheid de ingangsdata kan ingege-
ven worden. Ze wordt uitgedrukt in kHz of MHz.
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
Figuur 24 is een eenvoudig blokschema van een ADC getekend volgens het
tellerprincipe.
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.
Ui.t1 = Ur.t2
t2
Ui = .Ur
t1
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.
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.
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).
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).
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”.
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
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.
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).
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.
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.
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.
Oefening 2
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
Oefening 5
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.
Teken het verloop van Ur samen met Ui, de uitgang van de comparator, en
het kloksignaal van 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
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.
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
Figuur 7 ADC0808
Figuur 9 Een ADC Interface met één uitgangskanaal en een manuele selec-
tie van de analoge ingang
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
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”.
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.
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.
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.
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 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
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).
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.
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.
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.
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
Hoofdstuk 12 Geheugens - 7 -
12.3.3 Single Inline Memory Module
Hoofdstuk 12 Geheugens - 8 -
12.3.4 Dual Inline Memory Module
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.
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.
Hoofdstuk 12 Geheugens - 11 -
12.8 Flashgeheugen
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.
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.
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.
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.
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
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
zomer 2006
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.
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.
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
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.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.
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
_____________________________________________________________
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
Syntax:
_____________________________________________________________
Syntax:
Appendix B - 7 -
_____________________________________________________________
Voorbeeld 1
Voorbeeld2
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.
Syntax:
Appendix B - 9 -
_____________________________________________________________
voorbeeld
_____________________________________________________________
voorbeeld
Appendix B - 10 -
_____________________________________________________________
Syntax:
_____________________________________________________________
Voorbeeld1
Appendix B - 11 -
Voorbeeld2
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
15.3.1 IF structuur
Een IF structuur wordt gebruikt in één of meerder beschrijvingen.
Syntax:
_____________________________________________________________
Voorbeeld
_____________________________________________________________
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.
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.
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
Referenties - 1 -