for_fsm.cpp revision 12855:588919e0e4aa
12929Sktlim@umich.edu/*****************************************************************************
22929Sktlim@umich.edu
32932Sktlim@umich.edu  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
42929Sktlim@umich.edu  more contributor license agreements.  See the NOTICE file distributed
52929Sktlim@umich.edu  with this work for additional information regarding copyright ownership.
62929Sktlim@umich.edu  Accellera licenses this file to you under the Apache License, Version 2.0
72929Sktlim@umich.edu  (the "License"); you may not use this file except in compliance with the
82929Sktlim@umich.edu  License.  You may obtain a copy of the License at
92929Sktlim@umich.edu
102929Sktlim@umich.edu    http://www.apache.org/licenses/LICENSE-2.0
112929Sktlim@umich.edu
122929Sktlim@umich.edu  Unless required by applicable law or agreed to in writing, software
132929Sktlim@umich.edu  distributed under the License is distributed on an "AS IS" BASIS,
142929Sktlim@umich.edu  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
152929Sktlim@umich.edu  implied.  See the License for the specific language governing
162929Sktlim@umich.edu  permissions and limitations under the License.
172929Sktlim@umich.edu
182929Sktlim@umich.edu *****************************************************************************/
192929Sktlim@umich.edu
202929Sktlim@umich.edu/*****************************************************************************
212929Sktlim@umich.edu
222929Sktlim@umich.edu  for_fsm.cpp --
232929Sktlim@umich.edu
242929Sktlim@umich.edu  Original Author: Rocco Jonack, Synopsys, Inc., 1999-07-29
252929Sktlim@umich.edu
262929Sktlim@umich.edu *****************************************************************************/
272929Sktlim@umich.edu
282932Sktlim@umich.edu/*****************************************************************************
292932Sktlim@umich.edu
302932Sktlim@umich.edu  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
312929Sktlim@umich.edu  changes you are making here.
326007Ssteve.reinhardt@amd.com
337735SAli.Saidi@ARM.com      Name, Affiliation, Date:
342929Sktlim@umich.edu  Description of Modification:
352929Sktlim@umich.edu
362929Sktlim@umich.edu *****************************************************************************/
372929Sktlim@umich.edu
382929Sktlim@umich.edu
392929Sktlim@umich.edu#include "for_fsm.h"
402929Sktlim@umich.edu
412929Sktlim@umich.edu#define max 10
422929Sktlim@umich.edu
432929Sktlim@umich.eduvoid for_fsm::entry()
442929Sktlim@umich.edu{
452929Sktlim@umich.edu
462929Sktlim@umich.edu  int  i, inp_tmp;
476007Ssteve.reinhardt@amd.com
486007Ssteve.reinhardt@amd.com  // reset_loop
496007Ssteve.reinhardt@amd.com  if (reset.read()==true) {
506007Ssteve.reinhardt@amd.com    result.write(0);
516007Ssteve.reinhardt@amd.com    out_valid.write(false);
526007Ssteve.reinhardt@amd.com    wait();
536007Ssteve.reinhardt@amd.com  } else wait();
546007Ssteve.reinhardt@amd.com
556007Ssteve.reinhardt@amd.com  //----------
566007Ssteve.reinhardt@amd.com  // main loop
576007Ssteve.reinhardt@amd.com  //----------
586007Ssteve.reinhardt@amd.com  while(1) {
596007Ssteve.reinhardt@amd.com
606007Ssteve.reinhardt@amd.com    // read inputs
616007Ssteve.reinhardt@amd.com    while (in_valid.read()==false) wait();
626007Ssteve.reinhardt@amd.com
636007Ssteve.reinhardt@amd.com    // execution of for loop
646007Ssteve.reinhardt@amd.com    out_valid.write(true);
656007Ssteve.reinhardt@amd.com    wait();
666007Ssteve.reinhardt@amd.com    for (i=1; i<=max; i++) {
676007Ssteve.reinhardt@amd.com      inp_tmp = in_value.read();
686007Ssteve.reinhardt@amd.com      result.write(inp_tmp);
696007Ssteve.reinhardt@amd.com      wait();
706007Ssteve.reinhardt@amd.com    };
716007Ssteve.reinhardt@amd.com    out_valid.write(false);
726007Ssteve.reinhardt@amd.com    wait(5);
736007Ssteve.reinhardt@amd.com
746007Ssteve.reinhardt@amd.com    // execution of for loop with continues
756007Ssteve.reinhardt@amd.com    out_valid.write(true);
762929Sktlim@umich.edu    wait();
772929Sktlim@umich.edu    for (i=1; i<=max; i++) {
782929Sktlim@umich.edu      inp_tmp = in_value.read();
796007Ssteve.reinhardt@amd.com      if (i==8) {
806007Ssteve.reinhardt@amd.com	wait();
816007Ssteve.reinhardt@amd.com	continue;
826007Ssteve.reinhardt@amd.com      } else if (inp_tmp<5 && i!=1) {
836007Ssteve.reinhardt@amd.com	wait();
846007Ssteve.reinhardt@amd.com	continue;
852929Sktlim@umich.edu      } else {
862929Sktlim@umich.edu	result.write(inp_tmp);
872929Sktlim@umich.edu	wait();
882929Sktlim@umich.edu      };
892929Sktlim@umich.edu    };
906011Ssteve.reinhardt@amd.com    out_valid.write(false);
916007Ssteve.reinhardt@amd.com    wait(5);
926007Ssteve.reinhardt@amd.com
936007Ssteve.reinhardt@amd.com    // for loop with break
946007Ssteve.reinhardt@amd.com    out_valid.write(true);
956007Ssteve.reinhardt@amd.com    wait();
966007Ssteve.reinhardt@amd.com    for (i=1; i<=max; i++) {
976007Ssteve.reinhardt@amd.com      inp_tmp = in_value.read();
986007Ssteve.reinhardt@amd.com      if (inp_tmp==7) {
996007Ssteve.reinhardt@amd.com	wait();
1006007Ssteve.reinhardt@amd.com	break;
1016007Ssteve.reinhardt@amd.com      } else {
1026007Ssteve.reinhardt@amd.com	result.write(inp_tmp);
1036007Ssteve.reinhardt@amd.com	wait();
1046007Ssteve.reinhardt@amd.com      };
1057735SAli.Saidi@ARM.com    };
1066011Ssteve.reinhardt@amd.com    out_valid.write(false);
1076007Ssteve.reinhardt@amd.com    wait();
1086007Ssteve.reinhardt@amd.com
1096007Ssteve.reinhardt@amd.com  }
1106007Ssteve.reinhardt@amd.com}
1117735SAli.Saidi@ARM.com
1127735SAli.Saidi@ARM.com// EOF
1137735SAli.Saidi@ARM.com
1147735SAli.Saidi@ARM.com