Upload
jock
View
88
Download
1
Embed Size (px)
DESCRIPTION
Synthese is het geautomatiseerd compileren van VHDL beschrijving van een ontwerp naar poorten en libraries. Technische Specificatie. VHDL Synthese. Gedragsbeschrijving in VHDL. gedrags synthese. RTL beschrijving in VHDL. RTL synthese. Combinatorische logica in VHDL. Implement - PowerPoint PPT Presentation
Citation preview
HAN-University
VHDL SyntheseSynthese is het geautomatiseerd compileren van VHDL
beschrijving van een ontwerp naar poorten en libraries.
Technische
Specificatie
Gedragsbeschrijving
in VHDL
RTL beschrijving
in VHDL
Combinatorische logica
in VHDL
Implement
design
RTL
synthese
gedrags
synthese
HAN-University 2
Genereren van een netlist met Synthesize – XSTNa design entry en eventuele simulatie kan met Xilinx Synthesis Technology (XST) kan een Xilinx specifieke netlist gegenereerd worden, NGC. The NGC file is een netlist die logische ontwerp data en randvoorwaarden bevat. Deze file is een Xilinx vervanger de algemene EDIF and NCF files.
HAN-University 3
Wat is wel/niet synthetiseerbaar?
• Verschillende producenten hun SW-tool en marktaandeel (2010):
Producent/organisatie Naam van het systeem
Altera Quartus
Xilinx ISE
Lattice Semiconductor Lattice Diamond
Actel Libero IDE
Cypress PSoC designer/creater/programmer
1. Afwijkingen op grensgebieden: bv beschrijving geheugenelement.
2. Producten zijn nog steeds in ontwikkeling → grote verschillen tussen tools.
3. VHDL is geschreven voor documentatie en verificatie.
HAN-University 4
Wat is wel/niet synthetiseerbaar
In het algemeen:
Heb je een idee hoe de hardware er uit zou kunnen zien?Ja → dan is het synthetiseerbaar.Nee → valt de code soms onder een van de volgende
categorieën:
1. Expliciet opgegeven vertragingstijden2. initialisatie van variabelen en signalen3. event-driven simulatiemodel4. meerdere wait statements5. datatypen6. sommige rekenkundige bewerkingen
HAN-University 5
1 Expliciet opgegeven vertragingstijden: AFTER clausule a <= b AFTER 10ns; wordt a <= b; dus
transport en inertial delay wordt in de netlist terug gebracht tot delta delay beschrijvingen.
Wat doet synthese met de onderstaande code?
ENTITY puls10ns IS
PORT (input : in std_logic;
output : out std_logic);
END ENTITY puls10ns;
ARCHITECTURE met_inertial_delay OF puls10ns IS
SIGNAL S1, S2: std_logic;
BEGIN
S1 <= input AFTER 15ns;
S2 <= input AFTER 25ns;
Output <= S1 XOR S2;
END met_inertial_delay;
exorOF
1 OF..
HAN-University 6
2 Initialisatie van signalen en variabelen:
Hoe synthetiseren de volgende statements?signal s1 : std_logic := ’0’;
signal s4 : std_logic_vector(3 DOWNTO 0) := “0101”;
Hoe kunnen we dit oplossen?
Toevoegen van een SET of PRESET aan een schakeling:
HAN-University 7
3 Effecten van het timingmodel:
Wat doet synthese met de volgende code?ARCHITECTURE xor_arch OF xor_entity IS
SIGNAL s, x, y : bit;
BEGIN
s <= input;
x <= s;
PROCESS(input)
variable v : bit;
BEGIN
v := input;
y <= v;
END PROCESS;
Output <= x XOR y;
END xor_entity;
Bij de synthese wordt NIET naar delta delays gekeken
1
ip S V X Y op
1 1 1 1 1 0
0 1 0 1 1 0
0 0 0 1 0 0
0 0 0 0 0 1
0 0 0 0 0 0
HAN-University 8
4 Wait statements
*beschrijft een toestandsmachine met flankgevoeligheid.
WAIT UNTIL clk =’1’;(IF ….….)
Wait statement argument Synthetiseerbaar Opmerk.
WAIT FOR tijd NEE Tijdsvertraging is niet synthetiseerbaar
WAIT UNTIL boolean Beperkt Alleen als Boole-aanse uitdrukking*
WAIT ON (a,b) signal NEE/JA Kan wel maar vaak niet toegestaan
WAIT - NEE Gebruikt bij initialiseren van signalen
PROCESS( a,b) Signal list JA
PROCESS
BEGIN
WAIT UNTIL t = ‘1’;
s1 <= ‘0’;
WAIT UNTIL t = ‘0’;
c2 <= ‘1’;
WAIT UNTIL t = ‘1’;
c2 <= ‘0’;
WAIT UNTIL t = ‘0’;
s1 <= ‘1’;
END PROCESS;
Dit is een een process dat op de opgaande en neergaande flank actief zou moeten zijn?
HAN-University 9
5 Beschrijvingen die vaak niet synthetiseerbaar zijn: Datatypen: zoals bit en integer zijn synthetiseerbaar in tegenstelling tot std_logic. (U, X, 0, 1, Z,
W, L, H, -)
Welke waarden zijn synthetiseerbaar?
• 0, 1 en Z
Welke worden al don’t care opgevat?
• U, X, -
VHDL is streng getypeerd en kent tussen deze types een groot aantal conversiefuncties:
• To_bitvector: Std_logic_vector omzetten naar een bit_vector.
• Typen die voor simulatie handig zijn moeten vaak voor synthese geconverteerd worden naar synthetiseerbare typen
Bijvoorbeeld: ARCHITECTURE optel_arch OF optel IS
SIGNAL s1, s2, s3, s4, s5: bit_vector(7 downto 0);
SIGNAL int1, int2, int3, int4: integer;
BEGIN
s4 <= s1 + s2; -- gebruik de + functie van
bitvectoren
int4 <= int1 + int2; -- gebruik standaard + functie van integer
s5 <= int3 + s3; -- foutmelding
END optel_arch;
HAN-University 10
Packagestandaard std_logic_1164 numeric unsigned
Datatype bitbit_vectorintegernaturalboolean
std_ulogicstd_ulogic_vectorstd_logicstd_logic_vector
signed_vector signedunsigned
Bewerking
logischebewerkingensythetiseerbaar
andornandnornotxor
andornandnornotxorxnor
andornandnornotxorxnor
relationelebewerkingen Synthese afh.van type:IF x < “10X-LZ”
<<==/=>=>&
<<==/=>=>&
<<==/=>=>&
<<==/=>=>&
6 Overzichtslijstje van libs wel/niet synthetiseerbaar:
HAN-University 11
6 Overzichtslijstje van libs wel/niet synthetiseerbaar:
Package standaard std_logic_1164
rekenkundigebewerkingen
+-*/ alleenmod door 2rem
+-*/ alleenmod door 2remshlshrextendsign_extend
+-*/ alleenmod door 2remshlshrextend
Niet Synthetiseerbaar
file io, pointers, recursie
HAN-University 12
Synthetiseren tot een combinatorisch of sequentieel proces
• Combinatorisch proces: logica zonder klok en reset.• Sequentieel proces: geheugenelementen met klok en reset.
Merk op: met sequentieel in VHDL proces statement wordt wat anders bedoeld: toekenningen in een proces worden achtereenvolgens uitgevoerd.
• Combinatorisch proces.
• Synthetiseren tot een combinatorisch of sequentieel proces.
• Sequentiele schakeling met (a)synchrone reset.
• Sequentiele schakeling en sensetivitylist.
• Meer conditionele processen.
• Concurrent signal assignments.
• ELSE – clausule
HAN-University 13
Wanneer combinatorisch/sequentieel?
Wat is het verschil tussen een combinatorisch of sequentieel proces?
• Combinatorisch proces: logica zonder klok en reset• Sequentieel proces: geheugenelementen met klok en reset
Merk op: met sequentieel in VHDL proces statement wordt wat anders bedoeld: toekenningen in een proces worden achtereenvolgens uitgevoerd.
comb: PROCESS(c,a)
BEGIN
IF c=’1’ THEN
z <= a + ‘1’;
ELSE
z <= a – ‘1’;
END IF;
END PROCESS;
warning_comb1: PROCESS(c)
BEGIN
IF c=’1’ THEN
z <= a + ‘1’;
ELSE
z <= a – ‘1’;
END IF;
END PROCESS
warning_comb2: PROCESS(c,a)
BEGIN
IF c=’1’ THEN
z <= a + ‘1’;
END IF;
END PROCESS;
Vuistregel: een combinatorisch proces:
1. moet een sensitivitylist hebben die alle ingangssignalen van het proces bevat.
2. elk signaal/variabele moet een waarde krijgen langs elke mogelijke weg.
Fout_comb1: process wordt alleen uitgevoerd als c verandert, suggereert dat c een klok is!!
Fout_comb2: else clause ontbreekt, z moet bewaard worden.
HAN-University 14
Wanneer levert een sequentieel proces een Flipflop of een
Latch? seq_1: PROCESS(c)
BEGIN
IF c=’1’ THEN
z <= a + ‘1’;
END IF;
END PROCESS;
seq_2: PROCESS(c)
BEGIN
IF c’EVENT AND c=’1’ THEN
z <= a + ‘1’;
END IF;
END PROCESS;
seq_3: PROCESS(c,a)
BEGIN
IF c’EVENT AND c=’1’ THEN
z <= a + ‘1’;
END IF;
END PROCESS;
seq_4: PROCESS(c,a)
BEGIN
IF c=’1’ THEN
z <= a + ‘1’;
END IF;
END PROCESS;
seq_1: alleen als c veranderd, impliciet opgaande flank
seq_2: alleen als c veranderd, expliciet opgaande flank
seq_3: alleen als c veranderd, want verandering in a heeft geen effect
seq_4: als c en a veranderen wordt het proces doorlopen
HAN-University 15
OPDRACHT: Geef aan van onderstaande schakelingen wat synthese oplevert: FF/Latch/combinatorisch en reset type: synchroon/asynchroon?
opdr_1: PROCESS(c,r)
BEGIN
IF r=’1’ THEN
z <= ‘1’;
ELSIF c’EVENT AND c=’1’ THEN
z <= a;
END IF;
END PROCESS;
opdr_2: PROCESS(c,r)
BEGIN
IF r=’1’ THEN
z <= ‘1’;
ELSIF c=’1’ THEN
z <= a;
END IF;
END PROCESS;
opdr_3: PROCESS(c)
BEGIN
IF r=’1’ THEN
z <= ‘1’;
ELSIF c’EVENT AND c=’1’ THEN
z <= a;
END IF;
END PROCESS;
opdr_4: PROCESS(c,r,a)
BEGIN
IF r=’1’ THEN
z <= ‘0’;
ELSIF c=’1’ THEN
z <= a;
END IF;
END PROCESS;
opdr_1: Sequentiële schakeling van D flip-flops met asynchrone reset. Correct synthetiseerbaar
opdr_2: Sequentiële schakeling die latches suggereert (c=’1’), maar ingang a staat niet in de sensitivity list
opdr_3: Sequentiële schakeling die Flipflops suggereert (Event attribute op c) waarvan de asynchrone reset geen effect heeft omdat deze niet in de sensitivitylist staat.
opdr_4: Sequentiële schakeling met latches, als c en a veranderen wordt het proces doorlopen. Correct synthetiseerbaar
HAN-University 16
Geef aan van onderstaande schakelingen wat synthese oplevert: FF/Latch/combinatorisch en reset type: synchroon/asynchroon?
opdr_5: PROCESS(c)
BEGIN
IF c’EVENT AND c=’1’ THEN
IF r=’1’ THEN
z <= ‘0’;
ELSE
z <= a;
END IF;
END IF;
END PROCESS;
opdr_6: PROCESS(c,r,a)
BEGIN
IF c=’1’ THEN
IF r=’1’ THEN
z <= “00’’;
ELSE
z <= a + ‘1’;
END IF;
END IF;
END PROCESS;
opdr_7: PROCESS(c,r)
BEGIN
IF c’EVENT AND c=’1’ THEN
IF r=’1’ THEN
z <= “00’’;
ELSE
z <= a + ‘1’;
END IF;
END IF;
END PROCESS;
syn_1: Correct synthetiseerbaar; Levert een sequentiële schakeling van flip-flops met een synchrone reset, waarbij het proces actief word op een verandering in c en dus is de conditie c=’1’ al voldoende.
syn_2: Correct synthetiseerbaar; Levert een sequentiële schakeling met latches en geen synchrone reset omdat r en a in de sensitivitylist voorkomen.
Syn_3: Correct synthetiseerbaar; Levert een sequentiële schakeling van flip-flops met een synchrone reset, omdat een asyncrone actie van ingang r wordt tegengehouden door de eerste IF statement en zo op c gesynchroniseerd.
HAN-University 17
OPDRACHT:Met welke van de voorgaande schakelingen zijn onderstaande sequentiële processen zonder sensitivity list vergelijkbaar?
wait_1: Correct synthetiseerbaar; Is equivalent met de schakeling(en):
wait_2: Correct synthetiseerbaar; Is equivalent met de schakeling(en):
wait_1: PROCESS
BEGIN
WAIT UNTIL c=’1’;
z <= a + ‘1’;
END PROCESS;
wait_2: PROCESS
BEGIN
WAIT UNTIL c=’1’;
IF r=’1’ THEN
z <= “00’’;
ELSE
z <= a + ‘1’;
END IF;
END PROCESS;
Als een proces geen sensitivitylist heeft moet het minimaal een WAIT-statement hebben. Als het ook synthetiseerbaar moet zijn dan mag dit er maar 1 zijn en moet dit het eerste statement in het PROCESS-statement zijn.