Përmbajtje:

Kompjuter me dhjetë bit - VHDL: 4 hapa
Kompjuter me dhjetë bit - VHDL: 4 hapa

Video: Kompjuter me dhjetë bit - VHDL: 4 hapa

Video: Kompjuter me dhjetë bit - VHDL: 4 hapa
Video: ГРЕНДПА и Гренни В РЕАЛЬНОЙ ЖИЗНИ! Почему они перепутали мой дом? GRANDPA GRANNY Chapter Two 2024, Korrik
Anonim
Kompjuter me dhjetë bit - VHDL
Kompjuter me dhjetë bit - VHDL

Bërë nga: Tyler Starr dhe Ezzeedden Gazali

Prezantimi

Ky projekt u përfundua si pjesë e projektit përfundimtar për CPE 133 në Cal Poly SLO. Shtë një projekt i mrekullueshëm për dikë që kërkon të kuptojë se si funksionojnë kompjuterët në nivelin e tyre më të ulët dhe si i arrijnë detyrat e tyre. Projekti është modeluar sipas kompjuterit 8-bit SAP të përshkruar në librin e Albert Malvino në Digital Computer Electronics. Sidoqoftë, ne e kemi rritur kompjuterin në 10-bit për të lejuar zbatimin e më shumë kodeve op (kodet e funksionimit). Përdoruesi mund të programojë kompjuterin për të kryer një sërë operacionesh duke futur udhëzime të caktuara.

Arkitektura e Sistemit dhe Qarkut:

Kompjuteri është shkruar në VHDL dhe do të përmbahet në tabelën Basys 3 nga Digilent. Hyrjet do të regjistrohen në çelsat në pjesën e poshtme të tabelës. Dy ndërprerës prekës do të përdoren për funksionet Reset dhe Write. Dalja do të shfaqet në ekranin e 7 segmenteve të tabelës.

Kompjuteri do të ndahet në qarqe (module) më të vogla që trajtojnë operacione të ndryshme. Secili modul do të shpjegohet në detaje në hapat e mëposhtëm.

Hapi 1: Materialet

Materiale
Materiale

Gjithçka që nevojitet për këtë projekt është bordi Basys3 FPGA nga Digilent dhe një tel mikro USB për të lidhur bordin me kompjuterin tuaj.

Hapi 2: Bllokoni Diagramin e Moduleve të Qarkut

Bllokimi i Diagramit të Moduleve të Qarkut
Bllokimi i Diagramit të Moduleve të Qarkut
Bllokimi i Diagramit të Moduleve të Qarqeve
Bllokimi i Diagramit të Moduleve të Qarqeve
Bllokimi i Diagramit të Moduleve të Qarqeve
Bllokimi i Diagramit të Moduleve të Qarqeve

Bllok-diagramet e mësipërme tregojnë modulet e qarqeve të ndryshme që përbëjnë kompjuterin 10-bit. Më poshtë janë përshkrimet për secilën nga pjesët/modulet individuale të paraqitura në diagramet e mësipërme.

Numëruesi i programit

Përshkrimi i hyrjeve: hyrja është një hyrje 5 bit për ngarkimin e një numri në numëruesin e programit. Cp kur e lartë numëruesi numëron në rënien e skajeve të orës. Clr rivendos numëruesin në 0. Ep kur e lartë numëruesi nxjerr numërimin aktual. Sp kur numëruesi është i lartë përcakton numërimin në numrin në hyrje

  • Përshkrimi i rezultateve:

    dalja është një kopje e numërimit për përdorim në LEDS 0-15. Numërimi nxjerr numërimin aktual.

  • Vendi i përgjithshëm në sistem: Ky numërues mban gjurmët e vendndodhjes së kujtesës në të cilën ndodhet programi. Të gjithë programet fillojnë në adresën e kujtesës 00000 (0) dhe shkojnë deri në 11111 (31), përveç rasteve kur përdoret ndalimi. Në deklaratat e kërcimit, numëruesi i programit vazhdon të numërojë nga adresa në të cilën programi po kërcen.

Hyrja MUX

  • Përshkrimi i hyrjeve: Adresa merr hyrjen nga çelsat 11 deri në 15. MAR merr hyrjen nga regjistri 10 -bitësh i përdorur si MAR. Programi kontrollon se cilat hyrje në rrugë drejt daljes.
  • Përshkrimi i rezultateve: dalja drejton hyrjen e zgjedhur në RAM.
  • Vendi i përgjithshëm në sistem: Ky MUX përcakton nëse do të drejtojë adresën nga çelsat ose autobusi në RAM. Në modalitetin e programit adresa nga çelsat drejtohet dhe në modalitetin e drejtimit drejtohet adresa nga autobusi.

