Hallo, will unbedindt mal das DCM in ModelSim Simulieren. Hat jemand damit erfahrung oder kann mir jemand das Fertige ModelSim-File geben? Danke
Benutze den DCM doch einfach in einem Design deiner Wahl und simuliere es. Die Library dafür ist ja in den Xilinx libs drin. Ich hab fast immer einen DCM drin, klappt bestens in der Simulation. (Modelsim XE)
Danke Christian. Kann ich das Code hier nehmen und dan Simulieren: library ieee; use ieee.std_logic_1164.ALL; use ieee.numeric_std.ALL; library UNISIM; use UNISIM.Vcomponents.ALL; entity DCMA is port ( CLKIN_IN : in std_logic; RST_IN : in std_logic; CLKFX_OUT : out std_logic; CLKIN_IBUFG_OUT : out std_logic; CLK0_OUT : out std_logic; LOCKED_OUT : out std_logic); end DCMA; architecture BEHAVIORAL of DCMA is signal CLKFB_IN : std_logic; signal CLKFX_BUF : std_logic; signal CLKIN_IBUFG : std_logic; signal CLK0_BUF : std_logic; signal GND_BIT : std_logic; begin GND_BIT <= '0'; CLKIN_IBUFG_OUT <= CLKIN_IBUFG; CLK0_OUT <= CLKFB_IN; CLKFX_BUFG_INST : BUFG port map (I=>CLKFX_BUF, O=>CLKFX_OUT); CLKIN_IBUFG_INST : IBUFG port map (I=>CLKIN_IN, O=>CLKIN_IBUFG); CLK0_BUFG_INST : BUFG port map (I=>CLK0_BUF, O=>CLKFB_IN); DCM_SP_INST : DCM_SP generic map( CLK_FEEDBACK => "1X", CLKDV_DIVIDE => 2.0, CLKFX_DIVIDE => 2, CLKFX_MULTIPLY => 2, CLKIN_DIVIDE_BY_2 => FALSE, CLKIN_PERIOD => 30.303, CLKOUT_PHASE_SHIFT => "FIXED", DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", DFS_FREQUENCY_MODE => "LOW", DLL_FREQUENCY_MODE => "LOW", DUTY_CYCLE_CORRECTION => FALSE, FACTORY_JF => x"C080", PHASE_SHIFT => 0, STARTUP_WAIT => FALSE) port map (CLKFB=>CLKFB_IN, CLKIN=>CLKIN_IBUFG, DSSEN=>GND_BIT, PSCLK=>GND_BIT, PSEN=>GND_BIT, PSINCDEC=>GND_BIT, RST=>RST_IN, CLKDV=>open, CLKFX=>CLKFX_BUF, CLKFX180=>open, CLK0=>CLK0_BUF, CLK2X=>open, CLK2X180=>open, CLK90=>open, CLK180=>open, CLK270=>open, LOCKED=>LOCKED_OUT, PSDONE=>open, STATUS=>open); end BEHAVIORAL;
Hallo Christian, das habe ich jetzt gefunden. nun versuche ich den DCM zu simulieren. Ich gebe in Bench-File nur den Clock und den RST für min 3 Perioden vor. CLKIN_IN : in std_logic; RST_IN : in std_logic; Eigentlich müsste ich doch am CLKDV_OUT was sehen, oder? Anbei das Code+Testbench nochmal: ------------------------------------------------------------------------ -------- -- Copyright (c) 1995-2007 Xilinx, Inc. All rights reserved. ------------------------------------------------------------------------ -------- -- ___ ___ -- / /\/ / -- ___ \ / Vendor: Xilinx -- \ \ \/ Version : 9.2.04i -- \ \ Application : xaw2vhdl -- Filename : DCM.vhd -- ___ /\ Timestamp : 06/03/2008 11:27:26 -- \ \ / \ -- \___\/\___\ -- --Command: xaw2vhdl-intstyle D:/VHDLTutorial/test03/DCM.xaw -st DCM.vhd --Design Name: DCM --Device: xc3s250e-4pq208 -- -- Module DCM -- Generated by Xilinx Architecture Wizard -- Written for synthesis tool: XST -- Period Jitter (unit interval) for block DCM_SP_INST = 0.03 UI -- Period Jitter (Peak-to-Peak) for block DCM_SP_INST = 0.93 ns library ieee; use ieee.std_logic_1164.ALL; use ieee.numeric_std.ALL; library UNISIM; use UNISIM.Vcomponents.ALL; entity DCM is port ( CLKIN_IN : in std_logic; RST_IN : in std_logic; CLKDV_OUT : out std_logic; CLKFX_OUT : out std_logic; CLKIN_IBUFG_OUT : out std_logic; CLK0_OUT : out std_logic; LOCKED_OUT : out std_logic); end DCM; architecture BEHAVIORAL of DCM is signal CLKDV_BUF : std_logic; signal CLKFB_IN : std_logic; signal CLKFX_BUF : std_logic; signal CLKIN_IBUFG : std_logic; signal CLK0_BUF : std_logic; signal GND_BIT : std_logic; begin GND_BIT <= '0'; CLKIN_IBUFG_OUT <= CLKIN_IBUFG; CLK0_OUT <= CLKFB_IN; CLKDV_BUFG_INST : BUFG port map (I=>CLKDV_BUF, O=>CLKDV_OUT); CLKFX_BUFG_INST : BUFG port map (I=>CLKFX_BUF, O=>CLKFX_OUT); CLKIN_IBUFG_INST : IBUFG port map (I=>CLKIN_IN, O=>CLKIN_IBUFG); CLK0_BUFG_INST : BUFG port map (I=>CLK0_BUF, O=>CLKFB_IN); DCM_SP_INST : DCM_SP generic map( CLK_FEEDBACK => "1X", CLKDV_DIVIDE => 2.0, CLKFX_DIVIDE => 4, CLKFX_MULTIPLY => 2, CLKIN_DIVIDE_BY_2 => FALSE, CLKIN_PERIOD => 15.152, CLKOUT_PHASE_SHIFT => "NONE", DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", DFS_FREQUENCY_MODE => "LOW", DLL_FREQUENCY_MODE => "LOW", DUTY_CYCLE_CORRECTION => TRUE, FACTORY_JF => x"C080", PHASE_SHIFT => 0, STARTUP_WAIT => FALSE) port map (CLKFB=>CLKFB_IN, CLKIN=>CLKIN_IBUFG, DSSEN=>GND_BIT, PSCLK=>GND_BIT, PSEN=>GND_BIT, PSINCDEC=>GND_BIT, RST=>RST_IN, CLKDV=>CLKDV_BUF, CLKFX=>CLKFX_BUF, CLKFX180=>open, CLK0=>CLK0_BUF, CLK2X=>open, CLK2X180=>open, CLK90=>open, CLK180=>open, CLK270=>open, LOCKED=>LOCKED_OUT, PSDONE=>open, STATUS=>open); end BEHAVIORAL; Test-File: vsim work.dcm add wave CLK0_BUF add wave CLKIN_IN add wave RST_IN force RST_IN 1 run 400 force RST_IN 0 force CLKIN_IN 0 0, 1 50 -repeat 100 run 1000
Das hört sich sicher interessant an. Probiere ich sofort, wenn ich das einfache DCM zum laufen bringe.
Soviel ich weiss, muß man beim Simulieren der DCM die zeitliche Auflösung des Simulators auf fs (femtosekunde) stellen. Jedenfalls habe ich immer eine solche Warnung bekommen. Außerdem solltest Du dir angewöhnen eine richtige Testbench zu schreiben. Force-Befehle ersetzen keine Testbench.
1ps reicht. Aber je nach FPGA gibts da immer mal Bugs in den Modellen. Ich hab hier z.B. den DCM im Spartan 3e, in der Simulation geht das LOCK nie auf High, obwohl alles stabil ist. In der Wirklichkeit schon. Ist ein Bug in der 9.2.0.4 irgendwo stand, dass das ab SP2 von 10.1 behoben ist. Ich hab aber das 10.1 immer noch nicht drauf.
Christian R. schrieb: > DCM im Spartan 3e, in der Simulation geht das LOCK > nie auf High, obwohl alles stabil ist Kurzes Update: Scheint in der 12.2 immer noch ein Problem zu sein :-( Duke
Update Nummer 2: Geht doch. Ich hatte den Reset der DCM fix auf '0' gelegt. Das geht in der Praxis, aber nicht in der Simulation. Siehe auch hier: http://forums.xilinx.com/t5/Simulation-and-Verification/DCMs-not-locking-in-ISE10-1-03i-ModelSim6-3c/td-p/30105 Duke
Ist es wirklich nötig, die Buffer, so wie oben angegeben, manuell zu instanziieren? Macht das die Synthese nicht selber?
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.