Hallo zusammen Ich möchte, dass ein Teil meines Codes nur jeden 8 Clock ausgeführt wird (und daher 8 mal länger zur ausführung Zeit hat). Daher ist der EN_25 nur alle 25 MHz einen 200MHz Takt lang '1' und geht auf den Enable Eingang der FlipFlops. Meine Frage ist nun, wie kann ich ISE diese Constraint mitteilen? Ich habe mir folgende Struktur ausgedacht: Logik: process(Current) begin -- "Next" berechnen end process Logik; FlipFlops: process(INT_200MHZ,GLOBAL_RESET) begin if GLOBAL_RESET = '1' then Neuer_Wert <= (others => '0'); elsif INT_200MHZ='1' and INT_200MHZ'event then if EN_25MHz = '1' then Current <= Next; else Current <= Current; end if; end if; end process FlipFlops; Merci, Gruss Hans
Du gibst ihm die 200 MHz mit. Fertig. An Deine FFs gehen dann auch die 200 MHz und Dein enable. Das FF weiß ja nicht, ob es evtl. jeden Takt enabled wird und muss daher mit 200 MHz klarkommen. Duke P.S.: Und schreib lieber sowas:
1 | elsif rising_edge( INT_200MHZ) then ... |
VHDL ist schon schwierig genug zu lesen.
> Das FF weiß ja nicht, ob es evtl. jeden Takt enabled wird > und muss daher mit 200 MHz klarkommen. Stimmt: das FF nicht. Aber wir wissen das, und wir können das der Toolchain sagen: das Stichwort heißt hier Multi-Cycle-Path. Wenn das Enable nur alle 1/25MHz kommt, hat die Logik wesentlich mehr Zeit, ohne das Setup-Timing der betroffenen FF zu verletzen. @ Hans Du mußt im Constraint-Editor erst eine Gruppe der betroffenen Signale bilden, danach kannst du ein Multi-Cycle-Constraint angeben. > P.S.: Und schreib lieber sowas: ... Noch besser:
1 | if INT_200MHZ='1' and INT_200MHZ'event then |
2 | if EN_25MHz = '1' then |
3 | Current <= Next; |
4 | else
|
5 | Current <= Current; |
6 | end if; |
7 | if GLOBAL_RESET = '1' then -- synchroner Reset, falls überhaupt nötig |
8 | Neuer_Wert <= (others => '0'); |
9 | end if; |
10 | end if; |
Und noch viel besser: lass die Finger weg von der Viel-Prozess-FSM-Schreibweise (kombinatorisch er Prozess und getakteter Prozess). Du machst dir damit das Leben langfristig einfacher ;-)
Besten Dank Lothar Funktioniert wunderbar mit der Multi-Cycle Constraint. gruss Hans
Ich stand auch des öfteren schonmal vor dem gleichen Problem, habe es aber nicht so richtig hinbekommen, den Multi-Cycle Constraint korrekt zu setzen. Könnte das mal einer an einem praktischen Beispiel zeigen (z.B. an dem FSM Code von oben)? Im speziellen wusste ich nicht so richtig, welche Signale ich zu welchen Gruppen zusammenfassen sollte. Vielleicht hat ja einer Lust das mal zu erklären.
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.