Hallo,
ich bekomme von aussen 50MHz ins FPGA rein und will 65MHz wieder
ausgaben für einen externen ADC.
Also Eingänge beschrieben:
1 | entity blah is
|
2 | port (CLK: in std_logic;
|
3 | ADC_Clock_out: out std_logic);
|
4 | end blah;
|
Dann den Clockmanager generiert:
1 | COMPONENT clk_65mhz is
|
2 | port
|
3 | (-- Clock in ports
|
4 | clk : in std_logic;
|
5 | -- Clock out ports
|
6 | clk65 : out std_logic;
|
7 | clk25 : out std_logic
|
8 | );
|
9 | END COMPONENT;
|
Den dann verdrahtet:
1 | clk0: clk_65mhz PORT MAP(
|
2 | clk => CLK,
|
3 | clk65 => ADC_Clock_out,
|
4 | clk25 => CLK25);
|
Und auch im .UCF (ISE) die Signale mit Pads verbunden:
1 | NET "CLK" LOC = "P14"; #50MHz
|
2 | NET "ADC_Clock_out" LOC = "P17";
|
Das FPGA ist ein XC6SLX9-2TQG144C, der Pin P17 ist laut Datenblatt des
Modulherstellers (Bitrecords) ein "IO_L43P_GCLK23_3". Also ein Taktpin.
Lasse ich aber alles durchlaufen mit routen und so, dann bekomme ich
einen Fehler:
1 | ERROR:Place:1205 - This design contains a global buffer instance,
|
2 | <clk0/clkout1_buf>, driving the net, <ADC_Clock_out_OBUF>, that is driving
|
3 | the following (first 30) non-clock load pins off chip.
|
4 | < PIN: ADC_Clock_out.O; >
|
5 | This design practice, in Spartan-6, can lead to an unroutable situation due
|
6 | to limitations in the global routing. If the design does route there may be
|
7 | excessive delay or skew on this net. It is recommended to use a Clock
|
8 | Forwarding technique to create a reliable and repeatable low skew solution:
|
9 | instantiate an ODDR2 component; tie the .D0 pin to Logic1; tie the .D1 pin to
|
10 | Logic0; tie the clock net to be forwarded to .C0; tie the inverted clock to
|
11 | .C1. If you wish to override this recommendation, you may use the
|
12 | CLOCK_DEDICATED_ROUTE constraint (given below) in the .ucf file to demote
|
13 | this message to a WARNING and allow your design to continue. Although the net
|
14 | may still not route, you will be able to analyze the failure in FPGA_Editor.
|
15 | < PIN "clk0/clkout1_buf.O" CLOCK_DEDICATED_ROUTE = FALSE; >
|
Wie umgehe ich das? Also wie schaffe ich es, dass der Takt direkt über
ein Taktnetz auf das Pad geroutet wird? Ich hab schon viel dazu gesucht
aber da finde ich nur Zeug zu Takteingängen ...
Danke!