Turinys:

Dešimt bitų kompiuteris - VHDL: 4 žingsniai
Dešimt bitų kompiuteris - VHDL: 4 žingsniai

Video: Dešimt bitų kompiuteris - VHDL: 4 žingsniai

Video: Dešimt bitų kompiuteris - VHDL: 4 žingsniai
Video: This game was written in the HARDEST programming language👩‍💻 #programming #technology #software 2024, Rugsėjis
Anonim
Dešimt bitų kompiuteris - VHDL
Dešimt bitų kompiuteris - VHDL

Kūrėjai: Tyleris Starras ir Ezzeeddenas Gazali

Įvadas

Šis projektas buvo baigtas kaip galutinio CPE 133 projekto „Cal Poly SLO“dalis. Tai puikus projektas tiems, kurie nori suprasti, kaip kompiuteriai veikia žemiausiu lygiu ir kaip jie atlieka savo užduotis. Projektas sukurtas pagal 8 bitų SAP kompiuterį, aprašytą Alberto Malvino knygoje „Digital Computer Electronics“. Tačiau mes padidinome kompiuterį iki 10 bitų, kad galėtume įdiegti daugiau operacinių kodų (operacijos kodų). Vartotojas gali užprogramuoti kompiuterį atlikti tam tikras operacijas, įvesdamas tam tikras instrukcijas.

Sistemos ir grandinės architektūra:

Kompiuteris parašytas VHDL ir bus „Digilent“„Basys 3“plokštėje. Įvestys bus susietos su jungikliais plokštės apačioje. Funkcijoms „Reset“ir „Write“bus naudojami du lytėjimo jungikliai. Išvestis bus rodoma plokštės 7 segmentų ekrane.

Kompiuteris bus suskirstytas į mažesnes grandines (modulius), kurios atlieka skirtingas operacijas. Kiekvienas modulis bus išsamiai aprašytas tolesniuose žingsniuose.

1 žingsnis: medžiagos

Medžiagos
Medžiagos

Šiam projektui tereikia „Basile3 FPGA“plokštės iš „Digilent“ir mikro USB laido, skirto prijungti plokštę prie kompiuterio.

2 žingsnis: grandinės modulių blokinė schema

Blokinė grandinės modulių schema
Blokinė grandinės modulių schema
Blokinė grandinės modulių schema
Blokinė grandinės modulių schema
Blokinė grandinės modulių schema
Blokinė grandinės modulių schema

Aukščiau pateiktose blokinėse diagramose pavaizduoti skirtingi grandinių moduliai, sudarantys 10 bitų kompiuterį. Žemiau yra kiekvienos atskiros dalies/modulio aprašymas, parodytas aukščiau pateiktose diagramose.

Programos skaitiklis

Įėjimų aprašymas: įvestis yra 5 bitų įvestis, skirta skaičiui įkelti į programų skaitiklį. Cp, kai skaitiklis yra aukštas, skaičiuoja krintančius laikrodžio kraštus. Clr iš naujo nustato skaitiklį į 0. Ep, kai didelis skaitiklis pateikia dabartinį skaičių. Sp kai aukštas skaitiklis nustato skaičių įvesties skaičiuje

  • Išėjimų aprašymas:

    išvestis yra skaičiavimo kopija, skirta naudoti šviesos diodams 0-15. Skaičiavimas pateikia dabartinį skaičių.

  • Bendra vieta sistemoje: Šis skaitiklis stebi atminties vietą, kurioje yra programa. Visos programos prasideda atminties adresu 00000 (0) ir pakyla iki 11111 (31), nebent naudojamas sustabdymas. Šuolių teiginiuose programų skaitiklis ir toliau skaičiuoja nuo adreso, į kurį šokinėja programa.

Įvestis MUX

  • Įėjimų aprašymas: Adresas priima įvestį iš jungiklių nuo 11 iki 15. MAR perima įvestį iš 10 bitų registro, naudojamo kaip MAR. Programa valdo, kuri įvestis nukreipia į išvestį.
  • Išėjimų aprašymas: išvestis nukreipia pasirinktą įvestį į RAM.
  • Bendra vieta sistemoje: Šis MUX nustato, ar nukreipti adresą iš jungiklių ar magistralės į RAM. Programiniu režimu adresas iš jungiklių nukreipiamas, o veikimo režimu - adresas iš magistralės.

„ramMUX“

  • Įvesties aprašymas: userInput yra įvestis, kurią vartotojas įveda programos režimu. aRegInput yra duomenys, esantys A registre, jie naudojami perkėlimo operacijos metu. valdiklis yra pasirinktas šiam MUX.
  • Išėjimų aprašymas: išvestis yra 10 bitų duomenų įvestis į RAM.
  • Bendra vieta sistemoje: Šis MUX perduoda 10 bitų įvesties duomenis, naudojamus RAM modulyje. Kai valdymo bitas yra didelis, MUX perduoda duomenis, kuriuos vartotojas įvedė programos režimu. Kai valdymo bitas yra mažas, MUX perduoda duomenis į valdymo magistralę.

ramModule

  • Įvesties aprašymas: inputData yra duomenys, saugomi RAM. inputAddress yra vieta, kurioje saugomi duomenys. programa rodo, ar kompiuteris veikia programos ar paleidimo režimu. readWrite nurodo, ar atliekama skaitymo ar rašymo operacija. notCE yra RAM modulio valdymo bitas. judėti rodo, kad atliekama perkėlimo operacija.
  • Išėjimų aprašymas: outputDataToBus yra duomenys, kurie eina iš RAM į magistralę. outputData and output Address yra duomenys ir adresas, kurie patenka į instrukcijų registrą.
  • Bendra vieta sistemoje: RAM leidžia programai ir duomenims saugoti atmintyje prieš paleidžiant programą. Kai programa paleidžiama, RAM gauna adresą iš MAR ir perduoda duomenis tuo adresu į magistralę.

addressROM

  • Įvesties aprašymas: „opCode“yra įvestis, kurioje yra kompiuterio atliekamo opcode adresas
  • Išėjimų aprašymas: opCodeStart yra atminties adresas, nurodantis pirmąją atitinkamo opCode mikro instrukcijų vietą.
  • Bendra vieta sistemoje: Šis modulis priima užfiksuotą mikro instrukciją ir išveda atminties vietą, atitinkančią tos mikro instrukcijos sekos pradžią.

ringCounter

  • Įėjimų aprašymas: iš naujo nustatomas skaitiklis atgal į 100000 (pirmoji „T būsena“). „Clk“vienu skaičiumi padidina krintantį laikrodžio kraštą. NOP rodo, kad dabartinė būsena/ciklas yra ciklas „neveikti“.
  • Išėjimų aprašymas: skaičius yra skaitiklio išėjimas.
  • Bendra vieta sistemoje: žiedinis skaitiklis valdo iš anksto nustatytą skaitiklį ir nubrėžia šešis kiekvieno žingsnio mikro žingsnius (T1-T6).

preCounter

  • Įvesties aprašymas: „opCodeStart“yra atliekamų „opCode“mikroinstrukcijų atminties vieta. T1 atkuria skaitiklį į 0, kai jis yra aukštas. Kai T3 yra didelis, „opCodeStart“įkeliamas ir skaičiavimas tęsiamas iš tos vietos likusiems 3 ciklams (T4-T6). Clr skaitiklis nustatomas į 0. Clk didėjimo skaitiklis po vieną ant krintančio krašto.
  • Išėjimų aprašymas: controlWordLocation išleidžia vykdytino valdymo žodžio atminties vietą.
  • Bendra vieta sistemoje: Kiekvienas op kodas turi 3 mikro instrukcijas. Skaitiklis padidėja 1, pradedant nuo 0 pirmus 3 ciklus (gavimo ciklas). Tada skaitiklis suaktyvina skambėjimo skaitiklį, kad adresas būtų įkeliamas į „opCodeStart“, ir likusiems 3 ciklams padidinamas 1. Tokiu būdu „PreCounter“valdo mikroinstrukcijų, kurias reikia atlikti, seką.

controlROM

  • Įvesties aprašymas: controlWordLocation yra „controlWord“adresas, kurį „controlROM“išves. NOP nurodo, kad vietovė neveikia.
  • Išėjimų aprašymas: controlWord yra valdymo žodis, leidžiantis/išjungiantis skirtingus kompiuterio modulius atlikti norimą operaciją.
  • Bendra vieta sistemoje: Šis modulis dekoduoja atminties vietą iš išankstinio skaitiklio ir išleidžia norimą operaciją valdantį žodį.

