首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SystemC端口转换

SystemC端口转换
EN

Stack Overflow用户
提问于 2017-01-30 16:17:41
回答 1查看 270关注 0票数 0

我正在尝试将一种类型的SystemC端口转换为另一种:

发自:

代码语言:javascript
运行
复制
sc_port<sc_fifo_out_if<Type> > 

至:

代码语言:javascript
运行
复制
sc_export<tlm::tlm_analysis_if<Type> > 

我使用这个类和一个线程在类型之间进行转换。

代码语言:javascript
运行
复制
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

有没有更简单的方法在这些类型的端口之间进行转换?

EN

回答 1

Stack Overflow用户

发布于 2017-02-02 09:57:52

接口sc_fifo_out_iftlm_analysis_if不完全兼容。所以这里可能是你能得到的最好的。如果有人尝试使用不兼容的方法,模拟将停止并显示错误。

更新:我不确定tlm_analysis_if是否保证非阻塞操作。

代码语言:javascript
运行
复制
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;
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41931402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档