1.处理器设计的基本规范:指令
目前成都创新互联公司已为超过千家的企业提供了网站建设、域名、网页空间、网站托管、企业网站设计、和平网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。包括处理器需要具有那些功能,需要注意的是处理器的功能是由指令唯一确定。
2.处理器设计方案(包括数据通路和控制器)
数据通路:指令执行过程中,数据所经过的路径,包括路径中的部件。它是指令的执行部件。
控制器:对指令进行编码,生成指令对应的控制信号,控制数据通路的动作。并且能对执行部件发出控制信号。是指令的控制部件。
二、常见类型指令的数据通路每种指令的介绍可以参考我上一篇博客关于RISC-V指令集介绍
这里的数据通路包括:R型,I型,S型,B型,J型指令
1.R型数据通路首先了解个个部件:
PC:程序计数器,单周期就是就是每个周期执行一条指令,每条指令执行完 PC+4(32位)到下一条指令
IM:指令存储器,我们写的一条条指令就放在指令存储器中,通过PC来判断取到了那一条指令。
RF:寄存器堆,R型指令包括三个寄存器 RS1,RS2,Rd。
ALU:运算单元,输入两个寄存器中的数据,通过ALU运算,将计算结果写回到Rd中。
R型指令:寄存器对寄存器操作。数据通路运行如下:通过clk控制pc从IM中取指令,指令送入寄存器堆(RF)中,从寄存器堆(RF)中取出数据送入运算单元(ALU)进行运算,运算结果重新存储到寄存器堆(RF)中。
需要注意:我们是要设计一个支持多种指令的数据通路,因此I型不要有新的数据通路,而是要在R型指令的基础上有一点小的改变实现。
首先讲解I型指令:立即数与寄存器操作,或者访问存储器操作。两者的区别在于访存类指令是把存储器中的值写回寄存器堆,而其他类型I型指令是把ALU运算结果写回到寄存器堆。
添加的部件
1.存储器模块(DM):通过ALU计算出访存地址,从存储器中去除数据放入寄存器堆中。
2.立即数生成模块(EXT):从数据通路中提取出立即数。注意不同类型的指令立即数存储格式不太一样,这个在我指令集那一篇博客中有讲解。
2.选择器:两个选择器,一个是送入ALU中数据的选择器,第二个是DM和ALU计算结果的选择。
I型指令:立即数与寄存器堆操作。数据通路如下:通过clk控制pc从IM中取指令,指令送入寄存器堆(RF)和立即数生成单元(EXT)中,从寄存器堆(RF)中取出数据与立即数生成单元(EXT)数据共同进入运算单元(ALU)进行运算,运算结果通过选择器直接(或者访存,将内存中数据)写回寄存器堆。
解释:S型指令与访存类指令其实是一个相反的过程,S型指令是把ALU结果存储的存储器(DM)中去(S型指令不需要写会寄存器堆,也不需要增加其他模块)。
S型指令:将rs2寄存器中的值存储到rs1寄存器偏移立即数位地址中去。数据通路如下:通过clk控制pc从IM中取指令,指令送入寄存器堆(RF)和立即数生成单元(EXT)中,从寄存器堆(RF)中取出数据与立即数生成单元(EXT)数据共同进入运算单元(ALU)进行运算,运算结果作为写入DM的地址,而写入地址中的值是另一个寄存器中的值,具体可以观察上图数据通路。
B型指令主要是条件跳转,满足条件要经行跳转,这里跳转实际上是PC指针的跳转(可以想象C语言函数的调用),因此需要比较是否满足条件,还有PC=(PC+立即数)或者(PC+4)。
添加的部件
CMP:比较部件,比较两个寄存器中的值是否相等,是否满足跳转的条件。
两个选择器:一个是判断PC=(PC+立即数)还是(PC+4)。另一个是判断送入A(RS1寄存器中的值)还是PC的值进入ALU。
B型指令:判断两个寄存器值关系(大于,小于,或者相等),满足对应指令条件,PC跳转。数据通路:通过clk控制pc从IM中取指令,指令送入寄存器堆(RF)和立即数生成单元(EXT)中,判断两个寄存器中数据的关系,满足条件PC跳转到PC+立即数位置去,不满足条件则不跳转。
只增加了蓝色的那一条线
这里很好理解,J型与B型的区别在于,B型是有条件跳转,而J型则是无条件跳转,同时J型需要把PC+4存储到寄存器堆中。
J型指令:将pc+4存储到rd寄存器中,同时pc跳转到pc+立即数位置去。数据通路不在解释,与上面类似。
改进:这几天思考我向pc+4和pc+立即数这样的操作其实没必要使用ALU来完成,不如直接使用一个加法器实现,因此对上面的数据通路做了一个小的改变(主要是写代码的是否变了)总结上文中主要讲解了,RISC-V的数据通路基本部分,但是我们发现上面有很多的选择器,而每个选择器其实都要有对应的控制信号,那这些控制信号怎么产生那?还有这么多条指令,有如何识别对应的指令那?这就需要说的另一个重要组成部分,控制器。它是负责给数据通路对应的控制信号,同时判断指令类型的。下一篇博客我将会讲解我自己学习控制器的部分。
我对学习RISC-V踩过的坑:不要一上来就急于直接看代码。学习RISC-V时,首先要理解RISC-V指令集,我的上一篇博客就是讲解自己理解的一些基本指令集,接下来就是要学习各种指令类型对应的数据通路。接下来理解控制器。最后就是各各模块的代码编写了。后续我也会把自己各各模块写入博客,期待大家的关注。
上文的数据通路也是我自己查资料,看视频理解的,可能存在一些错误,还望各位指点。
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