Sisällysluettelo:

Kymmenen bittinen tietokone - VHDL: 4 vaihetta
Kymmenen bittinen tietokone - VHDL: 4 vaihetta

Video: Kymmenen bittinen tietokone - VHDL: 4 vaihetta

Video: Kymmenen bittinen tietokone - VHDL: 4 vaihetta
Video: Digilent Nexys 4 unboxing | My next MEGA65 project! 2024, Heinäkuu
Anonim
Kymmenen bittinen tietokone - VHDL
Kymmenen bittinen tietokone - VHDL

Tuotanto: Tyler Starr ja Ezzeedden Gazali

Johdanto

Tämä projekti valmistui osana CPE 133: n lopullista hanketta Cal Poly SLO: ssa. Se on loistava projekti henkilölle, joka haluaa ymmärtää, miten tietokoneet toimivat alimmalla tasollaan ja miten he saavuttavat tehtävänsä. Projekti on mallinnettu Albert Malvinon Digital Digital Electronics -kirjassa kuvatun 8-bittisen SAP-tietokoneen mukaan. Olemme kuitenkin lisänneet tietokoneen 10-bittiseksi, jotta voimme ottaa käyttöön lisää op-koodeja (toimintakoodeja). Käyttäjä voi ohjelmoida tietokoneen suorittamaan tiettyjä toimintoja syöttämällä tiettyjä ohjeita.

Järjestelmän ja piirin arkkitehtuuri:

Tietokone on kirjoitettu VHDL -muodossa ja se on Digilentin Basys 3 -levyllä. Tulot yhdistetään levyn pohjassa oleviin kytkimiin. Palautus- ja kirjoitustoiminnoissa käytetään kahta kosketuskytkintä. Tulos näkyy piirilevyn 7 -segmenttinäytössä.

Tietokone jaetaan pienempiin piireihin (moduuleihin), jotka käsittelevät erilaisia toimintoja. Jokainen moduuli selitetään yksityiskohtaisesti seuraavissa vaiheissa.

Vaihe 1: Materiaalit

Materiaalit
Materiaalit

Tässä projektissa tarvitaan vain Digilentin Basys3 FPGA -kortti ja mikro -USB -johto kortin liittämiseksi tietokoneeseen.

Vaihe 2: Piirimoduulien lohkokaavio

Piirimoduulien lohkokaavio
Piirimoduulien lohkokaavio
Piirimoduulien lohkokaavio
Piirimoduulien lohkokaavio
Piirimoduulien lohkokaavio
Piirimoduulien lohkokaavio

Yllä olevat lohkokaaviot esittävät 10-bittisen tietokoneen muodostavat eri piirimoduulit. Alla on kuvaukset kustakin yksittäisestä osasta/moduulista, jotka on esitetty yllä olevissa kaavioissa.

Ohjelmalaskuri

Tulojen kuvaus: Tulo on 5 -bittinen sisääntulo numeron lataamiseksi ohjelmalaskuriin. Cp kun korkea laskuri laskee kellon reunoihin. Clr nollaa laskurin 0. Ep, kun korkea laskuri antaa nykyisen laskurin. Sp, kun laskuri on korkea, laskee tulon numeron

  • Lähtöjen kuvaus:

    lähtö on kopio laskusta käytettäväksi LED-valoissa 0-15. Count tuottaa nykyisen laskurin.

  • Yleinen paikka järjestelmässä: Tämä laskuri seuraa muistipaikkaa, jossa ohjelma on. Kaikki ohjelmat alkavat muistiosoitteesta 00000 (0) ja nousevat arvoon 11111 (31), ellei pysäytystä käytetä. Hyppulausekkeissa ohjelmalaskuri laskee edelleen osoitteesta, johon ohjelma hyppää.

Tulo MUX

  • Tulojen kuvaus: Osoite ottaa tulon kytkimiltä 11 - 15. MAR ottaa tulon 10 -bittisestä rekisteristä, jota käytetään MAR: na. Ohjelma ohjaa, mikä tulo reititetään lähtöön.
  • Lähtöjen kuvaus: lähtö reitittää valitun tulon RAM -muistiin.
  • Yleinen paikka järjestelmässä: Tämä MUX määrittää, reititetäänkö osoite kytkimistä tai väylästä RAM -muistiin. Ohjelmointitilassa reitittimien osoite reititetään ja käyttötilassa väylän osoite reititetään.

