INHOUDSOPGAWE:

Tien bits rekenaar - VHDL: 4 stappe
Tien bits rekenaar - VHDL: 4 stappe

Video: Tien bits rekenaar - VHDL: 4 stappe

Video: Tien bits rekenaar - VHDL: 4 stappe
Video: Code C/C++ khi đi làm thực tế có đáng sợ như lời đồn? 2024, Julie
Anonim
Tien bits rekenaar - VHDL
Tien bits rekenaar - VHDL

Gemaak deur: Tyler Starr en Ezzeedden Gazali

Inleiding

Hierdie projek is voltooi as deel van die finale projek vir CPE 133 by Cal Poly SLO. Dit is 'n wonderlike projek vir iemand wat wil verstaan hoe rekenaars op hul laagste vlak funksioneer en hoe hulle hul take kan verrig. Die projek is gebaseer op die 8-bis SAP-rekenaar wat beskryf word in Albert Malvino se boek Digital Computer Electronics. Ons het die rekenaar egter verhoog tot 10-bis om meer op-kodes (operasiekodes) te implementeer. Die gebruiker kan die rekenaar programmeer om 'n stel bewerkings uit te voer deur sekere instruksies in te voer.

Stelsel- en stroombaanargitektuur:

Die rekenaar is in VHDL geskryf en sal op die Basys 3 -bord van Digilent verskyn. Die insette word aan die skakelaars aan die onderkant van die bord gekoppel. Twee tasbare skakelaars sal gebruik word vir die reset- en skryffunksies. Die uitset sal op die bord se sewesegment vertoon word.

Die rekenaar sal opgedeel word in kleiner stroombane (modules) wat verskillende operasies hanteer. Elke module sal in die volgende stappe breedvoerig verduidelik word.

Stap 1: materiaal

Materiaal
Materiaal

Al wat nodig is vir hierdie projek is die Basys3 FPGA -bord van Digilent en 'n mikro -USB -kabel om die kaart met u rekenaar aan te sluit.

Stap 2: Blokdiagram van stroombaanmodules

Blokdiagram van stroombaanmodules
Blokdiagram van stroombaanmodules
Blokdiagram van stroombaanmodules
Blokdiagram van stroombaanmodules
Blokdiagram van stroombaanmodules
Blokdiagram van stroombaanmodules

Die blokdiagramme hierbo toon die verskillende stroombane-modules wat die 10-bis-rekenaar uitmaak. Hieronder is beskrywings vir elk van die individuele dele/modules wat in die diagramme hierbo getoon word.

Program toonbank

Beskrywing van insette: invoer is 'n 5 bis -invoer om 'n nommer in die programteller te laai. Cp as hoog tel die toonbank op dalende horlosiekante. Clr stel teller terug op 0. Ep as die toonbank hoog is, lewer die huidige telling af. Sp as die toonbank hoog is, stel die telling die getal op die invoer in

  • Beskrywing van uitsette:

    uitvoer is 'n afskrif van die telling vir gebruik op LEDS 0-15. Tel gee die huidige telling uit.

  • Algehele plek in die stelsel: hierdie teller hou die geheue -ligging waarin die program geleë is, dop. Alle programme begin by geheue -adres 00000 (0) en gaan na 11111 (31), tensy 'n halt gebruik word. In springstellings tel die programteller voort vanaf die adres waarna die program spring.

Voer MUX in

  • Beskrywing van insette: Adres neem die insette van skakelaars 11 tot en met 15. MAR neem die insette van die 10 bis -register wat as 'n MAR gebruik word. Die program beheer watter insette na die uitset gestuur word.
  • Beskrywing van uitsette: uitvoer lei die geselekteerde insette na die RAM.
  • Algehele plek in die stelsel: hierdie MUX bepaal of die adres van die skakelaars of die bus na die RAM gestuur moet word. In die programmodus word die adres van die skakelaars gestuur en in die loopmodus word die adres van die bus gestuur.

