Anfangswerte synthetisierbar?

Gast #2681984
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
Gast #2682048
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.
(Firma: abaxor engineering) #2682116
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
Gast #2682166
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.
Gast #2682173
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.
#2682210
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren