Stap 5: Stap 5: Maak bovenste module
Volg de stap 4 tot en met een bovenste module toevoegen. Vervolgens moeten we definiëren in- en uitgangen die verbinding met de externe omgeving maken. De enige ingang is het uurwerk van Basys 3. Er zijn drie soorten productie-, enable_Dx-, cx- en dp. De enable_Dx is de macht om elk cijfer 7 segment display. Er zijn totaal 4 in Basys 3. We moeten echter slechts 3. De cx is de verbinding van het segment. In elk cijfer zijn er zeven segmenten van ca cg. De dp is het decimaalteken op het display. We hoeven niet te gebruiken dp in het project.
Ingang:
CLK / / master klok voor Basys 3
Uitgangen:
enable_D1, / / rechts meeste cijfers
enable_D2
enable_D3,
enable_D4, / / links de meeste cijfers
CA, cb, cc, cd, ce, cf, cg / / segment verbindingen
DP / / decimaalteken
We moeten ook de volgende variabelen instantiëren de klok scheidingslijn te bepalen hoe snel het cijfer wordt in- en uitschakelen. Ze zijn allemaal net variabelen.
clkout1; interne signaal voor de uitvoer van de verdeelde klok
clkout2; interne signaal voor de uitvoer van de verdeelde klok
clkOut; interne signaal voor de uitvoer van de verdeelde klok
Q0, Q1, Q2; interne signaal voor de uitvoer van de teller
draad n, o, p; interne signaal om te controleren de on / off van 3 cijfers
Dan, we de functie gate niveau controle op en af van het cijfer. Het cijfer is gemeenschappelijk anode. De FPGA-pin voor het cijfer is aangesloten als output terwijl een constante 3.3V als input in de LED wordt geleverd. Om te schakelen op de cijfers, moet we rijden de pin lage (actieve laag). U vindt de details op Basys 3 referentie-handleiding. Nooit gebruiken we links de meeste cijfers enable_D4, zodat we deze aan constante 1' b1 toewijzen. Vervolgens gebruiken we de en en niet gate functie voor het maken van het cijfer in- en uitschakelen op basis van de clk gegenereerd op basis van clkdivider
toewijzen van enable_D4 = 1' b1; uitschakelen van links de meeste cijfers die D4
en U1 (n, clkout2, clkout1); EN-poort gebruiken om te schakelen en uit de cijfers zo dat slechts één cijfer brandt op een moment
en U2 (o, clkout2, ~ clkout1); EN poort kunt inschakelen en uitschakelen het cijfer dus dat slechts één cijfer tegelijk op
en U3 (p, ~ clkout2, clkout1); EN poort kunt inschakelen en uitschakelen het cijfer dus dat slechts één cijfer tegelijk op
niet (enable_D1, n); n = clkout2 & clkout1, enable_D1 is laag (op) als zowel de clkout2 als de clkout1 hoog is
niet (enable_D2, o); o = clkout2 & ~ clkout1, enable_D2 is laag (op) als de clkouut2 hoog is en clkcout1 is laag
niet (enable_D3, p); p = ~ clkout2 & clkout1, enable_D3 is laag (op) als clkout2 laag is en clkout1 is hoog
Na dat besluiten we de logica voor de zeven segment in elk cijfer. Cx is hetzelfde als enable_Dx, en is een actieve laag signaal. We moeten dus, om te schakelen op het segment, de FPGA rijden naar laag. Hier zijn de tabellen van de waarheid voor de Qx (Q1, Q2, Q0) en de ca-cg (zie tabellen)
Uit de tabel van de waarheid, kunnen we de volgende conclusie
CB en cc zijn altijd 0
CG is altijd 1
CA-, cd-, ce- en cf hebben altijd dezelfde output
waarde van ca wordt geëvalueerd door Qx
Daarom kunnen we de volgende toewijzing. Voor, cb-cg, het is mooi stragightforward. Voor ca, we nest coniditional operator gebruiken om te evalueren van de enable_Dx om te bepalen van de output van de certificeringsinstantie. Als enable_D1 is ingeschakeld, wat betekent links de meeste cijfers (Q0) is ingeschakeld, van de waarheidstabel, ca zullen Q0. Anders moeten we de andere voorwaarde evalueren (enable_D2 brandt). Als enable_D2 ingeschakeld is, dan is ca gelijk aan Q2, enzovoort.
toewijzen van ca = (enable_D1 == 0)? Q0: ((enable_D2==0)? Q1: ((enable_D3==0)? Q2:1'b1)); Gebruik voorwaardelijke operator
toewijzen van cb = 1' b0; CB is altijd op
toewijzen van cc = 1' b0; CC is altijd op
cd toewijzen = ca; uitgang cd komt overeen met ca
toewijzen van ce = ca; CE-uitvoer komt overeen met ca
toewijzen van cf = ca; CF uitvoer komt overeen met ca
toewijzen van cg = 1' b1; Als we alleen moeten nul of één, dus cg is van alle tijden
toewijzen van dp = 1' b1; uitschakelen van de decimale komma
Tot slot moeten we instantiëren de module clkdivider en teller.
U vindt de code met commentaren in het projectbestand.