Upload
mckenzie-mckee
View
45
Download
2
Embed Size (px)
DESCRIPTION
Inhoudstafel. Inleiding De basis van digitaal ontwerp Combinatorische schakelingen Sequentiële schakelingen Niet-programmeerbare processoren Programmeerbare processoren Hardware-beschrijvingstalen : VHDL. Taalgebaseerd hardware ontwerp: VHDL. Inleiding In vogelvlucht Taalelementen - PowerPoint PPT Presentation
Citation preview
VHDL
KATHOLIEKE UNIVERSITEIT
7-1 06–07
H01L1
Inhoudstafel
Inleiding
De basis van digitaal ontwerp
Combinatorische schakelingen
Sequentiële schakelingen
Niet-programmeerbare processoren
Programmeerbare processoren
Hardware-beschrijvingstalen: VHDL
VHDL
KATHOLIEKE UNIVERSITEIT
7-2 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding
VHDL in vogelvlucht
Elementen van de VHDL-taal
Hardware-beschrijving met VHDL
Hardware-simulatie met VHDL
Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-3 06–07
H01L1
Wat is VHDL?
Acroniem VHDL: VHDL = VHSIC Hardware Description Language VHSIC = Very High Speed Integrated Circuit
Wat is VHDL?1. Een programmeertaal om het gedrag van digitale
systemen te beschrijven2. Een taal om een ontwerp in te geven, bruikbaar voor
eenduidige specificatie op gedrags- & RTL-niveau simulatie synthese (goed bruikbaar voor RTL-niveau) documentatie
Standaardisatie: IEEE 1076 1e versie: VHDL-87 2e versie: VHDL-93 3e versie: VHDL-2001
Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-4 06–07
H01L1
VHDL Analog and Mixed Signal
= uitbreiding van (zuiver digitale) VHDL met analoge signalen
VHDL-AMS (IEEE standaard 1076.1-1999)=superset van VHDL-93 (digitaal ontwerp)+continue-tijd-model
=set differentiële & algebraïsche vergelijkingen
Complex en veel minder gebruikt;voor meer info, ziehttp://www.vhdl.org/vhdl-ams/http://www.vhdl-ams.com/
Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-5 06–07
H01L1
Nadelen VHDL t.o.v. schema’s
Eenvoudig te leren maar moeilijk volledig te beheersen Conceptueel verschillend van software talen Schijnt moeilijke syntax te hebben
gebruik taalgevoelige editor met sjablonen Nogal ‘langdradig’ (veel code nodig voor
eenvoudige dingen) Een lijst instructies is minder overzichtelijk
dan een blokschema voor een mens VHDL bevat meer mogelijkheden dan strikt
noodzakelijk voor hardware synthese(bijv. specificatie tijdsgedrag voor simulatie)
Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-6 06–07
H01L1 Voordelen VHDL t.o.v. schema’s
Overdraagbaar over verschillende programma’s voor simulatie, synthese, analyse, verificatie, … van verschillende fabrikanten
Gemakkelijker om complexe schakelingen te beschrijven: hoger abstractieniveau met automatische synthese Je kan ‘add’ gebruiken zonder een specifiek type
van opteller te kiezen: het is de taak van het syntheseprogramma om het beste type te kiezen, rekening houdend met randvoorwaarden zoals tijdsgedrag, vermogen en kostprijs
Gemakkelijk te parametriseren (woordlengte, stapeldiepte, …)
Gemakkelijk om repetitieve structuren te beschrijven
Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-7 06–07
H01L1
Maar er zijn ook beperkingen
Slechts een subset van VHDL kan automatisch gesynthetiseerd worden en elke fabrikant supporteert een verschillende subset
De standaard beschrijft enkel de syntax en betekenis, niet hoe code te schrijven (codeerstijl) Eenzelfde gedrag (bijv. MUX) kan op heel wat
verschillende manieren beschreven worden, die ieder tot een totaal andere implementatie
kunnen leiden (bijv. selector of 3-state bus), wat ook nog afhangt van het syntheseprogramma. Je moet heel wat ervaring opdoen alvorens je
aanvoelt hoe de code moet geschreven worden om tot de meest efficiënte hardware gesynthetiseerd te worden door een bepaald programma
Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-8 06–07
H01L1 Andere‘Hardware Description
Languages’ Verilog (IEEE 1364)
Meer verspreid in USA dan in EuropaSyntactisch verwant met C VHDL
meer AdaBeter dan VHDL?
“Both languages are easy to learn and hard to master. And once you have learned one of these languages, you will have no trouble transitioning to the other.” (uit ‘VHDL Made Easy!’, D. Pellerin & D. Taylor)
PLD-talen zoals ABEL, PALASM, …Op poortniveau voor een specifieke
technologie
Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-9 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding
VHDL in vogelvlucht
Elementen van de VHDL-taal
Hardware-beschrijving met VHDL
Hardware-simulatie met VHDL
Hardware-synthese met VHDL
• Inleiding
In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-10 06–07
H01L1
Een voorbeeld
Ontwerp schakeling ‘Test’ met drie 8-bit ingangen (In1, In2, In3) twee 1-bit uitgangen:
Out1 = 1 In1 In2 Out2 = 1 In1 In3
Hiërarchisch schema: Schema topniveau,
gebruik makend vancomponenten ‘Compare’
Schema component‘Compare’
In1
In2
In3
Test
Out1
Out2
CompareA
BEQ
CompareA
BEQ
A
B
EQ
CompareA[0]B[0]
A[1]B[1]
A[7]B[7]
…
…
• Inleiding
In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-11 06–07
H01L1
VHDL: entiteit & architectuur
Declaratie van de entiteit ‘Compare’:
-- 8-bit comparator--entity Compare is port(A,B: in bit_vector(0 to 7); EQ: out bit);end entity Compare;
architecture Behav1 of Compare isbegin EQ <= '1' when (A=B) else '0';end architecture Behav1;
‘entity’ specificeert de interface van de
schakeling (zwarte doos in een schema)
‘port’ specificeert een ingangs- of
uitgangssignaal‘architecture’ beschrijft
het gedrag en/of de structuur van een entiteit
(het binnenste van de doos)
Opmerkingen:• Een entiteit kan meerdere architecturen hebben: dit zijn
verschillende implementaties van hetzelfde gedrag• Deze architectuur specificeert het gedrag op RTL-niveau; een
synthese zal dit omzetten naar verbindingen op poortniveau• Een ‘port’ heeft een expliciete richting en is een bit(vector)
• Inleiding
In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-12 06–07
H01L1 VHDL: component & instantiatie
Specificatie van het topniveau ‘Test’:-- Component Test met 2 comparatoren--entity Test is port(In1,In2,In3: in bit_vector(0 to 7); Out1,Out2: out bit);end entity Test;
architecture Struct1 of Test iscomponent Comparator is port(X,Y: in bit_vector(0 to 7); Z: out bit);end component Comparator;begin Compare1: component Comparator port map (In1,In2,Out1); Compare2: component Comparator port map (In1,In3,Out2);end architecture Struct1; Twee instantiaties van dezelfde
component met zijn signaalbindingen
Virtuele component: laat onafhankelijke
ontwikkeling van alle hiërarchische niveaus toe.
‘Comparator’ kan later aan ‘Compare’ gekoppeld
worden
Opmerkingen:• Deze architectuur beschrijft de structuur, nl. hoe deze entiteit
opgebouwd is als verbonden componenten van lager niveau• De twee componenten ‘Comparator’ werken tegelijkertijd!
• Inleiding
In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-13 06–07
H01L1
VHDL: configuratie
Hoe wordt aangegeven welke architectuur van een entiteit gebruikt moet worden?
Hoe componenten aan entiteiten koppelen?
-- Configuratie: definieer koppeling component met een-- bepaalde architectuur van een entiteitconfiguration Build1 of Test is for Struct1 for Compare1: Comparator use entity Compare(Behav1) port map (A => X, B => Y, EQ => Z); end for; for Compare2: Comparator use entity Compare(Behav1) port map (A => X, B => Y, EQ => Z); end for; end for;end configuration Build1;
Opmerking:• ‘configuration’ komt in software overeen met ‘linking’
• Inleiding
In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-14 06–07
H01L1 Vergelijking met een traditionele taal (zoals C++, Java, …)
// 8-bit comparator
boolean Compare(int A, int B) { return (A == B);}
Functie-interface: argumenten = ingangenresultaat = uitgang
Gedragsbeschrijving van de functie
Opmerkingen:• Functie-argumenten zijn altijd ingangen• Slechts 1 gedragsbeschrijving per functie mogelijk• De twee ‘Compare’-functies worden sequentieel uitgevoerd• ‘main’ wordt éénmaal uitgevoerd en stopt dan
2 oproepen van de functie
‘Compare’ met degekoppelde argumenten
// Topniveau Testmain() { int In1, In2, In3; boolean Out1, Out2;
cin >> In1 >> In2 >> In3; Out1 = Compare(In1, In2); Out2 = Compare(In1, In3); cout << Out1 << Out2;}
• Inleiding
In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-15 06–07
H01L1
Verschil met traditionele talen
DatatypesNood aan typische hardware-types:
bitvectoren, getallen met een arbitraire grootte, getallen met vaste komma
Gelijktijdigheid (‘concurrency’)Alle hardwarecomponenten werken in
parallel Tijdsconcept
Alle componenten werken continu:hardware stopt nooit!
Voor simulatie is een koppeling met het reële tijdsgedrag van componenten nodig
• Inleiding
In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-16 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal
Lexicale elementen (woordenschat)Data-objecten & -typesBewerkingenControle-uitdrukkingenSubprogramma’sBibliotheken
Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-17 06–07
H01L1
Lexicale elementen
Commentaar: van ‘--’ tot einde lijn ‘Identifier’ (of naam)
=reeks van alphanumerische karakters of niet-opeenvolgende ‘_’, die start met een letter & niet eindigt met ‘_’: “Next_value_0”
Geen verschil hoofdletters / kleine letters! Getal
‘integer literal’: geheel getal “1480”‘real literal’: fractioneel getal “1480.0”
Beide kunnen exponentieel “148E1” ‘_’ wordt genegeerd “1_480”Niet-decimale basis : base#literal#exp253.5 = 16#FD.8# 2#1#E10 = 16#4#E2
• Inleiding
• In vogelvlucht
TaalelementenLexicaal Data Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-18 06–07
H01L1
Lexicale elementen
Karakter ‘character literal’ = één karakter tussen
enkele aanhalingstekens: 'a' 'A' '''
Karakterreeks (‘string’) ‘string literal’ = reeks karakters tussen
dubbele aanhalingstekens: "A string" ‘""’ om ‘"’ in een string te krijgen:"""Quote it"", she said."
Bitreeks (‘bit string’) ‘bit string literal’ = reeks bits, voorgesteld
door een reeks cijfers voorafgegaan door een basisspecificatie (‘B’, ‘O’, of ‘X’) :O"12" = b"001_010" X"a" = B"1010"
• Inleiding
• In vogelvlucht
TaalelementenLexicaal Data Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-19 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal
Lexicale elementen Data-objecten & -types
VHDL-objecten VHDL-types Attributen
Bewerkingen Controle-uitdrukkingen Subprogramma’s Bibliotheken
Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objecten types attributen
Bewerkingen
Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-20 06–07
H01L1
VHDL-objecten
= benoemd item dat een waarde van een specifiek type heeftConstante
maakt programma meer verstaanbaarVariabele
bevat tussenresultaten zonder fysische betekenis
geen verband met een ASM-variabele!Signaal
draad, (interne) verbinding golfvorm, zoals zichtbaar tijdens een
simulatieBestand
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objecten types attributen
Bewerkingen
Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-21 06–07
H01L1
Declaratie VHDL-object
Constanteconstant name(s): (sub)type := expression;
constant num_bytes: integer := 4;constant num_bits: integer := 8 * num_bytes;
Variabelevariable name(s): (sub)type [:= expression];
variable cnt, index: integer := 0;
opm.: default-waarde = eerste (linkse) waarde(bijv. kleinst voorstelbaar geheel getal)
Signaalsignal name(s): (sub)type [:= expression];
signal a, b: bit;
namen gescheiden door een komma
initiële waarde
gereserveerd woord
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objecten types attributen
Bewerkingen
Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-22 06–07
H01L1
Toekenning aan VHDL-object
Variabelenname := expression; index := index + 1;
Signalenname <= waveform;Eenvoudige golfvorm (synthese) :
expression y <= a and b;
Complexe golfvorm (simulatie) :[delay_mechanism] expression [after time]
[, expression [after time]]… line_out <= transport line_in after 100 ps;pulse <= '1', '0' after T_pw;
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objecten types attributen
Bewerkingen
Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
a
by
VHDL
KATHOLIEKE UNIVERSITEIT
7-23 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal
Lexicale elementen Data-objecten & -types
VHDL-objecten VHDL-types Attributen
Bewerkingen Controle-uitdrukkingen Subprogramma’s Bibliotheken
Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalair matrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-24 06–07
H01L1
VHDL: (sub)types
VHDL-typesScalaire types : set waardenSamengestelde types : verzameling sets ‘Access’ types : ‘pointers’ voor gelinkte
lijstenBestandstypes
Declaratie typetype name is type_definition; type int_8 is range -128 to 127;
Declaratie subtype= beperkte set waarden van basistypesubtype name is scalar_(sub)type
[range expression (down)to expression]; subtype nat_8 is int_8 range 0 to 127;
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalair matrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-25 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal
Lexicale elementen Data-objecten & -types
VHDL-objecten VHDL-types
Scalaire types– Samengestelde types
Attributen Bewerkingen Controle-uitdrukkingen Subprogramma’s Bibliotheken
Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalair matrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-26 06–07
H01L1
Declaraties van scalaire types
Discrete types ‘Integer’ types (gehele getallen)
range integer_expression (down)to integer_expression
type mem_address is range 65535 downto 0;
‘Enumeration’ types (opsommingen)(name_or_charliteral [, name_or_charliteral]…)
type FSM_state is (reset, wait, input, calculate, output);type tri_val is ('0', '1', 'Z');
Komma-types range real_expression (down)to real_expression
type probability is range 0.0 to 1.0;
Fysische types
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalair matrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-27 06–07
H01L1
Declaraties van scalaire types
Fysische typesrange expression (down)to expression units identifier; [identifier = physical_literal;]… end units
type length is range 0 to 1E9 units um; mm = 1000 um; m = 1000 mm; km = 1000 m; mil = 254 um; inch = 1000 mil; foot = 12 inch; yard = 3 foot; end units;
Secundaire eenheden
Primaire eenheid:
nauwkeurigheid
Primaire eenheid
Metrische eenheden
Engelse eenheden
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalair matrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-28 06–07
H01L1 Voorgedefinieerde scalaire types
Opsommingen type bit is ('0','1'); type boolean is (false, true); type character is (ASCII set);
namen voor niet-afdrukbare controlekaraktersbijv. nul, cr, lf, esc, del
type severity_level is (note, warning, error, failure);
Gehele getallen type integer is range implementation_defined;
bereik minstens van −231+1 tot +231−1 subtype natural is integer
range 0 to integer'high; subtype positive is integer
range 1 to integer'high;
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalair matrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-29 06–07
H01L1 Voorgedefinieerde scalaire types
Komma-types type real is range implementation_defined;
bereik minstens IEEE 32-bit enkelvoudige precisie
Fysische types type time is range implementation_defined
units fs; ps = 1000 fs; ns = 1000 ps; us = 1000 ns; ms = 1000 us; sec = 1000 ms; min = 60 sec; hr = 60 min; end units;
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalair matrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-30 06–07
H01L1
IEEE 1164 ‘Standard logic’
Meer dan ‘0’ en ‘1’ nodig voor logische signalen, daarom definieert IEEE standaard 1164 signalen met 9 waarden.Gebruik altijd deze i.p.v. ‘bit’ voor echte toepassingen!
library IEEE; use IEEE.Std_logic_1164.all;type std_ulogic is ( 'U', -- niet geïnitialiseerd, bijv. bij opstarten 'X', -- sterk aangestuurd ongekend -- bijv. na schending set-up '0', -- sterk aangestuurd logisch 0 '1', -- sterk aangestuurd logisch 1 'Z', -- hoog-impedant -- m.a.w. niet aangestuurd 'W', -- zwak aangestuurd ongekend 'L', -- zwak aangestuurd logisch 0 'H', -- zwak aangestuurd logisch 1 '-'); -- don’t caretype std_logic is resolved std_ulogic;subtype X01 is resolved std_ulogic range 'X' to '1';
actieve aansturing
resistieve aansturing
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalair matrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-31 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal
Lexicale elementen Data-objecten & -types
VHDL-objecten VHDL-types
– Scalaire types Samengestelde types
Attributen Bewerkingen Controle-uitdrukkingen Subprogramma’s Bibliotheken
Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalairmatrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-32 06–07
H01L1 Declaraties samengestelde types
‘Array’ types (matrices)Begrensd (‘constrained’): grenzen indices
vastarray (range [, range]…) of (sub)typemet range ofwel een discreet subtype ofwel
expression (down)to expression type word is array (15 downto 0) of bit; type next_state is
array (FSM_state, bit) of FSM_state;variable next: next_state;next(calculate, '1') := output;
Onbegrensd : grenzen niet bepaaldarray ((sub)type range <> [, (sub)type range <>]…) of (sub)type
type sample isarray (natural range <>) of integer;
subtype buf_type is sample(0 to 255); variable sample_buf: sample(0 to 63);
‘Record’ types
multidimensioneel
LSB, bit 0
MSB
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalairmatrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-33 06–07
H01L1 Voorgedefinieerdesamengestelde types
Onbegrensde matrices type string is
array (positive range <>) of character;
constant Error_message: string := "Unknown error: ask for help";
type bit_vector isarray (natural range <>) of bit;
constant State1: bit_vector(4 downto 0) := "00100";
Onbegrensde matrices in IEEE 1164 type std_[u]logic_vector is array (natural range <>) of std_[u]logic;
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalairmatrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-34 06–07
H01L1
Toekenning aan een matrix
Matrices kunnen aan mekaar toegekend worden als ze dezelfde dimensies en grootte hebben
Correspondentie via positie, niet via index!
signal Down: std_logic_vector (3 downto 0);signal Up: std_logic_vector (0 to 3);Up <= Down;
Welke van de twee volgende interpretaties is correct?
Up(0)
Up(1)
Up(2)
Up(3)
Down(3)
Down(2)
Down(1)
Down(0)
of
Up(0)
Up(1)
Up(2)
Up(3)
Down(0)
Down(1)
Down(2)
Down(3)
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalairmatrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-35 06–07
H01L1
‘Array literal’
(Bit)string literal variable w: word := "1010000101111111";variable w: word := x"A17F";
Matrixgeheel (‘array aggregate’) Associatie volgens positie
(expression [, expression]…) type point is array (1 to 3) of integer;variable p: point := (4, 5, 5);
Associatie volgens naam(choice [| choice]… => expression [, choice [| choice]… => expression]…)met choice ofwel een uitdrukking, een discreet bereik
of others variable p: point := (3 => 5, 1 => 4, 2 => 5);variable p: point := (1 => 4, 2 | 3 => 5);variable p: point := (1 => 4, 2 to 3 => 5);variable p: point := (1 => 4, others => 5);
sample_buf := (others => 0); init onafh. van grootte
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalairmatrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-36 06–07
H01L1
Matrixdeel (‘slice’)
= subset van opeenvolgende matrixelementen Zorg ervoor dat de richting (to of downto)
dezelfde is als in de declaratie!
Matrix begrenzen met een subtype-definitie subtype halfword is bit_vector(0 to 15);
Toekenning aan een stuk van een matrix signal Bus: std_logic_vector (7 downto 0);
signal A: std_logic_vector (0 to 3);Bus <= A;Bus(0 to 3) <= A;Bus(3 downto 0) <= A;Bus(5 downto 4) <= A(0 to 1);
richting Bus verschilt van declaratie
verschillende groottes
OK! Bus(3) <= A(0)
OK! Bus(5) <= A(0)
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalairmatrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-37 06–07
H01L1 Concatenatie van(ééndimensionale) matrices
= samenvoeging door draden te bundelen signal Byte_bus: bit_vector(7 downto 0); signal Nibble_busA, Nibble_busB:
bit_vector(3 downto 0); Byte_bus <= Nibble_busA & Nibble_busB;
Byte_bus(7)Byte_bus(6)Byte_bus(5)Byte_bus(4)Byte_bus(3)Byte_bus(2)Byte_bus(1)Byte_bus(0)
Nibble_busA(3)Nibble_busA(2)Nibble_busA(1)Nibble_busA(0)
Nibble_busB(3)Nibble_busB(2)Nibble_busB(1)Nibble_busB(0)
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objectentypes
scalairmatrix
attributen Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-38 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal
Lexicale elementen Data-objecten & -types
VHDL-objecten VHDL-types Attributen
Bewerkingen Controle-uitdrukkingen Subprogramma’s Bibliotheken
Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objecten typesattributen
Bewerkingen
Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-39 06–07
H01L1
Attributen
= informatie over objecten & types Voorbeelden van voorgedefinieerde attributen
van scalaire types T'left : eerste waarde van T T'low : kleinste waarde van T T'pos(x) : positie van x in T
van matrixtypes & -objecten A'range[(n)] : indexbereik van dimensie n A'length[(n)] : grootte van indexbereik A'left[(n)] : eerste waarde in indexbereik
van signalen S'event : true als er een ‘event’ was
op S in de huidige
simulatiecyclus S'last_event : tijd sinds laatste ‘event’ op S
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objecten typesattributen
Bewerkingen
Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-40 06–07
H01L1 Attributen gedefinieerddoor de gebruiker
toevoegen beperkingen en informatie buiten de structuur en het gedrag
Declaratie van een attribuutattribute name : sub(type); attribute pin_number : positive;attribute encoding : bit_vector;
Specificatie van een attribuut attribute name of name(s) : class is expression; attribute pin_number of EN_1, EN_2: signal is 14;attribute encoding of state1: literal is b"0000";
• Inleiding
• In vogelvlucht
Taalelementen LexicaalData
objecten typesattributen
Bewerkingen
Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-41 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal
Lexicale elementenData-objecten & -types Bewerkingen:
logisch, relationeel, aritmetisch & schuiven
Controle-uitdrukkingenSubprogramma’sBibliotheken
Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal DataBewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-42 06–07
H01L1
Logische bewerkingen
Lijst van logische operatoren:not, and, or, xor, nand, nor, xnor
Prioriteit: ‘not’ heeft de hoogste prioriteitAlle andere hebben gelijke prioriteit lager
dan ‘not’ Gedefinieerd voor de datatypes: bit[_vector], boolean, std_[u]logic[_vector]
Kan op matrices van dezelfde grootteBewerkingen gebeuren telkens op
elementen met overeenkomende posities Resultaat is een (matrix van) boolean
niet in VHDL-87
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal DataBewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-43 06–07
H01L1
Vergelijkingen
Lijst van relationele operatoren:<, <=, =>, >, =, /=
Beide operanden moeten van hetzelfde type zijn
Resultaat is een boolean Kan op matrices, zelfs van verschillende
grootte Algoritme:
aligneer de matrices op linkerelement vergelijk element per element, van links naar
rechts vergelijk maximaal zoveel elementen als er in
de kleinste matrix aanwezig zijn Daarom zijn de volgende vergelijkingen waar:
"1110" > "10111" "1110" = "11101"
Dit werkt dus op bitvectoren van gelijke lengte alsof het positieve getallen waren
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal DataBewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-44 06–07
H01L1
Aritmetische bewerkingen
Lijst van aritmetische operatoren: +, −, *, /,** (exponent), abs (absolute waarde), mod (modulus), rem (rest)
Gedefinieerd voor datatypes integer en real (behalve mod en rem),
maar niet op bitvectoren Gebruik ‘overloading’ voor bitvectoren
(niet standaard!) fysische datatypes (enkel +, −)
Operanden moeten van hetzelfde type zijn, maar verschillende bereiken zijn toegelaten
Een variabele van het fysische type (bijv. time) kan ook vermenigvuldigd worden met (of gedeeld worden door) een integer of een real; het resultaat blijft van het fysische type
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal DataBewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-45 06–07
H01L1
Schuifoperaties
Lijst van schuifoperatoren (niet in VHDL-87): sll (‘shift-left logical’), srl,sla (‘shift-left arithmetic’), sra,rol (‘rotate left’), ror
De eerste operand is een vector van bits of van booleans
De tweede operand is een integer; als deze negatief is, schuif in de tegengestelde richting
Het resultaat is van hetzelfde type als de eerste operand
Voorbeelden: B"10001010" sll 3 = B"01010000"
B"10001010" sll -2 = B"00100010"B"10001010" sra 3 = B"11110001"B"10001010" ror 3 = B"01010001"
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal DataBewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-46 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal
Lexicale elementenData-objecten & -typesBewerkingen Controle-uitdrukkingen:
conditionele uitdrukkingen & lussenSubprogramma’sBibliotheken
Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
nControle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-47 06–07
H01L1
Conditionele uitdrukkingen
Uitdrukking “if” if boolean_expression then statement(s)[elsif boolean_expression then statement(s)]… [else statement(s)] end if;
Opmerking:• Ingebouwde prioriteit: de eerste voorwaarde die
waar is bepaalt welke statement(s) uitgevoerd worden
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
nControle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-48 06–07
H01L1
Conditionele uitdrukkingen
Uitdrukking “case” case expression is when choice(s) => statement(s) [when choice(s) => statement(s)]… end case; case x is
when 0 to 4 => y <= 'Z'; when 5 => y <= '1'; when 7 | 9 => y <= '0'; when others => null;end case;
Voorwaarden:1. Alle mogelijke waarden moeten exact eenmaal
gespecificeerd worden als choice2. De waarden zijn van hetzelfde type als
expression3. De waarden zijn constant en gekend op het
moment van ontwerp
slechts eenmaal geëvalueerd
doe niets
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
nControle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-49 06–07
H01L1
Lussen
Oneindige lus loop statement(s)end loop;Oneindige lussen zijn typisch voor
hardware!-- 4-bit teller met uitgang “count”val := 0;loop count <= val; wait until clk = '1' ; val := (val + 1) mod 16;end loop;
“exit”-uitdrukkingexit [when boolean_expression];
“next”-uitdrukkingnext [when boolean_expression];
wacht totclk '1' wordt
or reset = '1'exit when reset = '1';
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
nControle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-50 06–07
H01L1
Lussen
“while”-luswhile boolean_expression loop statement(s)end loop;
“for”-lusfor name in range loop statement(s)end loop; De lusvariabele name
moet niet gedeclareerd worden kan alleen binnen de lus gebruikt worden
Enkele voorbeelden van range: for i in 0 to 3 loop … for i in an_array'range loop … for state in FSM_state loop …
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
nControle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-51 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal
Lexicale elementenData-objecten & -typesBewerkingenControle-uitdrukkingen Subprogramma’s: procedures & functiesBibliotheken
Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
n ControleSub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-52 06–07
H01L1
Subprogramma’s
= verzameling van sequentiële uitdrukkingensubprogram_specification is [constant, variable, (sub)type declaration]… [subprogram]…begin statement(s)end;
Mogelijke subprogram_specification: Procedure: equivalent met een statement
procedure name [(interface_list)] interface_list is een ‘;’-gescheiden lijst van
[signal] param_name(s) : [mode] (sub)type mode is één van in, out, inout, buffer
Functie: (onderdeel van) een expressionfunction name [(interface_list)] return (sub)type
Minstens één statement(s) is eenreturn expression;
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
n ControleSub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-53 06–07
H01L1
Subprogramma’s
Gebruik subprogrammaAssociatie argumenten volgens positie
name(expression [, expression]…)Associatie argumenten volgens naam
name(param_name => expression [, param_name => expression]…)
Voorbeeld van een functiefunction or_bv ( bv : in bit_vector ) return bit is variable result : bit := '0';begin for index in bv'range loop result := result or bv(index); end loop; return result;end;
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
n ControleSub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-54 06–07
H01L1
‘Overloading’
= laat verschillende subprogramma’s toe met dezelfde naam maar een verschillende interface_list context bepaalt welke gebruikt wordt procedure incr(a : inout integer) is …
procedure incr(a : inout bit_vector) is … Om operatoren te ‘overloaden’,
plaats ze tussen aanhalingstekens function "+" (a,b: in bit_vector)
return bit_vector is …function "+" (a: in bit_vector, b: in integer) return bit_vector is …
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
n ControleSub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-55 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal
Lexicale elementenData-objecten & -typesBewerkingenControle-uitdrukkingenSubprogramma’sBibliotheken
Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-56 06–07
H01L1
Gebruik van bibliotheken
Evolutionair ontwerp: dikwijls kan tot 95% van een ontwerp hergebruikt worden
Een ‘Package’ groepeert definities van constanten, componentdeclaraties, datatypes en subprogramma’s
Een ‘Library’ is de plaats waar de binaire code van analyse/compilatie gestockeerd wordt (folder, databank, ...)Default: work (huidige werkfolder)
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-57 06–07
H01L1
VHDL-bibliotheek
Declaratie: interfacepackage name is [constant, signal, component, (sub)type, attribute, subprogram declaration]…end [package] [name];
‘body’: subprogramma’spackage body name is [constant, (sub)type declaration]… [subprogram]…end [package body] [name];
Gebruiklibrary library_name;use library_name.package_name.all; library ieee; use ieee.std_logic_1164.all;
niet nodig voor “work”
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-58 06–07
H01L1
Standaard IEEE-bibliotheken
std_logic_1164bewerkingen met std_[u]logic[_vector]
numeric_bitbewerkingen met [un]signedtype [un]signed is array ( natural range <> ) of bit;
numeric_std idem maar op std_logic i.p.v. bit
math_realbewerkingen op real
math_complexbewerkingen op complexe getallen
• Inleiding
• In vogelvlucht
Taalelementen Lexicaal Data Bewerkinge
n Controle Sub-
programma's
Bibliotheken
• Hardware-beschrijving
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-59 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal Hardware-beschrijving met VHDL
GedragsbeschrijvingStructurele beschrijvingBeschrijving van repetitieve structuren
Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving Gedrag Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-60 06–07
H01L1
VHDL modulebeschrijving
Interface module = declaratie entiteitentity name is [generic (generic_list);] [port (port_list);]end [entity] [name];
generic_list is een ‘;’-gescheiden lijst vanname(s) : (sub)type [:= expression]
port_list is een ‘;’-gescheiden lijst vansignal_name(s) : [mode] (sub)type
entity reg is generic (n : positive; T_pd : time := 5 ns); port (D : in bit_vector(0 to n-1); Q : out bit_vector(0 to n-1); clk : in bit);end entity reg;
generische constanten: verschillen per
instantiatieinterface naar entiteit;afwezig in hoogste
niveau
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving Gedrag Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-61 06–07
H01L1
VHDL modulebeschrijving
Generische constantenentity reg is generic (n : positive; T_pd : time := 5 ns); port (D : in bit_vector(0 to n-1); Q : out bit_vector(0 to n-1); clk : in bit);end entity reg; Laat toe om zowel het gedrag als de
grootte van verbindingen te parametriseren
Daardoor hergebruik entiteiten in licht verschillende omstandigheden mogelijk VHDL krachtiger dan schema’s
Waarde moet gekend zijn op ogenblik van synthese!
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving Gedrag Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-62 06–07
H01L1
VHDL modulebeschrijving
Implementatie module=één of meerdere architecturen, die
alternatieve implementaties beschrijven
architecture name of entity_name is [constant, variable, signal declaration]… [(sub)type, attribute declaration]… [component declaration]… [subprogram]…begin {[label :] concurrent_statement}…end [architecture] [name];
benoem de uitdrukking/component;nuttig voor debugging/simulatie &
configuratie
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving Gedrag Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-63 06–07
H01L1
Parallelle uitdrukkingen
Alle concurrent_statements worden gelijktijdig uitgevoerd, zoals we van hardware verwachten
De volgorde van parallelle uitdrukkingen is dus onbelangrijk
entity Concurrent is port (A,B,C: in std_logic; Y: out std_logic);end entity Concurrent;architecture Struct of Concurrent is signal T1: std_logic;begin NAND2: entity NAND2 port map (T1,C,Y); NAND1: entity NAND2 port map (A,B,T1);end architecture Struct;
A
B
CY
T1
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving Gedrag Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-64 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal Hardware-beschrijving met VHDL
Gedragsbeschrijving van componentenStructurele beschrijvingBeschrijving van repetitieve structuren
Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-65 06–07
H01L1 “process”: de basis van parallelle uitdrukkingen
= programma van sequentiële uitdrukkingen dat één parallelle uitdrukking vormtprocess [is] [constant, variable, (sub)type declaration]… [subprogram]…begin sequential_statement(s)end process [label];
Herhaalt sequential_statement(s) eindeloos zoals een oneindige lus minstens één wait (sequentiële) uitdrukking clock_gen: process is
variable val: std_logic := '0';begin clk <= val; val := not val; wait for T_pw;end process clock_gen;
moet hetzelfde zijn als het label voor de
uitdrukking
globale constante
locale variabele
globaal signaal
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-66 06–07
H01L1 Sequentiële uitdrukking “wait”
= bepaal de reactie van het proces op signalenwait [on signal_name(s)] [until boolean_expression] [for time_expression];
gevoeligheid: proces hervat als één van de signal_name(s) verandert van waarde
voorwaarde: proces hervat als boolean_expression waar is of waar wordt als er geen gevoeligheidsvoorwaarde is
timeout: wacht (niet langer dan) een (simulatie)tijd time_expression
wait; -- wait forever wait until clk = '1';
=wacht tot clk 1 wordt wait on clk until reset = '0' for 1 ms;
=wacht tot reset 0 is op een verandering van clk, maar niet langer dan een simulatietijd van 1 ms
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-67 06–07
H01L1
Proces met gevoeligheidslijst
Een process kan een gevoeligheidslijst hebben als parameter:process(signal_name(s)) [is] [declarations and subprograms]…begin sequential_statement(s)end process [label];
Dit is equivalent aanprocess [is] [declarations and subprograms]…begin sequential_statement(s) wait on signal_name(s);end process [label];
De sequential_statement(s) kunnen geen wait bevatten!
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-68 06–07
H01L1
Variabelen versus signalen
Een variabele kan enkel in een subprogramma of een proces gebruikt worden;als de waarde ervan buiten een proces beschikbaar moet zijn, moet ze aan een signaal toegekend worden
Een variabele wordt dadelijk aangepast;een signaal wordt aangepast door de eerstvolgende “wait”-uitdrukking v := '1';
if v = '0' then -- gebeurt nooitend if;
s <= '1';if s = '0' then -- s was 0 ervoorend if;
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-69 06–07
H01L1
Variabelen versus signalen
Signalen hebben gewoonlijk een fysische betekenis, variabelen niet noodzakelijk process is
variable T1,T2: std_logic;begin if (S='1') then T1 := A nand B; T2 := C nand D; else T1 := E nand F; T2 := G nand H; end if; Y <= T1 nand T2; wait on A,B,C,D,E,F,G,H,S;end process;
T1 en T2 hebben geen fysische betekenis omdat ze elk naar 2 verschillende draden refereren
A
B
C
D
E
F
G
H
S
Y
T1 T2
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-70 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal Hardware-beschrijving met VHDL
Gedragsbeschrijving van componentencombinatorische logica sequentiële logica
Structurele beschrijvingBeschrijving van repetitieve structuren
Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-71 06–07
H01L1
Parallelle signaaltoekenningen
Afkortingen voor functionele modellering
Toekenning van conditionele signalen name <= [waveform when boolean_expr else]… waveform [when boolean_expr];is equivalent aan process(alle_signalen_behalve_name) begin [if boolean_expr then] name <= waveform; [elsif boolean_expr then name <= waveform;]… [else name <= waveform;] [end if;] end process; y <= d1 when s = '1' else
d0 when s = '0' else 'X';
process(d0,d1,s) begin if s = '1' then y <= d1; elsif s = '0' then y <= d0; else y <= 'X'; end if;end process;
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-72 06–07
H01L1
Parallelle signaaltoekenningen
Toekenning van geselecteerde signalen with expression select name <= [waveform when choice(s) ,]… waveform when choice(s);is equivalent aan process(alle_signalen_behalve_name) begin case expression is [when choice(s) => name <= waveform;]… when choice(s) => name <= waveform; end case; end process; with op select
y <= a+b when addop, a-b when minop;
process(op,a,b) begin case op is when addop => y <= a+b; when minop => y <= a-b; end case;end process;
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-73 06–07
H01L1 Meerdere toekenningenaan hetzelfde signaal
Wat is het effect van deze uitdrukkingen?Y <= A;Y <= B;
In een process (sequentieel)De eerste uitdrukking wordt genegeerd
In een architecture (parallel)Ongeldige code (compilatiefout) vermits
VHDL slechts enkelvoudige toekenningen toelaat
Reden: als A='0' en B='1',hebben we eenkortsluiting
A
BY
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-74 06–07
H01L1 Omgezette (‘resolved’) signalen
= voeg een resolutiefunctie toe aan de signaaldefinitie om de eigenlijke waarde te berekenen uit alleaangelegde waarden
function resolved (s: std_ulogic_vector) return std_ulogic;type std_logic is resolved std_ulogic;
Voor inout poorten/argumenten:gebruik als uitgang = ingang
resolutiefunctiegebruik als ingang = uitgang
resolutiefunctie
Out2
Out1
In1
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-75 06–07
H01L1
Std_logic_1164 resolutiefunctieconstant resolution_table : array (std_ulogic, std_ulogic) of std_ulogic := -- 'U','X','0','1','Z','W','L','H','-' (('U','U','U','U','U','U','U','U','U'), -- 'U' ('U','X','X','X','X','X','X','X','X'), -- 'X' ('U','X','0','X','0','0','0','0','X'), -- '0' ('U','X','X','1','1','1','1','1','X'), -- '1' ('U','X','0','1','Z','W','L','H','X'), -- 'Z' ('U','X','0','1','W','W','W','W','X'), -- 'W' ('U','X','0','1','L','W','L','W','X'), -- 'L' ('U','X','0','1','H','W','W','H','X'), -- 'H' ('U','X','X','X','X','X','X','X','X')); -- '-'function resolved(s : std_ulogic_vector) return std_ulogic is variable result : std_ulogic := 'Z'; begin if s'length = 1 then return s(s'low); end if; for i in s'range loop result := resolution_table(result, s(i)); end loop; return result;end function resolved;
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-76 06–07
H01L1
Voorbeeld: afgesloten bus
entity Pull_buf is port (In, E: in std_logic; Out: out std_logic);end entity Pull_buf;
entity Pullup is port (Out: out std_logic);end entity Pullup;
architecture RTL of Pullup is begin Out <= 'H';end architecture RTL;
architecture RTL of Pull_buf is component Driver port (I,E: in std_logic; O: out std_logic); end component Driver;begin component Pullup port map (Out); component Driver port map (In, E, Out);end architecture RTL;
R
Vcc
In
E
Out
resistieve driver
actieve driver
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-77 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal Hardware-beschrijving met VHDL
Gedragsbeschrijving van componenten combinatorische logicasequentiële logica
Structurele beschrijvingBeschrijving van repetitieve structuren
Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-78 06–07
H01L1
Flip-flops in VHDL
VHDL heeft geen speciale uitdrukkingen voor flip-flops!
FF’s zijn impliciet aanwezig als een signaal of variabele zijn waarde behoudt gedurende een tijd
Dit gebeurt typisch bij een onvolledige if of case uitdrukking process (D,Clk) is
begin if (Clk='1') then Q <= D; end if;end process;
dit is een latch: als Clk=1, Q volgt D : Clk-event & Clk=0 : er gebeurt niets Clk-event & Clk=1 : D wordt gekopieerd
naar Q D-event & Clk=1 : D wordt gekopieerd
naar Q
Mux: process(D,Clk)begin if Clk = '1' then Q <= D; else Q <= '0'; end if;end process Mux;
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-79 06–07
H01L1
Hoe een stijgende klokflank beschrijven?
Met een “wait until” uitdrukkingDFF: process isbegin wait until Clk='1'; Q <= D;end process DFF;
Met een “event”-attribuutDFF: process (Clk) isbegin if (Clk'event and Clk='1') then Q <= D; end if;end process DFF;rising_edge(clk) houdt rekening met 'H', … ( beter voor std_[u]logic)
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-80 06–07
H01L1
Flip-flop met reset
Synchrone reset process(D,Clk,Rst)
begin if rising_edge(Clk) then if Rst='1' then Q <= '0'; else Q <= D; end if; end if;end process;
Te veralgemenen naar registers met een combinatorische schakeling aan de ingang
Asynchrone reset process(D,Clk,Rst)
begin if Rst = '1' then Q <= '0'; elsif rising_edge(Clk) then Q <= D; end if;end process;
Kan niet met een wait until uitdrukking
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-81 06–07
H01L1
FSM: een voorbeeld
UpStart
Nextstatelogic
Out-put
logic
StateReg
ResetOutput
NextState
CurrentState
Idle00
Up101
Up210
Up311
Down311
Down210
Down101
Start=0
Start=1Up=0
Start=1Up=1
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-82 06–07
H01L1
FSM: een voorbeeldentity FSM is port (Start, Up, Reset, Clk: in std_logic; Output: out std_logic_vector(0 to 1));end entity FSM;
architecture Behav of FSM is type FSM_States = (Idle,Up1,Up2, Up3,Down1,Down2,Down3); signal CurrentState, NextState : FSM_States;begin StateRegister: process(NextState,Clk,Reset) … end process StateRegister; NextStateLogic: process(CurrentState,Start,Up) … end process NextStateLogic; OutputLogic: process(CurrentState) … end process OutputLogic;end architecture Behav;
UpStart
Nextstatelogic
Out-put
logic
StateReg
ResetOutput
NextState
CurrentState
Idle
Up1
Up2
Up3
Down3
Down2
Down1
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-83 06–07
H01L1
FSM: een voorbeeld
StateRegister:process(NextState,Clk,Reset) isbegin if Reset='1' then CurrentState <= Idle; elsif rising_edge(Clk) then CurrentState <= NextState; end if;end process StateRegister;
UpStart
Nextstatelogic
Out-put
logic
StateReg
ResetOutput
NextState
CurrentState
Idle
Up1
Up2
Up3
Down3
Down2
Down1
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-84 06–07
H01L1
FSM: een voorbeeldNextStateLogic:process(CurrentState,Start,Up) isbegin case CurrentState is when Idle => if Start = '0' then NextState <= Idle; elsif Up = '1' then NextState <= Up1; else NextState <= Down3; end if; when Up1 => NextState <= Up2; when Up2 => NextState <= Up3; when Up3|Down1 => NextState <= Idle; when Down3 => NextState <= Down2; when Down2 => NextState <= Down1; end case;end process NextStateLogic;
Idle00
Up101
Up210
Up311
Down311
Down210
Down101
Start=0
Start=1Up=0
Start=1Up=1
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-85 06–07
H01L1
FSM: een voorbeeld
OutputLogic:process(CurrentState) isbegin case CurrentState is when Idle => Output <= "00"; when Up1|Down1 => Output <= "01"; when Up2|Down2 => Output <= "10"; when Up3|Down3 => Output <= "11"; end case;end process OutputLogic;
Idle00
Up101
Up210
Up311
Down311
Down210
Down101
Start=0
Start=1Up=0
Start=1Up=1
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-86 06–07
H01L1
Veilige toestanden
Stel dat we een toestandsmachine hebben met3 toestanden, gecodeerd in 2 bits.Wat gebeurt er als de FSM in de 4de toestand terecht komt, bijv. t.g.v. ruis, opstarten, … ?Zal het hiervan herstellen?
Neem voorzorgen in de VHDL-code: NextStateLogic: process(CurrentState) is
begin case CurrentState is when Idle => NextState <= S1; when S1 => NextState <= S2; when S2 => NextState <= Idle; when others => NextState <= Idle; end case;end process NextStateLogic;
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijvingGedrag
combina-torisch
sequen-tieel
Structureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-87 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal Hardware-beschrijving met VHDL
Gedragsbeschrijving Structurele beschrijving:
beschrijf de hiërarchie van componenten, als verbindingen tussen subsystemen
Beschrijving van repetitieve structuren Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving GedragStructureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-88 06–07
H01L1
Instantiatie van componenten
= bepaal gebruik entiteit/component Directe instantiatie (niet in VHDL-87) entity entity_name [(architecture_name)] [generic map (generic_association(s))] [port map (port_association(s))];Associatie via positie of naam voor
generische constanten en poorten (cfr. subprogramma’s)entity work.reg(struct) generic map (n => 4) port map (D_in, Q_out, clock);
Impliceert ‘bottom-up’ ontwerp! niet geschikt voor grote ontwerpen
Via component-declaratie
default T_pd
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving GedragStructureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-89 06–07
H01L1 Instantiatie van componentenvia declaratie
Component-declaratie component name [is] [generic (generic_list);] [port (port_list);]end component [name];component: virtueel element
entiteit: reëel element laat ‘top-down’ ontwerp toe
in een bibliotheek bij meervoudig gebruik Component-instantiatie [component] name [generic map (generic_association(s))] [port map (port_association(s))];
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving GedragStructureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-90 06–07
H01L1
architecture Struct of MUX21 is signal U,V,W : bit; component AND2 is port (X,Y: in bit; Z: out bit); end component AND2; component OR2 is port (X,Y: in bit; Z: out bit); end component OR2; component INV is port (X: in bit; Z: out bit); end component INV;begin Gate1: component INV port map (X=>S,Z=>U); Gate2: component AND2 port map (X=>A,Y=>S,Z=>W); Gate3: component AND2 port map (X=>U,Y=>B,Z=>V); Gate4: component OR2 port map (X=>W,Y=>V,Z=>Y);end architecture Struct;
Voorbeeld: 2-naar-1 MUX
A
S
BY
A
S
B
Y
U V
W
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving GedragStructureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-91 06–07
H01L1 Configuratie:koppeling component-entiteit
Configuratie-declaratie configuration name of entity_name is
for architecture_name [for label(s): component_name use use_info [generic map (generic_association(s))] [port map (port_association(s))]; end for;]… end for;end [configuration] [name]; use_info is ofwel
entity entity_name [(architecture_name)] configuration configuration_name
label(s) is others of all of een door komma’s gescheiden lijst van labels van componenten
Componenten waarvoor geen koppeling voorzien is, worden gekoppeld aan entiteiten met dezelfde naam
Hiërarchische ontwerpen hergebruiken architectuur-configuratie als koppeling
koppeling kan anders zijn voor elke component
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving GedragStructureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-92 06–07
H01L1
Voorbeeld: 2-naar-1 MUX
Om de MUX21 te implementeren, willen we de implementaties van AND3, OR3 en INV uit een bibliotheek gebruiken (architectuur “RTL”) entity AND3 is port (A,B,C: in bit; Y: out bit);end entity AND3;
entity OR3 is port (A,B,C: in bit; Y: out bit);end entity OR3;
entity INV is port (A: in bit; Y: out bit);end entity INV;
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving GedragStructureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-93 06–07
H01L1
Voorbeeld: 2-naar-1 MUX
Configuratie
configuration Use3InputGates of MUX21 is for Struct for Gate1:INV use entity INV(RTL) port map (A=>X,Y=>Z); end for; for all:AND2 use entity AND3(RTL) port map (A=>X,B=>Y,C=>'1',Y=>Z); end for; for Gate4:OR2 use entity OR3(RTL) port map (A=>X,B=>Y,C=>'0',Y=>Z); end for; end for;end Use3InputGates;
AND3 entiteitABC
Y
AND2 component
XY
Z
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving GedragStructureel Repetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-94 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal Hardware-beschrijving met VHDL
GedragsbeschrijvingStructurele beschrijving Beschrijving van repetitieve structuren
Hardware-simulatie met VHDL Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving Gedrag StructureelRepetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-95 06–07
H01L1 Parallelle uitdrukking “generate”
Genereren iteratieve structuren:herhaal identieke cellen
for identifier in range generate [declaration(s)begin] {[label :] concurrent_statement}… end generate [this_label];
Structuren conditioneel genereren:behandel sommige cellen anders
if boolean_expression generate [declaration(s)begin] {[label :] concurrent_statement}… end generate [this_label];
geen begin als geen declaration(s) !
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving Gedrag StructureelRepetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-96 06–07
H01L1
Voorbeeld: 3-state SIPO (1)
library ieee; use ieee.std_logic_1164.all;
entity ser2parinv is generic(n: positive); port(clk, en, ser_in: in std_logic; par_n: out std_logic_vector(1 to n));end entity ser2parinv;
architecture cells of ser2parinv is component DFF is port(clk, D: in std_logic; Q, Qn: out std_logic); end component; component tristate is port(en, A: in std_logic; Y: out std_logic) end component; signal state: std_logic_vector(1 to n));
…D Q
Qn
D Q
Qn
D Q
Qn
seri
n
clken parn
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving Gedrag StructureelRepetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-97 06–07
H01L1
Voorbeeld: 3-state SIPO (2)
begin cell_array: for index in 1 to n generate signal prebuf: std_logic; begin first_FF: if index = 1 generate FF: component DFF port map(clk, ser_in, state(index), prebuf); end generate first_FF; other_FF: if index > 1 generate FF: component DFF port map(clk, state(index-1), state(index), prebuf); end generate other_FF; buf: component tristate port map(en, prebuf, par_n(index)); end generate cell_array;end architecture cells;
…D Q
Qn
D Q
Qn
D Q
Qn
seri
n
clken parn
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving Gedrag StructureelRepetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-98 06–07
H01L1
Configuratie
I.p.v. architecture_name, gebruik het label van de “generate”-uitdrukking, eventueel beperkt tot een deelbereik: generate_label [(range)] configuration struct of ser2parinv is
for cells -- architecture for cell_array(n) -- last FF for other_FF for FF:DFF use entity …; end for; end for; for buf:tristate use entity …; end for; end for; for cell_array(1 to n-1) -- other cells for first_FF -- 1st inner generate for FF:DFF …; end for; end for; for other_FF -- 2nd inner generate for FF:DFF …; end for; end for; for buf:tristate use entity …; end for; end for; end for;end configuration struct;
• Inleiding
• In vogelvlucht
• Taalelementen
Hardware-beschrijving Gedrag StructureelRepetitief
• Simulatie
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-99 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding
VHDL in vogelvlucht
Elementen van de VHDL-taal
Hardware-beschrijving met VHDL
Hardware-simulatie met VHDLGebeurtenisgedreven simulatieBeschrijving tijdsgedragTestbank
Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
Simulatie Gebeurteni
s-gedreven Tijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-100 06–07
H01L1 Gebeurtenisgedreven simulatie
Het continu berekenen van de uitgangen (bijv. per fs), ook als er niets verandert, zorgt voor nodeloos rekenwerk
Oplossing: ‘event-driven’ simulatie Een signaaltoekenning creëert een transactie
(nieuwe waarde @ nieuwe simulatietijd) Wanneer de simulatietijd voortgaat naar de
nieuwe tijd wordt het signaal aangepast (signaal is actief tijdens deze deltacyclus)
Een gebeurtenis (‘event’) treedt enkel op als de nieuwe waarde verschilt van de oude
Enkel parallelle uitdrukkingen met gebeurtenissen op hun gevoeligheidslijst worden opnieuw geëvalueerd
Dit mechanisme zorgt er enkel voor dat de simulatie versnelt zonder het gesimuleerde gedrag te wijzigen
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
SimulatieGebeurteni
s-gedreven Tijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-101 06–07
H01L1
Implementatie simulator
1. Plaats alle uitdrukkingen met minstens één gewijzigde ingang in de ‘process execution queue’ PEQ.
2. Voer alle uitdrukkingen in de PEQ één voor één uit (of tegelijkertijd op een parallelle computer) zonder de uitgangssignalen aan te passen (‘transaction scheduling’)
Uitdrukkingen in een proces worden sequentieel uitgevoerd en hun resultaten worden onthouden tot de volgende “wait”-uitdrukking;pas dan zijn ze ter beschikking voor simulatie
3. Pas de (actieve) uitgangssignalen aan nadat alle uitdrukkingen in de PEQ uitgevoerd zijn
4. Voeg alle uitdrukkingen, waarvoor een gebeurtenis optreedt t.g.v. een veranderd uitgangssignaal, toe aan de PEQ
5. Herhaal dit tot de PEQ leeg is
6. Verhoog de simulatietijd tot het volgende ogenblik waarop een nieuwe gebeurtenis gepland is
Deltacyclus-convergentie Deltacyclus
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
SimulatieGebeurteni
s-gedreven Tijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-102 06–07
H01L1
Simulatie van een SR-FF
entity Flipflop is port (A,B: in std_logic; Q,Qn: buffer std_logic);end entity Flipflop;
architecture Struct of FlipFlop isbegin NAND2: entity NAND2 port map (Qn,B,Q); NAND1: entity NAND2 port map (A,Q,Qn);end architecture Struct;
A
B
Q
Qn
T1 T2
Simulatietijd: T1
1. Plaats uitdrukkingen met ingangsgebeurtenissen in PEQ
ProcessExecution
Queue
NAND1
A
BQ
Qn• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
SimulatieGebeurteni
s-gedreven Tijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-103 06–07
H01L1
Simulatie van een SR-FF
entity Flipflop is port (A,B: in std_logic; Q,Qn: buffer std_logic);end entity Flipflop;
architecture Struct of FlipFlop isbegin NAND2: entity NAND2 port map (Qn,B,Q); NAND1: entity NAND2 port map (A,Q,Qn);end architecture Struct;
A
B
Q
Qn
T1 T2
Simulatietijd: T1
2. Voer uitdrukkingen in PEQ uit en onthoud uitgangen
ProcessExecution
Queue
NAND1
Onthoudenuitgangen:
Deltacyclus 1
Qn <= 1
3. Pas uitgangen aan
4. Voeg uitdrukkingen met gebeurtenissen toe aan PEQ
NAND2
A
BQ
Qn• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
SimulatieGebeurteni
s-gedreven Tijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-104 06–07
H01L1
Simulatie van een SR-FF
entity Flipflop is port (A,B: in std_logic; Q,Qn: buffer std_logic);end entity Flipflop;
architecture Struct of FlipFlop isbegin NAND2: entity NAND2 port map (Qn,B,Q); NAND1: entity NAND2 port map (A,Q,Qn);end architecture Struct;
A
B
Q
Qn
T1 T2
Simulatietijd: T1
2. Voer uitdrukkingen in PEQ uit en onthoud uitgangen
ProcessExecution
Queue
NAND2
Onthoudenuitgangen :
Deltacyclus 2
Q <= 0
3. Pas uitgangen aan
4. Voeg uitdrukkingen met gebeurtenissen toe aan PEQ
NAND1
A
BQ
Qn• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
SimulatieGebeurteni
s-gedreven Tijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-105 06–07
H01L1
Simulatie van een SR-FF
entity Flipflop is port (A,B: in std_logic; Q,Qn: buffer std_logic);end entity Flipflop;
architecture Struct of FlipFlop isbegin NAND2: entity NAND2 port map (Qn,B,Q); NAND1: entity NAND2 port map (A,Q,Qn);end architecture Struct;
A
B
Q
Qn
T1 T2
Simulatietijd: T1
2. Voer uitdrukkingen in PEQ uit en onthoud uitgangen
ProcessExecution
Queue
NAND1
Onthoudenuitgangen :
Deltacyclus 3
Qn <= 1
3. Pas uitgangen aan,maar ze veranderen niet
4. Geen uitdrukkingen voor PEQ:T1 deltacyclus-convergentie
A
BQ
Qn• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
SimulatieGebeurteni
s-gedreven Tijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-106 06–07
H01L1
Simulatietijd: T1Simulatietijd: T2
Simulatie van een SR-FF
entity Flipflop is port (A,B: in std_logic; Q,Qn: buffer std_logic);end entity Flipflop;
architecture Struct of FlipFlop isbegin NAND2: entity NAND2 port map (Qn,B,Q); NAND1: entity NAND2 port map (A,Q,Qn);end architecture Struct;
A
B
Q
Qn
T1 T2
6. Verhoog simulatietijd
ProcessExecution
Queue
1. Plaats uitdrukkingen met gebeurtenissen in PEQ
NAND1
NAND2
A
BQ
Qn• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
SimulatieGebeurteni
s-gedreven Tijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-107 06–07
H01L1
Simulatie van een SR-FF
entity Flipflop is port (A,B: in std_logic; Q,Qn: buffer std_logic);end entity Flipflop;
architecture Struct of FlipFlop isbegin NAND2: entity NAND2 port map (Qn,B,Q); NAND1: entity NAND2 port map (A,Q,Qn);end architecture Struct;
A
B
Q
Qn
T1 T2
ProcessExecution
Queue
NAND1
NAND2
Onthoudenuitgangen :
Simulatietijd: T2
2. Voer uitdrukkingen in PEQ uit en onthoud uitgangen
Deltacyclus 1
Qn <= 1
3. Pas uitgangen aan
4. Voeg uitdrukkingen met gebeurtenissen toe aan PEQ Q <= 1
NAND2NAND1
NAND2 berekend met oude Qn
A
BQ
Qn• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
SimulatieGebeurteni
s-gedreven Tijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-108 06–07
H01L1
Simulatie van een SR-FF
entity Flipflop is port (A,B: in std_logic; Q,Qn: buffer std_logic);end entity Flipflop;
architecture Struct of FlipFlop isbegin NAND2: entity NAND2 port map (Qn,B,Q); NAND1: entity NAND2 port map (A,Q,Qn);end architecture Struct;
A
B
Q
Qn
T1 T2
ProcessExecution
Queue
NAND1
Onthoudenuitgangen :
Simulatietijd: T2
2. Voer uitdrukkingen in PEQ uit en onthoud uitgangen
Deltacyclus 2
Qn <= 0
3. Pas uitgangen aan
4. Voeg uitdrukkingen met gebeurtenissen toe aan PEQ
NAND2
A
BQ
Qn• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
SimulatieGebeurteni
s-gedreven Tijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-109 06–07
H01L1
Simulatie van een SR-FF
entity Flipflop is port (A,B: in std_logic; Q,Qn: buffer std_logic);end entity Flipflop;
architecture Struct of FlipFlop isbegin NAND2: entity NAND2 port map (Qn,B,Q); NAND1: entity NAND2 port map (A,Q,Qn);end architecture Struct;
A
B
Q
Qn
T1 T2
ProcessExecution
Queue
NAND2
Onthoudenuitgangen :
Simulatietijd: T2
2. Voer uitdrukkingen in PEQ uit en onthoud uitgangen
Deltacyclus 3
Q <= 1
3. Pas uitgangen aan,maar ze veranderen niet
4. Geen uitdrukkingen voor PEQ:T2 deltacyclus-convergentie
A
BQ
Qn• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
SimulatieGebeurteni
s-gedreven Tijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-110 06–07
H01L1
Simulatietijd: T2Simulatietijd: T3
Simulatie van een SR-FF
entity Flipflop is port (A,B: in std_logic; Q,Qn: buffer std_logic);end entity Flipflop;
architecture Struct of FlipFlop isbegin NAND2: entity NAND2 port map (Qn,B,Q); NAND1: entity NAND2 port map (A,Q,Qn);end architecture Struct;
A
B
Q
Qn
T1 T2
ProcessExecution
Queue
6. Verhoog simulatietijd
A
BQ
Qn• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
SimulatieGebeurteni
s-gedreven Tijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-111 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding
VHDL in vogelvlucht
Elementen van de VHDL-taal
Hardware-beschrijving met VHDL
Hardware-simulatie met VHDL ‘Event-driven’ simulatie Beschrijving tijdsgedragTestbank
Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
Simulatie Gebeurteni
s-gedrevenTijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-112 06–07
H01L1
Golfvorm (‘waveform’)
= wat toegekend wordt aan een signaal[delay_mechanism] expression [after a_time]
[, expression [after a_time]]…Transacties worden gepland
met waarde = expression op tijdsstip = a_time + huidige
simulatietijd(default a_time = 0 fs)
-- NAND-poort met 10 ns vertragingy <= a nand b after 10 ns;
-- 20 ns brede resetpuls na 5 nsrst <= '1' after 5 ns, '0' after 25 ns;
delay_mechanism geldt enkel voor het eerste element; de andere hebben altijd een transportvertraging
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
Simulatie Gebeurteni
s-gedrevenTijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-113 06–07
H01L1
Vertragingsmechanismen
Transportvertragingtransportuitgang is vertraagde ingang
Inertievertraging[[reject reject_time] inertial] inertie t.g.v. capaciteit/inductantie
(pulsen < reject_time) verdwijnen(default reject_time = a_time)
default = inertie-
vertraging
2 4 6 8 10 ns
a
y
y <= transport a after 3 ns;
2 4 6 8 10 ns
a
y
y <= a after 3 ns;
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
Simulatie Gebeurteni
s-gedrevenTijdsgedrag Testbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-114 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding
VHDL in vogelvlucht
Elementen van de VHDL-taal
Hardware-beschrijving met VHDL
Hardware-simulatie met VHDL ‘Event-driven’ simulatieBeschrijving tijdsgedrag Testbank
Hardware-synthese met VHDL
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
Simulatie Gebeurteni
s-gedreven TijdsgedragTestbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-115 06–07
H01L1
Testbank
Hoe wordt een schakeling getest? We leggen aan de ingangen representatieve stimuli
aan en controleren of de uitgangen de correcte
waarden op het juiste ogenblik vertonen.
Een VHDL ‘testbank’ is het hoogste hiërarchisch niveau van een ontwerp Het creëert een instantie van het ‘Design Under
Test’, voert stimuli toe aan de ingangen van DUT, controleert de uitgangen ervan door ze
te analyseren, bijv. “assertion”- of “report”-uitdrukkingen
als golfvorm te visualiseren Vermits dit het hoogste niveau is, heeft het zelf
geen ingangen of uitgangen!
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
Simulatie Gebeurteni
s-gedreven TijdsgedragTestbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-116 06–07
H01L1
Voorbeeld: MUX-testbank
entity Testbench isend entity Testbench;
architecture BehavTest of Testbench is signal in1, in2, select, out : bit;begin DUT: entity MUX21(Behav) port map (in1,in2,select,out); Stimuli: process is begin in1 <= '0', '1' after 50 ns, '0' after 100 ns, '1' after 150 ns; in2 <= '0', '1' after 100 ns; for i in 1 to 4 loop select <= '0', '1' after 25 ns; wait for 50 ns; end loop; end process Stimuli;end architecture BehavTest;
Geen in/uitgangen aan Testbench
DUT
in1
in2out
select
Stim
uli
in1
in2
select
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
Simulatie Gebeurteni
s-gedreven TijdsgedragTestbank
• Synthese
VHDL
KATHOLIEKE UNIVERSITEIT
7-117 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
Synthetiseerbare VHDLVHDL-synthese verbeterenVertaling naar een ASM-kaartSynthese-aspecten voor Xilinx:
overdraagbaarheid performantie
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
Synthese Syntheti-
seerbare VHDL
Verbeteren Naar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-118 06–07
H01L1
Hardware-synthese van VHDL
Een syntheseprogramma (‘hardware compiler’) zet de VHDL-beschrijving om in een structurele beschrijving op lager niveau (poorten/cellen) RTL-synthese goed gesupporteerd Synthese van hoger niveau (nog altijd?) te complex
voor de meeste programma’s Programma’s verschillen in de subsets van
VHDL die ze aankunnen IEEE 1076.6 standaard voor VHDL RTL-synthese
= grootste gemene deler, bijv. in de 1999-versie is alleen VHDL-87 toegelaten
Informatie i.v.m. tijdsgedrag wordt genegeerd Een waveform kan enkel een expression zijn:
delay_mechanism of after is niet toegelaten Een wait for wordt genegeerd
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
SyntheseSyntheti-
seerbare VHDL
Verbeteren Naar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-119 06–07
H01L1
Een combinatorisch voorbeeld
entity Parity is generic (n : integer); port (A: in std_logic_vector (0 to n-1); Odd: out std_logic);end entity Parity;
architecture Struct of Parity isbegin Parity: process(A) is variable Temp: std_logic; begin Temp := '0'; for I in A'low to A'high loop Temp := Temp xor A(I); end loop; Odd <= Temp; end process Parity;end architecture Struct;
0A(0)A(1)A(2)
Temp
Temp
OddA(3)
Temp
A(0)A(1)A(2)
Odd
A(3)
syntheseprogramma zal dit optimaliseren
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
SyntheseSyntheti-
seerbare VHDL
Verbeteren Naar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-120 06–07
H01L1 Een sequentieel voorbeeld:opgelet voor verschil
signaal/variabele process (clk) is
variable P: std_logic;begin if rising_edge(clk) then P := A and B; Y <= P or C; end if;end process;
process (clk) isbegin if rising_edge(clk) then P <= A and B; Y <= P or C; end if;end process;
AB YC
P
AB YC
P
≡ Y <= (A and B) or C;
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
SyntheseSyntheti-
seerbare VHDL
Verbeteren Naar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-121 06–07
H01L1
Toegelaten datatypes
Hardware bits:bit, boolean, std_[u]logic
Gegroepeerde hardware bits: integer & subtypes
type addr is range -64 to 63; 2’s complement, 7 bits
opsommingen (ook als gedefinieerd door gebruiker) codering kan verschillen van programma tot programma enum_encoding attribuut:attribute enum_encoding: string;attribute enum_encoding of FSM_states: type is "000 001 010 100 110";
expliciete codering van elke waarde:constant reset: bit_vector := "000"; …constant output: bit_vector := "110";
Vectoren van bovenstaande
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
SyntheseSyntheti-
seerbare VHDL
Verbeteren Naar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-122 06–07
H01L1
Enkele andere beperkingen
Toegelaten waarden std_logic: '1'/'H', '0'/'L', 'Z' 'Z' genereert een 3-state buffer
Y <= A when Enable else 'Z';
Geen initiële waarde voor signalen Enkel “for”-lussen toegelaten: om een lus te
kunnen ontvouwen moet # iteraties gekend zijn
Sequentiële schakelingen Flankgevoelige synchrone: enkel de twee vormen
die hierna besproken worden Ander gebruik van “wait” niet toegelaten!
Niveaugevoelige synchrone: minder gesupporteerd Asynchrone: niet gesupporteerd
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
SyntheseSyntheti-
seerbare VHDL
Verbeteren Naar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-123 06–07
H01L1 Combinatorische schakelingenmet registers aan de uitgangen
‘Wait until’ moet de eerste lijn van het proces zijn, gevolgd door de beschrijving van de combinatorische schakeling
1. Met een “wait until” uitdrukking
entity RegisteredCircuit is port (A,B,C,D: in std_logic; Clk: in std_logic; Z: out std_logic);end entity RegisteredCircuit;
architecture RTL of RegisteredCircuit isbegin process is begin wait until Clk='1'; -- combinatorische -- schakeling: Z <= (A and B) or (C and D); end process;end architecture RTL;
ZABCD
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
SyntheseSyntheti-
seerbare VHDL
Verbeteren Naar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-124 06–07
H01L1 Combinatorische schakelingenmet registers aan de uitgangen
2. Met een “event”-attribuut
entity RegisteredCircuit is port (A,B,C,D: in std_logic; Clk,Rst: in std_logic; Z: out std_logic);end entity RegisteredCircuit;
architecture RTL of RegisteredCircuit isbegin process (A,B,C,D,Clk,Rst) is begin if Rst = '1' then Z <= '0'; elsif (Clk'event and Clk='1') then -- combinatorial circuit Z <= (A and B) or (C and D); end if; end process;end architecture RTL;
if is de enige uitdrukking in het proces; er is ook geen
else
De test op ‘Clk'event’ is
altijd de laatste
ZABCD
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
SyntheseSyntheti-
seerbare VHDL
Verbeteren Naar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-125 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
Synthetiseerbare VHDL VHDL-synthese verbeterenVertaling naar een ASM-kaartSynthese-aspecten voor Xilinx
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
Synthese Syntheti-
seerbare VHDL
Verbeteren Naar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-126 06–07
H01L1
VHDL-synthese verbeteren
Code herschrijven kan het resultaat na synthese sterk beïnvloeden Een programma kan maar proberen te begrijpen wat met
de code bedoeld werd: wat is essentieel en wat is een gevolg van de schrijfstijl?
Mag hier een FF i.p.v. een latch gebruikt worden? Een programma kan zich niet bewust zijn van alle
mogelijke implementaties Wat is de meest optimale toestandscodering?
Een programma kan niet alle reële beperkingen in rekening brengen
Vermogen, grootte, fan-out, tijdsgedrag (slechts te schatten), …
De auteur kan verkeerde veronderstellingen maken i.v.m.de beschikbare hardware
Gebruik van een asynchrone set die niet aanwezig is De mogelijkheden van het syntheseprogramma en
de schrijfstijl bepalen het uiteindelijke resultaat!
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
Synthese Syntheti-
seerbare VHDL
Verbeteren Naar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-127 06–07
H01L1
Conditionele toekenningen
“if”-uitdrukking of toekenning van conditionele signalen heeft een ingebouwde prioriteit Y <= C when Sel[1]='1' else
B when Sel[0]='1' else A;
“case”-uitdrukking of toekenning van geselecteerde signalen resulteert meestal in eenvoudigere hardware with Sel select
Y <= A when "00", B when "01", C when others;
01
AB
C
Sel
01 Y
Y
00011011
AB
C
Sel
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
Synthese Syntheti-
seerbare VHDL
Verbeteren Naar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-128 06–07
H01L1
‘Resource sharing’
Originele code:if Sel = '1' then Z <= A + B;else Z <= A + C;end if;
Sommige programma’s kunnen dit (meestal slechts binnen een proces) omvormen totif Sel = '1' then X := B;else X := C;end if;Z <= A + X;
Anders moet je zelf de code herschrijven!
+ +
MUX
A C BA
Sel
Z
MUX
+
C B A
Sel
Z
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
Synthese Syntheti-
seerbare VHDL
Verbeteren Naar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-129 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
Synthetiseerbare VHDLVHDL-synthese verbeteren Vertaling naar een ASM-kaartSynthese-aspecten voor Xilinx
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
Synthese Syntheti-
seerbare VHDL
VerbeterenNaar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-130 06–07
H01L1
Vertaling naar een ASM-kaart
1 ASM-blok bevat alles van 1 toestand1 toestand = alles in een proces tussen
opeenvolgende “wait until”1 toestand bevat iets van alle processen
die in dezelfde klokcyclus actief zijn process begin
X <= A; if B > 0 then wait until Clk='1'; X <= A*B; end if; wait until Clk='1'; if X < 0 then X <= -X; end if; wait until Clk='1'; end process;
process begin wait until Clk='1'; Y <= C; end process;
X = A
X = A×B
X = −X
B > 0
X < 0
N
N
X = AY = C
X = A×BY = C
Y = C
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
Synthese Syntheti-
seerbare VHDL
VerbeterenNaar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-131 06–07
H01L1
Vertaling naar een ASM-kaart
ASM-variabele=een register=VHDL-variabele of een signaal,
waarvan de waarde langer dan 1 klokcyclus blijft
VHDL-variabele signaal: process begin
wait until Clk='1'; i := i + 1; if i = 3 then i := 0; end if; end process;
anders is het een tussenresultaat process begin
wait until Clk='1'; i := B + 5; i := 4*i; Uit <= A + i; end process;
process (x,y,j) begin j <= y + 5; o <= x*j; end process;
i = 0
i = 2
i = i + 1
N
o <= x*(y+5) Uit <= A+4*(B+5)
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
Synthese Syntheti-
seerbare VHDL
VerbeterenNaar ASM Xilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-132 06–07
H01L1 Taalgebaseerd hardware ontwerp: VHDL
Inleiding VHDL in vogelvlucht Elementen van de VHDL-taal Hardware-beschrijving met VHDL Hardware-simulatie met VHDL Hardware-synthese met VHDL
Synthetiseerbare VHDLVHDL-synthese verbeterenVertaling naar een ASM-kaart Synthese-aspecten voor Xilinx:
overdraagbaarheid performantie
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
Synthese Syntheti-
seerbare VHDL
Verbeteren Naar ASMXilinx
VHDL
KATHOLIEKE UNIVERSITEIT
7-133 06–07
H01L1
Xilinx-specifieke aspecten
Sommige beperkingen zijn gekend,andere zijn vast te leggen: Automatische synthese
van o.a. klokbuffers( fan-out)
Dikwijls is de defaultcodering one-hot omdatdit overeen komt metde CLB-structuur;de codering kan in VHDLook aangegeven wordenmet het attribuut enum_encoding
Extra componenten: Extra hardware (vermenigvuldiger, …) LogiCORE-modules, inclusief RAM I/O-buffer, eventueel met pull-up/down
weerstand
• Inleiding
• In vogelvlucht
• Taalelementen
• Hardware-beschrijving
• Simulatie
Synthese Syntheti-
seerbare VHDL
Verbeteren Naar ASMXilinx