Tartalomjegyzék:

Tíz bites számítógép - VHDL: 4 lépés
Tíz bites számítógép - VHDL: 4 lépés

Videó: Tíz bites számítógép - VHDL: 4 lépés

Videó: Tíz bites számítógép - VHDL: 4 lépés
Videó: 7. Kombinációs logikai áramkörök - 4. rész 2024, Július
Anonim
Tíz bites számítógép - VHDL
Tíz bites számítógép - VHDL

Készítette: Tyler Starr és Ezzeedden Gazali

Bevezetés

Ez a projekt a Cal Poly SLO CPE 133 végleges projektjének részeként fejeződött be. Nagyszerű projekt azok számára, akik szeretnék megérteni, hogyan működnek a számítógépek a legalacsonyabb szinten, és hogyan érik el feladataikat. A projekt az Albert Malvino Digital Computer Electronics című könyvében leírt 8 bites SAP számítógép után készült. A számítógépet azonban 10 bitesre növeltük, hogy több op kódot (működési kódot) lehessen megvalósítani. A felhasználó bizonyos utasítások megadásával programozhatja a számítógépet bizonyos műveletek végrehajtására.

Rendszer és áramkör architektúra:

A számítógép VHDL nyelven íródott, és a Digilent Basys 3 tábláján lesz. A bemenetek a kártya alján található kapcsolókhoz lesznek hozzárendelve. A Reset és Write funkciókhoz két tapintható kapcsolót használnak. A kimenet megjelenik a tábla 7 szegmenses kijelzőjén.

A számítógép kisebb áramkörökre (modulokra) lesz bontva, amelyek különböző műveleteket végeznek. Az egyes modulokat részletesen ismertetjük a következő lépésekben.

1. lépés: Anyagok

Anyagok
Anyagok

Ehhez a projekthez csak a Digilent Basys3 FPGA -kártyája és egy mikro -USB -vezeték szükséges az alaplap számítógéphez való csatlakoztatásához.

2. lépés: Az áramköri modulok blokkdiagramja

Az áramköri modulok blokkdiagramja
Az áramköri modulok blokkdiagramja
Az áramköri modulok blokkdiagramja
Az áramköri modulok blokkdiagramja
Az áramköri modulok blokkdiagramja
Az áramköri modulok blokkdiagramja

A fenti blokkdiagramok a 10 bites számítógépet alkotó különböző áramkörmodulokat mutatják be. Az alábbiakban a fenti ábrákon látható egyes alkatrészek/modulok leírása található.

Program számláló

A bemenetek leírása: a bemenet egy 5 bites bemenet, amely számokat tölt be a programszámlálóba. Cp, ha magas a számláló a leeső óraélre számít. A Clr visszaállítja a számlálót 0. Ep -re, ha magas a számláló az aktuális számot adja ki. Sp, ha a számláló magas, a számot a bemeneten lévő számra állítja

  • Kimenetek leírása:

    A kimenet a számlálás másolata a 0-15 LED-eken való használatra. A Count az aktuális számot adja ki.

  • Általános hely a rendszerben: Ez a számláló nyomon követi a program memóriahelyét. Minden program a 00000 (0) memóriacímmel kezdődik és 11111 (31) -ig megy, hacsak leállítást nem használ. Az ugrás utasításokban a programszámláló továbbra is attól a címtől számol, amelyre a program ugrik.

Bemenet MUX

  • Bemenetek leírása: A cím a 11 -től 15 -ig terjedő kapcsolótól veszi a bemenetet. A MAR átveszi a bemenetet a MAR -ként használt 10 bites regiszterből. A program vezérli, hogy melyik bemenetet kell a kimenethez irányítani.
  • A kimenetek leírása: a kimenet a kiválasztott bemenetet a RAM -hoz irányítja.
  • Általános hely a rendszerben: Ez a MUX határozza meg, hogy a címet a kapcsolókból vagy a buszból a RAM -ba irányítja. Program módban a kapcsolók címét továbbítják, és üzemmódban a busztól érkező címet.

ramMUX

  • A bemenetek leírása: userInput az a bemenet, amelyet a felhasználó programmódban ad meg. Az aRegInput az A regiszterben található adatok, amelyeket egy költöztetési művelet során használnak. a vezérlő a kiválasztott ehhez a MUX -hoz.
  • A kimenetek leírása: a kimenet a 10 bites adatbevitel a RAM-ba.
  • Általános hely a rendszerben: Ez a MUX adja ki a RAM-modulban használt 10 bites bemeneti adatokat. Ha a vezérlőbit magas, a MUX kimeneti adatok, amelyeket a felhasználó program módban adott meg. Ha a vezérlő bit alacsony, a MUX az adatokat a vezérlő buszon adja ki.

ramModule

  • A bemenetek leírása: inputData a RAM -ban tárolt adatok. Az inputAddress az a hely, ahol az adatokat tárolják. program jelzi, ha a számítógép program vagy futás üzemmódban van. A readWrite jelzi, hogy olvasási vagy írási művelet történik -e. A notCE a RAM modul vezérlő bitje. A mozgatás azt jelzi, hogy mozgatási műveletet hajtanak végre.
  • A kimenetek leírása: outputDataToBus azok az adatok, amelyek a RAM -ból a buszba kerülnek. outputData and output Address azok az adatok és címek, amelyek az utasításregiszterbe kerülnek.
  • Általános hely a rendszerben: A RAM lehetővé teszi a programok és adatok tárolását a memóriában a program futtatása előtt. A program futása után a RAM kap egy címet a MAR -tól, és ezen a címen adja ki az adatokat a busznak.

addressROM

  • Bemenetek leírása: Az opCode az a bemenet, amely a számítógép által végrehajtott opcode címét tartalmazza
  • A kimenetek leírása: Az opCodeStart az a memóriacím, amely a megfelelő opCode első mikroutasítási helyét jelzi.
  • Általános hely a rendszerben: Ez a modul átveszi a reteszelt mikroutasítást, és kiadja a memóriahelyet, amely megfelel a mikroutasítási sorozat kezdetének.

ringCounter

  • Bemenetek leírása: a reset visszaállítja a számlálót 100000 -re (az első "T állapot"). Clk eggyel növeli a számlálót az eső óra szélén. A NOP azt jelzi, hogy az aktuális állapot/ciklus "nincs művelet" ciklus.
  • A kimenetek leírása: a count a számláló kimenete.
  • Általános hely a rendszerben: A gyűrűszámláló vezérli az előre beállítható számlálót, és körvonalazza a hat mikrolépést minden utasításciklusban (T1-T6).

preCounter

  • Bemenetek leírása: Az opCodeStart a végrehajtandó opCode mikroutasítások memóriahelye. A T1 visszaállítja a számlálót 0 -ra, ha magas. Ha a T3 magas, az opCodeStart betöltődik, és a számlálás onnan folytatódik a fennmaradó 3 ciklusban (T4-T6). A Clr 0 -ra állítja a számlálót.
  • A kimenetek leírása: controlWordLocation a végrehajtandó vezérlőszó memóriahelyét adja ki.
  • Általános hely a rendszerben: Minden op-kód 3 mikroutasítást tartalmaz. A számláló 1 -gyel növekszik 0 -tól kezdve az első 3 ciklusban (lekérési ciklus). A számlálót ezután a csengetési számláló aktiválja, hogy betöltse a címet az opCodeStart -ra, és 1 -el növeli a fennmaradó 3 ciklus során. Ily módon az előszámláló vezérli a végrehajtandó mikroutasítások sorrendjét.

controlROM

  • Bemenetek leírása: controlWordLocation a controlWord címe, amelyet a controlROM fog kiadni. A NOP azt jelzi, hogy a hely "művelet nélküli" hely.
  • A kimenetek leírása: controlWord az a vezérlőszó, amely lehetővé teszi/letiltja a különböző számítógépes modulokat a kívánt művelet végrehajtásához.
  • Általános hely a rendszerben: Ez a modul dekódolja a memória helyét az előszámlálóból, és kimeneti a controlWord -ot a kívánt művelethez.