ramMUX

  • Tulojen kuvaus: userInput on tulo, jonka käyttäjä syöttää ohjelmatilassa. aRegInput on A -rekisterin sisältämä data, jota käytetään siirtotoiminnon aikana. ohjaus on tämän MUX -laitteen valinta.
  • Lähtöjen kuvaus: lähtö on 10-bittinen RAM-muistiin syötetty data.
  • Yleinen paikka järjestelmässä: Tämä MUX lähettää 10-bittistä RAM-moduulissa käytettävää syöttötietoa. Kun ohjausbitti on suuri, MUX lähettää tiedot, jotka käyttäjä on syöttänyt ohjelmatilassa. Kun ohjausbitti on alhainen, MUX lähettää tiedot ohjausväylälle.

ramModuuli

  • Tulojen kuvaus: inputData on RAM -muistiin tallennettavia tietoja. inputAddress on paikka, johon tiedot tallennetaan. ohjelma ilmoittaa, onko tietokone ohjelma- tai ajotilassa. readWrite ilmaisee, tapahtuuko luku- tai kirjoitustoimenpide. notCE on RAM -moduulin ohjausbitti. siirto osoittaa, että siirtotoimintoa suoritetaan.
  • Lähtöjen kuvaus: outputDataToBus on data, joka kulkee RAM -muistista väylälle. outputData and output Address ovat tiedot ja osoitteet, jotka menevät käskyrekisteriin.
  • Kokonaispaikka järjestelmässä: RAM -muisti mahdollistaa ohjelmien ja tietojen tallennuksen muistiin ennen ohjelman suorittamista. Kun ohjelma on käynnissä, RAM vastaanottaa osoitteen MAR: lta ja lähettää kyseisen osoitteen tiedot väylälle.

addressROM

  • Tulojen kuvaus: opCode on tulo, joka sisältää tietokoneen suorittaman opcode -osoitteen
  • Lähtöjen kuvaus: opCodeStart on muistiosoite, joka osoittaa vastaavan opCode-laitteen ensimmäisen mikrokäskyn sijainnin.
  • Yleinen paikka järjestelmässä: Tämä moduuli ottaa lukitun mikrokäskyn ja lähettää muistipaikan, joka vastaa kyseisen mikrokäskysarjan alkua.

ringCounter

  • Tulojen kuvaus: nollaus asettaa laskurin takaisin arvoon 100000 (ensimmäinen "T -tila"). Clk lisää laskuria yhdellä laskevalla kellon reunalla. NOP osoittaa, että nykyinen tila/sykli on "ei toimintaa" -sykli.
  • Lähtöjen kuvaus: count on laskurin lähtö.
  • Kokonaispaikka järjestelmässä: Rengaslaskuri ohjaa esiasetettavaa laskuria ja rajaa kuusi mikrovaihetta kussakin käskysyklissä (T1-T6).

preCounter

  • Tulojen kuvaus: opCodeStart on suoritettavan opCode-mikroohjeiden muistipaikka. T1 palauttaa laskurin arvoon 0, kun se on korkea. Kun T3 on korkea, opCodeStart ladataan ja laskenta jatkuu tästä paikasta jäljellä olevien 3 jakson ajan (T4-T6). Clr asettaa laskurin 0. Clk lisäyslaskuri yhdellä putoavalla reunalla.
  • Lähtöjen kuvaus: controlWordLocation tulostaa suoritettavan ohjaussanan muistipaikan.
  • Kokonaispaikka järjestelmässä: Jokaisessa op-koodissa on 3 mikro-ohjetta. Laskuri kasvaa 1: llä alkaen 0: sta ensimmäisten 3 jakson aikana (noutosykli). Soittolaskuri käynnistää laskurin, joka lataa osoitteen opCodeStartiin, ja kasvaa 1: llä jäljellä olevien kolmen jakson aikana. Tällä tavalla preCounter ohjaa suoritettavien mikro-ohjeiden järjestystä.

controlROM

  • Tulojen kuvaus: controlWordLocation on controlWordin osoite, jonka controlROM antaa. NOP ilmaisee, että sijainti on "ei toimintaa" -paikka.
  • Lähtöjen kuvaus: controlWord on ohjaussana, joka mahdollistaa/poistaa käytöstä eri tietokonemoduulit halutun toiminnon suorittamiseksi.
  • Yleinen paikka järjestelmässä: Tämä moduuli dekoodaa muistipaikan preCounterista ja lähettää controlWordin halutulle toiminnolle.

