Download de presentatie
De presentatie wordt gedownload. Even geduld aub
1
Combinatorische logica
VHDL Synthese Synthese is het geautomatiseerd compileren van VHDL beschrijving van een ontwerp naar poorten en libraries. Technische Specificatie Gedragsbeschrijving in VHDL gedrags synthese RTL beschrijving in VHDL RTL synthese Combinatorische logica in VHDL Implement design
2
Genereren van een netlist met Synthesize – XST
Na 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.
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.
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 vertragingstijden 2. initialisatie van variabelen en signalen 3. event-driven simulatiemodel 4. meerdere wait statements 5. datatypen 6. sommige rekenkundige bewerkingen
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; exor OF 1 OF..
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:
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; v := input; y <= v; END PROCESS; Output <= x XOR y; END xor_entity; ip S V X Y op 1 1 Bij de synthese wordt NIET naar delta delays gekeken
8
4 Wait statements 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 - 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’; c2 <= ‘0’; s1 <= ‘1’; END PROCESS; Dit is een een process dat op de opgaande en neergaande flank actief zou moeten zijn? *beschrijft een toestandsmachine met flankgevoeligheid. WAIT UNTIL clk =’1’; (IF …. ….)
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;
10
6 Overzichtslijstje van libs wel/niet synthetiseerbaar:
Package standaard std_logic_1164 numeric unsigned Datatype bit bit_vector integer natural boolean std_ulogic std_ulogic_vector std_logic std_logic_vector signed_vector signed Bewerking logische bewerkingen sythetiseerbaar and or nand nor not xor xnor relationele Synthese afh. van type: IF x < “10X-LZ” < <= = /= >= > &
11
6 Overzichtslijstje van libs wel/niet synthetiseerbaar:
Package standaard std_logic_1164 rekenkundige bewerkingen + - * / alleen mod door 2 rem shl shr extend sign_extend / alleen mod door 2 Niet Synthetiseerbaar file io, pointers, recursie
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
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; Fout_comb1: process wordt alleen uitgevoerd als c verandert, suggereert dat c een klok is!! Fout_comb2: else clause ontbreekt, z moet bewaard worden. 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.
14
Wanneer levert een sequentieel proces een Flipflop of een Latch?
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: PROCESS(c) 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
15
OPDRACHT: Geef aan van onderstaande schakelingen wat synthese oplevert: FF/Latch/combinatorisch en reset type: synchroon/asynchroon? opdr_4: PROCESS(c,r,a) BEGIN IF r=’1’ THEN z <= ‘0’; 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_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_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
16
Geef aan van onderstaande schakelingen wat synthese oplevert: FF/Latch/combinatorisch en reset type: synchroon/asynchroon? 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 PROCESS; opdr_5: PROCESS(c) BEGIN IF c’EVENT AND c=’1’ THEN IF r=’1’ THEN z <= ‘0’; ELSE z <= a; 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 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.
17
wait_1: Correct synthetiseerbaar; Is equivalent met de schakeling(en):
OPDRACHT:Met welke van de voorgaande schakelingen zijn onderstaande sequentiële processen zonder sensitivity list vergelijkbaar? 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. wait_1: PROCESS BEGIN WAIT UNTIL c=’1’; z <= a + ‘1’; END PROCESS; wait_1: Correct synthetiseerbaar; Is equivalent met de schakeling(en): wait_2: Correct synthetiseerbaar; Is equivalent met de schakeling(en):
Verwante presentaties
© 2024 SlidePlayer.nl Inc.
All rights reserved.