Innholdsfortegnelse:

Grunnleggende stoppeklokke ved bruk av VHDL og Basys3 Board: 9 trinn
Grunnleggende stoppeklokke ved bruk av VHDL og Basys3 Board: 9 trinn

Video: Grunnleggende stoppeklokke ved bruk av VHDL og Basys3 Board: 9 trinn

Video: Grunnleggende stoppeklokke ved bruk av VHDL og Basys3 Board: 9 trinn
Video: 3 Grunnleggende bruk av motorsag 2024, November
Anonim
Image
Image

Velkommen til instruksjonene om hvordan du bygger en stoppeklokke ved hjelp av grunnleggende VHDL og Basys 3 -kort. Vi gleder oss til å dele prosjektet vårt med deg! Dette var et siste prosjekt for kurset CPE 133 (Digital Design) på Cal Poly, SLO høsten 2016. Prosjektet vi bygde er et enkelt stoppeklokke som starter, tilbakestiller og stopper tiden. Den tar inn tre trykknapper på Basys3-kortet som innganger, og tiden vises på brettets firesifrede syvsegmentdisplay. Forløpt tid vises i et sekund: centisekunder -format. Den bruker brettets systemklokke som en inngang for å holde oversikt over tiden som har gått og sender ut tiden til de fire sifrene i displayet med syv segmenter.

Trinn 1: Materialer

Angi innganger og utganger
Angi innganger og utganger

Materialene du trenger for dette prosjektet:

  • 1 datamaskin med Vivado Design Suite WebPack installert fra Xilinx (foretrekker versjon 2016.2)
  • 1 Digilent Basys3 Xilinx Artix-7 FPGA-brett
  • 1 USB -portkabel

Trinn 2: Angi innganger og utganger

Figuren ovenfor viser et blokkdiagram på toppnivå for stoppeklokke -modulen. Stoppeklokken tar inn innganger "CLK" (klokke), "S1" (startknapp), "S2" (pause-knapp) og "RST" (tilbakestill) og har en 4-bits utgang "Anoder", en 7-bit output "segment" og en single-bit output "DP" (desimaltegn). Når inngangen "S1" er høy, begynner stoppeklokken å telle tid. Når "S2" er lav, stopper stoppeklokken tiden. Når "RST" er høy, stopper stoppeklokken og tilbakestiller tiden. Det er fire delmoduler i kretsen: klokkeavdeleren, siffertelleren, sju-segment skjermdriveren og sju-segment displaykoderen. Stoppeklokkens hovedmodul kobler alle delmodulene sammen og til innganger og utganger.

Trinn 3: Lag klokker

Å lage klokker
Å lage klokker

Klokkedelermodulen tar inn en systemklokke og bruker en divisorinngang for å lage en klokke med hvilken som helst hastighet som ikke er større enn systemklokken. Stoppeklokken bruker to forskjellige klokkemoduler, en som lager en 500 Hz klokke og en annen som lager en 100 Hz klokke. Skjematisk for klokkeavdeleren er vist i figuren ovenfor. Klokkedeleren tar inn en enkeltbit-inngang "CLK", og en 32-biters inngang "Divisor" og enkeltbit-utgangen "CLKOUT". "CLK" er systemklokken og "CLKOUT" er den resulterende klokken. Modulen inkluderer også en NOT -port, som bytter signal "CLKTOG" når tellingen når verdien til divisoren.

Trinn 4: Teller til ti

Teller til ti
Teller til ti

Siffertelleren teller hvert siffer fra 0 til 10 og oppretter en annen klokke for at det neste sifferet skal fungere ut av det som svinger når tellingen når 10. Modulen tar inn 3 enkeltbits innganger "S", "RST" og "CLK "og resulterer i en enkeltbits utgang" N "og en 4-bits utgang" D ". Inngang "S" er aktivering i inngang. Klokken slås på når "S" er høyt og av når "S" er lavt. "RST" er tilbakestillingsinngangen, så klokken tilbakestilles når "RST" er høy. "CLK" er klokkeinngangen for siffertelleren. "N" er klokkeutgangen som blir inngangsklokken for det neste sifferet. Utdata "D" presenterer den binære verdien til sifferet telleren er på.

Trinn 5: Vis tall

Viser tall
Viser tall

Den syv-segmenters visningskoder vil kode det binære nummeret som mottas fra sju-segmenters skjermdrivermodul og gjøre det til en strøm av biter som vil bli tolket som '1' eller '0' verdier for hvert segment av skjermen. Det binære tallet mottas av modulen som 4-biters inngang "siffer" og resulterer i 7-biters utgang "segmenter". Modulen består av en enkelt saksprosessblokk som tilordner en spesifikk 7-biters strøm for hver mulig inngangsverdi fra 0 til 9. Hver bit i syv-bits strømmer representerer et av de syv segmentene av sifrene på displayet. Rekkefølgen på segmentene i strømmen er "abcdefg" med '0'er som representerer segmentene som lyser opp for det gitte tallet.

Trinn 6: Slik viser du stoppeklokken

Slik viser du stoppeklokken
Slik viser du stoppeklokken

I sju-segment skjermdrivermodulen er det fire 4-bits innganger "D0", "D1", "D2" og "D3", som hver representerer de fire sifrene som skal vises. Inngang "CLK" er klokkeinngangen til systemet. En-biters utgang "DP" representerer desimaltegnet på syv-segmentet. 4-bits utgangen "Anoder" bestemmer hvilket siffer på syv-segmentet som vises og 4-biters utgang "temp" avhenger av tilstanden til 2-biters kontrollinngang "SEL". Modulen bruker 4 multiplexere for kontrollinngangen "SEL" og de tre utgangene; "Anoder", "temp" og "DP".

Trinn 7: Ta alt sammen

En "hvis" -prosessblokk som går ut av 500Hz -klokken, brukes til å lage start- og pause -knappene. Deretter kobler du alle delmodulene sammen i stoppeklokke -hovedmodulen ved å deklarere komponentene i hver enkelt delmodul og bruke forskjellige signaler. Sifferundermodulene tar inn klokkeutgangen til den forrige sifferundermodulen, mens den første tar inn 100Hz -klokken. "D" -utgangene til sifferundermodulene blir deretter "D" -inngangene til sju segmenters skjermdrivermodul. Og til slutt blir "temp" -utgangen til sju segmenters skjermdrivermodul "temp" -inngangen til sju segment encoder modulen.

Trinn 8: Begrensninger

Begrensninger
Begrensninger

Bruk 3 trykknapper (W19, T17 og U18) for innganger "RST", "S1" og "S2". W19 er tilbakestillingsknappen, T17 er startknappen (S1), og U18 er pauseknappen (S2). En begrensning for klokkeinngang er også nødvendig ved bruk av port W5. Husk også å legge denne linjen til klokkebegrensningen:

create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {CLK}]

Koble også anodene og segmentene til brettet, slik at stoppeklokken vises på displayet med syv segmenter som vist i begrensningsfilen.

Trinn 9: Testing

Testing
Testing

Sørg for at enheten din fungerer ved å leke med de tre knappene: Trykk og hold dem i hver mulig rekkefølge for å finne mulige problemer med koden din.

Anbefalt: