pr-207_mem.cpp revision 12855
12SN/A/*****************************************************************************
22188SN/A
32SN/A  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
42SN/A  more contributor license agreements.  See the NOTICE file distributed
52SN/A  with this work for additional information regarding copyright ownership.
62SN/A  Accellera licenses this file to you under the Apache License, Version 2.0
72SN/A  (the "License"); you may not use this file except in compliance with the
82SN/A  License.  You may obtain a copy of the License at
92SN/A
102SN/A    http://www.apache.org/licenses/LICENSE-2.0
112SN/A
122SN/A  Unless required by applicable law or agreed to in writing, software
132SN/A  distributed under the License is distributed on an "AS IS" BASIS,
142SN/A  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
152SN/A  implied.  See the License for the specific language governing
162SN/A  permissions and limitations under the License.
172SN/A
182SN/A *****************************************************************************/
192SN/A
202SN/A/*****************************************************************************
212SN/A
222SN/A  pr-207_mem.cpp --
232SN/A
242SN/A  Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15
252SN/A
262SN/A *****************************************************************************/
272665SN/A
282665SN/A/*****************************************************************************
292665SN/A
302SN/A  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
312SN/A  changes you are making here.
322683Sktlim@umich.edu
332683Sktlim@umich.edu      Name, Affiliation, Date:
342SN/A  Description of Modification:
356313Sgblack@eecs.umich.edu
362190SN/A *****************************************************************************/
376329Sgblack@eecs.umich.edu
384997Sgblack@eecs.umich.edu#include "systemc.h"
396316Sgblack@eecs.umich.edu
406216Snate@binkert.orgstruct my_pair {
411858SN/A    char x;
422680SN/A    char y;
432683Sktlim@umich.edu};
442395SN/A
452190SN/Atypedef sc_signal<bool>          sig_bool;
462188SN/Atypedef sc_signal<char>          sig_char;
47217SN/Atypedef sc_signal<unsigned char> sig_uchar;
482SN/A
492SN/ASC_MODULE( pr207 )
502SN/A{
511858SN/A    SC_HAS_PROCESS( pr207 );
522SN/A
531070SN/A    sc_in_clk clk;
541070SN/A
551917SN/A    pr207(sc_module_name NAME,
561917SN/A          sc_clock& CLK,
572521SN/A
582521SN/A          const sig_bool& RESET,
592521SN/A          const sig_bool& START,
603548Sgblack@eecs.umich.edu          const sig_char& C1,
613548Sgblack@eecs.umich.edu          const sig_char& C2,
623548Sgblack@eecs.umich.edu          const sig_uchar& IDX1,
633548Sgblack@eecs.umich.edu          const sig_uchar& IDX2,
642330SN/A                sig_char& D1,
652330SN/A                sig_char& D2,
662SN/A                sig_bool& READY
672SN/A          )
68360SN/A        :
692462SN/A          reset(RESET),
702420SN/A          start(START),
712SN/A          c1(C1),
722SN/A          c2(C2),
732SN/A          idx1(IDX1),
742683Sktlim@umich.edu          idx2(IDX2),
752683Sktlim@umich.edu          d1(D1),
762683Sktlim@umich.edu          d2(D2),
772683Sktlim@umich.edu          ready(READY)
782683Sktlim@umich.edu    {
792683Sktlim@umich.edu        clk(CLK);
802683Sktlim@umich.edu		SC_CTHREAD( entry, clk.pos() );
812683Sktlim@umich.edu        reset_signal_is(reset,true);
822683Sktlim@umich.edu    }
832683Sktlim@umich.edu    void entry();
842683Sktlim@umich.edu
852683Sktlim@umich.edu    const sig_bool& reset;
862683Sktlim@umich.edu    const sig_bool& start;
872683Sktlim@umich.edu    const sig_char& c1;
882683Sktlim@umich.edu    const sig_char& c2;
892SN/A    const sig_uchar& idx1;
902683Sktlim@umich.edu    const sig_uchar& idx2;
912SN/A          sig_char& d1;
922107SN/A          sig_char& d2;
932107SN/A          sig_bool& ready;
942159SN/A
952455SN/A};
962455SN/A
972SN/Avoid
982680SN/Apr207::entry()
992SN/A{
1002190SN/A    my_pair pair_array[10];
1016315Sgblack@eecs.umich.edu
1026315Sgblack@eecs.umich.edu    ready = true;
1036315Sgblack@eecs.umich.edu    d1 = 0;
1046315Sgblack@eecs.umich.edu    d2 = 0;
1056316Sgblack@eecs.umich.edu    wait();
1066313Sgblack@eecs.umich.edu    while (true) {
1072SN/A        do { wait(); } while (start == 0);
1086324Sgblack@eecs.umich.edu        ready = false;
1096324Sgblack@eecs.umich.edu        wait();
1106324Sgblack@eecs.umich.edu        pair_array[idx1.read()].x = c1;
1116324Sgblack@eecs.umich.edu        pair_array[idx1.read()].y = c2;
1126324Sgblack@eecs.umich.edu        wait();
1136324Sgblack@eecs.umich.edu        pair_array[idx2.read()] = pair_array[idx1.read()];
1146324Sgblack@eecs.umich.edu        wait();
1156324Sgblack@eecs.umich.edu        char d1_tmp = pair_array[idx2.read()].y;
1166324Sgblack@eecs.umich.edu        wait();
1176324Sgblack@eecs.umich.edu        char d2_tmp = pair_array[idx2.read()].x;
1186324Sgblack@eecs.umich.edu        wait();
1196324Sgblack@eecs.umich.edu        d1 = d1_tmp;
1206324Sgblack@eecs.umich.edu        d2 = d2_tmp;
1216324Sgblack@eecs.umich.edu        ready = true;
1226324Sgblack@eecs.umich.edu    }
1236324Sgblack@eecs.umich.edu}
1246324Sgblack@eecs.umich.edu
1256324Sgblack@eecs.umich.eduint sc_main(int argc, char* argv[] )
1266324Sgblack@eecs.umich.edu{
1276324Sgblack@eecs.umich.edu   return 0;
1286324Sgblack@eecs.umich.edu}
1296324Sgblack@eecs.umich.edu
1302190SN/A