Hallo Ich brauche für meine Schaltung ein Clock und ein dazue phasenverschobener Clock, welcher ich mit der DCM erzeuge. Um meine Schaltung zu clocken verwende ich den 'clk_Filt_100M' und der phasenverschobene clock heisst 'clk_OutReg_100M'. Letztere brauche ich um die Daten aus dem FPGA zu clocken. Doch der untenstehende Code erzeugt das Warning: "WARNING:Route - CLK Net:clk_Filt_100M is being routed on general routing resources. Please consider using a dedicated clocking routing resource. For more information on clock routing resources, see the target architecture's user guide." Ich habe dazu keine weiteren Hilfestellungen gefunden. Was mache ich falsch? library IEEE; Library UNISIM; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_SIGNED.ALL; use UNISIM.vcomponents.all; Library XilinxCoreLib; entity DA_Interface is Port ( CLOCK : in STD_LOGIC; RST : in STD_LOGIC; Button0 : in STD_LOGIC; Button2 : in STD_LOGIC; Led0 : out std_logic; BM : out STD_LOGIC; I_DATA_POLY5 : out std_logic_vector(13 downto 0); Q_DATA_POLY5 : out std_logic_vector(13 downto 0) ); end DA_Interface; architecture Behavioral of DA_Interface is COMPONENT dcm1 PORT( CLKIN_IN : IN std_logic; CLKIN_IBUFG_OUT : OUT std_logic; CLK0_OUT : OUT std_logic; LOCKED_OUT : OUT std_logic ); END COMPONENT; signal clk_OutReg_100M : std_logic; signal lock_dcm1 : std_logic; signal clk_Filt_100M : std_logic; begin process(clk_Filt_100M) begin if (clk_Filt_100M='1' and clk_Filt_100M'event) then if lock_dcm1 = '1' then Led0 <= Button0 and Button2; BM <= Button2; end if; end if; end process; Inst_dcm1: dcm1 PORT MAP( CLKIN_IN => CLOCK, CLKIN_IBUFG_OUT => clk_Filt_100M,--has no delay CLK0_OUT => clk_OutReg_100M,--has some delay LOCKED_OUT => lock_dcm1 ); end Behavioral;
Bei der Verwendung der DCM müssen spezielle Puffer mit verschaltet werden. Es gibt keine direkte Verbindung von der DCM auf eine Clockleitung. Dafür gibt ist ein Puffer notwendig. Da gibt es bei Xilinx eine Literatur. User guide oder so ähnliches. Habe ich auch nicht gerade bei der Hand.
Hast du den DCM mit dem Core-Generator erzeugt? Wenn ja, schau mal, ob für die Ausgänge wirklich die BUFG verwendet werden. Ist das alles an Code? Gibst du den Clock noch aus dem FPGA aus an einem Pin? Wenn ja, da musst du ein ODDR Register verwenden, damit die Clock-Leitungen für das Routing dahin benutzt werden können.
Ja Core-Generator. Offenbar liegt der Fehler daran, dass ich CLKIN_IBUFG_OUT => clk_Filt_100M gehängt habe. Warum darf man das nicht?
Man darf das, aber da hängt normalerweise das Feedback dran. Und soweit ich weiß, kann der IBUFG Out nicht in das Clock-Netzwerk einspeisen. Macht man auch nicht, sondern man benutzt üblicherweise den CLK0 Ausgang. Der ist in Phase mit dem Eingang.
Ok, Ich brauche in meiner Schaltung aber einen Clock welcher in Phase ist mit dem Input Clock und zusätzlich einer der Phasenverschoben ist. Kann ich mit dem CLOCK Input die DCM und sonstige Sachen clocken, oder brauche ich jetzt noch eine zusätzliche DCM?
Der CLK0 ist doch in Phase mit den Eingangs-Takt, solange du die festen Phasenverschiebungen in 90° Schnritten benutzt. Wenn du feinere Stufen brauchst, musst du wirklich auf den CLKIN_IBUFG_OUT benutzen, aber dann zwischen diesen Ausgang und dem CLK noch einen BUFG setzen. 2. aber schlechtere Möglichkeit ist, den DCM auf "Internal" Taktquelle zu stellen und den Takt von außen direkt auf deine Logik und auf den DCM. Das ist aber auch nicht sauber und schränkt die Performance des DCM ein.
Ok, hat funktioniert. Allerdings braucht es denn BUFG nicht, dafür muss man dann bei der zweiten DCM darauf achten, dass der Clock nicht nochmal über einen IBUFG genommen wird.
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.