陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日 A2-Circuit Synthesis via GRAFCET GRAFCET電路合成 陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日
Microprogram Controller Microprograms Controller(微程式控制器)is control unit is responsible for coordinating actions within the CPU. The control unit decodes the instruction and issue a set of control signals that result in the instruction’s execution. These control signals cause data to be routed correctly within the CPU, generate correct external control signals, such as READ and WRITE, and cause the ALU to perform the correct operation on the data.
1-bit 微程式控制器架構 算數邏輯運算模組(ALU) 程式記憶體模組 (ROM) 多工器模組(Multiplexer) 累加暫存器模組(Accumulater) 資料暫存器(RAM) 程式計數器(PC) 指令解碼器(Decoder) 微程式(Micrprogram)
ALU
程式記憶體模組(ROM) 用以存放程式的記憶體電路。例如一個邏輯函數 F = a.b + c,可寫成三行程式指令,分別存放在3個bit-vector的記憶體: bit-vector# Operator Operand 功能說明 1 LD a 載入a(至ALU的累加暫存器) 2 ANDC b 將暫存器值 與作AND 3 OR c 將累加暫存器值與c作OR
多工器 (Multiplexer) 上述範例中,每一行程式指令必須提取一個operand,這個operand是眾多系統輸入變數中的其中一個,使用多工器,透過address可選取任意變數作為ALU的B端輸入
累加暫存器 (Accumulater) 累加暫存器是一個1-bit記憶體,用來儲存上一個程式指令的運算結果。
1-Bit 微程式 處理器架構
資料暫存器(RAM) 為何需要1-bit RAM?
程式計數器 (PC) 提供要讀取的程式 記憶體的位址(一個 word一個word依 序讀取)
指令解碼器(Decoder) 為了控制1-Bit暫存記憶體ST送至MUX作為一個輸入變數,故需一個指令解碼器(instruction decoder)。
無條件跳躍(Non-conditional Jump) : JMP
有條件的跳躍(conditional Jump) : JMPA
跳躍指令的微程式應用
使用MIAT方法論設計微程式控制器 Instruction Set Design GRAFCET Discrete-Event Modeling High-Level Synthesis GRAFCET Controller Synthesis Datapath Synthesis System Integration
指令集設計 F3 f2 f1 f0 指令 Operand 功能說明 LD (addr) 從RAM的addr位址載入資料到ACC 1 AND LD (addr) 從RAM的addr位址載入資料到ACC 1 AND 從RAM的addr位址載入資料與ACC做AND運算,結果放在ACC OR 從RAM的addr位址載入資料與ACC做OR運算,結果放在ACC ANDC 從RAM的addr位址載入資料,將之反相並與ACC做AND運算,結果放在ACC STORE 將ACC資料存放 JMP [addr] 程式無條件跳躍(改變程式計數器(PC)值為addr) JMPA 如果ACC為1,程式跳躍(改變程式計數器(PC)值為addr) STOP [0] 結束
GRAFCET離散事件建模
Grafcet系統架構
Grafcet模組合成 grafcet:PROCESS(CLK,RST) BEGIN IF RST='1' THEN X0<=‘1’;X1<=‘0’;X2<=‘0’;X3<=‘0’; X4<=‘0’;X5<=‘0’;X6<=‘0’;X7<=‘0’;X8<=‘0’;X9<=‘0’;X10<=‘0’; ELSIF CLK'EVENT AND CLK='1' THEN IF X0='1' THEN X0<='0'; X1<='1'; ELSIF X1='1' THEN IF OP="000" THEN X1<='0'; X2<='1'; ELSIF OP="001" THEN X1<='0'; X3<='1'; ELSIF OP="010" THEN X1<='0'; X4<='1'; ELSIF OP="011" THEN X1<='0'; X5<='1'; ELSIF OP="100" THEN X1<='0'; X6<='1'; ELSIF OP="101" THEN X1<='0'; X7<='1'; ELSIF OP="110" THEN X1<='0'; X8<='1'; ELSIF OP="111" THEN X1<='0'; X9<='1'; END IF; ELSIF X2='1' THEN X2<='0';X10<='1'; ELSIF X3='1' THEN X3<='0';X10<='1'; ELSIF X4='1' THEN X4<='0';X10<='1'; ELSIF X5='1' THEN X5<='0';X10<='1'; ELSIF X6='1' THEN X6<='0';X1<='1'; ELSIF X7='1' THEN X7<='0';X1<='1'; ELSIF X8='1' THEN X8<='0';X1<='1'; ELSIF X9='1' THEN X9<='0';X0<='1'; ELSIF X10='1' THEN X10<='0';X1<='1'; END PROCESS grafcet;
Datapath模組合成 datapath:PROCESS(CLK,RST) BEGIN IF X0='1' THEN ACC<='0';PC<=0;RAM<="10000001"; ELSIF X1='1' THEN OP<="000";ADDR<=0; ELSIF X2='1' THEN ACC<=RAM(ADDR); ELSIF X3='1' THEN ACC<=ACC AND RAM(ADDR); ELSIF X4='1' THEN ACC<=ACC OR RAM(ADDR); ELSIF X5='1' THEN ACC<=NOT(RAM(ADDR)); ELSIF X6='1' THEN RAM(ADDR)<=ACC; ELSIF X7='1' THEN PC<=ADDR; ELSIF X8='1' THEN IF ACC='1' THEN PC<=ADDR; END IF; ELSIF X9='1' THEN PC<=0; ELSIF X10='1' THEN PC<=PC+1; END IF; END PROCESS datapath; OUTPUT<=ACC; END arch;
系統架構整合 architecture arch of microp2 is SIGNAL X0,X1,X2,X3,X4,X5,X6,X7,X8,X9,X10:STD_LOGIC; SIGNAL ACC : STD_LOGIC; SIGNAL RAM : STD_LOGIC_VECTOR(7 downto 0); SIGNAL PC : INTEGER RANGE 0 TO 15; SIGNAL ADDR : INTEGER RANGE 0 TO 7; SIGNAL OP : STD_LOGIC_VECTOR(2 downto 0); BEGIN grafcet:PROCESS(CLK,RST)... datapath:PROCESS(CLK,RST)... OUTPUT<=ACC; END arch;
練習 請參考1-bit微程式控制器,設計一個8-bit CPU,具有12個指令,除了原有微程式控制器8個指令外,另外設計加(ADD)、減(SUB)、遞增(INC)、遞減(DEC)等指令。