IE1205 Digital Design: F8: Minneselement: Latchar och Vippor. Räknare
Sekvensiella System a(t) f(a(t)) Ett sekvensiellt system har ett inbyggt minne - utsignalen beror därför BÅDE av insignalens NUVARANDE och FÖREGÅENDE värde(n) Föreläsning 8 - Föreläsning 13 2
Sekvensmaskiner Alla system i naturen har (ofta) ett dynamiskt beteende och förändrar sig ständigt, ibland med återkommande mönster... Att bygga digitala system förutsätter att vi kan beskriva dynamiska beteenden, dvs att beräkna, behandla och skapa sekvenser... 3
Exempel: Stoppknapp i buss S Stannar R - Om någon av stoppknapparna trycks in skall STANNAR skylten tändas. Skylten skall vara tänd även när knappen släpps. Vi behöver en krets med minne - När chauffören stannar vid hållplats kan han släcka skylten.
Rep: DeMorgan S Stannar R - Om alla knapparna inte är intryckta skall STANNAR skylten inte tändas. Skylten skall vara tänd även när knappen släpps. Vi behöver en krets med minne - När chauffören stannar vid hållplats kan han släcka skylten.
Hur får vi hårdvara att minnas? 1 0 0 1 Två återkopplade inverterare har stabila tillstånd
Hur får vi hårdvara att minnas? Hur kan vi sätta värdet? S A B NAND grind A B 0 0 1 0 1 1 1 0 1 1 1 0 Om A ingången är 0 blir utgången 1 Om A ingången är 1 blir B ingången inverterad, värdet behålls Byt ut ena inverteraren mot en NAND grind
Hur får vi hårdvara att minnas? S R Byt ut båda inverterarna för att kunna sätta och återställa (Set and Reset)
SR-Latchen (NAND-grindar) SR-latchen har aktiv låga SET och RESET ingånger SET och RESET ska inte vara aktiva samtidigt! Förbjudet läge S S R 0 0 1 1 R Kort återkoppling (~1T) 0 1 1 0 1 0 0 1 1 1 M M Characteristic table 9
SR-latchen (NOR-grindar) SR-latchen kan även implementeras med NOR-grindar Skillnaden mot förra implementeringen är att SET och RESET är aktiv höga R a S R a b 0 0 0/1 1/0 (no change) 0 1 0 1 1 0 1 0 S b 1 1 0 0 (a) Circuit (b) Characteristic table 10
Hur får vi hårdvara att minnas? Ett sätt är att lagra information i form av en laddning på en kapacitans (DRAM). 11
Hur får vi hårdvara att minnas? Select D 0 - M 1 D D D 1 0 Select Om vi återkopplar och kopplar utgången f till en av ingångarna så kommer Muxen att få ett nytt värde när den andra ingången selekteras (Select=1), och behålla detta värde när återkopplingen selekteras (Select=0) 12
Latchen (den återkopplade Muxen) Ex: stoppknapp på tidtagarur MUX Latch f 1 f 0 1 0 f D D Select Enable D Enable D 0 - M Enable Lång återkoppling (~4T) 1 D D 13
Konstruktion av Klockad Latch För att säkerställa att tillståndet bara kan ändras vid vissa tidpunkter används en speciell clocksignal Latch Ingångar CLK Set/Reset Decoder SET RESET SR- Latch 14
Gated SR-Latch Stoppknapparna kan stängas av om det blir stökigt på bussen S Clk R Förbjudet läge Clk S R 1 0 0 M M 1 0 1 0 1 1 1 0 1 0 1 1 1 1 1 0 - - M M 15
Gated D-Latch D Clk Clk D 1 0 0 1 1 1 1 0 0 - M M 16
Setup- & Hold-time D måste vara stabil inom detta område för att garantera funktionen D t hold t setup Clk t clk-to- 17
Hur skapar vi en sekvens? En sekvens får vi om vi tar ett värde och sedan bestämmer nästa värde utifrån nuvarande värde. Ex: 0,1,0,1, nästa värde = NOT (nuvarande värde) Om vi återkopplar nuvarande värde, behandlar det (inverterar) och därigenom skapar nästa värde samt kommer ihåg det tills nästa värde skall beräknas 18
Sekvensmaskiner (forts.) Latch D D Clk Problem!!! Om CLK är 1 för länge så snurrar värdena bara runt med en period av T latch +T incr 19
Instabila kretsar Exempel ringoscillator
D-vippan (eng. Flip-flop) D Clk Master D Slave Clk D 0 0 1 1 1 0 D Inverterar-ring på clk anger negativ flank. 1 - M M 0 - M M - M M D-vippa Lösning: Koppla två D-latchar efter varandra! D 21
Tidsdiagram Master-Slave Master Slave D D m D s Clock Clk Clk Clock D m = s 22
Flank-triggad D-vippa Flank-triggad: Låser värdet då klockan ändras i viss riktning (tex 0 till 1) Clk D Clock D 23
Vippor med Clear och Preset ingång Det är viktigt för konstruktionen av en sekvenskrets att man kan sätta vippor i ett förbestämt läge Preset: Sätt vippan till 1 Clear: Sätt vippan till 0 24
Asynkron Reset En asynkron reset (clear) betyder att vippan ändra tillståndet till 0 omedelbart när reset är aktiv 25
Synkron Reset En synkron reset orsaker att vippan går till läge 0 vid nästa klockflank Synkron reset implementeras med extra logik 26
På vilket värde startar sekvensen? Set D Asynkron reset Reset Clk Reset Vippan kan ett- (Set=1) eller nollställas (Reset=1) vid behov. Synkron reset Reset Clk 27
Andra vanliga typer av vippor JK-vippa (av Jack Kilby - Nobelpriset 2000) J K T-vippa (T=Toggle) Clk J K 0 0 M M 0 1 0 1 1 0 1 0 1 1 Toggle Toggle T Clk T 0 M M 1 Toggle Toggle 28
Konstruktion av nya vippor Man kan konstruera nya vippor baserad på en existerande typ Ingångar Adaptionslogik Existerande vippa 29
Konstruktion av T-vippan mha D-vippan Man kan konstruera nya vippor baserad på en existerande typ 30
Timing Analysis Det är möjligt att kunna bestämma den maximala frekvensen i en sekvensiell krets genom att ha information om Grindfördröjningar t logic Setup-tid t su för vippan Hold-tid t h för vippan Clock-to-utgång t c tiden 31
Setup- & Hold-time D måste vara stabil inom detta område för att garantera funktionen D t hold t setup Clk t clk-to- 32
Vad är den maximala frekvensen? Grindfördröjningar t logic = t NOT = 1.1 ns Setup-tid t su = 0.6 ns Hold-tid t h = 0.4 ns Clock-to-utgång t c = 1.0 ns T = t su + t c + t logic = 2.7 ns F = 1/T = 370 MHz 33
Shiftregister En shiftregister innehåller flera vippor För varje klockcykel skiftar man in ett värde från vänster till höger Många konstruktioner använder shiftregister och värden 4,, 1 som ingångsvärden till andra komponenter 34
Exempel shift-register Clk Data Problem: I ett experiment skulle ett flertal kontrollsignaler konfigureras. (Enable, frekvens, ström etc.) Endast ett fåtal ben fanns tillgängliga i kretsen Lösning: Ett skiftregister möjliggör seriell konfigurering med enbart två ben
Vanliga typer av Shift-register Parallel-In/Parallel-Out (PIPO) Parallel-In/Serial-Out (PISO) Serial-In/Parallel-Out (SIPO) Serial-In/Serial-Out (SISO) Användningsområden Köer, tex First-In/First-Out (FIFO) Mönsterigenkänning (eng. Pattern recognizers)
Asynkron räknare Man kan realisera räknare mha vippor Nedanstående exempel visa en asynkron räknare Några klockingångar är kopplade till -utgångarna från föregående vippa 37
Asynkron räknare 38
Synkron räknare I en synkron räknare är vippornas klockingångar kopplade till samma klocksignal 39
Synkron räknare 40
Vad är den maximala frekvensen? Den kritiska vägen bestämmer den maximala frekvensen! Här är den längsta kombinatoriska vägen från 0 via två AND-grindar till ingången av vippan som beräknar 3 t logic motsvarar alltså fördröjningen av två NANDgrindar 41
Exempel asynkron och synkron reset Exempel: Modulo 6 räknare
En D-latch i VHDL ENTITY D_Latch IS PORT(en : IN std_logic; d : IN std_logic; q : OUT std_logic); END ENTITY D_Latch; D Latch D ARCHITECTURE RTL OF D_Latch IS BEGIN PROCESS(en, d) BEGIN IF en = '1' THEN q <= d; END IF; END PROCESS; END ARCHITECTURE RTL; Enable Enable D 0 - M 1 D D 43
VHDL kodning Latchar och Vippor kodas som processer (som del av arkitekturen): Latch: process(d,en) begin if (En= 1 ) then <=D; end if; end process; Latchar anses generellt vara dåliga ur syntes-synpunkt eftersom de inte alltid är testbara (pga ev asynkrona återkopplingar). 44
VHDL kodning (forts.) Latchar och Vippor kodas som processer: Vippa: process(clk) begin if rising_edge(clk) then <=D; end if; end process; Vippa: Signal-attribut process(clk) begin if clk event and clk= 1 then <=D; end if; end process; Endast EN flank är tillåten inom en och samma process Rising_edge behövs om signalen är av typen std_logic 45
Asynkron resp. Synkron reset Reset har prioritet över Clk-signalen, dvs reset sker asynkront. Clk-signalen har prioritet över Reset-signalen, dvs reset sker synkront. async: process(clk,reset) begin if (reset= 1 ) then <= 0 ; elsif rising_edge(clk) then <=D; end if; end process; Sync: process(clk) begin if rising_edge(clk) then if (reset= 1 ) then <= 0 ; else <=D; end if; end if; end process; 46
Räknare Räknare och andra sekvensmaskiner kodas också med processer: bcd: process(clk) begin if rising_edge(clk) then if (count=9) then count<=0; else count<=count+1; end if; end if; end process; 47
Register Räknare och andra sekvensmaskiner kodas också med processer: reg: process(clk) begin if rising_edge(clk) then if (ld= 1 ) then <=D; end if; end if; end process; Typen anger hur många bitar som flyttas över 48
SR-latchen (NOR-grindar) SR-latchen kan även implementeras med NOR-grindar Skillnaden mot förra implementeringen är att SET och RESET är aktiv höga R a S R a b 0 0 0/1 1/0 (no change) 0 1 0 1 1 0 1 0 S b 1 1 0 0 (a) Circuit (b) Truth table 49
Simulering av SR-latchen (BV Figur 7.5 - sida 384) Ibland kan vippor låsa sig (pga metastabilitet mer om det i F12): latch: SR_latch port map (S=>S,R=>R, =>, =>_inv); S R A M S<=not(S) after 10 ns; R<=not(R) after 20 ns; Om SR-latchen är uppbyggd av NOR-grindar så oscillerar kretsen efter 40 ns med denna insignal-kombination (om fördröjningen är exakt lika i båda NOR-grindar). B M 50
Summering vippor Basic latch (SR) Gated latch Gated SR latch Gated D latch Flip-Flop Edge triggered flip-flop Master slave flip-flop Med och utan reset Andra vippor JK vippa T vippa