Verständnisfrage: ALU mit EPROM Table

Gast #1767462
Lesenswert?

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
Gast #1767543
Lesenswert?

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
Gast #1767608
Lesenswert?

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
#1767646
Lesenswert?

@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
Gast #1767673
Lesenswert?

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
Gast #1767681
Lesenswert?

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.
#1767682
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren