Cuprins:

Computer pe zece biți - VHDL: 4 pași
Computer pe zece biți - VHDL: 4 pași

Video: Computer pe zece biți - VHDL: 4 pași

Video: Computer pe zece biți - VHDL: 4 pași
Video: How to use a For-Loop in VHDL 2024, Iulie
Anonim
Computerul pe zece biți - VHDL
Computerul pe zece biți - VHDL

Realizat de: Tyler Starr și Ezzeedden Gazali

Introducere

Acest proiect a fost finalizat ca parte a proiectului final pentru CPE 133 la Cal Poly SLO. Este un proiect minunat pentru cineva care caută să înțeleagă cum funcționează computerele la nivelul lor cel mai scăzut și cum își îndeplinesc sarcinile. Proiectul este modelat după computerul SAP pe 8 biți descris în cartea lui Albert Malvino Digital Computer Electronics. Cu toate acestea, am mărit computerul la 10 biți pentru a permite implementarea mai multor coduri op (coduri de funcționare). Utilizatorul poate programa computerul pentru a efectua un set de operații introducând anumite instrucțiuni.

Arhitectură de sistem și circuit:

Calculatorul este scris în VHDL și va fi conținut pe placa Basys 3 de la Digilent. Intrările vor fi mapate la comutatoarele din partea de jos a plăcii. Două comutatoare tactile vor fi utilizate pentru funcțiile Reset și Write. Ieșirea va fi afișată pe afișajul pe 7 segmente al plăcii.

Calculatorul va fi împărțit în circuite mai mici (module) care gestionează operațiuni diferite. Fiecare modul va fi explicat în detaliu în pașii următori.

Pasul 1: Materiale

Materiale
Materiale

Tot ce este necesar pentru acest proiect este placa Basys3 FPGA de la Digilent și un fir micro USB pentru a conecta placa la computer.

Pasul 2: Diagrama bloc a modulelor de circuit

Diagrama bloc a modulelor de circuit
Diagrama bloc a modulelor de circuit
Diagrama bloc a modulelor de circuit
Diagrama bloc a modulelor de circuit
Diagrama bloc a modulelor de circuit
Diagrama bloc a modulelor de circuit

Diagramele bloc de mai sus arată diferitele module de circuite care alcătuiesc computerul de 10 biți. Mai jos sunt descrieri pentru fiecare dintre piesele / modulele individuale prezentate în diagramele de mai sus.

Program de numărare

Descrierea intrărilor: intrarea este o intrare de 5 biți pentru încărcarea unui număr în contorul de programe. Cp atunci când este mare contorul contează pe căderea marginilor ceasului. Clr resetează contorul la 0. Ep când este mare, contorul produce numărul curent. Sp când este mare, contorul setează numărul la numărul de intrare

  • Descrierea rezultatelor:

    ieșirea este o copie a numărului pentru utilizare pe LED-urile 0-15. Numărul de ieșiri contorul curent.

  • Locul general în sistem: Acest contor ține evidența locației de memorie în care se află programul. Toate programele încep de la adresa de memorie 00000 (0) și ajung la 11111 (31), cu excepția cazului în care se utilizează o oprire. În instrucțiunile de salt, contorul programului continuă să conteze de la adresa la care trece programul.

Intrare MUX

  • Descrierea intrărilor: Adresa preia intrarea de la comutatoarele 11 până la 15. MAR preia intrarea din registrul de 10 biți folosit ca MAR. Programul controlează ce intrare să treacă la ieșire.
  • Descrierea ieșirilor: ieșirea direcționează intrarea selectată către RAM.
  • Locul general în sistem: acest MUX determină dacă să treacă adresa de la comutatoare sau autobuz la RAM. În modul program, adresa de la comutatoare este direcționată, iar în modul de rulare, adresa de la magistrală este direcționată.

ramMUX

  • Descrierea intrărilor: userInput este intrarea pe care utilizatorul o introduce în timpul programului. aRegInput este datele conținute în registrul A, acesta este utilizat în timpul unei operații de mutare. controlul este selectarea pentru acest MUX.
  • Descrierea ieșirilor: ieșirea este intrarea de date pe 10 biți în RAM.
  • Locul general în sistem: acest MUX transmite datele de intrare pe 10 biți care sunt utilizate în modulul RAM. Când bitul de control este ridicat, MUX transmite datele introduse de utilizator în modul program. Când bitul de control este redus, MUX transmite datele pe magistrala de control.

ramModule

  • Descrierea intrărilor: inputData reprezintă datele stocate în memoria RAM. inputAddress este locația în care datele sunt stocate. program indică dacă computerul este în modul program sau rulați. readWrite indică dacă are loc o operație de citire sau scriere. notCE este bitul de control pentru modulul RAM. mutare indică faptul că se efectuează o operație de mutare.
  • Descrierea ieșirilor: outputDataToBus este datele care merg de la RAM la magistrală. outputData și output output sunt datele și adresa care merg la registrul de instrucțiuni.
  • Locul general în sistem: RAM permite stocarea programului și a datelor în memorie înainte de a rula un program. Odată ce programul rulează, memoria RAM primește o adresă de la MAR și transmite datele la adresa respectivă către magistrală.

