133
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

Inhoudstafel

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