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
:
Bearbeitet durch User
Hab ich auch noch nie gehört. Schau doch mal bei Wikipedia oder hier in den Artikeln. Vielleicht ist da was dabei... S.
In deinem eigenen Post ist FPGA mehrfach klug verlinkt - das hat das Forum freundlicherweise fuer dich getan.
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.
Ooops. Bei der Wahrheitstabelle des UND ist mir doch tatsächlich ein Lapsus passiert. Sie muss natürlich A B O 0 0 0 0 1 0 1 0 0 1 1 1 sein. Sorry.
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.
Schau dir mal dieses Video an, vielleicht wird es dann klarer: http://www.altera.com/education/training/courses/ODSW1005
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.
:
Bearbeitet durch User
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.
:
Bearbeitet durch User
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?
:
Bearbeitet durch User
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 <= A and B; |
oder halt
1 | y = C or D; |
. 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.
:
Bearbeitet durch User
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?
:
Bearbeitet durch User
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.
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,
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.
:
Bearbeitet durch User
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.
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.