Inhoudsopgave:
- Stap 1: Materialen
- Stap 2: Blokschema van circuitmodules
- Stap 3: Coderen
- Stap 4: Demo en voorbeeldcode
Video: Tien bits computer - VHDL - Ajarnpa
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:17
Gemaakt door: Tyler Starr en Ezzeedden Gazali
Invoering
Dit project werd voltooid als onderdeel van het eindproject voor CPE 133 bij Cal Poly SLO. Het is een geweldig project voor iemand die wil begrijpen hoe computers op het laagste niveau functioneren en hoe ze hun taken uitvoeren. Het project is gemodelleerd naar de 8-bits SAP-computer die wordt beschreven in het boek Digital Computer Electronics van Albert Malvino. We hebben de computer echter verhoogd naar 10-bits om de implementatie van meer op-codes (bewerkingscodes) mogelijk te maken. De gebruiker kan de computer programmeren om een reeks bewerkingen uit te voeren door bepaalde instructies in te voeren.
Systeem- en circuitarchitectuur:
De computer is geschreven in VHDL en zal worden opgenomen op het Basys 3-bord van Digilent. De ingangen worden toegewezen aan de schakelaars aan de onderkant van het bord. Er worden twee tactiele schakelaars gebruikt voor de reset- en schrijffuncties. De output wordt weergegeven op het 7-segmentsdisplay van het bord.
De computer wordt opgesplitst in kleinere circuits (modules) die verschillende bewerkingen afhandelen. Elke module wordt in de volgende stappen in detail uitgelegd.
Stap 1: Materialen
Het enige dat nodig is voor dit project is het Basys3 FPGA-bord van Digilent en een micro-USB-draad om het bord op uw computer aan te sluiten.
Stap 2: Blokschema van circuitmodules
De bovenstaande blokdiagrammen tonen de verschillende circuitmodules waaruit de 10-bits computer bestaat. Hieronder vindt u beschrijvingen voor elk van de afzonderlijke onderdelen/modules die in de bovenstaande diagrammen worden getoond.
Programmateller
Beschrijving van ingangen: ingang is een 5-bits ingang voor het laden van een getal in de programmateller. Cp bij hoog telt de teller op dalende klokflanken. Clr zet de teller terug op 0. Ep als de teller hoog is, geeft de huidige telling weer. Wanneer Sp hoog is, stelt de teller de telling in op het getal bij invoer
-
Beschrijving van uitgangen:
output is een kopie van de telling voor gebruik op LEDS 0-15. Telling geeft de huidige telling weer.
- Overall Place in System: Deze teller houdt bij op welke geheugenlocatie het programma zich bevindt. Alle programma's beginnen op geheugenadres 00000 (0) en gaan tot 11111 (31), tenzij er een halt wordt gebruikt. In spronginstructies blijft de programmateller tellen vanaf het adres waarnaar het programma springt.
Ingang MUX
- Beschrijving van ingangen: Adres neemt de invoer van schakelaars 11 tot en met 15. MAR neemt de invoer van het 10-bits register dat als MAR wordt gebruikt. Programma bepaalt welke invoer naar uitvoer moet worden gerouteerd.
- Beschrijving van uitgangen: uitgang leidt de geselecteerde ingang naar het RAM.
- Algemene plaats in systeem: deze MUX bepaalt of het adres van de schakelaars of de bus naar het RAM moet worden gerouteerd. In de programmeermodus wordt het adres van de schakelaars gerouteerd en in de bedrijfsmodus wordt het adres van de bus gerouteerd.
ramMUX
- Beschrijving van invoer: userInput is de invoer die de gebruiker invoert tijdens de programmeermodus. aRegInput zijn de gegevens in het A-register, dit wordt gebruikt tijdens een verplaatsingsoperatie. controle is de keuze voor deze MUX.
- Beschrijving van uitgangen: uitvoer is de 10-bits gegevensinvoer naar het RAM.
- Algemene plaats in systeem: deze MUX voert de 10-bits invoergegevens uit die in de RAM-module worden gebruikt. Wanneer de controlebit hoog is, voert de MUX de gegevens uit die de gebruiker in de programmeermodus heeft ingevoerd. Wanneer de controlebit laag is, voert de MUX de gegevens uit op de controlebus.
ramModule
- Beschrijving van ingangen: inputData zijn de gegevens die in het RAM worden opgeslagen. inputAddress is de locatie waar de gegevens worden opgeslagen. programma geeft aan of de computer zich in de programma- of run-modus bevindt. readWrit geeft aan of er een lees- of schrijfbewerking plaatsvindt. notCE is de besturingsbit voor de RAM-module. verplaatsen geeft aan dat een verplaatsingsbewerking wordt uitgevoerd.
- Beschrijving van uitgangen: outputDataToBus zijn de gegevens die van het RAM naar de bus gaan. outputData en output Address zijn de data en het adres die naar het instructieregister gaan.
- Algemene plaats in het systeem: het RAM zorgt voor programma- en gegevensopslag in het geheugen voordat een programma wordt uitgevoerd. Zodra het programma draait, ontvangt de RAM een adres van de MAR en voert de gegevens op dat adres uit naar de bus.
adresROM
- Beschrijving van invoer: opCode is de invoer die het adres bevat van de opcode die door de computer wordt uitgevoerd
- Beschrijving van uitgangen: opCodeStart is het geheugenadres dat de eerste micro-instructielocatie van de corresponderende opCode aangeeft.
- Algemene plaats in het systeem: deze module neemt de vergrendelde micro-instructie en geeft de geheugenlocatie weer die overeenkomt met het begin van die micro-instructiereeks.
ringteller
- Beschrijving van de ingangen: reset zet de teller terug naar 100000 (de eerste "T-status"). Clk verhoogt de teller met één op een dalende klokflank. NOP geeft aan dat de huidige status/cyclus een "geen bewerking"-cyclus is.
- Beschrijving van uitgangen: count is de output van de teller.
- Algehele plaats in het systeem: de ringteller regelt de vooraf instelbare teller en schetst de zes microstappen in elke instructiecyclus (T1-T6).
voorteller
- Beschrijving van de ingangen: opCodeStart is de geheugenlocatie van de micro-instructies voor de opCode die wordt uitgevoerd. T1 zet de teller terug op 0 wanneer deze hoog is. Als T3 hoog is, wordt opCodeStart geladen en gaat de telling verder vanaf die locatie voor de resterende 3 cycli (T4-T6). Clr stelt de teller in op 0. Clk verhoogt de teller met één op een dalende flank.
- Beschrijving van de uitgangen: controlWordLocation voert de geheugenlocatie uit van het uit te voeren stuurwoord.
- Algemene plaats in systeem: Elke op-code heeft 3 micro-instructies. De teller wordt met 1 verhoogd vanaf 0 voor de eerste 3 cycli (ophaalcyclus). De teller wordt dan geactiveerd door de ringteller om het adres op opCodeStart te laden en wordt met 1 verhoogd voor de resterende 3 cycli. Op deze manier regelt de preCounter de volgorde van de uit te voeren micro-instructies.
controleROM
- Beschrijving van ingangen: controlWordLocation is het adres van het controlWord dat de controlROM zal uitvoeren. NOP geeft aan dat de locatie een "geen bewerking" locatie is.
- Beschrijving van uitgangen: controlWord is het stuurwoord dat de verschillende computermodules in-/uitschakelt om een gewenste bewerking uit te voeren.
- Algehele plaats in systeem: deze module decodeert de geheugenlocatie van de preCounter en voert het controlewoord uit voor de gewenste bewerking.
ALU
- Beschrijving van ingangen: A en B zijn de ingangen van register A en register B waarop de ALU de rekenkundige en logische bewerkingen uitvoert. Wanneer aftrekken actief is, geeft dit aan dat B van A wordt afgetrokken.
- Beschrijving van uitgangen: resultaat is het resultaat van het optellen van A en B, of het aftrekken van B van A. De uitgangen groter dan, kleiner dan en gelijk om aan te geven of (AB of A=B) en worden gebruikt in de voorwaardelijke sprongmodule. fout geeft een over- of onderstroom aan wanneer deze actief is.
- Algemene plaats in systeem: de ALU bevat de logica voor de rekenkundige en logische bewerkingen die door de computer worden uitgevoerd. Deze module kan twee 10-bits binaire getallen optellen en aftrekken. De ALU kan ook bepalen of A>B, A
voorwaardelijkJmp
- Descriptoin van Inputs: inputCount wordt gebruikt om de huidige telling te vergrendelen. inputAddress wordt gebruikt om het adres te vergrendelen waarnaar gesprongen zou worden. loadFromRegister when low latches inputAddress. loadCount wanneer lage vergrendelingen inputCount. wanneer outputEnable laag is, wordt de output ingesteld op het adres om naar te springen.gT, iT en eQ bepalen welke voorwaarde wordt gecontroleerd. grotere dan, kleiner dan en gelijk aan zijn de invoer van de ALU die het resultaat aangeeft van de vergelijking tussen A en B. Op de stijgende klokflank van Clk worden de inputCount en inputAddress in registers ingelezen.
- Beschrijving van uitgangen: outputJmp is het adres dat de programmateller zal inlezen.
- Algehele plaats in het systeem: deze module verwerkt voorwaardelijke en niet-voorwaardelijke sprongen voor de computer. Op basis van de ingangen gT, iT en eQ bepaalt de module op welke voorwaarde moet worden gecontroleerd en of die voorwaarde waar of onwaar is. Als de voorwaarde waar is, zal het het adres van de instructie uitvoeren waarnaar moet worden gesprongen, anders wordt de telling van de volgende instructie uitgevoerd.
binToBCD
- Beschrijving van ingangen: nummer het 10-bits getal dat moet worden geconverteerd naar binair gecodeerd decimaal.
- Beschrijving van uitgangen: honderdtallen in de honderdtallen van het binaire getal. tientallen het cijfer op de plaats van de tientallen van het binaire getal. degenen het cijfer in de enen plaats van het binaire getal.
- Algehele plaats in het systeem: deze module converteert het 10-bits getal van het uitvoerregister naar BCD zodat onze viercijferige display-driver het getal in decimaal kan weergeven op het 7-segmentdisplay.
FourDigitDriver
- Beschrijving van ingangen: nummer is de 16 bit binaire ingang die naar de decoder wordt gestuurd. inClk is de interne klok van het Basys-bord en wordt gebruikt voor een klokverdeler. RST reset de klok die wordt gebruikt om de cijfers aan te sturen.
- Beschrijving van uitgangen: anode bepaalt welke cijferplaats wordt verlicht. cijfer is het invoernummer van de decoder.
- Algemene plaats in systeem: deze module stuurt de decoder aan om het BCD-nummer naar het display te sturen.
decoder
- Beschrijving van ingangen:inputNumber is het cijfer dat afkomstig is van de driver en dat zal worden gedecodeerd.
- Beschrijving van uitgangen: kathodes bepalen welke kathodes worden ingeschakeld om het gewenste cijfer weer te geven.
- Algemene plaats in het systeem: deze module decodeert het cijfer dat moet worden weergegeven op het 7-segments display.
viercijferige weergave
- Beschrijving van de ingangen: nummer is het nummer dat moet worden weergegeven op het 7-segments display. fout geeft aan wanneer het display "Err" moet weergeven. Clk is het kloksignaal waarop het display loopt. Dit signaal moet rond de 60 Hz zijn, zodat het display alle 4 cijferplaatsen tegelijk kan weergeven.
- Beschrijving van uitgangen: anode bepaalt welke cijferplaats is ingeschakeld. kathode bepaalt welke kathodes worden geactiveerd om het gewenste cijfer weer te geven.
- Algehele plaats in systeem: Deze module geeft een nummer weer op het 7-segments display. Raadpleeg de instructiehandleiding van de Basys 3-kaart voor informatie over welke kathodes en anodes worden geactiveerd om het display te gebruiken. Wanneer de foutbit hoog is, toont het display "Err".
outputMUX
- Beschrijving van de ingangen: progModeInput bepaalt welke led's aangaan tijdens de programmeermodus. runModeInput bepaalt welke led's aangaan tijdens de run mode. modeSelect is het selectie- of besturingsbit voor de MUX.
- Beschrijving van uitgangen: ledOutput geeft aan welke led's worden ingeschakeld.
- Algemene plaats in systeem: Afhankelijk van de modus waarin de computer zich bevindt (programma of rum), zal de MUX verschillende led's aanzetten. In de programmeermodus (modeSelect is '0'), zet de MUX led's aan om te lijken op de geheugenlocatie waarin de computer zich bevindt en wat deze bevat. In run-modus (modeSelect is '1'), wordt de MUX gebruikt voor debugging, maar kan worden ingesteld om iets anders weer te geven.
klokverdeler
- Beschrijving van de ingangen:stop leest de vijf MSB-bits van de bus om een stopcommando ('11111') te detecteren en stopt de klok. inputClk is het interne kloksignaal van het Basys 3-bord.
- Beschrijving van uitgangen: ouputClk is de nieuwe klok die is vertraagd.
- Algemene plaats in systeem: deze klok wordt gebruikt om de computer te vertragen, zodat de gebruiker kan bepalen wat er aan de hand is. De klok kan veel sneller lopen, maar staat momenteel op 2 Hz.
triStateBuffer
- Beschrijving van ingangen: Din is de 5-bits invoer die naar de buffer gaat. Ep is het controlebit.
- Beschrijving van uitgangen: Dout is de 5-bits uitgang van de buffer
- Algehele plaats in systeem: Wanneer de besturingsbit Ep actief is, voert de buffer de invoer uit. Als de besturingsbit niet actief is, voert de buffer niets uit.
tenBitDRregistreren
- Beschrijving van ingangen: Dbus is de ingang waar het register naar toe gaat. Met Clk kan het register gegevens inlezen op een stijgende klokflank. ARST stelt het register asynchroon in op 0. Wanneer outputEnable laag is, is de inhoud van het register de output. Wanneer readIn laag is, vergrendelt het register Dbus op de stijgende klokflank.
- Beschrijving van uitgangen: Qbus is de uitgang van het register
- Algemene plaats in systeem: het register wordt meerdere keren door de hele computer gebruikt en wordt gebruikt om informatie op te slaan bij het uitvoeren van bewerkingen.
fiveBitDRregistreren
- Beschrijving van ingangen: Dbus is de ingang waar het register naar toe gaat. Met Clk kan het register gegevens inlezen op een stijgende klokflank. ARST stelt het register asynchroon in op 0. Wanneer outputEnable laag is, is de inhoud van het register de output. Wanneer readIn laag is, vergrendelt het register Dbus op de stijgende klokflank.
- Beschrijving van uitgangen: Qbus is de uitgang van het register.
- Algemene plaats in systeem: het register wordt meerdere keren door de hele computer gebruikt en wordt gebruikt om informatie op te slaan bij het uitvoeren van bewerkingen.
Stap 3: Coderen
Hieronder vindt u een map met de beperkings- en bronbestanden voor de 10-bits computer.
Stap 4: Demo en voorbeeldcode
De video hierboven laat zien hoe u de 10-bits computer op het Basys 3 FPGA-bord programmeert. Een pdf met de op-codes en een voorbeeldprogramma is ook hieronder bijgevoegd.
Aanbevolen:
64-bits RT-kernelcompilatie voor Raspberry Pi 4B: 5 stappen
64-bits RT-kernelcompilatie voor Raspberry Pi 4B.: Deze tutorial behandelt het proces van het bouwen en installeren van 64-bits realtime-kernel op Raspberry Pi. RT-kernel is cruciaal voor volledige functionaliteit van ROS2 en andere realtime IOT-oplossingen. Kernel is geïnstalleerd op x64-gebaseerde Raspbian die kan worden o
Grote bestanden van computer naar computer verzenden: 6 stappen
Grote bestanden van computer naar computer verzenden: bestandsgroottes blijven toenemen naarmate de technologie vordert. Als je creatief bezig bent, zoals ontwerpen of modelleren, of gewoon een hobbyist bent, kan het overzetten van grote bestanden een gedoe zijn. De meeste e-maildiensten beperken de maximale grootte van bijlagen tot ongeveer 25
8-bits computer op een breadboard-overzicht: 3 stappen
8-bits computer op een breadboard Overzicht: Mijn doel voor dit project was om een beter begrip te krijgen van computerarchitectuur, hardwareontwerp en talen op assemblageniveau. Als junior aan de universiteit studeer ik computertechniek en had ik onlangs cursussen afgerond over elektronica, labs i
DIY MusiLED, muziek gesynchroniseerde LED's met Windows- en Linux-toepassing met één klik (32-bits en 64-bits). Eenvoudig opnieuw te maken, gemakkelijk te gebruiken, gemakkelijk te porten: 3 stappen
DIY MusiLED, muziek gesynchroniseerde LED's met Windows- en Linux-toepassing met één klik (32-bits en 64-bits). Eenvoudig te recreëren, gemakkelijk te gebruiken, gemakkelijk te poorten: dit project helpt je om 18 LED's (6 rood + 6 blauw + 6 geel) op je Arduino-bord aan te sluiten en de realtime signalen van de geluidskaart van je computer te analyseren en door te sturen naar de LED's om ze op te lichten volgens de beat-effecten (Snare, High Hat, Kick)
Gebruik SSH en XMing om X-programma's van een Linux-computer op een Windows-computer weer te geven: 6 stappen
Gebruik SSH en XMing om X-programma's weer te geven vanaf een Linux-computer op een Windows-computer: Als u Linux op het werk en Windows thuis gebruikt, of vice versa, moet u mogelijk soms inloggen op de computer op uw andere locatie , en programma's uitvoeren. Welnu, u kunt een X-server installeren en SSH-tunneling inschakelen met uw SSH-client, en één