近日,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模块连接图
,