近日,Wave正式宣佈將MIPS指令集(ISA)向全球客戶免費授權。為全球的半導體企業、開發人員及高校提供免費的MIPS架構,供其開發下一代SOC。MIPS架構開放計劃將為所有參與者免費提供最新的32位和64位 MIPS架構,且不產生架構授權費和版權費,同時也為所有MIPS架構的使用者提供其在全球範圍內幾百項現有專利的保護。
雖然此舉對於羽翼豐滿的X86和ARM來說,短時間內無法造成多少影響,但對於目前依靠開源作為旗幟吸引玩家加盟的RISC-V來說,無益於當頭一棒。RISC-V之所以被很多廠商熱捧,在於全球任何一家IC設計單位都可以基於RISC-V設計CPU,不存在任何知識產權問題。這使得IC設計公司對於RISC-V很感興趣。
然而,在MIPS也宣佈免費授權之後,導致原本RISC-V才具備的優勢,MIPS也擁有了,大家都可基於MIPS設計CPU。可以說,MIPS指令集授權免費後,由於生態更完善,性能也更好,將會對RISC-V造成很大沖擊。
當然Mips的內核沒有開源,內核授權業務仍舊保留。這是一個非常理智的商業安排,通過開源指令集來擴大整個指令集的生態系統,再由擴大的生態來反哺內核授權業務,完成了一個完整的商業閉環。
在幾年前EETOP就建立了OpenMips社區,版主為大家分享了一款較為先進MIPS設計及代碼,只不過當時Mips沒有開放,所以只能冠之以學習版、教學版。
社區截圖
版主在社區中為大家分享了10天設計Mips CPU的開發筆記及實現代碼,現在介紹給大家,可以學習一下。
開發筆記
為了感謝EETOP上各位同學以及版主tyxuanyuanlx 對《步步驚芯——軟核處理器內部設計分析》一書的支持,本人將貢獻一個開源處理器OpenMIPS。
OpenMIPS,是一款具有哈佛結構的32位標量處理器,兼容MIPS32體系結構,這樣可以使用現有的MIPS編譯環境。OpenMIPS具有以下特點:
(1)五級整數流水線,分別是:取指、譯碼、執行、訪存、回寫
(2)哈佛結構,分開的指令、數據接口
(3)32個32位整數寄存器
(4)大端模式
(5)向量化異常處理,支持精確異常處理
(6)8個外部中斷
(7)32bit數據、地址總線寬度
(8)單週期乘法
(9)支持延遲轉移
(10)兼容MIPS32體系結構,支持MIPS32指令集中的所有整數指令
(11)大多數指令可以在一個時鐘週期內完成
(12)可綜合
打算用十天時間依次發佈,所以標題叫“10天實現處理器——OpenMIPS開發筆記”,還望各位同學多多使用,並提出改進建議,大致計劃如下:
第1天
(1)OpenMIPS介紹
(2)實驗環境搭建
(3)實現通用寄存器Regfile
(4)實現指令存儲器imem
(5)實現數據存儲器dmem
第2天
(1)實現五級流水線框架
(2)實現第一條指令——ORI
第3天
(1)解決流水線數據相關的問題
(2)實現其餘的邏輯操作指令——AND、ANDI、LUI、NOR、OR、XOR、XORI
第4天
(1)實現移位操作指令——SLL、SLLV、SRA、SRAV、SRL、SRLV
(2)實現乘法、除法之外的所有算術操作指令——ADD、ADDI、ADDIU、ADDU、CLO、CLZ、SLT、SLTI、SLTIU、SLTU、SUB、SUBU
第5天
(1)實現乘法指令——MADD、MADDU、MSUB、MSUBU、MUL、MULT、MULTU
(2)實現除法指令——DIV、DIVU
第6天
(1)實現移動操作指令——MFHI、MFLO、MOVN、MOVZ、MTHI、MTLO
(2)實現控制指令——NOP、SSNOP
第7天
(1)實現跳轉指令——J、JAL、JALR、JR
(2)實現分支指令——B、BAL、BEQ、BGEZ、BGEZAL、BGTZ、BLEZ、BLTZ、BLTZAL、BNE
第8天
(1)實現加載類指令——LB、LBU、LH、LHU、LL、LW、LWL、LWR
(2)實現存儲類指令——SB、SC、SH、SW、SWL、SWR
第9天
(1)實現協處理器CP0的部分寄存器
(2)實現協處理器訪問指令——MFC0、MTC0
第10天
(1)實現自陷指令——SYSCALL、TEQ、TEQI、TGE、TGEI、TGEIU、TGEU、TLT、TLTI、TLTIU、TLTU、TNE、TNEI
(2)實現中斷處理
(3)實現異常返回指令——ERET
這裡我們只給出了每一天要做的概要,所有這些詳細設計版主都已經作為附件上傳到論壇中所對應的帖子裡面了,大家可以點擊文末閱讀原文下載。
代碼實現說明
相對OpenMIPS教學版而言,OpenMIPS實踐版最大的特點是引入了Wishbone總線接口,組建了SOPC,包括SDRAM控制器、GPIO控制器、flash控制器、UART控制器,並且下載到了DE2上進行了實際測試,SOPC的結構如下:
文件目錄如下:(代碼包含verilog 和 vhdl,這裡以vhdl為例)
各文件夾說明如下:
rtl
所有OpenMIPS實踐版的源代碼文件在該文件夾下,包括流水線文件iu.vhd、除法模塊 div.vhd、寄存器文件Regfile.vhd、頂層文件OpenMIPS.vhd、宏定義文件stdlib.vhd
min_sopc
包括多種IP核:GPIO、UART、SDRAM控制器、flash控制器、Wishbone總線互聯矩陣等,以及一個用來測試OpenMIPS的最小SOPC的頂層文件OpenMIPS_min_sopc.vhd,在其中例化上述IP核,通過Wishbone總線互聯矩陣與OpenMIPS連接在一起,形成一個SOPC。關於該SOPC的結構在第8小節會有介紹。此處的各種IP核都是從OpenCores下載的,均符合Wishbone總線接口規範。
tools
包含與具體評估板有關的一些工具,筆者主要是使用Altera的DE2作為評估板,所以tools下有一個Altera/DE2的目錄,其中包含DE2的DE2_control_panel這個工具軟件,可以通過該軟件讀寫DE2上的flash芯片。
該目錄下還包括一個BinMerge.exe軟件,該軟件在BootLoader、SimpleOS的實驗中會有作用,用來將BootLoader、SimpleOS產生的二進制文件合併在一起。
doc
包含一些說明文檔,具體有:《MIPS32指令集》、《MIPS Architecture for Programmers Volume III》、《OpenMIPS快速入門手冊(實踐版)》、《10天實現處理器——OpenMIPS成長記》,以及min_sopc文件夾下各種IP核的說明手冊。
asm_test
包含幾個測試程序,均使用匯編編寫,分別用來測試GPIO、UART、SDRAM,以及一個綜合程序。該綜合程序由BootLoader、SimpleOS組成,用來模擬一個操作系統的啟動。
OpenMips CPU模塊連接圖
閱讀更多 EETOP 的文章