0
举个例子,假设我的代码有三个函数,它们都对同一时钟的正边沿都很敏感。有没有办法说明给定的systemC模拟器如何排序这些函数的执行。如何确定SystemC仿真中事件执行的顺序
我正在使用cadence的IUS模拟器。
我明白,代码不应该假定序列,因为它是建模硬件。但是我在问这个问题,因为了解事件的顺序对于促进systemC调试至关重要。
举个例子,假设我的代码有三个函数,它们都对同一时钟的正边沿都很敏感。有没有办法说明给定的systemC模拟器如何排序这些函数的执行。如何确定SystemC仿真中事件执行的顺序
我正在使用cadence的IUS模拟器。
我明白,代码不应该假定序列,因为它是建模硬件。但是我在问这个问题,因为了解事件的顺序对于促进systemC调试至关重要。
不,对于对同一事件敏感的进程,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;
}
是的,SystemC标准不保证特定的顺序。但是在编译之后,有没有办法确定实际的序列呢?这严格用于调试目的。我的systemC模拟崩溃了,我正在处理+ 10万行代码。我正在尝试获取事件排序信息来指导我应该放置断点的位置。 – Josina
我修改了我的答案。从技术上讲,您可以修改SystemC源代码以公开此信息或创建好友功能。您可以检查sc_event :: trigger()方法以获取方法/线程执行的顺序。 – random