ramMUX

  • Beskrywing van insette: userInput is die invoer wat die gebruiker tydens die programmodus invoer. aRegInput is die data in die A -register, dit word gebruik tydens 'n skuifoperasie. beheer is die keuse vir hierdie MUX.
  • Beskrywing van uitsette: uitset is die 10-bis data-invoer na die RAM.
  • Algehele plek in die stelsel: Hierdie MUX voer die 10-bis-invoerdata uit wat in die RAM-module gebruik word. As die kontrolebit hoog is, voer die MUX die data uit wat die gebruiker in die programmodus ingevoer het. As die kontrolebit laag is, voer die MUX die data op die beheerbus uit.

ramModule

  • Beskrywing van insette: inputData is die data wat in die RAM gestoor word. inputAddress is die plek waar die data gestoor word. program dui aan of die rekenaar in die program- of uitvoermodus is. readWrite dui aan of 'n lees- of skryfbewerking plaasvind. notCE is die kontrolebit vir die RAM -module. skuif dui aan dat 'n skuifbewerking uitgevoer word.
  • Beskrywing van uitsette: outputDataToBus is die data wat van die RAM na die bus gaan. outputData en output Address is die data en adres wat na die instruksieregister gaan.
  • Algehele plek in die stelsel: Die RAM maak voorsiening vir program- en data -berging in die geheue voordat 'n program uitgevoer word. Sodra die program uitgevoer is, ontvang die RAM 'n adres van die MAR en stuur die data by die adres na die bus.

adresROM

  • Beskrywing van insette: opCode is die invoer wat die adres van die opcode bevat wat deur die rekenaar uitgevoer word
  • Beskrywing van uitsette: opCodeStart is die geheue-adres wat die eerste mikro-instruksie plek van die ooreenstemmende opCode aandui.
  • Algehele plek in die stelsel: Hierdie module neem die mikro-instruksie vas en stuur die geheue-ligging uit wat ooreenstem met die begin van die mikro-instruksie volgorde.

ringTeller

  • Beskrywing van insette: reset stel die teller terug op 100000 (die eerste "T -toestand"). Clk verhoog die toonbank met een op 'n dalende klokrand. NOP dui aan dat die huidige toestand/siklus 'n "geen operasie" siklus is nie.
  • Beskrywing van uitsette: telling is die uitset van die teller.
  • Algehele plek in die stelsel: Die ringteller beheer die vooraf instelbare teller en omskryf die ses mikrostappe in elke instruksiesiklus (T1-T6).

vooraanteller

  • Beskrywing van insette: opCodeStart is die geheue-ligging van die mikro-instruksies vir die opCode wat uitgevoer word. T1 stel die toonbank terug op 0 as dit hoog is. As T3 hoog is, word opCodeStart gelaai en die telling duur voort vanaf die plek vir die oorblywende 3 siklusse (T4-T6). Clr stel teller op 0. Clk styg teen een op 'n dalende rand.
  • Beskrywing van uitsette: controlWordLocation voer die geheue -ligging van die beheerwoord uit wat uitgevoer moet word.
  • Algehele plek in die stelsel: Elke op-kode bevat 3 mikro-instruksies. Die toonbank verhoog met 1 vanaf 0 vir die eerste 3 siklusse (haal siklus). Die teller word dan deur die ringteller geaktiveer om die adres op opCodeStart te laai en met 1 te verhoog vir die oorblywende 3 siklusse. Op hierdie manier beheer die voorafaanwyser die volgorde van mikro-instruksies wat uitgevoer moet word.

beheerROM

  • Beskrywing van insette: controlWordLocation is die adres van die controlWord wat die controlROM sal uitvoer. NOP dui aan dat die ligging 'n 'geen operasie' plek is.
  • Beskrywing van uitsette: controlWord is die beheerwoord wat die verskillende rekenaarmodules in staat stel/deaktiveer om 'n gewenste operasie uit te voer.
  • Algehele plek in die stelsel: Hierdie module dekodeer die geheue -ligging van die voorafreëlaar en voer die controlWord uit vir die gewenste operasie.

