Jump to content
rayzekus

SC_CTOR initialization error ???

Recommended Posts

I am a novice at SystemC (some OOP background but not much) ...

I am getting an error for the code below ... ../src/xor2.h:20:31: error: invalid initializer for array member 'nand<2> xor2::nand2 [4]'

I have much more complicated but netted my problem down to this much simpler and smaller example ...

#include "systemc.h"

template <int width>
SC_MODULE(nand) {
    sc_in<bool> A[width];
    sc_out<bool> F;

    void nand_func() {
        F.write(!and_reduce(A));
    }

    SC_CTOR(nand) {
        SC_METHOD(nand_func);
        sensitive << A;
    }
};

#include "systemc.h"

#include "nand.h"

SC_MODULE(xor2) {
    sc_in<bool> A, B;
    sc_out<bool> F;

    nand<2> nand2[4];

    sc_signal<bool> sig1, sig2, sig3;

    SC_CTOR(xor2) : nand2("NAND2") {
        nand2[0].A[0](A);
        nand2[0].A[1](B);
        nand2[0].F(sig1);

        nand2[1].A[0](A);
        nand2[1].A[1](sig1);
        nand2[1].F(sig2);

        nand2[2].A[0](sig1);
        nand2[2].A[1](B);
        nand2[2].F(sig3);

        nand2[3].A[0](sig2);
        nand2[3].A[1](sig3);
        nand2[3].F(F);
    }
};

I would greatly appreciate any help and suggestions of ways to use multiple template'd modules in this way ...

 

xor2.h

nand.h

Share this post


Link to post
Share on other sites

Thanks Ralph,

I tried what you suggested and that should be the right answer but I get the following error ...

../src/xor2.h:17:38: warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11
  sc_vector<nand<2> > nand2{"NAND2", 4};
                                      ^

As I said I am a novice at this ... and my next Q isn't SystemC but maybe you can help me ...

I am using Eclipse and Cygwin gcc ... Can I add the c++11option to fix the error I got?

Share this post


Link to post
Share on other sites

Assumes you are using a version of c++ that supports c++11, just add -std=c++11 to fix this problem or move the constructor arguments to the initializer list of your constructor, which will require abandoning the SC_CTOR macro in favor of full C++ constructor syntax. Or you  use the deferred vector construction.

Gcc 4.8 or newer supports c++11 if I recall correctly.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×