2016-05-09 19 views
2

SCクラスを別のSCクラスの派生物として定義することは可能ですか?他のSystemCクラスからSystemCクラスを派生させるにはどうすればよいですか?

たとえば、単純なDフリップフロップ(ラッチ)の実装では、dclkの入力とqの出力があります。私はen入力を追加し、それに応じてサンプリング方法を変更することで、そのクラスの上にEnabled-Latchを定義したいと思います。これは可能ですか?

答えて

2

はい、通常の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; 
    } 
}; 
+0

ありがとうございました。これはSystemCオブジェクトと見なされますか?どのように 'en'入力を感度リストに追加しますか? – ysap

+0

愚かなSC_マクロのソースを見ると、もう少し明らかになります。私は決してマクロを使用するよう誰にも勧めません。 – Ifor

+0

私は感度リストに追加する方法を示すコードサンプルを修正しました。 @lforアドバイスではSC_MODULEマクロを削除しました。 – random

関連する問題