Human Resource Machine架構CPU設計與開發


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我們的最新進展。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM