www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Timing Constraints und FF-Enable in ISE


Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Duke Scarring (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
elsif rising_edge( INT_200MHZ) then ...
VHDL ist schon schwierig genug zu lesen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> 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:
if INT_200MHZ='1' and INT_200MHZ'event then
   if EN_25MHz = '1' then
     Current <= Next;
   else
     Current <= Current;
   end if;
   if GLOBAL_RESET = '1' then  -- synchroner Reset, falls überhaupt nötig
      Neuer_Wert <= (others => '0');
   end if;
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 ;-)

Autor: Hans (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besten Dank Lothar

Funktioniert wunderbar mit der Multi-Cycle Constraint.

gruss Hans

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.