Hi,

I want to add a new object in the SLICC code that has some getter functions
to read some values from the command line and use it within the SLICC code,
however, I got the following error:
fatal: system.cp_cntrl0.class_one without default or user set value

In order to add a new object, I have added a structure in
gem5/src/mem/protocol/RubySlicc_Types.sm file with (external = "yes")

structure (NEWCLASS, external = "yes") {
  int getX1();
  int getX2();
  int getX3();
}

and added the equivalent py, cc, and hh files in the structure
gem5/src/mem/ruby/structures following the instructions listed in the
following link:
http://www.lowepower.com/jason/learning_gem5/part2/simobject.html

from m5.params import *
from m5.proxy import *
from m5.SimObject import SimObject

class NEWCLASS(SimObject):
    type = 'NEWCLASS'
    cxx_class = 'NEWCLASS'
    cxx_header = "mem/ruby/structures/NEWCLASS.hh"

    X1 = Param.Int(0, "X1")
    X2 = Param.Int(0, "X2")
    X3 = Param.Int(0, "X3")

-----------------------------

#ifndef __MEM_RUBY_STRUCTURES_NEWCLASS_HH__
#define __MEM_RUBY_STRUCTURES_NEWCLASS_HH__

#include <iostream>
#include <string>

#include "params/NEWCLASS.hh"
#include "sim/sim_object.hh"

class NEWCLASS : public SimObject
{
  public:
    typedef NEWCLASSParams Params;
    NEWCLASS(const Params *p);
    ~NEWCLASS();

    int getX1();
    int geX2();
    int getX3();

  private:
    int m_X1;
    int m_X2;
    int m_X3;
};

#endif // __MEM_RUBY_STRUCTURES_NEWCLASS_HH__

-----------------------------

#include "mem/ruby/structures/NEWCLASS.hh"

using namespace std;

NEWCLASS::NEWCLASS(const Params *p)
    : SimObject(p)
{
    m_X1 = p->X1;
    m_X2 = p->X2;
    m_X3 = p->X3;
}

NEWCLASS::~NEWCLASS()
{
}

int
NEWCLASS::getX1()
{
    return m_X1;
}

int
NEWCLASS::getX2()
{
    return m_X2;
}

int
NEWCLASS::getX3()
{
    return m_X3;
}

NEWCLASS*
NEWCLASS::create()
{
    return new NEWCLASS(this);
}

Then, I have updated the required sm files by creating an object of the
structure

e.g.
machine(MachineType:TCP, "GPU TCP (L1 Data Cache)")
 : GPUCoalescer* coalescer;
   Sequencer* sequencer;
   bool use_seq_not_coal;
   CacheMemory * L1cache;
   int TCC_select_num_bits;
   Cycles issue_latency := 40;  // time to send data down to TCC
   Cycles l2_hit_latency := 18;
   NEWCLASS* new_class;
   ....

and using the created object to call the getter functions

xyz + new_class.getX1()

As for the options, I have updated the gem5/configs/example/apu_se.py to
add new options.

# NEWCLASS options
...
parser.add_option("--X1", type="int", default=0, help="")
parser.add_option("--X2", type="int", default=0, help="")
parser.add_option("--X3", type="int", default=0, help="")
....

Additionally, I have updated the following files:
-> gem5/src/mem/ruby/SConscript
MakeInclude('structures/NEWCLASS.hh')

-> gem5/src/mem/ruby/structures/SConscript
SimObject('NEWCLASS.py')
Source('NEWCLASS.cc')

-> gem5/src/mem/slicc/symbols/StateMachine.py
python_class_map = {
                    "int": "Int",
                    "NodeID": "Int",
                    "uint32_t" : "UInt32",
                    "std::string": "String",
                    ...
                    "NEWCLASS":"NEWCLASS",
                   }

Also, I have updated the corresponding py files in the gem5/configs/ruby to
initialize the new object. I created another python class that initialize
the object by the options from the command line.

For example, in gem5/configs/ruby/GPU_RfO.py file, I added the following
class

class CLSONE(CLASSONE, CntrlBase):
    def create(self, options, ruby_system, system):
        self.X1 = options.X1
        self.X2 = options.X2
        self.X3 = options.X3

and updated the TCPCntrl class with the following

class TCPCntrl(TCP_Controller, CntrlBase):

    def create(self, options, ruby_system, system):
        self.version = self.versionCount()

        ...
        self.new_class = CLSONE()
        self.new_class.create(options, ruby_system, system)
        ...

Finally, I build gem5 using the following:
scons -j 17 build/HSAIL_X86/gem5.opt

and when I tried to run the simulator, I got he following error:
fatal: system.cp_cntrl0.class_one without default or user set value

Can you point the cause? From what I understand, the created object needs
to be initialized, however,  I don't know where I should initialize other
than what I have already mentioned.

Thanks.

-- 
Regard,
Mohamed Ibrahim
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to