解碼階段
現(xiàn)在我們拿到了指令, 「前四位是操作碼」 對應的是指令表中的LOAD A指令。對應的描述是**「將RAM的值放入寄存器A」**
「后四位1110是RAM的內(nèi)存地址」 ,轉(zhuǎn)成十進制就是14.
控制單元
指令通過”控制單元“進行 「解碼」 。解碼的作用就是判斷這個操作碼對應的操作是什么(通過少量的邏輯門即可判斷)
針對不同的操作碼有對應的指令判斷電路從而執(zhí)行不同的操作。例如下面這個就是檢查操作碼是不是LOADA(0010)指令。
執(zhí)行階段
指令寄存器拿到數(shù)據(jù)DATA后通過控制單元進行解碼,現(xiàn)在我們知道了這個是LOADA指令,就可以進行執(zhí)行階段了
- 「打開RAM允許讀取線」 :我們將檢查LOADA指令的電路連接到RAM的READ ENBALE中( 「如果LOADA輸輸出為1那么READN ENANLE也是1因此就會打開RAM的允許讀取線」 ),「并把地址14傳入過去?!?/strong>
- 「讀取RAM 對應地址的值」 :RAM拿到地址14上的值,0000 0001也就是十進制的三
- 「RAM DATA線連接所有的寄存器」 :LOAD_A指令代表這個值存儲在A寄存器中并不影響其他寄存器。因此需要將RAM讀出來的值給到寄存器,所以**「RAM的DATA數(shù)據(jù)線需要將所有的寄存器都連接起來(DATA線既可以用來做輸入又可以用來做輸出使用)。」**
- 「打開指定寄存器的允許輸入線」 :用檢查“是否為LOADA指令的電路” 「打開寄存器A的允許寫入線」 (因為是LOADA指令,所以需要將A寄存器的允許寫入打開),這樣就將RAM中地址為14的值輸出保存到了寄存器A中。
- 「取下一條指令指令地址寄存器+1」 :執(zhí)行階段結(jié)束。開始下一個取指令階段(讀取0001的RAM地址到指令寄存器中,然后在解碼執(zhí)行........之后一直重復這個過程)
抽象--控制單元
上面解釋的只是一個LOADA指令,「不同的指令由不同的邏輯電路解碼,這些邏輯電路會配置CPU內(nèi)的組件來執(zhí)行對應操作。這些邏輯電路太復雜我們可以把整個邏輯電路封裝為上面所說的控制單元?!?/strong>
小結(jié)
也就是下圖中的線路。可以看到控制單元 「鏈接了所有的寄存器」 (用于存放和讀取數(shù)字),和RAM鏈接的是 「允許讀取和允許輸入線」 (READ ENABLE WRITE ENABLE),還有一條線是**「ADDRESS INPUT」** ,這條線是用來告知使用的是16個地址空間中的哪個地址(比如之前的14)
上面解釋了指令表中的LOADA指令,LOADB指令和LOADA原理一致,包括STOREB也是只不過是相反過來 「打開寄存器的允許讀取和RAM的允許寫入傳入地址最后將寄存器的值通過DATA線給到RAM對應地址」 。但是ADD指令有些不同,我們看下這個操作碼是如何做處理的。
參考資料
[1]https://juejin.cn/post/7134166674160222221/:https://juejin.cn/post/7134166674160222221/
-
寄存器
+關(guān)注
關(guān)注
31文章
5434瀏覽量
124481 -
cpu
+關(guān)注
關(guān)注
68文章
11080瀏覽量
217080 -
RAM
+關(guān)注
關(guān)注
8文章
1392瀏覽量
117525 -
ALU
+關(guān)注
關(guān)注
0文章
34瀏覽量
13315
發(fā)布評論請先 登錄
寄存器變量
關(guān)于Block RAM的寄存器輸出

如何在VHDL中實現(xiàn)一個簡單的寄存器

評論