Danke. Ich habe den Namen für den zweiten Core in "adc_if_delay_group_2"
geändert.
Du schreibst "Die Constraints müssen dann natürlich auch dupliziert und
angepasst werden.". Klar. Das macht EDK doch automatisch, richtig?!.
Möchte ich mir nun ein BitStream erzeugen bekomme ich folgenden Fehler:
ERROR:Place:1153 - A clock IOB / BUFGCTRL clock component pair have been
found that are not placed at an optimal clock
IOB / BUFGCTRL site pair. The clock IOB component <rx_clk_in_p_2> is
placed at site <K26>. The corresponding BUFGCTRL
component <axi_device_1/axi_device_1/i_dev_if/i_clk_gbuf> is placed
at site <BUFGCTRL_X0Y18>. The clock IO can use
the fast path between the IOB and the Clock Buffer if a) the IOB is
placed on a Global Clock Capable IOB site that
has the fastest dedicated path to all BUFGCTRL sites, or b) the IOB
is placed on a Local Clock Capable IOB site that
has dedicated fast path to BUFGCTRL sites in its half of the device
(TOP or BOTTOM). You may want to analyze why this
problem exists and correct it. If this sub optimal condition is
acceptable for this design, you may use the
CLOCK_DEDICATED_ROUTE constraint in the .ucf file to demote this
message to a WARNING and allow your design to
continue. However, the use of this override is highly discouraged as
it may lead to very poor timing results. It is
recommended that this error condition be corrected in the design. A
list of all the COMP.PINs used in this clock
placement rule is listed below. These examples can be used directly
in the .ucf file to override this clock rule.
< NET "rx_clk_in_p_2" CLOCK_DEDICATED_ROUTE = FALSE; >
ERROR:Pack:1654 - The timing-driven placement phase encountered an
error.
ERROR:Xflow - Program map returned error code 2. Aborting flow
execution...
Ich denke mal nicht, dass dieser Fehler etwas mit der zuvor behobenen
DelayGroup zu tun hat, richtig?
Im ucf-File stand im funktionsfähigen Fall:
...
NET rx_clk_in_p LOC = AF20 | IOSTANDARD = LVDS_25 | DIFF_TERM =
TRUE;
NET rx_clk_in_n LOC = AF21 | IOSTANDARD = LVDS_25 | DIFF_TERM =
TRUE;
NET tx_clk_out_p LOC = J30 | IOSTANDARD = LVDS_25 | SLEW = FAST;
NET tx_clk_out_n LOC = K29 | IOSTANDARD = LVDS_25 | SLEW = FAST;
NET "CLK_P" TNM_NET = "CLK_P";
TIMESPEC "TS_CLK_P" = PERIOD "CLK_P" 200 MHz;
NET "CLK_N" TNM_NET = "CLK_N";
TIMESPEC "TS_CLK_N" = PERIOD "CLK_N" 200 MHz;
NET "rx_clk_in_p" TNM_NET = "rx_clk_in_p";
TIMESPEC "TS_rx_clk_in_p" = PERIOD "rx_clk_in_p" 250 MHz;
NET "rx_clk_in_n" TNM_NET = "rx_clk_in_n";
TIMESPEC "TS_rx_clk_in_n" = PERIOD "rx_clk_in_n" 250 MHz;
OFFSET = IN BEFORE "rx_clk_in_p" RISING;
OFFSET = IN BEFORE "rx_clk_in_p" FALLING;
OFFSET = OUT AFTER "rx_clk_in_p" REFERENCE_PIN "tx_clk_out_p" RISING;
OFFSET = OUT AFTER "rx_clk_in_p" REFERENCE_PIN "tx_clk_out_p" FALLING;
Da ich das Programm um einen duplizierten Core erweitert habe, habe ich
hinzugefügt:
NET rx_clk_in_p_2 LOC = AF20 | IOSTANDARD = LVDS_25 | DIFF_TERM =
TRUE;
NET rx_clk_in_n LOC_2 = AF21 | IOSTANDARD = LVDS_25 | DIFF_TERM =
TRUE;
NET tx_clk_out_p_2 LOC = J30 | IOSTANDARD = LVDS_25 | SLEW = FAST;
NET tx_clk_out_n_2 LOC = K29 | IOSTANDARD = LVDS_25 | SLEW = FAST;
NET "rx_clk_in_p_2" TNM_NET = "rx_clk_in_p_2";
TIMESPEC "TS_rx_clk_in_p_2" = PERIOD "rx_clk_in_p_2" 250 MHz;
NET "rx_clk_in_n_2" TNM_NET = "rx_clk_in_n_2";
TIMESPEC "TS_rx_clk_in_n_2" = PERIOD "rx_clk_in_n_2" 250 MHz;
OFFSET = IN BEFORE "rx_clk_in_p_2" RISING;
OFFSET = IN BEFORE "rx_clk_in_p_2" FALLING;
OFFSET = OUT AFTER "rx_clk_in_p_2" REFERENCE_PIN "tx_clk_out_p_2"
RISING;
OFFSET = OUT AFTER "rx_clk_in_p_2" REFERENCE_PIN "tx_clk_out_p_2"
FALLING;
In der Fehlerbeschreibung steht ja nun als Abhilfe etwas von "NET
"rx_clk_in_p_2" CLOCK_DEDICATED_ROUTE = FALSE;". Ich denke aber nicht,
dass das eine Lösung darstellt. (Es wird ja nur der Fehler in eine
Warnung umgewandelt. Was ich persönlich nun nicht gerade für
erstrebenswert halte).
Kannst du mir mit den wenigen Infos eventuell weiterhelfen, wo der
Fehler liegen könnte bzw, was mit dem Fehler gemeint ist um diesen auf
die Spur zu kommen? Danke dir.