112855Sgabeblack@google.com/*****************************************************************************
212855Sgabeblack@google.com
312855Sgabeblack@google.com  Licensed to Accellera Systems Initiative Inc. (Accellera) under one or
412855Sgabeblack@google.com  more contributor license agreements.  See the NOTICE file distributed
512855Sgabeblack@google.com  with this work for additional information regarding copyright ownership.
612855Sgabeblack@google.com  Accellera licenses this file to you under the Apache License, Version 2.0
712855Sgabeblack@google.com  (the "License"); you may not use this file except in compliance with the
812855Sgabeblack@google.com  License.  You may obtain a copy of the License at
912855Sgabeblack@google.com
1012855Sgabeblack@google.com    http://www.apache.org/licenses/LICENSE-2.0
1112855Sgabeblack@google.com
1212855Sgabeblack@google.com  Unless required by applicable law or agreed to in writing, software
1312855Sgabeblack@google.com  distributed under the License is distributed on an "AS IS" BASIS,
1412855Sgabeblack@google.com  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
1512855Sgabeblack@google.com  implied.  See the License for the specific language governing
1612855Sgabeblack@google.com  permissions and limitations under the License.
1712855Sgabeblack@google.com
1812855Sgabeblack@google.com *****************************************************************************/
1912855Sgabeblack@google.com
2012855Sgabeblack@google.com/*****************************************************************************
2112855Sgabeblack@google.com
2212855Sgabeblack@google.com  io_controller1.h --
2312855Sgabeblack@google.com
2412855Sgabeblack@google.com  Original Author: Martin Janssen, Synopsys, Inc., 2002-02-15
2512855Sgabeblack@google.com
2612855Sgabeblack@google.com *****************************************************************************/
2712855Sgabeblack@google.com
2812855Sgabeblack@google.com/*****************************************************************************
2912855Sgabeblack@google.com
3012855Sgabeblack@google.com  MODIFICATION LOG - modifiers, enter your name, affiliation, date and
3112855Sgabeblack@google.com  changes you are making here.
3212855Sgabeblack@google.com
3312855Sgabeblack@google.com      Name, Affiliation, Date:
3412855Sgabeblack@google.com  Description of Modification:
3512855Sgabeblack@google.com
3612855Sgabeblack@google.com *****************************************************************************/
3712855Sgabeblack@google.com
3812855Sgabeblack@google.com/*
3912855Sgabeblack@google.com############################################################################
4012855Sgabeblack@google.com#  Siemens AG                        copyright 2000
4112855Sgabeblack@google.com#                                    All Rights Reserved
4212855Sgabeblack@google.com#
4312855Sgabeblack@google.com#  File name : io_controller.h
4412855Sgabeblack@google.com#
4512855Sgabeblack@google.com#  Title     : I/O-Controller
4612855Sgabeblack@google.com#
4712855Sgabeblack@google.com#  Purpose   : definitions for I/O-Controller-module
4812855Sgabeblack@google.com#
4912855Sgabeblack@google.com#  Author    : Hannes Muhr
5012855Sgabeblack@google.com#              PSE EZE MSA
5112855Sgabeblack@google.com#
5212855Sgabeblack@google.com##############################################################################
5312855Sgabeblack@google.com#  Modification History :
5412855Sgabeblack@google.com#
5512855Sgabeblack@google.com#
5612855Sgabeblack@google.com##############################################################################*/
5712855Sgabeblack@google.com
5812855Sgabeblack@google.com#ifndef IO_CONTROLLER_INC
5912855Sgabeblack@google.com#define IO_CONTROLLER_INC
6012855Sgabeblack@google.com
6112855Sgabeblack@google.com#ifdef LOGGING
6212855Sgabeblack@google.com#include <fstream>
6312855Sgabeblack@google.com#endif
6412855Sgabeblack@google.com#include "systemc.h"
6512855Sgabeblack@google.com
6612855Sgabeblack@google.com
6712855Sgabeblack@google.com#ifdef LOGGING
6812855Sgabeblack@google.com/* stream for logging */
6912855Sgabeblack@google.comextern ofstream flog;
7012855Sgabeblack@google.com#endif
7112855Sgabeblack@google.com
7212855Sgabeblack@google.com#define SCAN_INTERVAL 200000   // 200 us
7312855Sgabeblack@google.com#define NS *1e-9
7412855Sgabeblack@google.com
7512855Sgabeblack@google.com#define MII_FRAME_SIZE 400
7612855Sgabeblack@google.com
7712855Sgabeblack@google.comSC_MODULE(io_controller_m){
7812855Sgabeblack@google.com
7912855Sgabeblack@google.com   /* ports */
8012855Sgabeblack@google.com   sc_in_clk clk_i486_if;
8112855Sgabeblack@google.com
8212855Sgabeblack@google.com   sc_out<sc_uint<30> > addr30_o1;
8312855Sgabeblack@google.com   sc_out<sc_uint<30> > addr30_o2;
8412855Sgabeblack@google.com   sc_inout<sc_uint<32> > data32_i;
8512855Sgabeblack@google.com   sc_out<sc_uint<32> > data32_o1;
8612855Sgabeblack@google.com   sc_out<sc_uint<32> > data32_o2;
8712855Sgabeblack@google.com   sc_out<bool> ads_n_o1;
8812855Sgabeblack@google.com   sc_out<bool> ads_n_o2;
8912855Sgabeblack@google.com   sc_out<bool> wr_n_o1;
9012855Sgabeblack@google.com   sc_out<bool> wr_n_o2;
9112855Sgabeblack@google.com   sc_in<bool> rdy_n_i;
9212855Sgabeblack@google.com   sc_in<bool> ar_i;
9312855Sgabeblack@google.com   sc_in<bool> res_n_i;
9412855Sgabeblack@google.com
9512855Sgabeblack@google.com   sc_out<sc_uint<4> > mii_data4_o;
9612855Sgabeblack@google.com   sc_out<bool> mii_en_o;
9712855Sgabeblack@google.com   sc_in<sc_uint<4> > mii_data4_i;
9812855Sgabeblack@google.com   sc_in<bool> mii_en_i;
9912855Sgabeblack@google.com   sc_in<bool> mii_coll_det;
10012855Sgabeblack@google.com   sc_in_clk clk_mii;
10112855Sgabeblack@google.com
10212855Sgabeblack@google.com   /* signals */
10312855Sgabeblack@google.com   sc_signal<bool> start_mux;
10412855Sgabeblack@google.com   sc_signal<bool> ready_mux;
10512855Sgabeblack@google.com   sc_signal<bool> start_read;
10612855Sgabeblack@google.com   sc_signal<bool> out_fifo_reset;
10712855Sgabeblack@google.com
10812855Sgabeblack@google.com   /* variables */
10912855Sgabeblack@google.com   sc_uint<32> addr_tx_frame_ptr;
11012855Sgabeblack@google.com   sc_uint<32> rx_ptr_array;
11112855Sgabeblack@google.com   sc_signal<bool>  sem1;      // mutual exclusion for i486-if
11212855Sgabeblack@google.com   sc_signal<bool>  sem2;      // mutual exclusion for i486-if
11312855Sgabeblack@google.com   sc_uint<32> shared_mem1[MII_FRAME_SIZE];  // for write
11412855Sgabeblack@google.com   sc_uint<32> shared_mem2[MII_FRAME_SIZE];  // for read
11512855Sgabeblack@google.com
11612855Sgabeblack@google.com   SC_CTOR(io_controller_m){
11712855Sgabeblack@google.com
11812855Sgabeblack@google.com      SC_CTHREAD(control_write, clk_i486_if.pos());
11912855Sgabeblack@google.com      //reset_signal_is(mii_coll_det, true);
12012855Sgabeblack@google.com	  reset_signal_is(res_n_i, false);
12112855Sgabeblack@google.com
12212855Sgabeblack@google.com      SC_CTHREAD(control_read, clk_i486_if.pos());
12312855Sgabeblack@google.com
12412855Sgabeblack@google.com      SC_CTHREAD(mux, clk_mii.pos());
12512855Sgabeblack@google.com      SC_CTHREAD(shift, clk_mii.pos());
12612855Sgabeblack@google.com
12712855Sgabeblack@google.com
12812855Sgabeblack@google.com      /* Initialize */
12912855Sgabeblack@google.com      start_mux = 0;
13012855Sgabeblack@google.com      ready_mux = 0;
13112855Sgabeblack@google.com      start_read = 0;
13212855Sgabeblack@google.com      out_fifo_reset = 0;
13312855Sgabeblack@google.com
13412855Sgabeblack@google.com      sem1 = false;
13512855Sgabeblack@google.com      sem2 = false;
13612855Sgabeblack@google.com      // init shared memory
13712855Sgabeblack@google.com      for (int i=0; i < MII_FRAME_SIZE; i++)
13812855Sgabeblack@google.com         shared_mem1[i] = shared_mem2[i] = 0;
13912855Sgabeblack@google.com   }
14012855Sgabeblack@google.com   void control_write();
14112855Sgabeblack@google.com   void control_read();
14212855Sgabeblack@google.com   void mux();
14312855Sgabeblack@google.com   void shift();
14412855Sgabeblack@google.com   sc_uint<32> read_from_memory0(sc_uint<32>);
14512855Sgabeblack@google.com   sc_uint<32> read_from_memory1(sc_uint<32>);
14612855Sgabeblack@google.com   void write_into_memory0(sc_uint<32>, sc_uint<32>);
14712855Sgabeblack@google.com   void write_into_memory1(sc_uint<32>, sc_uint<32>);
14812855Sgabeblack@google.com
14912855Sgabeblack@google.com};
15012855Sgabeblack@google.com
15112855Sgabeblack@google.com#endif
152