Forum: FPGA, VHDL & Co. Synchronger Reset-Generator


von Robert S. (razer) Benutzerseite


Lesenswert?

Ich habe ein Design, das mit asynchronen Resets designed word ist. Das 
ist aktuell in Stein gemeisselt und kann ich nicht ändern.

Das Design aber möchte ich aber auf einem FPGA laden. Da habe ich mir 
gedacht, ich mache einen synchronen Reset-Generator auf Top-Level Ebene. 
Etwa in der folgenden Art:
1
  sync: process(clk)
2
  begin
3
    if rising_edge(clk) then
4
      case reset_state is
5
        when RESET_0 =>
6
          reset       <= '1';
7
          reset_state <= RESET_1;
8
        when RESET_1 =>
9
          reset       <= '1';
10
          reset_state <= IDLE;
11
        when IDLE =>
12
          reset       <= '0';
13
        when others =>
14
      end case;
15
    end if;
16
  end process;

Initialisiert ist das State register per Init-Kommando. Diesen 
registrierten Reset-Ausgang verbinde ich mit allen anderen asynchronen 
Resets.

Ist das eine gute Idee?

Danke im Voraus
Robert

von user (Gast)


Lesenswert?

Wie wäre es mit 2 FFs in Reihe auf 0 initialisiert und dann wird eine 1 
reingeschoben?

von Mitleser (Gast)


Lesenswert?

eher nicht, weil es ja das Problem nicht behebt und der asynchrone 
eingang der FFs nach wie vor benutzt wird. Stattdessen wäre es besser, 
einen synchronen Reset zu verwenden und nur dort, wo es nötig ist und 
dafür den aynchronen totzulegen. Meistes klappt das. Ein Einzelfällen 
dann nicht, wenn durch den areset bestimmte Funktionalität erreicht 
wird.

Bei Xilinx gäbe es die Option, das bei XST automatisch wandeln zu 
lassen.

Beitrag "Was bewirkt "asynchronous to synchronous" bei Xilinx XST"

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


Lesenswert?

Mitleser schrieb:
> eher nicht, weil es ja das Problem nicht behebt und der asynchrone
> eingang der FFs nach wie vor benutzt wird.
Bei Lattice und Altera ist diese Art des einsynchonisierten 
"asynchronen" Resets die bessere Wahl. Denn dort gibt es dieses 
Umschalten der Flipflop-Betriebsart nicht. Trotzdem darf fur ein 
stabiles Design auch an diesem Reseteingang nur ein synchrones Signal 
anliegen.

user schrieb:
> Wie wäre es mit 2 FFs in Reihe auf 0 initialisiert und dann wird eine 1
> reingeschoben?
Ich würde da noch mehr Aufwand treiben und mit einem längeren 
Schieberegister mit Mehrheitsabfrage (Reset nur, wenn alle Bits den 
Resetpegel haben) oder evtl. sogar mit einem Zähler arbeiten. Denn sonst 
reicht immer noch ein einzelner Spike fur einen Reset aus...
1
signal resetsr : std_logic_vector (3 downto 0) := "0000";
2
signal reset   : std_logic := '0';
3
4
process begin
5
  wait until rising_edge(clk);
6
  resetsr <= resetsr(2 downto 0) & resetpin;
7
8
  if resetsr="1111" then reset='1';
9
  elsif resetsr="0000" then reset='0';
10
  end if;
11
end process;

: Bearbeitet durch Moderator
von Robert S. (razer) Benutzerseite


Lesenswert?

Mitleser schrieb:
> Bei Xilinx gäbe es die Option, das bei XST automatisch wandeln zu
> lassen.

Danke für den Tipp.

Lothar Miller schrieb:
> Bei Lattice und Altera ist diese Art des einsynchonisierten
> "asynchronen" Resets die bessere Wahl. Denn dort gibt es dieses
> Umschalten der Flipflop-Betriebsart nicht. Trotzdem darf fur ein
> stabiles Design auch an diesem Reseteingang nur ein synchrones Signal
> anliegen.

Bin beim Prototyping auf Xilinx.

Lothar Miller schrieb:
> Ich würde da noch mehr Aufwand treiben und mit einem längeren
> Schieberegister mit Mehrheitsabfrage (Reset nur, wenn alle Bits den
> Resetpegel haben) oder evtl. sogar mit einem Zähler arbeiten. Denn sonst
> reicht immer noch ein einzelner Spike fur einen Reset aus...

Danke für den Tipp. Ich habe überhaupt keinen externen Rest Pin mehr. 
Insofern habe ich obige Beschreibung als Reset-Generator entworfen. Bzw 
deine Variante bei der reset_pin fix auf '1' gesetzt ist und die 
if-Logik entsprechend umgekehrt.

Oder wie macht man sonst ein Reset-Signal ohne externen Reset?

von Lattice User (Gast)


Lesenswert?

Lothar Miller schrieb:
> Bei Lattice und Altera ist diese Art des einsynchonisierten
> "asynchronen" Resets die bessere Wahl. Denn dort gibt es dieses
> Umschalten der Flipflop-Betriebsart nicht.

Bei Lattice können die FlipFlops sehr wohl auf einen synchronen Reset 
konfiguriert werden.

Allerdings hat Lattice ein globales GSR Netz, das auch von einem 
Usersignal getrieben werden kann. Dadurch kann man mit einem asynchronen 
Reset einiges an Resourcen sparen.

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


Lesenswert?

Lattice User schrieb:
> Bei Lattice können die FlipFlops sehr wohl auf einen synchronen Reset
> konfiguriert werden.
Da habe ich offenbar ein Bildungsdefizit...

: Bearbeitet durch Moderator
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.