2016-06-23 6 views
1

私はハードウェアブロックを実装するSystemCモジュールを持っています。ここで入力はそのまま出力に向いています(たとえば非反転バッファについて考える)。私は定義されたと言う:シグナルを使用してインポートをアウトポートに転送できますか?

sc_in<bool> ip; 
sc_out<bool> op; 

は、私はちょうどsc_signalオブジェクト(すなわち、入力感度リストを持つメソッドを作成していない)との入力を出力に転送することができますか?

sc_signal<bool> net; 
.... 

// in the constructor: 
ip(net); 
op(net); 

答えて

0

可能であれば、op(in)を直接接続することもできます。

+0

おかげで、ラーフル。私のモデルでは、信号はサブモジュールの入力にも接続されていました。ポートのバインド数を超えたというエラーが表示されました。私はそのエラーを取り除くために、入力変更時に値を明示的に代入するメソッドを使用しなければなりませんでした。 – ysap

0

入力の感度リストを持つ方法が、この状況に最適なオプションだと思います。

+0

ありがとうございます。私は何をやった。 – ysap

1

通常、ポートはモジュールの外部にバインドする必要があるため、は使用しないでください。これは強制されませんが、一般的なコーディング規則です。そうすれば、モジュールのユーザーはいつも期待していることを知ることができます。「モジュールインスタンスのすべてのポートを何らかの信号にバインドする必要があります」

ポートを階層的にバインドする(つまり、サブモジュール入力に入力する)トップレベルのモジュールは依然として契約を保持しているので、ポートは「外部」信号にバインドされなければなりません。

は、例えば、あなたのバッファを考えてみましょう:

template <typename T> 
SC_MODULE(buffer) { 
    sc_in <int>  ip{"ip"}; 
    sc_out <int>  op{"out"}; 

    SC_CTOR(buffer) { ip(tmp_sig); op(tmp_sig); } 

private: 
    sc_signal <int> tmp_sig{"sig"}; 
}; 

は、私がこのモジュールのテストベンチを書きたいとしよう:

int sc_main(int argc, char * argv[]) { 
    sc_signal<int> in_signal{"in_signal"}; 
    sc_signal<int> out_signal{"out_signal"}; 

    buffer buffer1{"buffer1"}; 

    // Error ! **ip** is already bound to tmp_sig!! 
    buffer1.ip(in_signal); 

    // How can I write to **in** ?? 
    buffer1.ip = 1; // Error! Writing to input port is not defined 

    sc_start(); 
    return 0; 
} 

あなたが見ることができるように、書かれたこの方法はかなり無用であるバッファ!

、ラーフルが示唆したように、直接出力ポートに入力ポートを接続することに注意してくださいも悪い考えです:

SC_MODULE(buffer) { 
    sc_in <int>  ip{"ip"}; 
    sc_out <int>  op{"op"}; 

    SC_CTOR(buffer) { ip(op); } 
}; 


int sc_main(int argc, char * argv[]) { 
    sc_signal<int> in_signal{"in_signal"}; 
    sc_signal<int> out_signal{"out_signal"}; 
    buffer buffer1{"buffer1"}; 

    buffer1.ip(in_signal); 

    // Error, **op** is already bound to in_signal ! 
    buffer1.op(out_signal); 

    sc_start(); 
    return 0; 
} 
関連する問題