Forum: FPGA, VHDL & Co. CLBs, Slices, LUTs - Verständisfragen


von Fellap (Gast)


Lesenswert?

Hallo,

ich habe mal ein ganz grundlegende Frage zu FPGAs.

FPGAs bestehen nun ja, grob gesagt, aus einer Matrix von CLBs, 
Interconnections und IO-Cells...

Nun zu meiner Verständnisfrage der Hierachie...


Ein CLB besteht aus mehreren Slices (z.B. 4) - richtig?

Ein Slice besteht aus einem LUT,paar FlipFlops und Mux - richtig?

Wenn ich nun ein Gatter (z.B. AND, XOR oder NAND usw.) in VHDL designe, 
wird dann für jedes Gatter ein Slices benötigt?

Angenommen ich hätte 9000 Slices... könnte ich dann also nur "9000" 
Gatter erzeugen?

Bin ich da auf dem richtigen Weg?

Vielen Dank.

Viele Grüße und frohe Weihnachten.

von user (Gast)


Lesenswert?

Eine LUT hat zB 4 Eingänge, damit kannst du alle logischen Funktionen 
mit 4 Eingängen abbilden. Also ein AND, XOR, NAND mit 4 Eingängen oder 
auch eine andere Funktion mit 4 Eingängen.

von HertzFrequenz (Gast)


Lesenswert?

Eine LUT (das heisst Lookup-Table) kann im wesentlichen als eine 
Wahrheitstabelle dargestellt werden.

Je nach FPGA-Typ hat die eine gewisse Anzahl Eingänge und einen oder 
mehrere Ausgänge.

Durch die in jeder Weise mögliche Programmierung, also die Möglichkeit 
JEDEN Zusammenhang mit JEDER Kombination von Eingangswerten zu JEDEM 
möglichen Ausgangswert herzustellen ergibt sich eine grosse Anzahl an 
Kombinationen.

Nimm einmal eine Wahrheitstabelle mit 2 Eingängen und einem Ausgang.
Du kannst damit also 2^12 verschiedene "Programmierungen" beschreiben.
Jedes Bit der Wertetabelle kann ja völlig unabhängig von den anderen 
jeden möglichen Wert annehmen.

a b  | c
 1  2  3
 4  5  6
 7  8  9
10 11 12

Bei drei Eingängen und einem Ausgang sind es? Richtig. 2^32 
Kombinationen.

Schön. Aber wievielen Gattern entspricht das nun?

Ich nehme an, das hat irgendwann mal jemand ausgetüftelt, aber in 
Wahrheit interessiert das niemanden. Es gibt zweifellos Kombinationen 
für die man nur ein UND, oder ein ODER benötigen würde, dann aber auch 
welche mit vielleicht 10 Gattern.

Aber! Du kannst recht einfach einschätzen wieviele LUTs Du benötigst und 
das ist ja bei einem FPGa eine vorgegebene Zähleinheit.

Es ist doch so: Wenn Du LUTs mit sagen wir 5 Eingängen und einem Ausgang 
hast, dann brauchst Du pro Ausgang schonmal eine LUT. Logisch. Wenn Du 
jeweils maximal 5 Eingänge verknüpfst, dann benötigst Du also pro 
Ausgang immer nur eine LUT. Falls Du hingegen mehr als 5 Eingänge hast, 
sagen wir 7, so kannst Du (allerdings nur unter gewissen Umständen) 
erstmal 5 Eingänge verknüpfen und dessen Ausgang mit zwei weiteren um 
den endgültigen Ausgangswert zu erhalten.

Diese "gewissen Umstände" allerdings erschweren die Abschätzung.  Es 
kommt darauf an, ob sich die Eingangswerte in (mindestens) zwei Gruppen 
auflösen lassen, die entweder jeweils unabhängig voneinander den 
letztlichen Ausgangswert bestimmen. Das aber findet die Synthesesoftware 
für Dich heraus.

Jedenfalls aber ist die Anzahl der Eingänge und Ausgänge zumindest ein 
recht naher Zusammenhang zur Anzahl der benötigten LUTs für eine 
Abschätzung. Aus diesem Grunde interessiert niemanden die eigentliche 
Anzahl der Gatter.

Du erkennst aber an der etwas verwickelten Darstellung meiner Antwort, 
dass es eigentlich sinnvoll wäre, ersteinmal die Grundlagen an einzelnen 
Gattern auf dem Breadboard zu lernen und etwas komplexere Schaltungen 
selbst aufzubauen, damit man ein gewisses Verständnis für die 
Zusammenhänge entwickelt.

von LUT (Gast)


Lesenswert?

HertzFrequenz schrieb:
> Nimm einmal eine Wahrheitstabelle mit 2 Eingängen und einem Ausgang.
> Du kannst damit also 2^12 verschiedene "Programmierungen" beschreiben.