ramMUX

  • Përshkrimi i Inputeve: userInput është hyrja që përdoruesi fut gjatë modalitetit të programit. aRegInput janë të dhënat e përfshira në regjistrin A, kjo përdoret gjatë një operacioni lëvizjeje. kontrolli është i zgjedhuri për këtë MUX.
  • Përshkrimi i rezultateve: dalja është hyrja e të dhënave 10-bit në RAM.
  • Vendi i përgjithshëm në sistem: Ky MUX nxjerr të dhënat hyrëse 10-bit që përdoren në modulin RAM. Kur biti i kontrollit është i lartë, MUX nxjerr të dhënat që përdoruesi ka futur në modalitetin e programit. Kur biti i kontrollit është i ulët, MUX nxjerr të dhënat në autobusin e kontrollit.

ramModule

  • Përshkrimi i Inputeve: inputData janë të dhënat që ruhen në RAM. inputAddress është vendi ku ruhen të dhënat. programi tregon nëse kompjuteri është në program ose në modalitetin e funksionimit. readWrite tregon nëse po ndodh një operacion leximi ose shkrimi. notCE është biti i kontrollit për modulin RAM. lëvizja tregon se po kryhet një operacion lëvizjeje.
  • Përshkrimi i rezultateve: outputDataToBus janë të dhënat që shkojnë nga RAM në bus. outputData dhe adresa dalëse janë të dhënat dhe adresa që shkojnë në regjistrin e udhëzimeve.
  • Vendi i përgjithshëm në sistem: RAM -i lejon ruajtjen e programit dhe të dhënave në memorje para se të fillojë programi. Pasi programi po funksionon, RAM merr një adresë nga MAR dhe i nxjerr të dhënat në atë adresë në autobus.

adresa ROM

  • Përshkrimi i hyrjeve: opCode është hyrja që përmban adresën e opcode që po kryhet nga kompjuteri
  • Përshkrimi i rezultateve: opCodeStart është adresa e kujtesës që tregon vendndodhjen e parë të mikro-udhëzimit të opCode përkatëse.
  • Vendi i përgjithshëm në sistem: Ky modul merr mikro-udhëzimin e fiksuar dhe nxjerr vendndodhjen e kujtesës që korrespondon me fillimin e asaj sekuence të mikro-udhëzimit.

unazë Counter

  • Përshkrimi i Inputeve: reset e vendos numëruesin në 100000 ("gjendja e parë" e T). Clk e rrit numëruesin me një në skajin e orës që bie. NOP tregon se gjendja/cikli aktual është një cikël "pa funksionim".
  • Përshkrimi i rezultateve: numërimi është dalja e numëruesit.
  • Vendi i përgjithshëm në sistem: Numëruesi i unazës kontrollon numëruesin e paravendosur dhe përcakton gjashtë mikro-hapat në çdo cikël udhëzimi (T1-T6).

paraKontak

  • Përshkrimi i Inputeve: opCodeStart është vendndodhja e kujtesës së mikro-udhëzimeve për opCode që po kryhet. T1 rivendos numëruesin në 0 kur është i lartë. Kur T3 është i lartë, opCodeStart ngarkohet dhe numërimi vazhdon nga ai vend për 3 ciklet e mbetura (T4-T6). Clr vendos numëruesin në 0. Clk rrit kundër një nga një në skajin që bie.
  • Përshkrimi i rezultateve: controlWordLocation nxjerr vendndodhjen e kujtesës së fjalës kontrolluese që do të ekzekutohet.
  • Vendi i përgjithshëm në sistem: Çdo op-kod ka 3 mikro-udhëzime. Numëruesi rritet me 1 duke filluar nga 0 për 3 ciklet e para (cikli i marrjes). Numëruesi më pas nxitet nga numëruesi i unazës për të ngarkuar adresën në opCodeStart dhe rritet me 1 për 3 ciklet e mbetura. Në këtë mënyrë paraCounter kontrollon sekuencën e mikro-udhëzimeve që duhen kryer.

kontrollRROM

  • Përshkrimi i Inputeve: controlWordLocation është adresa e controlWord që controlROM do të nxjerrë. NOP tregon se vendndodhja është një vendndodhje "pa funksionim".
  • Përshkrimi i rezultateve: controlWord është fjala kontrolluese që mundëson/çaktivizon modulet e ndryshme të kompjuterit për të kryer një operacion të dëshiruar.
  • Vendi i Përgjithshëm në Sistem: Ky modul dekodon vendndodhjen e kujtesës nga preCounter dhe nxjerr controlWord për operacionin e dëshiruar.