ALU

  • Bemenetek leírása: Az A és a B az A regiszter és a B regiszter bemenetei, amelyeken az ALU elvégzi az aritmetikai és logikai műveleteket. Ha a kivonás aktív, ez azt jelzi, hogy B -t kivonják A -ból.
  • A kimenetek leírása: az eredmény A és B hozzáadása, vagy B kivonása A -ból. A nagyobbThan, lessThan és hiba túl- vagy alulfolyást jelez aktív állapotban.
  • Általános hely a rendszerben: Az ALU tartalmazza a számítógép által végrehajtott aritmetikai és logikai műveletek logikáját. Ez a modul össze tud adni és kivonni két 10 bites bináris számot. Az ALU azt is meghatározhatja, hogy A> B, A

feltételesJmp

  • A bemenetek leírása: inputCount az aktuális szám rögzítésére szolgál. Az inputAddress az ugrott cím rögzítésére szolgál. loadFromRegister, amikor alacsony reteszek inputAddress. loadCount amikor alacsony reteszek inputCount. amikor a outputEnable alacsony, a kimenet a címre van állítva, ahová ugrani lehet. gT, iT és eQ határozzák meg, hogy melyik állapotot ellenőrzik. nagyobb, mint kevesebb, és egyenlő, hogy az ALU bemenetei jelzik az A és a B összehasonlítás eredményét.
  • A kimenetek leírása: outputJmp az a cím, amelyet a programszámláló beolvas.
  • Általános hely a rendszerben: ez a modul feltételes és nem feltételes ugrásokat kezel a számítógép számára. A gT, iT és eQ bemenetek alapján a modul meghatározza, hogy melyik feltételt kell ellenőrizni, és hogy ez a feltétel igaz vagy hamis. Ha a feltétel igaz, akkor kiadja az utasítás címét, amelyre ugrani kell, ellenkező esetben a következő utasítás számát adja ki.

binToBCD

  • Bemenetek leírása: számolja meg a 10 bites számot, amelyet binárisan kódolt tizedesre kell konvertálni.
  • A kimenetek leírása: százas számjegy a bináris szám százas helyén. tízes számjegy a bináris szám tízes helyén. a kettes a bináris szám egyes helyén.
  • Általános hely a rendszerben: Ez a modul átalakítja a 10 bites számot a kimeneti regiszterből BCD -re annak érdekében, hogy négyjegyű kijelző -illesztőprogramunk a számot decimális formában jelenítse meg a 7 szegmenses kijelzőn.

fourDigitDriver

  • Bemenetek leírása: a szám a 16 bites bináris bemenet, amelyet a dekódoló hajt meg. Az inClk a Basys táblák belső órája, amelyet óraosztónak használnak. Az RST visszaállítja a számjegyek vezérléséhez használt órát.
  • A kimenetek leírása: az anód határozza meg, hogy melyik számjegyű hely kerül megvilágításra. számjegy a dekódoló bemeneti száma.
  • Általános hely a rendszerben: Ez a modul hajtja a dekódert, hogy a BCD számot megjelenítse a kijelzőn.

dekódoló

  • Bemenetek leírása: inputNumber az illesztőprogramból származó szám, amely dekódolásra kerül.
  • A kimenetek leírása: a katódok határozzák meg, hogy mely katódok kapcsolnak be a kívánt számjegy megjelenítéséhez.
  • Általános hely a rendszerben: Ez a modul dekódolja a 7 szegmenses kijelzőn megjeleníteni kívánt számjegyet.

fourDigitDisplay

  • Bemenetek leírása: szám a 7 szegmenses kijelzőn megjelenítendő szám. hiba jelzi, hogy mikor kell a kijelzőn az "Err" feliratot olvasni. A Clk az órajel, amelyen a kijelző működik. Ennek a jelnek körülbelül 60 Hz -nek kell lennie, hogy a kijelző mind a 4 számjegyű helyet egyszerre tudja megjeleníteni.
  • Kimenetek leírása: az anód határozza meg, hogy melyik számjegy hely engedélyezett. A katód határozza meg, hogy mely katódok aktiválódnak a kívánt számjegy megjelenítéséhez.
  • Általános hely a rendszerben: Ez a modul egy számot jelenít meg a 7 szegmenses kijelzőn. A Basys 3 tábla használati útmutatójában talál információt arról, hogy mely katódok és anódok aktiválódnak a kijelző használatához. Ha a hiba bit magas, a kijelzőn az "Err" felirat látható.

kimenet: MUX

  • Bemenetek leírása: A progModeInput határozza meg, hogy mely ledek kapcsolnak be programozási módban. A runModeInput meghatározza, hogy mely LED -ek vannak bekapcsolva futás közben. modeSelect a MUX kiválasztó vagy vezérlő bitje.
  • A kimenetek leírása: ledOutput jelzi, hogy mely ledek kapcsolnak be.
  • Általános hely a rendszerben: A számítógép módjától (program vagy rum) függően a MUX különböző LED -eket kapcsol be. Program módban (modeSelect '0'), a MUX bekapcsolja a ledeket, hogy hasonlítson a számítógép memóriahelyére és a benne lévő tartalomra. Futtatás üzemmódban (modeSelect '1') a MUX hibakeresésre szolgál, de beállítható bármi más megjelenítésére.

clockDivider

  • Bemenetek leírása: a stop leolvassa az öt MSB bitet a buszról, hogy érzékelje a leállítási parancsot ('11111'), és leállítja az órát. Az inputClk a Basys 3 kártya belső órajele.
  • A kimenetek leírása: Az ouputClk az új óra, amelyet lelassítottak.
  • Általános hely a rendszerben: Ez az óra a számítógép lelassítására szolgál, hogy a felhasználó meghatározhassa, mi történik. Az óra sokkal gyorsabban tud futni, azonban jelenleg 2 Hz -re van beállítva.

triStateBuffer

  • Bemenetek leírása: A Din az 5 bites bemenet, amely a pufferbe kerül. Az Ep a vezérlő bit.
  • A kimenetek leírása: A Dout a puffer 5 bites kimenete
  • Általános hely a rendszerben: Amikor az Ep vezérlőbit aktív, a puffer kimeneti a bemenetet. Ha a vezérlőbit nem aktív, a puffer nem ad ki semmit.

tenBitDRegister

  • Bemenetek leírása: A Dbus az a bemenet, amelyhez a regiszter tartozik. A Clk lehetővé teszi a regiszter számára az adatok olvasását az emelkedő óra szélén. Az ARST aszinkron módon 0 -ra állítja a regisztert. Ha az outputEnable alacsony, a regiszter tartalma a kimenet. Ha a ReadIn alacsony, a regiszter reteszeli a Dbus -t az emelkedő óra szélén.
  • Kimenetek leírása: A Qbus a regiszter kimenete
  • Általános hely a rendszerben: A regisztert többször használják a számítógépen, és információkat tárolnak a műveletek végrehajtása során.

fiveBitDRegister

  • Bemenetek leírása: A Dbus az a bemenet, amelyhez a regiszter tartozik. A Clk lehetővé teszi a regiszter számára az adatok olvasását az emelkedő óra szélén. Az ARST aszinkron módon 0 -ra állítja a regisztert. Ha az outputEnable alacsony, a regiszter tartalma a kimenet. Ha a ReadIn alacsony, a regiszter reteszeli a Dbus -t az emelkedő óra szélén.
  • Kimenetek leírása: A Qbus a regiszter kimenete.
  • Általános hely a rendszerben: A regisztert többször használják a számítógépen, és információkat tárolnak a műveletek végrehajtása során.

3. lépés: Kód

Az alábbiakban egy mappa tartalmazza a 10 bites számítógép korlátozásait és forrásfájljait.

4. lépés: Demo és mintakód

A fenti videó bemutatja, hogyan kell programozni a 10 bites számítógépet a Basys 3 FPGA kártyán. Az op-kódokat és a mintaprogramot tartalmazó pdf is csatolva található az alábbiakban.

Ajánlott: