www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Zuweisung von signal Initialwert auch relevant für Impl?


Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich habe gerade auf comp.lang.vhdl gesehen, dass man Signalen einen
Initialwert mitgeben kann.
Was passiert aber mit einer Signal Initialwertzuweisung in der
Synthese/Implementation?

Beispiel:
  -- Register Inhalt Signale
  signal control_reg : STD_LOGIC_VECTOR(7 downto 0) = X"00";

Ist dieser Vektor control_reg in der Hardware beim Start zuverlässig
auf 0, resp. kann ich mir so einen Reset ersparen?

Das control_reg soll später synchron gelesen und geschrieben werden
können, muss aber zu Beginn einen definierten Startwert haben.

Gilt diese Initialwert-Zuweisung auch für die Implementation in HW oder
nur für die (ModelSIM) Simulation?

Gruss, Martin

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Antwort für alle möglichen Implementierungtools gibt es nicht.

Generell galt: der initwert ist nur für die Simu, aber seit ca. 2
Jahren soll bei Xilinx der initwert gleich dem PowerUp wert der FF
sein.

Er wird also durch synthese/Implementierung durchgereicht. Damit würde
dann ein xtra PowerUp-Reset unnötig.

Falls dir das zu unsicher ist (z.B weil du ein anderes/älteres
Synthesetool verwendest), es gibt neben VHDL andere Möglichkeiten das
design zu beeinflußen z.B. constraints. Bei xilinx gibt es extra
constraints um den Init/PowerUp-wert eines FF zu setzten. Diese
constraints werden erst nach der Synthese eingelesen, das synthesetool
kann also nix kaputt machen.

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo finde ich diese constraints?

Angegeben werden die wohl im .ucf File, aber wie ist die Syntax?
Kann ich da direkt auf einen Signalnamen im VHDL Design referenzieren?

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau mal in der Doku "constraint guide", das constraint heisst INIT:

INST “instance_name” INIT={value | 1 | 0 | S | R};

Allerdings habe ich auf die schnelle dieses constraints nur in der IDE
6.3 und nicht in den aktuellen (8.1|8.2) :-(

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guckst du hier:

http://www.xilinx.com/xlnx/xil_ans_display.jsp?iCo...


(auf www.xilinx.com nach
 INIT ucf
suchen lassen.)

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gemäss den Xilinx Angaben scheint der Register Zustand beim PowerUp
default = 0 zu sein.

Demnach müsste ich gar nichts tun, um die Register beim PowerUp
definiert mit 0 zu starten (da ja default).

Ist auf diese default Angabe Verlass?

Autor: Jürgen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Initilawerte sind Bestandteil des FPGA-Images. Da beim Power-Up der
FPGA (vom Flash) geladen werden muss, wandern diese automatisch als
Initialwerte in die Register. Dasselbe gilt auch für ausdrücklich
parametrisierte MEM-Initialsierungsfiles. Das Problem, daß der FPGA
einen Reset-zustand braucht, behebt dies nicht, denn in jeder
vernüftigen Applikation wird ein Baustein mal soft-resettet werden
müssen, um einen definierten Zustand zu erreichen. Das geht aber nur
über programmierte Werte.

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt von Xilinx sogar Empfehlungen, auf den Reset zu verzichten und
nur mit PowerUp-Werten zu arbeiten.
Verwendet man beides, muß man ein bischen aufpassen, da der Power-Up
Wert muß nicht gleich dem Wert nach dem Reset sein muß.

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist auf diese default Angabe Verlass?

Ich würde mich in diesen Fall nie auf defaults verlassen! und ich habe
meine Zweifel, ob Signale ohne Initwerte wirklich immer zu einem FF mit
'0' als Erstzustand ungesetzt werden (vorrausgesetzt sie werden zu
FF).

-Xilinx ändert ab und zu defaultwerte, in zukünftigen versionen könnte
dann ein '1' verwendet werden.

-Keinen Wert setzen heisst oft "ist mir egal" soll den Tools draus
machen was sie wollen. Dann kann genau das passieren.

-Aus dem Code ist nicht erkennbar, das dort eine Null zu stehen hat. Da
freut sich ein anderer Entwickler der damit arbeiten muss.


-Die 8.2 meckert gelegentlich das meine Initwerte ungünstig wären und
wünscht einen anderen Wert. Das ist für mich ein deutlicher Hinweis das
man sich auf den defaultwert nicht verlassen kann.

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach meiner Erfahrung kann man sich auf die Defaultwerte schon
verlassen.
Probleme könnte man eventuell bekommen, wenn die Tools ein Signal so
optimieren, daß elektrisch der invertierte Wert verwendet wird, aber
ich weiss gar nicht, ob dies überhaupt geschieht.

Da die neusten ISE/Webpack-Versionen aber die Initialisierung explizit
erlauben, sollte man sie bei wichtigen Signalen auch verwenden. Dann
erübrigen sich alle Zweifel, und die Simulation stimmt garantiert mit
der Implementierung überein.

Das Meckern der ISE bezüglich der Initwerte erfolgt meiner Erfahrung
nach eben genau in dem von mir erwähnten Fall, daß Initwert und
Resetwert nicht übereinstimmen, z.B. wenn das FF mit '0' aufwacht,
aber beim Reset dann auf '1' gesetzt wird.

Autor: FPGAküchle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Folgend die erwähnten Meckereien:

WARNING:Xst:1426 - The value init of the FF/Latch dbg_sim_delay_0
hinder the constant cleaning in the block g.
   You should achieve better results by setting this init to 0.
WARNING:Xst:1426 - The value init of the FF/Latch
header_mark_frame_incompl_oq hinder the constant cleaning in the block
g.
   You should achieve better results by setting this init to 1.

Einen systemweiten reset gibt's nicht, die benannten FF werden im
Betrieb gesetzt| gelöscht oder im toggle mode betrieben, also RS-TFF.
Hm, wenn ich mir recht überlege, werden einige FF gesetzt oder
getoggelt, andere gelöscht oder getoggelt. Vielleicht kommt die Warning
das Lösch-FF einen Init '1' haben (aber das habe ich doch
ausgeschlossen?).
Naja jedenfalls weiss ich nicht was an "hinder the constant
cleaning"
nachteilig ist, also lass ich erst mal so. aber IMHO beweist die
Warning das die synthese einen (Optimalen) Initwert zuweist und der ist
nicht immer '0';

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast recht.
Ein kurzes Stöbern bei Xilinx hat ergeben, daß (wenigstens bei der
alten Spartan Familie, ich denke es gilt für alle) bei den FPGAs für
jedes FF die Wirkkung des SR Eingang gemeinsam mit dem GSR Eingang
gilt.
Das heißt, wenn man ein FF für (a)synchrones preset konfiguriert
(SRHIGH), wird auch der GSR ein Preset Eingang.
Da beim PowerUp das GSR Signal (intern) gepulst wird, wacht das FF in
diesem Fall mit '1' auf.

Deine Meldung müßte dann kommen, wenn Du aufgrund des Init-Wertes dem
(G)SR Signal eine SET oder RESET Funktion vorgegeben hast, aber der
synchrone oder asynchrone (Re)Set umgekehrt einfacher zu realisieren
wäre.

Grüße
Klaus

Autor: Martin Kohler (mkohler)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die bisherige Diskussion.

Ich werde wohl den Reset drin lassen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.