ALU

  • Përshkrimi i Inputeve: A dhe B janë hyrjet nga Regjistri A dhe Regjistri B në të cilat ALU kryen operacionet aritmetike dhe logjike. Kur zbritja është aktive, ajo tregon se B po zbritet nga A.
  • Përshkrimi i rezultateve: rezultati është rezultat i shtimit të A dhe B, ose zbritjes së B nga A. Rezultatet më të mëdha se, më pak se të barabarta Për të treguar nëse (AB, ose A = B) dhe përdoren në modulin e kërcimit të kushtëzuar. gabimi tregon një tejmbushje ose rrjedhje kur është aktive.
  • Vendi i përgjithshëm në sistem: ALU përmban logjikën për operacionet aritmetike dhe logjike të kryera nga kompjuteri. Ky modul mund të shtojë dhe zbresë dy numra binarë 10-bit. ALU gjithashtu mund të përcaktojë nëse A> B, A

kushtoreJmp

  • Përshkrimi i hyrjeve: inputCount përdoret për të fiksuar numrin aktual. inputAddress përdoret për të fiksuar adresën në të cilën do të hidhej. loadFromRegjistrohuni kur hyrjet e ulëta janë të lidhuraAdresa. loadCount kur kapja e ulët e inputCount. kur outputEnable është e ulët dalja vendoset në adresën për të kaluar te.gT, iT dhe eQ përcaktojnë se cila gjendje po kontrollohet. më i madh, më pak, dhe i barabartë me janë hyrjet nga ALU që tregojnë rezultatin e krahasimit midis A dhe B. Në skajin e orës në rritje të Clk inputCount dhe inputAddress lexohen në regjistra.
  • Përshkrimi i rezultateve: outputJmp është adresa në të cilën numëruesi i programit do të lexojë.
  • Vendi i Përgjithshëm në Sistem: ky modul trajton kërcimet e kushtëzuara dhe jo të kushtëzuara për kompjuterin. Bazuar në hyrjet gT, iT dhe eQ, moduli përcakton se për cilën gjendje të kontrolloni dhe nëse ai kusht është i vërtetë apo i rremë. Nëse gjendja është e vërtetë, ajo do të nxjerrë adresën e udhëzimit për të kaluar, përndryshe, ajo nxjerr numërimin e udhëzimit tjetër.

binToBCD

  • Përshkrimi i Inputeve: numëroni numrin 10 bit për t'u kthyer në dhjetore të koduara binare.
  • Përshkrimi i rezultateve: qindra shifra në vendin qindra të numrit binar. dhjetë shifrën në vendin e dhjetëshe të numrit binar. njëshe shifrën në vendin e njësive të numrit binar.
  • Vendi i përgjithshëm në sistem: Ky modul shndërron numrin 10 bit nga regjistri i daljes në BCD në mënyrë që drejtuesi ynë i ekranit me katër shifra të shfaqë numrin në numër dhjetor në ekranin e 7 segmenteve.

katërDigitDriver

  • Përshkrimi i hyrjeve: numri është hyrja binare 16 bit që nxitet në deshifrues. inClk është ora e brendshme e bordeve të Basys dhe përdoret për një ndarës të orës. RST rivendos orën e përdorur për të drejtuar shifrat.
  • Përshkrimi i rezultateve: anoda përcakton se cili vend shifror do të ndriçohet. shifra është numri hyrës në deshifrues.
  • Vendi i përgjithshëm në sistem: Ky modul e çon dekoderin në daljen e numrit BCD në ekran.

deshifrues

  • Përshkrimi i Inputeve: inputNumber është shifra që vjen nga drejtuesi dhe e cila do të deshifrohet.
  • Përshkrimi i rezultateve: katodat përcaktojnë se cilat katoda do të ndizen për të shfaqur shifrën e dëshiruar.
  • Vendi i përgjithshëm në sistem: Ky modul dekodon shifrën që do të shfaqet në ekranin e 7 segmenteve.

