1. 程式人生 > >hdl - 軟體程式設計與硬體建模

hdl - 軟體程式設計與硬體建模

    介紹軟體程式設計思維與硬體建模思維的不同與相似之處。     1. 軟體程式設計思維   程式設計,意指編寫程式; 程式,即過程的順序;   軟體程式具有天然的序列特性: a. 彙編級別需要等前一條指令執行完成,才能執行下一條指令; b. 語言級別需要等前一條語句執行完成,才能執行下一條語句; c. 語言級別需要等前一個函式呼叫完成,才能執行下一條語句;   原因在於軟體程式最終都會被編譯為一條條彙編指令,
彙編指令執行的載體是CPU核,而在單個CPU核中彙編指令的執行是序列的;   CPU核是活的,而軟體程式是CPU核執行的指令。     2. 硬體建模思維   通電之後,硬體中的每一個模組都是活的, 每個模組都同時接收輸入、執行處理、產生輸出。 天然具有並行的特性。     3. 對比   硬體各個模組都是活的,建模時需要謹慎處理各個模組的狀態。 軟體程式設計天然的序列特性,使得軟體程式設計思維更易於使用和理解。
    4. 軟體建模:多執行緒軟體模型   軟體程式設計中有沒有並行性需要考慮呢? 有,那就是多執行緒程式設計。   多執行緒程式設計假設每個執行緒都有可能同時並行執行,需要考慮: a. 每個執行緒的任務; b. 執行緒之間的通訊方式; c. 執行緒之間的同步關係;   其過程如同軟體建模,建立各個執行緒及其互動關係的模型。     5. 眾核   在多執行緒軟體模型中,每個執行緒都是活的,如同硬體模型中的每個模組。
但是執行緒只是一個抽象的概念,如果要讓每一個執行緒真正的同時活著,需要為每一個執行緒分配一個CPU核。   假設可以為每個執行緒分配一個CPU核,這個多執行緒軟體模型和硬體模型之間,還有哪些不同呢?   1) CPU核是一個完備的通用核,而硬體模組只實現特定的處理邏輯,可以認為是一個專用核; 2) 執行緒之間的通訊或使用互斥鎖或使用訊號量,而硬體模組之間通訊則是電訊號直通、Ready/Valid簡單控制介面、或者是FIFO傳遞資料等;     6. 裁剪   雖然CPU核是通用核,但是執行緒的任務是有限的邏輯,可以根據執行緒的任務,將其所需要的CPU核進行裁剪,所得即為硬體模組。   執行緒之間的通訊可以在軟體模型下,建立一個模擬層以提供與硬體模組間一致的同步、通訊行為。   在這些基礎上,軟體模型與硬體模型是否可以統一了呢?     7. 統一:軟體建模與硬體建模   線上程的層次上,可以。   然而執行緒的任務並非一個簡單的輸入、處理、輸出的函式,而是可以再分為多個模組,每個模組有其獨立的功能。   這也簡單,那就把執行緒內部的每一個具有獨立功能的模組,都轉換為一個執行緒。 讓這些模組線上程間通過執行緒同步和通訊機制互動,而非線上程內部利用軟體程式設計天然的序列特性,通過函式呼叫互動。     至此,基於模擬層,把軟體程式中每一個獨立的子功能拆分成為一個執行緒, 構建而成的多執行緒軟體模型,與硬體模型可以統一在一起了。   PS. 這就是SystemC的系統級建模(System-level modeling)的思想。     8. 最終目標是硬體模型   無論使用何種思維、何種方法,最終目標都是要完成硬體模型的構建。   1) 直接構建硬體模型   Verilog/VHDL等直接通過硬體思維,完成硬體模型的構建。   2) Generator: 提高構建層次   使用硬體思維,構建硬體模型; 然後在這個模型層的基礎上,新增一個構建層;   只要落實到模型層,構建層可以使用任何方法,擁有無窮無盡的自由。   Verilog的generate,和Chisel的circuit generator是這一類。   3) Vivado HLS:思維轉換   Vivado HLS使用軟體程式設計思維實現演算法,然後把每個函式轉換為硬體模組。 其中存在一個思維轉換。   4) SystemC METHOD實現: 思維轉換   SystemC中的METHOD,在SystemC的語彙中是一個Process,對應著多執行緒軟體模型中的一個執行緒。 其實現使用的是軟體思維,依賴於軟體思維的序列特性,所以也需要進行思維轉換。   5) SystemC系統級建模:模型統一   SystemC系統級建模實現了軟體建模與硬體建模的統一。 既可以認為建立的是軟體模型,也可以認為建立的是硬體模型。 無需進行思維轉換。     9. 備註   以下內容這裡沒有討論: a. 硬體通訊的速度; b. 硬體控制訊號的響應時間較短,響應很及時; c. 硬體模組中順序邏輯的長度不能超過一個時鐘週期;