學長認真: 各種搞懂SystemC

SystemC是一門建立在C++之上的一個Standard Library
用在行為驗證層級以及暫存器傳輸層級之間建立更抽象的設計層級
補足軟體與硬體設計之間的間隙,加速整體系統設計
傳統硬體流程中,經常將系統化分為軟體及硬體,進行完硬體的設計後才能設計、整合軟體與模擬驗證,最後再整合成一個完整的系統,但因考量市場時間及商業需求,必須得加速整體的設計流程,早期的系統晶片設計流程為

1.C level 功能驗證 - 檢查演算法是否可以實作
2.RTL設計 - 使HDL來實現硬體, 及在FPGA上做功能驗證
3.APR - layout
4.Tape-out - 晶片下線
5.軟體開發 - 撰寫驅動程式或測試整體系統

原來我們必須等到硬體設計完成
拿到實體晶片後才開始設計軟體
造成整體開發時間過於冗長
晶片設計廠商希望可以及早進行軟體的開發
才會有SystemC的出現
所以可以說是為了提高電子系統設計效率而逐漸發展起來的產物。

在有了SystemC之後晶片設計流程為
1.C level 功能驗證 - 檢查演算法是否可以實作
2.建立SystemC模擬平台 - 通常在QEMU上架構虛擬平台,並在平台上驗證行為/timing/power等
3.軟體開發 - 撰寫驅動程式或測試整體系統
3.RTL設計 - 使HDL來實現硬體, 及在FPGA上做功能驗證
4.APR - layout
5.Tape-out - 晶片下線

最大的差別就在於軟體與硬體可以在同個時程開始設計
不只在設計時程上有差異
更可以幫助設計人員在系統設計初期
就能對整體系統的性能可以有更好的掌握與理解


抽象層級可大致上被區分為如圖這幾個



SystemC擁有以RTL層級描述硬體模型的能力,因此,和傳統的VHDL模擬比較,用來模擬一項工作的電腦處理器資訊量基本上大致相同,事實上SystemC並沒有提供能夠強化效能的技巧,因此處理器指令的數量必須要降低。
為了達到這個目的,唯一的解決方案就是捨棄包含在RTL層的部份資訊,抽象的程度越高,模擬的速度就越快。

在RTL是使用單一個時脈當作單位來描述系統
每一個暫存器
每一個匯流排
每一個位元
都會以單一時脈週期的方式描述
為了簡化硬體模型
SystemC提供了C++資料型態以及客製化的事件同步功能(approximate timed & untimed)
資料原來: 使用SystemC的軟硬體記憶卡模擬器



SystemC的名稱來自「系統」一詞的英語System和「C/C++語言」中的C,以表示它是一種基於C/C++語言的系統設計語言。(資料源自wiki)

SystemC更詳細的資訊都定義在1666-2011 - IEEE Standard中。
1666-2011 - IEEE Standard for Standard SystemC Language Reference Manual

留言