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?
Den Artikel dazu finde ich gut, nimm die PDF Version: http://www.edn.com/design/systems-design/4333702/Crossing-the-abyss-asynchronous-signals-in-a-synchronous-world
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.
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.
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.