第二章 相關研究
2.4 軟硬體共同設計(Hardware/Software Co-design)
人類在設計早期就將軟硬體明顯分離,由於軟體設計者不熟悉硬體的架 Seamless Co-verification Environment由Mentor Graphics公司所推出的,支援上百個 嵌入式系統的控制器和數位訊號處理器(DSP)。Seamless產品為設計人員提供了 性記憶體伺服器(Coherent Memory Server),軟體不需要到真實記憶體做存取動作 而能加快模擬速度。而另一款Synopsys公司所出的CoCentric System Studio(CCSS) 是基於SystemC的系統模擬工具。而SystemC是以C++為基礎的系統程式語言,其中 切成三部分並以SystemC為基礎。分別為System Verifierc和System designer和
Advanced System Design,System Verifierc是針對系統做模擬和除錯,而System Designer是對系統階層的硬體、軟體、匯流排和記憶體做效能的分析,而最後的 Advanced System Design則是用於組合平台及其架構來最佳化軟硬體的SystemC 系統。Xilinx的ISE也是常用於晶片系統軟硬體共同設計的工具。
由於架設一個完整且完美的軟硬體共同設計是極為浩大的工程,在有限的 資源下我們選用外接Xilinx Spartan 7做為執行硬體描述語言的平台。
20
2.4.1 軟硬體共同設計流程
典型的軟硬體共同設計流程,可以用(圖 2.20)來表示。
圖2.20 軟硬體共同設計流程
一個包含可重組式運算(Reconfigurable Computing, RC)系統之軟硬體共同設計方 法,其示意圖如(圖 2.20)所示。這個流程以用統一模組語言(Unifired Modeling Language,UML)和 System C 設計的系統功能作為輸入,之後會有兩個模型的產生,
一個是應用程式模型(application model)用以描述系統的功能,另一個是可重組式運 算的模型(RC model)用以描述可重組運算系統上的資源限制,經過了分割
(partitioning)及排程(scheduling)步驟後,就能取得硬體工作(hardware task)和軟體工作 (co-verification)的階段,用來驗證系統是否符合規格。
圖2.21 可重組運算系統共同設計流程
軟硬體的分割(partitioning),大致上可以將分割演算法歸納為建構式
(constructive)和反覆式(iterative)兩種。建構式演算法是一層一層的比較其解的優劣程 度,再從各層中將最佳解抽出比較,找出一組問題的最佳解,這類演算法在時間複 雜度上,比反覆是演算法來的快;相反地,反覆式演算法則是一層一層地尋找最佳 解,即使可以找到比建構式演算法還要好的解,但其實間複雜度也比建構式演算法 來的多。在動態可重組式的系統中,有一個非常重要的議題,就是如何藉由分時的 策略來使用相同可重組的硬體資源,而在這個議題上,硬體重組所帶來之能量、記 憶空間及時間的成本消耗是不可被忽略的,而且由於不同的分割方式及各個軟硬體 節點相依性的不同,會造成節點間不一樣的聯絡成本支出。因此,在[11-20]中,提 出了針對這類成本消耗的解決方式。在[11]中,對整個電路以網路流(network flow) 為基礎做出輸入模型,再根據時間居段的限制,利用盡快(As Soon As Possible, ASAP)及盡慢(As Late As Possible, ALAP) 的排程演算法,將每個節點可以執行的時 間區段計算出來,以及找出不需限定在某一區域執行的節點,再依序用α – bounded bipartitioning 演算法將這些節點分至各個時間區段,最後再找出一組使用記憶體空 間最少的最佳解。而[12]也是以網路流為基礎,利用溝通成本及溝通權重等限制,
反覆地用最小切集(min-cut)的演算法來求得最佳解。
22