INF3430/4431 VHDL byggeblokker og testbenker forts.
Innhold Kombinatoriske kretser forts. Concurrent(dataflow) beskrivelser Beskrivelser ved bruk av process Testbenker for kombinatoriske kretser Stimuli Sammenligning rtl/postsyntese model Sekvensielle byggeklosser D-flip-flop Shiftregistre Linear Feedback shiftregistre (LFSR) Testbenker for sekvensielle kretser Timing sjekker Set-up og holde-tids sjekk Asymmetrisk klokke Random pulse generator Side 2
Dekodere (sim/synth) Side 3
Dekodere (sim/synth) Side 4
Shift operatorer Shiftoperatorene er i utgangspunktet definert for typen bit_vector Dersom man skal definere de for andre typer må det lages såkalte overload - operatorer. Overload vil si at det eksisterer en operator med sammen navn, men som er skrevet for en annen datatype. sll srl 0' 0' sla sra rol ror Side 5
Shift operatorer Standard bibliotekene definerer ikke shiftoperatorer for std_logic_vector Standard syntesebiblioteket numeric_std IEEE1076.3 definerer to datatyper som er subtyper av std_logic: Unsigned Signed For disse eksiterer det shiftoperatorer (overload) Side 6
N to 2 N Dekoder (sim/synth) Eksemplet nedenfor er et eksempel på en generisk N til 2 N dekoder Er samtidig et eksempel på den strenge typesjekkingen i VHDL typekonverteringsfunksjoner Side 7
Prioritetsenkoder (sim/synth) A3 A2 A1 A0 Y1 Y0 Valid 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 0 1-0 1 1 0 1 - - 1 0 1 1 - - - 1 1 1 Side 8
Prioritetsenkoder (forts) (sim/synth) Side 9
Prioritetsenkoder (forts) (sim/synth) Fornuftig med bruk av default -verdier i en process Gjør bare endring der det er nødvendig Side 10
Generisk prioritetsenkoder (sim/synth) RANGE attributtet ~ 2**n-1 downto 0 Side 11
Prioritetsenkoder Testbench Eksemplet nedenfor lager stimuli til kombinatorisk funksjon uavhengig av antall bit Attributtet x high gir det høyeste bitnummeret til vektoren x og x low det laveste bitnummeret HIGH attributtet ~ høyeste bitnummer LOW attributtet ~ laveste bitnummer Side 12
Paritetstester (sim/synth) Like/odde paritet 1 dersom like/odde antall enere i ord Benyttes for å detektere feil i dataoverføringer 50% dekningsgrad Bruk av range attributet er et alternativ til (n-1 downto 0). Side 13
D-latch/D-flip-flop (sim/synth) Funksjonene rising_edge og falling_edge fra IEEE1164 gir sann (0->1, 1->0) flankedeteksjon If CLK event and CLK= 1 then reagerer på alle overganger til 1 for eksempel U->1. Synteseverktøy tolker ovenstående uttrykk korrekt. NB!! En ufullstendig if then else setning vil syntetiseres til en latch (implied memory) NB!! Side 14
D-flip-flop (sim/synth) Side 15
Set-up/holde tid Innganger må være stabile en viss tid før (set-up tid) og etter (holde-tid) klokkeflanken ellers risikerer man at utgangen går til en metastabil tilstand (verken null eller en). Utgangen vil returnere til 0 eller 1 etter å ha vært i den metastabile tilstanden, men det er usikkert til hvilke. Dvs. systemet er ikke deterministisk lenger. t s t h t s t h t s t h Side 16
Timing og logikksjekk (sim) Stable attributtet kan benyttes for å sjekke set-up og holde-tider Returner TRUE dersom signal har vært stabilt >= tid angitt som inputparameter Plassering av assert i entitet betyr at sjekking blir foretatt for alle arkitekturer tilhørende denne entiteten Side 17
Shiftregister (sim/synth) Side 18
Linear feedback shiftregisters (LFSR) Lages ved å Xor re enkeltbit som kobles tilbake til MSB Tilsynelatende tilfeldig tellesekvens Har kallenavn Pseudo-random generator siden tellesekvensen ser tilfeldig ut. Kan vises at det ikke trengs mer enn tre Xor gates til å lage en random sekvens Enkelte kombinasjoner er bedre (tapper) Benyttes mye i testing av kommunikasjonslinjer og busser Benyttes i forbindelse med kryptering Set Clock n-1 Startverdi (seed) n-2 Pseudo random output 2 1 0 Taps Side 19
Klokkegenerator (sim) Asymmetrisk lav og høy tid (dutycycle) Side 20
Klokke med jitter (sim) Side 21