Hallo,
ich soll folgende Punkte in ein nicht allzu langes Referat über FPGA's
einbringen:
------------
- Was ist FPGA?
- Hintergrund(Architektur), VHDL
- Wie, Wofür und Wann setzt man sie ein?
- Vergleich von DSP, uC, FPGA
-------------
Da ich überhaupt keine Ahnung von FPGA's hatte habe ich mich vorher im
Internet eingelesen.
Also FPGA = "Field Programmable Gate Array" und bedeutet übersetzt
"Feld-programmierbare gatter-felder"? Aber gibt nicht wirklich einen
Sinn.
So ein FPGA besteht ja aus mehreren Logikschaltungen, also aus
Flip-Flops und kombinatorische Schaltungen.
Und diese Schaltungen kann man nun mittels Softwaresprache(z.B. VHDL)
ein- und ausschalten, richtig?
Ist das im groben ein FPGA? Diese Informationen konnte ich mir aus dem
Internet holen. Der Großteil ist nicht wirklich verständlich. Ich müsst
es bildlich sehen, um es verstehen zu können, denke ich.
Kennt wer einen guten Guide, wo FPGA sehr einfach beschrieben werden
bitte?
PS: Aso und das ist jetzt keine Auffordung meine Referat zu machen, ich
bauche nur Hilfestellungen bitte!
Danke!
mfg
FK
F. K. schrieb:> Ist das im groben ein FPGA? Diese Informationen konnte ich mir aus dem> Internet holen. Der Großteil ist nicht wirklich verständlich. Ich müsst> es bildlich sehen, um es verstehen zu können, denke ich.
Ich denke, da lohnt sich mal ein Blick in das Datenblatt eines FPGAs, da
sind die Grundstrukturen (eher grob) beschrieben inkl. Blockdiagrammen.
Denke das hilft, die langen Texte besser zu verstehen.
Schau doch mal im Datenblatt des MachXO nach, das ist ein ganz kleiner
FPGA, was der Verständlichkeit zu gute kommt (Ich empfehle die Seiten 7
bis 12):
http://www.latticesemi.com/~/media/Documents/DataSheets/MachXO23/MachXOFamilyDataSheet.pdf
Also du kannst dir im groben einen FPGA so vorstellen: Da drin sind
'Weichen', die gestellt werden, in dem man sie programmiert. Daraus
ergibt sich dann eine bestimmte 'Schaltung'.
Ich finde in der aktuellen c't Hacks sind die sehr gut beschrieben(Mit
beispiel etc.)
Wenn du grad keine Lust hast zur nächsten Tanke zu laufen, wie bereits
gesagt: FPGA <-- ANKLICKEN!!
;-)
Hm ja ok ich habe mir das ja schon durchgelesen, also FPGA<<<-----.
Also besteht ein FPGA aus FlipFlops und kombinatorischen
Logikschaltungen? Das habe ich ja oben erwähnt.
Ich lese den Text, verstehe jedoch folgenden Satz nicht:
"Diese sind entweder Verknüpfungen verschiedener Logikgatter oder sog.
LUTs, die über elektr. Schalter entsprechend der vom Anwender
gewünschten Funktion miteinander geknüpft werden können."
Wenn LUT der Schalter bzw. die Weiche ist, die Logikschaltungen
verbindet, warum vergleicht man dann "Verschiedene Logikgatter" mit
"LUTs"? Also Gatter mit Weiche?
Das verstehe ich noch net so recht.
Also soweit ich das verstanden habe sind LUT's(Look up table) die
Eingangsstufen zu den Logik Blöcken. Sie bereiten die Daten sozusagen
vor.
>Lookup-Tabellen (LUT) bzw. Umsetzungstabellen werden in der Informatik und >in
der Digitaltechnik verwendet, um Informationen statisch zu definieren >und diese
zur Laufzeit des Programms - zur Vermeidung aufwändiger >Berechnungen oder hohen
Speicherverbrauchs - zu benutzen. wikipedia
F. K. schrieb:> Hm ja ok ich habe mir das ja schon durchgelesen, also FPGA<<<-----.>> Also besteht ein FPGA aus FlipFlops und kombinatorischen> Logikschaltungen? Das habe ich ja oben erwähnt.>> Ich lese den Text, verstehe jedoch folgenden Satz nicht:> "Diese sind entweder Verknüpfungen verschiedener Logikgatter oder sog.> LUTs, die über elektr. Schalter entsprechend der vom Anwender> gewünschten Funktion miteinander geknüpft werden können.">> Wenn LUT der Schalter bzw. die Weiche ist, die Logikschaltungen> verbindet, warum vergleicht man dann "Verschiedene Logikgatter" mit> "LUTs"? Also Gatter mit Weiche?>> Das verstehe ich noch net so recht.
"LUT" ist die Abkürzung für "Look-Up-Table". Man kann sie sich als
kleines RAM vorstellen, bei den die Adressleitungen die Eingangssignale
und die Datenausgänge die Ausgangssignale einer logischen Schaltung aus
Gattern sind.
Im wesentlichen besteht nämlich kein Unterschied ob eine logische
Funktion, wie z.B. das UND, dessen Wahrheisttabelle ich hier mal kurz
zeige:
A B O
0 0 0
0 1 0
1 0 0
1 1 0
nun tatsächlich, d.h. physisch durch eine Transistorschaltung, die eine
UND-Gatter egibt, realisiert wird oder durch einen Speicher, dessen
Adressen den Ausgangswert eines UND enthalten. Im folgenden zeige ich
das mal als RAM mit den Adressen 0 bis 3.
Adresse A B O
0 0 0 0
1 0 1 0
2 1 0 0
3 1 1 1
Deswegen sind LUTs zu Gatterschaltungen äquivalent.
Die nächstfolgende Frage wäre dann, warum man nun überhaupt LUTs
anstelle von Gattern nimmt.
Zunächst gibt es bei zwei Eingängen und einem Ausgang, insgesamt 16
verschiedene Möglichkeiten von logischen Verknüpfungen. Darunter sind
recht primitive Verknüpfungen, wie ein konstantes Signal und die
Identität, aber eben auch UND, ODER, XOR, NAND, NXOR etcpp.
Versuche einmal, wenigstens ansatzweise eine Schaltung zu entwerfen, die
alle 16 Möglichkeiten realisiert. Dann wirst Du sehen, dass recht
umfangreich wird. Das ist der erste Grund.
Logisch gesehen, brauchst Du vier Bits um aus einer der 16 Möglichkeiten
auszuwählen. Die Zahl von Bits ist aber "zufällig" auch genau die Anzahl
Bits, die ein RAM mit 4 Adresse und einem Bit Speicher eben speichern
kann. Der Aufwand an Speicher ist also bei der Gatterschaltung gleich
wie bei der LUT (RAM). Das ist der zweite Grund.
Weiter aber, brauchst Du bei der Variante aus Gattern eine zusätzliche
Schaltung, im wesentlichen Multiplexer und Decoder, die je nach der, aus
16 Möglichkeiten, gewählten Variante der logischen Verknüpfung,
angesteuert werden. Diese Schaltung ist, obwohl nicht eigentlich
kompliziert, recht umfangreich. Das ist der dritte Grund.
Wenn dein Englisch einigermaßen solide ist, lohnt sich dieses Video:
https://www.youtube.com/watch?v=gUsHwi4M4xE
Der typ erklärt ausführlich das Prinzip eines FPGA's ohne eine einzige
Zeile Code, also sehr theoretisch.
Letztens war in der C'T Hacks auch ein Special über FPGA's, in dem auch
zwei Einsteiger-Boards mitsamt programmier(genauer: Design- )anleitung
für ein erstes Helloworld mit FPGA's, also sehr praktisch.
Diese beiden Quellen sollten schonmal für ein gutes Grundverständnis
sorgen.
Grüße
Bitflüsterer schrieb:>> Weiter aber, brauchst Du bei der Variante aus Gattern eine zusätzliche> Schaltung, im wesentlichen Multiplexer und Decoder, die je nach der, aus> 16 Möglichkeiten, gewählten Variante der logischen Verknüpfung,> angesteuert werden. Diese Schaltung ist, obwohl nicht eigentlich> kompliziert, recht umfangreich. Das ist der dritte Grund.
Die Igloo Nano von Microsemi/Actel sind so gebaut. Allerdings nur mit 3
Inputs. Vorteil: Instant on.
Ebenfalls ein gutes Video, zwar auch auf Englisch, aber gut
verständlich, da von einem Deutschen vorgetragen:
https://www.youtube.com/watch?v=Er9luiBa32k
Der Referend redet zwar teilweise zu viel über seine HDL-Eigenkreation,
gibt aber z.B. einen guten Überblick, für welche Anwendung welche
Hardware geeignet ist.
Bitflüsterer schrieb:> Man kann sie sich als> kleines RAM vorstellen, bei den die Adressleitungen die Eingangssignale> und die Datenausgänge die Ausgangssignale einer logischen Schaltung aus> Gattern sind.
Also ADRESSLEITUNGEN --> RAM --> DATENAUSGANG. Richtig? Das ist ein
Speicher von vielem im FPGA, oder?
Bitflüsterer schrieb:> Im folgenden zeige ich> das mal als RAM mit den Adressen 0 bis 3.>> Adresse A B O> 0 0 0 0> 1 0 1 0> 2 1 0 0> 3 1 1 1
Die Adressenleitung ist eig. in dem Fall eine 2-Bit-Leitung die A,B
repräsentiert, richtig?
Bitflüsterer schrieb:> Zunächst gibt es bei zwei Eingängen und einem Ausgang, insgesamt 16> verschiedene Möglichkeiten von logischen Verknüpfungen.
Wie kommst du auf 16. Also 2^4 = 16, aber warum 4? Weil es 4 Adressen
gibt? Aber das verstehe ich dann nicht. Welche Möglichkeiten dann?
Bitflüsterer schrieb:> Versuche einmal, wenigstens ansatzweise eine Schaltung zu entwerfen, die> alle 16 Möglichkeiten realisiert. Dann wirst Du sehen, dass recht> umfangreich wird. Das ist der erste Grund.
1. Grund: Schaltungen zu aufwendig. Mit Speicher einfacher Realisierbar.
--> Richtig?
Bitflüsterer schrieb:> Logisch gesehen, brauchst Du vier Bits um aus einer der 16 Möglichkeiten> auszuwählen. Die Zahl von Bits ist aber "zufällig" auch genau die Anzahl> Bits, die ein RAM mit 4 Adresse und einem Bit Speicher eben speichern> kann. Der Aufwand an Speicher ist also bei der Gatterschaltung gleich> wie bei der LUT (RAM).
Ja, von wo holt man die 4Bits her? Wie kommst du auf diese. Warum ist
der Aufwand an Speicher und bei Gatterschaltungen gleich? Und warum ist
das dann ein Grund, Speicher zu nehmen?
Bitflüsterer schrieb:> Weiter aber, brauchst Du bei der Variante aus Gattern eine zusätzliche> Schaltung, im wesentlichen Multiplexer und Decoder, die je nach der, aus> 16 Möglichkeiten, gewählten Variante der logischen Verknüpfung,> angesteuert werden. Diese Schaltung ist, obwohl nicht eigentlich> kompliziert, recht umfangreich.
Vielleicht verstehe ich es, wenn ich weiß wie du genau auf 16
Möglichkeiten kommst, besser.
Hm warum brauche ich da, was zwischen den Dingen auswählt. Ich denke ich
habe dein Bsp noch nicht so recht begriffen. Warum braucht man das dann
bei Speichern nicht?
F. K. schrieb:> Wie kommst du auf 16. Also 2^4 = 16, aber warum 4? Weil es 4 Adressen> gibt? Aber das verstehe ich dann nicht. Welche Möglichkeiten dann?
Die LUT hat 4 "Adress-Eingänge" und in der LUT ist für jede der 16
möglichen Adressen der Zustand des einen Ausgangs durch die
Programmierung hinterlegt. Daher kann man mit so einer LUT viel mehr
machen als mit einem fest verdrahteten 4er UND Gatter oder so.
F. K. schrieb:
Ich bin gerade vom Nachbarn auf drei Bier eingeladen worden und daher
ein wenig - ähem - gehandicapt. Aber ich versuche mal, ob ich noch was
vernünftiges zustande bekomme.
> Bitflüsterer schrieb:>> Man kann sie sich als>> kleines RAM vorstellen, bei den die Adressleitungen die Eingangssignale>> und die Datenausgänge die Ausgangssignale einer logischen Schaltung aus>> Gattern sind.>> Also ADRESSLEITUNGEN --> RAM --> DATENAUSGANG. Richtig?
Richtig!
> Das ist ein> Speicher von vielem im FPGA, oder?
Schon. Nur besteht ein qualitativer Unterschied. Es gibt Speicher, der
die Konfiguration enthält. Dazu muss man auch den Inhalt der LUT zählen.
Und solchen der während der Laufzeit Daten enthält.
Abgesehen davon, kann man das so sagen.
> Bitflüsterer schrieb:>> Im folgenden zeige ich>> das mal als RAM mit den Adressen 0 bis 3.>>>> Adresse A B O>> 0 0 0 0>> 1 0 1 0>> 2 1 0 0>> 3 1 1 1>> Die Adressenleitung ist eig. in dem Fall eine 2-Bit-Leitung die A,B> repräsentiert, richtig?
Korrekt.
> Bitflüsterer schrieb:>> Zunächst gibt es bei zwei Eingängen und einem Ausgang, insgesamt 16>> verschiedene Möglichkeiten von logischen Verknüpfungen.>> Wie kommst du auf 16. Also 2^4 = 16, aber warum 4? Weil es 4 Adressen> gibt? Aber das verstehe ich dann nicht. Welche Möglichkeiten dann?
Indirekt ja. Es gibt vier verschiedene Ergebnisse weil es vier Adressen
gibt und die gibt es, weil es zwei Inputs gibt. (Das natürlich nur
prinzipiell. Je nach Hersteller und Typ können LUTs unterschiedliche
Anzahlen von Inputs haben. Meist enthalten die auch noch ein oder
mehrere Flip-Flops).
Konstant 0
A B Out
0 0 0
0 1 0
1 0 0
1 1 0
A und B
A B Out
0 0 0
0 1 0
1 0 0
1 1 1
A und not B
A B Out
0 0 0
0 1 0
1 0 1
1 1 0
Not a und B
A B Out
0 0 0
0 1 1
1 0 0
1 1 0
not A und not B
A B Out
0 0 1
0 1 0
1 0 0
1 1 0
A Identität
A B Out
0 0 0
0 1 0
1 0 1
1 1 1
B Identität
A B Out
0 0 0
0 1 1
1 0 0
1 1 1
A XOR B
A B Out
0 0 0
0 1 1
1 0 1
1 1 0
A oder B
A B Out
0 0 0
0 1 1
1 0 1
1 1 1
A äquivalent B
A B Out
0 0 1
0 1 0
1 0 0
1 1 1
not B
A B Out
0 0 1
0 1 0
1 0 1
1 1 0
Keine Ahnung - bin blau
A B Out
0 0 1
0 1 0
1 0 1
1 1 1
A -> B
A B Out
0 0 1
0 1 1
1 0 0
1 1 1
Not A und B (NAND)
A B Out
0 0 1
0 1 1
1 0 1
1 1 0
Konstant 1
A B Out
0 0 1
0 1 1
1 0 1
1 1 1
Eins fehl. Keine Ahnung. Bin blau.
> Bitflüsterer schrieb:>> Versuche einmal, wenigstens ansatzweise eine Schaltung zu entwerfen, die>> alle 16 Möglichkeiten realisiert. Dann wirst Du sehen, dass recht>> umfangreich wird. Das ist der erste Grund.>> 1. Grund: Schaltungen zu aufwendig. Mit Speicher einfacher Realisierbar.> --> Richtig?
Einfacher in dem Sinne, das die Struktur einfacher ist.
> Bitflüsterer schrieb:>> Logisch gesehen, brauchst Du vier Bits um aus einer der 16 Möglichkeiten>> auszuwählen. Die Zahl von Bits ist aber "zufällig" auch genau die Anzahl>> Bits, die ein RAM mit 4 Adresse und einem Bit Speicher eben speichern>> kann. Der Aufwand an Speicher ist also bei der Gatterschaltung gleich>> wie bei der LUT (RAM).>> Ja, von wo holt man die 4Bits her? Wie kommst du auf diese. Warum ist> der Aufwand an Speicher und bei Gatterschaltungen gleich? Und warum ist> das dann ein Grund, Speicher zu nehmen?
Der Speicher ist einfach und kompakter zu realisieren als eine
Gatterschaltung. Auch einfacher zu routen.
> Bitflüsterer schrieb:>> Weiter aber, brauchst Du bei der Variante aus Gattern eine zusätzliche>> Schaltung, im wesentlichen Multiplexer und Decoder, die je nach der, aus>> 16 Möglichkeiten, gewählten Variante der logischen Verknüpfung,>> angesteuert werden. Diese Schaltung ist, obwohl nicht eigentlich>> kompliziert, recht umfangreich.>> Vielleicht verstehe ich es, wenn ich weiß wie du genau auf 16> Möglichkeiten kommst, besser.
Siehe oben. Eins musst Du Dir noch ausdenken.
> Hm warum brauche ich da, was zwischen den Dingen auswählt. Ich denke ich> habe dein Bsp noch nicht so recht begriffen. Warum braucht man das dann> bei Speichern nicht?
Bei Speichern ist die Auswahl sozusagen inbegriffen, in dem ich den
Speicherinhalt setze.
Bis morgen dann. Hicks.
Warum hat es in dem fall 4 Adresseingänge? Was soll das bedeuten?
Ich mache ja ein UND. Da habe ich ja die Eingänge A und B und die können
2^2 verschiede werte annehmen und zu jedem wert gibt es einen bestimmten
Output.
Ich verstehe es nicht so wirklich.
Wollt ihr hier jetzt alles laienhaft nachzitieren, was in den
einschlägigen Wikis steht? Hier gibt es einen Artikel und Wikipedia hat
auch einen. FPGA-FOR-FUN hat auch noch was. 20h zu lesen!
F. K. schrieb:> Warum hat es in dem fall 4 Adresseingänge? Was soll das bedeuten?>> Ich mache ja ein UND. Da habe ich ja die Eingänge A und B und die können> 2^2 verschiede werte annehmen und zu jedem wert gibt es einen bestimmten> Output.>> Ich verstehe es nicht so wirklich.
Da muss man aufpassen von was man redet.
Ich habe nur erstmal das Prinzip erklärt. Mit 2 Eingängen und einem
Ausgang.
In wirklichen FPGAs haben die LUTs meist mehr Adresseingänge und mehr
Ausgänge. Das ergibt aber nur numerisch eine Erweiterung. Das Prinzip
ist das selbe.
Wletbester FPGA Pongo schrieb im Beitrag #3672232:
> Wollt ihr hier jetzt alles laienhaft nachzitieren, was in den> einschlägigen Wikis steht?
Jawoll. Das wollen wir. Latürnich. Hicks.
F. K. schrieb:> Ich mache ja ein UND. Da habe ich ja die Eingänge A und B und die können> 2^2 verschiede werte annehmen und zu jedem wert gibt es einen bestimmten> Output.
Ja genau, und indem du das "machst" also im Falle eines FPGAs mit einer
HDL beschreibst, legst du den Inhalt der LUT fest. Klar, du hast 2
Eingänge und einen Ausgang, aber es gibt mehr als 4 Möglichkeiten wie du
aus den beiden Eingängen den Ausgang kombinieren kannst. Das UND ist nur
eine kleine Untermenge. Die LUT kann auch als XOR, XNOR, NAND, OR, NOR
usw. programmiert werden. Das ist ja das schöne am FPGA und der LUT
Geschichte.
Bei 4 oder mehr Inputs wirds dann interessant, denn sowas wie X = A and
B or C xor D lässt sich ohne LUT zwar abbilden aber das sind dann viele
Gatter hintereinander. Eine LUT hat dagegen immer nur eine
Gatterlaufzeit. Deswegen haben aktuelle FPGAs mittlerweile LUTs mit 6
Eingängen.
Hm ok danke.
Also nochmals zum Mitschreiben:
Wir "machen" ein UND, d.h wir haben folgende Wahrheitstabelle zuerstmal:
A und B
A B Out
0 0 0
0 1 0
1 0 0
1 1 1
Hat man jetzt eine Adressleitung0, Adressleitung1, Adressleitung2 und
Adressleitung3.
In Adressleitung0 wird 00 hineingeschickt und Out = 0.
In Adressleitung1 wird 01 hineingeschickt und Out = 0.
In Adressleitung1 wird 10 hineingeschickt und Out = 0.
In Adressleitung1 wird 11 hineingeschickt und Out = 1.
Wird das so gemacht? Aber wo ist der Sinn dahinter? Irgendwie hat mich
das alles ein bisschen verwirrt.
Eig. braucht man doch nur A und B als Input oder nicht :D.
Ich denke ich stehe auf der Leitung. Jemand muss ich runter schubsen^^,
dass ich es begreifen kann :P.
Bei deinem einfachen UND2 brauchst du natürlich nur eine 2 Bit LUT mit 2
"Adressleitungen" an denen A und B angeschlossen sind. Durch die Konfig
des FPGA wird jetzt die o.g. Wertetabelle für das UND in die LUT geladen
und schon verhält die sich wie ein klassisches UND. In der Praxis hat
die LUT 4 oder 6 Eingänge, die sind dann halt nicht benutzt. Der Sinn
ist, dass du keine expliziten UND Gatter usw. Brauchst sondern tausende
Male die gleiche Schaltung auf dem Chip hast, nämlich die LUT und daraus
durch die Konfiguration von außen beim Start des FPGAs erst die
Schaltung realisierst, die du in der HDL beschrieben hast.
F. K. schrieb:> In Adressleitung0 wird 00 hineingeschickt und Out = 0.> In Adressleitung1 wird 01 hineingeschickt und Out = 0.> In Adressleitung1 wird 10 hineingeschickt und Out = 0.> In Adressleitung1 wird 11 hineingeschickt und Out = 1.>> Wird das so gemacht? Aber wo ist der Sinn dahinter? Irgendwie hat mich> das alles ein bisschen verwirrt.
Angenommen du hast ein FPGA mit LUT4, also 4 'Eingaenge' und du
moechtest ein 2-fach UND realisieren, also:
1
Q = A and B
An deine LUT wird nun als Adresse
1
"00" & A & B (-> 00xy binaer, das & ist eine Concatenation)
angelegt. Die LUT selber besteht aus einem 16x1bit SRAM, beim
konfigurieren wurde die mit
1
Adresse 0=b0000: 0
2
Adresse 1=b0001: 0
3
Adresse 2=b0010: 0
4
Adresse 3=b0011: 1
5
Address 4..15: don't care (irrelevant)
initialisiert. Wenn A und B logisch 1 sind und du damit die LUT (das
SRAM) addressierst, dann faellt am Ausgang eine logische '1' raus (da
die gebildete Adresse=3 ist), ansonsten eine '0' (bei allen anderen
'Adressen'). Und das entspricht genau deinem
1
Q = A and B
Einfach mal boolsche Gleichungen mit max. 4 Eingaengen hinschreiben und
die resultierende Wertetabelle als Inhalt in die LUT schreiben.
Und es gibt auch FPGAs mit LUT6, also nicht 16 sondern 64 Speicherbits.
Damit kannst du dann boolsche Gleichungen mit 6 Eingaengen
beschreiben...
F. K. schrieb:> ...> Hat man jetzt eine Adressleitung0, Adressleitung1, Adressleitung2 und> Adressleitung3.>> In Adressleitung0 wird 00 hineingeschickt und Out = 0.> In Adressleitung1 wird 01 hineingeschickt und Out = 0.> In Adressleitung1 wird 10 hineingeschickt und Out = 0.> In Adressleitung1 wird 11 hineingeschickt und Out = 1.>> Eig. braucht man doch nur A und B als Input oder nicht :D.
Richtig. So ist es. A und B sind Inputs. Und sie sind auch die
Adressleitungen. So wie manche Autobahnen gleichzeitig auch
Europastrassen sind. Oder Väter gleichzeitig Onkels.
Man hat also Adressleitung 0 und Adressleitung 1. Und einen Ausgang Out.
A und B
A B Out
0 0 0
0 1 0
1 0 0
1 1 1
resp.
A und B
Adr 0 Adr 1 Out
0 0 0
0 1 0
1 0 0
1 1 1
> ... Irgendwie hat mich das alles ein bisschen verwirrt.
Was genau hat Dich denn verwirrt?
Hm ok, ich denke ich habs fast verstanden:
Also ich habe hier ein Bild mit einem LUT, dass 4 Eingänge hat und einen
Ausgang.
Man kann nun an diesen Eingängen 2^4 verschiedene binäre Zahlen
anlegen(0000,0001,0011,0111,1000 etc.), also 16 verschiedene binäre
Zahlen!
Angenommen wir wollen nur ein UND reintun, dann ist es so wie es berndl
beschrieben hat:
berndl schrieb:> Adresse 0=b0000: 0> Adresse 1=b0001: 0> Adresse 2=b0010: 0> Adresse 3=b0011: 1> Address 4..15: don't care (irrelevant)
Warum nennt man das Adresse? Weil bei einer Adresse x, jene person x
wohnt?
Wenn b0000, b0001, b0010 am Input anliegt, dann Output = 0, wenn
Input=b0011, dann ist der Output = 1. --> Das repräsenteirt nun ein AND,
richtig?
Angenommen wir wollen ein OR und ein UND reinprogrammieren, also
brauchen wir erstmal folgende truth_tables:
A und B
A B Out
0 0 0
0 1 0
1 0 0
1 1 1
A oder B
A B Out
0 0 0
0 1 1
1 0 1
1 1 1
Wie unterscheidet man jetzt zwischen OR und AND? Die Inputs beim OR sind
ja dieselben, nur das Out ist anders. Das ist das verwirrnde.
F. K. schrieb:> berndl schrieb:>> Adresse 0=b0000: 0>> Adresse 1=b0001: 0>> Adresse 2=b0010: 0>> Adresse 3=b0011: 1>> Address 4..15: don't care (irrelevant)
Naja. Nicht ganz irrelevant. Die Eingänge sind ja physisch vorhanden.
Irgendwas musst Du für diese Eingänge festlegen. Entweder sind sie
konstant 0. Oder Du definierst auch für die restlichen Kombinationen die
Ausgangswerte.
>> Warum nennt man das Adresse? Weil bei einer Adresse x, jene person x> wohnt?
Das ist so eine Analogie, wie man sie häufig verwendet. Aber in
Wirklichkeit wohnt da natürlich keine Person.
> Wenn b0000, b0001, b0010 am Input anliegt, dann Output = 0, wenn> Input=b0011, dann ist der Output = 1. --> Das repräsenteirt nun ein AND,> richtig?
Fast. Siehe oben.
> Angenommen wir wollen ein OR und ein UND reinprogrammieren, also> brauchen wir erstmal folgende truth_tables:>> A und B> A B Out> 0 0 0> 0 1 0> 1 0 0> 1 1 1>> A oder B> A B Out> 0 0 0> 0 1 1> 1 0 1> 1 1 1>> Wie unterscheidet man jetzt zwischen OR und AND? Die Inputs beim OR sind> ja dieselben, nur das Out ist anders. Das ist das verwirrnde.
Die Frage ist zunächst einmal, ob Du sie tatsächlich unterscheiden
musst. Ob das Deine Aufgabe so verlangt. Ob das A der UND-Verknüpfung
das selbe A ist, wie es die ODER-Verknüpfung erhält, oder auch nicht.
Es gibt Fälle wo das so ist und solche in denen das nicht so ist.
Nehmen wir aber an, das es eben nicht dieselben As und Bs sind, wie Du
es in Deiner Frage voraussetzt.
'A' und 'B' sind für den Zwecke dieses Threads einfach nur wilkürlich
gewählte Namen. Du kannst also das A und B der UND-Verknüpfung auch
einfach C und D nennen. Das sollte Deine Frage ein wenig vereinfachen.
C und D
C D Out
0 0 0
0 1 0
1 0 0
1 1 1
A oder B
A B Out
0 0 0
0 1 1
1 0 1
1 1 1
Voilà, schon ist das Problem keines mehr.
Wieviele Adressleitungen braucht die LUT jetzt? Und wieviele
Ausgangsleitungen?
OK. Und jetzt den anderen Fall.
D.h. das A der UND-Verknüpfung enthält dieselbe Information wie das der
OR-Verknüpfung. Und für B gilt das selbe?
Wieviele Adressleitungen brauchst Du jetzt und wieviele Ausgänge?
Ich will auf folgendes hinaus:
Sehr viel Arbeit steckt beim Hardwaredesign darin, gründlich zu
überlegen, welche Information auf welche Weise repräsentiert wird.
D.h. erstmal festzustellen, welche Leitungen kommen herein und was
bedeuten ihre Zustände. So benennst Du auch diese Leitungen und fasst
sie auch zusammen.
Sei eine Leitung an einen Regensensor angeschlossen. Der Sensor gibt
eine 1 aus, wenn es regnet und eine 0, wenn es nicht regnet. Diese
Leitung nennst Du nun nicht A oder B sondern "Regen". Sei eine Leitung
an einen Windsensor angeschlossen. Er gibt eine 1 aus, wenn Wind weht
und eine 0, wenn kein Wind weht. Diese Leitung nennst Du nun nicht C
oder D, sondern "Wind".
Machst Du das konsequent und vollständig, dann gibt es danach keinerlei
Zweifel mehr, ob nun, das A einer Verknüpfung identisch mit dem A einer
anderen Verknüpfung ist oder nicht.
F. K. schrieb:> Warum nennt man das Adresse? Weil bei einer Adresse x, jene person x> wohnt?>> Wenn b0000, b0001, b0010 am Input anliegt, dann Output = 0, wenn> Input=b0011, dann ist der Output = 1. --> Das repräsenteirt nun ein AND,> richtig?
Genau so. Und Adresse nenne ich das deshalb, weil es sich um ein 1bit
breites SRAM handelt das 16 Eintraege hat, also mit 4 Adressbits
angesteuert wird
>> Angenommen wir wollen ein OR und ein UND reinprogrammieren, also> brauchen wir erstmal folgende truth_tables:>> A und B> A B Out> 0 0 0> 0 1 0> 1 0 0> 1 1 1>> A oder B> A B Out> 0 0 0> 0 1 1> 1 0 1> 1 1 1>> Wie unterscheidet man jetzt zwischen OR und AND? Die Inputs beim OR sind> ja dieselben, nur das Out ist anders. Das ist das verwirrnde.
Tja, wenn du jetzt z.B. mit einem am FPGA verdrahteten Schalter S
zwischen AND und OR unterscheiden willst, dann wuerdest du in deine LUT4
folgendes reinprogrammieren:
1
Adresse=0; bX000: 0
2
Adresse=1; bX001: 0
3
Adresse=2; bX010: 0
4
Adresse=3; bX011: 1
5
Adresse=4; bX100: 0
6
Adresse=5; bX101: 1
7
Adresse=6; bX110: 1
8
Adresse=7; bX111: 1
9
Adresse=8..15 sind durch das X schon abgedeckt, also unabhaengig von 0 und/oder 1
Deine Adressierung der LUT waere also "0" & S & A & B, wobei S der
Schalter ist, A und B deine Dateneingaenge.
Jetzt koenntest du viele 2-bit Terme ala UND, ODER, NAND, NOR, XOR, ...
sowie einige Schalter (z.B. 3 Stueck um 2^3=8 Ergebnisvektoren
abzufragen) alle einfach als Wertetabelle in LUTs abspeichern. Du
wuerdest am Ausgang immer das gewuenschte Ergebnis bekommen (fuer UND,
ODER, ...).
Bei zu vielen Schaltern wuerde die Toolchain halt irgendwann mal auf
etwas effizienteres umschalten. Wenn du also einen 16bit breiten Zaehler
hast und sowas schreibst:
1
if zaehler < 12345 then
2
Q = A and B
3
else
4
Q = A or B
5
end if
dann wuerden die bits des 'zaehler' im IF halt durch eine arithmetische
Operation (zaehler-12345 -> Ergebnis gleich Null oder ungleich Null)
ersetzt. Damit wuerde deine Logik im 'if' halt durch eine andere
Operation ersetzt, aber das Resultat waere das gleiche. Damit wuerde
dann aber Resourcenverbrauch gegenueber Laufzeit ersetzt werden.
berndl schrieb:> (zaehler-12345 -> Ergebnis gleich Null oder ungleich Null)
ups, da fehlen die Fallunterscheidungen 'negativ', 'null', 'positiv'...
So machen das auch ALUs (Arithmetic Logical Units) in CPUs...
Bis jetzt (d.h. bis zu Deiner letzten Frage) haben wir davon gesprochen,
wie man mit einem Ding (einer LUT) verschiedene logische Verknüpfungen
realisiert. Dabei kam es nicht darauf an, ob nun die As und Bs der
verschiedenen Verknüpfungen identisch sind oder nicht. Wir haben nämlich
immer vorausgesetzt, das wir zu einem Zeitpunkt entweder ein UND oder
ein ODER bauen. Wir haben A und B nicht interpretiert, denn das UND und
das ODER waren immer zweckfrei, d.h. ihr Ergebnis wurde auch nicht
interpretiert.
Deine Frage taucht erst auf, wenn Du ein UND und ein ODER gleichzeitig
realisieren möchtest. Dann müssen wir auch klären ob die beiden As die
selbe Information repräsentieren oder verschiedene.
berndl schrieb:> "00" & A & B (-> 00xy binaer, das & ist eine Concatenation)
Was meinst du damit? Was bezweckt man damit?
>> Wenn b0000, b0001, b0010 am Input anliegt, dann Output = 0, wenn>> Input=b0011, dann ist der Output = 1. --> Das repräsenteirt nun ein AND,>> richtig?> Fast. Siehe oben.
Hmm, wo oben? In deinem letzten Beitrag? Dass die anderen 16-4 = 12
verschiedenen Inputs auch irgendwas definieren müssen?
> Nehmen wir aber an, das es eben nicht dieselben As und Bs sind, wie Du> es in Deiner Frage voraussetzt.>> 'A' und 'B' sind für den Zwecke dieses Threads einfach nur wilkürlich> gewählte Namen. Du kannst also das A und B der UND-Verknüpfung auch> einfach C und D nennen. Das sollte Deine Frage ein wenig vereinfachen.>>> C und D> C D Out> 0 0 0> 0 1 0> 1 0 0> 1 1 1>> A oder B> A B Out> 0 0 0> 0 1 1> 1 0 1> 1 1 1>> Voilà, schon ist das Problem keines mehr.>> Wieviele Adressleitungen braucht die LUT jetzt? Und wieviele> Ausgangsleitungen?
Hm, ich versuchs jetzt mal alleine zu lösen.
Naja ich habe 4 Eingangsleitungen zum LUT: A,B,C und D.
Wenn folgendes anliegt:
ABCD
0000 --> Out = 0
0101 --> Out = x? hier haben wir ein problem, weil hier gibt es ja 2
verschiedene outputs. 1 vom OR und 0 vom AND, also braucht man 2
verschiedene Outputs.
0101 --> Out_or=1, Out_and=0
Aber man sagt doch, man kann bei 16 verschiedenen Eingängen 16
verschieden Outputs haben: Wie kann man bitte 16 verschiede
Truth_Tables(xor, or, and, nand, nor etc.) da reinbringen? Wie kann sich
das ausgehen?
Brauch ich dann auch 16 Outputs?
Naja und wenn A,B vom and und A,B vom or gleich sind dann folgendes:
ABCD
0000
0100
1000
1100
Würde dann ja reichen? CD sagen wir einfach soll immer = 0 sein.
F. K. schrieb im Beitrag #3672749:
>>> Wenn b0000, b0001, b0010 am Input anliegt, dann Output = 0, wenn>>> Input=b0011, dann ist der Output = 1. --> Das repräsenteirt nun ein AND,>>> richtig?>> Fast. Siehe oben.> Hmm, wo oben? In deinem letzten Beitrag? Dass die anderen 16-4 = 12> verschiedenen Inputs auch irgendwas definieren müssen?
Welche Inputs?
Nein. Oben in dem selben Beitrag, in dem das Wort "oben" steht.
Also der Text: "Naja. Nicht ganz irrelevant. Die Eingänge sind ja
physisch vorhanden.
Irgendwas musst Du für diese Eingänge festlegen. Entweder sind sie
konstant 0. Oder Du definierst auch für die restlichen Kombinationen die
Ausgangswerte."
>> Nehmen wir aber an, das es eben nicht dieselben As und Bs sind, wie Du>> es in Deiner Frage voraussetzt.>> ...>> Voilà, schon ist das Problem keines mehr.>>>> Wieviele Adressleitungen braucht die LUT jetzt? Und wieviele>> Ausgangsleitungen?> ...> Naja ich habe 4 Eingangsleitungen zum LUT: A,B,C und D.>> Wenn folgendes anliegt:> ABCD> 0000 --> Out = 0> 0101 --> Out = x? hier haben wir ein problem, weil hier gibt es ja 2> verschiedene outputs. 1 vom OR und 0 vom AND, also braucht man 2> verschiedene Outputs.> 0101 --> Out_or=1, Out_and=0
Genau. Wenn Vater nach München fahren will und gleichzeitig Mutter nach
Frankfurt, braucht man zwei Autos.
> Aber man sagt doch, man kann bei 16 verschiedenen Eingängen 16> verschieden Outputs haben: Wie kann man bitte 16 verschiede> Truth_Tables(xor, or, and, nand, nor etc.) da reinbringen? Wie kann sich> das ausgehen?>> Brauch ich dann auch 16 Outputs?
Ich sehe nicht, dass irgendwer geschrieben hat: "man kann bei 16
verschiedenen Eingängen 16"
Es wurde gesagt, das es bei zwei Input, 16 verschiedene Möglichkeiten
der Ausgabe bei den jeweils 4 verschiedenen Möglichkeiten des Inputs
gibt.
> verschieden Outputs haben:> Naja und wenn A,B vom and und A,B vom or gleich sind dann folgendes:> ABCD> 0000> 0100> 1000> 1100>> Würde dann ja reichen? CD sagen wir einfach soll immer = 0 sein.
Nein. Die Frage bezog sich darauf, das Du gleichzeitig ein UND und ein
ODER willst. Die Inputs für das UND sollten C und D sein (also paarweise
von A und B verschieden) und die Inputs für das ODER sollten A und B
sein.
Denke nochmal darüber nach.
Bei vier Inputs A bis D gibt es 16 Möglichkeiten
ABCD C ODER D A UND B
0000 0 0
0001 1 0
0010 1 0
0011 1 0
0100 0 0
0101 1 0
0110 1 0
0111 1 0
1000 0 0
1001 1 0
1010 1 0
1011 1 0
1100 0 1
1101 1 1
1110 1 1
1111 1 1
Du musst immer sämtliche Möglichkeiten betrachten. Denn das RAM wertet
auch immer alle Adressleitungen aus.
Ich glaube ich bin zu schnell für Dich vorgegangen.
Ich fasse noch mal zusammen und Du sagst mir wo es noch hakt, OK?
1. Logische Verknüpfungen UND, ODER, XOR usw. lassen sich als Inhalt
eines Speichers auffassen.
2. Nimmt man logische Verknüpfungen mit zwei Eingängen, so gibt es
vier (2^<Anzahl Eingänge> = 2^2) verschiedene Kombinationen für die
Eingangswerte.
3. Nimmt man die log. Verkn. von Punkt 2. mit einem Ausgang, so gibt
es 16 (2^(2^<Anzahl Eingänge>) = 2^2^2verschiedene Verknüpfungen der
zwei Eingangswerte.
Siehe meine Auflistung unter:
Beitrag "Re: Was ist FPGA?"
Lies auch nochmal in Deinen Notizen zur Kombinatorik nach. Das ist
Basiswissen für das Thema.
4. Will man zwei verschiedene log. Verkn. gleichzeitig realisieren,
braucht man zwei Ausgänge (drei bei drei etc.)
5. Werden in einer Anwendung zwei verschiedene Informationen benutzt,
dann müssen es physisch auch zwei verschiedene Eingänge sein. Umgekehrt:
wird ein und dieselbe Information in zwei verschiedenen log.
Verknüpfungen verwendet, benötigt man dennoch nur einen Eingang.
6. Alle Inputs einer kombinatorischen Logik, egal ob sie durch Gatter
oder durch RAM realisiert werden, müssen bedacht und kodiert werden.
Wenn Du bei einem dieser Punkte unsicher bist, dann nenne ihn. Zuerst
den, mit der niedrigsten Nummer, denn sie bauen aufeinander auf.
Kombinatorik muss sitzen. Boolsche Logik muss sitzen. Sonst ist alles
weiter sinnlos.
Danke!
Erstmal zu den ersten drei Punkten:
Bitflüsterer schrieb:> 1. Logische Verknüpfungen UND, ODER, XOR usw. lassen sich als Inhalt> eines Speichers auffassen.
Man schreibt dessen Wahrheitstabellen sozusagen in den Speicher,
richtig?
> 2. Nimmt man logische Verknüpfungen mit zwei Eingängen, so gibt es> vier (2^<Anzahl Eingänge> = 2^2) verschiedene Kombinationen für die> Eingangswerte.
Ja ist klar. 00,01,10,11 sind 4 verschiedene Eingangswerte bei 2
Eingangsleitungen.
Wir haben einen LUT mit 2 Eingängen hier, richtig?
> 3. Nimmt man die log. Verkn. von Punkt 2. mit einem Ausgang, so gibt> es 16 (2^(2^<Anzahl Eingänge>) = 2^2^2verschiedene Verknüpfungen der> zwei Eingangswerte.
Also wir haben den LUT mit zwei Eingängen und einen Ausgang jetzt. Das
verstehe ich überhaput nicht. Wie kommst du auf: 2^(2^<Anzahl Eingänge>
?
Man macht einen Ausgang dazu und auf einmal rechnet man so wie du es
geschrieben hast. Warum? Das habe ich noch nie so gehört^^.
F. K. schrieb:> Danke!>> Erstmal zu den ersten drei Punkten:>> Bitflüsterer schrieb:>> 1. Logische Verknüpfungen UND, ODER, XOR usw. lassen sich als Inhalt>> eines Speichers auffassen.> Man schreibt dessen Wahrheitstabellen sozusagen in den Speicher,> richtig?
Richtig.
>> 2. Nimmt man logische Verknüpfungen mit zwei Eingängen, so gibt es>> vier (2^<Anzahl Eingänge> = 2^2) verschiedene Kombinationen für die>> Eingangswerte.> Ja ist klar. 00,01,10,11 sind 4 verschiedene Eingangswerte bei 2> Eingangsleitungen.> Wir haben einen LUT mit 2 Eingängen hier, richtig?
Das nehmen wir hier mal an um das Thema zu erklären. In Wirklichkeit
(d.h. in realen FPGAs) sind mehr Eingänge üblich.
>> 3. Nimmt man die log. Verkn. von Punkt 2. mit einem Ausgang, so gibt>> es 16 (2^(2^<Anzahl Eingänge>) = 2^2^2verschiedene Verknüpfungen der>> zwei Eingangswerte.>> Also wir haben den LUT mit zwei Eingängen und einen Ausgang jetzt. Das> verstehe ich überhaput nicht. Wie kommst du auf: 2^(2^<Anzahl Eingänge>> ?> Man macht einen Ausgang dazu und auf einmal rechnet man so wie du es> geschrieben hast. Warum? Das habe ich noch nie so gehört^^.
OK. Ich mache noch einmal eine andere Tabelle um das deutlich zu machen.
Im wesentlichen handelt es sich um die Tabellen im Beitrag
Beitrag "Re: Was ist FPGA?" nur das sie jetzt
nebeneinander geschrieben sind.
Ich habe zwei Input X und Y. Die Spalten rechts daneben zeigen, welche
Ausgangswerte möglich sind. Sie sind mit den Hexadezimalziffern
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f durchnummeriert.
XY 0 1 2 3 4 5 6 7 8 9 a b c d e f
----------------------------------
00 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
01 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
10 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
11 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
Nimm einmal die Spalten 4 und e
Dann siehst Du das für die beiden Spalten bei gleichen Eingangswerten
unterschiedliche Ausgangswerte da sind.
XY 4 e
00 0 1
01 1 1
10 0 1
11 0 0
Einige der Zuordnungen von Eingangs- zu Ausgangswerten haben besondere
Namen. Z.B. die Spalte 1 ist das UND, die Spalte 6 das XOR.
Manche aber haben keinen eigenen Namen. Wenn man sie benennen will, muss
man sie ein wenig umschreiben. Z.B. Spalte 3 als "Identität X".
Soweit klar?
Hmmmm, ich verstehe noch nicht, warum dass man 00, 01, 10 und 11 als
"Eingang" hernimmt und dann mit denen eine "Wahrheitstabelle" macht.
Warum macht man das?
Also so wie z.b.:
X3,X2,X1 Y
0 0 0 0
0 0 1 1
0 1 0 0
0 1 1 0
1 0 0 0
1 0 1 1
1 1 0 1
1 1 1 0
Nur halt das man bei den Ausgängen(bei unserem Bsp) diese 0101010 und
00110011 und 00001111 "dings" macht.
Das ist mein Problem. Verstehst du was ich meine?
> Das ist mein Problem. Verstehst du was ich meine?
Ich bin nicht ganz sicher, ob ich Dich recht verstehe.
Zunächst ist die Wahrheitstabelle ein Hilfsmittel, wie eine Bauzeichnung
oder ein Kassenbuch. Die Zeichnung ist nicht das Haus und das Kassenbuch
ist nicht die Geldsummen die darin stehen. Es "repräsentiert", das Haus,
die fliessenden Geldsummen und in unserem Thema, die logischen
Verknüpfungen.
Das brauchen wir, um uns darüber unterhalten zu können, um es
manipulieren zu können. Und wir können es in andere Repräsentationen
umwandeln; z.b. Gatterschaltungen. Und schliesslich in ein wirkliches
Haus; eine reale Schaltung.
Es gibt aber noch eine weitere Abstraktionsebene. Wir beschreiben damit
ein Verhalten "insgesamt"; betrachten eine ganze Reihe von Möglichkeiten
gleichzeitig.
Nimm ein UND-Gatter. Die Wahrheitstabelle beschreibt dann, so wie der
Begriff "UND-Gatter" in "einem Aufwasch" alle nur möglichen Eingangs-
und Ausgangswerte. Wir wissen, das ein Eingang nicht gleichzeitig 1
und 0 sein kann. Aber mit der Nennung des Namens bzw. dem Aufschreiben
der Wahrheitstabelle wissen wir, dass, wenn wir etwa '00' an die
Eingänge legen, immer und zu jedem beliebigen Zeitpunkt und egal was
vorher war eine 0 am Ausgang erscheinen wird. (Solange Strom da ist).
In diesem Thread, in meinen Beiträgen, habe ich die Wahrheitstabelle(n)
benutzt um die Möglichkeiten zu beschreiben und sie abzählbar zu
machen. Denn Deine Frage war in diesem Beitrag
Beitrag "Re: Was ist FPGA?" wie ich auf die 16
Möglichkeiten komme. Und das hast Du gefragt, nachdem ich hier
Beitrag "Re: Was ist FPGA?" und hier
Beitrag "Re: Was ist FPGA?" erklärt habe, das
LUTs nicht als "Weichen" zu betrachten sind, wie Du hier
Beitrag "Re: Was ist FPGA?" gemeint hast,
sondern das sie die logische Funktion realisieren. Dabei habe ich
gesagt, das es einfacher ist die logische Funktion in LUTs zu
realisieren, anstatt sie als Gatter aufzubauen.
Der Witz ist ja, dass der Hersteller des FPGAs nicht vorher wissen kann,
welche logische Funktion Du als Anwender später, nachdem das Ding über
den Ladentisch gegangen ist, dann tatsächlich haben willst.
Daraus folgt das der Hersteller des FPGAs das so bauen muss, das es
nachher möglichst alle_ _möglichen logischen Verknüpfungen realisieren
können muss (oder jedenfalls soviele verschiedene wie möglich).
Um aber überhaupt eine Aussage darüber machen zu könne ob alle
Möglichkeiten auch tatsächlich realisierbar sind, muss man erstmal
wissen welche und wieviele Möglichkeiten es eigentlich gibt.
Um nochmal zum Anfang zu kommen: Wahrheitstabellen dienen dazu die
Funktion, die Logik eines Systems zu beschreiben. Dazu kann man auch
andere Mittel verwenden (Gatter-Schaltpläne, etc.) und sie werden auch
verwendet. Sie dienen auch dazu, ein System in bestimmten Richtungen zu
verändern oder zu optimieren (z.B. Karnaugh-Diagramm zur Vereinfachung
von Schaltungen).
In dem ich also diese große tabelle mit den 16 Möglichkeiten aufstelle
betrachte ich alle Möglichkeiten aller Kombinationen von zwei
Eingangswerten und einem Ausgangswert gleichzeitig. Dann kann ich sie
abzählen und dazu verwenden eine allgemeine Gleichung für mehr Eingangs-
und Ausgangswerte aufzustellen.
Hm ok, ich denke ich habs.
D.h. wir haben 16 Verschiedene Wahrheitstabellen. Wir haben 16
Verschiedene Funkionen(and, or, xor, etc.).
Also so listet man auf, welche Funktionen möglich sind richtig?
Und nun nimmt man eine Wahrheitstabelle raus und schreibt sie in ein
LUT, richtig?
F. K. schrieb:> D.h. wir haben 16 Verschiedene Wahrheitstabellen.
Bei einer LUT mit 4 Eingängen besteht die Wahrheitstabelle
aus 16 Werten. Es gibt also 2^16 mögliche Wahrheitstabellen.
F. K. schrieb:> Hm ok, ich denke ich habs.>> D.h. wir haben 16 Verschiedene Wahrheitstabellen. Wir haben 16> Verschiedene Funkionen(and, or, xor, etc.).>> Also so listet man auf, welche Funktionen möglich sind richtig?
Im allgemeinen tut man das nicht. Nur wenn man mit dem Thema anfängt und
sich die Grundlagen aneignet. Und in diesem konkreten Fall, um
klarzustellen wie man auf 16 Möglichkeiten kommt.
> Und nun nimmt man eine Wahrheitstabelle raus und schreibt sie in ein> LUT, richtig?
Das tut die Software in die man eine Hardwarebeschreibung eingibt. "Man"
selbst tut das nicht (es gibt ein paar Ausnahmen, aber die sind für den
Anfang unwichtig).
Ja, z.B. mit der Programmiersprache VHDL schreibt man diese
"Wahrheitstabellen" und die Software, wo man VHDL programmieren kann,
kann man dann auch diese Tabellen auf die Hardware spielen.
Richtig?
Nochmal zum UND-LUT und ODER-LUT zurück:
Es gibt hier also 16 verschiedene Eingangssignale ABCD:
ABCD C ODER D A UND B
0000 0 0
0001 1 0
0010 1 0
0011 1 0
0100 0 0
0101 1 0
0110 1 0
0111 1 0
1000 0 0
1001 1 0
1010 1 0
1011 1 0
1100 0 1
1101 1 1
1110 1 1
1111 1 1
Naja hier haben wir uns die Wahrheitstabellen für ODER und für UND
"rausgesucht"(also man sucht ja nicht raus, sondern man weiß ja schon
wie ein UND aussieht, also schreibt man die Tabelle einfach auf). Es
gibt ja hier 2^16 Wahrheitstabellen. AB sind die Eingänge für UND und CD
sind die Einänge für ODER. --> Eingangswerte von OR und AND sind
verschieden.
Also braucht man ein LUT mit 4 Eingängen und 2 Outputs. Die oben
geschriebene Tabelle, muss man z.b. mit VHDL veranschaulichen.
Richtig?
Und jetzt soll das Eingangssignal das ankommt in OR rein und in AND
rein.
Also hat man:
AB A OR B A AND B
00 1 0
01 1 0
10 1 0
11 0 1
Also hier wieder Wahrheitstabellen "gesucht" und mittels VHDL
veranschaulicht man diese dann.
Man braucht ein LUT mit 2 Eingängen und auch 2 Ausgängen. Aber gibt es
Fälle wo es mehrere log. Funktionen in einen LUT gibt und doch nur ein
OUT?, richtig?
Ist das möglich?
F. K. schrieb:> Ja, z.B. mit der Programmiersprache VHDL schreibt man diese> "Wahrheitstabellen" und die Software, wo man VHDL programmieren kann,> kann man dann auch diese Tabellen auf die Hardware spielen.>> Richtig?
Nicht eigentlich. Die Antwort habe ich schon gegeben.
Es ist zwar "möglich" eine Wahrheitstabelle in VHDL zu schreiben, aber
überlicherweise tut man das nicht. Für ein einführendes Referat ist das
irrelevant. In VHDL sagt man eher "A and B" und bei der Synthese wird
daraus der Inhalt der LUT.
>> Nochmal zum UND-LUT und ODER-LUT zurück:> Es gibt hier also 16 verschiedene Eingangssignale ABCD:>> ABCD C ODER D A UND B> 0000 0 0> 0001 1 0> 0010 1 0> 0011 1 0> 0100 0 0> 0101 1 0> 0110 1 0> 0111 1 0> 1000 0 0> 1001 1 0> 1010 1 0> 1011 1 0> 1100 0 1> 1101 1 1> 1110 1 1> 1111 1 1>> Naja hier haben wir uns die Wahrheitstabellen für ODER und für UND> "rausgesucht"(also man sucht ja nicht raus, sondern man weiß ja schon> wie ein UND aussieht, also schreibt man die Tabelle einfach auf). Es> gibt ja hier 2^16 Wahrheitstabellen. AB sind die Eingänge für UND und CD> sind die Einänge für ODER. --> Eingangswerte von OR und AND sind> verschieden.>> Also braucht man ein LUT mit 4 Eingängen und 2 Outputs. Die oben> geschriebene Tabelle, muss man z.b. mit VHDL veranschaulichen.>> Richtig?
Bis auf die Phrase "mit VHDL veranschaulichen" ist es ansonsten richtig.
"Veranschaulichen" tut man, um einen Sachverhalt visuell fassbar zu
machen.
In VHDL beschreibt man eine Hardware um ein FPGA zu konfigurieren. Für
den kundigen Betrachter ist eine VHDL-Beschreibung zwar anschaulich,
aber das ist nicht der Zweck von VHDL.
> Und jetzt soll das Eingangssignal das ankommt in OR rein und in AND> rein.> Also hat man:>> AB A OR B A AND B> 00 1 0> 01 1 0> 10 1 0> 11 0 1
Kleiner Flüchtigkeitsfehler, nehme ich an:
AB A OR B A AND B
00 0 0
01 1 0
10 1 0
11 1 1
> Also hier wieder Wahrheitstabellen "gesucht" und mittels VHDL> veranschaulicht man diese dann.
Nein. Man "sucht" keine Wahrheitstabelle. Man schreibt einfach "A AND B"
in VHDL.
> Man braucht ein LUT mit 2 Eingängen und auch 2 Ausgängen. Aber gibt es> Fälle wo es mehrere log. Funktionen in einen LUT gibt und doch nur ein> OUT?, richtig?>> Ist das möglich?
Es gibt keine grundsätzliche Festlegung wieviele Eingänge oder Ausgänge
eine LUT hat.
Den anderen Teil der Frage kannst Du Dir mit Blick auf die Tabelle der
16 Möglichkeiten selbst beantworten. (Hinweis: Welche Funktion ist dort
nicht enthalten?).
----
Darf ich mal fragen auf was für eine Schule Du gehst und mit welchem
Ausbildungsziel?
LUTs über die wir hier reden, haben immer nur einen Ausgang. Für deine
Beispiel-Funktionen braucht man also 2 LUTs. Und man schreibt auch in
VHDL diese Tabellen nicht auf, sondern schreibt einfach:
1
x<=AandB;
oder halt
1
y=CorD;
.
Der Mapper mapt dann diese beiden kmbinatorischen Verknüpfungen auf 2
LUTs.
Eine LUT mit 2 Ausgängen kann man natürlich aus RAM zusammen bauen, aber
im FPGA haben die LUTs vor den FlipFlops immer nur einen Ausgang.
He...he..
---------------------------
Programmiersprache VHDL
--------------------------
Als Alter habe ich schon gelernt das es keine Programmiersprache ist ,
dann wäre es VHPL..... he..he..
Gruss
Danke Leute!
Naja Bitflüsterer: Die Tabelle zeigt ja nur, dass das LUT 16
verschiedene 'Funktionen' machen kann, aber ob das das gleichzeitig geht
mit nur 2 inputs, weiß ich nicht.
Geht das? Ich denke nicht, da braucht man dann mehrere LUTs.
uC.net schreibt ja folgendes:
<<<<<Ein FPGA besteht, ähnlich wie ein CPLD, aus vielen Logikelementen,
hauptsächlich FlipFlops (FF) und davor gelagerten kombinatorischen
Logikschaltungen. Diese sind entweder Verknüpfungen verschiedener
Logikgatter (Actel) oder sogenannten LUTs (Look-Up-Table), die über
elektronische "Schalter" entsprechend der vom Entwickler gewünschten
Funktion miteinander verknüpft werden können.>>>>
Also ein FPGA besteht aus Logikelmenten. Also zuerst kommt eine
Logikschaltung und dann folgt ein FlipFlop, um den Output zu speichern.
So eine Logikschaltung kann durch LUT's oder durch Verknüpfungen
verschiedener Logikgatter dargestellt werden. Zweiteres ist doch die
physische Methode, also mit Transistoren und aufwendig etc., richtig?
"....,die über elektronische "Schalter" entsprechend der vom Entwickler
gewünschten Funktion miteinander verknüpft werden können."
Ich verstehe gar nicht, was der Satz hier aussagen soll. Welche Schalter
kommen hier vor?
Sind das solche Schalter:
http://commons.wikimedia.org/wiki/File:Switch_box.svg ?
--------------------
Ich gehe auf eine HTL(Leond.) man hat die Matura beim Abschluss.
F. K. schrieb:> Danke Leute!>> Naja Bitflüsterer: Die Tabelle zeigt ja nur, dass das LUT 16> verschiedene 'Funktionen' machen kann, aber ob das das gleichzeitig geht> mit nur 2 inputs, weiß ich nicht.>> Geht das? Ich denke nicht, da braucht man dann mehrere LUTs.
Das mag so sein oder nicht. Aber was ist die Begründung für die Antwort?
Es geht mir darum, dass man ja mit Faktenwissen allein nichts anfangen
kann. Man muss auch die Gründe kennen.
In diesem Fall ist der Grund trivial, ihn zu formulieren aber nicht.
Wenn jede Spalte eine Funktion beschreibt, wie kann dann eine Spalte
gleichermaßen mehrere Funktionen beschreiben? Eben. Das geht nicht.
Ergo, kann keine LUT, die ja nur eine physische Form der
Wahrheitstabelle ist, auch nicht gleichzeitig mehrere Funktionen
erfüllen.
Siehst Du was ich meine?
> uC.net schreibt ja folgendes:> <<<<<Ein FPGA besteht, ähnlich wie ein CPLD, aus vielen Logikelementen,> hauptsächlich FlipFlops (FF) und davor gelagerten kombinatorischen> Logikschaltungen. Diese sind entweder Verknüpfungen verschiedener> Logikgatter (Actel) oder sogenannten LUTs (Look-Up-Table), die über> elektronische "Schalter" entsprechend der vom Entwickler gewünschten> Funktion miteinander verknüpft werden können.>>>>>> Also ein FPGA besteht aus Logikelmenten. Also zuerst kommt eine> Logikschaltung und dann folgt ein FlipFlop, um den Output zu speichern.>> So eine Logikschaltung kann durch LUT's oder durch Verknüpfungen> verschiedener Logikgatter dargestellt werden. Zweiteres ist doch die> physische Methode, also mit Transistoren und aufwendig etc., richtig?
Beides wird physisch realisiert. Wie auch sonst? Was nicht real
existiert kann in der Realität keine Wirkung entfalten.
> "....,die über elektronische "Schalter" entsprechend der vom Entwickler> gewünschten Funktion miteinander verknüpft werden können.">> Ich verstehe gar nicht, was der Satz hier aussagen soll. Welche Schalter> kommen hier vor?
In einem FPGA gibt es viele LUTs. Es ist nicht etwa so, das ein FPGA
einfach nur eine große LUT ist. Vielmehr hast Du ein Raster von LUTs die
untereinander verbunden werden können. Damit aber die gesamte Funktion
flexibel ist, müssen auch diese Verbindungen flexibel sein; man sagt
"konfigurierbar" sein. Das machen eben diese Schalter.
> Sind das solche Schalter:> http://commons.wikimedia.org/wiki/File:Switch_box.svg ?
Dem Funktion nach ja, aber real nicht.
Lies mal die Doku von z.B. Xilinx ganz in Ruhe. Und erwarte nicht, dass
Du das alles in ein paar Tagen verstehst. Das ist nichts was man mal
schnell in zwei, drei Tagen kapiert.
>> --------------------> Ich gehe auf eine HTL(Leond.) man hat die Matura beim Abluss.
Ah. Danke.
Hm ok danke.
Aber da steht doch: "Diese sind entweder Verknüpfungen verschiedener
Logikgatter oder sog. LUTs..."
Wir haben die ganze Zeit von LUTs gesprochen, was ist nun das andere
hier? Ich dacht die Logic Blocks bestehen einfach aus LUTs? Die LUT
selbst ist ein SRAM.
Ist dann "Verknüpfungen verschiedener Logikgatter" dass aufwendige?
Und durch diese Schaltmatrix werden die LOGIC-Blocks untereinander
verbunden und die I/O-Pins, richtig?
F. K. schrieb:> Hm ok danke.>> Aber da steht doch: "Diese sind entweder Verknüpfungen verschiedener> Logikgatter oder sog. LUTs...">> Wir haben die ganze Zeit von LUTs gesprochen, was ist nun das andere> hier? Ich dacht die Logic Blocks bestehen einfach aus LUTs? Die LUT> selbst ist ein SRAM.> Ist dann "Verknüpfungen verschiedener Logikgatter" dass aufwendige?
Die Logic Blocks müssen nicht notwendigerweise aus LUTs aufgebaut sein.
Man kann das auch mit der selben Flexibilität mit Gattern machen. In
diesem Beitrag
Beitrag "Re: Was ist FPGA?"
wurde auch ein Typ genannt bei dem das so ist (ich kann das aus eigener
Kenntnis nicht bestätigen aber es gibt keine Grund das anzuzweifeln).
Machbar ist es aber auf jeden Fall. Ich habe Dich ja auch dazu
aufgefordert
(Beitrag "Re: Was ist FPGA?")
das einmal selbst zu versuchen. Das war kein Witz oder Versuch Dich
hochzunehmen. Es geht durchaus.
In der Funktion ist das (im wesentlichen) gleichwertig. Im
Herstellungsprozess nicht. Schau Dir mal die Datenblätter von Xilinx und
dem genannten Typ an. Dann wird es klarer.
> Und durch diese Schaltmatrix werden die LOGIC-Blocks untereinander> verbunden und die I/O-Pins, richtig?
Richtig.
Lies Dir auch noch einmal Deinen eigenen Beitrag
Beitrag "Re: Was ist FPGA?" und den FPGA-Artikel
durch. Ein bisschen musst Du auch selbst das Hirn einschalten und
Textverständnis nachfüllen. ;-)
Also, viel Erfolg beim Referat.
Fpga Kuechle schrieb:> Christian R. schrieb:>> LUTs über die wir hier reden, haben immer nur einen Ausgang.>>>> Eine LUT mit 2 Ausgängen kann man natürlich aus RAM zusammen bauen, aber>> im FPGA haben die LUTs vor den FlipFlops immer nur einen Ausgang.>> Nö, der technische Fortschritt hat uns bei der 7er serie von Xilinx> LUT's mit zwei Ausgängen beschert:> http://www.xilinx.com/support/documentation/data_sheets/ds180_7Series_Overview.pdf> S. 6>> MfG,
Gibt's auch schon beim Spartan6, der mit den 6bit LUTs. Waere ja auch
doof, wenn man fuer 0815-Logik soviele Resourcen verschwenden wuerde...
(Spartan6: 6bit LUT, also SRAM mit 64bit, hat aber 2 FFs am Ausgang und
kann auch in 2x5bit LUT, also quasi 2x32bit SRAM partitioniert werden)
berndl schrieb:> Fpga Kuechle schrieb:>> Christian R. schrieb:>>> LUTs über die wir hier reden, haben immer nur einen Ausgang.>>>>>> Eine LUT mit 2 Ausgängen kann man natürlich aus RAM zusammen bauen, aber>>> im FPGA haben die LUTs vor den FlipFlops immer nur einen Ausgang.>>>> Nö, der technische Fortschritt hat uns bei der 7er serie von Xilinx>> LUT's mit zwei Ausgängen beschert:>>> http://www.xilinx.com/support/documentation/data_sheets/ds180_7Series_Overview.pdf>> S. 6>> Gibt's auch schon beim Spartan6, der mit den 6bit LUTs. Waere ja auch> doof, wenn man fuer 0815-Logik soviele Resourcen verschwenden wuerde...
Stimmt, das geht auch schon beim technologischen Vorgänger Virtex-5
http://www.xilinx.com/support/documentation/data_sheets/ds100.pdf S.7
Isse also schon seit mindestens 8 Jahre Stand der Technik.
MfG,
Hmmm stimmt, an die hab ich gar nicht gedacht. Jetzt ist er sicher noch
mehr verwirrt. Die haben an diesen HTL aber auch immer Höhenflüge, von
da gibts oft solche Aufgaben hier im Forum, die die Kompetenz von
Abiturienten eigentlich übersteigen.
Christian R. schrieb:> Die haben an diesen HTL aber auch immer Höhenflüge, von> da gibts oft solche Aufgaben hier im Forum, die die Kompetenz von> Abiturienten eigentlich übersteigen.
Ja, selbst die Sendung mit der Maus könnte FPGA's nicht erklären. Die
beste Erklärung für nicht Dipl-Ings die ich mal gefunden hab war in der
Spektrum der Wissenschaft:
http://www.spektrum.de/alias/dachzeile/wandlungsfaehige-mikrochips/824047
Und damit auch nicht fürs die Berufsaubildung sondern für Studierende
anderer Fächer.
MfG,
HTL ist ja meines Wissens nur Gymnasium mit etwas Projektarbeiten und
technischem Zusatz. Allerdings tauchen hier oft Aufgaben von HTL
Schülern auf, die nicht für 17 jährige geeignet sind.
Fpga Kuechle schrieb:> Ja, selbst die Sendung mit der Maus könnte FPGA's nicht erklären. Die> beste Erklärung für nicht Dipl-Ings die ich mal gefunden hab war in der> Spektrum der Wissenschaft:
Habe das vor Jahren auch mal versucht. Mein Ansatz war, dass ich
Mikrocontroller mit Playmobil und FPGAs mit Lego verglichen habe. :-)
Ob es genutzt hat und die wenigen Zuhörer was davon kapiert haben, weiss
ich leider nicht.
Wenn man früher mit 16 in der Ausbildung Schaltungen aus Gattergräbern
gebastelt hat und die Leitungen mit Silberdraht gezogen hat hat man
schon ein viel besseres verständnis von FPGAs gehabt. Zu der Zeit waren
GALs verbreitet und CPLDs kamen in höherwertigen produkten vor, FPGAs
waren mehr im Wissenschaftlichen Bereich vertreten.
Am besten kann man FPGAs verstehen wenn man sich mit Digitalen
Schaltungen beschäftigt. Am besten man bastelt sich auf Papier mal nen
kleinen Mikroprozessor zusammen. Wenn man versucht dann den Datenfluß
und Ablaufkontrolle hinzubasteln lernt man ziemlich schnell und landet
fast von selbst in einer art RTL ähnlichen Denkweise, vorher sollten
natürlich grundlagen wie Multiplexer, Adressdekoder usw. mit einfachen
LED Schaltungen gebaut und verstanden werden.
Ok leute. Ich habe jetzt einiges über FPGAs zusammengeschrieben.
Nun fehlt mir noch:
- DSPs vs FPGAs
- ASIC vs FPGA
- Programmierung/Konfiguration bei FPGAs
Z.B. was soll ich zum FPGAs zum Vergleich zu DSPs schreiben? Man kann
doch mit dem FPGA mehrer DSPs Parallel bauen.
Man findet schwer irgendwas von diese Sachen, vllt kann mir wer da eine
kurze Hilfe geben, was ich da schreiben könnte.
Noch ein Tip zum Verständnis einer LUT:
Stell Dir mal vor, Du wolltest einen 8x8-Multiplizierer in Hardware
zusammenlöten, also mit zwei 8Bit-Zahlen rein und mit einer 16Bit-Zahl
raus.
Ein ganz einfache Möglichkeit wäre es, ein 8Bit-64k-EPROM (8Bit
Datenbus, 16Bit Adressbus) zu nehmen. Das Lowbyte der Adresse ist der
eine Faktor, das Highbyte ist der andere Faktor.
Jetzt lässt Du Dir von Deinem leistungsstarkten PC alle 65536 möglichen
Kombinationen ausrechnen und schreibst sie ins EPROM hinein.
Fertig ist Dein Multiplizierer!
Mit dem gleichen EPROM kannst Du aber auch einen Addierer bauen, indem
Du eine entsprechende Tabelle hineinprogrammierst. In diesem Fall sind
zwar die meisten Adressen im EPROM ungenutzt (weil Du ja nur 512
Kombinationen brauchst), aber Du kannst mit dem gleichen Baustein zwei
unterschiedliche Rechenarten realisieren.