#5 處理器架構(gòu)2(Part.3)LEG架構(gòu)全解(邏輯算術(shù)+條件跳轉(zhuǎn))


其實(shí)關(guān)于做架構(gòu)的這幾關(guān)全部都是相通的,只是不斷增加功能而已
但是其實(shí)都做到這一關(guān)了,大家應(yīng)該都已經(jīng)非常熟悉這個(gè)游戲了
所以一次性講完應(yīng)該也是可以的
先總結(jié)一波這幾關(guān)用到的指令集

紅色為0,綠色為1,總結(jié)之后照著這張圖畫電路就很好畫了

先介紹幾個(gè)我用到的自定義元件
1.6xRegister

就是把需要用到的6個(gè)寄存器統(tǒng)一管理控制
然后有兩對(duì)分別獨(dú)立的讀取控制和輸出口
還有一個(gè)寫入地址口,寫入數(shù)值口,寫入控制口
為了方便統(tǒng)一管理罷了
2.COND FOR LEG

條件判斷組件
輸入兩個(gè)數(shù)值和判斷條件,輸出是否成立
因?yàn)槭且粋€(gè)獨(dú)立的功能所以就做成元件了
3.ALU FOR LEG

邏輯算術(shù)單元
輸入兩個(gè)數(shù)值和命令,輸出計(jì)算結(jié)果
4.667

哈哈哈哈哈哈這是我自己起的名字
因?yàn)樵贚EG里面需要判斷6(計(jì)數(shù)器)和7(外部輸入輸出)
判等器放在電路里面太亂了
所以我就把跟6,7的判等和<6的判斷做成了元件
然后三個(gè)輸出(<6,=6,=7)分別對(duì)應(yīng)寄存器,計(jì)數(shù)器和外部輸入輸出
方便我的控制
然后就起名字叫做667(好搞笑哈哈哈哈哈)


我的思路是
先在左邊設(shè)立需要用到的總線(參數(shù)1/2,結(jié)果地址,輸入(出)和輸入(出)激活,還有一條操作碼)
然后觀察指令集可以發(fā)現(xiàn)兩套模式(算術(shù)和條件跳轉(zhuǎn))對(duì)參數(shù)的處理都是一致的
所以就先對(duì)輸入?yún)?shù)進(jìn)行處理,得到參數(shù)對(duì)應(yīng)的數(shù)值,作為總線放在右邊供不同模式進(jìn)行調(diào)用
如圖所示,青色電路和藍(lán)色電路分別就是參數(shù)1和參數(shù)2,它們有一條分支只向右走并且在線路分選器被選擇,然后用一個(gè)分線器判斷該參數(shù)是不是立即數(shù)(紫色電路且標(biāo)明文字“1/2立即數(shù)”),如果是立即數(shù)的話這個(gè)參數(shù)直接進(jìn)入總線,否則的話就只能將處理后的參數(shù)通入總線
除了判斷立即數(shù)之外,兩個(gè)參數(shù)還各有一根向上走的支路,經(jīng)過(guò)一個(gè)跟7的判等器,通入6xRegister。跟7的判等決定了是否調(diào)用外部輸入,并且在6x寄存器右側(cè)通過(guò)線路分選器選擇是通過(guò)寄存器輸出的值還是外部輸入的值。
至此,對(duì)輸入?yún)?shù)的處理已經(jīng)完成并且導(dǎo)入到右端總線。
因?yàn)榻Y(jié)果地址有可能指向?qū)懭爰拇嫫鞯牡刂?,也可能指向條件跳轉(zhuǎn)的命令行,所以從結(jié)果地址引線到寄存器的寫入地址入口和計(jì)數(shù)器修正數(shù)值口待定。
第二步是完成邏輯算術(shù)。放置一個(gè)ALU FOR LEG在總線右側(cè),兩個(gè)參數(shù)輸入端口分別連接兩個(gè)參數(shù)的總線,將操作碼接入ALU的命令入口,將算術(shù)控制線接入ALU的激活開關(guān),并從結(jié)果輸出口引出結(jié)果,拉一條結(jié)果數(shù)值的總線,分別指向外部輸出,寄存器寫入口和計(jì)數(shù)器修正數(shù)值入口。
第三步是完成條件判斷。防止COND FOR LEG在電路中并且接入兩條參數(shù)的電路,將控制碼接入命令入口并且將條件跳轉(zhuǎn)控制線接入COND的激活開關(guān),結(jié)果輸出先待用。
第四步對(duì)現(xiàn)有線路進(jìn)行功能整合。
①當(dāng)條件跳轉(zhuǎn)激活的時(shí)候條件成立,或者算術(shù)模式的時(shí)候結(jié)果地址為6,那么計(jì)數(shù)器修正激活打開,可以將ALU計(jì)算結(jié)果或者結(jié)果地址參數(shù)導(dǎo)入計(jì)數(shù)器,選擇哪個(gè)數(shù)值取決于COND FOR LEG的電平(如果電平是1說(shuō)明是條件跳轉(zhuǎn)模式,導(dǎo)入結(jié)果地址參數(shù),如果是0說(shuō)明是算術(shù)模式,導(dǎo)入計(jì)算結(jié)果),通過(guò)線路分選器實(shí)現(xiàn)(最右上角部分)
②在算術(shù)模式下并且(AND)結(jié)果地址參數(shù)小于6,才打開6xRegister的寫入激活(即667自定義元件右下邊的AND門)
③兩個(gè)跟7的判等器的輸出用OR門連接后輸出到外部輸入控制線,表示需要外部輸入,然后將兩個(gè)判等器的輸出接到線路分選器上決定使用哪個(gè)數(shù)值。
④當(dāng)結(jié)果地址等于7時(shí)激活外部輸出(即667第三個(gè)輸出口的線路)

至此LEG架構(gòu)的兩大功能已經(jīng)設(shè)計(jì)好了(算術(shù),條件跳轉(zhuǎn))
之后還會(huì)有內(nèi)存的操作和棧的操作
因?yàn)殡y度有點(diǎn)大
雖然我已經(jīng)玩過(guò)了但是為了能夠清晰地表達(dá)出來(lái)
我可能需要一些時(shí)間慢慢消化一下
所以之后的更新可能沒(méi)那么快啦