ALU

  • Įėjimų aprašymas: A ir B yra įvestys iš registro A ir registro B, kuriose ALU atlieka aritmetines ir logines operacijas. Kai atimtis yra aktyvi, tai rodo, kad B yra atimama iš A.
  • Išėjimų aprašymas: rezultatas yra pridedant A ir B arba atimant B iš A. Išėjimai didesni nei mažesni nei lygiaverčiai, siekiant nurodyti, ar (AB arba A = B) ir naudojami sąlyginio šuolio modulyje. klaida rodo aktyvumo perpildymą arba perpildymą.
  • Bendra vieta sistemoje: ALU yra kompiuterio atliktų aritmetinių ir loginių operacijų logika. Šis modulis gali pridėti ir atimti du 10 bitų dvejetainius skaičius. ALU taip pat gali nustatyti, ar A> B, A

sąlyginisJmp

  • Įėjimų aprašymas: inputCount naudojamas dabartiniam skaičiui fiksuoti. inputAddress naudojamas užrakinti adresą, į kurį būtų peršokta. loadFromRegister, kai įeina mažai skląsčių Adresas. loadCount, kai mažai užrakina inputCount. kai outputEnable yra žemas, išvestis nustatyta į adresą, į kurį reikia pereiti. gT, iT ir eQ nustato, kuri sąlyga tikrinama. didesnės nei mažesnės nei lygios ir lygios yra ALU įvestys, rodančios palyginimo tarp A ir B rezultatą. Kylančiame laikrodžio krašte Clk įvestys ir skaičius įvestys yra registruojami.
  • Išėjimų aprašymas: outputJmp yra adresas, kurį skaitys programos skaitiklis.
  • Bendra vieta sistemoje: šis modulis tvarko sąlyginius ir besąlyginius kompiuterio šuolius. Remdamasis įvestimis gT, iT ir eQ, modulis nustato, kurią sąlygą reikia patikrinti ir ar ši sąlyga yra teisinga, ar klaidinga. Jei sąlyga yra teisinga, ji išves instrukcijos, į kurią reikia pereiti, adresą, priešingu atveju bus rodomas kitos instrukcijos skaičius.

binToBCD

  • Įvesties aprašymas: suskaičiuokite 10 bitų skaičių, kurį norite konvertuoti į dvejetainį koduotą dešimtainį skaičių.
  • Išėjimų aprašymas: šimtai skaitmenų šimtų dvejetainio skaičiaus vietoje. dešimtys skaitmenų dvejetainio skaičiaus dešimtoje vietoje. vienas skaitmuo vienetinio dvejetainio skaičiaus vietoje.
  • Bendra vieta sistemoje: Šis modulis konvertuoja 10 bitų skaičių iš išvesties registro į BCD, kad mūsų keturių skaitmenų ekrano tvarkyklė 7 segmentų ekrane rodytų skaičių dešimtaine dalimi.

fourDigitDriver

  • Įėjimų aprašymas: skaičius yra 16 bitų dvejetainis įėjimas, nukreipiamas į dekoderį. „inClk“yra „Basys“plokščių vidinis laikrodis ir naudojamas laikrodžio dalikliui. RST iš naujo nustato laikrodį, naudojamą skaitmenims vairuoti.
  • Išėjimų aprašymas: anodas nustato, kuri skaitmenų vieta bus apšviesta. skaitmuo yra įvesties numeris į dekoderį.
  • Bendra vieta sistemoje: Šis modulis verčia dekoderį išvesti BCD numerį į ekraną.

dekoderis

  • Įvesties aprašas: inputNumber yra skaitmuo, gaunamas iš tvarkyklės ir kuris bus dekoduojamas.
  • Išėjimų aprašymas: katodai nustato, kurie katodai bus įjungti, kad būtų rodomas norimas skaitmuo.
  • Bendra vieta sistemoje: Šis modulis dekoduoja skaitmenį, kuris turi būti rodomas 7 segmentų ekrane.

