2016-10-03 120 views
0

举个例子,假设我的代码有三个函数,它们都对同一时钟的正边沿都很敏感。有没有办法说明给定的systemC模拟器如何排序这些函数的执行。如何确定SystemC仿真中事件执行的顺序

我正在使用cadence的IUS模拟器。

我明白,代码不应该假定序列,因为它是建模硬件。但是我在问这个问题,因为了解事件的顺序对于促进systemC调试至关重要。

回答

0

不,对于对同一事件敏感的进程,SystemC标准不保证某些特定的执行顺序。 您应该使用通道进行进程间通信,因此模拟的行为不会依赖于确切的执行顺序。

在内部,对同一事件敏感的所有进程的句柄将存储在事件对象内。所以当事件被触发时,程序执行顺序是预先定义的(按事件处理的顺序)。但是,这些信息是私人的,因此您不能在应用程序代码中使用它:

class sc_event { 
... 
private: 
    ... 

    mutable std::vector<sc_method_handle> m_methods_static; 
    mutable std::vector<sc_method_handle> m_methods_dynamic; 
    mutable std::vector<sc_thread_handle> m_threads_static; 
    mutable std::vector<sc_thread_handle> m_threads_dynamic; 
} 
+0

是的,SystemC标准不保证特定的顺序。但是在编译之后,有没有办法确定实际的序列呢?这严格用于调试目的。我的systemC模拟崩溃了,我正在处理+ 10万行代码。我正在尝试获取事件排序信息来指导我应该放置断点的位置。 – Josina

+0

我修改了我的答案。从技术上讲,您可以修改SystemC源代码以公开此信息或创建好友功能。您可以检查sc_event :: trigger()方法以获取方法/线程执行的顺序。 – random