2016-10-03 121 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