@@ -44,7 +44,7 USE lpp.iir_filter.ALL; | |||||
44 | USE lpp.general_purpose.ALL; |
|
44 | USE lpp.general_purpose.ALL; | |
45 | USE lpp.CY7C1061DV33_pkg.ALL; |
|
45 | USE lpp.CY7C1061DV33_pkg.ALL; | |
46 |
|
46 | |||
47 | ENTITY testbench IS |
|
47 | ENTITY testbenc h IS | |
48 | END; |
|
48 | END; | |
49 |
|
49 | |||
50 | ARCHITECTURE behav OF testbench IS |
|
50 | ARCHITECTURE behav OF testbench IS |
@@ -115,6 +115,7 END MINI_LFR_top; | |||||
115 | ARCHITECTURE beh OF MINI_LFR_top IS |
|
115 | ARCHITECTURE beh OF MINI_LFR_top IS | |
116 | SIGNAL clk_50_s : STD_LOGIC := '0'; |
|
116 | SIGNAL clk_50_s : STD_LOGIC := '0'; | |
117 | SIGNAL clk_25 : STD_LOGIC := '0'; |
|
117 | SIGNAL clk_25 : STD_LOGIC := '0'; | |
|
118 | SIGNAL clk_24 : STD_LOGIC := '0'; | |||
118 | ----------------------------------------------------------------------------- |
|
119 | ----------------------------------------------------------------------------- | |
119 | SIGNAL coarse_time : STD_LOGIC_VECTOR(31 DOWNTO 0); |
|
120 | SIGNAL coarse_time : STD_LOGIC_VECTOR(31 DOWNTO 0); | |
120 | SIGNAL fine_time : STD_LOGIC_VECTOR(15 DOWNTO 0); |
|
121 | SIGNAL fine_time : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
@@ -169,6 +170,8 ARCHITECTURE beh OF MINI_LFR_top IS | |||||
169 |
|
170 | |||
170 | SIGNAL bias_fail_sw_sig : STD_LOGIC; |
|
171 | SIGNAL bias_fail_sw_sig : STD_LOGIC; | |
171 |
|
172 | |||
|
173 | ----------------------------------------------------------------------------- | |||
|
174 | ||||
172 | BEGIN -- beh |
|
175 | BEGIN -- beh | |
173 |
|
176 | |||
174 | ----------------------------------------------------------------------------- |
|
177 | ----------------------------------------------------------------------------- | |
@@ -189,6 +192,13 BEGIN -- beh | |||||
189 | END IF; |
|
192 | END IF; | |
190 | END PROCESS; |
|
193 | END PROCESS; | |
191 |
|
194 | |||
|
195 | PROCESS(clk_49) | |||
|
196 | BEGIN | |||
|
197 | IF clk_49'EVENT AND clk_49 = '1' THEN | |||
|
198 | clk_24 <= NOT clk_24; | |||
|
199 | END IF; | |||
|
200 | END PROCESS; | |||
|
201 | ||||
192 | ----------------------------------------------------------------------------- |
|
202 | ----------------------------------------------------------------------------- | |
193 |
|
203 | |||
194 | PROCESS (clk_25, reset) |
|
204 | PROCESS (clk_25, reset) | |
@@ -226,11 +236,11 BEGIN -- beh | |||||
226 | END IF; |
|
236 | END IF; | |
227 | END PROCESS; |
|
237 | END PROCESS; | |
228 |
|
238 | |||
229 |
PROCESS (clk_4 |
|
239 | PROCESS (clk_24, reset) | |
230 | BEGIN -- PROCESS |
|
240 | BEGIN -- PROCESS | |
231 | IF reset = '0' THEN -- asynchronous reset (active low) |
|
241 | IF reset = '0' THEN -- asynchronous reset (active low) | |
232 | I00_s <= '0'; |
|
242 | I00_s <= '0'; | |
233 |
ELSIF clk_4 |
|
243 | ELSIF clk_24'EVENT AND clk_24 = '1' THEN -- rising clock edge | |
234 | I00_s <= NOT I00_s; |
|
244 | I00_s <= NOT I00_s; | |
235 | END IF; |
|
245 | END IF; | |
236 | END PROCESS; |
|
246 | END PROCESS; | |
@@ -299,10 +309,11 BEGIN -- beh | |||||
299 | pindex => 6, |
|
309 | pindex => 6, | |
300 | paddr => 6, |
|
310 | paddr => 6, | |
301 | pmask => 16#fff#, |
|
311 | pmask => 16#fff#, | |
302 |
pirq => 12 |
|
312 | pirq => 12, | |
|
313 | nb_wait_pediod => 375) -- (49.152/2) /2^16 = 375 | |||
303 | PORT MAP ( |
|
314 | PORT MAP ( | |
304 | clk25MHz => clk_25, |
|
315 | clk25MHz => clk_25, | |
305 |
clk49_152MHz => clk_4 |
|
316 | clk49_152MHz => clk_24, -- 49.152MHz/2 | |
306 | resetn => reset, |
|
317 | resetn => reset, | |
307 | grspw_tick => swno.tickout, |
|
318 | grspw_tick => swno.tickout, | |
308 | apbi => apbi_ext, |
|
319 | apbi => apbi_ext, | |
@@ -413,7 +424,7 BEGIN -- beh | |||||
413 | pirq_ms => 6, |
|
424 | pirq_ms => 6, | |
414 | pirq_wfp => 14, |
|
425 | pirq_wfp => 14, | |
415 | hindex => 2, |
|
426 | hindex => 2, | |
416 |
top_lfr_version => X"00000 |
|
427 | top_lfr_version => X"00000C") -- aa.bb.cc version | |
417 | PORT MAP ( |
|
428 | PORT MAP ( | |
418 | clk => clk_25, |
|
429 | clk => clk_25, | |
419 | rstn => reset, |
|
430 | rstn => reset, | |
@@ -432,11 +443,11 BEGIN -- beh | |||||
432 | GENERIC MAP( |
|
443 | GENERIC MAP( | |
433 | ChannelCount => 8, |
|
444 | ChannelCount => 8, | |
434 | SampleNbBits => 14, |
|
445 | SampleNbBits => 14, | |
435 |
ncycle_cnv_high => |
|
446 | ncycle_cnv_high => 40, -- at least 32 cycles at 25 MHz, 32 * 49.152 / 25 /2 = 31.5 | |
436 |
ncycle_cnv => 50 |
|
447 | ncycle_cnv => 250) -- 49 152 000 / 98304 /2 | |
437 | PORT MAP ( |
|
448 | PORT MAP ( | |
438 | -- CONV |
|
449 | -- CONV | |
439 |
cnv_clk => clk_4 |
|
450 | cnv_clk => clk_24, | |
440 | cnv_rstn => reset, |
|
451 | cnv_rstn => reset, | |
441 | cnv => ADC_nCS_sig, |
|
452 | cnv => ADC_nCS_sig, | |
442 | -- DATA |
|
453 | -- DATA |
This diff has been collapsed as it changes many lines, (574 lines changed) Show them Hide them | |||||
@@ -1,286 +1,288 | |||||
1 | ---------------------------------------------------------------------------------- |
|
1 | ---------------------------------------------------------------------------------- | |
2 | -- Company: |
|
2 | -- Company: | |
3 | -- Engineer: |
|
3 | -- Engineer: | |
4 | -- |
|
4 | -- | |
5 | -- Create Date: 11:17:05 07/02/2012 |
|
5 | -- Create Date: 11:17:05 07/02/2012 | |
6 | -- Design Name: |
|
6 | -- Design Name: | |
7 | -- Module Name: apb_lfr_time_management - Behavioral |
|
7 | -- Module Name: apb_lfr_time_management - Behavioral | |
8 | -- Project Name: |
|
8 | -- Project Name: | |
9 | -- Target Devices: |
|
9 | -- Target Devices: | |
10 | -- Tool versions: |
|
10 | -- Tool versions: | |
11 | -- Description: |
|
11 | -- Description: | |
12 | -- |
|
12 | -- | |
13 | -- Dependencies: |
|
13 | -- Dependencies: | |
14 | -- |
|
14 | -- | |
15 | -- Revision: |
|
15 | -- Revision: | |
16 | -- Revision 0.01 - File Created |
|
16 | -- Revision 0.01 - File Created | |
17 | -- Additional Comments: |
|
17 | -- Additional Comments: | |
18 | -- |
|
18 | -- | |
19 | ---------------------------------------------------------------------------------- |
|
19 | ---------------------------------------------------------------------------------- | |
20 | LIBRARY IEEE; |
|
20 | LIBRARY IEEE; | |
21 | USE IEEE.STD_LOGIC_1164.ALL; |
|
21 | USE IEEE.STD_LOGIC_1164.ALL; | |
22 | USE IEEE.NUMERIC_STD.ALL; |
|
22 | USE IEEE.NUMERIC_STD.ALL; | |
23 | LIBRARY grlib; |
|
23 | LIBRARY grlib; | |
24 | USE grlib.amba.ALL; |
|
24 | USE grlib.amba.ALL; | |
25 | USE grlib.stdlib.ALL; |
|
25 | USE grlib.stdlib.ALL; | |
26 | USE grlib.devices.ALL; |
|
26 | USE grlib.devices.ALL; | |
27 | LIBRARY lpp; |
|
27 | LIBRARY lpp; | |
28 | USE lpp.apb_devices_list.ALL; |
|
28 | USE lpp.apb_devices_list.ALL; | |
29 | USE lpp.general_purpose.ALL; |
|
29 | USE lpp.general_purpose.ALL; | |
30 | USE lpp.lpp_lfr_time_management.ALL; |
|
30 | USE lpp.lpp_lfr_time_management.ALL; | |
31 |
|
31 | |||
32 | ENTITY apb_lfr_time_management IS |
|
32 | ENTITY apb_lfr_time_management IS | |
33 |
|
33 | |||
34 | GENERIC( |
|
34 | GENERIC( | |
35 | pindex : INTEGER := 0; --! APB slave index |
|
35 | pindex : INTEGER := 0; --! APB slave index | |
36 | paddr : INTEGER := 0; --! ADDR field of the APB BAR |
|
36 | paddr : INTEGER := 0; --! ADDR field of the APB BAR | |
37 | pmask : INTEGER := 16#fff#; --! MASK field of the APB BAR |
|
37 | pmask : INTEGER := 16#fff#; --! MASK field of the APB BAR | |
38 |
pirq : INTEGER := 0 |
|
38 | pirq : INTEGER := 0; --! 2 consecutive IRQ lines are used | |
39 | ); |
|
39 | nb_wait_pediod : INTEGER := 375 | |
40 |
|
40 | ); | ||
41 | PORT ( |
|
41 | ||
42 | clk25MHz : IN STD_LOGIC; --! Clock |
|
42 | PORT ( | |
43 |
clk |
|
43 | clk25MHz : IN STD_LOGIC; --! Clock | |
44 |
|
|
44 | clk49_152MHz : IN STD_LOGIC; --! secondary clock | |
45 |
|
45 | resetn : IN STD_LOGIC; --! Reset | ||
46 | grspw_tick : IN STD_LOGIC; --! grspw signal asserted when a valid time-code is received |
|
46 | ||
47 | apbi : IN apb_slv_in_type; --! APB slave input signals |
|
47 | grspw_tick : IN STD_LOGIC; --! grspw signal asserted when a valid time-code is received | |
48 |
apb |
|
48 | apbi : IN apb_slv_in_type; --! APB slave input signals | |
49 | coarse_time : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); --! coarse time |
|
49 | apbo : OUT apb_slv_out_type; --! APB slave output signals | |
50 |
|
|
50 | coarse_time : OUT STD_LOGIC_VECTOR(31 DOWNTO 0); --! coarse time | |
51 | ); |
|
51 | fine_time : OUT STD_LOGIC_VECTOR(15 DOWNTO 0) --! fine time | |
52 |
|
52 | ); | ||
53 | END apb_lfr_time_management; |
|
53 | ||
54 |
|
54 | END apb_lfr_time_management; | ||
55 | ARCHITECTURE Behavioral OF apb_lfr_time_management IS |
|
55 | ||
56 |
|
56 | ARCHITECTURE Behavioral OF apb_lfr_time_management IS | ||
57 | CONSTANT REVISION : INTEGER := 1; |
|
57 | ||
58 | CONSTANT pconfig : apb_config_type := ( |
|
58 | CONSTANT REVISION : INTEGER := 1; | |
59 | 0 => ahb_device_reg (VENDOR_LPP, 14, 0, REVISION, pirq), |
|
59 | CONSTANT pconfig : apb_config_type := ( | |
60 | 1 => apb_iobar(paddr, pmask) |
|
60 | 0 => ahb_device_reg (VENDOR_LPP, 14, 0, REVISION, pirq), | |
61 | ); |
|
61 | 1 => apb_iobar(paddr, pmask) | |
62 |
|
62 | ); | ||
63 | TYPE apb_lfr_time_management_Reg IS RECORD |
|
63 | ||
64 | ctrl : STD_LOGIC_VECTOR(31 DOWNTO 0); |
|
64 | TYPE apb_lfr_time_management_Reg IS RECORD | |
65 |
c |
|
65 | ctrl : STD_LOGIC_VECTOR(31 DOWNTO 0); | |
66 |
coarse_time |
|
66 | coarse_time_load : STD_LOGIC_VECTOR(31 DOWNTO 0); | |
67 |
|
|
67 | coarse_time : STD_LOGIC_VECTOR(31 DOWNTO 0); | |
68 | END RECORD; |
|
68 | fine_time : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
69 |
|
69 | END RECORD; | ||
70 | SIGNAL r : apb_lfr_time_management_Reg; |
|
70 | ||
71 | SIGNAL Rdata : STD_LOGIC_VECTOR(31 DOWNTO 0); |
|
71 | SIGNAL r : apb_lfr_time_management_Reg; | |
72 |
SIGNAL |
|
72 | SIGNAL Rdata : STD_LOGIC_VECTOR(31 DOWNTO 0); | |
73 |
SIGNAL |
|
73 | SIGNAL force_tick : STD_LOGIC; | |
74 |
SIGNAL |
|
74 | SIGNAL previous_force_tick : STD_LOGIC; | |
75 |
|
75 | SIGNAL soft_tick : STD_LOGIC; | ||
76 | SIGNAL irq1 : STD_LOGIC; |
|
76 | ||
77 |
SIGNAL irq |
|
77 | SIGNAL irq1 : STD_LOGIC; | |
78 |
|
78 | SIGNAL irq2 : STD_LOGIC; | ||
79 | SIGNAL coarsetime_reg_updated : STD_LOGIC; |
|
79 | ||
80 |
SIGNAL coarsetime_reg |
|
80 | SIGNAL coarsetime_reg_updated : STD_LOGIC; | |
81 |
|
81 | SIGNAL coarsetime_reg : STD_LOGIC_VECTOR(31 DOWNTO 0); | ||
82 | SIGNAL coarse_time_new : STD_LOGIC; |
|
82 | ||
83 |
SIGNAL coarse_time_new |
|
83 | SIGNAL coarse_time_new : STD_LOGIC; | |
84 |
SIGNAL coarse_time_49 |
|
84 | SIGNAL coarse_time_new_49 : STD_LOGIC; | |
85 |
SIGNAL coarse_time_ |
|
85 | SIGNAL coarse_time_49 : STD_LOGIC_VECTOR(31 DOWNTO 0); | |
86 |
|
86 | SIGNAL coarse_time_s : STD_LOGIC_VECTOR(31 DOWNTO 0); | ||
87 | SIGNAL fine_time_new : STD_LOGIC; |
|
87 | ||
88 |
|
|
88 | SIGNAL fine_time_new : STD_LOGIC; | |
89 |
SIGNAL fine_time_new_ |
|
89 | SIGNAL fine_time_new_temp : STD_LOGIC; | |
90 |
SIGNAL fine_time_49 |
|
90 | SIGNAL fine_time_new_49 : STD_LOGIC; | |
91 |
SIGNAL fine_time_ |
|
91 | SIGNAL fine_time_49 : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
92 | SIGNAL tick : STD_LOGIC; |
|
92 | SIGNAL fine_time_s : STD_LOGIC_VECTOR(15 DOWNTO 0); | |
93 |
SIGNAL |
|
93 | SIGNAL tick : STD_LOGIC; | |
94 |
SIGNAL new_ |
|
94 | SIGNAL new_timecode : STD_LOGIC; | |
95 |
|
95 | SIGNAL new_coarsetime : STD_LOGIC; | ||
96 | BEGIN |
|
96 | ||
97 | ----------------------------------------------------------------------------- |
|
97 | BEGIN | |
98 | -- TODO |
|
98 | ----------------------------------------------------------------------------- | |
99 | -- IRQ 1 & 2 |
|
99 | -- TODO | |
100 | ----------------------------------------------------------------------------- |
|
100 | -- IRQ 1 & 2 | |
101 | irq2 <= '0'; |
|
101 | ----------------------------------------------------------------------------- | |
102 |
irq |
|
102 | irq2 <= '0'; | |
103 |
|
103 | irq1 <= '0'; | ||
104 |
|
104 | |||
105 | --all_irq_gen : FOR I IN 15 DOWNTO 0 GENERATE |
|
105 | ||
106 |
|
|
106 | --all_irq_gen : FOR I IN 15 DOWNTO 0 GENERATE | |
107 | apbo.pirq(pirq) <= irq1; |
|
107 | --irq1_gen : IF I = pirq GENERATE | |
108 | --END GENERATE irq1_gen; |
|
108 | apbo.pirq(pirq) <= irq1; | |
109 | --irq2_gen : IF I = pirq+1 GENERATE |
|
109 | --END GENERATE irq1_gen; | |
110 | apbo.pirq(pirq+1) <= irq2; |
|
110 | --irq2_gen : IF I = pirq+1 GENERATE | |
111 | -- END GENERATE irq2_gen; |
|
111 | apbo.pirq(pirq+1) <= irq2; | |
112 | -- others_irq : IF (I < pirq) OR (I > (pirq + 1)) GENERATE |
|
112 | -- END GENERATE irq2_gen; | |
113 | -- apbo.pirq(I) <= '0'; |
|
113 | -- others_irq : IF (I < pirq) OR (I > (pirq + 1)) GENERATE | |
114 | -- END GENERATE others_irq; |
|
114 | -- apbo.pirq(I) <= '0'; | |
115 |
--END GENERATE |
|
115 | -- END GENERATE others_irq; | |
116 |
|
116 | --END GENERATE all_irq_gen; | ||
117 | PROCESS(resetn, clk25MHz) |
|
117 | ||
118 | BEGIN |
|
118 | PROCESS(resetn, clk25MHz) | |
119 |
|
119 | BEGIN | ||
120 | IF resetn = '0' THEN |
|
120 | ||
121 | Rdata <= (OTHERS => '0'); |
|
121 | IF resetn = '0' THEN | |
122 | r.coarse_time_load <= x"80000000"; |
|
122 | Rdata <= (OTHERS => '0'); | |
123 |
r.c |
|
123 | r.coarse_time_load <= x"80000000"; | |
124 |
|
|
124 | r.ctrl <= x"00000000"; | |
125 |
|
|
125 | force_tick <= '0'; | |
126 |
|
|
126 | previous_force_tick <= '0'; | |
127 |
|
127 | soft_tick <= '0'; | ||
128 | coarsetime_reg_updated <= '0'; |
|
128 | ||
129 |
|
129 | coarsetime_reg_updated <= '0'; | ||
130 | ELSIF clk25MHz'EVENT AND clk25MHz = '1' THEN |
|
130 | ||
131 | coarsetime_reg_updated <= '0'; |
|
131 | ELSIF clk25MHz'EVENT AND clk25MHz = '1' THEN | |
132 |
|
132 | coarsetime_reg_updated <= '0'; | ||
133 | force_tick <= r.ctrl(0); |
|
133 | ||
134 |
|
|
134 | force_tick <= r.ctrl(0); | |
135 |
|
|
135 | previous_force_tick <= force_tick; | |
136 | soft_tick <= '1'; |
|
136 | IF (previous_force_tick = '0') AND (force_tick = '1') THEN | |
137 | ELSE |
|
137 | soft_tick <= '1'; | |
138 | soft_tick <= '0'; |
|
138 | ELSE | |
139 | END IF; |
|
139 | soft_tick <= '0'; | |
140 |
|
140 | END IF; | ||
141 | --APB Write OP |
|
141 | ||
142 | IF (apbi.psel(pindex) AND apbi.penable AND apbi.pwrite) = '1' THEN |
|
142 | --APB Write OP | |
143 | CASE apbi.paddr(7 DOWNTO 2) IS |
|
143 | IF (apbi.psel(pindex) AND apbi.penable AND apbi.pwrite) = '1' THEN | |
144 | WHEN "000000" => |
|
144 | CASE apbi.paddr(7 DOWNTO 2) IS | |
145 | r.ctrl <= apbi.pwdata(31 DOWNTO 0); |
|
145 | WHEN "000000" => | |
146 | WHEN "000001" => |
|
146 | r.ctrl <= apbi.pwdata(31 DOWNTO 0); | |
147 | r.coarse_time_load <= apbi.pwdata(31 DOWNTO 0); |
|
147 | WHEN "000001" => | |
148 |
coarse |
|
148 | r.coarse_time_load <= apbi.pwdata(31 DOWNTO 0); | |
149 | WHEN OTHERS => |
|
149 | coarsetime_reg_updated <= '1'; | |
150 | END CASE; |
|
150 | WHEN OTHERS => | |
151 | ELSIF r.ctrl(0) = '1' THEN |
|
151 | END CASE; | |
152 |
|
|
152 | ELSIF r.ctrl(0) = '1' THEN | |
153 | END IF; |
|
153 | r.ctrl(0) <= '0'; | |
154 |
|
154 | END IF; | ||
155 | --APB READ OP |
|
155 | ||
156 | IF (apbi.psel(pindex) AND (NOT apbi.pwrite)) = '1' THEN |
|
156 | --APB READ OP | |
157 | CASE apbi.paddr(7 DOWNTO 2) IS |
|
157 | IF (apbi.psel(pindex) AND (NOT apbi.pwrite)) = '1' THEN | |
158 | WHEN "000000" => |
|
158 | CASE apbi.paddr(7 DOWNTO 2) IS | |
159 | Rdata(31 DOWNTO 0) <= r.ctrl(31 DOWNTO 0); |
|
159 | WHEN "000000" => | |
160 | WHEN "000001" => |
|
160 | Rdata(31 DOWNTO 0) <= r.ctrl(31 DOWNTO 0); | |
161 | Rdata(31 DOWNTO 0) <= r.coarse_time_load(31 DOWNTO 0); |
|
161 | WHEN "000001" => | |
162 | WHEN "000010" => |
|
162 | Rdata(31 DOWNTO 0) <= r.coarse_time_load(31 DOWNTO 0); | |
163 | Rdata(31 DOWNTO 0) <= r.coarse_time(31 DOWNTO 0); |
|
163 | WHEN "000010" => | |
164 | WHEN "000011" => |
|
164 | Rdata(31 DOWNTO 0) <= r.coarse_time(31 DOWNTO 0); | |
165 | Rdata(31 DOWNTO 16) <= (OTHERS => '0'); |
|
165 | WHEN "000011" => | |
166 |
Rdata(1 |
|
166 | Rdata(31 DOWNTO 16) <= (OTHERS => '0'); | |
167 | WHEN OTHERS => |
|
167 | Rdata(15 DOWNTO 0) <= r.fine_time(15 DOWNTO 0); | |
168 | Rdata(31 DOWNTO 0) <= x"00000000"; |
|
168 | WHEN OTHERS => | |
169 | END CASE; |
|
169 | Rdata(31 DOWNTO 0) <= x"00000000"; | |
170 |
END |
|
170 | END CASE; | |
171 |
|
171 | END IF; | ||
172 | END IF; |
|
172 | ||
173 | END PROCESS; |
|
173 | END IF; | |
174 |
|
174 | END PROCESS; | ||
175 | apbo.prdata <= Rdata; |
|
175 | ||
176 | apbo.pconfig <= pconfig; |
|
176 | apbo.prdata <= Rdata; | |
177 |
|
|
177 | apbo.pconfig <= pconfig; | |
178 |
|
178 | apbo.pindex <= pindex; | ||
179 | coarse_time <= r.coarse_time; |
|
179 | ||
180 |
|
|
180 | coarse_time <= r.coarse_time; | |
181 | ----------------------------------------------------------------------------- |
|
181 | fine_time <= r.fine_time; | |
182 |
|
182 | ----------------------------------------------------------------------------- | ||
183 | coarsetime_reg <= r.coarse_time_load; |
|
183 | ||
184 | r.coarse_time <= coarse_time_s; |
|
184 | coarsetime_reg <= r.coarse_time_load; | |
185 |
r. |
|
185 | r.coarse_time <= coarse_time_s; | |
186 | ----------------------------------------------------------------------------- |
|
186 | r.fine_time <= fine_time_s; | |
187 | -- IN coarsetime_reg_updated |
|
187 | ----------------------------------------------------------------------------- | |
188 | -- IN coarsetime_reg |
|
188 | -- IN coarsetime_reg_updated | |
189 |
|
189 | -- IN coarsetime_reg | ||
190 | -- OUT coarse_time_s -- ok |
|
190 | ||
191 |
-- OUT |
|
191 | -- OUT coarse_time_s -- ok | |
192 | ----------------------------------------------------------------------------- |
|
192 | -- OUT fine_time_s -- ok | |
193 |
|
193 | ----------------------------------------------------------------------------- | ||
194 | tick <= grspw_tick OR soft_tick; |
|
194 | ||
195 |
|
195 | tick <= grspw_tick OR soft_tick; | ||
196 | SYNC_VALID_BIT_1 : SYNC_VALID_BIT |
|
196 | ||
197 | GENERIC MAP ( |
|
197 | SYNC_VALID_BIT_1 : SYNC_VALID_BIT | |
198 | NB_FF_OF_SYNC => 2) |
|
198 | GENERIC MAP ( | |
199 | PORT MAP ( |
|
199 | NB_FF_OF_SYNC => 2) | |
200 | clk_in => clk25MHz, |
|
200 | PORT MAP ( | |
201 |
clk_ |
|
201 | clk_in => clk25MHz, | |
202 | rstn => resetn, |
|
202 | clk_out => clk49_152MHz, | |
203 |
|
|
203 | rstn => resetn, | |
204 |
s |
|
204 | sin => tick, | |
205 |
|
205 | sout => new_timecode); | ||
206 | SYNC_VALID_BIT_2 : SYNC_VALID_BIT |
|
206 | ||
207 | GENERIC MAP ( |
|
207 | SYNC_VALID_BIT_2 : SYNC_VALID_BIT | |
208 | NB_FF_OF_SYNC => 2) |
|
208 | GENERIC MAP ( | |
209 | PORT MAP ( |
|
209 | NB_FF_OF_SYNC => 2) | |
210 | clk_in => clk25MHz, |
|
210 | PORT MAP ( | |
211 |
clk_ |
|
211 | clk_in => clk25MHz, | |
212 | rstn => resetn, |
|
212 | clk_out => clk49_152MHz, | |
213 |
|
|
213 | rstn => resetn, | |
214 |
s |
|
214 | sin => coarsetime_reg_updated, | |
215 |
|
215 | sout => new_coarsetime); | ||
216 | --SYNC_VALID_BIT_3 : SYNC_VALID_BIT |
|
216 | ||
217 | -- GENERIC MAP ( |
|
217 | --SYNC_VALID_BIT_3 : SYNC_VALID_BIT | |
218 | -- NB_FF_OF_SYNC => 2) |
|
218 | -- GENERIC MAP ( | |
219 | -- PORT MAP ( |
|
219 | -- NB_FF_OF_SYNC => 2) | |
220 | -- clk_in => clk49_152MHz, |
|
220 | -- PORT MAP ( | |
221 |
-- clk_ |
|
221 | -- clk_in => clk49_152MHz, | |
222 | -- rstn => resetn, |
|
222 | -- clk_out => clk25MHz, | |
223 |
-- |
|
223 | -- rstn => resetn, | |
224 |
-- s |
|
224 | -- sin => 9, | |
225 |
|
225 | -- sout => ); | ||
226 | SYNC_FF_1: SYNC_FF |
|
226 | ||
227 | GENERIC MAP ( |
|
227 | SYNC_FF_1: SYNC_FF | |
228 | NB_FF_OF_SYNC => 2) |
|
228 | GENERIC MAP ( | |
229 | PORT MAP ( |
|
229 | NB_FF_OF_SYNC => 2) | |
230 | clk => clk25MHz, |
|
230 | PORT MAP ( | |
231 | rstn => resetn, |
|
231 | clk => clk25MHz, | |
232 | A => fine_time_new_49, |
|
232 | rstn => resetn, | |
233 |
A |
|
233 | A => fine_time_new_49, | |
234 |
|
234 | A_sync => fine_time_new_temp); | ||
235 | lpp_front_detection_1: lpp_front_detection |
|
235 | ||
236 | PORT MAP ( |
|
236 | lpp_front_detection_1: lpp_front_detection | |
237 | clk => clk25MHz, |
|
237 | PORT MAP ( | |
238 | rstn => resetn, |
|
238 | clk => clk25MHz, | |
239 | sin => fine_time_new_temp, |
|
239 | rstn => resetn, | |
240 |
s |
|
240 | sin => fine_time_new_temp, | |
241 |
|
241 | sout => fine_time_new); | ||
242 | SYNC_VALID_BIT_4 : SYNC_VALID_BIT |
|
242 | ||
243 | GENERIC MAP ( |
|
243 | SYNC_VALID_BIT_4 : SYNC_VALID_BIT | |
244 | NB_FF_OF_SYNC => 2) |
|
244 | GENERIC MAP ( | |
245 | PORT MAP ( |
|
245 | NB_FF_OF_SYNC => 2) | |
246 | clk_in => clk49_152MHz, |
|
246 | PORT MAP ( | |
247 |
clk_ |
|
247 | clk_in => clk49_152MHz, | |
248 | rstn => resetn, |
|
248 | clk_out => clk25MHz, | |
249 |
|
|
249 | rstn => resetn, | |
250 |
s |
|
250 | sin => coarse_time_new_49, | |
251 |
|
251 | sout => coarse_time_new); | ||
252 | PROCESS (clk25MHz, resetn) |
|
252 | ||
253 | BEGIN -- PROCESS |
|
253 | PROCESS (clk25MHz, resetn) | |
254 | IF resetn = '0' THEN -- asynchronous reset (active low) |
|
254 | BEGIN -- PROCESS | |
255 | fine_time_s <= (OTHERS => '0'); |
|
255 | IF resetn = '0' THEN -- asynchronous reset (active low) | |
256 |
|
|
256 | fine_time_s <= (OTHERS => '0'); | |
257 | ELSIF clk25MHz'EVENT AND clk25MHz = '1' THEN -- rising clock edge |
|
257 | coarse_time_s <= (OTHERS => '0'); | |
258 | IF fine_time_new = '1' THEN |
|
258 | ELSIF clk25MHz'EVENT AND clk25MHz = '1' THEN -- rising clock edge | |
259 | fine_time_s <= fine_time_49; |
|
259 | IF fine_time_new = '1' THEN | |
260 | END IF; |
|
260 | fine_time_s <= fine_time_49; | |
261 | IF coarse_time_new = '1' THEN |
|
261 | END IF; | |
262 | coarse_time_s <= coarse_time_49; |
|
262 | IF coarse_time_new = '1' THEN | |
263 | END IF; |
|
263 | coarse_time_s <= coarse_time_49; | |
264 | END IF; |
|
264 | END IF; | |
265 | END PROCESS; |
|
265 | END IF; | |
266 |
|
266 | END PROCESS; | ||
267 | ----------------------------------------------------------------------------- |
|
267 | ||
268 | -- LFR_TIME_MANAGMENT |
|
268 | ----------------------------------------------------------------------------- | |
269 | ----------------------------------------------------------------------------- |
|
269 | -- LFR_TIME_MANAGMENT | |
270 | lfr_time_management_1 : lfr_time_management |
|
270 | ----------------------------------------------------------------------------- | |
271 | GENERIC MAP ( |
|
271 | lfr_time_management_1 : lfr_time_management | |
272 | nb_time_code_missing_limit => 60) |
|
272 | GENERIC MAP ( | |
273 | PORT MAP ( |
|
273 | nb_time_code_missing_limit => 60, | |
274 | clk => clk49_152MHz, |
|
274 | nb_wait_pediod => 375) | |
275 | rstn => resetn, |
|
275 | PORT MAP ( | |
276 |
|
276 | clk => clk49_152MHz, | ||
277 | new_timecode => new_timecode, |
|
277 | rstn => resetn, | |
278 | new_coarsetime => new_coarsetime, |
|
278 | ||
279 |
|
|
279 | new_timecode => new_timecode, | |
280 |
|
280 | new_coarsetime => new_coarsetime, | ||
281 | fine_time => fine_time_49, |
|
281 | coarsetime_reg => coarsetime_reg, | |
282 | fine_time_new => fine_time_new_49, |
|
282 | ||
283 |
|
|
283 | fine_time => fine_time_49, | |
284 |
|
|
284 | fine_time_new => fine_time_new_49, | |
285 |
|
285 | coarse_time => coarse_time_49, | ||
286 | END Behavioral; |
|
286 | coarse_time_new => coarse_time_new_49); | |
|
287 | ||||
|
288 | END Behavioral; No newline at end of file |
@@ -25,7 +25,8 USE lpp.lpp_lfr_time_management.ALL; | |||||
25 |
|
25 | |||
26 | ENTITY lfr_time_management IS |
|
26 | ENTITY lfr_time_management IS | |
27 | GENERIC ( |
|
27 | GENERIC ( | |
28 | nb_time_code_missing_limit : INTEGER := 60 |
|
28 | nb_time_code_missing_limit : INTEGER := 60; | |
|
29 | nb_wait_pediod : INTEGER := 375 | |||
29 | ); |
|
30 | ); | |
30 | PORT ( |
|
31 | PORT ( | |
31 | clk : IN STD_LOGIC; |
|
32 | clk : IN STD_LOGIC; |
@@ -34,7 +34,8 PACKAGE lpp_lfr_time_management IS | |||||
34 | pindex : INTEGER := 0; --! APB slave index |
|
34 | pindex : INTEGER := 0; --! APB slave index | |
35 | paddr : INTEGER := 0; --! ADDR field of the APB BAR |
|
35 | paddr : INTEGER := 0; --! ADDR field of the APB BAR | |
36 | pmask : INTEGER := 16#fff#; --! MASK field of the APB BAR |
|
36 | pmask : INTEGER := 16#fff#; --! MASK field of the APB BAR | |
37 | pirq : INTEGER := 0 |
|
37 | pirq : INTEGER := 0; | |
|
38 | nb_wait_pediod : INTEGER := 375 | |||
38 | ); |
|
39 | ); | |
39 | PORT ( |
|
40 | PORT ( | |
40 | clk25MHz : IN STD_LOGIC; --! Clock |
|
41 | clk25MHz : IN STD_LOGIC; --! Clock | |
@@ -50,7 +51,8 PACKAGE lpp_lfr_time_management IS | |||||
50 |
|
51 | |||
51 | COMPONENT lfr_time_management |
|
52 | COMPONENT lfr_time_management | |
52 | GENERIC ( |
|
53 | GENERIC ( | |
53 |
nb_time_code_missing_limit : INTEGER |
|
54 | nb_time_code_missing_limit : INTEGER; | |
|
55 | nb_wait_pediod : INTEGER := 375); | |||
54 | PORT ( |
|
56 | PORT ( | |
55 | clk : IN STD_LOGIC; |
|
57 | clk : IN STD_LOGIC; | |
56 | rstn : IN STD_LOGIC; |
|
58 | rstn : IN STD_LOGIC; |
General Comments 0
You need to be logged in to leave comments.
Login now