addressROM

  • Descrierea intrărilor: opCode este intrarea care conține adresa opcode-ului care este efectuat de computer
  • Descrierea ieșirilor: opCodeStart este adresa de memorie care indică prima locație de microinstrucțiuni a opCode-ului corespunzător.
  • Locul general în sistem: Acest modul preia microinstrucțiunile blocate și scoate locația de memorie care corespunde cu începutul acelei secvențe de microinstrucțiuni.

ringCounter

  • Descrierea intrărilor: resetează contorul la 100000 (prima „stare T”). Clk crește contorul cu unul pe marginea ceasului care cade. NOP indică faptul că starea / ciclul curent este un ciclu „fără operație”.
  • Descrierea ieșirilor: numărul este ieșirea contorului.
  • Locul general în sistem: Contorul inelar controlează contorul pre-setabil și delimitează cele șase micro-pași din fiecare ciclu de instrucțiuni (T1-T6).

preCounter

  • Descrierea intrărilor: opCodeStart este locația de memorie a microinstrucțiunilor pentru opCode care se desfășoară. T1 resetează contorul la 0 când este mare. Când T3 este ridicat, opCodeStart este încărcat și numărul continuă din acea locație pentru restul de 3 cicluri (T4-T6). Clr setează contorul la 0. Clk crește contorul cu unul pe marginea de cădere.
  • Descrierea ieșirilor: controlWordLocation afișează locația de memorie a cuvântului de control de executat.
  • Locul general în sistem: fiecare cod op are 3 microinstrucțiuni. Contorul crește cu 1 începând cu 0 pentru primele 3 cicluri (ciclul de preluare). Contorul este apoi declanșat de contorul de sonerie pentru a încărca adresa pe opCodeStart și crește cu 1 pentru restul de 3 cicluri. În acest fel, preCounterul controlează secvența de microinstrucțiuni care trebuie efectuate.

controlROM

  • Descrierea intrărilor: controlWordLocation este adresa controlWord pe care controlROM-ul o va scoate. NOP indică faptul că locația este o locație „fără operație”.
  • Descrierea ieșirilor: controlWord este cuvântul de control care activează / dezactivează diferitele module de calculator pentru a efectua operația dorită.
  • Locul general în sistem: Acest modul decodează locația de memorie din preCounter și transmite controlWord pentru operația dorită.

ALU

  • Descrierea intrărilor: A și B sunt intrările din registrul A și registrul B pe care ALU efectuează operațiile aritmetice și logice. Când scăderea este activă, indică faptul că B se scade din A.
  • Descrierea ieșirilor: rezultatul este rezultatul adăugării lui A și B sau scăderii lui B din A. Ieșirile mai mari decât mai puțin, mai puțin decât și egale Pentru a indica dacă (AB sau A = B) și sunt utilizate în modulul de salt condițional. eroarea indică o revărsare sau o revărsare inferioară atunci când este activă.
  • Locul general în sistem: ALU conține logica operațiunilor aritmetice și logice efectuate de computer. Acest modul poate adăuga și scădea două numere binare de 10 biți. ALU poate determina, de asemenea, dacă A> B, A

condiționalJmp

  • Descrierea intrărilor: inputCount este utilizat pentru a bloca numărul curent. inputAddress este folosit pentru a bloca adresa la care ar fi sărit. loadFromRegister atunci când se blochează scăzut inputAddress. loadCount când zgomotul scade cu inputCount. când outputEnable este scăzut, ieșirea este setată la adresa pentru a trece la.gT, iT și eQ determină ce stare este verificată. greaterThan, lessThan și equalTo sunt intrările de la ALU care indică rezultatul comparației dintre A și B. Pe marginea creșterii ceasului Clk inputCount și inputAddress sunt citite în registre.
  • Descrierea ieșirilor: outputJmp este adresa în care va citi contorul de programe.
  • Locul general în sistem: acest modul gestionează salturile condiționate și necondiționate pentru computer. Pe baza intrărilor gT, iT și eQ, modulul determină ce condiție trebuie verificată și dacă acea condiție este adevărată sau falsă. Dacă condiția este adevărată, va afișa adresa instrucțiunii la care săriți, în caz contrar, va genera numărul următoarei instrucțiuni.

binToBCD

  • Descrierea intrărilor: numerotați numărul de 10 biți pentru a converti în zecimal codat binar.
  • Descrierea ieșirilor: sute de cifre în locul sutelor numărului binar. zeci cifra în locul zecilor numărului binar. cele cifră în locul celor ale numărului binar.
  • Locul general în sistem: Acest modul convertește numărul de 10 biți din registrul de ieșire în BCD pentru ca driverul nostru de afișare din patru cifre să afișeze numărul în zecimal pe afișajul cu 7 segmente.

