什麼是水平微程式碼?


在水平微程式碼中,每個微操作在每個微指令中都用一位表示。水平微程式碼通常包含在一個相當寬的控制儲存器中,每個字為 56 位或更多並不罕見。在時序器時鐘的每次脈衝下,讀取一個微程式碼字,對其進行解碼,並用於控制構成 CPU 的功能部件。微操作及其助記符如表所示。

非常簡單的 CPU 的微操作及其助記符

助記符微操作
ARPCAR←PC
ARDRAR←DR[5….0]
PCINPC←PC+1
PCDRPC←DR[5…0]
DRMDR←M
IRDRIR←DR[7…6]
PLUSAC←AC+DR
ANDAC←AC ^ DR
ACINAC←AC+1

由於有九個微操作,每個微程式碼字需要 9 位來表示它們,每個微操作 1 位。值為 1 表示微操作將發生,值為 0 表示它不會發生。為了完成微程式碼,可以簡單地填寫微操作的值。生成的微程式碼如表所示。

非常簡單的微程式控制器初步水平微程式碼

狀態地址SELARPCARDRPCINPCDRDRMIRDRPLUSANDACINADDR
FETCH10000 (0)01000000000001
FETCH20001(1)00010100000010
FETCH30010(2)1010001000XXXX
ADD11000(8)00000100001001
ADD21001(9)00000001000000
AND11010(10)00000100001011
AND21011(11)00000000100000
JMP11100(12)00001000000000
INC11110(14)00000000010000

在生成控制訊號之前,它會檢視微程式碼以瞭解如何對其進行最佳化。ARDR 和 IRDR 具有相同的值。它不需要兩個輸出來表示相同的值,它可以使用一個輸出推匯出這兩個微操作,AIDR,它組合了兩個微操作 **AR←DR[5….0]** 和 **IR←DR[7…6]**。修改後的微程式碼如表所示。

非常簡單的微程式控制器最佳化後的水平微程式碼

狀態地址SELARPCARDRPCINPCDRDRMIRDRPLUSANDACINADDR
FETCH10000 (0)01000000000001
FETCH20001(1)00010100000010
FETCH30010(2)1010001000XXXX
ADD11000(8)00000100001001
ADD21001(9)00000001000000
AND11010(10)00000100001011
AND21011(11)00000000100000
JMP11100(12)00001000000000
INC11110(14)00000000010000

更新於: 2021-07-27

544 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.