Innholdsfortegnelse:

Ti -bits datamaskin - VHDL: 4 trinn
Ti -bits datamaskin - VHDL: 4 trinn

Video: Ti -bits datamaskin - VHDL: 4 trinn

Video: Ti -bits datamaskin - VHDL: 4 trinn
Video: Как смонтировать файлы образа диска ISO в Windows 10 2024, Juli
Anonim
Ti -bits datamaskin - VHDL
Ti -bits datamaskin - VHDL

Laget av: Tyler Starr og Ezzeedden Gazali

Introduksjon

Dette prosjektet ble fullført som en del av sluttprosjektet for CPE 133 på Cal Poly SLO. Det er et flott prosjekt for noen som ønsker å forstå hvordan datamaskiner fungerer på sitt laveste nivå og hvordan de oppnår sine oppgaver. Prosjektet er modellert etter den 8-biters SAP-datamaskinen beskrevet i Albert Malvinos bok Digital Computer Electronics. Imidlertid har vi økt datamaskinen til 10-bits for å tillate implementering av flere op-koder (operasjonskoder). Brukeren kan programmere datamaskinen til å utføre et sett med operasjoner ved å legge inn visse instruksjoner.

System- og kretsarkitektur:

Datamaskinen er skrevet i VHDL og vil bli funnet på Basys 3 -kortet fra Digilent. Inngangene blir kartlagt til bryterne på bunnen av brettet. To taktile brytere vil bli brukt for tilbakestillings- og skrivefunksjonene. Utgangen vil bli vist på brettets 7 -segmenters display.

Datamaskinen vil bli delt opp i mindre kretser (moduler) som håndterer forskjellige operasjoner. Hver modul vil bli forklart i detalj i de følgende trinnene.

Trinn 1: Materialer

Materialer
Materialer

Alt som trengs for dette prosjektet er Basys3 FPGA -kortet fra Digilent og en mikro -USB -kabel for å koble kortet til datamaskinen.

Trinn 2: Blokkediagram over kretsmoduler

Blokkediagram over kretsmoduler
Blokkediagram over kretsmoduler
Blokkediagram over kretsmoduler
Blokkediagram over kretsmoduler
Blokkediagram over kretsmoduler
Blokkediagram over kretsmoduler

Blokkediagrammene ovenfor viser de forskjellige kretsmodulene som utgjør 10-bits datamaskinen. Nedenfor er beskrivelser for hver enkelt del/modul vist i diagrammene ovenfor.

Programteller

Beskrivelse av innganger: inngang er en 5 -bits inngang for å laste et tall inn i programtelleren. Cp når høyt telleren teller på fallende urkanter. Clr tilbakestiller telleren til 0. Ep når høy telleren sender ut gjeldende telling. Sp når høy telleren setter tellingen til tallet på input

  • Beskrivelse av utganger:

    output er en kopi av tellingen for bruk på LEDS 0-15. Count sender ut gjeldende telling.

  • Samlet plassering i systemet: Denne telleren holder oversikt over minnelokasjonen som programmet er i. Alle programmene starter på minneadressen 00000 (0) og går opp til 11111 (31), med mindre det blir stoppet. I hoppsetninger fortsetter programtelleren å telle fra adressen som programmet hopper til.

Inngang MUX

  • Beskrivelse av innganger: Adressen tar inngangen fra brytere 11 til 15. MAR tar inngangen fra 10 -biters registeret som brukes som en MAR. Programmet styrer hvilken inngang som skal rutes til utdata.
  • Beskrivelse av utganger: utgang ruter den valgte inngangen til RAM.
  • Samlet plass i systemet: Denne MUX bestemmer om adressen skal dirigeres fra bryterne eller bussen til RAM. I programmodus dirigeres adressen fra bryterne, og i kjøremodus dirigeres adressen fra bussen.

ramMUX

  • Beskrivelse av innganger: userInput er inngangen som brukeren angir under programmodus. aRegInput er dataene i A -registeret, dette brukes under en flytting. kontroll er valg for denne MUX.
  • Beskrivelse av utganger: utgang er 10-biters datainngang til RAM.
  • Samlet plass i systemet: Denne MUX sender ut 10-biters inngangsdata som brukes i RAM-modulen. Når kontrollbiten er høy, sender MUX ut dataene som brukeren skrev inn i programmodus. Når kontrollbiten er lav, sender MUX ut dataene på kontrollbussen.

ramModule

  • Beskrivelse av innganger: inputData er dataene som lagres i RAM. inputAddress er stedet der dataene lagres. program angir om datamaskinen er i program- eller kjøremodus. readWrite angir om en lese- eller skriveoperasjon forekommer. notCE er kontrollbiten for RAM -modulen. trekk indikerer at en bevegelsesoperasjon utføres.
  • Beskrivelse av utganger: outputDataToBus er dataene som går fra RAM til bussen. outputData og output Address er dataene og adressen som går til instruksjonsregisteret.
  • Samlet plass i systemet: RAM -en tillater program- og datalagring i minnet før et program kjøres. Når programmet kjører, mottar RAM -en en adresse fra MAR og sender ut dataene på den adressen til bussen.

adresseROM

  • Beskrivelse av innganger: opCode er inngangen som inneholder adressen til opkoden som blir utført av datamaskinen
  • Beskrivelse av utganger: opCodeStart er minneadressen som angir den første mikroinstruksjonsplasseringen til den korresponderende opCode.
  • Samlet plass i systemet: Denne modulen tar den låste mikroinstruksjonen og sender ut minneplassen som tilsvarer starten på den mikroinstruksjonssekvensen.

ringteller

  • Beskrivelse av innganger: reset setter telleren tilbake til 100000 (den første "T -tilstanden"). Clk øker telleren med en på en fallende klokkekant. NOP indikerer at gjeldende tilstand/syklus er en "ingen drift" -syklus.
  • Beskrivelse av utganger: tellingen er utgangen til telleren.
  • Samlet plass i systemet: Ringtelleren styrer den forhåndsinnstillbare telleren og avgrenser de seks mikro-trinnene i hver instruksjonssyklus (T1-T6).

preCounter

  • Beskrivelse av innganger: opCodeStart er minnestedet for mikroinstruksjonene for opCode som utføres. T1 tilbakestiller telleren til 0 når den er høy. Når T3 er høy, lastes opCodeStart og antallet fortsetter fra dette stedet for de resterende 3 syklusene (T4-T6). Clr setter telleren til 0. Clk øker telleren med en på en fallende kant.
  • Beskrivelse av utganger: controlWordLocation sender ut minneplassen til kontrollordet som skal kjøres.
  • Samlet plass i systemet: Hver op-kode har 3 mikroinstruksjoner. Telleren øker med 1 som starter ved 0 for de tre første syklusene (hentesyklus). Telleren utløses deretter av ringetelleren for å laste adressen på opCodeStart og øke med 1 for de resterende 3 syklusene. På denne måten styrer forhåndskontrolløren sekvensen av mikroinstruksjoner som skal utføres.

kontrollROM

  • Beskrivelse av innganger: controlWordLocation er adressen til kontrollordet som kontrollROM -en sender ut. NOP indikerer at stedet er et "ingen bruk" -sted.
  • Beskrivelse av utganger: controlWord er kontrollordet som muliggjør/deaktiverer de forskjellige datamaskinmodulene for å utføre en ønsket operasjon.
  • Totalt sted i systemet: Denne modulen dekoder minnelokasjonen fra forkontrollen og sender ut kontrollordet for ønsket operasjon.

ALU

  • Beskrivelse av innganger: A og B er inngangene fra register A og register B som ALU utfører aritmetiske og logiske operasjoner på. Når subtrakten er aktiv, indikerer det at B blir trukket fra A.
  • Beskrivelse av utganger: resultatet er resultatet av å legge til A og B, eller trekke B fra A. Utgangene større enn, mindre enn og like For å indikere om (AB eller A = B) og brukes i den betingede hoppmodulen. feil indikerer et overløp eller underflyt når det er aktivt.
  • Totalt sted i systemet: ALU inneholder logikken for regning og logikkoperasjoner utført av datamaskinen. Denne modulen kan legge til og trekke fra to 10-biters binære tall. ALU kan også bestemme om A> B, A

betingetJmp

  • Descriptoin of Inputs: inputCount brukes til å låse gjeldende telling. inputAddress brukes til å låse adressen som det vil bli hoppet til. loadFromRegister når lave låser inputAddress. loadCount når lave låser inputCount. når outputEnable er lav, settes utgangen til adressen for å hoppe til.gT, iT og eQ bestemme hvilken tilstand som sjekkes. greaterThan, lessThan og equalTo er inngangene fra ALU som indikerer resultatet av sammenligningen mellom A og B. På den stigende klokkekanten til Clk leses inputCount og inputAddress inn i registre.
  • Beskrivelse av utganger: outputJmp er adressen som programtelleren vil lese inn.
  • Samlet plass i systemet: denne modulen håndterer betingede og ikke-betingede hopp for datamaskinen. Basert på inngangene gT, iT og eQ, bestemmer modulen hvilken tilstand som skal kontrolleres for og om denne tilstanden er sann eller usann. Hvis betingelsen er sann, vil den sende ut adressen til instruksjonen for å hoppe til, ellers sender den ut tellingen av den neste instruksjonen.

binToBCD

  • Beskrivelse av innganger: nummer 10 biters tall som skal konverteres til binær kodet desimal.
  • Beskrivelse av utganger: hundrevis sifferet på hundrevis av det binære tallet. tier sifferet på ti -plassen til det binære tallet. de sifferet på stedet for det binære tallet.
  • Samlet plass i systemet: Denne modulen konverterer 10 -biters nummeret fra utgangsregisteret til BCD for at vår firesifrede skjermdriver skal vise tallet i desimal på 7 -segmenters display.

fourDigitDriver

  • Beskrivelse av innganger: nummer er den 16 -biters binære inngangen som drives til dekoderen. inClk er Basys boards interne klokke og brukes til en klokkeskille. RST tilbakestiller klokken som ble brukt til å kjøre sifrene.
  • Beskrivelse av utganger: anode bestemmer hvilket siffersted som skal belyses. sifferet er inndatanummeret til dekoderen.
  • Samlet plass i systemet: Denne modulen driver dekoderen til å sende ut BCD -nummeret til displayet.

dekoder

  • Beskrivelse av innganger: inputNumber er sifferet som kommer fra driveren og som vil bli avkodet.
  • Beskrivelse av utganger: katoder bestemmer hvilke katoder som skal slås på for å vise ønsket siffer.
  • Samlet plass i systemet: Denne modulen dekoder sifferet som skal vises på 7 -segmentet.

fourDigitDisplay

  • Beskrivelse av innganger: tall er tallet som skal vises på 7 -segmenters display. feil angir når displayet skal vise "Err". Clk er klokkesignalet som displayet kjører på. Dette signalet må være rundt 60 Hz, slik at displayet kan vise alle 4 -sifrede steder samtidig.
  • Beskrivelse av utganger: anode bestemmer hvilket siffersted som er aktivert. katode bestemmer hvilke katoder som aktiveres for å vise ønsket siffer.
  • Samlet plass i systemet: Denne modulen viser et tall på 7 -segmenters display. Se bruksanvisningen til Basys 3 -kortet for informasjon om hvilke katoder og anoder som aktiveres for bruk av displayet. Når feilbiten er høy, viser displayet "Err".

outputMUX

  • Beskrivelse av innganger: progModeInput bestemmer hvilke lysdioder som slås på under programmeringsmodus. runModeInput bestemmer hvilke lysdioder som slås på under kjøremodus. modeSelect er velg eller kontrollbit for MUX.
  • Beskrivelse av utganger: led Utgang angir hvilke lysdioder som skal slås på.
  • Totalt sted i systemet: Avhengig av hvilken modus datamaskinen er i (program eller rom), vil MUX slå på forskjellige lysdioder. I programmodus (modus Velg er '0'), slår MUX på lysdioder for å ligne minnestedet som datamaskinen er i og hva den inneholder. I kjøremodus (modeSelect er '1'), brukes MUX for feilsøking, men kan settes til å vise alt annet.

clockDivider

  • Beskrivelse av innganger: stopp leser de fem MSB -bitene fra bussen for å oppdage en stopp -kommando ('11111') og stopper klokken. inputClk er det interne klokkesignalet til Basys 3 -kortet.
  • Beskrivelse av utganger: ouputClk er den nye klokken som har blitt bremset.
  • Total plass i systemet: Denne klokken brukes til å bremse datamaskinen for å gjøre det mulig for brukeren å bestemme hva som skjer. Klokken kan gå mye raskere, men den er for øyeblikket satt til 2 Hz.

triStateBuffer

  • Beskrivelse av innganger: Din er 5 -biters inngang som går inn i bufferen. Ep er kontrollbiten.
  • Beskrivelse av utganger: Dout er 5 -biters utdata fra bufferen
  • Samlet plass i systemet: Når kontrollbiten Ep er aktiv, sender bufferen ut inngangen. Når kontrollbiten ikke er aktiv, sender bufferen ikke ut noe.

tenBitDRegister

  • Beskrivelse av innganger: Dbus er inngangen som registeret skal. Clk lar registeret lese inn data på en stigende klokkekant. ARST setter registeret til 0 asynkront. Når outputEnable er lav, er innholdet i registeret utdata. Når readIn er lav, låser registret Dbus på den stigende klokkekanten.
  • Beskrivelse av utganger: Qbus er registerets utgang
  • Samlet plass i systemet: Registeret brukes flere ganger på datamaskinen og brukes til å lagre informasjon når du utfører operasjoner.

fiveBitDRegister

  • Beskrivelse av innganger: Dbus er inngangen som registeret skal. Clk lar registeret lese inn data på en stigende klokkekant. ARST setter registeret til 0 asynkront. Når outputEnable er lav, er innholdet i registeret utdata. Når readIn er lav, låser registret Dbus på den stigende klokkekanten.
  • Beskrivelse av utganger: Qbus er registerets utgang.
  • Samlet plass i systemet: Registeret brukes flere ganger på datamaskinen og brukes til å lagre informasjon når du utfører operasjoner.

Trinn 3: Kode

Nedenfor er en mappe som inneholder begrensningen og kildefilene for 10-biters datamaskin.

Trinn 4: Demo og prøvekode

Videoen ovenfor viser hvordan du programmerer 10-biters datamaskin på Basys 3 FPGA-kortet. En pdf som inneholder op-kodene og et eksempelprogram er også vedlagt nedenfor.

Anbefalt: