Мазмұны:

Он биттік компьютер - VHDL: 4 қадам
Он биттік компьютер - VHDL: 4 қадам
Anonim
Он биттік компьютер - VHDL
Он биттік компьютер - VHDL

Орындаған: Тайлер Старр және Эззидден Газали

Кіріспе

Бұл жоба Cal Poly SLO -дағы CPE 133 соңғы жобасы аясында аяқталды. Бұл компьютерлердің ең төменгі деңгейде қалай жұмыс істейтінін және олардың өз міндеттеріне қалай қол жеткізетінін білгісі келетіндер үшін тамаша жоба. Жоба Альберт Мальвиноның Digital Computer Electronics кітабында сипатталған 8 биттік SAP компьютерінен үлгі алады. Дегенмен, біз қосымша кодтарды (жұмыс кодтарын) енгізуге мүмкіндік беру үшін компьютерді 10 биттік деңгейге жеткіздік. Қолданушы белгілі бір нұсқауларды енгізу арқылы компьютерді операциялар жиынтығын бағдарламалай алады.

Жүйе мен схеманың архитектурасы:

Компьютер VHDL -де жазылған және Digilent -тен Basys 3 тақтасында болады. Кірістер тақтаның төменгі жағындағы қосқыштарға салыстырылады. Қалпына келтіру және жазу функциялары үшін екі жанасатын қосқыш қолданылады. Шығару тақтаның 7 сегментті дисплейінде көрсетіледі.

Компьютер әр түрлі операцияларды басқаратын кіші тізбектерге (модульдерге) бөлінеді. Әрбір модуль келесі қадамдарда егжей -тегжейлі түсіндіріледі.

1 -қадам: материалдар

Материалдар
Материалдар

Бұл жобаға Digilent -тен Basys3 FPGA тақтасы мен тақтаны компьютерге қосу үшін микро USB сымы қажет.

2 -қадам: схемалық модульдердің блок -схемасы

Схема модульдерінің блок -схемасы
Схема модульдерінің блок -схемасы
Схема модульдерінің блок -схемасы
Схема модульдерінің блок -схемасы
Схема модульдерінің блок -схемасы
Схема модульдерінің блок -схемасы

Жоғарыдағы блок-схемалар 10-биттік компьютерді құрайтын әртүрлі схемалық модульдерді көрсетеді. Төменде жоғарыдағы диаграммаларда көрсетілген жеке бөліктердің/модульдердің әрқайсысының сипаттамасы берілген.

Бағдарлама есептегіші

Кірістердің сипаттамасы: кіріс - бұл санауышты бағдарлама санауышына жүктеуге арналған 5 биттік кіріс. Cp жоғары болған кезде санауыш құлайтын сағат жиектерін есептейді. Clr есептегішті 0 күйіне қайтарады. Ep жоғары болған кезде санауыш ағымдағы есепті шығарады. Sp жоғары болған кезде санауыш санауды кірістегі санға орнатады

  • Шығарудың сипаттамасы:

    шығыс-0-15 светодиодтарда қолдануға арналған санаудың көшірмесі. Count ағымдағы есепті шығарады.

  • Жүйедегі жалпы орын: Бұл санауыш бағдарлама орналасқан жад орнын қадағалайды. Барлық бағдарламалар 00000 (0) жад адресінен басталады және тоқтаусыз 11111 (31) дейін көтеріледі. Секіру мәлімдемелерінде бағдарлама санағышы бағдарлама өтетін мекен -жайдан санауды жалғастырады.

MUX енгізу

  • Кірістердің сипаттамасы: Мекенжай 11 -ден 15 -ке дейінгі коммутаторлардан кірісті қабылдайды. MAR кірісті MAR ретінде қолданылатын 10 биттік регистрден алады. Бағдарлама қай кіріс шығысқа бағытталатынын басқарады.
  • Шығу сипаттамасы: шығыс таңдалған кірісті жедел жадқа жібереді.
  • Жүйенің жалпы орны: Бұл MUX адресті коммутаторлардан немесе шинадан жедел жадқа бағыттауды анықтайды. Бағдарлама режимінде коммутаторлардың мекенжайы бағытталады, ал жұмыс режимінде шинаның мекенжайы бағытталады.

