Hi allerseits. Rein interessehalber beschäftige ich mich mit allgemeinen internen CPU Abläufen. Angenommen man möchte eine 4 Bit ALU konzipieren mit 2 Eingangsbusse: A0..3=A, A4..7=B und 1 Ausgang: Q0..3=Q, welche noch zusätzliche Eingänge für entsprechenden Modi(Add,Sub,Mul...) und Flags besitzt. Die verschieden Operationen für Add,Sub... sollen nun in Binärform(z.b. mittels C Compiler generiert) in einen EPROM als Look-Up Table hinterlegt werden. Mir ist klar das über A0..3=A, A4..7=B die 2 Operanten adressiert werden(im EPROM) die die Werte für z.b. A+B=Q enthalten. Ein C Program zur Lookup-Table Generierung sieht dann meistens so aus: ----------------------------- main() { ... outstream=fopen("4bitalu.bin","wb"); for(i=0; i<0x10000; i++) //alle möglichen Eing.kombinationen { fputc(do_rom(i),outstream); //schreibe EPROM Byte } ... ----------------------------- wobei do_rom(i),die entsprechende Operation ausführt: ----------------------------- char do_rom(long addr) { ... switch(cmd) { case ALU_ADD: out+=(a&0xf)+(b&0xf); ... } return(out); } ----------------------------- Das Ergebnis out wird also ins EPROM gespeichert. Jetzt endlich meine Frage: Wie/Wo wird denn die Addition ausgeführt? Ich habe mir im Internet versch. Projekte angeschaut (z.b.MYCPU) die eine ALU mittels oben beschriebenen Lookup-Table mittels EPROM implementierten. Aber nirgends Hardwareseitig Addierer oder so entdeckt. Ich verstehe nicht wie aus den Operanten a und b eine Summe berechnet werden kann ohne entspr. Hardware. Macht das etwa das EPROM oder so? Im Voraus Danke für eure Informationen. Gruß Christian
Hallo, In dem EEPROM sind die Lösungen gespeichert, d.h., wenn du bspw. 0b0000 und 0b0000 addieren willst, werden diese beiden Zahlen an die Addresseingänge des EEPROMs "gesendet". Die Addresse, die angesprochen wird, ist also 0b00000000. An dieser Stelle ist dann 0b0000 gespeichert, das Ergebis der Addition also. Willst du 0b0001 und 0b0010 addieren, werden diese Daten auch an die Addresseingänge "gesendet". Die angesprochene Addresse ist also 0b00010010. In diesem Teil des Speichers ist das Ergebnis (also 0b0011) gespeichert. Look-up Table heißt übersetzt "Nachschlag Tabelle". In dem EEPROM wird also das Ergebnis "nachgeschlagen". MfG
Heißt das, das man für jede Operation(Add,Sub...)und jede Adresskombination die Ergebnisse schon vorher in den EPROM speichern muß? Hat man z.b. EPROM mit 20 Eingängen = 2^20=1MB(Adressraum) dann bräuchte man doch bei 8 Operationen(Add,Sub...)einen 8MB großen EPROM.Ist das so richtig. Gruß Christian
Eine 4-Bit ALU mit 16 Operationen benötigt 4 Eingänge A 4 Eingänge B 4 Eingänge Op = 12 Adressbits = 4KB Evtl. kommt noch ein Eingang für's Carry-Bit hinzu.
@Christian (Gast) >Heißt das, das man für jede Operation(Add,Sub...)und jede >Adresskombination die Ergebnisse schon vorher in den EPROM >speichern muß? ja. >Hat man z.b. EPROM mit 20 Eingängen = 2^20=1MB(Adressraum) >dann bräuchte man doch bei 8 Operationen(Add,Sub...)einen >8MB großen EPROM.Ist das so richtig. Das kommt auf die Breite deiner Operanden an. Wenn du von den 20 Eingangsbits drei für die Auswahl der Operation wegnimmst, bleiben 17 für die Eingänge. Gerade genug 2x8 Bit Operanden plus Carry Bit. Daran erkennt man, dass die LooK Up Table Sache auch ihre Grenzen hat. Weshalb man das sinnvoll in Logik zerlegen muss. MfG Falk
Ach ja habe die 3 Leitungen für die 8 Operationsmodi vergessen. Wie werden denn ALU's in Mikroprozessoren realisiert? Gibt es welche in festverdrahteter Logik? Diese müssten doch viel schneller arbeiten können, da Zugriffszeiten der Speicher(EPROM) wegfallen. Gruß Christian
Ja, es gibt ALUs in festverdrahteter Logik. Man kann so etwas im TTL-Baustein 74181 finden, oder als Bestandteil von klassischen CPUs, deren Schaltplan bekannt (und überschaubar) ist, z.B. 6502, evtl. Z80.
Hi christian, ich glaube, du bringst hier 2 Dinge gehörig durcheinander. 1. Die ALU einer CPU ist keineswegs wie ein EPROM aufgebaut, in dem alle Ergebisse aller möglichen Berechnungen abgespeichert sind. Da wird wirklich gerechnet! 2. Es ist z.B. möglich, mit Hilfe eines EPROMs eine ALU "nachzubilden". Dazu werden die Adressleitungen als Eingänge verwendet, und die Datenleitungen geben das Ergebnis aus. So könnte man mit einem 1k-Byte-EPROM schon eine 4-Bit-ALU mit den 4 Grundrechenarten erstellen. Man könnte die Adressleitungen A0..A3 für den ersten, A4..A7 für den zweiten Operanden verwenden, und mit A8 und A9 dann Add, Sub, Mul und Div kodieren. Programmiert würde der EPROM mit allen zugehörigen Ergebissen. Oft wird ein EPROM (bzw. intern als Lookup-Table) im Mikrocontroller-Bereich auch dazu verwendet, um Umrechnungen in Sinus/Cosinus o.ä. zu realisieren. HTH
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.