Satura rādītājs:
- 1. solis: materiāli
- 2. darbība. Ķēdes moduļu diagramma
- 3. darbība: kods
- 4. darbība: demonstrācija un parauga kods
Video: Desmit bitu dators - VHDL: 4 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
Veidojis: Tailers Stārs un Ezzeedden Gazali
Ievads
Šis projekts tika pabeigts kā daļa no CPE 133 gala projekta Cal Poly SLO. Tas ir lielisks projekts kādam, kurš vēlas saprast, kā datori darbojas zemākajā līmenī un kā viņi sasniedz savus uzdevumus. Projekts ir veidots pēc 8 bitu SAP datora, kas aprakstīts Alberta Malvino grāmatā Digital Computer Electronics. Tomēr mēs esam palielinājuši datoru līdz 10 bitiem, lai varētu ieviest vairāk op kodu (darbības kodus). Lietotājs var ieprogrammēt datoru, lai veiktu darbību kopumu, ievadot noteiktas instrukcijas.
Sistēmas un shēmas arhitektūra:
Dators ir rakstīts VHDL, un tas tiks ievietots Digilent Basys 3 plāksnē. Ieejas tiks kartētas uz slēdžiem tāfeles apakšā. Atiestatīšanas un rakstīšanas funkcijām tiks izmantoti divi taustes slēdži. Rezultāts tiks parādīts tāfeles 7 segmentu displejā.
Dators tiks sadalīts mazākās shēmās (moduļos), kas apstrādā dažādas darbības. Katrs modulis tiks detalizēti izskaidrots turpmākajās darbībās.
1. solis: materiāli
Viss, kas nepieciešams šim projektam, ir Basile3 FPGA plate no Digilent un mikro USB vads, lai savienotu dēli ar datoru.
2. darbība. Ķēdes moduļu diagramma
Iepriekš redzamās blokshēmas parāda dažādus shēmu moduļus, kas veido 10 bitu datoru. Zemāk ir katras atsevišķas detaļas/moduļa apraksts, kas parādīts iepriekš redzamajās diagrammās.
Programmu skaitītājs
Ievadu apraksts: ievade ir 5 bitu ievade, lai ielādētu skaitli programmas skaitītājā. Cp, kad skaitītājs ir augsts, skaitās uz krītošām pulksteņa malām. Clr atiestata skaitītāju uz 0. Ep, kad augsts skaitītājs parāda pašreizējo skaitu. Sp, kad skaitītājs ir augsts, nosaka skaitli uz ievades skaitli
-
Izejas apraksts:
izvade ir skaitīšanas kopija izmantošanai gaismas diodēs 0-15. Skaits izvada pašreizējo skaitu.
- Kopējā vieta sistēmā: Šis skaitītājs izseko programmas atmiņas atrašanās vietu. Visas programmas sākas ar atmiņas adresi 00000 (0) un palielinās līdz 11111 (31), ja vien netiek izmantota apturēšana. Lēcienu paziņojumos programmu skaitītājs turpina skaitīt no adreses, uz kuru programma pāriet.
Ievadiet MUX
- Ievadu apraksts: Adrese ievada ievadi no slēdžiem 11 līdz 15. MAR ievada ievadi no 10 bitu reģistra, ko izmanto kā MAR. Programma kontrolē, kuru ievadi novirzīt uz izvadi.
- Izeju apraksts: izeja novirza izvēlēto ieeju uz RAM.
- Kopējā vieta sistēmā: Šis MUX nosaka, vai novirzīt adresi no slēdžiem vai autobusa uz RAM. Programmas režīmā adrese no slēdžiem tiek novirzīta, bet darbības režīmā - adrese no kopnes.
ramMUX
- Ievades apraksts: userInput ir ievade, ko lietotājs ievada programmas režīmā. aRegInput ir dati, kas iekļauti A reģistrā un tiek izmantoti pārvietošanas laikā. vadība ir šī MUX izvēle.
- Izeju apraksts: izvade ir 10 bitu datu ievade RAM.
- Kopējā vieta sistēmā: šis MUX izvada 10 bitu ievades datus, kas tiek izmantoti RAM modulī. Ja vadības bits ir augsts, MUX izvada datus, ko lietotājs ievadījis programmas režīmā. Ja vadības bits ir zems, MUX izvada datus uz vadības kopni.
ramModule
- Ievades apraksts: inputData ir dati, kas tiek glabāti RAM. inputAddress ir vieta, kur dati tiek glabāti. programma norāda, vai dators ir programmas vai palaišanas režīmā. readWrite norāda, vai notiek lasīšanas vai rakstīšanas darbība. notCE ir RAM moduļa vadības bits. pārvietot norāda, ka tiek veikta pārvietošanas darbība.
- Izeju apraksts: outputDataToBus ir dati, kas no RAM nonāk kopnē. outputData and output Address ir dati un adrese, kas nonāk instrukciju reģistrā.
- Kopējā vieta sistēmā: RAM ļauj programmai un datiem saglabāt atmiņā pirms programmas palaišanas. Kad programma darbojas, RAM saņem adresi no MAR un izvada datus šajā adresē kopnei.
addressROM
- Ievadu apraksts: opCode ir ievade, kurā ir datora izpildītā opcode adrese
- Izeju apraksts: opCodeStart ir atmiņas adrese, kas norāda atbilstošā opCode pirmo mikro instrukciju atrašanās vietu.
- Kopējā vieta sistēmā: Šis modulis uzņem fiksēto mikro instrukciju un izvada atmiņas vietu, kas atbilst šīs mikro instrukciju secības sākumam.
ringCounter
- Ievadu apraksts: atiestatīšana atgriež skaitītāju atpakaļ uz 100000 (pirmais "T stāvoklis"). Clk palielina skaitītāju par vienu uz krītošās pulksteņa malas. NOP norāda, ka pašreizējais stāvoklis/cikls ir cikls “bez darbības”.
- Izeju apraksts: skaits ir skaitītāja izvade.
- Kopējā vieta sistēmā: gredzenu skaitītājs kontrolē iepriekš iestatāmo skaitītāju un nosaka sešus mikroposteļus katrā instrukciju ciklā (T1-T6).
preCounter
- Ievadu apraksts: opCodeStart ir veikto opCode mikro instrukciju atmiņas vieta. T1 atiestata skaitītāju uz 0, kad tas ir augsts. Kad T3 ir augsts, opCodeStart tiek ielādēts un skaitīšana turpinās no šīs vietas atlikušos 3 ciklus (T4-T6). Clr iestata skaitītāju uz 0. Clk pieauguma skaitītājs par vienu uz krītošās malas.
- Izeju apraksts: controlWordLocation izvada izpildāmā vadības vārda atmiņas vietu.
- Kopējā vieta sistēmā: katram op-kodam ir 3 mikro instrukcijas. Skaitītājs palielinās par 1, sākot ar 0 pirmajos 3 ciklos (ielādes cikls). Pēc tam zvana skaitītājs aktivizē skaitītāju, lai ielādētu adresi opCodeStart, un atlikušos 3 ciklus palielina par 1. Tādā veidā preCounter kontrolē veicamo mikro instrukciju secību.
controlROM
- Ievadu apraksts: controlWordLocation ir controlWord adrese, kuru controlROM izvadīs. NOP norāda, ka atrašanās vieta ir “bez operācijas”.
- Rezultātu apraksts: controlWord ir vadības vārds, kas ļauj/atspējo dažādus datora moduļus, lai veiktu vēlamo darbību.
- Kopējā vieta sistēmā: Šis modulis dekodē atmiņas vietu no preCounter un izvada controlWord vēlamajai darbībai.
ALU
- Ievadu apraksts: A un B ir ievades no reģistra A un reģistra B, kurās ALU veic aritmētiskās un loģiskās darbības. Ja atņemšana ir aktīva, tas norāda, ka B tiek atņemts no A.
- Rezultātu apraksts: rezultāts ir rezultāts, pievienojot A un B vai atņemot B no A. Rezultāti ir lielāki nekā mazāki nekā vienādi un vienādi, lai norādītu, vai (AB vai A = B) un tiek izmantoti nosacītā lēciena modulī. kļūda norāda uz pārplūdi vai nepietiekamu plūsmu, kad tā ir aktīva.
- Kopējā vieta sistēmā: ALU ir datora veikto aritmētisko un loģisko darbību loģika. Šis modulis var pievienot un atņemt divus 10 bitu bināros skaitļus. ALU var arī noteikt, vai A> B, A
nosacītsJmp
- Ievades apraksts: inputCount tiek izmantots, lai fiksētu pašreizējo skaitu. inputAddress tiek izmantots, lai bloķētu adresi, uz kuru tiks pārlēkts. loadFromRegister, kad zemu fiksatoru ievadeAddress. loadCount, kad zemas aizbīdnes inputCount. ja outputEnable ir zems, izeja ir iestatīta uz adresi, uz kuru pāriet. gT, iT un eQ nosaka, kurš nosacījums tiek pārbaudīts. Lielāks par, mazāks nekā un vienāds ar ir ALU ievade, kas norāda A un B salīdzinājuma rezultātu. Clk pieaugošajā pulksteņa malā ievades skaitlis un ievades adrese tiek nolasīti reģistros.
- Izeju apraksts: outputJmp ir adrese, kurā lasīs programmas skaitītājs.
- Kopējā vieta sistēmā: šis modulis apstrādā datora nosacītos un beznosacījuma lēcienus. Pamatojoties uz ievadēm gT, iT un eQ, modulis nosaka, kurš nosacījums jāpārbauda un vai šis nosacījums ir patiess vai nepatiess. Ja nosacījums ir patiess, tas izvadīs instrukcijas adresi, uz kuru jāpārlēk, pretējā gadījumā tiks izvadīts nākamās instrukcijas skaits.
binToBCD
- Ievades apraksts: saskaitiet 10 bitu skaitli, kas jāpārvērš par bināru kodētu decimāldaļu.
- Rezultātu apraksts: simtiem ciparu bināro skaitļu simtiem. desmitiem ciparu binārā skaitļa desmitos vietā. tie ir cipari binārā skaitļa vienīgajā vietā.
- Kopējā vieta sistēmā: Šis modulis pārveido 10 bitu skaitli no izvades reģistra uz BCD, lai mūsu četru ciparu displeja draiveris 7 segmentu displejā parādītu skaitli decimāldaļskaitlī.
fourDigitDriver
- Ieeju apraksts: skaitlis ir 16 bitu binārā ieeja, kas tiek virzīta uz dekodētāju. inClk ir Basys dēļu iekšējais pulkstenis un tiek izmantots pulksteņa dalītājam. RST atiestata pulksteni, ko izmanto, lai vadītu ciparus.
- Izeju apraksts: anods nosaka, kura ciparu vieta tiks apgaismota. cipars ir dekodētāja ievades numurs.
- Kopējā vieta sistēmā: Šis modulis vada dekodētāju, lai displejā izvadītu BCD numuru.
dekodētājs
- Ievades apraksts: inputNumber ir cipars, kas nāk no draivera un tiks atšifrēts.
- Izeju apraksts: katodi nosaka, kuri katodi tiks ieslēgti, lai parādītu vēlamo ciparu.
- Kopējā vieta sistēmā: Šis modulis atšifrē ciparu, kas jāparāda 7 segmentu displejā.
fourDigitDisplay
- Ievades apraksts: numurs ir skaitlis, kas jāparāda 7 segmentu displejā. kļūda norāda, kad displejā jālasa "Err". Clk ir pulksteņa signāls, kurā displejs darbojas. Šim signālam jābūt aptuveni 60 Hz, lai displejā varētu vienlaikus parādīt visas četrciparu vietas.
- Izeju apraksts: anods nosaka, kura ciparu vieta ir iespējota. katods nosaka, kuri katodi ir aktivizēti, lai parādītu vēlamo ciparu.
- Kopējā vieta sistēmā: Šis modulis parāda numuru 7 segmentu displejā. Lai uzzinātu, kuri katodi un anodi tiek aktivizēti, lai izmantotu displeju, skatiet Basys 3 tāfeles lietošanas pamācību. Ja kļūdas bits ir augsts, displejā parādās "Err".
izejaMUX
- Ievadu apraksts: progModeInput nosaka, kuri LED ir ieslēgti programmēšanas režīmā. RunModeInput nosaka, kuri LED ir ieslēgti darbības režīmā. modeSelect ir MUX izvēles vai vadības bits.
- Izeju apraksts: ledOutput norāda, kuri LED tiks ieslēgti.
- Kopējā vieta sistēmā: Atkarībā no datora režīma (programma vai rums), MUX ieslēgs dažādus gaismas diodes. Programmas režīmā (modeSelect ir '0') MUX ieslēdz gaismas diodes, lai tās atgādinātu atmiņas vietu, kurā atrodas dators un kurā tas atrodas. Palaišanas režīmā (modeSelect ir '1'), MUX tiek izmantots atkļūdošanai, bet to var iestatīt tā, lai tiktu rādīts jebkas cits.
pulkstenisDalītājs
- Ievadu apraksts: stop nolasa piecus MSB bitus no kopnes, lai noteiktu apturēšanas komandu ('11111') un apturētu pulksteni. inputClk ir Basys 3 plates iekšējais pulksteņa signāls.
- Izeju apraksts: ouputClk ir jaunais pulkstenis, kas ir palēnināts.
- Kopējā vieta sistēmā: šo pulksteni izmanto, lai palēninātu datora darbību, lai lietotājs varētu noteikt, kas notiek. Pulkstenis var darboties daudz ātrāk, tomēr pašlaik tas ir iestatīts uz 2 Hz.
triStateBuffer
- Ievades apraksts: Din ir 5 bitu ievade, kas nonāk buferī. Ep ir vadības bits.
- Izeju apraksts: Dout ir bufera 5 bitu izeja
- Kopējā vieta sistēmā: Kad vadības bits Ep ir aktīvs, buferis izvada ievadi. Ja vadības bits nav aktīvs, buferis neko neizdala.
tenBitDRegister
- Ievadu apraksts: Dbus ir ieeja, uz kuru jāreģistrējas. Clk ļauj reģistram lasīt datus par pulksteņa malas pieaugumu. ARST asinhroni iestata reģistru uz 0. Ja outputEnable ir zems, reģistra saturs ir izeja. Ja lasīšanas līmenis ir zems, reģistrs fiksē Dbus uz augošā pulksteņa malas.
- Izeju apraksts: Qbus ir reģistra izeja
- Kopējā vieta sistēmā: reģistrs tiek izmantots vairākas reizes visā datorā un tiek izmantots informācijas glabāšanai, veicot darbības.
piecu bitrģistra
- Ievadu apraksts: Dbus ir ieeja, uz kuru jāreģistrējas. Clk ļauj reģistram lasīt datus par pulksteņa malas pieaugumu. ARST asinhroni iestata reģistru uz 0. Ja outputEnable ir zems, reģistra saturs ir izeja. Ja lasīšanas līmenis ir zems, reģistrs fiksē Dbus uz augošā pulksteņa malas.
- Izeju apraksts: Qbus ir reģistra izeja.
- Kopējā vieta sistēmā: reģistrs tiek izmantots vairākas reizes visā datorā un tiek izmantots informācijas glabāšanai, veicot darbības.
3. darbība: kods
Zemāk ir mape, kurā ir 10 bitu datora ierobežojumi un avota faili.
4. darbība: demonstrācija un parauga kods
Iepriekš redzamais video parāda, kā ieprogrammēt 10 bitu datoru uz Basys 3 FPGA plates. Tālāk ir pievienots arī pdf fails, kurā ietverti darbības kodi un programmas paraugs.
Ieteicams:
Arduino Nano-MMA8452Q 3 asu 12 bitu/8 bitu digitālā akselerometra apmācība: 4 soļi
Arduino Nano-MMA8452Q 3 asu 12 bitu/8 bitu digitālā akselerometra apmācība: MMA8452Q ir gudrs, mazjaudas, trīs asu, kapacitatīvs, mikromehāniski apstrādāts akselerometrs ar 12 bitu izšķirtspēju. Elastīgas lietotāja programmējamas iespējas tiek nodrošinātas, izmantojot akselerometrā iekļautās funkcijas, kuras var konfigurēt līdz diviem pārtraukumiem
Raspberry Pi MMA8452Q 3 asu 12 bitu/8 bitu digitālā akselerometra Python apmācība: 4 soļi
Raspberry Pi MMA8452Q 3 asu 12 bitu/8 bitu digitālā akselerometra Python apmācība: MMA8452Q ir gudrs, mazjaudas, trīs asu, kapacitatīvs, mikromehāniski apstrādāts akselerometrs ar 12 bitu izšķirtspēju. Elastīgas lietotāja programmējamas iespējas tiek nodrošinātas, izmantojot akselerometrā iekļautās funkcijas, kuras var konfigurēt līdz diviem pārtraukumiem
Raspberry Pi MMA8452Q 3 asu 12 bitu/8 bitu digitālā akselerometra Java apmācība: 4 soļi
Raspberry Pi MMA8452Q 3 asu 12 bitu/8 bitu digitālā akselerometra Java apmācība: MMA8452Q ir gudrs, mazjaudas, trīs asu, kapacitatīvs, mikromehāniski apstrādāts akselerometrs ar 12 bitu izšķirtspēju. Elastīgas lietotāja programmējamas iespējas tiek nodrošinātas, izmantojot akselerometrā iekļautās funkcijas, kuras var konfigurēt līdz diviem pārtraukumiem
8 bitu dators uz maizes dēļa Pārskats: 3 soļi
Pārskats par 8 bitu datoru uz maizes dēļa: Mans šī projekta mērķis bija labāk izprast datoru arhitektūru, aparatūras dizainu un montāžas līmeņa valodas. Būdams universitātes juniors, kurš studēja datortehniku, nesen biju pabeidzis elektronikas, laboratoriju un
Mani desmit visnoderīgākie maizes dēļa padomi un triki: 9 soļi (ar attēliem)
Mani desmit visnoderīgākie maizes dēļa padomi un triki: uz zemes ir 6 collas sniega, un jūs atrodaties mājā. Jūs uz mirkli esat zaudējis motivāciju strādāt ar metālapstrādes lāzeru ar GPS palīdzību. Jūsu iecienītākajā vietnē nav bijis jaunu projektu, kas būtu iepriecinājuši jūsu int