ramMUX

  • Кірістердің сипаттамасы: userInput - бұл қолданушы бағдарлама режимінде енгізетін кіріс. aRegInput - бұл А регистріндегі деректер, ол жылжыту операциясы кезінде қолданылады. басқару - бұл MUX үшін таңдау.
  • Шығудың сипаттамасы: шығыс-бұл жедел жадыға 10 биттік деректерді енгізу.
  • Жүйеде жалпы орын: Бұл MUX RAM модулінде қолданылатын 10 биттік кіріс деректерін шығарады. Басқару биті жоғары болған кезде MUX қолданушы бағдарлама режимінде енгізген деректерді шығарады. Басқару биті төмен болғанда, MUX басқару шинасындағы деректерді шығарады.

ramModule

  • Кірістердің сипаттамасы: inputData - бұл жедел жадыда сақталатын деректер. inputAddress - бұл деректер сақталатын орын. Бағдарлама компьютердің бағдарлама немесе жұмыс режимінде екенін көрсетеді. readWrite оқу немесе жазу операциясының орын алатынын көрсетеді. notCE - жедел жад модулінің басқару биті. жылжыту жылжыту операциясының орындалатынын көрсетеді.
  • Шығу сипаттамасы: outputDataToBus - бұл ЖЖҚ -дан шинаға өтетін деректер. outputData және output Address - командалар регистріне түсетін деректер мен адрес.
  • Жүйеде жалпы орын: ЖЖҚ бағдарлама мен деректерді жадта жұмыс істемес бұрын сақтауға мүмкіндік береді. Бағдарлама іске қосылғаннан кейін жедел жады MAR -дан адресті алады және сол адрестегі мәліметтерді шинаға шығарады.

РОМ

  • Кірістердің сипаттамасы: opCode - бұл компьютер орындайтын кодтың адресін қамтитын кіріс
  • Шығудың сипаттамасы: opCodeStart-бұл сәйкес опКодтың бірінші микро нұсқаулық орнын көрсететін жад мекенжайы.
  • Жүйенің жалпы орны: Бұл модуль бекітілген шағын нұсқаулықты қабылдайды және сол микро нұсқаулықтың басталуына сәйкес келетін жад орнын шығарады.

қоңырау қарсы

  • Кірістердің сипаттамасы: қалпына келтіру есептегішті 100000 -ға қайтарады (бірінші «Т күйі»). Clk есептегішті құлап жатқан сағат жиегіне біртіндеп арттырады. NOP ағымдағы күйдің/циклдің «жұмыс істемейтін» цикл екенін көрсетеді.
  • Шығу сипаттамасы: санау - санауыштың шығысы.
  • Жүйедегі жалпы орын: Сақиналы есептегіш алдын ала реттелетін есептегішті басқарады және әрбір нұсқаулық циклінде алты микро қадамды анықтайды (T1-T6).

алдын ала қарсы

  • Кірістердің сипаттамасы: opCodeStart-бұл орындалатын опКодқа арналған микро нұсқаулықтардың жад орны. T1 жоғары болған кезде есептегішті 0 күйіне қайтарады. T3 жоғары болған кезде, opCodeStart жүктеледі және қалған 3 циклде (T4-T6) санау сол жерден жалғасады. Clr есептегішті 0 -ге орнатады. Clk біртіндеп төмендейді.
  • Шығыс сипаттамасы: controlWordLocation орындалатын басқару сөзінің жад орнын шығарады.
  • Жүйеде жалпы орын: Әр оп-кодта 3 микро нұсқаулық бар. Есептегіш алғашқы 3 цикл үшін 0 -ден бастап 1 -ге артады (алу циклы). Есептегіш сақиналы есептегішпен мекен -жайды opCodeStart -қа жүктеу үшін іске қосылады және қалған 3 цикл үшін 1 -ге артады. Осылайша PreCounter орындалатын микро нұсқаулардың реттілігін бақылайды.

ROM

  • Кірістердің сипаттамасы: controlWordLocation - бұл controlROM шығаратын controlWord адресі. NOP орналасудың «жұмыс істемейтін» орын екенін көрсетеді.
  • Шығу сипаттамасы: controlWord - бұл әр түрлі компьютерлік модульдерге қажетті әрекетті орындауға мүмкіндік беретін/ажырататын басқару сөзі.
  • Жүйедегі жалпы орын: Бұл модуль жад орнын алдын ала есептегіштен шифрлайды және қажетті әрекетті орындау үшін controlWord шығарады.

ALU

  • Кірістердің сипаттамасы: А және В - бұл А регистрі мен В регистрінің кірістері, олар ALU арифметикалық және логикалық операцияларды орындайды. Шығару белсенді болғанда, бұл В -дан А -дан шығарылатынын көрсетеді.
  • Шығу сипаттамасы: нәтиже - А мен В қосудың немесе А -дан В шегерудің нәтижесі. (AB, немесе A = B) және шартты секіру модулінде қолданылатынын көрсету үшін үлкенірек, кіші және теңдеу нәтижелері. қате белсенді кезде толып кетуді немесе асып кетуді көрсетеді.
  • Жүйенің жалпы орны: ALU компьютермен орындалатын арифметикалық және логикалық операциялардың логикасын қамтиды. Бұл модуль екі 10-разрядты екілік сандарды қосады және азайтады. ALU сонымен қатар A> B, A екенін анықтай алады

шарттыJmp

  • Кірістерді сипаттау: inputCount ағымдағы есепті бекіту үшін қолданылады. inputAddress өтетін мекенжайды бекіту үшін қолданылады. loadFromРегистратор төмен кірген кезде тіркеңіз. loadCount төмен құлыпталған кезде inputCount. outputEnable төмен болғанда, шығыс адреске орнатылады, ол to.gT, iT және eQ өту үшін қандай шарттың тексерілетінін анықтайды. үлкенірек, кіші, тең және тең - бұл ALU кірістері, олар А мен В арасындағы салыстыру нәтижесін көрсетеді.
  • Шығу сипаттамасы: outputJmp - бұл бағдарлама санағышы оқитын адрес.
  • Жүйенің жалпы орны: бұл модуль компьютерге шартты және шартсыз секірулерді орындайды. GT, iT және eQ кірістеріне сүйене отырып, модуль қандай шартты тексеру керектігін және бұл шарттың шын немесе жалған екенін анықтайды. Егер шарт дұрыс болса, ол өтетін нұсқаулықтың адресін шығарады, әйтпесе келесі нұсқаулықтың санын шығарады.

binToBCD

  • Кірістердің сипаттамасы: екілік кодталған ондық бөлшекке айналдыру үшін 10 биттік нөмірді нөмірлеу.
  • Шығарудың сипаттамасы: екілік санның жүздік орнына жүздеген цифр. екілік санның ондықтарындағы ондықтар. екілік санның бірліктеріндегі цифрлар.
  • Жүйенің жалпы орны: Бұл модуль шығыс регистрінен 10 биттік нөмірді BCD -ге түрлендіреді, бұл біздің төрт таңбалы дисплей драйверінің нөмірін 7 сегментті дисплейде ондық бөлшекте көрсету үшін.

fourDigitDriver

  • Кірістердің сипаттамасы: сан - бұл декодерге жіберілетін 16 биттік екілік кіріс. inClk - бұл Basys тақталарының ішкі сағаты және сағат бөлгіш үшін қолданылады. RST цифрларды шығару үшін қолданылатын сағатты қалпына келтіреді.
  • Шығу сипаттамасы: анод қай сандық орын жарықтандырылатынын анықтайды. цифр - бұл декодердің кіріс нөмірі.
  • Жүйенің жалпы орны: Бұл модуль декодерді BCD нөмірін дисплейге шығарады.

декодер

  • Кірістердің сипаттамасы: inputNumber - бұл драйверден келетін және шифры шешілетін цифр.
  • Шығу сипаттамасы: катодтар қажетті цифрды көрсету үшін қосылатын катодтарды анықтайды.
  • Жүйенің жалпы орны: Бұл модуль 7 сегментті дисплейде көрсетілетін санды ашады.

fourDigitDisplay

  • Кірістердің сипаттамасы: сан - 7 сегментті дисплейде көрсетілетін нөмір. қате дисплейде «Err» мәнін оқу керек екенін көрсетеді. Clk - бұл дисплей жұмыс істеп тұрғанын білдіретін сағат белгісі. Бұл сигнал 60 Гц шамасында болуы керек, сондықтан дисплей барлық 4 цифрлық орындарды бір уақытта көрсете алады.
  • Шығу сипаттамасы: анод қай цифрлық орын қосылғанын анықтайды. катод қалаған цифрды көрсету үшін қай катодтар белсендірілгенін анықтайды.
  • Жүйеде жалпы орын: Бұл модуль 7 сегментті дисплейде нөмірді көрсетеді. Дисплейді пайдалану үшін катодтар мен анодтардың қосылатыны туралы ақпарат алу үшін Basys 3 тақтасының нұсқаулығын қараңыз. Қате биті жоғары болған кезде дисплейде «Err» көрсетіледі.