ALU

  • Beskrywing van insette: A en B is die insette van register A en register B waarop die ALU die rekenkundige en logiese bewerkings uitvoer. As aftrekking aktief is, dui dit aan dat B van A afgetrek word.
  • Beskrywing van uitsette: resultaat is die resultaat van die optel van A en B, of die aftrekking van B van A. Die uitsette groter dan, minder dan en gelyk Om aan te dui of (AB of A = B) en in die voorwaardelike springmodule gebruik word. fout dui op 'n oorloop of ondervloei as dit aktief is.
  • Algehele plek in die stelsel: Die ALU bevat die logika vir die rekenkundige en logiese bewerkings wat deur die rekenaar uitgevoer word. Hierdie module kan twee 10-bis binêre getalle optel en aftrek. Die ALU kan ook bepaal of A> B, A

voorwaardelikeJmp

  • Beskrywing van insette: inputCount word gebruik om die huidige telling te hou. inputAddress word gebruik om die adres waarna daar gespring word te sluit. loadFromRegister wanneer input grendel laag is. loadCount wanneer lae grendels inputCount. wanneer outputEnable laag is, word die uitset op die adres gestel om na te spring.gT, iT en eQ bepaal watter toestand nagegaan word. greaterThan, lessThan en equalTo is die insette van die ALU wat die resultaat aandui van die vergelyking tussen A en B. Op die stygende klokrand van Clk word die inputCount en inputAddress in registers ingelees.
  • Beskrywing van uitsette: outputJmp is die adres waarin die programteller sal lees.
  • Algehele plek in die stelsel: hierdie module hanteer voorwaardelike en nie-voorwaardelike spronge vir die rekenaar. Op grond van die insette gT, iT en eQ, bepaal die module watter toestand om na te gaan en of die toestand waar of onwaar is. As die voorwaarde waar is, gee dit die adres van die instruksie na waarna u kan spring, anders lewer dit die telling van die volgende instruksie.

binToBCD

  • Beskrywing van insette: nommer die 10 bis getal wat na binêre gekodeerde desimale omgeskakel moet word.
  • Beskrywing van uitsette: honderde die syfer op die honderde plek van die binêre getal. die syfer in die tiene plek van die binêre getal. die syfer op die plek van die binêre getal.
  • Algehele plek in die stelsel: Hierdie module skakel die 10 bis -nommer van die uitvoerregister na BCD om sodat ons vier -syfer -skermbestuurder die getal in desimale op die 7 -segmentskerm kan vertoon.

fourDigitDriver

  • Beskrywing van insette: nommer is die 16 bis binêre invoer wat na die dekodeerder gestuur word. inClk is die Basys -borde se interne klok en word gebruik vir 'n klokverdeler. RST stel die klok wat gebruik is om die syfers te stuur, terug.
  • Beskrywing van uitsette: anode bepaal watter syfer plek verlig sal word. syfer is die invoernommer vir die dekodeerder.
  • Algehele plek in die stelsel: Hierdie module dryf die dekodeerder om die BCD -nommer na die skerm te stuur.

dekodeerder

  • Beskrywing van insette: inputNumber is die syfer wat van die bestuurder afkomstig is en wat gedekodeer sal word.
  • Beskrywing van uitsette: katodes bepaal watter katodes aangeskakel sal word om die gewenste syfer te vertoon.
  • Algehele plek in die stelsel: Hierdie module dekodeer die syfer wat op die 7 -segmentskerm vertoon moet word.

