Indholdsfortegnelse:

Ti bit computer - VHDL: 4 trin
Ti bit computer - VHDL: 4 trin

Video: Ti bit computer - VHDL: 4 trin

Video: Ti bit computer - VHDL: 4 trin
Video: VHDL Code for 4 Bit Adder using 1 bit full adder component 2024, November
Anonim
Ti bit computer - VHDL
Ti bit computer - VHDL

Lavet af: Tyler Starr og Ezzeedden Gazali

Introduktion

Dette projekt blev afsluttet som en del af det afsluttende projekt for CPE 133 på Cal Poly SLO. Det er et fantastisk projekt for nogen, der ønsker at forstå, hvordan computere fungerer på deres laveste niveau, og hvordan de opnår deres opgaver. Projektet er modelleret efter den 8-bit SAP-computer, der er beskrevet i Albert Malvinos bog Digital Computer Electronics. Vi har dog øget computeren til 10-bit for at muliggøre implementering af flere op-koder (operationskoder). Brugeren kan programmere computeren til at udføre et sæt operationer ved at indtaste visse instruktioner.

System- og kredsløbsarkitektur:

Computeren er skrevet i VHDL og vil være indeholdt på Basys 3 -kortet fra Digilent. Inputene bliver kortlagt til kontakterne i bunden af kortet. To taktile kontakter bruges til nulstillings- og skrivefunktionerne. Outputtet vises på tavlens 7 segment display.

Computeren vil blive opdelt i mindre kredsløb (moduler), der håndterer forskellige operationer. Hvert modul vil blive forklaret detaljeret i de følgende trin.

Trin 1: Materialer

Materialer
Materialer

Alt hvad der kræves til dette projekt er Basys3 FPGA -kortet fra Digilent og et mikro -USB -kabel til at forbinde kortet til din computer.

Trin 2: Blokdiagram over kredsløbsmoduler

Blokdiagram over kredsløbsmoduler
Blokdiagram over kredsløbsmoduler
Blokdiagram over kredsløbsmoduler
Blokdiagram over kredsløbsmoduler
Blokdiagram over kredsløbsmoduler
Blokdiagram over kredsløbsmoduler

Blokdiagrammerne ovenfor viser de forskellige kredsløbsmoduler, der udgør 10-bit computeren. Nedenfor er beskrivelser for hver af de enkelte dele/moduler vist i diagrammerne ovenfor.

Programtæller

Beskrivelse af input: input er en 5 bit input til indlæsning af et tal i programtælleren. Cp når højt tælleren tæller med faldende urkanter. Clr nulstiller tælleren til 0. Ep når høj tælleren udsender det aktuelle antal. Sp når høj tælleren indstiller tællingen til antallet på input

  • Beskrivelse af output:

    output er en kopi af count til brug på LEDS 0-15. Count udsender det aktuelle antal.

  • Samlet sted i systemet: Denne tæller holder styr på den hukommelsesplacering, som programmet er i. Alle programmer starter på hukommelsesadressen 00000 (0) og går op til 11111 (31), medmindre der bruges et stop. I springudsagn fortsætter programtælleren fra den adresse, programmet hopper til.

Indtast MUX

  • Beskrivelse af indgange: Adresse tager input fra switch 11 til 15. MAR tager input fra 10 -bit -registret, der bruges som MAR. Programmet styrer, hvilket input der skal dirigeres til output.
  • Beskrivelse af output: output leder den valgte input til RAM.
  • Samlet sted i systemet: Denne MUX bestemmer, om adressen skal dirigeres fra switchene eller bussen til RAM'en. I programtilstand dirigeres adressen fra switchene, og i køremodus dirigeres adressen fra bussen.

ramMUX

  • Beskrivelse af input: userInput er input, som brugeren indtaster under programtilstanden. aRegInput er dataene i A -registret, disse bruges under en flytning. kontrol er markeringen for denne MUX.
  • Beskrivelse af output: output er 10-bit data input til RAM.
  • Samlet sted i systemet: Denne MUX udsender de 10-bit inputdata, der bruges i RAM-modulet. Når kontrolbitten er høj, udsender MUX de data, som brugeren indtastede i programtilstand. Når kontrolbitten er lav, udsender MUX dataene fra kontrolbussen.

ramModule

  • Beskrivelse af input: inputData er de data, der gemmes i RAM. inputAddress er det sted, hvor dataene gemmes. program angiver, om computeren er i program- eller kørselstilstand. readWrite angiver, om en læse- eller skriveoperation forekommer. notCE er kontrolbit for RAM -modulet. træk angiver, at en bevægelse udføres.
  • Beskrivelse af output: outputDataToBus er de data, der går fra RAM til bussen. outputData og output Address er de data og adresse, der går til instruktionsregistret.
  • Samlet sted i systemet: RAM'en giver mulighed for program- og datalagring i hukommelsen, før et program køres. Når programmet kører, modtager RAM en adresse fra MAR og sender dataene fra denne adresse til bussen.

adresseROM

  • Beskrivelse af input: opCode er input, der indeholder adressen på opcode, der udføres af computeren
  • Beskrivelse af udgange: opCodeStart er hukommelsesadressen, der angiver den første mikroinstruktionsplacering for den tilsvarende opCode.
  • Samlet sted i systemet: Dette modul tager den låste mikroinstruktion og sender den hukommelsesplacering, der svarer til starten af den mikroinstruktionssekvens.

ringTæller

  • Beskrivelse af indgange: reset sætter tælleren tilbage til 100000 (den første "T -tilstand"). Clk øger tælleren med en på en faldende urkant. NOP angiver, at den aktuelle tilstand/cyklus er en "ingen operation" -cyklus.
  • Beskrivelse af Outputs: count er output fra tælleren.
  • Samlet sted i systemet: Ringtælleren styrer den forudindstillelige tæller og afgrænser de seks mikro-trin i hver instruktionscyklus (T1-T6).

preCounter

  • Beskrivelse af input: opCodeStart er hukommelsesplaceringen for mikroinstruktionerne for opCode, der udføres. T1 nulstiller tælleren til 0, når den er høj. Når T3 er høj, indlæses opCodeStart, og tællingen fortsætter fra dette sted i de resterende 3 cyklusser (T4-T6). Clr sætter tælleren til 0. Clk øger tælleren med en på en faldende kant.
  • Beskrivelse af output: controlWordLocation udsender hukommelsesplaceringen for det kontrolord, der skal udføres.
  • Samlet sted i systemet: Hver op-kode har 3 mikroinstruktioner. Tælleren øges med 1 startende ved 0 for de første 3 cyklusser (hentecyklus). Tælleren udløses derefter af ringtælleren for at indlæse adressen på opCodeStart og øges med 1 for de resterende 3 cyklusser. På denne måde styrer forkontælleren sekvensen af mikroinstruktioner, der skal udføres.

kontrolROM

  • Beskrivelse af input: controlWordLocation er adressen på kontrolordet, som kontrolROM'en sender. NOP angiver, at placeringen er en "ingen operation" placering.
  • Beskrivelse af output: controlWord er kontrolordet, der gør det muligt for/deaktiverer de forskellige computermoduler at udføre en ønsket handling.
  • Samlet sted i systemet: Dette modul afkoder hukommelsesplaceringen fra forkontælleren og sender kontrolordet ud for den ønskede operation.

ALU

  • Beskrivelse af input: A og B er input fra register A og register B, som ALU udfører aritmetiske og logiske operationer på. Når subtraktion er aktiv, angiver det, at B trækkes fra A.
  • Beskrivelse af output: resultat er resultatet af tilføjelse af A og B eller fratrækning af B fra A. Outputene større end, mindre end og lige For at angive, om (AB eller A = B) og bruges i det betingede springmodul. fejl angiver et overløb eller underflow, når det er aktivt.
  • Samlet sted i systemet: ALU'en indeholder logikken for de aritmetiske og logiske operationer, der udføres af computeren. Dette modul kan tilføje og fratrække to 10-bit binære tal. ALU kan også afgøre, om A> B, A

betingetJmp

  • Descriptoin of Inputs: inputCount bruges til at låse det aktuelle antal. inputAddress bruges til at låse den adresse, der ville blive hoppet til. loadFromRegister når input med lav låseadresse. loadCount når lav låser inputCount. når outputEnable er lav, sættes output til adressen for at springe til.gT, iT og eQ bestemmer, hvilken tilstand der kontrolleres. greaterThan, lessThan og equalTo er input fra ALU'en, der angiver resultatet af sammenligningen mellem A og B. På den stigende urkant af Clk læses inputCount og inputAddress ind i registre.
  • Beskrivelse af udgange: outputJmp er den adresse, som programtælleren vil læse i.
  • Samlet sted i systemet: dette modul håndterer betingede og ikke-betingede spring til computeren. Baseret på input gT, iT og eQ bestemmer modulet, hvilken betingelse der skal kontrolleres for, og om denne betingelse er sand eller falsk. Hvis betingelsen er sand, udsender den adressen på instruktionen til at springe til, ellers udsender den tællingen af den næste instruktion.

binToBCD

  • Beskrivelse af input: nummer det 10 bit tal, der skal konverteres til binært kodet decimal.
  • Beskrivelse af output: hundredvis cifret på hundredvis af det binære tal. titrer cifret på tiernes sted i det binære tal. dem cifret i stedet for det binære tal.
  • Samlet sted i systemet: Dette modul konverterer 10 bit -nummeret fra outputregistret til BCD for at vores firecifrede displaydriver kan vise tallet i decimal på 7 -segmentdisplayet.