outputMUX

  • Кірістердің сипаттамасы: progModeInput бағдарламалау режимінде қандай светодиодтар қосылатынын анықтайды. runModeInput жұмыс режимінде қандай светодиодтар қосылатынын анықтайды. modeSelect - бұл MUX үшін таңдау немесе басқару биті.
  • Шығудың сипаттамасы: ledOutput қай жарықдиодты қосылатынын көрсетеді.
  • Жүйенің жалпы орны: Компьютердің жұмыс режиміне байланысты (бағдарлама немесе ром) MUX әр түрлі жарықдиодты қосады. Бағдарлама режимінде (modeSelect '0'), MUX светодиодты қосады, ол компьютер орналасқан жад орнына және оның құрамына ұқсайды. Іске қосу режимінде (modeSelect '1'), MUX отладтау үшін пайдаланылады, бірақ басқа нәрсені көрсету үшін орнатылуы мүмкін.

clockDivider

  • Кірістердің сипаттамасы: тоқтату тоқтату пәрменін ('11111') анықтау үшін автобустан MSB -тің бес битін оқиды және сағатты тоқтатады. inputClk - Basys 3 тақтасының ішкі сағаттық сигналы.
  • Шығу сипаттамасы: ouputClk - баяулаған жаңа сағат.
  • Жүйенің жалпы орны: Бұл сағат компьютерді баяулату үшін пайдаланушыға не болып жатқанын анықтауға мүмкіндік береді. Сағат әлдеқайда жылдам жұмыс істей алады, алайда ол қазіргі уақытта 2 Гц -ге орнатылған.

triStateBuffer

  • Кірістердің сипаттамасы: Din - буферге түсетін 5 биттік кіріс. Ep - бұл басқару биті.
  • Шығу сипаттамасы: Dout - буфердің 5 биттік шығысы
  • Жүйеде жалпы орын: Ep басқару биті белсенді кезде буфер кірісті шығарады. Басқару биті белсенді болмаса, буфер ештеңе шығармайды.

tenBitDRegister

  • Кірістердің сипаттамасы: Dbus - бұл регистр енгізетін кіріс. Clk регистрге деректерді сағат тілінің жиегінде оқуға мүмкіндік береді. ARST регистрді 0 -ге синхронды түрде орнатады. OutputEnable төмен болғанда, регистрдің мазмұны шығыс болып табылады. ReadIn төмен болғанда, регистр Dbus -ты ілгерілеу сағат тілінде бекітеді.
  • Шығу сипаттамасы: Qbus - регистрдің шығысы
  • Жүйенің жалпы орны: Регистр компьютерде бірнеше рет қолданылады және операцияларды орындау кезінде ақпаратты сақтау үшін қолданылады.

fiveBitDRegister

  • Кірістердің сипаттамасы: Dbus - бұл регистр енгізетін кіріс. Clk регистрге деректерді сағат тілінің жиегінде оқуға мүмкіндік береді. ARST регистрді 0 -ге синхронды түрде орнатады. OutputEnable төмен болғанда, регистрдің мазмұны шығыс болып табылады. ReadIn төмен болғанда, регистр Dbus ілінісін сағат тілінің ілінісінде бекітеді.
  • Шығу сипаттамасы: Qbus - регистрдің шығысы.
  • Жүйенің жалпы орны: Регистр компьютерде бірнеше рет қолданылады және операцияларды орындау кезінде ақпаратты сақтау үшін қолданылады.

3 -қадам: код

Төменде 10 биттік компьютерге арналған шектеулер мен бастапқы файлдар бар қалта бар.

4 -қадам: Демо және үлгі коды

Жоғарыдағы бейне Basys 3 FPGA тақтасында 10 биттік компьютерді қалай бағдарламалау керектігін көрсетеді. Оп-кодтар мен бағдарламаның үлгісі бар pdf файл төменде қоса берілген.

Ұсынылған: