第四章 8051 探討
4.5 內部元件探討
其內部分為五個部分,分別為控制單元(Controller)、隨機存取記憶體(RAM) 、 程式記憶體(Rom) 、算術邏輯單元(Arithmetic logic unit)和指令解碼器(Decoder)。
4.5.1 程式記憶體(ROM)
程式記憶體內部存放 8051 執行所需要的程式,由 Program counter 傳入 12bit 的位址線,輸出 8bit 指令資料,指令包含了 op-code 和運算子。ROM 的容量為
4KB。
在 Quartus II 提供了 Mega-function(參照圖 24),能方便的建立 ROM 模組。
藉由 Mega-function 可以依需求定義 ROM 的 size、資料寬度和初始化文件。初始 化文件支援兩種模式:一種為 HEX 檔案(intel format),一種為.mif 檔案。HEX 檔 案為常見的 8051 程式編譯後的檔案格式;.mif 則為 Quartus II 提供可直接定義
ROM 內部資料的一種檔案格式。本研究中使用前者,更新測詴的 8051 程式。
35
圖 24 Quartus II Mega-function
4.5.2 解碼器(Decoder)
用以解碼從 controller 內指令暫存器的指令。在指令解碼時產生對應的
op-code,並且判斷指令如果需要額外的運算子,則回傳給 controller 相對應的信 號。輸入長度為 8bit,輸出為 9bit。其中輸出的 1 到 7bit 為 op-code,8、9bit 用以 通知 controller 需要抓取第 2 或第 3 個 byte 的指令來當運算子。
4.5.3 算術邏輯單元(ALU)
由 controller 傳入所需的運算元和運算子,把結果傳回 controller 的暫存器,
除了指令運算外,Program counter 的更新也是由其完成。
4.5.4 隨機存取記憶體(RAM)
8051 內有 256byte 的內部暫存器。配置如下:
00H-7FH 為內部資料記憶體。
00H-1FH 為 4 個工作暫存器庫,每個暫存器庫有 8 個暫存器,每個暫存 器為 8bit,程式將其定義為 R0-R7,暫存器庫則是由程式狀態字組(PSW) 選擇。
20H-2FH 為位元定址區。
30H-7FH 為使用者記憶體。
位址 80H-FFH 為特殊功能暫存器(SFR)。其不可存取資料,只當暫存器 使用。
4.5.5 控制單元(controller):
根據架構圖,可以得知 controller 是控制指令流程順序的主要元件,根據指令 執行階段,發出控制的訊號,指令包括 49 個 1byte 的指令,45 個 2byte 跟 17 個 3byte 長度的指令,是由有限狀態機(finite state machine)來完成這項功能。
37
定義四種 CPU_STATES,其中 CS_0 為重置(reset)狀態,指令取得跟解碼為
CS_2 跟 CS_3 指令執行流程,CS_1 則是保留給處理中斷。流程圖如下:
圖 25 CPU_STATE 流程圖
在每個 CPU_STATE 的狀態下還有 8 個 EXE_STATES,用以控制每個 CPU_STATE 下依序需要處理的資料路徑。CS_0 內只使用 6 個 EXE_STATE,CS_2、
CS_3 則是使用 8 個。
指令執行步驟如下:
CPU_STATE:
CS_0 :控制 reset 週期,進入該狀態則把所有狀態初始化。依序進行以下
EXE_STATE
ES_0:輸出 Port_0 初始化為 FFh。更改 EXE_STATE ES_1。
ES_1:輸出 Port_1 初始化為 FFh。更改 EXE_STATE ES_2。
ES_2:輸出 Port_2 初始化為 FFh。更改 EXE_STATE ES_3。
ES_3:初始化輸出 Port_3 為 FFh。更改 EXE_STATE ES_4。
ES_4:初始化堆疊指向寄存器 07H。變化 EXE_STATE 到 ES_5。
ES_5:更改 EXE_STATE ES_0 和 CPU_STATE 到 CS_1。
CS_1 為保留給中斷處理,所以直接跳入 CS2
CS_2 為取得指令和運算子跟指令解碼。在這個周期,controller 會取得適當 的指令的長度,並且把運算子存於內部的暫存器,同時應用算數運算單元(ALU) 更新 PC 暫存器的值,並且從 decoder 取得運算的代碼(op-code)。
CS_3 為指令執行週期,controller 會依據 CS_2 取得的 op-code 判斷要如何執 行動作,執行完畢後跳回 CS_1,接續執行下一道指令。
圖 26 EXE_STATE 流程圖
39