fourDigitDriver

  • Descrierea intrărilor: numărul este intrarea binară pe 16 biți care este condusă către decodor. inClk este ceasul intern al plăcilor Basys și este utilizat pentru un separator de ceas. RST resetează ceasul utilizat pentru a conduce cifrele.
  • Descrierea ieșirilor: anodul determină care cifră va fi iluminată. cifră este numărul de intrare în decodor.
  • Locul general în sistem: Acest modul conduce decodorul pentru a afișa numărul BCD pe afișaj.

decodor

  • Descrierea intrărilor: inputNumber este cifra care vine de la driver și care va fi decodificată.
  • Descrierea ieșirilor: catozii determină ce catozi vor fi aprinși pentru a afișa cifra dorită.
  • Locul general în sistem: Acest modul decodează cifra care urmează să fie afișată pe afișajul pe 7 segmente.

fourDigitDisplay

  • Descrierea intrărilor: numărul este numărul care trebuie afișat pe afișajul pe 7 segmente. eroare indică când afișajul ar trebui să citească „Err”. Clk este semnalul de ceas pe care afișajul rulează. Acest semnal trebuie să fie în jur de 60 Hz, astfel încât afișajul să poată afișa simultan toate cele 4 cifre.
  • Descrierea ieșirilor: anodul determină care cifră este activată. catod determină ce catoduri sunt activate pentru a afișa cifra dorită.
  • Locul general în sistem: Acest modul afișează un număr pe afișajul pe 7 segmente. Consultați manualul de instrucțiuni al plăcii Basys 3 pentru informații despre catodii și anodii care se activează pentru a utiliza afișajul. Când bitul de eroare este ridicat, pe afișaj apare „Err”.

outputMUX

  • Descrierea intrărilor: progModeInput determină ce leduri sunt activate în timpul modului de programare. runModeInput determină ce leduri sunt activate în timpul modului de rulare. modeSelect este bitul de selectare sau control pentru MUX.
  • Descrierea ieșirilor: ledOutput indică ce leduri vor fi activate.
  • Locul general în sistem: În funcție de modul în care se află computerul (program sau rom), MUX va porni leduri diferite. În modul program (modeSelect este '0'), MUX pornește ledul pentru a semăna cu locația de memorie în care se află computerul și cu ce conține. În modul de rulare (modeSelect este '1'), MUX este utilizat pentru depanare, dar poate fi setat pentru a afișa orice altceva.

clockDivider

  • Descrierea intrărilor: stop citește cei cinci biți MSB din magistrală pentru a detecta o comandă de oprire („11111”) și oprește ceasul. inputClk este semnalul de ceas intern al plăcii Basys 3.
  • Descrierea ieșirilor: ouputClk este noul ceas care a fost încetinit.
  • Locul general în sistem: acest ceas este utilizat pentru a încetini computerul pentru a permite utilizatorului să determine ce se întâmplă. Ceasul poate rula mult mai repede, cu toate acestea, în prezent este setat la 2 Hz.

triStateBuffer

  • Descrierea intrărilor: Din este intrarea de 5 biți care intră în buffer. Ep este bitul de control.
  • Descrierea ieșirilor: Dout este ieșirea de 5 biți a bufferului
  • Locul general în sistem: Când bitul de control Ep este activ, bufferul transmite intrarea. Când bitul de control nu este activ, bufferul nu produce nimic.

tenBitDRegister

  • Descrierea intrărilor: Dbus este intrarea către care se află registrul. Clk permite registrului să citească date pe o margine de ceas în creștere. ARST setează registrul la 0 asincron. Când outputEnable este scăzut, conținutul registrului este ieșirea. Când readIn este scăzut, registrul blochează Dbus pe marginea creșterii ceasului.
  • Descrierea ieșirilor: Qbus este ieșirea registrului
  • Locul general în sistem: registrul este utilizat de mai multe ori pe tot computerul și este utilizat pentru a stoca informații atunci când efectuați operațiuni.

fiveBitDRegister

  • Descrierea intrărilor: Dbus este intrarea către care se află registrul. Clk permite registrului să citească date pe o margine de ceas în creștere. ARST setează registrul la 0 asincron. Când outputEnable este scăzut, conținutul registrului este ieșirea. Când readIn este scăzut, registrul blochează Dbus pe marginea ceasului în creștere.
  • Descrierea ieșirilor: Qbus este ieșirea registrului.
  • Locul general în sistem: registrul este utilizat de mai multe ori pe tot computerul și este utilizat pentru a stoca informații atunci când efectuați operațiuni.

Pasul 3: Cod

Mai jos este un folder care conține constrângerea și fișierele sursă pentru computerul de 10 biți.

Pasul 4: Demo și eșantion de cod

Videoclipul de mai sus arată cum să programați computerul pe 10 biți pe placa Basys 3 FPGA. Un pdf care conține codurile op și un exemplu de program este, de asemenea, atașat mai jos.

Recomandat: