Synchronger Reset-Generator

Persönliche Seite #3697907
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
Gast #3698038
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"
Moderator (Firma: Titel) Persönliche Seite #3698684
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;
Persönliche Seite #3700461
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?
Gast #3700517
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.

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