Мазмуну:

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

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

Video: Он бит компьютер - VHDL: 4 кадам
Video: Битовые сдвиги 2024, Июль
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гө кайтарат. Эп жогорку эсептегич учурдагы санды чыгарганда. Sp жогорку болгондо эсептегич санды киргизилген санга коёт

  • Чыгыштардын сүрөттөлүшү:

    чыгаруу LED 0-15 боюнча колдонуу үчүн эсептөөнүн көчүрмөсү. Count учурдагы санды чыгарат.

  • Системанын жалпы орду: Бул эсептегич программанын эс тутумунун жайгашкан жерине көз салып турат. Бардык программалар 00000 (0) эстутум дарегинен башталат жана токтоо колдонулбаса, 11111 (31) чейин кетет. Секирүү билдирүүлөрүндө, программа эсептегич программа секирип жаткан даректен саноону улантат.

MUX киргизүү

  • Киргизүүлөрдүн сүрөттөлүшү: Дарек 11ден 15ке чейинки которгучтардан маалыматты алат. Программа кайсы киргизүүнү чыгууга багыттоону көзөмөлдөйт.
  • Чыгыштардын сүрөттөлүшү: чыгаруу тандалган киришти RAMга багыттайт.
  • Системанын жалпы орду: Бул MUX даректи коммутаторлордон же автобустан RAMге багыттоону аныктайт. Программа режиминде коммутаторлордун дареги багытталат жана иштөө режиминде автобустун дареги багытталат.

ramMUX

  • Киргизүүлөрдүн сүрөттөлүшү: userInput - бул колдонуучу программалык режимде киргизген кириш. aRegInput - бул А реестринде камтылган маалыматтар, бул жылдыруу операциясында колдонулат. башкаруу бул MUX үчүн тандоо.
  • Чыгыштардын сүрөттөлүшү: чыгаруу-бул RAMге 10-биттик маалымат киргизүү.
  • Системанын жалпы орду: Бул MUX RAM модулунда колдонулган 10 биттик киргизүү маалыматын чыгарат. Башкаруу бити жогору болгондо, MUX колдонуучу программа режимине киргизген маалыматтарды чыгарат. Башкаруу бит аз болгондо, MUX башкаруу шинасына маалыматтарды чыгарат.

ramModule

  • Киргизүүлөрдүн сүрөттөлүшү: inputData - бул RAMда сакталган маалыматтар. inputAddress - бул маалыматтар сакталган жер. Программа компьютердин программада же иштөө режиминде экенин көрсөтөт. readWrite окуу же жазуу операциясы болуп жаткандыгын көрсөтөт. notCE - бул RAM модулун башкаруучу бит. move бир жылдыруу операциясы аткарылып жатканын билдирет.
  • Чыгыштардын сүрөттөлүшү: outputDataToBus - бул RAMдан автобуска өтүүчү маалыматтар. outputData жана output Address инструкциялардын регистрине кирген маалыматтар жана даректер.
  • Системанын жалпы орду: RAM программаны иштетүүдөн мурун программаны жана маалыматты эс тутумунда сактоого мүмкүндүк берет. Программа иштеп баштагандан кийин, RAM MARден дарек алат жана ошол даректеги маалыматтарды автобуска чыгарат.

дарек РОМ

  • Киргизүүлөрдүн сүрөттөлүшү: opCode - бул компьютер тарабынан аткарылып жаткан опкоддун дарегин камтыган киргизүү
  • Чыгыштардын сүрөттөлүшү: opCodeStart-бул тиешелүү опКоддун биринчи микро көрсөтмөсүнүн жайгашкан жерин көрсөтүүчү эстутум дареги.
  • Системанын жалпы орду: Бул модуль микрофинансированные инструкциясын алат жана ошол микро буйруктун ырааттуулугунун башталышына туура келген эс тутумун чыгарат.

ringCounter

  • Киргизүүлөрдүн сүрөттөлүшү: баштапкы абалга келтирүү эсептегичти 100000ге кайтарат (биринчи "Т абалы"). Clk эсептегичти кулап жаткан сааттын четине көбөйтөт. NOP учурдагы абалдын/циклдин "иштебей турган" цикл экенин көрсөтөт.
  • Чыгыштардын сүрөттөлүшү: саноо - бул эсептегичтин чыгышы.
  • Системанын жалпы орду: Шакек эсептегич алдын ала жөндөлүүчү эсептегичти башкарат жана ар бир инструкция циклинде алты микро кадамды аныктайт (T1-T6).

preCounter

  • Киргизүүлөрдүн сүрөттөлүшү: opCodeStart-бул аткарылып жаткан opCode үчүн микро көрсөтмөлөрдүн эс тутуму. T1 эсептегичти 0 болгон абалга келтирет. T3 жогору болгондо, opCodeStart жүктөлөт жана эсептөө калган 3 цикл үчүн ошол жерден уланат (T4-T6). Clr эсептегичти 0гө коюп жатат. Clk өсүп бараткан четинде бирден көбөйөт.
  • Чыгыштардын сүрөттөлүшү: controlWordLocation аткарыла турган контролдук сөздүн эс тутумун чыгарат.
  • Системанын жалпы орду: Ар бир оп-коддо 3 микро инструкция бар. Эсептегич алгачкы 3 цикл үчүн 0дөн баштап 1ге көбөйөт (циклди алуу). Эсептегич шакек эсептегич тарабынан opCodeStart дарегине жүктөлөт жана калган 3 цикл үчүн 1ге көбөйтүлөт. Ошентип, алдын ала эсептөөчү аткарыла турган микро көрсөтмөлөрдүн ырааттуулугун көзөмөлдөйт.

controlROM

  • Киргизүүлөрдүн сүрөттөлүшү: controlWordLocation - бул controlROM чыгаруучу controlWord дареги. NOP бул жердин "иштебей турган" жер экенин көрсөтөт.
  • Чыгыштын сүрөттөлүшү: controlWord - бул каалаган операцияны аткарууга ар кандай компьютер модулдарын иштетүүчү/өчүрүүчү башкаруу сөзү.
  • Системанын жалпы орду: Бул модуль эс тутумдун ордун алдын ала эсептегичтен чечет жана каалаган операция үчүн controlWordту чыгарат.

ALU

  • Киргизүүлөрдүн сүрөттөмөсү: А жана В - бул А регистринин жана В регистринин кириштери, ALU арифметикалык жана логикалык операцияларды аткарат. Чыгаруу активдүү болгондо, бул Вдан Адан алынып жатканын көрсөтөт.
  • Чыгыштардын сүрөттөлүшү: натыйжа А жана В кошуунун же А дан В алып салуунун жыйынтыгы болуп саналат, эгерде (AB, же A = B) болсо жана шарттуу секирүү модулунда колдонулса, чоңураак, азыраак жана эквиваленттүү жыйынтыктар. ката активдүү болгондо ашыкча же астын көрсөтүп турат.
  • Системанын жалпы орду: ALU компьютер тарабынан жүргүзүлгөн арифметикалык жана логикалык операциялардын логикасын камтыйт. Бул модуль эки 10-бит бинардык сандарды кошуп жана кемите алат. ALU ошондой эле A> B, A экендигин аныктай алат

шарттууJmp

  • Киргизүүлөрдүн Descriptoin: inputCount учурдагы эсепти кармоо үчүн колдонулат. inputAddress секириле турган даректи бекитүү үчүн колдонулат. loadFromRegister аз катталса inputAddress. loadCount төмөн болгондо inputCount. outputEnable төмөн болгондо, чыгуу to.gT, iT жана eQ секирүү үчүн дарекке коюлат, кайсы шарт текшерилип жатканын аныктайт. көбүрөөкThan, lessThan жана equalTo - бул 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 программалоо режиминде кайсы LEDлар күйгүзүлгөнүн аныктайт. runModeInput иштетүү режиминде кайсы LEDлар күйгүзүлгөнүн аныктайт. modeSelect - бул MUX үчүн тандоо же башкаруу бити.
  • Чыгыштардын сүрөттөлүшү: ledOutput кайсы LEDлар күйгүзүлөрүн көрсөтөт.
  • Системанын жалпы орду: Компьютер турган режимге жараша (программа же ром), MUX ар кандай лампаларды күйгүзөт. Программа режиминде (modeSelect '0'), MUX компьютердин ичиндеги эс тутумунун жайгашкан жерине окшоштуруу үчүн LEDлерди күйгүзөт. Иштетүү режиминде (modeSelect '1'), MUX мүчүлүштүктөрдү оңдоо үчүн колдонулат, бирок башка нерсени көрсөтүү үчүн коюлушу мүмкүн.

clockDivider

  • Киргизүүлөрдүн сүрөттөлүшү: stop токтоочу буйрукту аныктоо үчүн автобустун беш MSB битин окуйт ('11111') жана саатты токтотот. inputClk - Basys 3 тактасынын ички сааты.
  • Чыгуулардын сүрөттөлүшү: ouputClk - бул жайлап калган жаңы саат.
  • Системанын жалпы орду: Бул саат компьютерди жайлатып, колдонуучуга эмне болуп жатканын аныктоого мүмкүндүк берүү үчүн колдонулат. Саат алда канча ылдамыраак иштей алат, бирок учурда ал 2 Гцке коюлган.

triStateBuffer

  • Киргизүүлөрдүн сүрөттөлүшү: Din - буферге кирген 5 биттик киргизүү. Эп - бул көзөмөлдөөчү бит.
  • Чыгыштардын сүрөттөлүшү: Dout - буфердин 5 биттик чыгышы
  • Системанын жалпы орду: Эп көзөмөлдөөчү бит активдүү болгондо, буфер киргизет. Качан башкаруу бит активдүү болбосо, буфер эч нерсе чыгарбайт.

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 жана программанын үлгүсү да төмөндө тиркелет.

Сунушталууда: