async_reset.cpp revision 12855:588919e0e4aa
1/***************************************************************************** 2 3 Licensed to Accellera Systems Initiative Inc. (Accellera) under one or 4 more contributor license agreements. See the NOTICE file distributed 5 with this work for additional information regarding copyright ownership. 6 Accellera licenses this file to you under the Apache License, Version 2.0 7 (the "License"); you may not use this file except in compliance with the 8 License. You may obtain a copy of the License at 9 10 http://www.apache.org/licenses/LICENSE-2.0 11 12 Unless required by applicable law or agreed to in writing, software 13 distributed under the License is distributed on an "AS IS" BASIS, 14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 15 implied. See the License for the specific language governing 16 permissions and limitations under the License. 17 18 *****************************************************************************/ 19 20// async_reset.cpp 21// 22// Original Author: John Aynsley, Doulos, Inc. 23// 24// MODIFICATION LOG - modifiers, enter your name, affiliation, date and 25// 26// $Log: async_reset.cpp,v $ 27// Revision 1.3 2011/05/08 19:18:45 acg 28// Andy Goodrich: remove extraneous + prefixes from git diff. 29// 30 31// async_reset_signal_is 32 33#define SC_INCLUDE_DYNAMIC_PROCESSES 34 35#include <systemc> 36using namespace sc_core; 37using std::cout; 38using std::endl; 39 40struct Top: sc_module 41{ 42 Top(sc_module_name _name) 43 : count(0) 44 { 45 clk_port.bind(clk); 46 47 SC_THREAD(ctrl); 48 49 SC_CTHREAD(CT, clk_port.value_changed()); 50 async_reset_signal_is(areset, true); 51 ct = sc_get_current_process_handle(); 52 53 sc_spawn_options opt; 54 opt.async_reset_signal_is(areset, true); 55 t = sc_spawn(sc_bind(&Top::T, this), "T", &opt); 56 57 opt.spawn_method(); 58 opt.dont_initialize(); 59 opt.set_sensitivity( &clk ); 60 m = sc_spawn(sc_bind(&Top::M, this), "M", &opt); 61 62 SC_CTHREAD(CT2, clk_port.pos()) 63 async_reset_signal_is(areset1, true); 64 async_reset_signal_is(areset2, true); 65 async_reset_signal_is(areset3, true); 66 reset_signal_is(sreset1, true); 67 reset_signal_is(sreset2, true); 68 reset_signal_is(sreset3, true); 69 ct2 = sc_get_current_process_handle(); 70 ct2.disable(); 71 72 SC_THREAD(T2) 73 sensitive << clk_port.pos(); 74 async_reset_signal_is(areset1, true); 75 async_reset_signal_is(areset2, true); 76 async_reset_signal_is(areset3, true); 77 reset_signal_is(sreset1, true); 78 reset_signal_is(sreset2, true); 79 reset_signal_is(sreset3, true); 80 t2 = sc_get_current_process_handle(); 81 t2.disable(); 82 83 clk.write(false); 84 areset.write(false); 85 86 f1 = f2 = f3 = f4 = f5 = f6 = f7 = f8 = f9 = 0; 87 f10 = f11 = f12 = f13 = f14 = f15 = f16 = f17 = f18 = f19 = 0; 88 f20 = f21 = f22 = f23 = f24 = f25 = f26 = f27 = f28 = f29 = 0; 89 f30 = f31 = f32 = f33 = f34 = f35 = f36 = f37 = f38 = f39 = 0; 90 f40 = f41 = f42 = f43 = f44 = f45 = f46 = f47 = f48 = f49 = 0; 91 f50 = f51 = f52 = f53 = f54 = f55 = f56 = f57 = f58 = f59 = 0; 92 f60 = f61 = f62 = f63 = f64 = f65 = f66 = f67 = f68 = f69 = 0; 93 f70 = f71 = f72 = f73 = f74 = f75 = f76 = f77 = f78 = f79 = 0; 94 f80 = f81 = f82 = f83 = f84 = f85 = f86 = f87 = f88 = f89 = 0; 95 } 96 97 sc_signal<bool> clk; 98 sc_in<bool> clk_port; 99 sc_signal<bool> areset; 100 sc_signal<bool> areset1, areset2, areset3, sreset1, sreset2, sreset3; 101 102 sc_process_handle ct, t, m, ct2, t2; 103 int count; 104 105 int f1, f2, f3, f4, f5, f6, f7, f8, f9; 106 int f10, f11, f12, f13, f14, f15, f16, f17, f18, f19; 107 int f20, f21, f22, f23, f24, f25, f26, f27, f28, f29; 108 int f30, f31, f32, f33, f34, f35, f36, f37, f38, f39; 109 int f40, f41, f42, f43, f44, f45, f46, f47, f48, f49; 110 int f50, f51, f52, f53, f54, f55, f56, f57, f58, f59; 111 int f60, f61, f62, f63, f64, f65, f66, f67, f68, f69; 112 int f70, f71, f72, f73, f74, f75, f76, f77, f78, f79; 113 int f80, f81, f82, f83, f84, f85, f86, f87, f88, f89; 114 115 void ctrl() 116 { 117 sc_assert( sc_delta_count() == 0 ); 118 clock(); 119 wait(SC_ZERO_TIME); 120 wait(SC_ZERO_TIME); 121 122 count = 1; 123 clock(); 124 wait(1, SC_NS); 125 126 count = 2; 127 clock(); 128 wait(10, SC_NS); 129 130 count = 3; 131 clock(); 132 wait(sc_time(20, SC_NS) - sc_time_stamp()); 133 134 count = 4; 135 areset.write(true); 136 wait(1, SC_NS); 137 138 count = 5; 139 areset.write(false); 140 wait(1, SC_NS); 141 142 count = 6; 143 clock(); 144 wait(sc_time(30, SC_NS) - sc_time_stamp()); 145 146 count = 7; 147 areset.write(true); 148 wait(1, SC_NS); 149 150 count = 8; 151 clock(); // Clocked while asynch reset is active 152 wait(1, SC_NS); 153 154 count = 9; 155 clock(); 156 wait(1, SC_NS); 157 158 count = 10; 159 areset.write(false); 160 wait(1, SC_NS); 161 162 count = 11; 163 areset.write(true); 164 wait(1, SC_NS); 165 166 count = 12; 167 areset.write(false); 168 wait(sc_time(40, SC_NS) - sc_time_stamp()); 169 170 count = 13; 171 sync_reset_on(); 172 wait(1, SC_NS); 173 174 count = 14; 175 clock(); 176 wait(1, SC_NS); 177 178 count = 15; 179 sync_reset_off(); 180 wait(sc_time(50, SC_NS) - sc_time_stamp()); 181 182 count = 16; 183 disable(); 184 wait(1, SC_NS); 185 186 count = 17; 187 clock(); 188 wait(1, SC_NS); 189 190 count = 18; 191 sync_reset_on(); 192 clock(); 193 wait(1, SC_NS); 194 195 count = 19; 196 enable(); 197 clock(); 198 wait(1, SC_NS); 199 200 count = 20; 201 sync_reset_off(); 202 clock(); 203 wait(sc_time(60, SC_NS) - sc_time_stamp()); 204 205 count = 21; 206 disable(); 207 wait(1, SC_NS); 208 209 count = 22; 210 areset.write(true); 211 wait(1, SC_NS); 212 213 count = 23; 214 clock(); 215 wait(1, SC_NS); 216 217 count = 24; 218 areset.write(false); 219 wait(1, SC_NS); 220 221 count = 25; 222 clock(); 223 wait(1, SC_NS); 224 225 count = 26; 226 areset.write(true); 227 wait(1, SC_NS); 228 229 count = 27; 230 enable(); 231 wait(1, SC_NS); 232 233 count = 28; 234 clock(); 235 wait(1, SC_NS); 236 237 count = 29; 238 areset.write(false); 239 wait(sc_time(100, SC_NS) - sc_time_stamp()); 240 241 count = 30; 242 ct.disable(); 243 t.disable(); 244 m.disable(); 245 246 // Test multiple resets 247 ct2.enable(); 248 t2.enable(); 249 clock2(); 250 251 count = 31; 252 clock2(); 253 254 count = 32; 255 sreset1.write(1); 256 clock2(); 257 258 count = 33; 259 sreset2.write(1); 260 sreset3.write(1); 261 clock2(); 262 263 count = 34; 264 sreset1.write(0); 265 sreset2.write(0); 266 clock2(); 267 268 count = 35; 269 sreset3.write(0); 270 clock2(); 271 272 count = 36; 273 areset1.write(1); 274 areset2.write(1); 275 areset3.write(1); 276 wait(SC_ZERO_TIME); 277 278 count = 37; 279 clock2(); 280 281 count = 38; 282 sreset1.write(1); 283 sreset2.write(1); 284 sreset3.write(1); 285 ct2.sync_reset_on(); 286 t2.sync_reset_on(); 287 clock2(); 288 289 count = 39; 290 areset1.write(0); 291 areset2.write(0); 292 areset3.write(0); 293 sreset1.write(0); 294 sreset2.write(0); 295 sreset3.write(0); 296 clock2(); 297 298 count = 40; 299 ct2.sync_reset_off(); 300 t2.sync_reset_off(); 301 clock2(); 302 303 count = 41; 304 sreset2.write(1); 305 ct2.sync_reset_on(); 306 t2.sync_reset_on(); 307 clock2(); 308 309 count = 42; 310 areset2.write(1); 311 wait(SC_ZERO_TIME); 312 313 count = 43; 314 clock2(); 315 316 count = 44; 317 sreset2.write(0); 318 ct2.sync_reset_off(); 319 t2.sync_reset_off(); 320 clock2(); 321 322 count = 45; 323 areset1.write(0); 324 areset2.write(0); 325 areset3.write(0); 326 sreset1.write(0); 327 sreset2.write(0); 328 sreset3.write(0); 329 clock2(); 330 331 count = 46; 332 ct2.reset(); 333 t2.reset(); 334 wait(SC_ZERO_TIME); 335 336 count = 47; 337 clock2(); 338 } 339 340 void CT() 341 { 342 //cout << "CT() called at " << sc_time_stamp() << endl; 343 switch (count) 344 { 345 case 0: sc_assert( sc_delta_count() == 1 ); f1=1; break; 346 case 4: sc_assert( sc_time_stamp() == sc_time(20, SC_NS) ); f2=1; break; 347 case 7: sc_assert( sc_time_stamp() == sc_time(30, SC_NS) ); f3=1; break; 348 case 8: sc_assert( sc_time_stamp() == sc_time(31, SC_NS) ); f4=1; break; 349 case 9: sc_assert( sc_time_stamp() == sc_time(32, SC_NS) ); f5=1; break; 350 case 11: sc_assert( sc_time_stamp() == sc_time(34, SC_NS) ); f6=1; break; 351 case 14: sc_assert( sc_time_stamp() == sc_time(41, SC_NS) ); f7=1; break; 352 case 19: sc_assert( sc_time_stamp() == sc_time(53, SC_NS) ); f8=1; break; 353 case 22: sc_assert( sc_time_stamp() == sc_time(61, SC_NS) ); f9=1; break; 354 case 26: sc_assert( sc_time_stamp() == sc_time(65, SC_NS) ); f11=1; break; 355 case 28: sc_assert( sc_time_stamp() == sc_time(67, SC_NS) ); f12=1; break; 356 default: sc_assert( false ); break; 357 } 358 while (true) 359 { 360 wait(); 361 //cout << "CT() awoke at " << sc_time_stamp() << endl; 362 363 switch (count) 364 { 365 case 1: sc_assert( sc_delta_count() == 3 ); f13=1; break; 366 case 2: sc_assert( sc_time_stamp() == sc_time(1, SC_NS) ); f14=1; break; 367 case 3: sc_assert( sc_time_stamp() == sc_time(11, SC_NS) ); f15=1; break; 368 case 6: sc_assert( sc_time_stamp() == sc_time(22, SC_NS) ); f16=1; break; 369 case 20: sc_assert( sc_time_stamp() == sc_time(54, SC_NS) ); f17=1; break; 370 default: sc_assert( false ); break; 371 } 372 373 } 374 } 375 376 void T() 377 { 378 //cout << "T() called at " << sc_time_stamp() << endl; 379 switch (count) 380 { 381 case 0: sc_assert( sc_delta_count() == 0 ); f18=1; break; 382 case 4: sc_assert( sc_time_stamp() == sc_time(20, SC_NS) ); f19=1; break; 383 case 7: sc_assert( sc_time_stamp() == sc_time(30, SC_NS) ); f20=1; break; 384 case 8: sc_assert( sc_time_stamp() == sc_time(31, SC_NS) ); f21=1; break; 385 case 9: sc_assert( sc_time_stamp() == sc_time(32, SC_NS) ); f22=1; break; 386 case 11: sc_assert( sc_time_stamp() == sc_time(34, SC_NS) ); f23=1; break; 387 case 14: sc_assert( sc_time_stamp() == sc_time(41, SC_NS) ); f24=1; break; 388 case 19: sc_assert( sc_time_stamp() == sc_time(53, SC_NS) ); f25=1; break; 389 case 22: sc_assert( sc_time_stamp() == sc_time(61, SC_NS) ); f26=1; break; 390 case 26: sc_assert( sc_time_stamp() == sc_time(65, SC_NS) ); f28=1; break; 391 case 28: sc_assert( sc_time_stamp() == sc_time(67, SC_NS) ); f29=1; break; 392 default: sc_assert( false ); break; 393 } 394 while (true) 395 { 396 wait(clk.default_event()); 397 //cout << "T() awoke at " << sc_time_stamp() << endl; 398 399 switch (count) 400 { 401 case 0: sc_assert( sc_delta_count() == 1 ); f30=1; break; 402 case 1: sc_assert( sc_delta_count() == 3 ); f31=1; break; 403 case 2: sc_assert( sc_time_stamp() == sc_time(1, SC_NS) ); f32=1; break; 404 case 3: sc_assert( sc_time_stamp() == sc_time(11, SC_NS) ); f33=1; break; 405 case 6: sc_assert( sc_time_stamp() == sc_time(22, SC_NS) ); f34=1; break; 406 case 20: sc_assert( sc_time_stamp() == sc_time(54, SC_NS) ); f35=1; break; 407 default: sc_assert( false ); break; 408 } 409 410 } 411 } 412 413 void M() 414 { 415 //cout << "M() called at " << sc_time_stamp() << endl; 416 switch (count) 417 { 418 case 0: sc_assert( sc_delta_count() == 1 ); f36=1; break; 419 case 1: sc_assert( sc_delta_count() == 3 ); f37=1; break; 420 case 2: sc_assert( sc_time_stamp() == sc_time(1, SC_NS) ); f38=1; break; 421 case 3: sc_assert( sc_time_stamp() == sc_time(11, SC_NS) ); f39=1; break; 422 case 4: sc_assert( sc_time_stamp() == sc_time(20, SC_NS) ); f83=1; break; 423 case 6: sc_assert( sc_time_stamp() == sc_time(22, SC_NS) ); f40=1; break; 424 case 7: sc_assert( sc_time_stamp() == sc_time(30, SC_NS) ); f84=1; break; 425 case 8: sc_assert( sc_time_stamp() == sc_time(31, SC_NS) ); f41=1; break; 426 case 9: sc_assert( sc_time_stamp() == sc_time(32, SC_NS) ); f42=1; break; 427 case 11: sc_assert( sc_time_stamp() == sc_time(34, SC_NS) ); f85=1; break; 428 case 14: sc_assert( sc_time_stamp() == sc_time(41, SC_NS) ); f43=1; break; 429 case 19: sc_assert( sc_time_stamp() == sc_time(53, SC_NS) ); f44=1; break; 430 case 20: sc_assert( sc_time_stamp() == sc_time(54, SC_NS) ); f45=1; break; 431 case 22: sc_assert( sc_time_stamp() == sc_time(61, SC_NS) ); f26=1; break; 432 case 26: sc_assert( sc_time_stamp() == sc_time(65, SC_NS) ); f86=1; break; 433 case 28: sc_assert( sc_time_stamp() == sc_time(67, SC_NS) ); f46=1; break; 434 default: sc_assert( false ); break; 435 } 436 } 437 438 void CT2() 439 { 440 //cout << "CT2() called at " << sc_time_stamp() << endl; 441 switch (count) 442 { 443 case 30: sc_assert( sc_time_stamp() == sc_time(105, SC_NS) ); f47=1; break; 444 case 32: sc_assert( sc_time_stamp() == sc_time(125, SC_NS) ); f51=1; break; 445 case 33: sc_assert( sc_time_stamp() == sc_time(135, SC_NS) ); f53=1; break; 446 case 34: sc_assert( sc_time_stamp() == sc_time(145, SC_NS) ); f55=1; break; 447 case 36: sc_assert( sc_time_stamp() == sc_time(160, SC_NS) ); f59=1; break; 448 case 37: sc_assert( sc_time_stamp() == sc_time(165, SC_NS) ); f61=1; break; 449 case 38: sc_assert( sc_time_stamp() == sc_time(175, SC_NS) ); f63=1; break; 450 case 39: sc_assert( sc_time_stamp() == sc_time(185, SC_NS) ); f65=1; break; 451 case 41: sc_assert( sc_time_stamp() == sc_time(205, SC_NS) ); f69=1; break; 452 case 42: sc_assert( sc_time_stamp() == sc_time(210, SC_NS) ); f71=1; break; 453 case 43: sc_assert( sc_time_stamp() == sc_time(215, SC_NS) ); f73=1; break; 454 case 44: sc_assert( sc_time_stamp() == sc_time(225, SC_NS) ); f75=1; break; 455 case 46: sc_assert( sc_time_stamp() == sc_time(240, SC_NS) ); f79=1; break; 456 default: sc_assert( false ); break; 457 } 458 while (true) 459 { 460 wait(); 461 //cout << "CT2() awoke at " << sc_time_stamp() << endl; 462 switch (count) 463 { 464 case 31: sc_assert( sc_time_stamp() == sc_time(115, SC_NS) ); f49=1; break; 465 case 35: sc_assert( sc_time_stamp() == sc_time(155, SC_NS) ); f57=1; break; 466 case 40: sc_assert( sc_time_stamp() == sc_time(195, SC_NS) ); f67=1; break; 467 case 45: sc_assert( sc_time_stamp() == sc_time(235, SC_NS) ); f77=1; break; 468 case 47: sc_assert( sc_time_stamp() == sc_time(245, SC_NS) ); f81=1; break; 469 default: sc_assert( false ); break; 470 } 471 } 472 } 473 474 void T2() 475 { 476 //cout << "T2() called at " << sc_time_stamp() << endl; 477 switch (count) 478 { 479 case 30: sc_assert( sc_time_stamp() == sc_time(105, SC_NS) ); f48=1; break; 480 case 32: sc_assert( sc_time_stamp() == sc_time(125, SC_NS) ); f52=1; break; 481 case 33: sc_assert( sc_time_stamp() == sc_time(135, SC_NS) ); f54=1; break; 482 case 34: sc_assert( sc_time_stamp() == sc_time(145, SC_NS) ); f56=1; break; 483 case 36: sc_assert( sc_time_stamp() == sc_time(160, SC_NS) ); f60=1; break; 484 case 37: sc_assert( sc_time_stamp() == sc_time(165, SC_NS) ); f62=1; break; 485 case 38: sc_assert( sc_time_stamp() == sc_time(175, SC_NS) ); f64=1; break; 486 case 39: sc_assert( sc_time_stamp() == sc_time(185, SC_NS) ); f66=1; break; 487 case 41: sc_assert( sc_time_stamp() == sc_time(205, SC_NS) ); f70=1; break; 488 case 42: sc_assert( sc_time_stamp() == sc_time(210, SC_NS) ); f72=1; break; 489 case 43: sc_assert( sc_time_stamp() == sc_time(215, SC_NS) ); f74=1; break; 490 case 44: sc_assert( sc_time_stamp() == sc_time(225, SC_NS) ); f76=1; break; 491 case 46: sc_assert( sc_time_stamp() == sc_time(240, SC_NS) ); f80=1; break; 492 default: sc_assert( false ); break; 493 } 494 while (true) 495 { 496 wait(); 497 //cout << "T2() awoke at " << sc_time_stamp() << endl; 498 switch (count) 499 { 500 case 31: sc_assert( sc_time_stamp() == sc_time(115, SC_NS) ); f50=1; break; 501 case 35: sc_assert( sc_time_stamp() == sc_time(155, SC_NS) ); f58=1; break; 502 case 40: sc_assert( sc_time_stamp() == sc_time(195, SC_NS) ); f68=1; break; 503 case 45: sc_assert( sc_time_stamp() == sc_time(235, SC_NS) ); f78=1; break; 504 case 47: sc_assert( sc_time_stamp() == sc_time(245, SC_NS) ); f82=1; break; 505 default: sc_assert( false ); break; 506 } 507 } 508 } 509 510 void clock() 511 { 512 clk.write( !clk.read() ); 513 } 514 515 void clock2() 516 { 517 clk.write(0); 518 wait(5, SC_NS); 519 clk.write(1); 520 wait(5, SC_NS); 521 } 522 523 void suspend() 524 { 525 ct.suspend(); 526 t.suspend(); 527 m.suspend(); 528 } 529 530 void resume() 531 { 532 ct.resume(); 533 t.resume(); 534 m.resume(); 535 } 536 537 void disable() 538 { 539 ct.disable(); 540 t.disable(); 541 m.disable(); 542 } 543 544 void enable() 545 { 546 ct.enable(); 547 t.enable(); 548 m.enable(); 549 } 550 551 void sync_reset_on() 552 { 553 ct.sync_reset_on(); 554 t.sync_reset_on(); 555 m.sync_reset_on(); 556 } 557 558 void sync_reset_off() 559 { 560 ct.sync_reset_off(); 561 t.sync_reset_off(); 562 m.sync_reset_off(); 563 } 564 565 SC_HAS_PROCESS(Top); 566}; 567 568int sc_main(int argc, char* argv[]) 569{ 570 Top top("top"); 571 572 sc_start(); 573 574 sc_assert(top.f1); 575 sc_assert(top.f2); 576 sc_assert(top.f3); 577 sc_assert(top.f4); 578 sc_assert(top.f5); 579 sc_assert(top.f6); 580 sc_assert(top.f7); 581 sc_assert(top.f8); 582 sc_assert(top.f9); 583 sc_assert(top.f11); 584 sc_assert(top.f12); 585 sc_assert(top.f13); 586 sc_assert(top.f14); 587 sc_assert(top.f15); 588 sc_assert(top.f16); 589 sc_assert(top.f17); 590 sc_assert(top.f18); 591 sc_assert(top.f19); 592 sc_assert(top.f20); 593 sc_assert(top.f21); 594 sc_assert(top.f22); 595 sc_assert(top.f23); 596 sc_assert(top.f24); 597 sc_assert(top.f25); 598 sc_assert(top.f26); 599 sc_assert(top.f28); 600 sc_assert(top.f29); 601 sc_assert(top.f30); 602 sc_assert(top.f31); 603 sc_assert(top.f32); 604 sc_assert(top.f33); 605 sc_assert(top.f34); 606 sc_assert(top.f35); 607 sc_assert(top.f36); 608 sc_assert(top.f37); 609 sc_assert(top.f38); 610 sc_assert(top.f39); 611 sc_assert(top.f40); 612 sc_assert(top.f41); 613 sc_assert(top.f42); 614 sc_assert(top.f43); 615 sc_assert(top.f44); 616 sc_assert(top.f45); 617 sc_assert(top.f46); 618 sc_assert(top.f47); 619 sc_assert(top.f48); 620 sc_assert(top.f49); 621 sc_assert(top.f50); 622 sc_assert(top.f51); 623 sc_assert(top.f52); 624 sc_assert(top.f53); 625 sc_assert(top.f54); 626 sc_assert(top.f55); 627 sc_assert(top.f56); 628 sc_assert(top.f57); 629 sc_assert(top.f58); 630 sc_assert(top.f59); 631 sc_assert(top.f60); 632 sc_assert(top.f61); 633 sc_assert(top.f62); 634 sc_assert(top.f63); 635 sc_assert(top.f64); 636 sc_assert(top.f65); 637 sc_assert(top.f66); 638 sc_assert(top.f67); 639 sc_assert(top.f68); 640 sc_assert(top.f69); 641 sc_assert(top.f70); 642 sc_assert(top.f71); 643 sc_assert(top.f72); 644 sc_assert(top.f73); 645 sc_assert(top.f74); 646 sc_assert(top.f75); 647 sc_assert(top.f76); 648 sc_assert(top.f77); 649 sc_assert(top.f78); 650 sc_assert(top.f79); 651 sc_assert(top.f80); 652 sc_assert(top.f81); 653 sc_assert(top.f82); 654 sc_assert(top.f83); 655 sc_assert(top.f84); 656 sc_assert(top.f85); 657 sc_assert(top.f86); 658 659 cout << endl << "Success" << endl; 660 return 0; 661} 662