Hembyggd processor/dator
Postat: 16 februari 2010, 02:51:22
För några år sedan fick jag en idé: Att konstruera och bygga en egen dator, alltså själva processorn i en dator. Ingen färdigköpt MCU eller CPU, alltså.
Först hade jag tänkt att det skulle bli en dator med fyrabitars ordlängd. Jag satte upp en tabell över nödvändiga operationer/instruktioner och konstaterade snabbt att fyra bitar var för lite, så det fick bli en åttabitars.
I lådorna hemma fanns en hel del 74LS-logikkretsar, så målet var att bygga av dessa. Ja, de drar ström, men målet var inte att göra en strömsnål dator. Och dessutom fanns två 74LS181 4-bit ALU som fick ingå i bygget.
I en låda fanns också några SRAM av 6116-typ, så det fick bli 12-bitars adressbuss (6116 har 11-bitars adressering).
Att konstruera tog ett par år av funderingar och skissande, med flera månader av stillestånd då och då. När konstruktionen var klar var det dags att börja bygga. Det tog ungefär ett år, inklusive några längre stillestånd.
Jag byggde på halva Europakort "labbkort" som sätts i en rack. Alla anslutningar mellan IC-kretsarna gjordes med fastlödd virtråd, för att göra ombyggnad enkel. Det blev ett kort som genererar alla klockpulser. Ett kort för minne och adressbuss. Ett kort som avkodar instruktioner och skickar ut styrsignaler till övriga kort. Ett kort med register, ALU, flaggor och logik för villkorliga hopp. Och ett kort med hexadecimal-displayer och roterande omkopplare för programmering.
När bygget var klart var det dags för testkörning och felsökning. Ganska nervöst att slå på labb-agget. Men det gick ganska bra. Några mindre feltänk och några felkopplade trådar. Sedan fungerade den!
Den har ca 65 op-koder/instruktioner. Tre åtta-bitars register. Åtta-bitars ALU med flaggor. Carry kan sparas för 16-bitars addition t ex.
För enkelhetens skull består varje instruktion av två byte, en byte op-kod och en byte argument. Argumentet kan vara data eller låg-byte av adress (låg-nib av op-kod är hög-nib av adress för 12-bitars adressering). Exempel på instruktioner: Hämta byte från minne till register, spara register i minne, halt (stoppar processorn), ovillkorliga och villkorliga hopp, call (hopp med sparad återhoppsadress, en nivå endast), villkorlig return, addition, subtraktion, compare, increase, decrease, AND, OR, XOR, XNOR, NOT, mm.
Den drar ca 1,3 A på 5 V. Men, som sagt, målet var inte att bygga en strömsnål dator.
Varför konstruera och bygga en dator? Jo, för att visa för mig själv att det gick. Folk frågar mig vad man kan använda den till. Jag förstår inte frågan...
Först hade jag tänkt att det skulle bli en dator med fyrabitars ordlängd. Jag satte upp en tabell över nödvändiga operationer/instruktioner och konstaterade snabbt att fyra bitar var för lite, så det fick bli en åttabitars.
I lådorna hemma fanns en hel del 74LS-logikkretsar, så målet var att bygga av dessa. Ja, de drar ström, men målet var inte att göra en strömsnål dator. Och dessutom fanns två 74LS181 4-bit ALU som fick ingå i bygget.
I en låda fanns också några SRAM av 6116-typ, så det fick bli 12-bitars adressbuss (6116 har 11-bitars adressering).
Att konstruera tog ett par år av funderingar och skissande, med flera månader av stillestånd då och då. När konstruktionen var klar var det dags att börja bygga. Det tog ungefär ett år, inklusive några längre stillestånd.
Jag byggde på halva Europakort "labbkort" som sätts i en rack. Alla anslutningar mellan IC-kretsarna gjordes med fastlödd virtråd, för att göra ombyggnad enkel. Det blev ett kort som genererar alla klockpulser. Ett kort för minne och adressbuss. Ett kort som avkodar instruktioner och skickar ut styrsignaler till övriga kort. Ett kort med register, ALU, flaggor och logik för villkorliga hopp. Och ett kort med hexadecimal-displayer och roterande omkopplare för programmering.
När bygget var klart var det dags för testkörning och felsökning. Ganska nervöst att slå på labb-agget. Men det gick ganska bra. Några mindre feltänk och några felkopplade trådar. Sedan fungerade den!
Den har ca 65 op-koder/instruktioner. Tre åtta-bitars register. Åtta-bitars ALU med flaggor. Carry kan sparas för 16-bitars addition t ex.
För enkelhetens skull består varje instruktion av två byte, en byte op-kod och en byte argument. Argumentet kan vara data eller låg-byte av adress (låg-nib av op-kod är hög-nib av adress för 12-bitars adressering). Exempel på instruktioner: Hämta byte från minne till register, spara register i minne, halt (stoppar processorn), ovillkorliga och villkorliga hopp, call (hopp med sparad återhoppsadress, en nivå endast), villkorlig return, addition, subtraktion, compare, increase, decrease, AND, OR, XOR, XNOR, NOT, mm.
Den drar ca 1,3 A på 5 V. Men, som sagt, målet var inte att bygga en strömsnål dator.
Varför konstruera och bygga en dator? Jo, för att visa för mig själv att det gick. Folk frågar mig vad man kan använda den till. Jag förstår inte frågan...