Forum: FPGA, VHDL & Co. Init-Werte bei Xilinx


von Anguel S. (anguel)


Lesenswert?

Hallo Leute!

Ich hatte mal gelesen, dass Xilinx für die FPGAs empfliehlt, Init-Werte 
für die Synthese zu benutzen, da FPGAs SRAM basiert sind und vorgeladen 
werden. Heißt das, dass man ganz auf Resets verzichten könnte? Die 
nächste Frage wäre dann, wie es bei den CPLDs damit aussieht (z.B. 
CoolRunner II). Werden dort die Init-Werte genauso beim Power-Up 
angewendet wie bei FPGAs?
Wo findet man genaue Dokumentation hierzu, habe schon gesucht aber nix 
gefunden :(

Viele Grüße,
Anguel

von Andreas B. (Firma: www.collion.de) (bergy) Benutzerseite


Lesenswert?

Hallo Anguel,

Xilinx empfielt ausdrücklich zu überlegen ob und wo man wirklich resets 
benötigt.
Wie schon gesagt, das FPGA hat eine interne Resetlogic, welche zum 
Initialisierungszeitraum die interne Initialisierung steuert und beim 
Laden des Bitstreams werden alle FF Elemente (mit einem definierten 
Zustand geladen). Die Initwerte von Distributed und Blockmemories können 
ebenfalls angegeben werden.

Schau Dir bei Xilinx einmal folgendes Dokument an:
wp272.pdf - Get smart about reset, think local not global

Bei den CPLDs ist es etwas anderes, da grundsätzlich nur der Q Ausgang 
z.B. in Richtung Ausgang geht. Hier kann es zu Einschränkungen kommen. 
Eine Quelle von Dokumenten ausserhalb des jeweiligen Datenblattes in dem 
die Logikzellen ja meist dargestellt sind, kann ich allerdings auch 
nicht zu bieten...


Gruß

Andreas

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Xilinx empfielt ausdrücklich zu überlegen ob und wo man wirklich resets
> benötigt.
Insbesondere asynchrone Resets in einem synchronen Design sind mit 
äusserster Vorsicht zu geniessen. Wir hatten das schon im 
Beitrag "Re: Xilinx und die Resets"

> Heißt das, dass man ganz auf Resets verzichten könnte?
Ja, denn wer braucht in einem SRAM-FPGA den Reset?
Nur der Entwickler: dass er einen Knopf hat, um sein amoklaufendes 
Design wieder zur Ruhe zu bringen... :-/

von Klaus F. (kfalser)


Lesenswert?

Anguel S. schrieb:
> Die
> nächste Frage wäre dann, wie es bei den CPLDs damit aussieht (z.B.
> CoolRunner II). Werden dort die Init-Werte genauso beim Power-Up
> angewendet wie bei FPGAs?

Das Initialisieren von Registern funktioniert beim CPLDs genauso wie bei 
FPGAs. Ich hätte keinen Unterschied bemerkt.
Die Register wachen mit dem gewünschten Wert auf.

von Ottmar (Gast)


Lesenswert?

Wenn du auf deiner xilinx insel bleibst und damit zufrieden bist 
begrenzt portierbaren code zu erzeugen, dann kanst du in der tat 
teilweise auf einen reset verzichten.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Wenn du auf deiner xilinx insel bleibst und damit zufrieden bist
> begrenzt portierbaren code zu erzeugen
Ich sehe es eher so, dass auch die anderen FPGA-Hersteller dieses sehr 
praktische Feature implementieren werden. Denn ein SRAM-FPGA muß sowieso 
geladen werden, das sind schon 16 Bits für eine 4-fach Lut, dazu jede 
Menge Konfigurationsschalter und Muxer. Da machen die paar FFs den Kohl 
wirklich nicht mehr fett...

Und so ein FPGA-Design einfach so auf ein ASIC zu portieren, da sind 
dann sowieso noch einige andere Ecken, an denen es klemmen wird.

von Ottmar (Gast)


Lesenswert?

Lothar Miller schrieb:
> Und so ein FPGA-Design einfach so auf ein ASIC zu portieren, da sind
> dann sowieso noch einige andere Ecken, an denen es klemmen wird.

Ein gut geschriebener RTL-Code ist auf jede Technologie problemlos zu 
portieren. RTL-Code der sich auf Spezifika einer Technologie verlässt 
nicht.

Auch wenn man bei SRAM-FPGA's bleibt kann es sehr leicht passieren das 
zukünftige Projekte aus Systemanforderungen heraus, die man nicht 
beeinflussen kann, einen Reset verwenden müssen. Das bedeutet 
funktionierenden code umschreiben.
Also gleich alles resetten und der code kann heute, morgen und 
übermorgen verwendet werden.

von Andreas B. (Firma: www.collion.de) (bergy) Benutzerseite


Lesenswert?

Hallo Ottmar,

deine Ansprache hat nur einen Haken:

Ohne Nutzung herstellerspezifischer Feature lässt sich somanches 
anspruchsvolle Design gar nicht stemmen.
In denen Fällen in denen es wiederum möglich ist, KÖNNEN höhere Kosten 
entstehen (grösseres FPGA, schnellerer Speedgrate).

Beispiele: PLLs  DLLs  DCMs, Serdes, MGT, GTPs, DDR-IO, 
IO-Serialisation, ISP-Bootup and Reconfiguration,internes Monitoring 
(Temperatur) etc...

Da hört dann die Portierbarkeit dann doch auf und der Entwickler oder 
gleich die ganze Company schiesst sich dann auf eine Zieltechnologie 
ein.
Die Beispiele in denen Entwickler mal heute auf Xilinx, morgen Altera 
und übermorgen Atmel eingeschworen werden um in der nächsten Woche ASIC 
zu backen sind eher seltener bestellt...

Gruß

Andreas Bergmann

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Also gleich alles resetten und der code kann heute, morgen und
> übermorgen verwendet werden.
Ein schöner Traum, leider hat das bisher noch nie (so richtig) 
funktioniert: Vor gerade mal 10 Jahren gab es eine Phase, da war das 
synchrone Design auf FPGAs noch nicht so richtig verbreitet. Den Code 
von damals kann ich heute komplett in die Tonne werfen, weil das Timing 
auf den Bausteinen ganz anders ist.

> Ein gut geschriebener RTL-Code ist auf jede Technologie problemlos zu
> portieren. RTL-Code der sich auf Spezifika einer Technologie verlässt
> nicht.
Ich habe aber nun mal in einem FPGA Komponenten, die 
herstellerspezifisch sind (RAM, Controller, IO). Und spätestens da kann 
ich sowieso nicht mehr portieren.

Ich lege mich also auf eine Technologie (und damit sehr weit auch auf 
einen Hersteller) fest. Und wenn der meint, Resets seien unnötig, dann 
sollte das schon mal einen Blick wert sein.

von Anguel S. (anguel)


Lesenswert?

Ich danke allen für die Kommentare und Tipps! Ich freue mich, dass es in 
diesem Forum Leute gibt, die sich mit sowas gut auskennen. Anscheinend 
hat dieses Gebiet doch noch immer viel mit "Voodoo" zu tun, da beim 
Googlen doch nicht so viele nützliche Ergebnisse kommen.

Dass ein Riese wie Xilinx keine vernünftige Dokumentation zu solchen 
Themen liefert, sogar teilweise widersprechende Empfehlungen gibt und 
die eigenen CPLDs in der aktuellen Dokumentation total vergisst ist ein 
anderes Thema. Wenn es nach Xilinx geht, sollten am liebsten wohl alle 
"mal eben" auf Spartan-6 und Virtex-6 umsteigen...

von Ottmar (Gast)


Lesenswert?

Hallo Andreas,

genau aus diesem Grund habe ich auch von RTL-Code (der synthetisierbar 
ist) geredet und nicht von Technologie Instanzierungen.

Hast du mein Projekt zu Projekt Beispiel gelesen? Anforderungen ändern 
sich auch wenn man die gleiche Technologie beibehält.

Was würdet ihr von Applikations-SW Code halten der nur für Big-Endian 
Maschinen compilierbar/lauffähig ist?

Gruß,
Ottmar

von Ottmar (Gast)


Lesenswert?

Lothar Miller schrieb:
> Ein schöner Traum, leider hat das bisher noch nie (so richtig)
> funktioniert: Vor gerade mal 10 Jahren gab es eine Phase, da war das
> synchrone Design auf FPGAs noch nicht so richtig verbreitet. Den Code
> von damals kann ich heute komplett in die Tonne werfen, weil das Timing
> auf den Bausteinen ganz anders ist.

Ich hoffe du musst dich im jahr 2020 nicht über deinen reset freien code 
beschweren. Nur weil es jetzt so praktisch ist den reset wegzulassen.

Das seiner Zeit praktizierte Asynchrone Design war für die Designer 
bestimmt auch sehr praktisch.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ottmar schrieb:
> Ich hoffe du musst dich im jahr 2020 nicht über deinen reset freien code
> beschweren. Nur weil es jetzt so praktisch ist den reset wegzulassen.
Allein die Hoffnung trägt uns weiter... ;-)

von Andreas B. (Firma: www.collion.de) (bergy) Benutzerseite


Lesenswert?

Hallo Ottmar,

>genau aus diesem Grund habe ich auch von RTL-Code (der synthetisierbar
ist) geredet und nicht von Technologie Instanzierungen.

Nur,dass man sich mit seinem Design meist zwischen technologie 
abhängigen Bereichen bewegt.

Wenn ich wiederum technologie unabhängige IP beschreibe, so geschieht 
dies meist ausserhalb eines konkreten Projektes. Mehrere Kunden (und 
nicht Projekte) im Hinterkopf.
Aber auch hier können ggfls. technologieabhängige Optimierungen 
notwendig werden...

Wenn es darum geht ein konktretes Projekt zum Fliegen zu bekommen, dann 
kann es z.B. sehr wohl einen Unterschied machen, ob Du z.B. ein 
Schieberegister mit einem Reset versorgst ( womit sich das Ding dann in 
einzelne Register zerlegt zerlegt wird) oder aber in einer einzigen LUT 
abgebildet werden kann. Ähnliche Beispiele welche sich z.B. direkt auf 
die Targetspeed auswirken gibt es viele. Deshalb ist bei mir der Ansatz, 
wenn ich keinen Reset benötige, dann modelliere ich den auch nicht.

