Synchronger Reset-Generator

OP 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;
OP 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

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.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.