Guten Tag,
ich habe einen Code für einen 4x1 Multiplexer geschrieben und mit
Quartus kompilieren lassen:
1
libraryieee;
2
useieee.std_logic_1164.all;
3
useieee.std_logic_unsigned.all;
4
5
entityMUX4X1is
6
port(S:inbit_vector(1downto0);
7
E:inbit_vector(3downto0);
8
Y:outbit);
9
endMUX4X1;
10
11
architectureVerhaltenofMUX4X1is
12
begin
13
withSselect--Auswahlsignal
14
Y<=E(0)when"00",
15
E(1)when"01",
16
E(2)when"10",
17
E(3)when"11";
18
endVERHALTEN;
Auch die Simulation hat funktioniert. Jetzt wollte ich mir den
Schaltplan/Logikplan mit dem RTL Viewer in Quartus anschauen und bekam
das Bild aus dem Anhang. Dazu bräuchte ich nun eine Erklärung:
1) Für was steht dieser Kasten? Sind FPGAs nicht immer nur aus
D-Flip-Flops aufgebaut? Soll es dann ein D-Flip-Flop darstellen?
2) Wenn ja, ich kann doch nicht nur mit einem D-Flipflop einen
Multiplexer aufbauen.
Mir ist gerade selber aufgefallen, wie dämlich die Frage war, der Kasten
selbst stellt einen Multiplexer dar. Ich habe hier aber nochmal ein
Beispiel, bei welchem ich nun nicht weiß, was die trapezförmigen Kästen
darstellen sollen.
Und noch eine allgemeine Frage: Welche logischen Bauteile sind in einem
FPGA vorhanden?
Die erste Frage ist in der Tat ähnlich dämlich wie Deine ursprüngliche,
denn es handelt sich auch bei diesen Trapezen im Multiplexer, nämlich
2:1. Bei zweien handelt es sich um "normale" Multiplexer, bei einem um
einen mit invertierenden Eingängen.
FPGAs enthalten als Grundstrukturen Look-Up-Tables, D-Register und ggf.
noch ein paar Multiplexer. Die Multiplexer, die Du in Deinem
RTL-Schaltplan siehst, werden aber im FPGA höchstwahrscheinlich in Form
von LUTs realisiert.
Und dann gibt es auch noch fertige Blöcke für Sonderfunktionen wie z.B.
Block RAMs, SERDES, Takterzeugung, Multiplizierer, usw..
Andreas S. schrieb:> es handelt sich auch bei diesen Trapezen im Multiplexer, nämlich> 2:1. Bei zweien handelt es sich um "normale" Multiplexer, bei einem um> einen mit invertierenden Eingängen.
ok. Mich hat hier die Bezeichnung Y~X etwas verunsichert, wüsste nicht
wofür das stehen soll.
Andreas S. schrieb:> werden aber im FPGA höchstwahrscheinlich in Form> von LUTs realisiert.
Wie kann man eine Schaltung aus LUTs zusammenbauen? Dachte, dass es sich
dabei nur um Wahrheitstabellen handelt
töre schrieb:> Mir ist gerade selber aufgefallen, wie dämlich die Frage war, der Kasten> selbst stellt einen Multiplexer dar. Ich habe hier aber nochmal ein> Beispiel, bei welchem ich nun nicht weiß, was die trapezförmigen Kästen> darstellen sollen.
In diesem Bild sind die trapezförmigen Kästen wieder das gleiche:
Multiplexer. Eben 2:1, daher genügt 1 Bit um den Eingang anzuwählen.
> Und noch eine allgemeine Frage: Welche logischen Bauteile sind in einem> FPGA vorhanden?
Ein FPGA ist zum Großteil nicht direkt aus 'logischen Bauteilen'
aufgebaut, wie du sie dir vorstellst (also and, or, nor, xor, usw.).
Stattdessen wird die Logik in einem FPGA mit Hilfe von LUTs (Look up
tables) gebildet. Diese haben mehrere Eingänge (meist zwischen 4 und 6)
und einen Ausgang. Damit können dann arbiträre Logikfunktionen
dargestellt werden. Zusammen mit FlipFlops (und eventuell anderem Kram
wie zum Beispiel Addierer) bilden solche LUTs (i.d.R. zwei davon) dann
einen Logikblock. Bei Altera werden diese ALM (adaptive logic module)
und bei Xilinx CLB (configurable logic block) genannt. Nach diesen
Akronymen einfach mal googlen und lesen...
Jetzt hat sich meine vorherige Antwort mit der von Andreas Schweigstill
überschnitten...
töre schrieb:> Andreas S. schrieb:>> werden aber im FPGA höchstwahrscheinlich in Form>> von LUTs realisiert.>> Wie kann man eine Schaltung aus LUTs zusammenbauen? Dachte, dass es sich> dabei nur um Wahrheitstabellen handelt
Genau, mit LUTs kannst du Wahrheitstabellen in Hardware implementieren.
Und mit Hilfe von Wahrheitstabellen kannst du deine Logikfunktionen
beschreiben. Also kannst du damit eine logische Schaltung aufbauen.
töre schrieb:> Wie kann man eine Schaltung aus LUTs zusammenbauen? Dachte, dass es sich> dabei nur um Wahrheitstabellen handelt
Jede nicht rückgekoppelte, kombinatorische Schaltung lässt sich als LUT
realisieren! Deren Verhalten lässt sich schließlich als Wahrheitstabelle
beschreiben. Der einzige Nachteil von LUTs besteht darin, dass ihre
Größe exponentiell mit der Zahl der Eingänge wächst und daher in FPGAs
nur bis ca. sechs Eingänge praktikabel ist.
>...was die trapezförmigen Kästen> darstellen sollen.
Multiplexer, 2:1 in diesem Fall.
>> Und noch eine allgemeine Frage: Welche logischen Bauteile sind in einem> FPGA vorhanden?
Hauptsächlich D-FFs und Lookup-Tables (LUTs). In die kannst Du jede
beliebige kombinatorische Funktion reinprogrammieren, z.B. ein
AND-Gatter oder Vergleicher.
Das Schematic, das Du gepostet hast, zeigt nicht die tatsächlich
verwendeten FPGA-Ressoucen, sondern eine abstraktere, aber leichter
verständliche Darstellung mit Vergleichern, Multiplexern usw. Das ist
die Register-Transfer-Ebene (RTL). Diese wird bei der Implementierung in
FFs und LUTs transformiert.
Die tatsächliche Implementierung im FPGA kanst Du Dir auch irgendwo
anschauen (keine Ahnung wo, ich kenne nur die Xilinx-Tools), aber das
ist quasi der Maschinencode des FPGA, könnte man sagen. Nennt sich auch
Technologiebene. Es ist etwas mühevoll, darin Dein Design
wiederzufinden, und im Allgemeinen auch nicht notwenig (aber manchmal
eben doch).
Vancouver schrieb:> ist quasi der Maschinencode des FPGA, könnte man sagen.
Das wäre dann eher der "Assemblercode des FPGA". Der Maschinencode
entspräche dem Konfigurationsbitmuster der einzelnen Blöcke, das gesamte
Programm dem Bitstream.
Beinhalten die gebrächlichen Entwicklungsumgebungen wie
ISE/Vivado/Quartus eigentlich auch Werkzeuge, mit denen man sich das
Konfigurationsbitmuster einer LUT oder eines sonstige Blockes ansehen
kann?
Vancouver schrieb:> Die tatsächliche Implementierung im FPGA kanst Du Dir auch irgendwo> anschauen
Aso ok, habe gedacht dass dies mit dem RTL Viewer direkt funktionieren
würde. Weiß jemand anderes, wo ich bei Quartus die genaue Verdahtung
nachschauen kann. Würde mich mal interessieren, wie so ein einfacher
Multiplexer in einem FPGA dann später aussieht.