katërDigitDisplay

  • Përshkrimi i hyrjeve: numri është numri që do të shfaqet në ekranin e 7 segmenteve. gabimi tregon kur ekrani duhet të lexojë "Err". Clk është sinjali i orës në të cilin po funksionon ekrani. Ky sinjal duhet të jetë rreth 60 Hz në mënyrë që ekrani të tregojë të gjitha vendet me 4 shifra njëkohësisht.
  • Përshkrimi i rezultateve: anoda përcakton se cili vend shifror është i aktivizuar. katoda përcakton se cilat katoda aktivizohen për të shfaqur shifrën e dëshiruar.
  • Vendi i përgjithshëm në sistem: Ky modul shfaq një numër në ekranin e 7 segmenteve. Referojuni manualit të udhëzimeve të tabelës Basys 3 për informacion se cilat katoda dhe anoda aktivizohen për të përdorur ekranin. Kur biti i gabimit është i lartë, ekrani shfaq "Err".

daljeMUX

  • Përshkrimi i Inputeve: progModeInput përcakton se cilat led janë ndezur gjatë modalitetit të programimit. runModeInput përcakton se cilat led janë ndezur gjatë modalitetit të drejtimit. modeSelect është biti i përzgjedhjes ose kontrollit për MUX.
  • Përshkrimi i rezultateve: ledOutput tregon se cilat led do të ndizen.
  • Vendi i përgjithshëm në sistem: Në varësi të mënyrës në të cilën është kompjuteri (program ose rum), MUX do të ndizet me led të ndryshëm. Në modalitetin e programit (modeSelect është '0'), MUX ndez led -et për t'i ngjarë vendndodhjes së kujtesës në të cilën ndodhet kompjuteri dhe asaj që përmban. Në modalitetin e drejtimit (modeSelect është '1'), MUX përdoret për korrigjim por mund të vendoset për të shfaqur ndonjë gjë tjetër.

orëParësuesi

  • Përshkrimi i Inputeve: stop lexon pesë bitët MSB nga autobusi për të zbuluar një komandë ndalimi ('11111') dhe ndalon orën. inputClk është sinjali i brendshëm i orës i tabelës Basys 3.
  • Përshkrimi i rezultateve: ouputClk është ora e re që është ngadalësuar.
  • Vendi i përgjithshëm në sistem: Kjo orë përdoret për të ngadalësuar kompjuterin për të bërë të mundur që përdoruesi të përcaktojë se çfarë po ndodh. Ora mund të funksionojë shumë më shpejt, megjithatë, aktualisht është vendosur në 2 Hz.

triStateBuffer

  • Përshkrimi i Inputeve: Din është hyrja 5 bit që hyn në tampon. Ep është bit kontrolli.
  • Përshkrimi i rezultateve: Dout është dalja 5 bit e tamponit
  • Vendi i Përgjithshëm në Sistem: Kur biti i kontrollit Ep është aktiv, tamponi nxjerr hyrjen. Kur biti i kontrollit nuk është aktiv, tamponi nuk nxjerr asgjë.

tenBitDRegjistrohu

  • Përshkrimi i Inputeve: Dbus është hyrja në të cilën regjistri është. Clk lejon regjistrin të lexojë të dhëna në një skaj të orës në rritje. ARST e vendos regjistrin në 0 në mënyrë asinkrone. Kur outputEnable është e ulët, përmbajtja e regjistrit është dalja. Kur readIn është i ulët, regjistri e lidh Dbus në skajin e orës në rritje.
  • Përshkrimi i rezultateve: Qbus është dalja e regjistrit
  • Vendi i përgjithshëm në sistem: Regjistri përdoret shumë herë në të gjithë kompjuterin dhe përdoret për të ruajtur informacionin gjatë kryerjes së operacioneve.

fiveBitDRegjistrohu

  • Përshkrimi i Inputeve: Dbus është hyrja në të cilën regjistri është. Clk lejon regjistrin të lexojë të dhëna në një skaj të orës në rritje. ARST e vendos regjistrin në 0 në mënyrë asinkrone. Kur outputEnable është e ulët, përmbajtja e regjistrit është dalja. Kur readIn është i ulët, regjistri e lidh Dbus në skajin e orës në rritje.
  • Përshkrimi i rezultateve: Qbus është dalja e regjistrit.
  • Vendi i përgjithshëm në sistem: Regjistri përdoret shumë herë në të gjithë kompjuterin dhe përdoret për të ruajtur informacionin gjatë kryerjes së operacioneve.

Hapi 3: Kodi

Më poshtë është një dosje që përmban kufizimet dhe skedarët burim për kompjuterin 10-bit.

Hapi 4: Demo dhe Kod Shembull

Videoja e mësipërme demonstron se si të programoni kompjuterin 10-bit në tabelën Basys 3 FPGA. Një pdf që përmban kodet op dhe një program mostër i bashkëngjitet gjithashtu më poshtë.

Recommended: