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;
Ein enable-Signal ist keine Clock und wird daher auch nicht mit iEnablePin'event and iEnablePin = '1' abgefragt. Synchronisiere das Signal und nutze es dann direkt als Enable- oder Reset-Signal.
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
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.
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); |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.