PARALLELL OCH SEKVENTIELL DATABEHANDLING Innehåll Parallellism i VHDL Delta delays och Simuleringstid VHDLs simuleringscykel Aktivering av Processer Parallella och sekventiella uttryck 1
Controller PARALLELLISM I VHDL architecture name_arch of name is Deklarering av signaler begin Process 1 register Process 2 Process 3 ALU Process 4 Parallella utryck memory end name_arch; Alla moduler körs parallellt med varandra, så VHDL måste därför kunna beskriva parallelism 2
SIMULERA VHDL-KOD För varje in-vektor genereras en ut-vektor 010 11 011 00 VHDL beskrivning av funktionen 000 01 110 11 011 10 111 11 Stimuli till kretsen (input data) VHDL simulator Resultat från kretsen (output data) 3
SIMULERA SEKVENTIELLA HÄNDELSER Simuleringstid Den modellerade tiden för kretsen som har simulerats (inte den faktiska kör-tiden för simuleringen) Delta-delay Används internt i simulatorn för att köa händelser Om ett delta delay läggs till i simuleringen så ändras inte simuleringstiden. 4
SIMULERA SEKVENTIELLA HÄNDELSER Exempel: Vad är resultatet på utgången C? IN: 1 0 1 A B & C Anta att grindarna inte har några interna fördröjningar Sim. tid delta event 1 & Delta delays används för att serialisera händelser som sker vid samma simuleringstid 0 ns 1 IN: 1 0 Inv ett nytt värde för A beräknas 0 ns 0 ns 2 3 A: 0 1 Nand, And beräkna nya värden B: 1 0 C: 0 1 And beräkna ett nytt värde för C C tilldelas ett nytt värde vid simuleringstiden 0 eftersom grindarna inte har några fördröjningar. 0 ns 4 C: 1 0 Inga fler händelser 5
SIMULERINGSCYKEL FÖR EN VHDL SIMULATOR Schemalägg ändring av signaler i framtida simuleringstid Starta simulering resultat Simuleringen stoppas Om det inte finns några fler händelser Updatera signaler Kör processer Ändra signalvärden som har schemalagts att ske vid nuvarande simuleringstid stimuli Terminera simulering Bara processer som är känsliga för inputs som har ändrats kommer att aktiveras 6
SCHEMALÄGGNING AV SIGNALER Exempel #1, inga fördröjningar specificerade i koden Tid a, b, x Driver (output x) Kommentarer 0ns 1, 0, 0 (0, 0ns) (0, 0ns+ ) p2 körs (initiering) 0ns + 1, 0, 0 (0, 0ns+ ) 10ns 1, 1, 0 (1,10 ns + ) p2 körs (b ändras) 10ns+ 1, 1, 1 (1,10 ns + ) Vid t=0 antas att: a = 1 ; b = 0 ; x = 0 vid t=10 ns, b= 1 p2: process(a, b) begin x <= a and b; end process p2; a b x 0 5 10 15 20 7
SCHEMALÄGGNING AV SIGNALER Exempel #2, två parallella signaltilldelningar Tid a, b, x Driver (output x) Kommentarer 0ns 1, 0, 0 (0, 0ns) (1, 0ns+ ) p3 körs (initiering) 0ns + 1, 0, 1 (1, 0ns+ ) 10ns 1, 1, 1 (1,10ns)(1,10ns+ )(0,10ns+ ) p3 körs (b ändras) 10ns+ 1, 1, 0 (0,10 ns + ) Vid t=0 antas att:: a = 1 ; b = 0 ; x = 0 vid t=10 ns, b= 1 p3: process(a, b) a begin x <= 1 ; b if b = 1 then x <= 0 ; x end if; end process p3; 0 5 10 15 20 8
EX: VHDL-KOD FÖR 3-INPUT AND Exempel #3, 3-input AND-grind x = a(2) a(1) a(0) and3: process(a) begin x <= 1 ; for i in 2 downto 0 loop x <= a(i) and x; end loop; end process p3; Det nya värdet för x schemaläggs till en tidpunkt efter att for-loopen har körts X är alltid 0 i for-loopen X <= a(i) and 0 x = 0 Tid a 2,a 1,a 0,x Driver (output x) Kommentarer 0ns 1,1,1,0 (0,0ns) (1,0ns+ ) (0,0ns+ ) (0,0ns+ ) (0,0ns+ ) and3 körs (initialization) 0ns + 1,1,1,0 (0, 0ns+ ) Signaltilldelningar är parallella händelser Det fungerar inte!! 9
EX: VHDL-KOD FÖR 3-INPUT AND 3-input AND använd variabler and3: process(a) variable temp: bit; begin temp := 1 ; for i in 2 downto 0 loop temp := a(i) and temp; end loop; end process p3; Variabeltilldelning sker omedelbart, utan att schemalägga händelser i framtiden Genom att använda variabler blir koden sekventiell där uttryckens ordning spelar roll Variabler kan endast användas i processer Det fungerar!! 10
PROCESSER En process är ett sekventiellt program. I en architecture kan flera processer köras parallellt. Kommunikation mellan processer sker via signaler. Syntax: [<process_name>:] process [(sensitivity list>)] [<declarations in the process>] begin <sequential statements> end process [<process_name>]; 11
AKTIVERING AV PROCESSER En process aktiveras när: -En signal i dess sensitivity list ändras, eller -En signal i dess waitstatement ändras Active/executing En process termineras när: -end process nås -wait-statement nås Waiting process(a, b, cin) begin s <= a xor b xor cin; end process; Aktiveras om a, b eller cin ändras process begin s <= a xor b xor cin; wait on a,b,cin end process; Går till wait-läge 12
SEKVENTIELLA UTTRYCK Sekventiella uttryck finns bara i processer Sekventiella uttryck Deras ordning i koden spelar roll Är inte relaterade till sekventiella kretsar (tillståndsmaskiner) Några sekventiella uttryck är: IF-THEN-ELSE CASE-WHEN 13
IF-THEN-ELSE Kör det första uttryck som följer ett sant villkor Inga andra uttryck körs label: if cond1 then statement1; elsif cond2 then statement2; else statement3; end if; -- not mandatory - not mandatory section -- not mandatory section 14
BOOLESKA UTTRYCK MED IF-THEN En följd av villkor realiserar en boolesk funktion process (x, y, z, a, b) begin if x = 1 then f <= a; elsif y = 1 then f <= b; elsif z = 1 then f <= c; else f <= d; end if; end process; f = xa + x yb + x y zc + x y z d 15
LOGISKA UTTRYCK MED IF-THEN-ELSE Exempel: process (xbus) begin if xbus = "111" then doitnow <= 1 ; else doitnow <= 0 ; end if; end process; 16
FELAKTIGT ANVÄNDANDE AV IF-THEN Exempel: process (xbus) begin if xbus = "111" then doitnow <= 1 ; end if; end process; -- en vippa introduceras D-LATCH Ingenting i koden sätter utgången till 0 D Q doitnow Xbus(2) Xbus(1) C Xbus(0) 17
CASE-WHEN UTTRYCK Kör endast en sektion som följs av ett sant uttryck eller av OTHERS Alternativen måste vara inbördes exklusiva Alla möjliga val måste anges Resulterar i en multiplexer-baserad struktur label: case selector_expression is when choice1 => statement1; when choice2 => statement2; when choice3 choice4 choice5 => statement3; when OTHERS => statement4; end case; 18
CASE-WHEN EXEMPEL 2:1 Multiplexer case sel is when 0 => z <= a; when 1 => z <= b; end case; 2:1 MUX a z b sel 19
PARALLELLA UTTRYCK Parallella uttryck finns på architecture-nivå Parallella uttryck Deras inbördes ordning i koden spelar ingen roll Resulterar i ett event (signal-tilldelning) i framtida simuleringstid Några parallella uttryck är: With-select-when When-else 20
WITH-SELECT-WHEN Kallas selected signal assignment Parallellt uttryck känsligt för och opererar på signaler Väljer ett av flera värden att driva signalen Valet (selection) baseras på alla möjliga värden (values) för ett uttryck with expression select outsignal <= value1 when val1, value2 when val2,... value9 when val9; 21
RESULTAT FRÅN WITH- SELECT-WHEN with expression select outsignal <= value1 when val1, value2 when val2,... value9 when val9; multiplexer value1 value2 outsignal value9 val1 val9 22
EXEMPEL PÅ ANVÄNDNING AV WITH-SELECT-WHEN add sub -- 2-to-1 multiplexer with addsub select opcode <= add when 0, sub when 1 ; addsub opcode with (a & b) select out <= "1011" when "00" "11--" when "1Z", x OR y when "11", "0000" when others; Logiska uttryck är tillåtna others är standardvalet om inget av de angivna valen är sanna with min_integer select outvec <= X"1F" when 35, X"27" when 2 TO 5, X"FF" when OTHERS; Ett intervall av värden kan specificeras 23
WHEN-ELSE Kallas även conditional signal assignment Parallellt uttryck känsligt för och opererar på signaler Väljer ett av flera värden att driva signalen Valet baseras på det första villkor som är sant outsignal <= value1 when cond1 else value2 when cond2 else... value9; 24
EXEMPEL PÅ ANVÄNDNING AV WHEN-ELSE opcode <= add when (addsub = 0 ) else sub when (addsub = 1 ) else nop; out <= "1011" when (a = 0 ) else "11--" when (b = 0 ) else x OR y when (a AND b) = 1 else "0000"; -- 4-to-2 priority encoder outcode <= "11" when in3 = 1 else "10" when in2 = 1 else "01" when in1 = 1 else "00" when in0 = 1 else "00"; 25
SLUT PÅ FÖRELÄSNING 9 Innehåll Parallellism i VHDL Delta delays och Simuleringstid VHDLs simuleringscykel Aktivering av Processer Parallella och sekventiella uttryck 26