欢迎光临散文网 会员登陆 & 注册

#5 处理器架构2(Part.3)LEG架构全解(逻辑算术+条件跳转)

2023-08-05 00:26 作者:-郭两岁  | 我要投稿


其实关于做架构的这几关全部都是相通的,只是不断增加功能而已

但是其实都做到这一关了,大家应该都已经非常熟悉这个游戏了

所以一次性讲完应该也是可以的

先总结一波这几关用到的指令集

指令集

红色为0,绿色为1,总结之后照着这张图画电路就很好画了

先介绍几个我用到的自定义元件

1.6xRegister

6xRegister

就是把需要用到的6个寄存器统一管理控制

然后有两对分别独立的读取控制和输出口

还有一个写入地址口,写入数值口,写入控制口

为了方便统一管理罢了

2.COND FOR LEG

COND FOR LEG

条件判断组件

输入两个数值和判断条件,输出是否成立

因为是一个独立的功能所以就做成元件了

3.ALU FOR LEG

ALU FOR LEG

逻辑算术单元

输入两个数值和命令,输出计算结果

4.667

667

哈哈哈哈哈哈这是我自己起的名字

因为在LEG里面需要判断6(计数器)和7(外部输入输出)

判等器放在电路里面太乱了

所以我就把跟6,7的判等和<6的判断做成了元件

然后三个输出(<6,=6,=7)分别对应寄存器,计数器和外部输入输出

方便我的控制

然后就起名字叫做667(好搞笑哈哈哈哈哈)

LEG架构(逻辑算术+条件跳转)

我的思路是

先在左边设立需要用到的总线(参数1/2,结果地址,输入(出)和输入(出)激活,还有一条操作码)

然后观察指令集可以发现两套模式(算术和条件跳转)对参数的处理都是一致的

所以就先对输入参数进行处理,得到参数对应的数值,作为总线放在右边供不同模式进行调用

如图所示,青色电路和蓝色电路分别就是参数1和参数2,它们有一条分支只向右走并且在线路分选器被选择,然后用一个分线器判断该参数是不是立即数(紫色电路且标明文字“1/2立即数”),如果是立即数的话这个参数直接进入总线,否则的话就只能将处理后的参数通入总线

除了判断立即数之外,两个参数还各有一根向上走的支路,经过一个跟7的判等器,通入6xRegister。跟7的判等决定了是否调用外部输入,并且在6x寄存器右侧通过线路分选器选择是通过寄存器输出的值还是外部输入的值。

至此,对输入参数的处理已经完成并且导入到右端总线。

因为结果地址有可能指向写入寄存器的地址,也可能指向条件跳转的命令行,所以从结果地址引线到寄存器的写入地址入口和计数器修正数值口待定。

第二步是完成逻辑算术。放置一个ALU FOR LEG在总线右侧,两个参数输入端口分别连接两个参数的总线,将操作码接入ALU的命令入口,将算术控制线接入ALU的激活开关,并从结果输出口引出结果,拉一条结果数值的总线,分别指向外部输出,寄存器写入口和计数器修正数值入口。

第三步是完成条件判断。防止COND FOR LEG在电路中并且接入两条参数的电路,将控制码接入命令入口并且将条件跳转控制线接入COND的激活开关,结果输出先待用。

第四步对现有线路进行功能整合。

①当条件跳转激活的时候条件成立,或者算术模式的时候结果地址为6,那么计数器修正激活打开,可以将ALU计算结果或者结果地址参数导入计数器,选择哪个数值取决于COND FOR LEG的电平(如果电平是1说明是条件跳转模式,导入结果地址参数,如果是0说明是算术模式,导入计算结果),通过线路分选器实现(最右上角部分)

②在算术模式下并且(AND)结果地址参数小于6,才打开6xRegister的写入激活(即667自定义元件右下边的AND门)

③两个跟7的判等器的输出用OR门连接后输出到外部输入控制线,表示需要外部输入,然后将两个判等器的输出接到线路分选器上决定使用哪个数值。

④当结果地址等于7时激活外部输出(即667第三个输出口的线路)



至此LEG架构的两大功能已经设计好了(算术,条件跳转)

之后还会有内存的操作和栈的操作

因为难度有点大

虽然我已经玩过了但是为了能够清晰地表达出来

我可能需要一些时间慢慢消化一下

所以之后的更新可能没那么快啦


#5 处理器架构2(Part.3)LEG架构全解(逻辑算术+条件跳转)的评论 (共 条)

分享到微博请遵守国家法律