Mooooment mal.
LUTs sind kleine x1 SRAMs, die "Adressen" sind nicht programmierbar. 
Würde auch keinen Sinn ergeben z.B. 4x die gleiche Adresse programmieren 
zu können - was stünde dann am Ausgang?
Du programmierst da nur den Inhalt eines Speichers also in diesem Fall 4 
Bits (2^4 = 16 Funktionen)
Bei LUT-6 sinds 64 Bit.
(Bei Xilinx sind die auch direkt als 64x1 SRAM nutzbar, warum wohl? ;-) 
)


HertzFrequenz schrieb:
> Du erkennst aber an der etwas verwickelten Darstellung meiner Antwort,
> dass es eigentlich sinnvoll wäre,...

... mal früher ins Bett zu gehen ;-)

von HertzFrequenz (Gast)


Lesenswert?

>Du programmierst da nur den Inhalt eines Speichers also in diesem Fall 4
>Bits (2^4 = 16 Funktionen)

Ja. Du hast recht.

Auch meine Darstellung mit der Aufteilung einer Funktion auf zwei LUTs 
ist, ähem, ein wenig wirr.

Ich kann's aber gerne nochmal probieren (Aufschrei im Publikum, 
entsetztes Gemurmel ...).

von Fellap (Gast)


Lesenswert?

Dankeschön fuer eure Mühe, weiß das echt zuschätzen!

Aber ich habe da noch weitere Probleme.

In den ganzen Xilinx-Datenblättern vom Spartan 3E wird davon 
geschrieben,
dass ein CLB aus 4 Slices besteht. Diese 4 Slices bilden 2 Paare - 
SLICEL und SLICEM, wobei SLICEL nur LOGIC-Funktionen kann und SLICEM 
noch zusätzlich Memoryfunktionen besitzt. - Soweit so klar!

Nun kann ich aber aus den ganzen Datenblättern nicht herauslesen, ob ein 
Slice von diesen 4 Slices aus einem CLB ein oder zwei LUTs hat...


Wisst ihr das?

von Mike (Gast)


Lesenswert?

Google mal nach UG331 ("Spartan-3 Generation
FPGA User Guide"). Dort gibt es auf Seite 204 ein "Simplified Diagram of
the Left-Hand SLICEM"

von Fellap (Gast)


Lesenswert?

Mike schrieb:
> Google mal nach UG331 ("Spartan-3 Generation
> FPGA User Guide"). Dort gibt es auf Seite 204 ein "Simplified Diagram of
> the Left-Hand SLICEM"

Das Diagramm ist mir bekannt und genau da liegt mein Problem...
Da wird ein SLICEM dargestellt... welches aus TOP Portion und Bottom 
Portion besteht.

So wie ich das verstehe ist das folgendermaßen:

Eine CLB besteht aus 4 Slices.
Diese 4 Slices bestehen aus 2 verschiedenen Typen von Slices und zwar 
SLICEM und SLICEL.
2 SLICES des Types SLICESL wird zu einem Paar gruppiert und 2 SLICES des 
Types werden zu einem Paar SLICESM gruppiert.
Somit besteht ein CLB aus 2 Pärchen.

Nun ist mir aber nicht klar, ob diees Diagramm ein Päärchen darstellt 
oder wirklich nur genau ein SLICE des Types SLICEM???

von Fellap (Gast)


Lesenswert?

Oder noch genauer gesagt...

Moege CLB aus 4 Slices bestehen:

X0Y1 X1Y1
X0Y0 X1Y0


X0Y1 und X0Y0 stellen ein Päärchen SLICEM dar
X1Y1 und X1Y0 stellen das Päärchen SLICEL dar.

Ist nun in diesem Diagramm auf Seite 204 nur genau X0Y0 abgebildet ODER
das Päärchen X0Y0 & X0Y1 ?

von Uwe (Gast)


Lesenswert?

1 Slice hat immer 2 LUTs
Die SLICEM können auch RAM und Schieberegister
Die SLICEL können kein RAM und Schieberegister
trotzdem hat Jedes SLICE 2 LUTs auch das SLICEL

> Seite 204 nur genau X0Y0 abgebildet ODER das Päärchen X0Y0 & X0Y1 ?
nur genau X0Y0
ist natürlich equivalent mit X0Y1

von Fellap (Gast)


Lesenswert?

Uwe schrieb:
>> Seite 204 nur genau X0Y0 abgebildet ODER das Päärchen X0Y0 & X0Y1 ?
> nur genau X0Y0
> ist natürlich equivalent mit X0Y1

Super genau das wollte ich wissen, dankeschön!

von Sigi (Gast)


Lesenswert?

X0Y0 und X0Y1 sind MSLICES,
X1Y0 und X1Y1 sind LSLICES,
d.h. immer spaltenweise MSLICES, dan LSLICERS etc..

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.