OpenCores
URL https://opencores.org/ocsvn/openmsp430/openmsp430/trunk

Subversion Repositories openmsp430

[/] [openmsp430/] [trunk/] [core/] [sim/] [rtl_sim/] [src/] [lp_modes_asic.v] - Blame information for rev 202

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 134 olivier.gi
/*===========================================================================*/
2
/* Copyright (C) 2001 Authors                                                */
3
/*                                                                           */
4
/* This source file may be used and distributed without restriction provided */
5
/* that this copyright statement is not removed from the file and that any   */
6
/* derivative work contains the original copyright notice and the associated */
7
/* disclaimer.                                                               */
8
/*                                                                           */
9
/* This source file is free software; you can redistribute it and/or modify  */
10
/* it under the terms of the GNU Lesser General Public License as published  */
11
/* by the Free Software Foundation; either version 2.1 of the License, or    */
12
/* (at your option) any later version.                                       */
13
/*                                                                           */
14
/* This source is distributed in the hope that it will be useful, but WITHOUT*/
15
/* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or     */
16
/* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public       */
17
/* License for more details.                                                 */
18
/*                                                                           */
19
/* You should have received a copy of the GNU Lesser General Public License  */
20
/* along with this source; if not, write to the Free Software Foundation,    */
21
/* Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA        */
22
/*                                                                           */
23
/*===========================================================================*/
24
/*                            CPU LOW POWER MODES                            */
25
/*---------------------------------------------------------------------------*/
26
/* Test the CPU Low Power modes:                                             */
27
/*                              - LPM0    <=>  CPUOFF                        */
28
/*                              - LPM1    <=>  CPUOFF + SCG0                 */
29
/*                              - LPM2    <=>  CPUOFF +        SCG1          */
30
/*                              - LPM3    <=>  CPUOFF + SCG0 + SCG1          */
31
/*                              - LPM4    <=>  CPUOFF + SCG0 + SCG1 + OSCOFF */
32
/*                                                                           */
33
/* Reminder:                                                                 */
34
/*                              - CPUOFF  <=>  turns off CPU.                */
35
/*                              - SCG0    <=>  turns off DCO.                */
36
/*                              - SCG1    <=>  turns off SMCLK.              */
37
/*                              - OSCOFF  <=>  turns off LFXT_CLK.           */
38
/*                                                                           */
39
/* Author(s):                                                                */
40
/*             - Olivier Girard,    olgirard@gmail.com                       */
41
/*                                                                           */
42
/*---------------------------------------------------------------------------*/
43
/* $Rev: 95 $                                                                */
44
/* $LastChangedBy: olivier.girard $                                          */
45
/* $LastChangedDate: 2011-02-24 21:37:57 +0100 (Thu, 24 Feb 2011) $          */
46
/*===========================================================================*/
47
 
48
integer dco_clk_cnt;
49
always @(negedge dco_clk)
50
  dco_clk_cnt <= dco_clk_cnt+1;
51
 
52
integer mclk_cnt;
53
always @(negedge mclk)
54
  mclk_cnt <= mclk_cnt+1;
55
 
56
integer smclk_cnt;
57
always @(negedge smclk)
58
  smclk_cnt <= smclk_cnt+1;
59
 
60
integer aclk_cnt;
61
always @(negedge aclk)
62
  aclk_cnt <= aclk_cnt+1;
63
 
64
integer inst_cnt;
65
always @(inst_number)
66
  inst_cnt <= inst_cnt+1;
67
 
68
// Wakeup synchronizer to generate IRQ
69
reg [1:0] wkup2_sync;
70
always @(posedge mclk or posedge puc_rst)
71
  if (puc_rst) wkup2_sync <= 2'b00;
72
  else         wkup2_sync <= {wkup2_sync[0], wkup[2]};
73
 
74
always @(wkup2_sync)
75 200 olivier.gi
  irq[`IRQ_NR-14] = wkup2_sync[1]; // IRQ-2
76 202 olivier.gi
 
77 134 olivier.gi
// Wakeup synchronizer to generate IRQ
78
reg [1:0] wkup3_sync;
79
always @(posedge mclk or posedge puc_rst)
80
  if (puc_rst) wkup3_sync <= 2'b00;
81
  else         wkup3_sync <= {wkup3_sync[0], wkup[3]};
82
 
83
always @(wkup3_sync)
84 200 olivier.gi
  irq[`IRQ_NR-13] = wkup3_sync[1]; // IRQ-3
85 134 olivier.gi
 
86
initial
87
   begin
88
      $display(" ===============================================");
89
      $display("|                 START SIMULATION              |");
90
      $display(" ===============================================");
91
      repeat(5) @(posedge mclk);
92
      stimulus_done = 0;
93
 
94 200 olivier.gi
      irq[`IRQ_NR-14]  = 0; // IRQ-2
95 134 olivier.gi
      wkup[2] = 0;
96
 
97 200 olivier.gi
      irq[`IRQ_NR-13]  = 0; // IRQ-3
98 134 olivier.gi
      wkup[3] = 0;
99
 
100
 
101 180 olivier.gi
`ifdef ASIC_CLOCKING
102 202 olivier.gi
 
103 134 olivier.gi
      // ACTIVE
104
      //--------------------------------------------------------
105
 
106
      @(r15==16'h1001);
107
      #(10*50);
108
      dco_clk_cnt  = 0;
109
      mclk_cnt     = 0;
110
      smclk_cnt    = 0;
111
      aclk_cnt     = 0;
112
      inst_cnt     = 0;
113
      #(100*50);
114
      if (dco_clk_cnt !== 100) tb_error("====== ACTIVE TEST 1: DCO_CLK IS NOT RUNNING =====");
115
      if (mclk_cnt    !== 100) tb_error("====== ACTIVE TEST 2: MCLK    IS NOT RUNNING =====");
116
      if (smclk_cnt   !== 100) tb_error("====== ACTIVE TEST 3: SMCLK   IS NOT RUNNING =====");
117
  `ifdef LFXT_DOMAIN
118
      if (aclk_cnt    !== 3)   tb_error("====== ACTIVE TEST 4: ACLK    IS NOT RUNNING =====");
