Merge branch 'master' into firrtl_err_on_unsupported_cell
[yosys.git] / techlibs / intel / common / altpll_bb.v
1 /*
2 * yosys -- Yosys Open SYnthesis Suite
3 *
4 * Copyright (C) 2012 Clifford Wolf <clifford@clifford.at>
5 *
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 *
18 */
19 /* No clearbox model */
20 `ifdef NO_CLEARBOX
21 (* blackbox *)
22 module altpll
23 ( inclk,
24 fbin,
25 pllena,
26 clkswitch,
27 areset,
28 pfdena,
29 clkena,
30 extclkena,
31 scanclk,
32 scanaclr,
33 scanclkena,
34 scanread,
35 scanwrite,
36 scandata,
37 phasecounterselect,
38 phaseupdown,
39 phasestep,
40 configupdate,
41 fbmimicbidir,
42 clk,
43 extclk,
44 clkbad,
45 enable0,
46 enable1,
47 activeclock,
48 clkloss,
49 locked,
50 scandataout,
51 scandone,
52 sclkout0,
53 sclkout1,
54 phasedone,
55 vcooverrange,
56 vcounderrange,
57 fbout,
58 fref,
59 icdrclk,
60 c0,
61 c1,
62 c2,
63 c3,
64 c4);
65
66 parameter intended_device_family = "MAX 10";
67 parameter operation_mode = "NORMAL";
68 parameter pll_type = "AUTO";
69 parameter qualify_conf_done = "OFF";
70 parameter compensate_clock = "CLK0";
71 parameter scan_chain = "LONG";
72 parameter primary_clock = "inclk0";
73 parameter inclk0_input_frequency = 1000;
74 parameter inclk1_input_frequency = 0;
75 parameter gate_lock_signal = "NO";
76 parameter gate_lock_counter = 0;
77 parameter lock_high = 1;
78 parameter lock_low = 0;
79 parameter valid_lock_multiplier = 1;
80 parameter invalid_lock_multiplier = 5;
81 parameter switch_over_type = "AUTO";
82 parameter switch_over_on_lossclk = "OFF" ;
83 parameter switch_over_on_gated_lock = "OFF" ;
84 parameter enable_switch_over_counter = "OFF";
85 parameter switch_over_counter = 0;
86 parameter feedback_source = "EXTCLK0" ;
87 parameter bandwidth = 0;
88 parameter bandwidth_type = "UNUSED";
89 parameter lpm_hint = "UNUSED";
90 parameter spread_frequency = 0;
91 parameter down_spread = "0.0";
92 parameter self_reset_on_gated_loss_lock = "OFF";
93 parameter self_reset_on_loss_lock = "OFF";
94 parameter lock_window_ui = "0.05";
95 parameter width_clock = 6;
96 parameter width_phasecounterselect = 4;
97 parameter charge_pump_current_bits = 9999;
98 parameter loop_filter_c_bits = 9999;
99 parameter loop_filter_r_bits = 9999;
100 parameter scan_chain_mif_file = "UNUSED";
101 parameter clk9_multiply_by = 1;
102 parameter clk8_multiply_by = 1;
103 parameter clk7_multiply_by = 1;
104 parameter clk6_multiply_by = 1;
105 parameter clk5_multiply_by = 1;
106 parameter clk4_multiply_by = 1;
107 parameter clk3_multiply_by = 1;
108 parameter clk2_multiply_by = 1;
109 parameter clk1_multiply_by = 1;
110 parameter clk0_multiply_by = 1;
111 parameter clk9_divide_by = 1;
112 parameter clk8_divide_by = 1;
113 parameter clk7_divide_by = 1;
114 parameter clk6_divide_by = 1;
115 parameter clk5_divide_by = 1;
116 parameter clk4_divide_by = 1;
117 parameter clk3_divide_by = 1;
118 parameter clk2_divide_by = 1;
119 parameter clk1_divide_by = 1;
120 parameter clk0_divide_by = 1;
121 parameter clk9_phase_shift = "0";
122 parameter clk8_phase_shift = "0";
123 parameter clk7_phase_shift = "0";
124 parameter clk6_phase_shift = "0";
125 parameter clk5_phase_shift = "0";
126 parameter clk4_phase_shift = "0";
127 parameter clk3_phase_shift = "0";
128 parameter clk2_phase_shift = "0";
129 parameter clk1_phase_shift = "0";
130 parameter clk0_phase_shift = "0";
131
132 parameter clk9_duty_cycle = 50;
133 parameter clk8_duty_cycle = 50;
134 parameter clk7_duty_cycle = 50;
135 parameter clk6_duty_cycle = 50;
136 parameter clk5_duty_cycle = 50;
137 parameter clk4_duty_cycle = 50;
138 parameter clk3_duty_cycle = 50;
139 parameter clk2_duty_cycle = 50;
140 parameter clk1_duty_cycle = 50;
141 parameter clk0_duty_cycle = 50;
142
143 parameter clk9_use_even_counter_mode = "OFF";
144 parameter clk8_use_even_counter_mode = "OFF";
145 parameter clk7_use_even_counter_mode = "OFF";
146 parameter clk6_use_even_counter_mode = "OFF";
147 parameter clk5_use_even_counter_mode = "OFF";
148 parameter clk4_use_even_counter_mode = "OFF";
149 parameter clk3_use_even_counter_mode = "OFF";
150 parameter clk2_use_even_counter_mode = "OFF";
151 parameter clk1_use_even_counter_mode = "OFF";
152 parameter clk0_use_even_counter_mode = "OFF";
153 parameter clk9_use_even_counter_value = "OFF";
154 parameter clk8_use_even_counter_value = "OFF";
155 parameter clk7_use_even_counter_value = "OFF";
156 parameter clk6_use_even_counter_value = "OFF";
157 parameter clk5_use_even_counter_value = "OFF";
158 parameter clk4_use_even_counter_value = "OFF";
159 parameter clk3_use_even_counter_value = "OFF";
160 parameter clk2_use_even_counter_value = "OFF";
161 parameter clk1_use_even_counter_value = "OFF";
162 parameter clk0_use_even_counter_value = "OFF";
163
164 parameter clk2_output_frequency = 0;
165 parameter clk1_output_frequency = 0;
166 parameter clk0_output_frequency = 0;
167
168 parameter vco_min = 0;
169 parameter vco_max = 0;
170 parameter vco_center = 0;
171 parameter pfd_min = 0;
172 parameter pfd_max = 0;
173 parameter m_initial = 1;
174 parameter m = 0;
175 parameter n = 1;
176 parameter m2 = 1;
177 parameter n2 = 1;
178 parameter ss = 0;
179 parameter l0_high = 1;
180 parameter l1_high = 1;
181 parameter g0_high = 1;
182 parameter g1_high = 1;
183 parameter g2_high = 1;
184 parameter g3_high = 1;
185 parameter e0_high = 1;
186 parameter e1_high = 1;
187 parameter e2_high = 1;
188 parameter e3_high = 1;
189 parameter l0_low = 1;
190 parameter l1_low = 1;
191 parameter g0_low = 1;
192 parameter g1_low = 1;
193 parameter g2_low = 1;
194 parameter g3_low = 1;
195 parameter e0_low = 1;
196 parameter e1_low = 1;
197 parameter e2_low = 1;
198 parameter e3_low = 1;
199 parameter l0_initial = 1;
200 parameter l1_initial = 1;
201 parameter g0_initial = 1;
202 parameter g1_initial = 1;
203 parameter g2_initial = 1;
204 parameter g3_initial = 1;
205 parameter e0_initial = 1;
206 parameter e1_initial = 1;
207 parameter e2_initial = 1;
208 parameter e3_initial = 1;
209 parameter l0_mode = "bypass";
210 parameter l1_mode = "bypass";
211 parameter g0_mode = "bypass";
212 parameter g1_mode = "bypass";
213 parameter g2_mode = "bypass";
214 parameter g3_mode = "bypass";
215 parameter e0_mode = "bypass";
216 parameter e1_mode = "bypass";
217 parameter e2_mode = "bypass";
218 parameter e3_mode = "bypass";
219 parameter l0_ph = 0;
220 parameter l1_ph = 0;
221 parameter g0_ph = 0;
222 parameter g1_ph = 0;
223 parameter g2_ph = 0;
224 parameter g3_ph = 0;
225 parameter e0_ph = 0;
226 parameter e1_ph = 0;
227 parameter e2_ph = 0;
228 parameter e3_ph = 0;
229 parameter m_ph = 0;
230 parameter l0_time_delay = 0;
231 parameter l1_time_delay = 0;
232 parameter g0_time_delay = 0;
233 parameter g1_time_delay = 0;
234 parameter g2_time_delay = 0;
235 parameter g3_time_delay = 0;
236 parameter e0_time_delay = 0;
237 parameter e1_time_delay = 0;
238 parameter e2_time_delay = 0;
239 parameter e3_time_delay = 0;
240 parameter m_time_delay = 0;
241 parameter n_time_delay = 0;
242 parameter extclk3_counter = "e3" ;
243 parameter extclk2_counter = "e2" ;
244 parameter extclk1_counter = "e1" ;
245 parameter extclk0_counter = "e0" ;
246 parameter clk9_counter = "c9" ;
247 parameter clk8_counter = "c8" ;
248 parameter clk7_counter = "c7" ;
249 parameter clk6_counter = "c6" ;
250 parameter clk5_counter = "l1" ;
251 parameter clk4_counter = "l0" ;
252 parameter clk3_counter = "g3" ;
253 parameter clk2_counter = "g2" ;
254 parameter clk1_counter = "g1" ;
255 parameter clk0_counter = "g0" ;
256 parameter enable0_counter = "l0";
257 parameter enable1_counter = "l0";
258 parameter charge_pump_current = 2;
259 parameter loop_filter_r = "1.0";
260 parameter loop_filter_c = 5;
261 parameter vco_post_scale = 0;
262 parameter vco_frequency_control = "AUTO";
263 parameter vco_phase_shift_step = 0;
264 parameter lpm_type = "altpll";
265
266 parameter port_clkena0 = "PORT_CONNECTIVITY";
267 parameter port_clkena1 = "PORT_CONNECTIVITY";
268 parameter port_clkena2 = "PORT_CONNECTIVITY";
269 parameter port_clkena3 = "PORT_CONNECTIVITY";
270 parameter port_clkena4 = "PORT_CONNECTIVITY";
271 parameter port_clkena5 = "PORT_CONNECTIVITY";
272 parameter port_extclkena0 = "PORT_CONNECTIVITY";
273 parameter port_extclkena1 = "PORT_CONNECTIVITY";
274 parameter port_extclkena2 = "PORT_CONNECTIVITY";
275 parameter port_extclkena3 = "PORT_CONNECTIVITY";
276 parameter port_extclk0 = "PORT_CONNECTIVITY";
277 parameter port_extclk1 = "PORT_CONNECTIVITY";
278 parameter port_extclk2 = "PORT_CONNECTIVITY";
279 parameter port_extclk3 = "PORT_CONNECTIVITY";
280 parameter port_clk0 = "PORT_CONNECTIVITY";
281 parameter port_clk1 = "PORT_CONNECTIVITY";
282 parameter port_clk2 = "PORT_CONNECTIVITY";
283 parameter port_clk3 = "PORT_CONNECTIVITY";
284 parameter port_clk4 = "PORT_CONNECTIVITY";
285 parameter port_clk5 = "PORT_CONNECTIVITY";
286 parameter port_clk6 = "PORT_CONNECTIVITY";
287 parameter port_clk7 = "PORT_CONNECTIVITY";
288 parameter port_clk8 = "PORT_CONNECTIVITY";
289 parameter port_clk9 = "PORT_CONNECTIVITY";
290 parameter port_scandata = "PORT_CONNECTIVITY";
291 parameter port_scandataout = "PORT_CONNECTIVITY";
292 parameter port_scandone = "PORT_CONNECTIVITY";
293 parameter port_sclkout1 = "PORT_CONNECTIVITY";
294 parameter port_sclkout0 = "PORT_CONNECTIVITY";
295 parameter port_clkbad0 = "PORT_CONNECTIVITY";
296 parameter port_clkbad1 = "PORT_CONNECTIVITY";
297 parameter port_activeclock = "PORT_CONNECTIVITY";
298 parameter port_clkloss = "PORT_CONNECTIVITY";
299 parameter port_inclk1 = "PORT_CONNECTIVITY";
300 parameter port_inclk0 = "PORT_CONNECTIVITY";
301 parameter port_fbin = "PORT_CONNECTIVITY";
302 parameter port_fbout = "PORT_CONNECTIVITY";
303 parameter port_pllena = "PORT_CONNECTIVITY";
304 parameter port_clkswitch = "PORT_CONNECTIVITY";
305 parameter port_areset = "PORT_CONNECTIVITY";
306 parameter port_pfdena = "PORT_CONNECTIVITY";
307 parameter port_scanclk = "PORT_CONNECTIVITY";
308 parameter port_scanaclr = "PORT_CONNECTIVITY";
309 parameter port_scanread = "PORT_CONNECTIVITY";
310 parameter port_scanwrite = "PORT_CONNECTIVITY";
311 parameter port_enable0 = "PORT_CONNECTIVITY";
312 parameter port_enable1 = "PORT_CONNECTIVITY";
313 parameter port_locked = "PORT_CONNECTIVITY";
314 parameter port_configupdate = "PORT_CONNECTIVITY";
315 parameter port_phasecounterselect = "PORT_CONNECTIVITY";
316 parameter port_phasedone = "PORT_CONNECTIVITY";
317 parameter port_phasestep = "PORT_CONNECTIVITY";
318 parameter port_phaseupdown = "PORT_CONNECTIVITY";
319 parameter port_vcooverrange = "PORT_CONNECTIVITY";
320 parameter port_vcounderrange = "PORT_CONNECTIVITY";
321 parameter port_scanclkena = "PORT_CONNECTIVITY";
322 parameter using_fbmimicbidir_port = "ON";
323
324 input [1:0] inclk;
325 input fbin;
326 input pllena;
327 input clkswitch;
328 input areset;
329 input pfdena;
330 input clkena;
331 input extclkena;
332 input scanclk;
333 input scanaclr;
334 input scanclkena;
335 input scanread;
336 input scanwrite;
337 input scandata;
338 input phasecounterselect;
339 input phaseupdown;
340 input phasestep;
341 input configupdate;
342 inout fbmimicbidir;
343
344
345 output [width_clock-1:0] clk;
346 output [3:0] extclk;
347 output [1:0] clkbad;
348 output enable0;
349 output enable1;
350 output activeclock;
351 output clkloss;
352 output locked;
353 output scandataout;
354 output scandone;
355 output sclkout0;
356 output sclkout1;
357 output phasedone;
358 output vcooverrange;
359 output vcounderrange;
360 output fbout;
361 output fref;
362 output icdrclk;
363 output c0, c1, c2, c3, c4;
364
365 endmodule // altpll
366 `endif