はい、通常のC++クラスと同じ方法で行うことができます。
私はSC_MODULEsがsc_module
マクロSC_HAS_PROCESSとSC_METHODから派生クラスだけであることを示すために、マクロSC_MODULEとSC_CTORを使用していないが可読性のために残されています。
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;
}
};
ありがとうございました。これはSystemCオブジェクトと見なされますか?どのように 'en'入力を感度リストに追加しますか? – ysap
愚かなSC_マクロのソースを見ると、もう少し明らかになります。私は決してマクロを使用するよう誰にも勧めません。 – Ifor
私は感度リストに追加する方法を示すコードサンプルを修正しました。 @lforアドバイスではSC_MODULEマクロを削除しました。 – random