119
  `else
120
      if (aclk_cnt    !== 100) tb_error("====== ACTIVE TEST 4: ACLK    IS NOT RUNNING =====");
121
  `endif
122
      if (inst_cnt    <  60)   tb_error("====== ACTIVE TEST 5: CPU IS NOT EXECUTING   =====");
123
      dco_clk_cnt  = 0;
124
      mclk_cnt     = 0;
125
      smclk_cnt    = 0;
126
      aclk_cnt     = 0;
127
      inst_cnt     = 0;
128
 
129
 
130
 
131
      // LPM0 ( CPUOFF )
132
      //--------------------------------------------------------
133
 
134
      @(r15==16'h2001);
135
      #(10*50);
136
      dco_clk_cnt  = 0;
137
      mclk_cnt     = 0;
138
      smclk_cnt    = 0;
139
      aclk_cnt     = 0;
140
      inst_cnt     = 0;
141
      #(100*50);
142
      if (dco_clk_cnt !== 100) tb_error("====== LPM0 TEST 1: DCO_CLK IS NOT RUNNING =====");
143
      if (mclk_cnt    !== 0)   tb_error("====== LPM0 TEST 2: MCLK    IS RUNNING     =====");
144
      if (smclk_cnt   !== 100) tb_error("====== LPM0 TEST 3: SMCLK   IS NOT RUNNING =====");
145
  `ifdef LFXT_DOMAIN
146
      if (aclk_cnt    !== 3)   tb_error("====== LPM0 TEST 4: ACLK    IS NOT RUNNING =====");
147
  `else
148
      if (aclk_cnt    !== 100) tb_error("====== LPM0 TEST 4: ACLK    IS NOT RUNNING =====");
149
  `endif
150
      if (inst_cnt    !== 0)   tb_error("====== LPM0 TEST 5: CPU IS EXECUTING       =====");
151
      dco_clk_cnt  = 0;
152
      mclk_cnt     = 0;
153
      smclk_cnt    = 0;
154
      aclk_cnt     = 0;
155
      inst_cnt     = 0;
156
 
157
      @(posedge dco_clk);                //---------- PORT1 IRQ TRIAL (STAYING IN POWER MODE) -------------//
158
      wkup[2] = 1'b1;
159 200 olivier.gi
      @(posedge irq_acc[`IRQ_NR-14]); // IRQ_ACC-2
160 134 olivier.gi
      #(10*50);
161
      dco_clk_cnt  = 0;
162
      mclk_cnt     = 0;
163
      smclk_cnt    = 0;
164
      aclk_cnt     = 0;
165
      inst_cnt     = 0;
166
      #(100*50);
167
      if (dco_clk_cnt !== 100) tb_error("====== LPM0 TEST  6: DCO_CLK IS NOT RUNNING DURING IRQ =====");
168
      if (mclk_cnt    !== 100) tb_error("====== LPM0 TEST  7: MCLK    IS NOT RUNNING DURING IRQ =====");
169
      if (smclk_cnt   !== 100) tb_error("====== LPM0 TEST  8: SMCLK   IS NOT RUNNING DURING IRQ =====");
170
  `ifdef LFXT_DOMAIN
171
      if (aclk_cnt    !== 3)   tb_error("====== LPM0 TEST  9: ACLK    IS NOT RUNNING DURING IRQ =====");
172
  `else
173
      if (aclk_cnt    !== 100) tb_error("====== LPM0 TEST  9: ACLK    IS NOT RUNNING DURING IRQ =====");
174
  `endif
175
      if (inst_cnt    <  60)   tb_error("====== LPM0 TEST 10: CPU IS NOT EXECUTING DURING IRQ   =====");
176
      @(r13==16'haaaa);
177
      wkup[2] = 1'b0;
178 202 olivier.gi
 
179 134 olivier.gi
       #(10*50);
180
      dco_clk_cnt  = 0;
181
      mclk_cnt     = 0;
182
      smclk_cnt    = 0;
183
      aclk_cnt     = 0;
184
      inst_cnt     = 0;
185
      #(100*50);
186
      if (dco_clk_cnt !== 100) tb_error("====== LPM0 TEST 11: DCO_CLK IS NOT RUNNING AFTER IRQ =====");
187
      if (mclk_cnt    !== 0)   tb_error("====== LPM0 TEST 12: MCLK    IS RUNNING     AFTER IRQ =====");
188
      if (smclk_cnt   !== 100) tb_error("====== LPM0 TEST 13: SMCLK   IS NOT RUNNING AFTER IRQ =====");
189
  `ifdef LFXT_DOMAIN
190
      if (aclk_cnt    !== 3)   tb_error("====== LPM0 TEST 14: ACLK    IS NOT RUNNING AFTER IRQ =====");
191
  `else
192
      if (aclk_cnt    !== 100) tb_error("====== LPM0 TEST 14: ACLK    IS NOT RUNNING AFTER IRQ =====");
193
  `endif
194
      if (inst_cnt    !== 0)   tb_error("====== LPM0 TEST 15: CPU IS EXECUTING AFTER IRQ       =====");
195
      dco_clk_cnt  = 0;
196
      mclk_cnt     = 0;
197
      smclk_cnt    = 0;
198
      aclk_cnt     = 0;
199
      inst_cnt     = 0;
200
 
201
                                         //---------- PORT2 IRQ TRIAL (EXITING POWER MODE) -------------//
202
      wkup[3] = 1'b1;
203 200 olivier.gi
      @(posedge irq_acc[`IRQ_NR-13]); // IRQ_ACC-3
204 134 olivier.gi
      #(10*50);
205
      dco_clk_cnt  = 0;
206
      mclk_cnt     = 0;
207
      smclk_cnt    = 0;
208
      aclk_cnt     = 0;
209
      inst_cnt     = 0;
210
      #(100*50);
211
      if (dco_clk_cnt !== 100) tb_error("====== LPM0 TEST 16: DCO_CLK IS NOT RUNNING DURING IRQ =====");
212
      if (mclk_cnt    !== 100) tb_error("====== LPM0 TEST 17: MCLK    IS NOT RUNNING DURING IRQ =====");
213
      if (smclk_cnt   !== 100) tb_error("====== LPM0 TEST 18: SMCLK   IS NOT RUNNING DURING IRQ =====");
214
  `ifdef LFXT_DOMAIN
215
      if (aclk_cnt    !== 3)   tb_error("====== LPM0 TEST 19: ACLK    IS NOT RUNNING DURING IRQ =====");
216
  `else
217
      if (aclk_cnt    !== 100) tb_error("====== LPM0 TEST 19: ACLK    IS NOT RUNNING DURING IRQ =====");
218
  `endif
219
      if (inst_cnt    <  60)   tb_error("====== LPM0 TEST 20: CPU IS NOT EXECUTING DURING IRQ   =====");
220
      @(r13==16'hbbbb);
221
      wkup[3] = 1'b0;
222 202 olivier.gi
 
223 134 olivier.gi
       #(10*50);
224
      dco_clk_cnt  = 0;
225
      mclk_cnt     = 0;
226
      smclk_cnt    = 0;
227
      aclk_cnt     = 0;
228
      inst_cnt     = 0;
229
      #(100*50);
230
      if (dco_clk_cnt !== 100) tb_error("====== LPM0 TEST 21: DCO_CLK IS NOT RUNNING AFTER IRQ =====");
231
      if (mclk_cnt    !== 100) tb_error("====== LPM0 TEST 22: MCLK    IS NOT RUNNING AFTER IRQ =====");
232
      if (smclk_cnt   !== 100) tb_error("====== LPM0 TEST 23: SMCLK   IS NOT RUNNING AFTER IRQ =====");
233
  `ifdef LFXT_DOMAIN
234
      if (aclk_cnt    !== 3)   tb_error("====== LPM0 TEST 24: ACLK    IS NOT RUNNING AFTER IRQ =====");
235
  `else
236
      if (aclk_cnt    !== 100) tb_error("====== LPM0 TEST 24: ACLK    IS NOT RUNNING AFTER IRQ =====");
237
  `endif
238
      if (inst_cnt    <  60)   tb_error("====== LPM0 TEST 25: CPU IS NOT EXECUTING AFTER IRQ   =====");
239
      dco_clk_cnt  = 0;
240
      mclk_cnt     = 0;
241
      smclk_cnt    = 0;
242
      aclk_cnt     = 0;
243
      inst_cnt     = 0;
244
 
245 202 olivier.gi
 
246 134 olivier.gi
      // LPM1 ( CPUOFF + SCG0 )
247
      //--------------------------------------------------------
248
 
249
      @(r15==16'h3001);
250
      // Until the SMCLK clock mux is implemented, force SMCLK to LFXT_CLK;
251
      force dut.clock_module_0.nodiv_smclk = lfxt_clk;
252
      //force dut.clock_module_0.smclk       = lfxt_clk;
253
 
254
      #(100*50);
255
      dco_clk_cnt  = 0;
256
      mclk_cnt     = 0;
257
      smclk_cnt    = 0;
258
      aclk_cnt     = 0;
259
      inst_cnt     = 0;
260
      #(100*50);
261
      if (dco_clk_cnt !== 0)   tb_error("====== LPM1 TEST 1: DCO_CLK IS RUNNING     =====");
262
      if (mclk_cnt    !== 0)   tb_error("====== LPM1 TEST 2: MCLK    IS RUNNING     =====");
263
      if (smclk_cnt   !== 3)   tb_error("====== LPM1 TEST 3: SMCLK   IS NOT RUNNING =====");
264
  `ifdef LFXT_DOMAIN
265
      if (aclk_cnt    !== 3)   tb_error("====== LPM1 TEST 4: ACLK    IS NOT RUNNING =====");
266
  `else
267
      if (aclk_cnt    !== 0)   tb_error("====== LPM1 TEST 4: ACLK    IS RUNNING     =====");
268
  `endif
269
      if (inst_cnt    !== 0)   tb_error("====== LPM1 TEST 5: CPU IS EXECUTING       =====");
270
      dco_clk_cnt  = 0;
271
      mclk_cnt     = 0;
272
      smclk_cnt    = 0;
273
      aclk_cnt     = 0;
274
      inst_cnt     = 0;
275
 
276
      #(1*50);                           //---------- PORT1 IRQ TRIAL (STAYING IN POWER MODE) -------------//
277
      wkup[2] = 1'b1;
278 200 olivier.gi
      @(posedge irq_acc[`IRQ_NR-14]); // IRQ_ACC-2
279 134 olivier.gi
      #(10*50);
280
      dco_clk_cnt  = 0;
281
      mclk_cnt     = 0;
282
      smclk_cnt    = 0;
283
      aclk_cnt     = 0;
284
      inst_cnt     = 0;
285
      #(100*50);
286
      if (dco_clk_cnt !== 100) tb_error("====== LPM1 TEST  6: DCO_CLK IS NOT RUNNING DURING IRQ =====");
287
      if (mclk_cnt    !== 100) tb_error("====== LPM1 TEST  7: MCLK    IS NOT RUNNING DURING IRQ =====");
288
      if (smclk_cnt   !== 3)   tb_error("====== LPM1 TEST  8: SMCLK   IS NOT RUNNING DURING IRQ =====");
289
  `ifdef LFXT_DOMAIN
290
      if (aclk_cnt    !== 3)   tb_error("====== LPM1 TEST  9: ACLK    IS NOT RUNNING DURING IRQ =====");
291
  `else
292
      if (aclk_cnt    !== 100) tb_error("====== LPM1 TEST  9: ACLK    IS NOT RUNNING DURING IRQ =====");
293
  `endif
294
      if (inst_cnt    <  60)   tb_error("====== LPM1 TEST 10: CPU IS NOT EXECUTING DURING IRQ   =====");
295
      @(r13==16'haaaa);
296
      wkup[2] = 1'b0;
297 202 olivier.gi
 
298 134 olivier.gi
       #(15*50);
299
      dco_clk_cnt  = 0;
300
      mclk_cnt     = 0;
301
      smclk_cnt    = 0;
302
      aclk_cnt     = 0;
303
      inst_cnt     = 0;
304
      #(100*50);
305
      if (dco_clk_cnt !== 0)   tb_error("====== LPM1 TEST 11: DCO_CLK IS RUNNING     AFTER IRQ =====");
306
      if (mclk_cnt    !== 0)   tb_error("====== LPM1 TEST 12: MCLK    IS RUNNING     AFTER IRQ =====");
307
      if (smclk_cnt   !== 3)   tb_error("====== LPM1 TEST 13: SMCLK   IS NOT RUNNING AFTER IRQ =====");
308
  `ifdef LFXT_DOMAIN
309
      if (aclk_cnt    !== 3)   tb_error("====== LPM1 TEST 14: ACLK    IS NOT RUNNING AFTER IRQ =====");
310
  `else
311
      if (aclk_cnt    !== 0)   tb_error("====== LPM1 TEST 14: ACLK    IS RUNNING AFTER IRQ     =====");
312
  `endif
313
      if (inst_cnt    !== 0)   tb_error("====== LPM1 TEST 15: CPU IS EXECUTING AFTER IRQ       =====");
314
      dco_clk_cnt  = 0;
315
      mclk_cnt     = 0;
316
      smclk_cnt    = 0;
317
      aclk_cnt     = 0;
318
      inst_cnt     = 0;
319
 
320
                                         //---------- PORT2 IRQ TRIAL (EXITING POWER MODE) -------------//
321
      wkup[3] = 1'b1;
322 200 olivier.gi
      @(posedge irq_acc[`IRQ_NR-13]); // IRQ_ACC-3
323 134 olivier.gi
      #(10*50);
324
      dco_clk_cnt  = 0;
325
      mclk_cnt     = 0;
326
      smclk_cnt    = 0;
327
      aclk_cnt     = 0;
328
      inst_cnt     = 0;
329
      #(100*50);
330
      if (dco_clk_cnt !== 100) tb_error("====== LPM1 TEST 16: DCO_CLK IS NOT RUNNING DURING IRQ =====");
331
      if (mclk_cnt    !== 100) tb_error("====== LPM1 TEST 17: MCLK    IS NOT RUNNING DURING IRQ =====");
332
      if (smclk_cnt   !== 3)   tb_error("====== LPM1 TEST 18: SMCLK   IS NOT RUNNING DURING IRQ =====");
333
  `ifdef LFXT_DOMAIN
334
      if (aclk_cnt    !== 3)   tb_error("====== LPM1 TEST 19: ACLK    IS NOT RUNNING DURING IRQ =====");
335
  `else
336
      if (aclk_cnt    !== 100) tb_error("====== LPM1 TEST 19: ACLK    IS NOT RUNNING DURING IRQ =====");
337
  `endif
338
      if (inst_cnt    <  60)   tb_error("====== LPM1 TEST 20: CPU IS NOT EXECUTING DURING IRQ   =====");
339
      @(r13==16'hbbbb);
340
      wkup[3] = 1'b0;
341 202 olivier.gi
 
342 134 olivier.gi
       #(10*50);
343
      dco_clk_cnt  = 0;
344
      mclk_cnt     = 0;
345
      smclk_cnt    = 0;
346
      aclk_cnt     = 0;
347
      inst_cnt     = 0;
348
      #(100*50);
349
      if (dco_clk_cnt !== 100) tb_error("====== LPM1 TEST 21: DCO_CLK IS NOT RUNNING AFTER IRQ =====");
350
      if (mclk_cnt    !== 100) tb_error("====== LPM1 TEST 22: MCLK    IS NOT RUNNING AFTER IRQ =====");
351
      if (smclk_cnt   !== 3)   tb_error("====== LPM1 TEST 23: SMCLK   IS NOT RUNNING AFTER IRQ =====");
352
  `ifdef LFXT_DOMAIN
353
      if (aclk_cnt    !== 3)   tb_error("====== LPM1 TEST 24: ACLK    IS NOT RUNNING AFTER IRQ =====");
354
  `else
355
      if (aclk_cnt    !== 100) tb_error("====== LPM1 TEST 24: ACLK    IS NOT RUNNING AFTER IRQ =====");
356
  `endif
357
      if (inst_cnt    <  60)   tb_error("====== LPM1 TEST 25: CPU IS NOT EXECUTING AFTER IRQ   =====");
358
      dco_clk_cnt  = 0;
359
      mclk_cnt     = 0;
360
      smclk_cnt    = 0;
361
      aclk_cnt     = 0;
362
      inst_cnt     = 0;
363
 
364
 
365
      // LPM2 ( CPUOFF + SCG1 )
366
      //--------------------------------------------------------
367
 
368
      @(r15==16'h4001);
369 202 olivier.gi
 
370 134 olivier.gi
      #(100*50);
371
      dco_clk_cnt  = 0;
372
      mclk_cnt     = 0;
373
      smclk_cnt    = 0;
374
      aclk_cnt     = 0;
375
      inst_cnt     = 0;
376
      #(100*50);
377
      if (dco_clk_cnt !== 100) tb_error("====== LPM2 TEST 1: DCO_CLK IS NOT RUNNING =====");
378
      if (mclk_cnt    !== 0)   tb_error("====== LPM2 TEST 2: MCLK    IS RUNNING     =====");
379
`ifdef SCG1_EN
380
      if (smclk_cnt   !== 0)   tb_error("====== LPM2 TEST 3: SMCLK   IS RUNNING     =====");
381
`else
382
      if (smclk_cnt   !== 3)   tb_error("====== LPM2 TEST 3: SMCLK   IS NOT RUNNING =====");
383
`endif
384
  `ifdef LFXT_DOMAIN
385
      if (aclk_cnt    !== 3)   tb_error("====== LPM2 TEST 4: ACLK    IS NOT RUNNING =====");
386
  `else
387
      if (aclk_cnt    !== 100) tb_error("====== LPM2 TEST 4: ACLK    IS NOT RUNNING =====");
388
  `endif
389
      if (inst_cnt    !== 0)   tb_error("====== LPM2 TEST 5: CPU IS EXECUTING       =====");
390
      dco_clk_cnt  = 0;
391
      mclk_cnt     = 0;
392
      smclk_cnt    = 0;
393
      aclk_cnt     = 0;
394
      inst_cnt     = 0;
395
 
396
      #(1*50);                           //---------- PORT1 IRQ TRIAL (STAYING IN POWER MODE) -------------//
397
      wkup[2] = 1'b1;
398 200 olivier.gi
      @(posedge irq_acc[`IRQ_NR-14]); // IRQ_ACC-2
399 134 olivier.gi
      #(100*50);
400
      dco_clk_cnt  = 0;
401
      mclk_cnt     = 0;
402
      smclk_cnt    = 0;
403
      aclk_cnt     = 0;
404
      inst_cnt     = 0;
405
      #(100*50);
406
      if (dco_clk_cnt !== 100) tb_error("====== LPM2 TEST  6: DCO_CLK IS NOT RUNNING DURING IRQ =====");
407
      if (mclk_cnt    !== 100) tb_error("====== LPM2 TEST  7: MCLK    IS NOT RUNNING DURING IRQ =====");
408
      if (smclk_cnt   !== 3)   tb_error("====== LPM2 TEST  8: SMCLK   IS NOT RUNNING DURING IRQ =====");
409
  `ifdef LFXT_DOMAIN
410
      if (aclk_cnt    !== 3)   tb_error("====== LPM2 TEST  9: ACLK    IS NOT RUNNING DURING IRQ =====");
411
  `else
412
      if (aclk_cnt    !== 100) tb_error("====== LPM2 TEST  9: ACLK    IS NOT RUNNING DURING IRQ =====");
413
  `endif
414
      if (inst_cnt    <  60)   tb_error("====== LPM2 TEST 10: CPU IS NOT EXECUTING DURING IRQ   =====");
415
      @(r13==16'haaaa);
416
      wkup[2] = 1'b0;
417 202 olivier.gi
 
418 134 olivier.gi
       #(100*50);
419
      dco_clk_cnt  = 0;
420
      mclk_cnt     = 0;
421
      smclk_cnt    = 0;
422
      aclk_cnt     = 0;
423
      inst_cnt     = 0;
424
      #(100*50);
425
      if (dco_clk_cnt !== 100) tb_error("====== LPM2 TEST 11: DCO_CLK IS NOT RUNNING AFTER IRQ =====");
426
      if (mclk_cnt    !== 0)   tb_error("====== LPM2 TEST 12: MCLK    IS RUNNING     AFTER IRQ =====");
427
`ifdef SCG1_EN
428
      if (smclk_cnt   !== 0)   tb_error("====== LPM2 TEST 13: SMCLK   IS RUNNING     AFTER IRQ =====");
429
`else
430
      if (smclk_cnt   !== 3)   tb_error("====== LPM2 TEST 13: SMCLK   IS NOT RUNNING     AFTER IRQ =====");
431
`endif
432
  `ifdef LFXT_DOMAIN
433
      if (aclk_cnt    !== 3)   tb_error("====== LPM2 TEST 14: ACLK    IS NOT RUNNING AFTER IRQ =====");
434
  `else
435
      if (aclk_cnt    !== 100) tb_error("====== LPM2 TEST 14: ACLK    IS NOT RUNNING AFTER IRQ =====");
436
  `endif
437
      if (inst_cnt    !== 0)   tb_error("====== LPM2 TEST 15: CPU IS EXECUTING AFTER IRQ       =====");
438
      dco_clk_cnt  = 0;
439
      mclk_cnt     = 0;
440
      smclk_cnt    = 0;
441
      aclk_cnt     = 0;
442
      inst_cnt     = 0;
443
 
444
                                         //---------- PORT2 IRQ TRIAL (EXITING POWER MODE) -------------//
445
      wkup[3] = 1'b1;
446 200 olivier.gi
      @(posedge irq_acc[`IRQ_NR-13]); // IRQ_ACC-3
447 134 olivier.gi
      #(100*50);
448
      dco_clk_cnt  = 0;
449
      mclk_cnt     = 0;
450
      smclk_cnt    = 0;
451
      aclk_cnt     = 0;
452
      inst_cnt     = 0;
453
      #(100*50);
454
      if (dco_clk_cnt !== 100) tb_error("====== LPM2 TEST 16: DCO_CLK IS NOT RUNNING DURING IRQ =====");
455
      if (mclk_cnt    !== 100) tb_error("====== LPM2 TEST 17: MCLK    IS NOT RUNNING DURING IRQ =====");
456
      if (smclk_cnt   !== 3)   tb_error("====== LPM2 TEST 18: SMCLK   IS NOT RUNNING DURING IRQ =====");
457
  `ifdef LFXT_DOMAIN
458
      if (aclk_cnt    !== 3)   tb_error("====== LPM2 TEST 19: ACLK    IS NOT RUNNING DURING IRQ =====");
459
  `else
460
      if (aclk_cnt    !== 100) tb_error("====== LPM2 TEST 19: ACLK    IS NOT RUNNING DURING IRQ =====");
461
  `endif
462
      if (inst_cnt    <  60)   tb_error("====== LPM2 TEST 20: CPU IS NOT EXECUTING DURING IRQ   =====");
463
      @(r13==16'hbbbb);
464
      wkup[3] = 1'b0;
465 202 olivier.gi
 
466 134 olivier.gi
       #(100*50);
467
      dco_clk_cnt  = 0;
468
      mclk_cnt     = 0;
469
      smclk_cnt    = 0;
470
      aclk_cnt     = 0;
471
      inst_cnt     = 0;
472
      #(100*50);
473
      if (dco_clk_cnt !== 100) tb_error("====== LPM2 TEST 21: DCO_CLK IS NOT RUNNING AFTER IRQ =====");
474
      if (mclk_cnt    !== 100) tb_error("====== LPM2 TEST 22: MCLK    IS NOT RUNNING AFTER IRQ =====");
475
      if (smclk_cnt   !== 3)   tb_error("====== LPM2 TEST 23: SMCLK   IS NOT RUNNING AFTER IRQ =====");
476
  `ifdef LFXT_DOMAIN
477
      if (aclk_cnt    !== 3)   tb_error("====== LPM2 TEST 24: ACLK    IS NOT RUNNING AFTER IRQ =====");
478
  `else
479
      if (aclk_cnt    !== 100) tb_error("====== LPM2 TEST 24: ACLK    IS NOT RUNNING AFTER IRQ =====");
480
  `endif
481
      if (inst_cnt    <  60)   tb_error("====== LPM2 TEST 25: CPU IS NOT EXECUTING AFTER IRQ   =====");
482
      dco_clk_cnt  = 0;
483
      mclk_cnt     = 0;
484
      smclk_cnt    = 0;
485
      aclk_cnt     = 0;
486
      inst_cnt     = 0;
487
 
488
 
489
      // LPM3 ( CPUOFF + SCG0 + SCG1 )
490
      //--------------------------------------------------------
491
 
492
      @(r15==16'h5001);
493 202 olivier.gi
 
494 134 olivier.gi
      #(100*50);
495
      dco_clk_cnt  = 0;
496
      mclk_cnt     = 0;
497
      smclk_cnt    = 0;
498
      aclk_cnt     = 0;
499
      inst_cnt     = 0;
500
      #(100*50);
501
      if (dco_clk_cnt !== 0)   tb_error("====== LPM3 TEST 1: DCO_CLK IS RUNNING     =====");
502
      if (mclk_cnt    !== 0)   tb_error("====== LPM3 TEST 2: MCLK    IS RUNNING     =====");
503
`ifdef SCG1_EN
504
      if (smclk_cnt   !== 0)   tb_error("====== LPM3 TEST 3: SMCLK   IS RUNNING     =====");
505
`else
506
      if (smclk_cnt   !== 3)   tb_error("====== LPM3 TEST 3: SMCLK   IS NOT RUNNING =====");
507
`endif
508
  `ifdef LFXT_DOMAIN
509
      if (aclk_cnt    !== 3)   tb_error("====== LPM3 TEST 4: ACLK    IS NOT RUNNING =====");
510
  `else
511
      if (aclk_cnt    !== 0)   tb_error("====== LPM3 TEST 4: ACLK    IS RUNNING     =====");
512
  `endif
513
      if (inst_cnt    !== 0)   tb_error("====== LPM3 TEST 5: CPU IS EXECUTING       =====");
514
      dco_clk_cnt  = 0;
515
      mclk_cnt     = 0;
516
      smclk_cnt    = 0;
517
      aclk_cnt     = 0;
518
      inst_cnt     = 0;
519
 
520
      #(1*50);                           //---------- PORT1 IRQ TRIAL (STAYING IN POWER MODE) -------------//
521
      wkup[2] = 1'b1;
522 200 olivier.gi
      @(posedge irq_acc[`IRQ_NR-14]); // IRQ_ACC-2
523 134 olivier.gi
      #(100*50);
524
      dco_clk_cnt  = 0;
525
      mclk_cnt     = 0;
526
      smclk_cnt    = 0;
527
      aclk_cnt     = 0;
528
      inst_cnt     = 0;
529
      #(100*50);
530
      if (dco_clk_cnt !== 100) tb_error("====== LPM3 TEST  6: DCO_CLK IS NOT RUNNING DURING IRQ =====");
531
      if (mclk_cnt    !== 100) tb_error("====== LPM3 TEST  7: MCLK    IS NOT RUNNING DURING IRQ =====");
532
      if (smclk_cnt   !== 3)   tb_error("====== LPM3 TEST  8: SMCLK   IS NOT RUNNING DURING IRQ =====");
533
  `ifdef LFXT_DOMAIN
534
      if (aclk_cnt    !== 3)   tb_error("====== LPM3 TEST  9: ACLK    IS NOT RUNNING DURING IRQ =====");
535
  `else
536
      if (aclk_cnt    !== 100) tb_error("====== LPM3 TEST  9: ACLK    IS NOT RUNNING DURING IRQ =====");
537
  `endif
538
      if (inst_cnt    <  60)   tb_error("====== LPM3 TEST 10: CPU IS NOT EXECUTING DURING IRQ   =====");
539
      @(r13==16'haaaa);
540
      wkup[2] = 1'b0;
541 202 olivier.gi
 
542 134 olivier.gi
       #(100*50);
543
      dco_clk_cnt  = 0;
544
      mclk_cnt     = 0;
545
      smclk_cnt    = 0;
546
      aclk_cnt     = 0;
547
      inst_cnt     = 0;
548
      #(100*50);
549
      if (dco_clk_cnt !== 0)   tb_error("====== LPM3 TEST 11: DCO_CLK IS RUNNING     AFTER IRQ =====");
550
      if (mclk_cnt    !== 0)   tb_error("====== LPM3 TEST 12: MCLK    IS RUNNING     AFTER IRQ =====");
551
`ifdef SCG1_EN
552
      if (smclk_cnt   !== 0)   tb_error("====== LPM3 TEST 13: SMCLK   IS RUNNING     AFTER IRQ =====");
553
`else
554
      if (smclk_cnt   !== 3)   tb_error("====== LPM3 TEST 13: SMCLK   IS NOT RUNNING     AFTER IRQ =====");
555
`endif
556
  `ifdef LFXT_DOMAIN
557
      if (aclk_cnt    !== 3)   tb_error("====== LPM3 TEST 14: ACLK    IS NOT RUNNING AFTER IRQ =====");
558
  `else
559
      if (aclk_cnt    !== 0)   tb_error("====== LPM3 TEST 14: ACLK    IS RUNNING AFTER IRQ =====");
560
  `endif
561
      if (inst_cnt    !== 0)   tb_error("====== LPM3 TEST 15: CPU IS EXECUTING AFTER IRQ       =====");
562
      dco_clk_cnt  = 0;
563
      mclk_cnt     = 0;
564
      smclk_cnt    = 0;
565
      aclk_cnt     = 0;
566
      inst_cnt     = 0;
567
 
568
                                         //---------- PORT2 IRQ TRIAL (EXITING POWER MODE) -------------//
569
      wkup[3] = 1'b1;
570 200 olivier.gi
      @(posedge irq_acc[`IRQ_NR-13]); // IRQ_ACC-3
571 134 olivier.gi
      #(100*50);
572
      dco_clk_cnt  = 0;
573
      mclk_cnt     = 0;
574
      smclk_cnt    = 0;
575
      aclk_cnt     = 0;
576
      inst_cnt     = 0;
577
      #(100*50);
578
      if (dco_clk_cnt !== 100) tb_error("====== LPM3 TEST 16: DCO_CLK IS NOT RUNNING DURING IRQ =====");
579
      if (mclk_cnt    !== 100) tb_error("====== LPM3 TEST 17: MCLK    IS NOT RUNNING DURING IRQ =====");
580
      if (smclk_cnt   !== 3)   tb_error("====== LPM3 TEST 18: SMCLK   IS NOT RUNNING DURING IRQ =====");
581
  `ifdef LFXT_DOMAIN
582
      if (aclk_cnt    !== 3)   tb_error("====== LPM3 TEST 19: ACLK    IS NOT RUNNING DURING IRQ =====");
583
  `else
584
      if (aclk_cnt    !== 100) tb_error("====== LPM3 TEST 19: ACLK    IS NOT RUNNING DURING IRQ =====");
585
  `endif
586
      if (inst_cnt    <  60)   tb_error("====== LPM3 TEST 20: CPU IS NOT EXECUTING DURING IRQ   =====");
587
      @(r13==16'hbbbb);
588
      wkup[3] = 1'b0;
589 202 olivier.gi
 
590 134 olivier.gi
      #(100*50);
591
      dco_clk_cnt  = 0;
592
      mclk_cnt     = 0;
593
      smclk_cnt    = 0;
594
      aclk_cnt     = 0;
595
      inst_cnt     = 0;
596
      #(100*50);
597
      if (dco_clk_cnt !== 100) tb_error("====== LPM3 TEST 21: DCO_CLK IS NOT RUNNING AFTER IRQ =====");
598
      if (mclk_cnt    !== 100) tb_error("====== LPM3 TEST 22: MCLK    IS NOT RUNNING AFTER IRQ =====");
599
      if (smclk_cnt   !== 3)   tb_error("====== LPM3 TEST 23: SMCLK   IS NOT RUNNING AFTER IRQ =====");
600
  `ifdef LFXT_DOMAIN
601
      if (aclk_cnt    !== 3)   tb_error("====== LPM3 TEST 24: ACLK    IS NOT RUNNING AFTER IRQ =====");
602
  `else
603
      if (aclk_cnt    !== 100) tb_error("====== LPM3 TEST 24: ACLK    IS NOT RUNNING AFTER IRQ =====");
604
  `endif
605
      if (inst_cnt    <  60)   tb_error("====== LPM3 TEST 25: CPU IS NOT EXECUTING AFTER IRQ   =====");
606
      dco_clk_cnt  = 0;
607
      mclk_cnt     = 0;
608
      smclk_cnt    = 0;
609
      aclk_cnt     = 0;
610
      inst_cnt     = 0;
611
 
612
 
613
      // LPM4 ( CPUOFF + SCG0 + SCG1 + OSCOFF)
614
      //--------------------------------------------------------
615
 
616 202 olivier.gi
      @(r15==16'h6001);
617 134 olivier.gi
 
618
      #(100*70);
619
      dco_clk_cnt  = 0;
620
      mclk_cnt     = 0;
621
      smclk_cnt    = 0;
622
      aclk_cnt     = 0;
623
      inst_cnt     = 0;
624
      #(100*50);
625
      if (dco_clk_cnt !== 0)   tb_error("====== LPM4 TEST 1: DCO_CLK IS RUNNING     =====");
626
      if (mclk_cnt    !== 0)   tb_error("====== LPM4 TEST 2: MCLK    IS RUNNING     =====");
627
`ifdef SCG1_EN
628
      if (smclk_cnt   !== 0)   tb_error("====== LPM4 TEST 3: SMCLK   IS RUNNING     =====");
629
`else
630
   `ifdef OSCOFF_EN
631
      if (smclk_cnt   !== 0)   tb_error("====== LPM4 TEST 3: SMCLK   IS RUNNING     =====");
632
   `else
633
      if (smclk_cnt   <   3)   tb_error("====== LPM4 TEST 3: SMCLK   IS NOT RUNNING =====");
634
   `endif
635
`endif
636
`ifdef OSCOFF_EN
637
      if (aclk_cnt    !== 0)   tb_error("====== LPM4 TEST 4: ACLK    IS RUNNING     =====");
638
`else
639
  `ifdef LFXT_DOMAIN
640
      if (aclk_cnt    <   3)   tb_error("====== LPM4 TEST 4: ACLK    IS NOT RUNNING =====");
641
  `else
642
      if (aclk_cnt    !== 0)   tb_error("====== LPM4 TEST 4: ACLK    IS RUNNING     =====");
643
  `endif
644
`endif
645
      if (inst_cnt    !== 0)   tb_error("====== LPM4 TEST 5: CPU IS EXECUTING       =====");
646
      dco_clk_cnt  = 0;
647
      mclk_cnt     = 0;
648
      smclk_cnt    = 0;
649
      aclk_cnt     = 0;
650
      inst_cnt     = 0;
651
 
652
      #(1*50);                           //---------- PORT1 IRQ TRIAL (STAYING IN POWER MODE) -------------//
653
      wkup[2] = 1'b1;
654 200 olivier.gi
      @(posedge irq_acc[`IRQ_NR-14]); // IRQ_ACC-2
655 134 olivier.gi
      #(100*50);
656
      dco_clk_cnt  = 0;
657
      mclk_cnt     = 0;
658
      smclk_cnt    = 0;
659
      aclk_cnt     = 0;
660
      inst_cnt     = 0;
661
      #(100*50);
662
      if (dco_clk_cnt !== 100) tb_error("====== LPM4 TEST  6: DCO_CLK IS NOT RUNNING DURING IRQ =====");
663
      if (mclk_cnt    !== 100) tb_error("====== LPM4 TEST  7: MCLK    IS NOT RUNNING DURING IRQ =====");
664
      if (smclk_cnt   !== 3)   tb_error("====== LPM4 TEST  8: SMCLK   IS NOT RUNNING DURING IRQ =====");
665
  `ifdef LFXT_DOMAIN
666
      if (aclk_cnt    !== 3)   tb_error("====== LPM4 TEST  9: ACLK    IS NOT RUNNING DURING IRQ =====");
667
  `else
668
      if (aclk_cnt    !== 100) tb_error("====== LPM4 TEST  9: ACLK    IS NOT RUNNING DURING IRQ =====");
669
  `endif
670
      if (inst_cnt    <  60)   tb_error("====== LPM4 TEST 10: CPU IS NOT EXECUTING DURING IRQ   =====");
671
      @(r13==16'haaaa);
672
      wkup[2] = 1'b0;
673 202 olivier.gi
 
674 134 olivier.gi
      #(100*50);
675
      dco_clk_cnt  = 0;
676
      mclk_cnt     = 0;
677
      smclk_cnt    = 0;
678
      aclk_cnt     = 0;
679
      inst_cnt     = 0;
680
      #(100*50);
681
      if (dco_clk_cnt !== 0)   tb_error("====== LPM4 TEST 11: DCO_CLK IS RUNNING     AFTER IRQ =====");
682
      if (mclk_cnt    !== 0)   tb_error("====== LPM4 TEST 12: MCLK    IS RUNNING     AFTER IRQ =====");
683
`ifdef SCG1_EN
684
      if (smclk_cnt   !== 0)   tb_error("====== LPM4 TEST 13: SMCLK   IS RUNNING     AFTER IRQ =====");
685
`else
686
  `ifdef OSCOFF_EN
687
      if (smclk_cnt   !== 0)   tb_error("====== LPM4 TEST 13: SMCLK   IS RUNNING     AFTER IRQ =====");
688
  `else
689
      if (smclk_cnt   <   3)   tb_error("====== LPM4 TEST 13: SMCLK   IS NOT RUNNING     AFTER IRQ =====");
690
  `endif
691
`endif
692
`ifdef OSCOFF_EN
693
      if (aclk_cnt    !== 0)   tb_error("====== LPM4 TEST 14: ACLK    IS RUNNING     AFTER IRQ =====");
694
`else
695
  `ifdef LFXT_DOMAIN
696
      if (aclk_cnt    <   3)   tb_error("====== LPM4 TEST 14: ACLK    IS NOT RUNNING     AFTER IRQ =====");
697
  `else
698
      if (aclk_cnt    !== 0)   tb_error("====== LPM4 TEST 14: ACLK    IS RUNNING AFTER IRQ    =====");
699
  `endif
700
`endif
701
      if (inst_cnt    !== 0)   tb_error("====== LPM4 TEST 15: CPU IS EXECUTING AFTER IRQ       =====");
702
      dco_clk_cnt  = 0;
703
      mclk_cnt     = 0;
704
      smclk_cnt    = 0;
705
      aclk_cnt     = 0;
706
      inst_cnt     = 0;
707
 
708
                                         //---------- PORT2 IRQ TRIAL (EXITING POWER MODE) -------------//
709
      wkup[3] = 1'b1;
710 200 olivier.gi
      @(posedge irq_acc[`IRQ_NR-13]); // IRQ_ACC-3
711 134 olivier.gi
      #(100*50);
712
      dco_clk_cnt  = 0;
713
      mclk_cnt     = 0;
714
      smclk_cnt    = 0;
715
      aclk_cnt     = 0;
716
      inst_cnt     = 0;
717
      #(100*50);
718
      if (dco_clk_cnt !== 100) tb_error("====== LPM4 TEST 16: DCO_CLK IS NOT RUNNING DURING IRQ =====");
719
      if (mclk_cnt    !== 100) tb_error("====== LPM4 TEST 17: MCLK    IS NOT RUNNING DURING IRQ =====");
720
      if (smclk_cnt   <   3)   tb_error("====== LPM4 TEST 18: SMCLK   IS NOT RUNNING DURING IRQ =====");
721
  `ifdef LFXT_DOMAIN
722
      if (aclk_cnt    <   3)   tb_error("====== LPM4 TEST 19: ACLK    IS NOT RUNNING DURING IRQ =====");
723
  `else
724
      if (aclk_cnt    !== 100) tb_error("====== LPM4 TEST 19: ACLK    IS NOT RUNNING DURING IRQ =====");
725
  `endif
726
      if (inst_cnt    <  60)   tb_error("====== LPM4 TEST 20: CPU IS NOT EXECUTING DURING IRQ   =====");
727
      @(r13==16'hbbbb);
728
      wkup[3] = 1'b0;
729 202 olivier.gi
 
730 134 olivier.gi
      #(100*50);
731
      dco_clk_cnt  = 0;
732
      mclk_cnt     = 0;
733
      smclk_cnt    = 0;
734
      aclk_cnt     = 0;
735
      inst_cnt     = 0;
736
      #(100*50);
737
      if (dco_clk_cnt !== 100) tb_error("====== LPM4 TEST 21: DCO_CLK IS NOT RUNNING AFTER IRQ =====");
738
      if (mclk_cnt    !== 100) tb_error("====== LPM4 TEST 22: MCLK    IS NOT RUNNING AFTER IRQ =====");
739
      if (smclk_cnt   <   3)   tb_error("====== LPM4 TEST 23: SMCLK   IS NOT RUNNING AFTER IRQ =====");
740
  `ifdef LFXT_DOMAIN
741
      if (aclk_cnt    <   3)   tb_error("====== LPM4 TEST 24: ACLK    IS NOT RUNNING AFTER IRQ =====");
742
  `else
743
      if (aclk_cnt    !== 100) tb_error("====== LPM4 TEST 24: ACLK    IS NOT RUNNING AFTER IRQ =====");
744
  `endif
745
      if (inst_cnt    <  60)   tb_error("====== LPM4 TEST 25: CPU IS NOT EXECUTING AFTER IRQ   =====");
746
      dco_clk_cnt  = 0;
747
      mclk_cnt     = 0;
748
      smclk_cnt    = 0;
749
      aclk_cnt     = 0;
750
      inst_cnt     = 0;
751
 
752
 
753
 
754
`else
755 202 olivier.gi
      tb_skip_finish("|   (this test is not supported in FPGA mode)   |");
756
`endif
757 134 olivier.gi
 
758
      stimulus_done = 1;
759
   end

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.