Human Resource Machine架構CPU設計與開發
簡介
人力資源機器(Human Resource Machine)是一款手機編程游戲,玩家可通過指令操作主角員工從傳送帶取、放箱子(數字)進行運算,完成指定任務。
游戲截圖如下所示。
該款游戲實質像極了匯編語言。作為上學期剛剛學完計組、將在課程體系中完成OS、編譯學習的6系同學,完全自發出於興趣,我和zly@LittleNyima進行了基於該游戲的CPU架構的設計開發。
我們的設計包括以下內容:
— HRM架構指令集
— 基於HRM架構的CPU,支持異常處理
— HRM指令匯編器
— 高級語言到HRM匯編的編譯器 (待定)
— 可在HRM架構上運行的操作系統 (待定)
— 相關IO設備、驅動程序等 (待定)
目前項目正在開發中。項目鏈接:https://github.com/LittleNyima/HRM-Architecture
歡迎有意者參與開發,我們尤其需要熟悉OS與編譯器開發的同學(亦可等到相關課程學習結束后)。
指令集
指令集架構包括:
— 2條IO指令 (INBOX, OUTBOX)
— 6條順序運算指令 (COPYFROM, COPYTO, ADD, SUB, BUMPUP, BUMPDN)
— 3條跳轉指令 (JUMP, JUMPZ, JUMPN)
— 若干內核態指令 (ERET, MFCAUSE, MTCAUSE, etc.).
所有指令被分為N指令、J指令和S指令三類。
指令集基本復現了游戲所有原有指令,並增加了異常處理及內核區內存訪問的內核態指令。
指令集完整設計參見:https://github.com/LittleNyima/HRM-Architecture/blob/master/Documentation/instruction-set.md
CPU
出於更多功能而非性能的考慮,處理器設定為16位RISC單周期CPU,並帶有CP0協處理器,支持同步異常的處理。
下圖為一個早期版本的電路設計(可在https://github.com/LittleNyima/HRM-Architecture/tree/master/Circuit中查看)
CPU中僅有一個寄存器,以模擬游戲中的主角員工。內存用以模擬游戲中地面上的box存放位置。
目前沒有包含多周期、流水線、緩存、中斷等機制,后續是否擴展功能視實際情況而定。
CPU設計參見:https://github.com/LittleNyima/HRM-Architecture/blob/master/Documentation/cpu%20modules%20design.md
匯編器
此鏈接包括python實現的匯編器及介紹文檔:https://github.com/LittleNyima/HRM-Architecture/tree/master/Assembler
匯編器支持由匯編碼向機器碼的轉換,並支持定義宏、設定跳轉標簽、分配數據空間、內存空間設定。
為了使得匯編程序可以在現有匯編器的模擬環境(例如MARS)上運行,該匯編器同樣支持HRM匯編向MIPS的指令轉換。
物理內存映射
內存沒有經過虛存映射進行管理,程序可以直接對物理內存進行訪問,通過硬件設定權限異常來防止對越界范圍內存的讀寫操作。
由於指令集的架構局限,內存空間為16位編址,其中低2^12字節區域屬於用戶區域,其余部分為內核區域。
用戶區和內核區均包含數據段和代碼段,其中內核代碼段包括異常處理程序exception handler。
此外內核區包括IO設備可讀寫的內存區域,用於inbox、outbox指令的數據傳輸。
受限於指令集無法支持立即數的限制,內存中設定了靜態地址區域存放常用的常數,以方便用戶和內核進行運算操作。
內存映射參見:https://github.com/LittleNyima/HRM-Architecture/blob/master/readme.md
異常處理
HRM架構CPU支持算術溢出、內存為空(模擬游戲設定)、權限異常、IOtrap等異常,通過協處理器CP0進行捕獲和狀態保存。
參考了MIPS架構的異常分派機制,在異常處理程序中根據異常類型進行分派並單獨處理。
異常處理參見:https://github.com/LittleNyima/HRM-Architecture/blob/master/Documentation/exceptions%20and%20cp0.md
該文檔也包括一個示例的異常處理程序,可以對HRM的異常機制以及匯編指令有初步的了解。
再次歡迎有意者加入我們,並歡迎大家在Github上follow我們的最新進展。