Register initialisieren/Reset

OP #7670719
Lesenswert?

Moin!

Ich frage mich gerade, ob es heutzutage überhaupt noch nötig ist, einen Reset an ein FF anzuschließen.

1
process (CLK, RST)
2
begin
3
   if RST='1' then   
4
      d_out <= "00000000";
5
      elsif rising_edge(clk) 
6
      d_out <= d_in;
7
   end if;
8
end process;

So würde es prinzipiell gehen. Asynchroner Reset ist allerdings nicht förderlich. Daher würde ich diese Schreibweise bevorzugen.

1
process(clk)
2
begin
3
    if rising_edge(clk) then
4
        if rst = '1'    then
5
            d_out <= "00000000";
6
        else
7
        d_out <= d_in;
8
        end if;
9
     end if;
10
end process;

Vivado baut witzigerweise bei beiden das gleiche mit der Bemerkung, dass eines ASNYC ist. Allerdings Versteht die Synthese beides. Wäre es nicht denkbar das Signal am Anfang mit := "0" zu initialisieren und somit komplett den Reset zu vergessen?

Gruß, Ole

#7670740
Lesenswert?

Ole W. schrieb:

Wäre es nicht denkbar das Signal am Anfang mit := "0" zu initialisieren und somit komplett den Reset zu vergessen?

Ja, wäre es. Aber Vorsicht: Für FPGAs (bspw. von Xilinx) funktioniert das und das Tool unterstützt es, die Initialwerte in die FFs zu laden. Das gilt aber natürlich nicht grundlegend allgemein (ASICs).

Bei FPGAs ist es grundsätzlich gut, sich darüber Gedanken zu machen, wo ein reset sinnvoll ist und wo nicht. Viele resets sind überflüssig, einige resets sind aber notwendig.

(Firma: Starfleet) #7670752
Lesenswert?

reset und Power-Up ist nicht dasselbe.

PowerUp/Configuration insbesonders bei heutigen SoC's mit multi stage boot dauert länger als so ein simpler reset.

Manche Standards wie DO-254 verlangen explizit einen reset als " the last resort recovery mechanism for a non-responsive device". Also eine Art schneller "soft reset" statt Langsamer "Hard/full" reset. Kommt halt auf die Spec drauf an, bei einem trudelndenden Flieger hat man nicht die Zeit für einen vollen System-Reset um wieder Kontrolle über die Steuerflächen zu gewinnen. ( ähnlich wie bei flame-out: https://youtu.be/NBN9tDxrnIo?t=241 )

Wäre es nicht denkbar das Signal am Anfang mit := "0" zu initialisieren und somit komplett den Reset zu vergessen?

Manchmal macht eine Initialisierung mit '1' Sinn und wird ebenfalls von der architectur unterstützt. Bei anderen Architekturen gibt es nur einen möglichen "Init-Wert". Problematisch kann es werden, wenn der selbe code auf verschiedenen FPGA-Familien eingesetzt wird.

Es könnte sinnvoll sein, diesen Reset im Code zu beschreiben und erst in der top-entity zu entscheiden, ob der reseteingang nicht fest auf inaktiv gelegt wird. Synthesetools sollten in der Lage sein, diesen sich nicht ändernde reset-leitung zu erkennen und dementsprechend weg zu optimieren.

#7670763
Lesenswert?

Vivado baut witzigerweise bei beiden das gleiche mit der Bemerkung, dass eines ASNYC ist. Allerdings Versteht die Synthese beides. Wäre es nicht denkbar das Signal am Anfang mit := "0" zu initialisieren und somit komplett den Reset zu vergessen?

Vivado gibt syntax FEHLER und baut nichts :) wenn ich den fehler behoben habe hat er es gebaut und UNTERSCHIEDLICH

mal FDCE und dann FDRE

dh es geht alles richtig mit Vivado!

Persönliche Seite #7670994
Lesenswert?

Bradward B. schrieb:

anche Standards wie DO-254 verlangen explizit einen reset als " the last resort recovery mechanism for a non-responsive device". Also eine Art schneller "soft reset" statt Langsamer "Hard/full" reset.

Das habe ich im Bereich Luftfahrt aber auch schon völlig anders herum gesehen. Da hieß es "wollt ihr den totalen Reset (?)" (der Einforderer hieß in der Tat Josef mit Vornamen :-) )

Ich musste dann FMEA-mäßig nachweisen, dass die permanent als Damokles-Schwert über der Schaltung hängte Reset-Leitung eine höhere und kritischere Fehlerwahrscheinlichkeit zusammenbringt, als der richtig gesetzte soft-Reset.

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