Gast
#1228024
Hallo, will unbedindt mal das DCM in ModelSim Simulieren. Hat jemand damit erfahrung oder kann mir jemand das Fertige ModelSim-File geben? Danke
|
Anzeige
|
DCM in ModelSim Simulieren
Gast
#1228024
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)
Gast
#1228039
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;
Gast
#1228117
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
Gast
#1228118
Schon mal probiert, jitter damit zu simulieren?
Gast
#1228123
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.
Gast
#1897373
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
Gast
#1897400
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
Gast
#1897514
Ist es wirklich nötig, die Buffer, so wie oben angegeben, manuell zu instanziieren? Macht das die Synthese nicht selber? Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|