fourDigitDisplay

  • Įvesties aprašymas: skaičius yra skaičius, kuris turi būti rodomas 7 segmentų ekrane. klaida rodo, kada ekrane turėtų būti rodoma „Err“. Clk yra laikrodžio signalas, kuriame rodomas ekranas. Šis signalas turi būti apie 60 Hz, kad ekrane būtų rodomos visos 4 skaitmenų vietos vienu metu.
  • Išėjimų aprašymas: anodas nustato, kuri skaitmenų vieta yra įjungta. katodas nustato, kurie katodai yra aktyvuoti, kad būtų rodomas norimas skaitmuo.
  • Bendra vieta sistemoje: Šis modulis rodo skaičių 7 segmentų ekrane. Informacijos apie tai, kurie katodai ir anodai suaktyvinami, norint naudoti ekraną, rasite „Basys 3“plokštės naudojimo instrukcijoje. Kai klaidos bitas yra didelis, ekrane rodoma „Err“.

išvestis MUX

  • Įėjimų aprašymas: progModeInput nustato, kurie šviesos diodai įjungiami programavimo režimu. runModeInput nustato, kurie šviesos diodai yra įjungti veikimo režimu. modeSelect yra MUX pasirinkimo arba valdymo bitas.
  • Išėjimų aprašymas: ledOutput nurodo, kurie šviesos diodai bus įjungti.
  • Bendra vieta sistemoje: Priklausomai nuo kompiuterio režimo (programos ar romo), MUX įjungs skirtingus šviesos diodus. Programiniu režimu („modeSelect“yra „0“) MUX įjungia šviesos diodus, kad jie būtų panašūs į atminties vietą, kurioje yra kompiuteris, ir tai, kas jame yra. Veikiant režimui („modeSelect“yra „1“), MUX naudojamas derinimui, tačiau gali būti nustatytas rodyti viską.

laikrodisDaliklis

  • Įėjimų aprašymas: stop nuskaito penkis MSB bitus iš magistralės, kad aptiktų sustabdymo komandą ('11111') ir sustabdytų laikrodį. „inputClk“yra „Basys 3“plokštės vidinis laikrodžio signalas.
  • Išėjimų aprašymas: „ouputClk“yra naujas sulėtintas laikrodis.
  • Bendra vieta sistemoje: Šis laikrodis naudojamas sulėtinti kompiuterį, kad vartotojas galėtų nustatyti, kas vyksta. Laikrodis gali veikti daug greičiau, tačiau šiuo metu jis nustatytas 2 Hz.

triStateBuffer

  • Įėjimų aprašymas: Din yra 5 bitų įvestis, einanti į buferį. Ep yra valdymo bitas.
  • Išėjimų aprašymas: Dout yra buferio 5 bitų išvestis
  • Bendra vieta sistemoje: Kai valdymo bitas Ep yra aktyvus, buferis perduoda įvestį. Kai valdymo bitas neaktyvus, buferis nieko neišleidžia.

„TenBitDRegister“

  • Įėjimų aprašymas: Dbus yra įvestis, į kurią turi būti registras. „Clk“leidžia registrui nuskaityti duomenis kylančio laikrodžio krašte. ARST asinchroniškai nustato registrą į 0. Kai „outputEnable“yra mažas, registro turinys yra išvestis. Kai „ReadIn“yra mažai, registras fiksuoja Dbus ant kylančio laikrodžio krašto.
  • Išėjimų aprašymas: Qbus yra registro išvestis
  • Bendra vieta sistemoje: Registras naudojamas kelis kartus visame kompiuteryje ir naudojamas informacijai saugoti atliekant operacijas.

„FiveBitDRegister“

  • Įėjimų aprašymas: Dbus yra įvestis, į kurią turi būti registras. „Clk“leidžia registrui nuskaityti duomenis kylančio laikrodžio krašte. ARST asinchroniškai nustato registrą į 0. Kai „outputEnable“yra mažas, registro turinys yra išvestis. Kai „ReadIn“yra mažai, registras fiksuoja Dbus ant kylančio laikrodžio krašto.
  • Išėjimų aprašymas: Qbus yra registro išvestis.
  • Bendra vieta sistemoje: Registras naudojamas kelis kartus visame kompiuteryje ir naudojamas informacijai saugoti atliekant operacijas.

3 žingsnis: kodas

Žemiau yra aplankas, kuriame yra 10 bitų kompiuterio apribojimų ir šaltinio failai.

4 veiksmas: demonstracinė versija ir pavyzdinis kodas

Aukščiau pateiktame vaizdo įraše parodyta, kaip užprogramuoti 10 bitų kompiuterį „Basys 3 FPGA“plokštėje. Pdf, kuriame yra op kodai ir programos pavyzdys, taip pat pridedamas žemiau.

Rekomenduojamas: