Innehållsförteckning:

Tiobitars dator - VHDL: 4 steg
Tiobitars dator - VHDL: 4 steg

Video: Tiobitars dator - VHDL: 4 steg

Video: Tiobitars dator - VHDL: 4 steg
Video: Go 3 Vs X3 Vs DJI Action 3 real life use in LONDON - See which is best for you 2024, November
Anonim
Tiobitars dator - VHDL
Tiobitars dator - VHDL

Gjord av: Tyler Starr och Ezzeedden Gazali

Introduktion

Detta projekt slutfördes som en del av slutprojektet för CPE 133 på Cal Poly SLO. Det är ett bra projekt för någon som vill förstå hur datorer fungerar på sin lägsta nivå och hur de uppnår sina uppgifter. Projektet är modellerat efter den 8-bitars SAP-dator som beskrivs i Albert Malvinos bok Digital Computer Electronics. Vi har dock ökat datorn till 10-bitar för att möjliggöra implementering av fler op-koder (operationskoder). Användaren kan programmera datorn för att utföra en uppsättning operationer genom att mata in vissa instruktioner.

System- och kretsarkitektur:

Datorn är skriven i VHDL och kommer att finnas på Basys 3 -kortet från Digilent. Ingångarna kommer att mappas till switcharna på undersidan av kortet. Två taktila omkopplare kommer att användas för funktionerna Återställ och Skriv. Utmatningen kommer att visas på kortets 7 -segmentskärm.

Datorn kommer att brytas ner i mindre kretsar (moduler) som hanterar olika operationer. Varje modul kommer att förklaras i detalj i följande steg.

Steg 1: Material

Material
Material

Allt som behövs för detta projekt är Basys3 FPGA -kortet från Digilent och en mikro -USB -kabel för att ansluta kortet till din dator.

Steg 2: Blockdiagram över kretsmoduler

Blockdiagram över kretsmoduler
Blockdiagram över kretsmoduler
Blockdiagram över kretsmoduler
Blockdiagram över kretsmoduler
Blockdiagram över kretsmoduler
Blockdiagram över kretsmoduler

Blockdiagrammen ovan visar de olika kretsmodulerna som utgör 10-bitars datorn. Nedan finns beskrivningar för var och en av de enskilda delarna/modulerna som visas i diagrammen ovan.

Programräknare

Beskrivning av ingångar: ingång är en 5 bitars ingång för att ladda ett nummer i programräknaren. Cp när hög räknas räknaren på fallande klockkanter. Clr återställer räknaren till 0. Ep när hög räknaren matar ut det aktuella antalet. Sp när hög räknaren ställer in räkningen till antalet på ingången

  • Beskrivning av utgångar:

    utmatning är en kopia av räkningen för användning på lysdioder 0-15. Count matar ut det aktuella antalet.

  • Övergripande plats i systemet: Denna räknare håller reda på minnesplatsen som programmet finns i. Alla program börjar vid minnesadressen 00000 (0) och går upp till 11111 (31), om inte stopp används. I hopputtalanden fortsätter programräknaren att räkna från adressen som programmet hoppar till.

Ingång MUX

  • Beskrivning av ingångar: Adress tar input från switcharna 11 till 15. MAR tar input från 10 bitars registret som används som en MAR. Programmet styr vilken ingång som ska vägas till utgång.
  • Beskrivning av utgångar: utgång leder den valda ingången till RAM -minnet.
  • Övergripande plats i systemet: Denna MUX avgör om adressen ska dirigeras från switcharna eller bussen till RAM -minnet. I programläge dirigeras adressen från omkopplarna och i körläge dirigeras adressen från bussen.

ramMUX

  • Beskrivning av ingångar: userInput är den ingång som användaren anger under programläget. aRegInput är data som finns i A -registret, detta används under en flyttning. kontroll är valet för denna MUX.
  • Beskrivning av utgångar: utmatning är 10-bitars datainmatning till RAM-minnet.
  • Total plats i systemet: Denna MUX matar ut 10-bitars ingångsdata som används i RAM-modulen. När styrbiten är hög matar MUX ut data som användaren angav i programläge. När styrbiten är låg matar MUX ut data från styrbussen.

ramModule

  • Beskrivning av ingångar: inputData är data som lagras i RAM -minnet. inputAddress är platsen där data lagras. program indikerar om datorn är i program- eller körläge. readWrite anger om en läs- eller skrivoperation sker. notCE är styrbiten för RAM -modulen. drag indikerar att en flyttoperation utförs.
  • Beskrivning av utgångar: outputDataToBus är data som går från RAM -minnet till bussen. outputData och output Address är data och adress som går till instruktionsregistret.
  • Övergripande plats i systemet: RAM -minnet möjliggör program- och datalagring i minnet innan ett program körs. När programmet körs mottar RAM -minnet en adress från MAR och matar ut data från den adressen till bussen.

adressROM

  • Beskrivning av ingångar: opCode är ingången som innehåller adressen till opkoden som utförs av datorn
  • Beskrivning av utgångar: opCodeStart är minnesadressen som anger den första mikroinstruktionsplatsen för motsvarande opCode.
  • Övergripande plats i systemet: Denna modul tar den låsta mikroinstruktionen och matar ut minnesplatsen som motsvarar starten av den mikroinstruktionssekvensen.

ringRäknare

  • Beskrivning av ingångar: Återställning sätter räknaren tillbaka till 100000 (det första "T -tillståndet"). Clk ökar räknaren med en på en fallande klockkant. NOP indikerar att det aktuella tillståndet/cykeln är en "ingen operation" -cykel.
  • Beskrivning av utgångar: räkningen är räknarens utsignal.
  • Övergripande plats i systemet: Ringräknaren styr den förinställbara räknaren och avgränsar de sex mikrostegen i varje instruktionscykel (T1-T6).

förräknare

  • Beskrivning av ingångar: opCodeStart är minnesplatsen för mikroinstruktionerna för opCoden som utförs. T1 återställer räknaren till 0 när den är hög. När T3 är hög laddas opCodeStart och räkningen fortsätter från den platsen för de återstående 3 cyklerna (T4-T6). Clr sätter räkneverket till 0. Clk ökar med en på en fallande kant.
  • Beskrivning av utgångar: controlWordLocation matar ut minnesplatsen för det kontrollord som ska köras.
  • Övergripande plats i systemet: Varje op-kod har 3 mikroinstruktioner. Räknaren ökar med 1 som börjar vid 0 under de tre första cyklerna (hämtningscykel). Räknaren triggas sedan av ringräknaren för att ladda adressen på opCodeStart och öka med 1 för de återstående 3 cyklerna. På detta sätt styr förräknaren sekvensen av mikroinstruktioner som ska utföras.

kontrollROM

  • Beskrivning av ingångar: controlWordLocation är adressen till kontrollordet som kontrollROM kommer att mata ut. NOP anger att platsen är en "ingen operation" -plats.
  • Beskrivning av utgångar: controlWord är kontrollordet som möjliggör/inaktiverar de olika datormodulerna för att utföra en önskad operation.
  • Total plats i systemet: Denna modul avkodar minnesplatsen från förräknaren och matar ut kontrollordet för önskad operation.

ALU

  • Beskrivning av ingångar: A och B är ingångarna från register A och register B som ALU utför aritmetiska och logiska operationer på. När subtraktionen är aktiv indikerar det att B subtraheras från A.
  • Beskrivning av utgångar: resultatet är resultatet av att lägga till A och B, eller subtrahera B från A. Utgångarna större än, mindre än, och lika För att ange om (AB eller A = B) och används i villkorlig hoppmodul. fel indikerar ett överflöde eller underflöde när det är aktivt.
  • Övergripande plats i systemet: ALU innehåller logiken för aritmetiska och logiska operationer som utförs av datorn. Denna modul kan lägga till och subtrahera två 10-bitars binära tal. ALU kan också avgöra om A> B, A

villkorligJmp

  • Descriptoin of Inputs: inputCount används för att låsa det aktuella antalet. inputAddress används för att låsa adressen som skulle hoppas till. loadFromRegister när låga spärrar inputAddress. loadCount när låga spärrar inputCount. när outputEnable är låg ställs utmatningen in på adressen för att hoppa till.gT, iT och eQ avgör vilket tillstånd som kontrolleras. greaterThan, lessThan och equalTo är ingångarna från ALU som indikerar resultatet av jämförelsen mellan A och B. På den stigande klockkanten av Clk läses inputCount och inputAddress in i register.
  • Beskrivning av utgångar: outputJmp är adressen som programräknaren kommer att läsa in.
  • Övergripande plats i systemet: denna modul hanterar villkorade och icke-villkorliga hopp för datorn. Baserat på ingångarna gT, iT och eQ bestämmer modulen vilket villkor som ska kontrolleras och om villkoret är sant eller falskt. Om villkoret är sant, kommer det att mata ut adressen för instruktionen att hoppa till, annars matas det ut antalet nästa instruktion.

binToBCD

  • Beskrivning av ingångar: nummer 10 bitars tal som ska konverteras till binärt kodad decimal.
  • Beskrivning av utdata: hundratals siffran på hundratalsplatsen för det binära talet. tänder siffran på tio platsen för det binära talet. de siffran på enorna i det binära numret.
  • Övergripande plats i systemet: Denna modul konverterar 10 -bitarsnumret från utmatningsregistret till BCD för att vår fyrsiffriga bildskärmsdrivrutin ska visa numret i decimal på 7 -segmentdisplayen.

fourDigitDriver

  • Beskrivning av ingångar: nummer är den 16 -bitars binära ingången som drivs till avkodaren. inClk är Basys boards interna klocka och används för en klockavdelare. RST återställer klockan som används för att driva siffrorna.
  • Beskrivning av utgångar: anod bestämmer vilken siffra plats som ska belysas. siffran är avkodarens ingångsnummer.
  • Övergripande plats i systemet: Denna modul driver avkodaren för att mata ut BCD -numret till displayen.

avkodare

  • Beskrivning av ingångar: inputNumber är siffran som kommer från drivrutinen och som kommer att avkodas.
  • Beskrivning av utgångar: katoder bestämmer vilka katoder som ska slås på för att visa önskad siffra.
  • Övergripande plats i systemet: Denna modul avkodar siffran som ska visas på 7 -segmentets display.

fourDigitDisplay

  • Beskrivning av ingångar: nummer är det nummer som ska visas på 7 -segmentets display. fel indikerar när displayen ska visa "Err". Clk är klocksignalen som displayen körs på. Denna signal måste vara runt 60 Hz så att displayen kan visa alla fyrsiffriga platser samtidigt.
  • Beskrivning av utgångar: anod bestämmer vilken sifferplats som är aktiverad. katod bestämmer vilka katoder som aktiveras för att visa önskad siffra.
  • Övergripande plats i systemet: Denna modul visar ett nummer på 7 -segmentets display. Se Basys 3 -kortets bruksanvisning för information om vilka katoder och anoder som aktiveras för att använda displayen. När felbiten är hög visar displayen "Err".

outputMUX

  • Beskrivning av ingångar: progModeInput avgör vilka lysdioder som slås på under programmeringsläget. runModeInput avgör vilka lysdioder som slås på under körningsläget. modeSelect är välj eller kontrollbit för MUX.
  • Beskrivning av utgångar: ledOutput anger vilka lysdioder som ska slås på.
  • Övergripande plats i systemet: Beroende på vilket läge datorn är i (program eller rom) kommer MUX att slå på olika lysdioder. I programläge (modeSelect är '0'), tänder MUX lysdioderna för att likna minnesplatsen som datorn är i och vad den innehåller. I körläge (modeSelect är '1') används MUX för felsökning men kan ställas in för att visa allt annat.

clockDivider

  • Beskrivning av ingångar: stopp läser de fem MSB -bitarna från bussen för att detektera ett stoppkommando ('11111') och stoppar klockan. inputClk är den interna klocksignalen för Basys 3 -kortet.
  • Beskrivning av utgångar: ouputClk är den nya klockan som har bromsats.
  • Total plats i systemet: Denna klocka används för att sakta ner datorn för att göra det möjligt för användaren att avgöra vad som händer. Klockan kan gå mycket snabbare, men den är för närvarande inställd på 2 Hz.

triStateBuffer

  • Beskrivning av ingångar: Din är 5 -bitars ingången som går in i bufferten. Ep är kontrollbiten.
  • Beskrivning av utgångar: Dout är 5 -bitars utdata från bufferten
  • Total plats i systemet: När kontrollbiten Ep är aktiv, matar bufferten ut ingången. När kontrollbiten inte är aktiv matar bufferten inte ut något.

tenBitDRegister

  • Beskrivning av ingångar: Dbus är den ingång som registret ska till. Clk tillåter registret att läsa in data på en stigande klockkant. ARST sätter registret till 0 asynkront. När outputEnable är lågt är innehållet i registret utdata. När readIn är låg låser registret Dbus på den stigande klockkanten.
  • Beskrivning av utgångar: Qbus är utdata från registret
  • Övergripande plats i systemet: Registret används flera gånger i hela datorn och används för att lagra information vid operationer.

fiveBitDRegister

  • Beskrivning av ingångar: Dbus är den ingång som registret ska till. Clk låter registret läsa in data på en stigande klockkant. ARST sätter registret till 0 asynkront. När outputEnable är lågt är innehållet i registret utdata. När readIn är låg låser registret Dbus på den stigande klockkanten.
  • Beskrivning av utgångar: Qbus är utdata från registret.
  • Övergripande plats i systemet: Registret används flera gånger i hela datorn och används för att lagra information vid operationer.

Steg 3: Kod

Nedan finns en mapp som innehåller begränsningar och källfiler för 10-bitars datorn.

Steg 4: Demo och provkod

Videon ovan visar hur man programmerar 10-bitars datorn på Basys 3 FPGA-kortet. En pdf som innehåller op-koder och ett exempelprogram bifogas också nedan.

Rekommenderad: