教学叙事基于fpga cpu数据通路的设计与实现
CPU的主要构件有:指令地址寄存器PC、指令存储器 (InstMem)、寄存器堆 (RegFile)、立即数生成器(ImmGen)、运算单元 (ALU)、控制单元(CTRL)、数据存储器(DMEM)
相信假如没有学过计算机组成原理,看到这里会很乏力,确实是很抽象,所以这里给出我的设计,按照这个设计我们照着具体指令重新来捋一遍(将我们实验课的流程反过来)
我设计的数据通路如下图:漫画女图片
尊重自己
建议照着图边看边比划,举几个栗子:
手机浏览器哪个好用 这条指令是什么意思捏,就是将 x1和 x0寄存器的内容相加,然后写到 x2中。
那这一条指令就执行完毕了。
这条指令是什么意思捏,就是将 PC+4写到寄存器 x2中,同时要跳转到 Label处。
那这一条指令就执行完毕了。
这条指令是什么意思捏,就是判断寄存器 x1和寄存器 x2的内容是否相等,假如相等则跳到 PC + Label处,否则顺序进行(PC + 4)。
那这一条指令就执行完毕了。
这条指令是什么意思捏,就是将存储器中地址为 20 + num[x1]的数据写到寄存器 x2中。
那这一条指令就执行完毕了。
这条指令是什么意思捏,就是将寄存器 x2中的数据写到存储器中地址为 20 + num[x1]处。
那这一条指令就执行完毕了。
其他指令大同小异,大伙就自己康康,很快就清晰了,有问题也可以评论区讨论。
注意:这里有一些指令是需要单独处理的,比如 lui和 auipc等等这些,方法其实比较灵活,以 lui为栗子:
看起来好像后者更麻烦,但是在电路上差别不大,都是复用相同的部件,只是控制信号不同
那么了解相应的部件功能和信号含义后,你也可以设计相应的 CPU啦
虽然可能你对于单独设计一个全新架构的 CPU感到迷茫和吃力,但是我们可以在已有的架构基础上做自己的修改呀。这样也是在考验你对一条指令执行过程的熟悉程度,至于创新嘛,总得有个基础和过程。
可以不用照着我的设计,毕竟这种东西嘛很自由。比如说我想把比较放在 ALU中的减法一起完成行不行?也可以,就是少了个 COMP模块和 ALU需要多几个输入输出而已。
蟋蟀科 但是在这之前,建议先写出数据通路表和控制信号取值表,将相应的接口和信号控制写出来。这样一方面画图的时候思路会更清晰,写代码的时候也会有个对照表。在画图或者写代码的时候假如有所修改,也可以回来修改这个表格,毕竟它只是你理清思路的一种做法。
这里给出我的数据通路表和控制信号取值表,大伙也可以照着这个格式写一写。
塞翁失马的意思>护发素和发膜的区别
所谓数据通路表,就是对于我们所说的关键部件,它们的输入分别是什么,来自哪里(输出体现在下一个部件的输入上)
丰满美女图 而控制信号取值表,就是对于每一个部件而言,是具有不同功能的(比如寄存器堆可以读也可以写,因此需要有个读写使能)。那么这些控制信号的规定,就体现在这张表中。