source: firmware/FTM/Clock_cond_interface/Clock_cond_interface.vhd @ 10259

Last change on this file since 10259 was 10259, checked in by vogler, 10 years ago
ftm_definitions update constants for clock conditioner interface introduced
File size: 7.9 KB
Line 
1----------------------------------------------------------------------------------
2-- Company:        ETH Zurich, Institute for Particle Physics
3-- Engineer:       Patrick Vogler
4--
5-- Create Date:    14 February 2010
6-- Design Name:   
7-- Module Name:    FTM Clock conditioner Interface
8-- Project Name:
9-- Target Devices:
10-- Tool versions:
11-- Description:    Interface to the LMK03000 Clock conditioner
12--
13-- Dependencies:
14--
15-- Revision:
16-- Revision 0.01 - File Created
17-- Additional Comments:
18--
19--
20-- modifications:  February 21  2011 by Patrick Vogler
21--                 March    23  2011 by Patrick Vogler
22----------------------------------------------------------------------------------
23
24library IEEE;
25use IEEE.STD_LOGIC_1164.ALL;
26use IEEE.STD_LOGIC_ARITH.ALL;
27use IEEE.STD_LOGIC_UNSIGNED.ALL;
28
29---- Uncomment the following library declaration if instantiating
30---- any Xilinx primitives in this code.
31--library UNISIM;
32--use UNISIM.VComponents.all;
33
34library ftm_definitions;
35USE ftm_definitions.ftm_array_types.all;
36USE ftm_definitions.ftm_constants.all;
37
38
39
40entity Clock_cond_interface is
41  port(
42
43   
44-- Clock
45-------------------------------------------------------------------------------
46   clk   : IN  STD_LOGIC;               -- 50 MHz system clock
47
48   
49-- Clock conditioner LMK03000
50-------------------------------------------------------------------------------
51   CLK_Clk_Cond  : out STD_LOGIC;  -- clock conditioner MICROWIRE interface clock
52   LE_Clk_Cond   : out STD_LOGIC;  -- clock conditioner MICROWIRE interface latch enable   
53   DATA_Clk_Cond : out STD_LOGIC;  -- clock conditioner MICROWIRE interface data
54   
55   SYNC_Clk_Cond : out STD_LOGIC;  -- clock conditioner global clock synchronization
56   LD_Clk_Cond   : in STD_LOGIC;   -- clock conditioner lock detect                 
57
58   
59-- Time Marker
60-------------------------------------------------------------------------------
61   TIM_Sel    : out STD_LOGIC;   -- Time Marker selector
62                                 -- 1 = time marker from Clock conditioner
63                                 --     for DRS timing calibration
64                                 --
65                                 -- 0 = time marker from FPGA for normal
66                                 --     operation / physics run
67
68   
69   
70-- FPGA intern clock conditioner configuration data
71-------------------------------------------------------------------------------
72   cc_R0             : in std_logic_vector (31 downto 0) := (others => '0');
73   cc_R1             : in std_logic_vector (31 downto 0) := (others => '0');
74   cc_R8             : in std_logic_vector (31 downto 0) := (others => '0');
75   cc_R9             : in std_logic_vector (31 downto 0) := (others => '0');
76   cc_R11            : in std_logic_vector (31 downto 0) := (others => '0');
77   cc_R13            : in std_logic_vector (31 downto 0) := (others => '0');
78   cc_R14            : in std_logic_vector (31 downto 0) := (others => '0');
79   cc_R15            : in std_logic_vector (31 downto 0) := (others => '0');
80
81 
82 
83   
84-- FPGA intern control signals
85-------------------------------------------------------------------------------
86   start_config : in STD_LOGIC;        -- load new configuration into the clock
87                                       -- conditioner
88   
89   config_started : out STD_LOGIC;     -- indicates that the new configuration
90                                       -- is currently loaded into the clock conditioner
91
92   config_done : out STD_LOGIC;        -- indicates that the configuration has
93                                       -- been loaded and the clock conditioners
94                                       -- PLL is locked
95
96   timemarker_select: in STD_LOGIC     -- selects time marker source
97                                       --
98                                       -- 1 = time marker from Clock conditioner
99                                       --     for DRS timing calibration
100                                       --
101                                       -- 0 = time marker from FPGA for normal
102                                       --     operation / physics run
103   
104  );
105end Clock_cond_interface;
106
107
108
109
110architecture Behavioral of Clock_cond_interface is
111 
112 
113component microwire_interface IS
114   PORT(
115      clk               : IN     std_logic;
116      clk_uwire         : OUT    std_logic;  --- IN or OUT ?         
117      data_uwire        : OUT    std_logic;       
118      le_uwire          : OUT    std_logic;
119      clk_cond_array    : IN     clk_cond_array_type;   
120      config_start      : IN     std_logic;
121      config_ready      : OUT    std_logic; 
122      config_started    : OUT    std_logic     
123   );
124end component;
125
126
127
128 
129  signal clk_50M_sig : STD_LOGIC;       -- system clock
130--  signal start_config_sig : STD_LOGIC; 
131
132  signal config_ready_sig : STD_LOGIC;
133  signal clk_uwire_sig : STD_LOGIC;
134
135  signal config_started_sig : STD_LOGIC;
136 
137  signal clk_cond_array_sig : clk_cond_array_type; 
138
139  signal cc_R0_sig             : std_logic_vector (31 downto 0); 
140  signal cc_R1_sig             : std_logic_vector (31 downto 0);
141
142  signal cc_R2_sig             : std_logic_vector (31 downto 0);       
143  signal cc_R3_sig             : std_logic_vector (31 downto 0); 
144  signal cc_R4_sig             : std_logic_vector (31 downto 0); 
145  signal cc_R5_sig             : std_logic_vector (31 downto 0); 
146  signal cc_R6_sig             : std_logic_vector (31 downto 0); 
147  signal cc_R7_sig             : std_logic_vector (31 downto 0);
148
149  signal cc_R8_sig             : std_logic_vector (31 downto 0); 
150  signal cc_R9_sig             : std_logic_vector (31 downto 0); 
151  signal cc_R11_sig            : std_logic_vector (31 downto 0); 
152  signal cc_R13_sig            : std_logic_vector (31 downto 0); 
153  signal cc_R14_sig            : std_logic_vector (31 downto 0); 
154  signal cc_R15_sig            : std_logic_vector (31 downto 0); 
155 
156begin
157 
158  Inst_microwire_interface:microwire_interface
159    port map (
160        clk                 => clk_50M_sig,         
161        clk_uwire           => clk_uwire_sig, 
162        data_uwire          => DATA_Clk_Cond,
163        le_uwire            => LE_Clk_Cond,       
164        clk_cond_array      => clk_cond_array_sig, 
165        config_start        => start_config,
166       
167   --   config_start        => start_config_sig, 
168   --   config_start        <= start_config_sig,
169       
170        config_ready        => config_ready_sig,
171        config_started      => config_started_sig
172       );
173
174 
175       
176  config_done <= config_ready_sig;  -- indicates that the configuration
177                                    -- has been loaded
178
179
180 
181 --  config_done <= (config_ready_sig AND LD_Clk_Cond);  -- indicates that the configuration
182                                                      -- has been loaded and
183                                                      -- the PLL is locked again
184
185
186 
187  TIM_Sel <= timemarker_select;                                   
188  CLK_Clk_Cond <= clk_uwire_sig;
189
190  clk_50M_sig <= clk;
191 -- start_config_sig <= start_config;
192
193 --  start_config <= start_config_sig;     
194
195
196  config_started <= config_started_sig;
197
198  cc_R0_sig  <= cc_R0;             
199  cc_R1_sig  <= cc_R1;
200 
201  cc_R2_sig  <= cc_R2;             
202  cc_R3_sig  <= cc_R3;
203  cc_R4_sig  <= cc_R4;             
204  cc_R5_sig  <= cc_R5;
205  cc_R6_sig  <= cc_R6;             
206  cc_R7_sig  <= cc_R7; 
207  cc_R8_sig  <= cc_R8;
208 
209  cc_R9_sig  <= cc_R9;     
210  cc_R11_sig <= cc_R11;       
211  cc_R13_sig <= cc_R13;         
212  cc_R14_sig <= cc_R14;           
213  cc_R15_sig <= cc_R15;
214
215  clk_cond_array_sig(0) <= LMK03000_Reset;      -- reset LKM03000 by setting
216                                                -- bit 31 of register 0
217  clk_cond_array_sig(1) <= cc_R0_sig;
218  clk_cond_array_sig(2) <= cc_R1_sig; 
219  clk_cond_array_sig(3) <= cc_R8_sig; 
220  clk_cond_array_sig(4) <= cc_R9_sig; 
221  clk_cond_array_sig(5) <= cc_R11_sig;
222  clk_cond_array_sig(6) <= cc_R13_sig;
223  clk_cond_array_sig(7) <= cc_R14_sig;
224  clk_cond_array_sig(8) <= cc_R15_sig;
225
226
227end Behavioral;
228
229
Note: See TracBrowser for help on using the repository browser.