fourDigitDriver

  • Beskrivelse af indgange: tal er det 16 bit binære input, der drives til dekoderen. inClk er Basys boards interne ur og bruges til en urdeler. RST nulstiller uret, der bruges til at køre cifrene.
  • Beskrivelse af udgange: anode bestemmer, hvilket ciffersted der skal belyses. ciffer er inputnummeret til dekoderen.
  • Samlet sted i systemet: Dette modul driver dekoderen til at sende BCD -nummeret til displayet.

dekoder

  • Beskrivelse af input: inputNumber er det ciffer, der kommer fra driveren, og som vil blive afkodet.
  • Beskrivelse af output: katoder bestemmer hvilke katoder der skal tændes for at vise det ønskede ciffer.
  • Samlet sted i systemet: Dette modul afkoder det ciffer, der skal vises på 7 segmenters display.

fourDigitDisplay

  • Beskrivelse af input: nummer er det nummer, der skal vises på 7 segmenters display. fejl angiver, hvornår displayet skal vise "Err". Clk er urets signal, som displayet kører på. Dette signal skal være omkring 60 Hz, så displayet kan vise alle fire cifrede steder samtidigt.
  • Beskrivelse af udgange: anode bestemmer, hvilket ciffersted der er aktiveret. katode bestemmer hvilke katoder der aktiveres for at vise det ønskede ciffer.
  • Samlet sted i systemet: Dette modul viser et nummer på 7 segmenters display. Se Basys 3 -kortets betjeningsvejledning for oplysninger om, hvilke katoder og anoder der aktiveres for at bruge displayet. Når fejlbitten er høj, viser displayet "Err".

outputMUX

  • Beskrivelse af indgange: progModeInput bestemmer, hvilke lysdioder der tændes under programmeringstilstanden. runModeInput bestemmer, hvilke lysdioder der tændes under kørselstilstanden. modeSelect er vælg- eller kontrolbit for MUX.
  • Beskrivelse af udgange: ledOutput angiver, hvilke lysdioder der tændes.
  • Samlet sted i systemet: Afhængigt af den tilstand, computeren er i (program eller rom), tænder MUX forskellige lysdioder. I programtilstand (modeSelect er '0') tænder MUX LED'erne for at ligne den hukommelsesplacering, computeren er i, og hvad den indeholder. I driftstilstand (modeSelect er '1') bruges MUX til fejlfinding, men kan indstilles til at vise alt andet.

clockDivider

  • Beskrivelse af indgange: stop læser de fem MSB -bits fra bussen for at registrere en stopkommando ('11111') og stopper uret. inputClk er det interne ur -signal fra Basys 3 -kortet.
  • Beskrivelse af output: ouputClk er det nye ur, der er blevet bremset.
  • Samlet sted i systemet: Dette ur bruges til at bremse computeren for at gøre det muligt for brugeren at bestemme, hvad der foregår. Uret kan køre meget hurtigere, men det er i øjeblikket indstillet til 2 Hz.

triStateBuffer

  • Beskrivelse af input: Din er 5 -bit input, der går ind i bufferen. Ep er kontrolbit.
  • Beskrivelse af output: Dout er 5 -bit output fra bufferen
  • Samlet sted i systemet: Når kontrolbit Ep er aktiv, sender bufferen input. Når kontrolbitten ikke er aktiv, sender bufferen ikke noget ud.

tenBitDRegister

  • Beskrivelse af indgange: Dbus er den input, som registret skal. Clk gør det muligt for registret at indlæse data på en stigende urkant. ARST sætter registret til 0 asynkront. Når outputEnable er lavt, er registerets indhold output. Når readIn er lav, låser registret Dbus på den stigende urkant.
  • Beskrivelse af output: Qbus er output fra registret
  • Samlet sted i systemet: Registret bruges flere gange på hele computeren og bruges til at gemme oplysninger, når der udføres operationer.

fiveBitDRegister

  • Beskrivelse af indgange: Dbus er den input, som registret skal. Clk tillader registret at indlæse data på en stigende urkant. ARST sætter registret til 0 asynkront. Når outputEnable er lavt, er registerets indhold output. Når readIn er lav, låser registret Dbus på den stigende urkant.
  • Beskrivelse af output: Qbus er output fra registret.
  • Samlet sted i systemet: Registret bruges flere gange på hele computeren og bruges til at gemme oplysninger, når der udføres operationer.

Trin 3: Kode

Nedenfor er en mappe, der indeholder begrænsningen og kildefilerne til 10-bit computeren.

Trin 4: Demo og prøvekode

Videoen ovenfor viser, hvordan man programmerer 10-bit computeren på Basys 3 FPGA-kortet. En pdf med op-koder og et prøveprogram er også vedhæftet nedenfor.

Anbefalede: