自己动手写CPU
文章平均质量分 89
记录自己编写CPU的心路历程
日拱一卒_未来可期
不懂历史的FPGAer不是一个好厨子
展开
-
自己动手写CPU(8)加载存储指令的实现
自己动手写CPU(8)加载存储指令的实现好久没更新blog了,暑假提前放了。现在收假也该收收心了,继续捡起之前的CPU,自己开的坑不管咋样把它填完吧。指令介绍1、加载指令lb(指令码6’b100000):字节加载指令,用法:lb,rt,offset(base),作用:从内存中指定的加载地址处,读取一个字节,然后符号扩展至32位,保存到地址为rt的通用寄存器中lbu(指令码6’b100100):无符号字节加载指令,用法:lbu,rt,offset(base),作用:从内存中指定的加载地址处,读取原创 2021-08-04 11:25:46 · 559 阅读 · 0 评论 -
自己动手写CPU(7)转移指令的实现
自己动手写CPU(7)转移指令的实现分支延迟槽在MIPS五级流水线中,一条指令被分成了五个阶段:取指、译指、执行、仿存、回写。当第一条指令的执行阶段结束时,第二条指令的译指阶段也已经结束了。那么如果第一条指令是分支跳转指令,那么在执行阶段才会知道要不要跳转以及跳转的目标指令地址是多少。而此时第二条指令已结束译指阶段,第三条指令已结束取指阶段。如果这个时候CPU直接跳转到目标指令地址去执行,那么就需要清空现有流水线,从新的指令地址开始取指、译指。这是因为分支跳转后面的指令不能被执行啊,程序已经跳转了,也原创 2021-04-07 21:34:41 · 2698 阅读 · 0 评论 -
自己动手写CPU(6)流水线暂停、乘累加减与除法器的实现
自己动手写CPU(6)流水线暂停、乘累加减与除法器的实现流水线暂停因为OpenMIPS设计乘累加、乘累减、除法指令在流水线执行阶段占用多个时钟周期,因此需要暂停流水线,以等待这些多周期指令执行完毕。OpenMIPS采用的是一种改进的方法:假如位于流水线第n阶段的指令需要多个时钟周期,进而请求流水线暂停,那么需保持取指令地址PC的值不变,同时保持流水线第n阶段、第n阶段之前的各个阶段的寄存器不变,而第n阶段后面的指令继续运行。为实现CPU的流水线暂停功能,我们设计添加了CTRL模块,其作用是接收各阶段传原创 2021-03-28 22:23:39 · 1714 阅读 · 1 评论 -
自己动手写CPU(5)简单算术操作指令实现_1
自己动手写CPU(5)简单算数操作指令实现_1指令介绍MIPS32指令集架构定义的所有算术操作指令,共有21条 共有三类,分别是:简单算术指令乘累加、乘累减指令除法指令算术指令操作介绍一共有15条指令分别是:add、addi、addiu、addu、sub、subu、clo、clz、slt、slti、sltiu、sltu、mul、mult、multu1.add、addu、sub、subu、slt、sltu指令由指令格式可以看出这六条指令指令码都是6’b000000即SPECIAL类,而原创 2021-03-23 19:48:52 · 1553 阅读 · 5 评论 -
自己动手写CPU(4)移动操作指令的实现
自己动手写CPU(4)移动操作指令的实现指令说明MIPS32指令集架构中定义的移动操作指令共有6条: movn、movz、mfhi、mthi、mflo、mtlo,后4条指令涉及对特殊寄存器HI、LO的读/写操作。HI、LO寄存器用于保存乘法、除法结果。当用于保存乘法结果时,HI寄存器保存结果的高32位,LO寄存器保存结果的低32位;当用于保存除法结果时,H寄存器保存余数,LO寄存器保存商。指令格式MOVN当功能码为6’b001011时,表示是movn指令。指令用法为:movn rd, rs,rt原创 2021-03-23 08:43:17 · 1089 阅读 · 1 评论 -
自己动手写CPU(3)逻辑、移位操作与空指令
自己动手写CPU(3)逻辑、移位操作与空指令指令说明MIPS32指令集架构中定义的逻辑操作指令有8条: and、andi、or、ori、xor、xori、nor、lui,其中 ori指令已经实现。MIPS32指令集架构中定义的移位操作指令有6条: sll、sllv、sra、srav、srl、srlv。MIPS32指令集架构中定义的空指令有2条: nop、ssnop。其中 ssnop是一种特殊类型的空操作,在每个周期发射多条指令的CPU中,使用ssnop指令可以确保单独占用一个发射周期。OpenMIP原创 2021-03-12 09:38:27 · 3269 阅读 · 9 评论 -
自己动手写CPU(2)流水线数据相关问题
自己动手写CPU(2)流水线数据相关问题问题定义流水线中经常有一些被称为“相关”的情况发生,它使得指令序列中下一条指令无法按照设计的时钟周期执行,这些“相关”会降低流水线的性能。流水线中的相关分为以下三种类型。结构相关:指的是在指令执行的过程中,由于硬件资源满足不了指令执行的要求,发生硬件资源冲突而产生的相关。比如:指令和数据都共享一个存储器,在某个时钟周期,流水线既要完成某条指令对存储器中数据的访问操作,又要完成后续的取指令操作,这样就会发生存储器访问冲突,产生结构相关。数据相关:指的是在流水线原创 2021-03-08 09:29:45 · 1287 阅读 · 5 评论 -
自己动手写CPU(1)五级流水线及CPU第一条指令ori
自己动手写CPU(1)五级流水线及CPU第一条指令ori动机不知为何研一的自由时间突然多起来,可能人一闲下来就容易焦虑吧,hhhhhh。正好之前看到一本《自己动手写CPU》,就按照此书从头实做一遍MIPS指令集的CPU,也当做对大学课程的总结。之前看龙芯杯比赛的代码震惊到我了,想想那堆大佬本科在搞这东西而我本科在瓜瓜地刷分,感叹人之间的差距真的好大。痛定思痛,还是先动手做起来这才能假意安慰自己,我好像也不错。闲言少叙,让我们开始吧!由于作者提供了各章实现的具体代码,所以该系列博客主要记录我过程中有哪些原创 2021-03-07 16:10:27 · 6210 阅读 · 2 评论
分享