Forum: FPGA, VHDL & Co. 2 Clock Domains, signale verbinden


von Maik (Gast)


Lesenswert?

Hallo, ich habe ein kleines Problem.
Ich habe in Xilinx (Spartan 6) eine DDS welche mit 250Mhz läuft. Das 
funktioniert soweit ganz gut. Nun habe ich ein Register (std_logic) 
welches das CE der DDS steuert. Dieses wird aber vom Memorybus des 
Mikroplaze mit 100 MHz angesteurt. Als es ändert sich nicht permanent, 
vielleicht alle 10sek mal... Das weiß aber das ISE nicht und verursacht 
mir gleich mal ein Timingerror.
hat jemand eine Idee wie ich das problem lösen kann? Irgendwie durch ein 
Zwischenregister oder sowas?

von Benedikt H. (hunz)


Lesenswert?


von Thomas W. (donka)


Lesenswert?

Du brauchst ein set_false_path (Vivado) oder ein tig (timing ignore, 
ISE) constraint zwischen den clock's. Schau mal in den Constraint Guide 
von Xilinx.

von Dogbert (Gast)


Lesenswert?

Maik schrieb:
> hat jemand eine Idee wie ich das problem lösen kann? Irgendwie durch ein
> Zwischenregister oder sowas?

Richtig, set_false_path und ignorieren.

Asynchrone Fehler zu suchen ist die Erfüllung eines Ingenieurs auf 
Abenteuersuche und sind prima geeignet ein Projekt einfach einschlafen 
zu lassen und den Fehler auf irgend welche abstrusen Ursachen zu 
schieben.

von Maik (Gast)


Lesenswert?

Hm ok, aber das maskiert das Problem doch nur oder? Wirklich weg ist es 
dann ja nicht, nagut, theoretisch ist es ja auch kein Problem, da das 
register eh nur ab und an mal geändert wird.

von Maik (Gast)


Lesenswert?

So ich habe jetzt die Timing contrains geschrieben.

NET "clk_250"    TNM = clk_250_grp;
#NET "clk_5"  TNM = bus_clk_grp;
NET "clk_100"    TNM = clk_100_grp;
TIMESPEC TS_false_path1 = FROM clk_250_grp    TO  bus_clk_grp  TIG;
TIMESPEC TS_false_path2 = FROM clk_250_grp    TO  clk_100_grp    TIG;
TIMESPEC TS_false_path3 = FROM bus_clk_grp  TO  clk_250_grp    TIG;
TIMESPEC TS_false_path4 = FROM bus_clk_grp  TO  clk_100_grp    TIG;
TIMESPEC TS_false_path5 = FROM clk_100_grp    TO  clk_250_grp    TIG;
TIMESPEC TS_false_path6 = FROM clk_100_grp    TO  bus_clk_grp  TIG;

Jetzt ist aber das Problem, dass der Compiler immer rummeckert, dass es 
clk_5 nicht gibt. Aber den gibt es. Der Kommt quasi aus dem Microblaze 
heraus und ist ein signal im toplevel. Muss man da eine spezielle Syntax 
beachten?

von Maik (Gast)


Lesenswert?

beim compilieren war das nicht rauskommentiert...

von Maik (Gast)


Angehängte Dateien:

Lesenswert?

Ich glaub ich bin zu doof... ich hab jetzt ewig nach verschiedensten 
Sachen gesucht und jedes mal ist die Syntax anders.

Ich habe mal den Code für das Register angehängt.

Als Fehler erscheint immer das:

------------------------------------------------------------------------ 
---
Paths for end point 
Signal_generator_generate.Signal_generator/DDS_instanz[2].DDS_generate.D 
DS_freq_reg/Mshreg_bkp_data_18  (SLICE_X68Y57.CX), 1 path
 ------------------------------------------------------------------------ 
--------
 Slack (setup path):     1.097ns (requirement - (data path - clock path 
skew + uncertainty))
   Source: 
Signal_generator_generate.Signal_generator/dds_frequency_250_2_18 (FF)
   Destination: 
Signal_generator_generate.Signal_generator/DDS_instanz[2].DDS_generate.D 
DS_freq_reg/Mshreg_bkp_data_18  (FF)
   Requirement:          4.000ns
   Data Path Delay:      5.970ns (Levels of Logic = 0)
   Clock Path Skew:      3.311ns (5.728 - 2.417)
   Source Clock:         clk_250 rising at 16.000ns
   Destination Clock:    register_bus_bram_clk_pin rising at 20.000ns
   Clock Uncertainty:    0.244ns


register_bus_bram_clk_pin is mit clk_bus verbunden.

clk_bus hat 100MHz und clk_250 hat 250MHz.

aals Timing contrains habe ich
NET "clk_250" TNM_NET = FFS "clk_250_grp";
NET "register_bus_bram_clk_pin" TNM_NET = FFS "bus_clk_grp";

TIMESPEC TS_false_path1 = FROM "clk_250_grp"    TO  "bus_clk_grp" TIG;
TIMESPEC TS_false_path3 = FROM "bus_clk_grp"  TO  "clk_250_grp"    TIG;

Sieht evtl jemand, was daran falsch sein könnte?
Eigentlich sollte dann das Timing doch ignoriert werden.

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.