0

Signal/Port 绑定后,当信号发生变化时,敏感列表会导致 SC_METHOD 注册方法运行。

当我实现 SystemC 版本时,我遇到了这个警告 W571。老实说,我认为这个警告是正确的,因为没有活动。但是为什么在我认为应该有的地方没有活动是个问题。

第二次调用 sc_start() 时会出现问题;

我怀疑信号/端口之间的绑定处理不好。

SC_MODULE ( MyClass )
{
    SC_CTOR(MyClass)
    {
        SC_METHOD(eventListener);
        dont_initialize();
        sensitive << m_event;
    }
    void eventListener()
    {
        Event* event = m_event.read();
        ...
        delete event;
    }
}

int sc_main (int argc, char* argv[]) 
{
    sc_signal<Event*>   eventSubject;
    MyClass  context("CONTEXT");
    context.m_event(eventSubject);   //bind signal to port, m_event is the port

    while(true)
    {
        getline(cin, in);
        ...
        eventSubject = new Event();
        sc_start();
    }
}
4

1 回答 1

0

我已经解决了这个问题。简而言之,这是我的代码的问题(删除的地方不正确;此外,还有内存泄漏)

使用指针类型作为信号/端口时要非常小心。


当 sc_start 评估是否有未决的活动时,它实际上是在比较 m_cur_val 和 m_new_val。

在我的情况下,第一次分配eventSubject = new Event(...),说地址是0x1234

然后被“删除事件”释放;

现在:m_cur_val 指向值为 0xfeeefeee 的“0x1234”(因为它已被释放)

现在来到“ eventSubject = new Event(...) ”,内存也分配在“0x1234”。所以 m_new_val 是“0x1234”。

由于 m_cur_val == m_new_val,SystemC 认为没有待处理的活动,因此不会调用 SC_MODULE。


怎么修:

添加以下两行代码:

    eventSubject = NULL;
    sc_start();
于 2013-09-12T00:30:58.373 回答