reset generator

Gast #660628
Hallo miteinander,
ich möchte aus einem dauer Enable signal ein reset generieren. Die 
simulation (siehe Anhang) funktioniert soweit, nur bei der sysnthese 
bekomme ich die Fehlermeldung: 'unsupported or non-rtl constructs 
detected in the following modules'. im "Flag_proc" Prozess.
Könnte mir jemand sagen wie ich das korrigieren kann?

Vielen Dank.
Grüsße


library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;


entity ResetGenerator is
    port( clock : in std_logic;
     iEnablePin : in std_logic;
       oResetOn : out std_logic
       );
end entity;

architecture ResetGenerator_arch of ResetGenerator is

signal s_SetReset, s_ResetSet : std_logic;
signal s_count : natural;

begin
    Flag_proc: process(iEnablePin,s_ResetSet)
    begin
        if iEnablePin'event and iEnablePin = '1' and s_ResetSet = '0' 
then
            s_SetReset <= '1';
        else
            s_SetReset <= '0';
        end if;
    end process;

    Rst_proc : process(clock,s_SetReset)
    begin
        if rising_edge(clock) then
            -- oResetOn <= '0';
            s_count <= 0;
            if s_SetReset = '1' then
                for  i in 0 to 2 loop
                   s_count <= s_count+1;
                   oResetOn <= '1';
                end loop;
                s_ResetSet <= '1';
            else
               oResetOn <= '0';
               s_ResetSet <= '0';
            end if;
        end if;
    end process;
end architecture;
Angehängte Dateien:
Gast #660651
gated clock nennt man sowas. Ich würde das trennen:

process (clock, reset, enable=
IF clock event
   -- clocked
   IF if enable
      ...
   END IF;
EDN IF;

-- non clocked
if enable
   ...
end if
Gast #660678
Das Problem das ich über kein Reset-, sondern dieses Enable-Signal 
verfüge und muss daraufhin einen Zustandsautomat und andere Entities 
rücksetzen. Allerdings bleibt dieses Signal die Zeit der Simulation an 
und kann daher nicht als reset benutzt werden.
#660927
Ich würde sowas eher als Clear bezeichnen. In meinen Designs definiere 
ich einen Reset, wenn ich die gesamte Logik wieder in den 
Ausgangszustand versetzen will (etwa nach Power-On Reset). Wenn ich 
während des Betriebs nur einen Teil rücksetzen will, mach ich das mit 
Clear-Signalen.

Ich würde das Enable-Signal einsychnronisieren (sofern asynchron), 
gleichzeitig einen Flankendetektor einbauen und dann auf die steigene 
reagieren.

zB:
1
EnableRisingEdge <= EnableSync and (not EnableSyncPrevious);

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 19 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.