Gast
#689607
Hallo zusammen,
ich hab das Problem, dass ich den Systemtakt auf meinem Digilent S3 1000
Starterboard auf 100 MHz verdoppeln muss, um eine korrekte SRAM
Ansteuerung zu entwerfen.
In der Web ISE 8.1 hab
1. Xilinx Wizzard => DCM Wizzard => single DCM gewählt
Dadurch wurde eine VHD Datei mit Xilinx spezifischen Befehlen erzeugt.
Ergebnis in der Anlage als VHD Datei.
2. Die componente hab ich in meiner TOP Entity instanziert und mit
Signalen verbunden.
3. Der ursprüngliche 50 Mhz Takt gibt den Input für die DCM. Den 50 MHz
Takt Ausgang ( hoffentlich den richtigen ) von der DCM wurde als neuer
Takt-Eingang für die ganze Schaltung verwendet.
4. Der 100 Mhz Takt wurde noch nirgends verwendet.
Ergebnis => Schaltung funktioniert nicht mehr.
(Schon der SRAM Lese- Schreibtest über ein PC Testprogramm über USB
schlägt fehl )
Als Anlage hab ich die funktionierende Top Entity Datei und die
modifizierte beigefügt.
------------------------------------------------------
Zur Übersicht.
=================
ganz am Ende der Datei wird mit
my_used_dcm: my_dcm port MAP (
CLKIN_IN => ext_mclk50,
RST_IN => dcm_RST_IN,
CLKIN_IBUFG_OUT => ext_mclk50_IBUFG_OUT,
CLK0_OUT => mclk50,
CLK2X_OUT => mclk100,
LOCKED_OUT => dcm_LOCKED_OUT
);
die DCM Komponente eingebunden.
mclk ist der Port-Pin der mit dem externen Oszillator verbunden ist.
Über die Anweisung
ext_mclk50 <= mclk ;
wird der mclk auf das Signal ext_mclk50 gelegt, welches dann it CLKIN_IN
der DCM verbunden wird.
Über die Anweisung
dcm_RST_IN <= '0'
wird der Reset auf 0 geklemmt.
Über die Anweisung bei der DCM Instanzierung wird der neue 50 MHz
Ausgang auf das neue 50MHz Taktsignal mclk50 gelegt, den ich als Eingang
und Taktflankenabfrage in den Prozessen verwende.
CLK0_OUT => mclk50
----------------------------------------------------------------------
Die VHDL Datei für die DCM sieht folgendermaßen aus:
library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;
-- synopsys translate_off
library UNISIM;
use UNISIM.Vcomponents.ALL;
-- synopsys translate_on
entity my_dcm is
port ( CLKIN_IN : in std_logic;
RST_IN : in std_logic;
CLKIN_IBUFG_OUT : out std_logic;
CLK0_OUT : out std_logic;
CLK2X_OUT : out std_logic;
LOCKED_OUT : out std_logic);
end my_dcm;
architecture BEHAVIORAL of my_dcm is
signal CLKFB_IN : std_logic;
signal CLKIN_IBUFG : std_logic;
signal CLK0_BUF : std_logic;
signal CLK2X_BUF : std_logic;
signal GND1 : std_logic;
component IBUFG
port ( I : in std_logic;
O : out std_logic);
end component;
component BUFG
port ( I : in std_logic;
O : out std_logic);
end component;
component DCM
generic( CLK_FEEDBACK : string := "1X";
CLKDV_DIVIDE : real := 2.000000;
CLKFX_DIVIDE : integer := 1;
CLKFX_MULTIPLY : integer := 4;
CLKIN_DIVIDE_BY_2 : boolean := FALSE;
CLKIN_PERIOD : real := 10.000000;
CLKOUT_PHASE_SHIFT : string := "NONE";
DESKEW_ADJUST : string := "SYSTEM_SYNCHRONOUS";
DFS_FREQUENCY_MODE : string := "LOW";
DLL_FREQUENCY_MODE : string := "LOW";
DUTY_CYCLE_CORRECTION : boolean := TRUE;
FACTORY_JF : bit_vector := x"C080";
PHASE_SHIFT : integer := 0;
STARTUP_WAIT : boolean := FALSE;
DSS_MODE : string := "NONE");
port ( CLKIN : in std_logic;
CLKFB : in std_logic;
RST : in std_logic;
PSEN : in std_logic;
PSINCDEC : in std_logic;
PSCLK : in std_logic;
DSSEN : in std_logic;
CLK0 : out std_logic;
CLK90 : out std_logic;
CLK180 : out std_logic;
CLK270 : out std_logic;
CLKDV : out std_logic;
CLK2X : out std_logic;
CLK2X180 : out std_logic;
CLKFX : out std_logic;
CLKFX180 : out std_logic;
STATUS : out std_logic_vector (7 downto 0);
LOCKED : out std_logic;
PSDONE : out std_logic);
end component;
begin
GND1 <= '0';
CLKIN_IBUFG_OUT <= CLKIN_IBUFG;
CLK0_OUT <= CLKFB_IN;
CLKIN_IBUFG_INST : IBUFG
port map (I=>CLKIN_IN,
O=>CLKIN_IBUFG);
CLK0_BUFG_INST : BUFG
port map (I=>CLK0_BUF,
O=>CLKFB_IN);
CLK2X_BUFG_INST : BUFG
port map (I=>CLK2X_BUF,
O=>CLK2X_OUT);
DCM_INST : DCM
generic map( CLK_FEEDBACK => "1X",
CLKDV_DIVIDE => 2.000000,
CLKFX_DIVIDE => 1,
CLKFX_MULTIPLY => 4,
CLKIN_DIVIDE_BY_2 => FALSE,
CLKIN_PERIOD => 20.000000,
CLKOUT_PHASE_SHIFT => "NONE",
DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS",
DFS_FREQUENCY_MODE => "LOW",
DLL_FREQUENCY_MODE => "LOW",
DUTY_CYCLE_CORRECTION => TRUE,
FACTORY_JF => x"8080",
PHASE_SHIFT => 0,
STARTUP_WAIT => FALSE)
port map (CLKFB=>CLKFB_IN,
CLKIN=>CLKIN_IBUFG,
DSSEN=>GND1,
PSCLK=>GND1,
PSEN=>GND1,
PSINCDEC=>GND1,
RST=>RST_IN,
CLKDV=>open,
CLKFX=>open,
CLKFX180=>open,
CLK0=>CLK0_BUF,
CLK2X=>CLK2X_BUF,
CLK2X180=>open,
CLK90=>open,
CLK180=>open,
CLK270=>open,
LOCKED=>LOCKED_OUT,
PSDONE=>open,
STATUS=>open);
end BEHAVIORAL;
Ich hoffe ich konnte alle relevanten Infos vernünftig darstellen, damit
mir jemand helfen kann. Ich hab an dem Problem mittlerweile bestimmt 8
Stunden verbraten. ( Muß ich zu meiner Schande gestehen ) Bin Halt noch
Anfänger
Gruß vom FPGA-Fragenden