Hur man bygger en 8-bitars dator (14 / 18 steg)
Steg 14: Microprogramming
NOP: Ingen åtgärd. (0000)
LDA: Ladda ackumulator med värdet på denna adress. (0001)
ADD: Lägg till värdet på den angivna adressen till värdet i ackumulatorn. (0010)
SUB: Subtrahera värdet på den angivna adressen från värdet i ackumulatorn. (0011)
STO: Lagra den ackumulator innehållet på den angivna adressen. (0100)
UT: Lagra den ackumulator innehållet i registret över produktionen så att operatören kan se den. (0101)
JMP: Hoppa till en viss instruktion i minnet på den angivna adressen. (0110)
HLT: Stoppa operationen av datorn. (0111)
För att avgöra vilken kontroll måste ord skickas för varje OP måste du veta vad bitar måste vara aktiv under varje T stat. För min dator anordnade jag bitarna enligt följande (en understrykning betecknar en aktiv-låg bit):
CE-CO J MI RO II IO OI BI EO SU AI AO RI HLT X
CE - Count aktivera (möjliggör räknaren program klockan input)
CO - klocka ut aktivera
J - hoppa aktiverar
MI - MAR Input
RO - programminne ut
II - instruktion register i
IO - instruktion register ut
OI - utdata register i
BI - B register i
EO - ALU utdata aktiverar
SU - subtrahera
AI - ackumulator i
AO - ackumulator utdata aktiverar
RI - programminne i
HLT - stopp
X - inte används
Här är vad bitar ska vara aktiv för varje T stat för en given instruktion samt den adress som de borde vara i kontrollen ROM:
Hämta:
0: CO, MI - programräknaren utgångar till MAR
1: CE - räknaren aktiveras för nästa klocka pulsen
2: RO, II - den adresserade byten är utdata från RAM till instruktion registret
NOP:
3: X
4: X
5: X
LDA:
6: IO, MI - adressen i instruktion registret överförs till MAR (lägsta fyra bitar)
7: RO, AI - den adresserade byten är utdata från minnet till ackumulatorn
8: X
LÄGG TILL:
9: IO, MI - adressen i instruktion registret överförs till MAR (lägsta fyra bitar)
10: RO, BI - den adresserade byten är utdata från minnet till ackumulatorn
11: EO, AI - summan av ackumulatorn och B registret är laddad i ackumulatorn
SUB:
12: IO, MI - adressen i instruktion registret överförs till MAR (lägsta fyra bitar)
13: RO, BI - den adresserade byten är utdata från minnet till ackumulatorn
14: AI, SU, EO - skillnaden på ackumulatorn och B registret är laddad i ackumulatorn
STO:
15: IO, MI - adressen i instruktion registret överförs till MAR (lägsta fyra bitar)
16: AO, RO, RI - ackumulatorn utgångar i programminnet på adresserade plats (RO och RI måste vara aktiv för en skriva på chip som jag använde)
17: X
UT:
18: OI, AO - ackumulatorn utgångar till utgång registret
19: X
20: X
JMP:
21: J, IO - instruktion registret laddar programräknaren med dess lägsta fyra bitar
22: X
23: X
HLT:
24: HLT - stopp är en signal till klockan
25: X
26: X
Din OP ROM innehåller multipler av tre på varje minnesplats. Detta är naturligtvis eftersom varje cykel tar tre utförande staterna. Därför blir adresserade data för din OP ROM:
0 - 3
1 - 6
2 - 9
3 - 12
4 - 15
5 - 18
6 - 21
7 - 24
För att programmera ditt val av chip har du många olika alternativ. Man kunde köpa en EEPROM och EPROM programmerare, men de kosta brukar en ansenlig mängd pengar. Jag byggde en skärbräda programmerare för min ROM som drivs genom att flytta sladdar runt och kontrollera Skriv och Läs aktivera pins med tryckknappar. Senare jag förenklat processen och ritade en Arduino programmeraren för min NVRAM specifikt. Jag ska bifoga koden som enkelt kan modifieras till program nästan alla parallella minne chip att du vill använda för det här projektet.