>Was würdet ihr von Applikations-SW Code halten der nur für Big-Endian
Maschinen compilierbar/lauffähig ist?

Hatten wir das nicht, bevor Apple auf Intelhardware umgestiegen ist? Hat 
eigentlich keinen gestört...
Aber Scherz beiseite, auf Devicetreiberebene haben wir das Spielchen 
immer wieder mit der Endianess.
Aber um dem Softwareentwickler zu helfen, können wir auf der FPGA Seite 
ja unseren Code so schreiben das wir die Endianess umschalten oder gar 
parallel halten können.
Insoweit haben wir da ja dann auch "Portierbaren" Code...

von Georg A. (Gast)


Lesenswert?

Ich finde den expliziten Reset eigentlich recht praktisch. Die Zuweisung 
ist genau in dem Prozess, der das Signal treibt und nicht ein paar/viele 
Bildschirmseiten vorher. Man kann auch in der Testbench verschiedene 
Durchgänge "mit Aufwachen nach Reset" in einem Rutsch fahren, geht mit 
dem Init bei der Deklaration ja nicht.

Und das mit den Resetnetzwerken wird eh überwertet. So gut wie keines 
meiner FPGAs hat einen Reseteingang. Im Toplevel wird das Resetsignal 
für alle Instanzen einfach auf 0 gesetzt. Damit gibt es kein 
Resetnetzwerk, die Synthese bekommt durch die "if reset...elsif 
risingedge"-Schablone aber aber mit, welche Initwerte ich will.

> Vor gerade mal 10 Jahren gab es eine Phase, da war das
> synchrone Design auf FPGAs noch nicht so richtig verbreitet.

Echt? '93 mit Viewlogic-Schematic-Entry und meinem ersten XC3064 habe 
ich noch asynchron/TTL-Like rumgepfuscht. '96 mit Synopsys-VHDL und 
XC4010E war schon alles voll synchron...

von Martin (Gast)


Lesenswert?

Wenn ich das richtig sehe soll man auf einen Reset verzichten und lieber 
alles beim Starup initialisieren. Somit hat man einen definierten 
Ausgangszustand nach dem Laden des Programms in den FPGA.

Jetzt möchte ich aber nicht das mein Programm gleich startet. Wenn ich 
dann einen Befehl von meiner PC-Software über eine Schnittstelle an den 
FPGA sende, dann soll das Programm starten.

Bis jetzt habe ich das immer mit einem Reset gelöst. Jetzt denke ich da 
eher an einen CHIP_EN-Leitung. Jedoch bringt das wirklich den 
entscheidenen Vorteil gegenüber einer globalen Reset-Leitung. Das FANOUT 
ist sicherlich bei beiden Varianten genauso groß.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> Jetzt möchte ich aber nicht das mein Programm gleich startet. Wenn ich
> dann einen Befehl von meiner PC-Software über eine Schnittstelle an den
> FPGA sende, dann soll das Programm starten.
Um disen Befehl zu empfangen muß dein FPGA aber doch schon rennen... :-o

> Jetzt möchte ich aber nicht das mein Programm gleich startet.
Dazu gibt es in der entsprechenden State-Machine dann üblicherweise 
einen IDLE-Zustand.


>> '96 mit Synopsys-VHDL und XC4010E war schon alles voll synchron...
Aber nicht bei Allen :-(
Wir wollten da in 2005 mal einen fertigen Prozessor-IP kaufen, und 
bekamen dann ein Angebot für eine Neuentwicklung. Zusammen mit der 
Anmerkung, dass das "alte" Design (erstellt im Jahr 2000) nicht 
portierbar (weil teilweise asynchron) sei...

von Martin (Gast)


Lesenswert?

Wer mit einer State-Machine arbeitet hat in meinen Augen eh schon 
verloren.

Außerdem muß beim FPGA alles im Reset-Modus sein bis auf das Interface, 
das benötigt wird um das FPGA-Programm zu starten.

von D. I. (Gast)


Lesenswert?

Martin schrieb:
> Wer mit einer State-Machine arbeitet hat in meinen Augen eh schon
> verloren.

aha ...

von Georg A. (Gast)


Lesenswert?

Welches Programm? Und warum muss der Rest im ASYNCHRONEN Reset sein? Da 
gibt doch gar keinen Grund dafür.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Martin schrieb:
> Wer mit einer State-Machine arbeitet hat in meinen Augen eh verloren.
Wie nennst du die Dinger? Zustandsautomat?
Man bedenke: schon ein ordinärer Zähler ist eine State-Machine (nur eben 
als Wolf im Schafspelz verkleidet)...  :-o

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.