Hallöchen allerseits,
kann man Xilinx ISE "beibringen" nur bestimmte Logik zur
realisierung/implementierung einer VHDL zu verwenden ?
So, dass er z.B. nur NAND2 (inter LUT's, in der RTL dann auch sichtbar
gemacht) Gatter verwendet ?
Ich benötige das, um eben den Komplexitätsgrad mehrer VHDL's zu
normieren.
Was ich nicht benötige sind Gegenvorschläge oder andere Lösungsansätze
für das Problem für diejenigen unter euch, die sich gerne Gedanken
machen ;)
Also, kann man das Xilinx ISE beibringen, wenn ja wie ?
Dankeschön!
> inter LUT's
Wie meinen?
> Also, kann man das Xilinx ISE beibringen, wenn ja wie ?
Ich denke nicht, denn sogar wenn du die Gatter manuell instantiierst und
von Hand verdrahtest, wird die Funktion soweit optimiert, dass eine
Funktion mit 4 Eingängen auf 1 Lut geht. Dafür sind die Tools optimiert,
das können sie gut.
> Ich benötige das, um eben den Komplexitätsgrad mehrer VHDL's zu> normieren.VHDL beschreibt ein System, in VHDL kommt nirgends ein NAND2 vor (*).
Was willst du da normieren?
(*) es sein denn explizit in der Beschreibung
>> Also, kann man das Xilinx ISE beibringen, wenn ja wie ?>Ich denke nicht, denn sogar wenn du die Gatter manuell instantiierst und>von Hand verdrahtest, wird die Funktion soweit optimiert, dass eine>Funktion mit 4 Eingängen auf 1 Lut geht. Dafür sind die Tools optimiert,>das können sie gut.
Optimierungen sind abschaltbar, manuelle Instantiierung wären somit ein
Weg. Allerdings möchtest du nicht wirklich eine FSM per Hand mit 2er
Gattern aufbauen.
<Ich benötige das, um eben den Komplexitätsgrad mehrer VHDL's zu
<normieren.
Klingt interessant, worum gehts dabei? Komplexitätsgrad sag mir in
diesem Zusammenhang garnichts.
MfG
Flächenkomplexität, Gatter(Anzahl)komplexität man kann alles was man
will als Komplexitätsmaß nehmen.
z.B. kannst du jede beliebig komplexe Funktion auf Konstante Laufzeit
bringen: Durch eine Look-Up Tabelle. Die wird nur u.U. dan irsinnig viel
SPeicherplatz verbrauchen. Deshalb geht (meistens) auch der benötigte
(Speicher)Platz in die Komplexitätsbetrachtung ein.
Da ein FPGA eh keine "Gatter" in dem Sinne hat (mal abgesehen von den
Spezialitäten wie MUX5/6 etc) sondern belibiges durch die LUT
implementiert wird wirds schwer.
Ich hatte es aber so verstanden, das einfach im RTL viewer NANDs
auftauchen sollen, das ließe sich ggf durch manuelle Sachen erzwingen,
dann kann mans aber auch gleich per Hand "malen".
> Also, kann man das Xilinx ISE beibringen, wenn ja wie ?
Warum sollte ISE überhaupt sowas implementiert haben?
ISE ist dazu gedacht, ein VHDL Design in deren Architektur (LUTs,
Slices, IOs) umzusetzen.
Es ist schon schwierig genug dies möglichst optimal und fehlerfrei zu
erreichen.
Warum sollte Xilinx auch nur eine Minute dafür verschwenden, ein VHDL
Design in irgend etwas zu transformieren, das für sie keinen Zweck
erfüllt?
Erst einmal Danke für die zahlreichen Antworten.
@Lothar Miller
Ich will quasie, dass er die LUT's nur mit der bool'schen Funktion eines
NAND2 füttert. Und erstmal mit nichts anderem. (Wenn das gelingt, dann
wäre es mir eine Freude statt nur NAND2 auch NOR2 oder andere Gatter zu
verwenden, die ich ihm vorgeben kann).
@Panda panik
"Optimierungen sind abschaltbar, manuelle Instantiierung wären somit ein
Weg. Allerdings möchtest du nicht wirklich eine FSM per Hand mit 2er
Gattern aufbauen."
Nein will ich nicht. Ich will ja gerade, dass XilinxISE mir die RTL nur
mit NAND2 ausgibt. Wenn ich das alles vorher per Hand machen würde,
bräuchte ich ja XilinxISE nicht ;)
"Klingt interessant, worum gehts dabei? Komplexitätsgrad sag mir in
diesem Zusammenhang garnichts."
Man kann ja bekannterweise jede logische Funktion mit NAND2 oder NOR2
Gattern umformen, sodass nur ebensolche zum Einsatz kommen. Das dient
dazu, einen Vergleich zu ermöglichen.
VHDL 1 umgeformt hat 7623 NAND2
VHDL 2 umgeformt hat 7213 NAND2
Man kann also erwarten, dass VHDL 2 in Bezug auf AREA weniger Platz
brauchen würde, wenn man diese auf einen Wafer ätzt. Es geht also rein
um einen Vergleich der VHDL's, und nicht die Portierbarkeit auf einen
FPGA.
@Läubi ..
"Ich hatte es aber so verstanden, das einfach im RTL viewer NANDs
auftauchen sollen, das ließe sich ggf durch manuelle Sachen erzwingen,
dann kann mans aber auch gleich per Hand "malen""
Joa, ich suche halt nach einem Weg, mir die Handmalerrei zu sparen. Wenn
man XilinxISE dazu bringen kann, warum denn nicht versuchen ?
evtl. kann es ja auch Altera Quartus ?
@Klaus Falser
"Warum sollte Xilinx auch nur eine Minute dafür verschwenden, ein VHDL
Design in irgend etwas zu transformieren, das für sie keinen Zweck
erfüllt?"
Da haben Sie voll und ganz recht. Dennoch besteht ja die Möglichkeit auf
Einflussnahme auf das Werkzeug. Ob es jemanden hier vielleicht bekannt
ist mit entsprechendem TCL Code einen Teil der Library auszublenden, so
dass XilinxISE nur noch auf NAND2 "zugreifen" kann ? Ich habe dazu
leider keinen Weg gefunden.
---
Und natürlich ist die Bedingung, dass es sich bei der VHDL
ausschließlich nur um kombinatorische Logik handelt (ohne Latche und
Clock-Netze).
> ... wenn man diese auf einen Wafer ätzt. Es geht also rein um> einen Vergleich der VHDL's, und nicht die Portierbarkeit auf einen FPGA.
Dann wird es wohl ein (höherpreisiges) ASIC-Tool sein müssen (wie Ottmar
schon trefflich bemerkte).
Denn Xilinx will an sich nichts anderes, als ein VHDL-Design auf
Xilinx-FPGAs (und idealerweise ausschliesslich auf Xilinx-FPGAs) zu
implementieren.
<"Klingt interessant, worum gehts dabei? Komplexitätsgrad sag mir in
<diesem Zusammenhang garnichts."
<Man kann ja bekannterweise jede logische Funktion mit NAND2 oder NOR2
<Gattern umformen, sodass nur ebensolche zum Einsatz kommen. Das dient
<dazu, einen Vergleich zu ermöglichen.
<VHDL 1 umgeformt hat 7623 NAND2
<VHDL 2 umgeformt hat 7213 NAND2
<Man kann also erwarten, dass VHDL 2 in Bezug auf AREA weniger Platz
<brauchen würde, wenn man diese auf einen Wafer ätzt. Es geht also rein
<um einen Vergleich der VHDL's, und nicht die Portierbarkeit auf einen
<FPGA.
Vergleiche nur auf Area sind aber reichlich zweckfrei, wenn man bedenkt
das kleine designs meist langsamer sind. Man denke da nur an die
Pipelines moderner CPU's. Ohne Pipelines deutlich kleiner aber sicher
nicht GHz-tauglich.
Und wenn es dir nur um größer oder kleiner geht und nicht um den exakten
Anteil an NAND-Gattern, dann zähl doch die LUT's. Weniger LUT's bedeuten
in einem bestimmten Rahmen eben weniger Kombinatorik und entsprächen
damit weniger NAND's. Und es gibt (gab?) auch FPGA mit anderen als LUT
Strukturen (Actel Antifuse?). Vielleicht findest Du dort etwas, was sich
besser auf die Gatterequivalente umrechnen lässt.
<"Klingt interessant, worum gehts dabei? Komplexitätsgrad sag mir in
<diesem Zusammenhang garnichts."
<Man kann ja bekannterweise jede logische Funktion mit NAND2 oder NOR2
<Gattern umformen, sodass nur ebensolche zum Einsatz kommen. Das dient
<dazu, einen Vergleich zu ermöglichen.
<VHDL 1 umgeformt hat 7623 NAND2
<VHDL 2 umgeformt hat 7213 NAND2
<Man kann also erwarten, dass VHDL 2 in Bezug auf AREA weniger Platz
<brauchen würde, wenn man diese auf einen Wafer ätzt. Es geht also rein
<um einen Vergleich der VHDL's, und nicht die Portierbarkeit auf einen
<FPGA.
Ahhh ich verstehe, es geht also um Asics, dort allerdings werden
Flächenschätzungen und vergleiche tatsächlich in vielfachen
eines NAND2-Gatters (4 MOS-Transistor Zelle)
http://www.vlsitechnology.org/html/cells/vxlib013/nd2.html
gemacht:
z.B: ein NAND mit 2 Eingängen hat die Fläche X, eine Flipflop
ist ca. 6,2 mal größer, ein MUX dann 2.1 mal usw...
Die Synthese-Tools von zB. Cadence oder Synopsys geben tatsächlich
die Fläche eines Designs in vielfachen von NAND2-Gattern aus.
Das heißt aber nicht das diese Tools nur NAND2 Gatter verwenden, nein
sie zählen nur die Fläche der Zellen im Design nach der Synthese
zusammen
und Teilen die Summe durch dann die Fläche eines NAND2 Gatters.
Aber dazu taugen FPGA-Tools nicht, denn die Struktur von FPGAs und Asics
unterscheiden sich denn doch zu stark.
Vorschlag ... ach nee du wolltest ja keine Gegenvorschläge oder andere
Lösungsansätze ..
> z.B: ein NAND mit 2 Eingängen hat die Fläche X, eine Flipflop> ist ca. 6,2 mal größer, ein MUX dann 2.1 mal usw...
Dann verstehe ich den Plan nicht ganz. Beispiel: Eine boole'sche
Funktion F braucht zur Implementierung den 15-fachen Platz eines NAND2
(z.B. als "Complex Gate" [*]). Das Ergebnis, welches du gerne hättest,
wäre die Zahl 15. Stattdessen forcierst du eine Implementierung von F
durch ein reines NAND2-Netz, welche nicht mehr Platzoptimal ist und z.B.
den 35-fachen Platz eines NAND2 belegt. Statt der gewünschten 15
bekommst du also 35 als Ergebnis.
Das einzige, was nun einfach ist, ist das bestimmen der (nicht
aussagekräftigen) Zahl von NAND2 durch Zählen der LUTs.
[*] so wurde das damals im Studium genannt. Gemeint war eine
Implementierung als AND/OR/INVERT, realisiert durch Verschaltung von
NMOS-FETs gegen Masse anhand der Disjunktiven Normalform von F und einer
Verschaltung von PMOS-FETs gegen V anhand der Konjunktiven NF von F)
Die Größe (und damit die Kosten) eines Chips vom Hersteller A exakt zu
bestimmen, in dem man eine Produktion mit der Technologie (Componenten
Bibliothek) beim hersteller B vorraussetzt geht natürlich nicht. Du
kannst aber die Anzahl von Bauelementen bestimmten typs bestimmen und
dann amhand der Bauteilbibliothek umrechnen.
nach der synthese wird mir hier aufgelistet wieviel FF, Logik mit 2
Eingängen, Logik mit 3 Eingängen MUX etc im Design steckt. Synthesetools
synplicity aber der XST von der ISE sollte das auch so machen. Das ist
bevor der mapper oder fitter dies in die 4er oder 6er LUTs "übersetzt",
sollte also noch nicht technologiespez. optimiert sein. Jetzt kannst du
dies anhand einer Bauteilbibliothek (z.B.
http://www.eu.necel.com/_pdf/A12213XJ5V1UM00.PDF )das in NAND2
Größenequivalente umrechnen, wobei ich z.B bei einer logik mit FanIn 3
ein NOR mit 3 Eingängen voraussetzen würde.
Aber wie gesagt, auf genaue Zahlen würde ich mich garnicht einlassen
sondern bei solchen Abschätzungen nur ein unterscheiden in
-nahezu gleich (Unterschied +-10%)
-etwas größer/kleiner (Unterschied 10.. 25%)
-deutlich größer (Unterschied 25 %)
Uiuiui, dass nimmt nun eine Richtung mit der ich nicht klar komme.
Fakt ist, ich komme nicht an so ein Synthesetool. Deswegen ja auch
explizit die Frage, ob man ISE mißbrauchen kann.
@bko
Mit dem Link http://www.vlsitechnology.org hast du mir sehr geholfen.
Man kann ja leicht herausfinden, wieviele Gatter z.b. inverter Xilinx
verwendet. Man könnte das ganze auf die librarys von der uni-Berkeley
abbilden, und die Fläche der verschiedenen Gatter im Design addieren, um
letztendlich am Schluß durch das NAND2 zu teilen. Allerdings hat
XilinxISE Gatter, die es nicht in der o.g. library gibt z.B. NAND12 etc.
Und da währe ich wieder bei meinem Anfangsproblem nur bestimmte Gatter
zur Synthese zu erlauben.
@Morin
Ein sehr interessanter Aspekt! Zusätzlich zu einem reinen NAND2-Area
Vergleich wäre ja auch die Skalierung durch logische Optimierung anhand
der Synthese. D.h. wie stark differenziert sich die logische
Beschreibung anhand einer VHDL durch NAND2 realisiert, im Gegensatz zu
einer VHDL mit Complex-Gattern realisiert und normiert auf die Fläche
eines NAND2 ?
Vielleicht kann man darauf Rückschlüsse ziehen, in Bezug auf
Flächeneffiziente VHDL-Modellierung. (Aber darauf wollte ich ja garnicht
hin, ich woill ja lediglich eine Vergleichbarkeit der Komplexität in
Bezug auf die Fläche).
Man könnte ISE ja eine Netzliste erzeugen lassen und sich eine SW
schreiben, die LUT-Funktionen auf NAND-Gatter abbildet. Das drüberlaufen
lassen und die Zahl ermitteln.
Ist zwar nicht gemütlich und ich zweifle, ob das so überhaupt Sinn macht
(schließlich optimiert ISE ja auch die HW, die im FPGA vorhanden ist,
nicht auf die library des ASIC-Herstellers), aber wer ASICs ohne
ASIC-Synthesetool machen möchte darf nicht pingelig sein.
LG
Matthias
Vielleicht sollte man mal darauf hinweisen, dass es freie Synthese-Tools
gibt, die ein VHDL/Verilog-Design auf eine ASIC-Technologie abbilden
können...
Da wäre z.B. Alliance der Uni Paris oder Signs der Uni Stuttgart.