Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage: ALU mit EPROM Table


von christian (Gast)


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

von jason (Gast)


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

von Christian (Gast)


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

von (prx) A. K. (prx)


Lesenswert?

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.

von Falk B. (falk)


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

von Christian (Gast)


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

von Sebastian (Gast)


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.

von Michael L. (michaelx)


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

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
Noch kein Account? Hier anmelden.