Агуулгын хүснэгт:

Арван битийн компьютер - VHDL: 4 алхам
Арван битийн компьютер - VHDL: 4 алхам

Видео: Арван битийн компьютер - VHDL: 4 алхам

Видео: Арван битийн компьютер - VHDL: 4 алхам
Видео: 32-битная против 64-битной системы 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 хүртэлх шилжүүлэгчээс оролтыг авдаг. MAR нь 10 битийн регистрээс MAR болгон ашигладаг. Програм нь аль оролтыг гаралт руу чиглүүлэхийг хянадаг.
  • Гаралтын тодорхойлолт: гаралт нь сонгосон оролтыг RAM руу чиглүүлдэг.
  • Систем дэх ерөнхий газар: Энэхүү MUX нь унтраалга эсвэл автобуснаас хаягийг RAM руу чиглүүлэх эсэхийг тодорхойлдог. Хөтөлбөрийн горимд унтраалгын хаягийг чиглүүлж, ажиллуулах горимд автобусны хаягийг чиглүүлдэг.

ramMUX

  • Оролтын тодорхойлолт: userInput бол програмын горимд хэрэглэгчийн оруулсан оролт юм. aRegInput нь A бүртгэлд агуулагдсан өгөгдөл бөгөөд үүнийг зөөвөрлөх явцад ашигладаг. control нь энэ MUX -ийн сонголт юм.
  • Гаралтын тодорхойлолт: гаралт нь RAM-д 10 битийн өгөгдөл оруулах явдал юм.
  • Системийн ерөнхий газар: Энэхүү MUX нь RAM модульд хэрэглэгддэг 10 битийн оролтын өгөгдлийг гаргадаг. Хяналтын бит өндөр байх үед MUX нь хэрэглэгчийн програмын горимд оруулсан өгөгдлийг гаргадаг. Хяналтын бит бага байхад MUX нь хяналтын автобусны өгөгдлийг гаргадаг.

ramModule

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

хаяг ROM

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

бөгж тоолуур

  • Оролтын тодорхойлолт: дахин тохируулах нь тоолуурыг 100000 болгож буцаана (эхний "T төлөв"). Clk тоолуурыг унаж буй цагны ирмэг дээр нэг нэгээр нь нэмнэ. NOP нь одоогийн төлөв/мөчлөг нь "ажиллахгүй" мөчлөг болохыг харуулж байна.
  • Гаралтын тодорхойлолт: тоолох нь тоолуурын гаралт юм.
  • Систем дэх ерөнхий газар: Бөгжний тоолуур нь урьдчилан тохируулах тоолуурыг хянаж, зааварчилгааны мөчлөг бүрт зургаан микро алхамыг тодорхойлдог (T1-T6).

урьдчилсан тоолуур

  • Оролтын тодорхойлолт: opCodeStart бол гүйцэтгэж буй opCode-ийн бичил зааврын санах ойн байршил юм. T1 өндөр байх үед тоолуурыг 0 болгож дахин тохируулна. T3 өндөр байх үед opCodeStart-ийг ачаалж, үлдсэн 3 мөчлөгийн тооллогыг тухайн байрлалаас үргэлжлүүлнэ (T4-T6). Clr нь тоолуурыг 0 болгоно. Уналтын ирмэг дээр тоолуурыг нэг нэгээр нэмэгдүүлнэ.
  • Гаралтын тайлбар: controlWordLocation нь гүйцэтгэх үгийн санах ойн байршлыг гаргадаг.
  • Системийн ерөнхий газар: Оп код бүр 3 бичил заавартай байдаг. Тоологч эхний 3 мөчлөгийн хувьд 0 -ээс эхлэн 1 -ээр нэмэгддэг (авах мөчлөг). Дараа нь тоолуур нь цагираг тоолуураар өдөөгдөж opCodeStart дээрх хаягийг ачаалах бөгөөд үлдсэн 3 мөчлөгийн хувьд 1 -ээр нэмэгддэг. Ийм байдлаар preCounter нь бичил зааврын дарааллыг хянадаг.

хяналт

  • Оролтын тодорхойлолт: controlWordLocation нь controlROM -ийн гаргадаг controlWord -ийн хаяг юм. NOP нь тухайн байршил нь "ажиллахгүй" байршил болохыг харуулж байна.
  • Гаралтын тодорхойлолт: controlWord нь өөр өөр компьютерын модулийг хүссэн үйлдлээ явуулах/идэвхгүй болгох хяналтын үг юм.
  • Систем дэх ерөнхий газар: Энэ модуль нь санах ойн байршлыг өмнөх тоолуураас тайлж, хүссэн үйлдлийнхээ төлөө controlWord гаргадаг.

ALU

  • Оролтын тодорхойлолт: А ба В нь ALU арифметик болон логик үйлдлийг гүйцэтгэдэг А регистр ба В регистрийн оролтууд юм. Хасах нь идэвхтэй байх үед энэ нь А -аас В хасагдаж байгааг илтгэнэ.
  • Гаралтын тодорхойлолт: үр дүн нь А ба В нэмэх, эсвэл А -аас В хасах үр дүн юм. Илүү их, бага, тэнцүү гаралтууд нь (AB, эсвэл A = B) бөгөөд нөхцөлт үсрэлтийн модульд ашиглагддаг. алдаа нь идэвхжсэн үед хэт халалт эсвэл дутагдалыг илэрхийлдэг.
  • Систем дэх ерөнхий газар: ALU нь компьютерийн гүйцэтгэдэг арифметик болон логик үйлдлийн логикийг агуулдаг. Энэ модуль нь 10 битийн хоёртын хоёр тоог нэмж, хасах боломжтой. ALU нь A> B, A эсэхийг тодорхойлох боломжтой

нөхцөлтJmp

  • Descriptoin of Inputs: inputCount нь одоогийн тоог тоолоход хэрэглэгддэг. inputAddress нь хаяглах хаягийг түгжихэд хэрэглэгддэг. loadFromRath low latks inputAddress үед бүртгүүлнэ үү. loadCount бага түгжигдэх үед inputCount. outputEnable бага байвал гаралтыг хаягаар тохируулах бөгөөд to.gT, iT, eQ руу шилжихийн тулд аль нөхцлийг шалгаж байгааг тодорхойлно. илүү их, багаThan, тэнцүүTo нь ALU -ийн оролт бөгөөд A ба B -ийн харьцуулалтын үр дүнг харуулдаг.
  • Гаралтын тодорхойлолт: 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 нь аль ледийг асаахыг заана.
  • Системийн ерөнхий байршил: Компьютерийн горимоос (програм эсвэл ром) хамааран MUX нь өөр өөр LED асаах болно. Хөтөлбөрийн горимд (modeSelect нь '0') MUX нь LED -ийг асааж, компьютер дотор байгаа санах ойн байршилтай төстэй юм. Ажиллуулах горимд (modeSelect бол '1') MUX -ийг дибаг хийхэд ашигладаг боловч өөр зүйлийг харуулахаар тохируулж болно.

цаг хуваагч

  • Оролтын тодорхойлолт: stop нь командын тушаалыг ('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 файлыг доор хавсаргасан болно.

Зөвлөмж болгож буй: