1 | ----------------------------------------------------------------------------------
|
2 | -- Company:
|
3 | -- Engineer:
|
4 | --
|
5 | -- Create Date: 11:59:57 10/12/2009
|
6 | -- Design Name:
|
7 | -- Module Name: LVDS_CLOCK_IN - Behavioral
|
8 | -- Project Name:
|
9 | -- Target Devices:
|
10 | -- Tool versions:
|
11 | -- Description:
|
12 | --
|
13 | -- Dependencies:
|
14 | --
|
15 | -- Revision:
|
16 | -- Revision 0.01 - File Created
|
17 | -- Additional Comments:
|
18 | --
|
19 | ----------------------------------------------------------------------------------
|
20 | library IEEE;
|
21 | use IEEE.STD_LOGIC_1164.ALL;
|
22 | use IEEE.STD_LOGIC_ARITH.ALL;
|
23 | use IEEE.STD_LOGIC_UNSIGNED.ALL;
|
24 | Library UNISIM;
|
25 | use UNISIM.vcomponents.all;
|
26 |
|
27 |
|
28 |
|
29 | entity LVDS_CLOCK_IN is
|
30 | Port ( AFE_CLK_P : in STD_LOGIC;
|
31 | AFE_CLK_N : in STD_LOGIC;
|
32 | -- AFE_DAT_P : in STD_LOGIC;
|
33 | -- AFE_DAT_N : in STD_LOGIC;
|
34 | DCM_RESET : in STD_LOGIC;
|
35 | -- DDR_RESET : in STD_LOGIC;
|
36 | -- SET_DDR : in STD_LOGIC;
|
37 | CLOCK_OUT0 : out STD_LOGIC;
|
38 | CLOCK_OUT180 : out STD_LOGIC
|
39 | -- DATA_OUTQ0 : out STD_LOGIC;
|
40 | -- DATA_OUTQ1 : out STD_LOGIC
|
41 | );
|
42 | end LVDS_CLOCK_IN;
|
43 |
|
44 | architecture Behavioral of LVDS_CLOCK_IN is
|
45 |
|
46 | signal CLOCK_INT : STD_LOGIC;
|
47 | signal CLOCK_OUT0_int : STD_LOGIC;
|
48 | signal CLOCK_OUT180_int : STD_LOGIC;
|
49 | --signal CLOCK_OUT0_out : STD_LOGIC;
|
50 | --signal CLOCK_OUT180_out : STD_LOGIC;
|
51 | signal CLKFB_in : STD_LOGIC;
|
52 | --signal DATA_INT : STD_LOGIC;
|
53 |
|
54 | --constant IDDR2_CE : STD_LOGIC := '1';
|
55 |
|
56 | begin
|
57 |
|
58 | A : IBUFGDS
|
59 | port map (O => CLOCK_INT,
|
60 | I => AFE_CLK_P,
|
61 | IB => AFE_CLK_N);
|
62 |
|
63 | --B : IBUFDS
|
64 | -- port map (O => DATA_INT,
|
65 | -- I => AFE_DAT_P,
|
66 | -- IB => AFE_DAT_N);
|
67 |
|
68 | C : BUFG
|
69 | port map (I=>CLOCK_OUT0_int,
|
70 | O=>CLOCK_OUT0);
|
71 |
|
72 | D : BUFG
|
73 | port map (I=>CLOCK_OUT0_int,
|
74 | O=>CLKFB_in);
|
75 |
|
76 | D1 : BUFG
|
77 | port map (I=>CLOCK_OUT180_int,
|
78 | O=>CLOCK_OUT180);
|
79 |
|
80 | E : DCM_SP
|
81 | generic map (
|
82 | CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
|
83 | -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
|
84 | CLKFX_DIVIDE => 2, -- Can be any interger from 1 to 32
|
85 | CLKFX_MULTIPLY => 2, -- Can be any integer from 1 to 32
|
86 | CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
|
87 | CLKIN_PERIOD => 6.25, -- Specify period of input clock
|
88 | CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of "NONE", "FIXED" or "VARIABLE"
|
89 | CLK_FEEDBACK => "1X", -- Specify clock feedback of "NONE", "1X" or "2X"
|
90 | DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- "SOURCE_SYNCHRONOUS", "SYSTEM_SYNCHRONOUS" or
|
91 | -- an integer from 0 to 15
|
92 | DLL_FREQUENCY_MODE => "LOW", -- "HIGH" or "LOW" frequency mode for DLL
|
93 | DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
|
94 | PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
|
95 | STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM_SP LOCK, TRUE/FALSE
|
96 | port map (
|
97 | CLK0 => CLOCK_OUT0_int, -- 0 degree DCM CLK ouptput
|
98 | CLK180 => CLOCK_OUT180_int, -- 180 degree DCM CLK output
|
99 | CLK270 => open, -- 270 degree DCM CLK output
|
100 | CLK2X => open, -- 2X DCM CLK output
|
101 | CLK2X180 => open, -- 2X, 180 degree DCM CLK out
|
102 | CLK90 => open, -- 90 degree DCM CLK output
|
103 | CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
|
104 | CLKFX => open, -- DCM CLK synthesis out (M/D)
|
105 | CLKFX180 => open, -- 180 degree CLK synthesis out
|
106 | LOCKED => open, -- DCM LOCK status output
|
107 | PSDONE => open, -- Dynamic phase adjust done output
|
108 | STATUS => open, -- 8-bit DCM status bits output
|
109 | CLKFB => CLKFB_in, -- DCM clock feedback
|
110 | CLKIN => CLOCK_INT, -- Clock input (from IBUFG, BUFG or DCM)
|
111 | PSCLK => open, -- Dynamic phase adjust clock input
|
112 | PSEN => open, -- Dynamic phase adjust enable input
|
113 | PSINCDEC => open, -- Dynamic phase adjust increment/decrement
|
114 | RST => DCM_RESET -- DCM asynchronous reset input
|
115 | );
|
116 |
|
117 | --CLOCK_OUT180 <= CLOCK_OUT180_out;
|
118 | --CLOCK_OUT0 <= CLOCK_OUT0_out;
|
119 |
|
120 | --F : IDDR2
|
121 | --generic map (
|
122 | -- DDR_ALIGNMENT => "NONE", -- Sets output alignment
|
123 | -- -- to "NONE", "C0" or "C1"
|
124 | -- INIT_Q0 => '0', -- Sets initial state of the Q0
|
125 | -- -- output to ?0? or ?1?
|
126 | -- INIT_Q1 => '0', -- Sets initial state of the Q1
|
127 | -- -- output to ?0? or ?1?
|
128 | -- SRTYPE => "SYNC") -- Specifies "SYNC" or "ASYNC"
|
129 | -- -- set/reset
|
130 | --port map (
|
131 | -- Q0 => DATA_OUTQ0, -- 1-bit output captured with C0 clock
|
132 | -- Q1 => DATA_OUTQ1, -- 1-bit output captured with C1 clock
|
133 | -- C0 => CLOCK_OUT0_int, -- 1-bit clock input
|
134 | -- C1 => CLOCK_OUT180_int, -- 1-bit clock input
|
135 | -- CE => IDDR2_CE, -- 1-bit clock enable input
|
136 | -- D => DATA_INT, -- 1-bit DDR data input
|
137 | -- R => DDR_RESET, -- 1-bit reset input
|
138 | -- S => SET_DDR -- 1-bit set input
|
139 | --);
|
140 |
|
141 |
|
142 | end Behavioral;
|