搜索
写经验 领红包

芯片设计指令集(如何自己设计芯片)

导语:1.5:从芯片说起~自己设计指令

前一个小节,我们用门电路做好了ALU。现在我们的芯片有了总线、内存、寄存器、ALU,有了操作码可以控制ALU进行指定的运算。

但是,我们没有一套“规范”将整个流程串起来。这套规范要告诉芯片:怎么做事、结果存在哪里。这就是指令的功能。

ALU指令

ALU指令,我们使用一个字节进行编码。

ALU指令

LOAD\STORE指令

LOAD STORE指令

LOAD\STORE指令的含义

DATA指令

DATA指令

DATA指令含义

JUMP指令

JUMP指令

JUMP指令含义

指定地址的跳转指令

指定地址的跳转指令含义

指令选择

这个看过前几个小结的同学应该很明白了。ALU有3bit的操作码,可以用来控制ALU。我们还有额外的一个bit,可以用来确认其他指令。

指令从哪儿来?

有了RAM之后,我们可以把指令放到RAM上。有个问题是:哪个地址存放的才是我们需要的指令?

引入一个新的寄存器IAR(传说中的PC指针、寄存器),用来实时存放指令的地址。引入一个新的寄存器IR,用来存储从RAM中读取到的指令(指令执行还会操作RAM,如果不保存的话,RAM的MAR寄存器会很快被人改写,那RAM的输出就不再是我们想要的只领了)。

取指令

如果只有一条单行道,我们有办法让两辆车一起通过么?显然不行。

同理,我们只有一条总线,取指令、执行指令的各个操作凡是用到了总线,那么一次也只能完成单一的操作(不像人脑,人脑真的是并行)。除非单行路前面分叉,形成多个小路,那么多个操作可以一起执行。但是也只能是单行(记住这句话,很重要)。

我们来看下每个指令周期要做什么,我们才能完成取指令、执行指令的过程。

获取指令地址,同时“PC自增1”。复制IAR寄存器。复制到MAR(RAM地址寄存器,还记得么),同时也复制到ALU的输入:ACC寄存器。使能bus1寄存器(一个神奇的魔鬼数字1,和PC自增1联系起来了)。获取指令内容。复制RAM输出到IAR寄存器。将ACC内容复制到IAR寄存器(ACC现在存放的是 IAR + BUS1 = IAR + 1=指令自增1)

ADD指令执行

以ADD R0,R1为例:

将R1放到TMP寄存器中将R0放到ACC中将ACC放到R0中我们做到哪一步了?

有了指令以及指令的执行步骤(时序),我们剩下要做的就只是根据时钟滴答,从前往后依次执行下面6个步骤,执行完第6个步骤后,再从头开始。

获取指令地址,同时“PC自增1”。复制IAR寄存器。复制到MAR(RAM地址寄存器,还记得么),同时也复制到ALU的输入:ACC寄存器。使能bus1寄存器(一个神奇的魔鬼数字1,和PC自增1联系起来了)。获取指令内容。复制RAM输出到IAR寄存器。将ACC内容复制到IAR寄存器(ACC现在存放的是 IAR + BUS1 = IAR + 1=指令自增1)将R1放到TMP寄存器中将R0放到ACC中将ACC放到R0中

我们剩下的事,就只是再找一个模块儿,能够根据时钟循环完成上面6个步骤,芯片就做好了。就是这么简单。

免责声明:本站部份内容由优秀作者和原创用户编辑投稿,本站仅提供存储服务,不拥有所有权,不承担法律责任。若涉嫌侵权/违法的,请反馈,一经查实立刻删除内容。本文内容由快快网络小媛创作整理编辑!