ALU

  • Tulojen kuvaus: A ja B ovat syötteitä rekisteristä A ja rekisteristä B, joille ALU suorittaa aritmeettiset ja logiikkaoperaatiot. Kun vähennys on aktiivinen, se osoittaa, että B vähennetään A: sta.
  • Lähtöjen kuvaus: tulos on tulos A: n ja B: n lisäämisestä tai B: n vähentämisestä A: sta. Lähdöt suurempia kuin pienempiä ja yhtäläisiä ilmaisemaan, käytetäänkö (AB tai A = B) ja niitä käytetään ehdollisessa hyppymoduulissa. virhe osoittaa ylivuotoa tai alivuotoa aktiivisena.
  • Kokonaispaikka järjestelmässä: ALU sisältää tietokoneen suorittamien aritmeettisten ja loogisten toimintojen logiikan. Tämä moduuli voi lisätä ja vähentää kaksi 10-bittistä binäärilukua. ALU voi myös määrittää, onko A> B, A

ehdollinenJmp

  • Tulojen kuvaus: inputCountia käytetään lukemaan nykyinen lukema. inputAddress -osoitetta käytetään lukitsemaan osoite, johon siirrytään. loadFromRegister kun alhaiset salvat inputAddress. loadCount kun alhaiset salvat inputCount. kun outputEnable on alhainen, lähtö on asetettu osoitteeseen, johon hyppää. gT, iT ja eQ määrittävät, mikä ehto tarkistetaan. suuremmat kuin pienemmät ja yhtä suuret ovat ALU: n tulot, jotka ilmaisevat A: n ja B: n välisen vertailun tuloksen. Clk: n nousevalla kellon reunalla inputCount ja inputAddress luetaan rekistereihin.
  • Lähtöjen kuvaus: outputJmp on osoite, johon ohjelmalaskuri lukee.
  • Yleinen paikka järjestelmässä: tämä moduuli käsittelee ehdolliset ja ehdottomat hyppyt tietokoneelle. Tulojen gT, iT ja eQ perusteella moduuli määrittää, mikä ehto tarkistetaan ja onko ehto totta vai epätosi. Jos ehto on tosi, se antaa käskyn osoitteen, johon hypätä, muussa tapauksessa se antaa seuraavan käskyn määrän.

binToBCD

  • Tulojen kuvaus: numeroi 10 -bittinen luku, joka muunnetaan binäärikoodatuksi desimaaliksi.
  • Lähtöjen kuvaus: satoja binaariluvun satoja numeroita. kymmenen numeroa binaariluvun kymmenessä paikassa. binaariluvun ykkössijalla oleva numero.
  • Kokonaispaikka järjestelmässä: Tämä moduuli muuntaa 10 -bittisen numeron lähtörekisteristä BCD: ksi, jotta nelinumeroinen näytönohjaimemme näyttää numeron desimaaliluvulla 7 -segmentin näytössä.

fourDigitDriver

  • Tulojen kuvaus: numero on 16 -bittinen binääritulo, joka ohjataan dekooderiin. inClk on Basys -levyjen sisäinen kello, jota käytetään kellonjakajana. RST nollaa numeroiden käyttämiseen käytetyn kellon.
  • Lähtöjen kuvaus: anodi määrittää, mikä numeropaikka valaistaan. numero on dekooderin tulonumero.
  • Yleinen paikka järjestelmässä: Tämä moduuli ajaa dekooderin antamaan BCD -numeron näytölle.

dekooderi

  • Tulojen kuvaus: inputNumber on numero, joka tulee ohjaimesta ja joka dekoodataan.
  • Lähtöjen kuvaus: katodit määräävät, mitkä katodit kytketään päälle halutun numeron näyttämiseksi.
  • Kokonaispaikka järjestelmässä: Tämä moduuli dekoodaa numeron, joka näytetään 7 -segmenttinäytössä.

