Forum: FPGA, VHDL & Co. Anfangswerte synthetisierbar?


von fluttershy (Gast)


Lesenswert?

Hallo!

Ist es eigentlich synthetisierbar Signalen in VHDL Anfangswerte 
zuzuweisen? Normalerweise kann man sich ja nicht drauf verlassen, das in 
einem FF ein bestimmter wert beim Einschalten steht. Evt. können aber ja 
FPGA beim Einschalten Werte setzen?

also:
signal a : Natural :=3;

Ist diese Defaultwertzuweisung synthetisierbar?

Wie kann ich am einfachsten prüfen, ob mein Design 
nicht-synthetisierbare Elemente enthält? Ich benutze ModelSim. Das hat 
zwar ne Einstellung das zu Überprüfen, aber das bemeckert nicht mal ein 
wait for - statement.

Ich hätt auch versucht das Xilinx - Webpackage zu laden, aber irgendwie 
haben die Serverprobleme momentan ...

mfg

von Christian R. (supachris)


Lesenswert?

fluttershy schrieb:
> Wie kann ich am einfachsten prüfen, ob mein Design
> nicht-synthetisierbare Elemente enthält?

Den Synthesizer benutzen. Der sagt das schon. Mittlerweile sollten 
eigentlich alle die Anfangswerte können. Xilinx kanns auf jeden Fall.

von fluttershy (Gast)


Lesenswert?

dann brauch ich das webpack dann doch bald.

komisch das deren webseite nur fehler ausspuckt. hab mich sogar
registriert...

kennt jmd ne andre quelle als die offizielle ?

von .... (Gast)


Lesenswert?

fluttershy schrieb:
> Ist diese Defaultwertzuweisung synthetisierbar?

Eigentlich schon. Besser ist aber, wenn du das in einen Reset-Prozess 
packst. An der Uni wurde das folgendermassen gelehrt:

process(clk, async_reset)
begin
if async_reset = '1' then
-- set defaults
elsif clk = '1' and clk'event then
-- set registers for next cycle
reg1 = reg1_new;
reg2 = reg2_new;
...
end if;
end process;

reg1_new = ...;
reg2_new = ...;

Vorteile:
- Es ist immer synthetisierbar, sofern die Register asynchronen Load 
können.
- Du kannst einen sauberen Startpunkt für dein System bestimmen. Beim 
Default-Wert hingegen musst du dich darauf verlassen, dass das System 
mit dem globalen, externen Reset bereits in einem korrekten Zustand 
anläuft. Das geht evtl. bereits dann nicht, wenn du z.B. noch etwas 
Übergeordnetes initialisieren musst.

von Marius W. (mw1987)


Lesenswert?

.... schrieb:
> Besser ist aber, wenn du das in einen Reset-Prozess
> packst.

Lass das nicht den Lothar lesen. Da sträuben sich bei ihm die 
Nackenhaare auf: 
http://www.lothar-miller.de/s9y/archives/70-Asynchroner-Reset.html

Gruß
Marius

von Thomas R. (Firma: abaxor engineering) (abaxor)


Lesenswert?

.... schrieb:
> Eigentlich schon. Besser ist aber, wenn du das in einen Reset-Prozess
> packst. An der Uni wurde das folgendermassen gelehrt:

Wieso ist es besser einen Reset-Prozess zu verwenden? Weil du das an der 
Uni gelernt hast, ist kein Grund.

Weiterhin wird grundsätzlich von der Verwendung eines asynchronen Resets 
abgeraten,

Am besten fährt man, wenn man sich an die Vorgaben des jeweiligen 
FPGA-Herstellers hält.

Tom

von .... (Gast)


Lesenswert?

Thomas Reinemann schrieb:
> Wieso ist es besser einen Reset-Prozess zu verwenden? Weil du das an der
> Uni gelernt hast, ist kein Grund.

Ich gehe mal davon aus, dass an die Leute an der Uni schon ein wenig 
Ahnung haben ;-) In dieser Vorlesung ging's aber um digitale 
Hardwaresynthese im allgemeinen, nicht spezifisch für FPGAs, sondern 
auch für ASICs.

Lese mir jetzt mal den Beitrag von Lothar durch, bin gespannt.

von .... (Gast)


Lesenswert?

Marius Wensing schrieb:
> Lass das nicht den Lothar lesen. Da sträuben sich bei ihm die
> Nackenhaare auf:
> http://www.lothar-miller.de/s9y/archives/70-Asynch...

Wow, das hat was! Danke für den Tipp! Die zusätzliche Logik mag je nach 
FPGA noch vertretbar sein, aber das mit den Laufzeiten ist schon ein 
absolutes Killer-Argument gegen asynchronen Reset.

Was die Frage des Threaderstellers angeht: Trotzdem würde ich die 
Initialisierung in einem Reset machen. Dann halt synchron.

von Christian R. (supachris)


Lesenswert?

.... schrieb:
> Ich gehe mal davon aus, dass an die Leute an der Uni schon ein wenig
> Ahnung haben

Naja, selbst in Xilinx Beispiel-Codes taucht das immer auf, obwohl die 
selbst schreiben, dass das absolut zu vermeiden ist.

.... schrieb:
> icht spezifisch für FPGAs, sondern
> auch für ASICs.

Bei ASICs ist das auch etwas anderes. Bei FPGAs werden die Zellen eh aus 
dem Bitstream geladen, da geht das Preload. Trotzdem sollte man im 
Manual des Sythesizers nachgucken.

Ein extra Reset ist in 99,95% der Fälle vollkommen überflüssig, das 
zeugt nur von einem schlechten Design. Gerade bei Xilinx braucht man das 
nicht, da dort immer die Preload Werte funktionieren. Und mit dem 
Anfangszuweisungen laufen die FPGAs/CPLDs immer sicher an, da gibts 
keine undefinierten Zustände oder Laufzeiteffekte.

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


Lesenswert?

Und weil alles schon mal da war, hier der Klassiker:
Beitrag "Xilinx und die Resets"
;-)

von GeeIJoo (Gast)


Lesenswert?

An dieser Stelle fordere ich: Karthago muss fallen!

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.