fourDigitDisplay

  • Beskrywing van insette: nommer is die getal wat op die 7 -segment -skerm vertoon moet word. fout dui aan wanneer die skerm "Err" moet vertoon. Clk is die kloksignaal waarop die skerm werk. Hierdie sein moet ongeveer 60 Hz wees, sodat die skerm alle vier -syfer plekke gelyktydig kan wys.
  • Beskrywing van uitsette: anode bepaal watter syfer plek geaktiveer is. katode bepaal watter katodes geaktiveer word om die gewenste syfer te vertoon.
  • Algehele plek in die stelsel: Hierdie module vertoon 'n nommer op die 7 -segment -skerm. Raadpleeg die Basys 3 -bord se handleiding vir inligting oor wat katodes en anodes aktiveer om die skerm te gebruik. As die foutbit hoog is, word "Err" op die skerm vertoon.

outputMUX

  • Beskrywing van insette: progModeInput bepaal watter LED's aangeskakel word tydens die programmeermodus. runModeInput bepaal watter LED's tydens die hardloopmodus aangeskakel word. modeSelect is die kies- of beheerbit vir die MUX.
  • Beskrywing van uitsette: ledOutput dui aan watter LED's aangeskakel sal word.
  • Algehele plek in die stelsel: Afhangende van die modus waarin die rekenaar is (program of rum), sal die MUX verskillende LED's aanskakel. In die programmodus (modeSelect is '0'), skakel die MUX LED's aan om te lyk soos die geheue waar die rekenaar is en wat dit bevat. In die loopmodus (modeSelect is '1'), word die MUX gebruik vir ontfouting, maar kan ingestel word om enigiets anders te vertoon.

klokDivider

  • Beskrywing van insette: stop lees die vyf MSB -bisse uit die bus om 'n stopopdrag ('11111') op te spoor en stop die klok. inputClk is die interne kloksein van die Basys 3 -bord.
  • Beskrywing van uitsette: ouputClk is die nuwe horlosie wat vertraag is.
  • Algehele plek in die stelsel: hierdie klok word gebruik om die rekenaar te vertraag om dit vir die gebruiker moontlik te maak om te bepaal wat aangaan. Die klok kan baie vinniger loop, maar dit is tans ingestel op 2 Hz.

triStateBuffer

  • Beskrywing van insette: Din is die 5 bis -invoer wat in die buffer ingaan. Ep is die kontrolebit.
  • Beskrywing van uitsette: Dout is die 5 bis -uitset van die buffer
  • Algehele plek in die stelsel: As die kontrolebit Ep aktief is, lewer die buffer die invoer uit. As die kontrolebit nie aktief is nie, lewer die buffer niks uit nie.

tenBitDRegister

  • Beskrywing van insette: Dbus is die invoer waarna die register moet gaan. Met Clk kan die register data inlees oor 'n stygende klokrand. ARST stel die register asynchroon op 0. As outputEnable laag is, is die inhoud van die register die uitset. As readIn laag is, sluit die register Dbus op die stygende klokrand.
  • Beskrywing van uitsette: Qbus is die uitset van die register
  • Algehele plek in die stelsel: die register word meermale op die rekenaar gebruik en word gebruik om inligting te stoor tydens operasies.

fiveBitDRegister

  • Beskrywing van insette: Dbus is die invoer waarna die register moet gaan. Met Clk kan die register data op 'n stygende klokrand inlees. ARST stel die register asynchroon op 0. As outputEnable laag is, is die inhoud van die register die uitset. As readIn laag is, sluit die register Dbus op die stygende klokrand.
  • Beskrywing van uitsette: Qbus is die uitset van die register.
  • Algehele plek in die stelsel: die register word meermale op die rekenaar gebruik en word gebruik om inligting te stoor tydens operasies.

Stap 3: Kodeer

Hieronder is 'n gids met die beperking en bronlêers vir die 10-bis rekenaar.

Stap 4: Demo en voorbeeldkode

Die video hierbo demonstreer hoe u die 10-bis-rekenaar op die Basys 3 FPGA-bord kan programmeer. 'N pdf met die op-kodes en 'n voorbeeldprogram is ook hieronder aangeheg.

Aanbeveel: