Forum: FPGA, VHDL & Co. Grundsätzliche Xilinx-Constraints bei 2 Takten


von Chris (Gast)


Lesenswert?

Ich habe ein Problem mit Xilinx:

Eine Taktdomain holt und verbeitet mit 100 MHz Daten und schiebt sie an 
passende Stellen eines blockrams, wo sie von einer anderen domain 
abgeholt werden. Die Daten laufen so ein, daß sich die Takte beim Lesen 
und Schreiben ruhig überschneiden können, ohne dass es zu Problemen 
kommt.

Es geht jetzt einzig darum, dass das design überhaupt synthetisiert.

Bevor ich den Lesezwei drin hatte lief das design auf 130 MHz - 100 sind 
wie gesagt benötigt. Der Leseteil alleine synthetisiert sogar auf 155 
MHz, weil es nur Zähler sind, die die Blockrams treiben und Daten auf 
Ports schieben.

Wenn ich beides synthetisiere, komme ich auf 80 MHz :-(

Sicher hat das damit zu tun, dass  sich die beiden Takte "sehen" und die 
Synthese es nicht geschnallt bekommt, daß einfach in Ruhe zu lassen.

Bei Altera spezifiziere ich da immer CUT TIMING PATH zwischen den beiden 
Takten und Ruhe ist.

Wie geht das bei Xilinx?

Die Anleitung brachte mich auf False-Path und einen komischen 
Gruppenkonstrukt in der Anleitung.

NET "clk_80" TNM_NET = FFS "GRP_80";
NET "clk_100" TNM_NET = FFS "GRP_100";
TIMESPEC TS_CUT = FROM "GRP_80" TO "GRP_100" TIG;

Kann das jemand erklären, was das heisst und wie es funktioniert?

Meine Takte kommen dabei aus einer DCM, muss ich sagen:

Inst_power_dcm: power_dcm PORT MAP
(
 CLKIN_IN   => CLK_IN,
 CLKFX_OUT   => clk_100,
 CLKIN_IBUFG_OUT => open,
 CLK0_OUT   => clk_80,
);

wobei die 100 genau 5/4 der 80 sind. 80 kommen aus dem OSC.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Chris schrieb:
> NET "clk_80" TNM_NET = FFS "GRP_80";
Nimm alle FFs, die auf clk_80 hören in eine Gruppe GRP_80

> NET "clk_100" TNM_NET = FFS "GRP_100";
Nimm alle FFs, die auf clk_100 hören in eine Gruppe GRP_100

> TIMESPEC TS_CUT = FROM "GRP_80" TO "GRP_100" TIG;
Ignoriere Timingbeziehungen zwischen den beiden Gruppen

Das ist hier der Fall:
1. Assuming signal clk_in drives synchronous elements beyond the DCM
http://www.xilinx.com/support/answers/34348.htm

von Chris (Gast)


Lesenswert?

Danke schon mal soweit. Ich habe mir die Seite angesehen:

Muss ich das nur für die internen Takte, also die Ausgänge der DCM 
machen, oder auch noch die eingehende Clock miteinbeziehen?

Eigentlich nicht, oder?

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
Noch kein Account? Hier anmelden.