2017-01-30 9 views
0

私は別のものにSystemCのポートのいずれかのタイプを変換しようとしています:SystemCのポート変換

から:

sc_port<sc_fifo_out_if<Type> > 

へ:

sc_export<tlm::tlm_analysis_if<Type> > 

私は変換するために、スレッドでこのクラスを使用タイプ間。

class port_converter : public sc_core::sc_module{ 
public: 
    sc_port<sc_fifo_in_if<Type> > in_converter; 
    sc_port<tlm::tlm_analysis_if<Type> > out_converter; 

    // c'tor 
    SC_HAS_PROCESS(port_converter); 
    port_converter(sc_module_name nm) : 
     sc_module(nm), in_converter("in"), out_converter("out") { 
     SC_THREAD(main_action); 
    } 

    // main action 
    void main_action() { 
     while (1){ 
      out_converter->write(in_converter->read()); 
     } 
    } 
}; 

The solution diagram

ポート、これらのタイプの間で変換する簡単な方法はありますか?

答えて

0

インターフェイスsc_fifo_out_ifとtlm_analysis_ifは完全に互換性がありません。だから、おそらくあなたが得ることができる最高です。誰かが互換性のないメソッドを使用しようとすると、シミュレーションがエラーで停止します。

更新:tlm_analysis_ifが非ブロック操作を保証するかどうかはわかりません。

template <typename T> 
struct my_converter : sc_fifo_out_if<T>, sc_core::sc_module { 

    sc_export<sc_fifo_out_if<T>>   in{"in"}; 
    sc_port<tlm::tlm_analysis_if<T>>  out{"out"}; 

    my_converter(sc_core::sc_module_name){ 
     in.bind(*this); 
    } 

    bool nb_write(const T &t) override { 
     out->write(t); 
    } 

    const sc_event &data_read_event() const override { 
     SC_REPORT_ERROR("my_converter", "data_read_event not supported!!"); 
     return m_data_read_event; 
    } 

    void write(const T &t) override { 
     nb_write(t); 
    } 

    int num_free() const override { 
     SC_REPORT_ERROR("my_converter", "num_free not supported!!"); 
     return 1; 
    } 

private: 
    sc_event m_data_read_event; // this even will never happen; 
}; 
関連する問題