fourDigitDisplay

  • Tulojen kuvaus: numero on numero, joka näytetään 7 segmentin näytössä. virhe osoittaa, milloin näytön pitäisi lukea "Err". Clk on kellosignaali, jossa näyttö on käynnissä. Tämän signaalin on oltava noin 60 Hz, jotta näyttö voi näyttää kaikki 4 -numeroiset paikat samanaikaisesti.
  • Lähtöjen kuvaus: anodi määrittää, mikä numeropaikka on käytössä. katodi määrittää, mitkä katodit aktivoidaan halutun numeron näyttämiseksi.
  • Kokonaispaikka järjestelmässä: Tämä moduuli näyttää numeron 7 segmentin näytössä. Katso Basys 3 -levyn käyttöoppaasta tietoja siitä, mitkä katodit ja anodit aktivoituvat näytön käyttöä varten. Kun virhebitti on suuri, näytössä näkyy "Err".

lähtö MUX

  • Tulojen kuvaus: progModeInput määrittää mitkä ledit kytketään päälle ohjelmointitilassa. runModeInput määrittää, mitkä ledit kytketään päälle ajon aikana. modeSelect on MUX: n valinta- tai ohjausbitti.
  • Lähtöjen kuvaus: ledOutput ilmaisee, mitkä ledit kytketään päälle.
  • Yleinen paikka järjestelmässä: Riippuen tietokoneen tilasta (ohjelma tai rommi), MUX kytkee päälle eri ledit. Ohjelmointitilassa (modeSelect on '0') MUX kytkee ledit muistuttamaan muistipaikkaa, jossa tietokone on ja mitä se sisältää. Käyttötilassa (modeSelect on '1') MUX -laitetta käytetään virheenkorjaukseen, mutta se voidaan asettaa näyttämään mitä tahansa muuta.

kello jakaja

  • Tulojen kuvaus: stop lukee viisi MSB -bittiä väylältä pysäytyskomennon ('11111') havaitsemiseksi ja pysäyttää kellon. inputClk on Basys 3 -levyn sisäinen kellosignaali.
  • Lähtöjen kuvaus: ouputClk on uusi kello, joka on hidastettu.
  • Yleinen paikka järjestelmässä: Tätä kelloa käytetään hidastamaan tietokonetta, jotta käyttäjä voi määrittää, mitä tapahtuu. Kello voi toimia paljon nopeammin, mutta se on tällä hetkellä asetettu 2 Hz: iin.

triStateBuffer

  • Tulojen kuvaus: Din on puskuriin menevä 5 -bittinen tulo. Ep on ohjausbitti.
  • Lähtöjen kuvaus: Dout on puskurin 5 -bittinen lähtö
  • Kokonaispaikka järjestelmässä: Kun ohjausbitti Ep on aktiivinen, puskuri antaa tulon. Kun ohjausbitti ei ole aktiivinen, puskuri ei tuota mitään.

tenBitDRegister

  • Tulojen kuvaus: Dbus on tulo, johon rekisteri tulee. Clk sallii rekisterin lukea tietoja nousevan kellon reunasta. ARST asettaa rekisterin asynkronisesti arvoon 0. Kun outputEnable on alhainen, rekisterin sisältö on lähtö. Kun ReadIn on alhainen, rekisteri lukitsee Dbus -kellon nousevan reunan.
  • Lähtöjen kuvaus: Qbus on rekisterin lähtö
  • Yleinen paikka järjestelmässä: Rekisteriä käytetään useita kertoja koko tietokoneessa, ja sitä käytetään tietojen tallentamiseen suoritettaessa toimintoja.

fiveBitDRegister

  • Tulojen kuvaus: Dbus on tulo, johon rekisteri tulee. Clk sallii rekisterin lukea tietoja nousevan kellon reunasta. ARST asettaa rekisterin asynkronisesti arvoon 0. Kun outputEnable on alhainen, rekisterin sisältö on lähtö. Kun ReadIn on alhainen, rekisteri lukitsee Dbus -kellon nousevan reunan.
  • Lähtöjen kuvaus: Qbus on rekisterin lähtö.
  • Yleinen paikka järjestelmässä: Rekisteriä käytetään useita kertoja koko tietokoneessa, ja sitä käytetään tietojen tallentamiseen suoritettaessa toimintoja.

Vaihe 3: Koodi

Alla on kansio, joka sisältää 10-bittisen tietokoneen rajoitukset ja lähdetiedostot.

Vaihe 4: Esittely- ja mallikoodi

Yllä oleva video osoittaa, kuinka ohjelmoida 10-bittinen tietokone Basys 3 FPGA -kortille. Alla on myös pdf, joka sisältää op-koodit ja esimerkkiohjelman.

Suositeltava: