Difference between revisions of "DCM module VHDL code"

From Tech
Jump to navigationJump to search
(Created page with "With the following 3 files, the DCM module can be made to work without the IP CORE generator. Top level <tt>LEDtest.vhdl</tt>: <nowiki> library IEEE; use IEEE.STD_LOGIC_1164.AL…")
 
Line 172: Line 172:
 
NET "LED1" LOC = "P91";
 
NET "LED1" LOC = "P91";
 
NET "LED2" LOC = "P92";</nowiki>
 
NET "LED2" LOC = "P92";</nowiki>
  +
  +
If you encounter errors like these:
  +
<nowiki>ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:NgdBuild:981 - Could not find any associations for the following
  +
constraint:
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLK_FEEDBACK = 1X;>
  +
[constraints.ucf(12)]: INST "DCM_SP_INST" not found. Please verify that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLKDV_DIVIDE = 2.0;>
  +
[constraints.ucf(13)]: INST "DCM_SP_INST" not found. Please verify that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLKFX_DIVIDE = 7;>
  +
[constraints.ucf(14)]: INST "DCM_SP_INST" not found. Please verify that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLKFX_MULTIPLY = 25;>
  +
[constraints.ucf(15)]: INST "DCM_SP_INST" not found. Please verify that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLKIN_DIVIDE_BY_2 =
  +
FALSE;> [constraints.ucf(16)]: INST "DCM_SP_INST" not found. Please verify
  +
that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLKIN_PERIOD = 50.000;>
  +
[constraints.ucf(17)]: INST "DCM_SP_INST" not found. Please verify that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLKOUT_PHASE_SHIFT =
  +
NONE;> [constraints.ucf(18)]: INST "DCM_SP_INST" not found. Please verify
  +
that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST DESKEW_ADJUST =
  +
SYSTEM_SYNCHRONOUS;> [constraints.ucf(19)]: INST "DCM_SP_INST" not found.
  +
Please verify that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST DFS_FREQUENCY_MODE =
  +
LOW;> [constraints.ucf(20)]: INST "DCM_SP_INST" not found. Please verify
  +
that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST DLL_FREQUENCY_MODE =
  +
LOW;> [constraints.ucf(21)]: INST "DCM_SP_INST" not found. Please verify
  +
that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST DUTY_CYCLE_CORRECTION =
  +
TRUE;> [constraints.ucf(22)]: INST "DCM_SP_INST" not found. Please verify
  +
that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST FACTORY_JF = C080;>
  +
[constraints.ucf(23)]: INST "DCM_SP_INST" not found. Please verify that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST PHASE_SHIFT = 0;>
  +
[constraints.ucf(24)]: INST "DCM_SP_INST" not found. Please verify that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.
  +
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST STARTUP_WAIT = FALSE;>
  +
[constraints.ucf(25)]: INST "DCM_SP_INST" not found. Please verify that:
  +
1. The specified design element actually exists in the original design.
  +
2. The specified object is spelled correctly in the constraint source file.</nowiki>
  +
Then the solution is simple: <b>DO NOT INCLUDE the <tt>DCM_arwz.ucf</tt> file generated by IP CoreGenerator!
  +
  +
So, IGNORE the following file in <tt>ipcore_dir</tt>:
  +
<nowiki># Generated by Xilinx Architecture Wizard
  +
# --- UCF Template Only ---
  +
# Cut and paste these attributes into the project's UCF file, if desired
  +
INST DCM_SP_INST CLK_FEEDBACK = 1X;
  +
INST DCM_SP_INST CLKDV_DIVIDE = 2.0;
  +
INST DCM_SP_INST CLKFX_DIVIDE = 7;
  +
INST DCM_SP_INST CLKFX_MULTIPLY = 25;
  +
INST DCM_SP_INST CLKIN_DIVIDE_BY_2 = FALSE;
  +
INST DCM_SP_INST CLKIN_PERIOD = 50.000;
  +
INST DCM_SP_INST CLKOUT_PHASE_SHIFT = NONE;
  +
INST DCM_SP_INST DESKEW_ADJUST = SYSTEM_SYNCHRONOUS;
  +
INST DCM_SP_INST DFS_FREQUENCY_MODE = LOW;
  +
INST DCM_SP_INST DLL_FREQUENCY_MODE = LOW;
  +
INST DCM_SP_INST DUTY_CYCLE_CORRECTION = TRUE;
  +
INST DCM_SP_INST FACTORY_JF = C080;
  +
INST DCM_SP_INST PHASE_SHIFT = 0;
  +
INST DCM_SP_INST STARTUP_WAIT = FALSE;</nowiki>

Revision as of 00:52, 22 April 2013

With the following 3 files, the DCM module can be made to work without the IP CORE generator.

Top level LEDtest.vhdl:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity LEDtest is
  port (
    clk_in: in std_logic;
	 LED1: out std_logic;
	 LED2: out std_logic
  );
end LEDtest;


architecture BEHAVIOUR of LEDtest is
    component DCM71  port ( CLKIN_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 component;

    signal count: integer range 0 to 32000000 := 0;
	 signal clk: std_logic;
	 signal clk0: std_logic;
	 signal sec:integer range 0 to 3600 :=0;
	 signal duration: integer range 0 to 32000000 := 1000000;
	 signal tmp: std_logic_vector(0 downto 0);
	 
begin
  Inst_DCM71: DCM71 port map(
          CLKIN_IN        =>clk_in, 
          CLKFX_OUT       =>clk,
          CLKIN_IBUFG_OUT =>open, 
          CLK0_OUT        =>clk0, 
          LOCKED_OUT      =>open);
  IN_process: process (clk)
    begin
      if clk'event and clk = '1' then
		  count<=count+1;
		  if count<duration then
		    LED1<='1';
		  else
		    LED1<='0';
		  end if;
		  LED2<=tmp(0);
		  if count=31999999 then
		    count<=0;
			 sec<=sec+1;
			 tmp <=conv_std_logic_vector(sec, 1);
			 if sec=9 then
			   sec<=0;
				duration<=16000000;
			 else
			   duration<=10000000;
			 end if;
		  end if;  
		end if;
    end process;
end BEHAVIOUR;

The DCM71.vhdl file (I call it '71' as it's supposed to convert a 25MHz clock into 71.428...MHz):

--------------------------------------------------------------------------------
-- Copyright (c) 1995-2010 Xilinx, Inc.  All rights reserved.
--------------------------------------------------------------------------------
--   ____  ____ 
--  /   /\/   / 
-- /___/  \  /    Vendor: Xilinx 
-- \   \   \/     Version : 12.4
--  \   \         Application : xaw2vhdl
--  /   /         Filename : DCM71.vhd
-- /___/   /\     Timestamp : 04/18/2013 14:47:31
-- \   \  /  \ 
--  \___\/\___\ 
--
--Command: xaw2vhdl-st C:\\Xilinx\12.4\ISE_DS\ISE\.\DCM71.xaw C:\\Xilinx\12.4\ISE_DS\ISE\.\DCM71
--Design Name: DCM71
--Device: xc3s500e-4vq100
--
-- Module DCM71
-- Generated by Xilinx Architecture Wizard
-- Written for synthesis tool: XST
-- Period Jitter (unit interval) for block DCM_SP_INST = 0.08 UI
-- Period Jitter (Peak-to-Peak) for block DCM_SP_INST = 1.06 ns

library ieee;
use ieee.std_logic_1164.ALL;
use ieee.numeric_std.ALL;
library UNISIM;
use UNISIM.Vcomponents.ALL;

entity DCM71 is
   port ( CLKIN_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 DCM71;

architecture BEHAVIORAL of DCM71 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 => 7,
            CLKFX_MULTIPLY => 25,
            CLKIN_DIVIDE_BY_2 => FALSE,
            CLKIN_PERIOD => 50.000,
            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,
					 RST=>GND_BIT,
                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;

And the contraints.ucf file:

# Crystal Clock - use 32MHz onboard oscillator
NET "clk_in" LOC = "P89" | IOSTANDARD = LVCMOS25 | PERIOD = 31.25ns ;

# Wing1 Column A
NET "LED1" LOC = "P91";	
NET "LED2" LOC = "P92";

If you encounter errors like these:

ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:NgdBuild:981 - Could not find any associations for the following
   constraint:
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLK_FEEDBACK = 1X;>
   [constraints.ucf(12)]: INST "DCM_SP_INST" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLKDV_DIVIDE = 2.0;>
   [constraints.ucf(13)]: INST "DCM_SP_INST" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLKFX_DIVIDE = 7;>
   [constraints.ucf(14)]: INST "DCM_SP_INST" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLKFX_MULTIPLY = 25;>
   [constraints.ucf(15)]: INST "DCM_SP_INST" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLKIN_DIVIDE_BY_2 =
   FALSE;> [constraints.ucf(16)]: INST "DCM_SP_INST" not found.  Please verify
   that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLKIN_PERIOD = 50.000;>
   [constraints.ucf(17)]: INST "DCM_SP_INST" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST CLKOUT_PHASE_SHIFT =
   NONE;> [constraints.ucf(18)]: INST "DCM_SP_INST" not found.  Please verify
   that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST DESKEW_ADJUST =
   SYSTEM_SYNCHRONOUS;> [constraints.ucf(19)]: INST "DCM_SP_INST" not found. 
   Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST DFS_FREQUENCY_MODE =
   LOW;> [constraints.ucf(20)]: INST "DCM_SP_INST" not found.  Please verify
   that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST DLL_FREQUENCY_MODE =
   LOW;> [constraints.ucf(21)]: INST "DCM_SP_INST" not found.  Please verify
   that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST DUTY_CYCLE_CORRECTION =
   TRUE;> [constraints.ucf(22)]: INST "DCM_SP_INST" not found.  Please verify
   that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST FACTORY_JF = C080;>
   [constraints.ucf(23)]: INST "DCM_SP_INST" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST PHASE_SHIFT = 0;>
   [constraints.ucf(24)]: INST "DCM_SP_INST" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.
ERROR:ConstraintSystem:59 - Constraint <INST DCM_SP_INST STARTUP_WAIT = FALSE;>
   [constraints.ucf(25)]: INST "DCM_SP_INST" not found.  Please verify that:
   1. The specified design element actually exists in the original design.
   2. The specified object is spelled correctly in the constraint source file.

Then the solution is simple: DO NOT INCLUDE the DCM_arwz.ucf file generated by IP CoreGenerator!

So, IGNORE the following file in ipcore_dir:

# Generated by Xilinx Architecture Wizard
# --- UCF Template Only ---
# Cut and paste these attributes into the project's UCF file, if desired
INST DCM_SP_INST CLK_FEEDBACK = 1X;
INST DCM_SP_INST CLKDV_DIVIDE = 2.0;
INST DCM_SP_INST CLKFX_DIVIDE = 7;
INST DCM_SP_INST CLKFX_MULTIPLY = 25;
INST DCM_SP_INST CLKIN_DIVIDE_BY_2 = FALSE;
INST DCM_SP_INST CLKIN_PERIOD = 50.000;
INST DCM_SP_INST CLKOUT_PHASE_SHIFT = NONE;
INST DCM_SP_INST DESKEW_ADJUST = SYSTEM_SYNCHRONOUS;
INST DCM_SP_INST DFS_FREQUENCY_MODE = LOW;
INST DCM_SP_INST DLL_FREQUENCY_MODE = LOW;
INST DCM_SP_INST DUTY_CYCLE_CORRECTION = TRUE;
INST DCM_SP_INST FACTORY_JF = C080;
INST DCM_SP_INST PHASE_SHIFT = 0;
INST DCM_SP_INST STARTUP_WAIT = FALSE;