
单周期CPU设计
文章平均质量分 76
Bunny9__
我是小曹
展开
-
自己动手写CPU(11)——加载存储指令说明
加载存储指令说明加载指令(7) lb、lbu、lh、lhu、lw、lwl、lwr存储指令(5) sb、sh、sw、swl、swr补充加载指令(7) lb、lbu、lh、lhu、lw、lwl、lwrop[31:26]base[25:21]rt[20:16]offset[15:0]名称指令用法指令码[31:26]rt[20:16]offset[15:0]LBlb rt, offset(base)6’b 10_0000rtoffsetLBUlb原创 2021-01-27 15:50:51 · 3047 阅读 · 0 评论 -
自己动手写CPU(10)——转移指令的实现
转移指令的实现1. 系统结构框图2. 代码模块2.1. 宏定义defines2.2. 取指pc2.3. 译码id2.4. 执行ex3. 测试模块3.1 跳转指令3.2 分支指令4. 补充1. 系统结构框图2. 代码模块2.1. 宏定义defines// *************** 与具体指令有关的宏定义 ***************原创 2021-01-26 18:47:11 · 449 阅读 · 0 评论 -
自己动手写CPU(9)——转移指令说明
转移指令说明跳转指令(4)分支指令(10)跳转指令(4)跳转指令是绝对转移jr:将地址为rs的通用寄存器的值赋值给寄存器pcjalr:将地址为rs的通用寄存器的值赋值给寄存器pc,作为新的指令地址,同时将跳转指令后面第二条指令的地址作为返回地址保存在地址为rd的通用寄存器,如果没有在指令中指明rd,那么默认将返回地址保存到$31op[31:26]rs[25:21]rt[20:16]rd[15:11]sa[10:6]func[5:0]名称指令用法指令作用指原创 2020-12-30 12:01:06 · 2890 阅读 · 0 评论 -
自己动手写CPU(8)——简单算术操作指令的实现
算术操作指令的实现1. 代码模块1.1 宏定义defines1.2 译码id1.3 执行exa. 添加一些新的变量b. 计算五个变量的值c. 依据aluop_i计算arithmeticres的值d. 进行乘法运算e. 依据alusel_i确定最终要写入目的寄存器的值2. 测试模块2.1 第一段2.2 第二段2.3 第三段2.4 第四段1. 代码模块1.1 宏定义defines新增关于具体指令的宏定义1.2 译码id添加新的算术指令add、addu、sub、subu、slt、sltu、addi、ad原创 2020-12-23 16:28:44 · 1571 阅读 · 6 评论 -
自己动手写CPU(7)——算术操作指令说明
算术操作指令说明简单算术操作指令(15)乘累加、乘累减指令(4)除法指令(2)简单算术操作指令(15)add: 加法运算。结果异常溢出,不保存结果addu: 加法运算。不进行溢出检查,直接保存结果到目的寄存器sub: 减法运算。结果异常溢出,不保存结果subu: 减法运算。不进行溢出检查,直接保存结果到目的寄存器slt: sltu:R型指令op[31:26]rs[25:21]rt[20:16]rd[15:11]sa[10:6]func[5:0]名称原创 2020-12-23 16:28:34 · 2162 阅读 · 0 评论 -
自己动手写CPU(6)——移动指令的实现
移动指令的实现系统结构框图代码模块1. 宏定义defines.v2. 译码id3. 执行ex4. 特殊寄存器hilo_reg5. 顶层模块OpenMIPS测试模块系统结构框图代码模块1. 宏定义defines.v// 宏定义模块// *************** 与具体指令有关的宏定义 ***************`define EXE_MOVN 6'b001011`define EXE_MOVZ 6'b001010`define EXE_MFHI原创 2020-12-17 21:11:00 · 453 阅读 · 0 评论 -
自己动手写CPU(5)——移动指令说明
移动操作指令不涉及特殊寄存器LO、HI:movn:判断地址为rt的通用寄存器的值,如果不为零,将地址为rs的通用寄存器的值赋给地址为rd的通用寄存器;反之,保存rd的值movz:与movn相反。判断地址为rt的通用寄存器的值,如果为零,将地址为rs的通用寄存器的值赋给地址为rd的通用寄存器;反之,保存rd的值涉及特殊寄存器LO、HI:mfhi:将特殊寄存器HI的值赋给地址为rd的通用寄存器mflo:将特殊寄存器LO的值赋给地址为rd的通用寄存器mthi:将地址为rs的通用寄存器的值赋给特原创 2020-12-17 10:35:06 · 468 阅读 · 0 评论 -
自己动手写CPU(4)——部分逻辑和移位指令的实现
部分功能代码1. 宏定义defines.v相对于ORI指令新添加与具体指令相关的宏定义// 宏定义模块// ***************** 全局的宏定义 ***************`define RstEnable 1'b1 // 复位信号有效`define RstDisable 1'b0 // 复位信号无效`define ZeroWord 32'h00000000 // 32位的数值0`define Wr原创 2020-12-16 14:30:57 · 895 阅读 · 1 评论 -
自己动手写CPU(3)——ID译码模块确定指令种类的过程
译码模块对指令进行译码,得到最终运算的类型、子类型、源操作数1、源操作数2、要写入的目的寄存器地址信息等确定指令种类过程case语句执行逻辑原创 2020-12-10 11:07:18 · 890 阅读 · 0 评论 -
自己动手写CPU(2)——逻辑、移位操作与空指令说明
逻辑操作指令I型指令op[31:26]rs[25:21]rt[20:16]immediate[15:0]名称指令用法指令作用指令码[31:26]ORIori rt, rs, immrt <- rs ORI imm6’b 00_1101ANDIandi rt, rs, immrt <- rs ANDI imm6’b 00_1100XORIxori rt, rs, immrt <- rs XORI imm6’b原创 2020-12-07 20:50:19 · 1278 阅读 · 0 评论 -
自己动手写CPU——单周期ORI指令的实现
单周期ORI指令的实现ORI指令说明单周期系统结构框图模块划分以及代码实现ORI指令说明这是一个I型指令,ORI指令的指令码为6’b00_1101ORI指令作用:将16位立即数immediate进行无符号扩展至32位,然后与索引为rs的通用寄存器里的值进行“或”运算,运算结果保存到索引为rt的通用寄存器中扩展:n位立即数扩展到3位。符号扩展是将n位立即数的最高为复制到扩展后的32位数据的高(32-n)位,无符号扩展是将扩展后的32位数据的高(32-n)位都置016位立即数: 0x8000、0原创 2020-11-16 21:31:40 · 2772 阅读 · 1 评论