如何从另一个SystemC类派生SystemC类?

时间:2016-05-09 23:36:03

标签: oop inheritance derived-class systemc

是否可以将SC类定义为另一个SC类的衍生物?

例如,简单的D-Flipflop(锁存器)实现将具有dclk输入以及q输出。我想在该类的顶部定义一个Enabled-Latch,添加en输入并相应地更改采样方法。这可能吗?

1 个答案:

答案 0 :(得分:4)

是的,您可以使用与常规C ++类相同的方式。

我没有使用宏SC_MODULE和SC_CTOR来说明SC_MODULEs只是从sc_module派生的类

宏SC_HAS_PROCESS和SC_METHOD留待实现。

struct dff : public sc_module
{
    SC_HAS_PROCESS(dff);

    sc_in_clk    clk{ "clk" };
    sc_in<bool>  d{ "d" };
    sc_out<bool> q{ "q" };

    dff(const sc_module_name& name) : sc_module(name) {
        SC_METHOD(update_method);
        sensitive << clk.pos();
    }

    virtual void update_method() {
        q = d;
    }
};

struct dff_en : public dff
{
    sc_in<bool>  en{ "en" }; // enable signal
    sc_in<bool>  arst_n{ "arst_n" }; // asynchronous reset, active 0

    dff_en(const sc_module_name& name) : dff(name) {
        // adds to sentivity list of last process declared in base class
        sensitive << arst_n;
    }

    void update_method() override {
        if (!arst_n.read())
            q = 0;
        else if (en.read())
            q = d;
    }
};