2011年4月25日 星期一

SystemC kernel core trace

小弟之前用SystemC 開發了一些簡單的IP, 但都沒有花時間在 trace 其核心是怎樣完成的,於是小弟最近就花點時間把底層的 kernel 部份看了一下,底下就大致說明整體SystemC 的核心架構是如何摟. utils 利用底層的 C library 來實現 SystemC C++ library, 如 sc_memory map, sc_vector, sc_list... 分別用來儲存 sc_event, sc_cthread kernel 主要是用 C library 中的 pthread 做 extend, 分別建立出 sc_thread, sc_thread, sc_method. 的 thread module 出來.在透過 sc_object_manager 把現有的 thread 儲存到 sc_list 中, 最後在根據每個 thread 的 time stamp 做 priority check. 且 sort 出在 current time stamp 要做的 thread. 把使用權給 lock 住, 以此確保 data 的正確性. 除此之外還要考慮到 thread 彼此間的關係, 藉由 Parent, children 的關係把 thread 的使用權 pass 下去. 這之中當然也 support pthread 中的 time wait, fork,join,event wait ... ,感覺有點像是 OS 的 multi tasks 的 schedule assignment. datatypes 定義 struct type. 如 sc_int, sc_bit... 的資料型態. tracing 為event signal trace, dump VCD waveform file. boost 為boost c++ library communication 提供sc_channel, sc_fifio, sc_signal, sc_clock 的function. ps: 如果要更高階的語法來做 Architecture Algorithm 驗證.又不想要把type, class 定的很死.我想 Inline::CPP / Inline::C 可以是不錯的選擇, 可利用現有的 library 做到快速的 System explore. 不過很底層的東西就要看有沒有 support 的 Driver 摟. refs: http://search.cpan.org/~sisyphus/Inline/C/C.pod#Example_#1_-_Greetings

沒有留言:

張貼留言