Hallo, bei meinem Schaltungsdesign in VHDL gibt es 2 Takte, ein "langsamer" 100Mhz Takt (CLK) und ein schnellerer 133Mhz Takt (FCLK) mit dem auf ein externes SDRAM zugegriffen wird. Die Taktumsetzung für die Daten erfolgt mit FiFos mit unterschiedlichem Lese/Schreibetakt. -- Jetzt mein Problem: ich hab ein Signal das vom langsamen Takt erzeugt wird und in einem Prozess im schnellen Taktsystem (SDRAM Control Logik) ausgewertet wird. Wie kann ich vermeiden, dass es zu Hazards und Metastabilität kommt? In der Simulation tut alles das was es soll, im echten System noch nicht so richtig. signal_clk : Signal in CLK Taktsystem synchron erzeugt signal_fclk : ins FCLK Taktsystem umgesetztes Signal, zur synchronen Abfrage mit FCLK vorbereitet --Prozess zur Taktumsetzung: Synchrones Abtasten des signal_c Process(FCLK, R) if R == '1' then signal_fclk <= '0'; elsif rising_edge(FCLK) signal_fclk <= signal_clk; end if; end process; Ich vermute dass an dieser Umsetzung das Problem liegt. Habt ihr Vorschläge wie die Umsetzung erfolgen kann ohne in Metastabile Zustände zu gelangen? (Hab hier im Forum was von 2 Flip flops gefunden, war aber keine Beschreibung wie das funktionieren soll) wäre dankbar wenn mir jemand weiterhelfen könnte !! Gruß
Du kannst einfach zwei FlipFlop in serie schalten, um Metastabilitäten zu vermeiden. signal_fclk_sync <= signal_clk; signal_fclk <= signal_fclk_sync; Beim ersten FlipFlop kann es noch Metastabilitäten geben. Die Spikes sind aber vorbei, wenn das Signal in das zweite FlipFlop übernommen wird. Gruss kmdf
... wobei das clocken mit dem schnellen Takt zu erfolgen hat. Gfs brauchst du auch noch eine "händische" Flankendetektion des langsamen durch den schnellen Takt, je nachdem was Du machen willst. So wie Du es schreibst, willst Du den Takt samplen - was ist mit den Daten?
@kmdf also du meinst einfach so? muss ich mal ausprobieren. Danke schon mal. Process(FCLK, R) if R == '1' then signal_fclk <= '0'; elsif rising_edge(FCLK) signal_fclk_sync <= signal_clk; signal_fclk <= signal_fclk_sync; end if; end process; @Jürgen Schuhmacher ich will eigentlich nicht den Takt samplen, sondern nur das Signal signal_clk (das aus der langsamen Taktdomäne kommt) in der schnellen auswerten. die Daten sind nicht das Problem, die speicher ich in Fifos mit unterschiedlichen schreib-/lesetakten
Indem Du den Takt so einsynchronisierst, sampelst Du ihn ja de facto. Meine Frage galt zudem den Daten, bei denen die Instabilitätsbetrachtung auch gilt- vor allem wenn nun alle 100MHz/3 (= 133/4) der Takt um 75% verzögert übernommen wird. Die Daten sollte gfs auch verlängert werden.
So wie ich es verstanden habe, willst du ein Signal aus der langsamen Tacktdomäne mit dem Tackt der anderen Synchronisieren. Wenn dein Signal länger als die Periodedaurer des anderen Tacktes ansteht, kannst du das Signal, wie in deinem letzte Bespiel, synchronisieren.
kmdf: super, vielen Dank Jürgen: Mein Lesefifo läuft mit dem schnellen Takt zum schreiben, und mit dem langsamen Takt zum Lesen (Coregen Unit), insofern dürfte das für die Daten kein Problem sein... denke ich.... danke!
@elfzehn: Ich hoffe, du schreibst damit nicht mehr pro Zeiteinheit rein, als Du abholen kannst. @kmdf: Du kannst Dir Tipparbeit sparen, wenn Du das Wort "Takt" nach der neuen Rechtschreibung ohne "c" schreibst :-)
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.