|
一.實(shí)驗(yàn)?zāi)康?/font>
1.深入理解基本模型計(jì)算機(jī)的功能、組成知識(shí)
2.深入學(xué)習(xí)計(jì)算機(jī)各類典型指令的執(zhí)行流程
3.學(xué)習(xí)微程序控制器的設(shè)計(jì)過(guò)程和相關(guān)技術(shù),掌握LPM_ROM的配置方法
4.在掌握部件單元電路實(shí)驗(yàn)的基礎(chǔ)上,進(jìn)一步將單元電路組成系統(tǒng),構(gòu)造一臺(tái)基本模型計(jì)算機(jī)。
5.定義六條機(jī)器指令,并編寫(xiě)相應(yīng)的微程序,上機(jī)調(diào)試,掌握計(jì)算機(jī)整機(jī)概念。掌握微程序的設(shè)計(jì)方法,學(xué)會(huì)編寫(xiě)二進(jìn)制微指令代碼表。
6.通過(guò)熟悉較完整的計(jì)算機(jī)設(shè)計(jì),全面了解并掌握微程序控制方式計(jì)算機(jī)的設(shè)計(jì)方法。
二.實(shí)驗(yàn)原理
1.在部件實(shí)驗(yàn)過(guò)程中,各不見(jiàn)單元的控制信號(hào)是認(rèn)為模擬產(chǎn)生的,而本實(shí)驗(yàn)將能在微過(guò)程控制下自動(dòng)產(chǎn)生各部件單元控制信號(hào),實(shí)現(xiàn)特定的功能。實(shí)驗(yàn)中,計(jì)算機(jī)數(shù)據(jù)通路的控制將由微過(guò)程控制器來(lái)完成,CPU從內(nèi)存中取出一條及其指令到指令執(zhí)行結(jié)束的一個(gè)指令周期,全部由微指令組成的序列來(lái)完成,即一條機(jī)器指令對(duì)應(yīng)一個(gè)微程序。
2.指令格式
(1)機(jī)器指令格式
采用寄存器直接尋址方式,其格式如下:
位 | 7 6 5 4 | 3 2 | 1 0 | 功能 | 操作碼(OP-CODE) | 源寄存器(Rs) | 目的寄存器(Rd) |
其中寄存器地址規(guī)定如下
Rs或Rd地址 | 選定的寄存器 | 00 01 10 | R0 R1 R2 |
模型計(jì)算機(jī)支持的指令如下
指令助記符 | 機(jī)器指令碼 | Addr地址碼 | 功能說(shuō)明 | IN
OUT addr
SUB addr
AND addr
OR addr
XOR addr
MOV #num
LDR addr
| 00H
10H xxH
20H xxH
30H xxH
40H xxH
50H xxH
60H xxH
70H xxH
| “INPUT”中的數(shù)據(jù) → R0
[addr] → OUT
R0 - [addr] → R0
R0 & [addr] → R0
R0 | [addr] → R0
R0 ^ [addr] → R0
num → R0
[addr] → R0
|
其中IN為單字節(jié)指令,其余為雙字節(jié)指令,xxH為addr對(duì)應(yīng)的十六進(jìn)制地址碼。為了向RAM中裝入程序和數(shù)據(jù),檢查寫(xiě)入是否正確,并能啟動(dòng)程序執(zhí)行,還需要設(shè)計(jì)三個(gè)控制臺(tái)微程序用于對(duì)控制器的控制。
1.存儲(chǔ)器讀操作(KRD):下載實(shí)驗(yàn)程序后按總清除按鍵(CLR)后,控制臺(tái)SWA、SWB為“00”時(shí),可對(duì)RAM連續(xù)手動(dòng)讀入操作。
2.存儲(chǔ)器寫(xiě)操作(KWE):下載實(shí)驗(yàn)程序后按總清除按鍵(CLR)后,控制臺(tái)SWA、SWB為“01”時(shí),可對(duì)RAM連續(xù)手動(dòng)寫(xiě)入操作。
3.啟動(dòng)程序(RP):下載實(shí)驗(yàn)程序后按總清除按鍵(CLR)后,控制臺(tái)SWA、SWB為“11”時(shí),即可轉(zhuǎn)入到微地址“01”號(hào)“取指令”微指令,啟動(dòng)程序運(yùn)行。
控制臺(tái)微程序操作如下
SWB | SWA | 控制臺(tái)指令 | 0 0 1 | 0 1 1 | 讀內(nèi)存(KRD) 寫(xiě)內(nèi)存(KWE) 啟動(dòng)程序(RP) |
(2)微指令格式
24位微指令格式如下
24 | 23 | 22 | 21 | 20 | 19 | 18 | 17 | 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | S3 | S2 | S1 | S0 | M | Cn | WE | A9 | A8 | A[2] | A[1] | A[0] | B[2] | B[1] | B[0] | C[2] | C[1] | C[0] | uA5 | uA4 | uA3 | uA2 | uA1 | uA0 | 其中A、B、C各個(gè)字段功能說(shuō)明
(1)uA5-uA0:微程序控制器的微地址輸出信號(hào),下一條要執(zhí)行的微指令的微地址。
(2)S3、S2、S1、S0:由微程序控制器輸出地ALU操作選擇信號(hào),以控制指令16種算術(shù)操作中的某一種操作。
(3)M:微程序控制輸出地ALU操作方式選擇信號(hào)。M=0時(shí)執(zhí)行算術(shù)操作;M=1時(shí)執(zhí)行邏輯操作。
(4)Cn:微程序控制器輸出的進(jìn)位標(biāo)志信號(hào),Cn=0時(shí)表示ALU運(yùn)算時(shí)最低位有進(jìn)位,Cn=1時(shí)表示無(wú)進(jìn)位。
(5)WE:微程序控制器輸出地RAM控制信號(hào)。當(dāng)/CE=0時(shí),WE=0為存儲(chǔ)器讀;WE=1為存儲(chǔ)器寫(xiě)。
(6)A9、A8——譯碼后產(chǎn)生CS0、CS1、CS2信號(hào),分別作為SW_B、RAM、LED的選通信號(hào)。
(7)A字段(15、14、13)——譯碼后產(chǎn)生與總線相連接的各單元的輸入選通信號(hào)。
(8)B字段(12、11、10)——譯碼后產(chǎn)生與總線相連接的各單元的輸出選通信號(hào)。
(9)C字段(9、8、7)——譯碼后產(chǎn)生分支判斷測(cè)試信號(hào)P(1)~P(4)和LDPC信號(hào)。
系統(tǒng)涉及到的微程序流程見(jiàn)圖xx。當(dāng)執(zhí)行“取指令”微指令時(shí),該微指令的判斷測(cè)試字段微P(1)測(cè)試。由于“取指令”微指令是所有微程序都使用的公共微指令,因此P(1)的測(cè)試結(jié)果出現(xiàn)多路分支。 用指令寄存器的高4位(IR7-IR4)作為測(cè)試條件,出現(xiàn)5路分支,占用5各固定地址單元。
控制臺(tái)操作為P(4)測(cè)試,它以控制臺(tái)信號(hào)SWB、SWA作為測(cè)試條件,出現(xiàn)了3路分支,占用3個(gè)固定位地址單元。當(dāng)分支位地址單元固定后,剩下的其他地方就可以一條微指令占用控制存儲(chǔ)器的一個(gè)微地址單元,隨意填寫(xiě)。
簡(jiǎn)而言之:
M:運(yùn)算模式選擇,0:算術(shù)運(yùn)算;1:邏輯運(yùn)算
Cn:進(jìn)位標(biāo)志位,0:最低位有進(jìn)位;1:無(wú)進(jìn)位
WE:RAM寫(xiě)使能信號(hào),0:RAM讀使能;1:RAM寫(xiě)使能
A9 A8:
(00)b:IN→BUS;
(01)b:RAM→BUS;
(10)b:BUS→OUT;
A:
(001)b:BUS→Rx(匯編指令中I1 I0指明寄存器地址)
(010)b:BUS→DR1
(011)b:BUS→DR2
(100)b:BUS→IR(指令寄存器)
(101)b:BUS→PC
(110)b:BUS→AR(地址寄存器)
B:
(001)b:Rx→BUS(匯編指令中I3 I2指明寄存器地址)
(010)b:Rx→BUS(匯編指令中I1 I0指明寄存器地址)
(011)b:
(100)b:
(101)b:ALU→BUS
(110)b:PC→BUS
C:
(001)b:測(cè)試匯編指令,跳轉(zhuǎn)到相應(yīng)微程序首地址
(010)b:
(011)b:
(100)b:測(cè)試控制臺(tái)輸入狀態(tài),跳轉(zhuǎn)到控制用的微程序首地址
(101)b:
(110)b:PC+1→PC
當(dāng)全部微程序設(shè)計(jì)完畢后,應(yīng)將每條微指令代碼化:
微地址 | 微指令 | S3 S2 S1 S0 M CN WE A9 A8
| A | B | C | uA5——uA0 | 00 | 018110 | 0 0 0 0 0 0 0 1 1
| 000 | 000 | 100 | 010000 | 01 | 01ED82 | 0 0 0 0 0 0 0 1 1
| 110 | 110 | 110 | 000010 | 02 | 00C048 | 0 0 0 0 0 0 0 0 1
| 100 | 000 | 001 | 001000 | 03 | 000000 |
|
|
|
|
| 04 | 000000 |
|
|
|
|
| 05 | 000000 |
|
|
|
|
| 06 | 000000 |
|
|
|
|
| 07 | 000000 |
|
|
|
|
| 10 | 001001 | 0 0 0 0 0 0 0 0 0
| 001 | 000 | 000 | 000001 | 11 | 01ED98 | 0 0 0 0 0 0 0 1 1
| 110 | 110 | 110 | 011000 | 12 | 01ED9B | 0 0 0 0 0 0 0 1 1
| 110 | 110 | 110 | 011011 | 13 | 01ED9F | 0 0 0 0 0 0 0 1 1
| 110 | 110 | 110 | 011111 | 14 | 01EDA3 | 0 0 0 0 0 0 0 1 1
| 110 | 110 | 110 | 100011 | 15 | 01EDA7 | 0 0 0 0 0 0 0 1 1
| 110 | 110 | 110 | 100111 | 16 | 01EDAB | 0 0 0 0 0 0 0 1 1
| 110 | 110 | 110 | 101011 | 17 | 01EDAD | 0 0 0 0 0 0 0 1 1
| 110 | 110 | 110 | 101101 | 20 | 01EDAF | 0 0 0 0 0 0 0 1 1
| 110 | 110 | 110 | 101111 | 21 | 000000 |
|
|
|
|
| 22 | 000000 |
|
|
|
|
| 23 | 018001 | 0 0 0 0 0 0 0 1 1
| 000 | 000 | 000 | 000001 | 24 | 000000 |
|
|
|
|
| 25 | 000000 |
|
|
|
|
| 26 | 000000 |
|
|
|
|
| 27 | 000000 |
|
|
|
|
| 30 | 00E019 | 0 0 0 0 0 0 0 0 1
| 110 | 000 | 000 | 011001 | 31 | 00A01A | 0 0 0 0 0 0 0 0 1
| 010 | 000 | 000 | 011010 | 32 | 010A01 | 0 0 0 0 0 0 0 1 0
| 000 | 101 | 000 | 000001 | 33 | 00E01C | 0 0 0 0 0 0 0 0 1
| 110 | 000 | 000 | 011100 | 34 | 00B01D | 0 0 0 0 0 0 0 0 1
| 011 | 000 | 000 | 011101 | 35 | 01A21E | 0 0 0 0 0 0 0 1 1
| 010 | 001 | 000 | 011110 | 36 | 619A01 | 0 1 1 0 0 0 0 1 1
| 011 | 101 | 000 | 000001 | 37 | 00E020 | 0 0 0 0 0 0 0 0 1
| 110 | 000 | 000 | 100000 | 40 | 00B021 | 0 0 0 0 0 0 0 0 1
| 011 | 000 | 000 | 100001 | 41 | 01A222 | 0 0 0 0 0 0 0 1 1
| 010 | 001 | 000 | 100010 | 42 | B99A01 | 1 0 1 1 1 0 0 1 1
| 001 | 101 | 000 | 000001 | 43 | 00E024 | 0 0 0 0 0 0 0 0 1
| 110 | 000 | 000 | 100100 | 44 | 00B025 | 0 0 0 0 0 0 0 0 1
| 011 | 000 | 000 | 100101 | 45 | 01A226 | 0 0 0 0 0 0 0 1 1
| 010 | 001 | 000 | 100110 | 46 | E99A01 | 1 1 1 0 1 0 0 1 1
| 001 | 101 | 000 | 000001 | 47 | 00E028 | 0 0 0 0 0 0 0 0 1
| 110 | 000 | 000 | 101000 | 50 | 00B029 | 0 0 0 0 0 0 0 0 1
| 011 | 000 | 000 | 101001 | 51 | 01A22A | 0 0 0 0 0 0 0 1 1
| 010 | 001 | 000 | 101010 | 52 | 699A01 | 0 1 1 0 1 0 0 1 1
| 001 | 101 | 000 | 000001 | 53 | 009001 | 0 0 0 0 0 0 0 0 1
| 001 | 000 | 000 | 000001 | 54 | 000000 |
|
|
|
|
| 55 | 00E02E | 0 0 0 0 0 0 0 0 1
| 110 | 000 | 000 | 101110 | 56 | 009001 | 0 0 0 0 0 0 0 0 1
| 001 | 000 | 000 | 000001 | 57 | 009001 | 0 0 0 0 0 0 0 0 1
| 001 | 000 | 000 | 000001 | 指令寄存器(IR):指令寄存器用來(lái)保存當(dāng)前正在執(zhí)行的一條指令。當(dāng)執(zhí)行一條指令時(shí),先把它從內(nèi)存取到緩沖寄存器中,然后再傳送至指令寄存器。指令劃分為操作碼和地址碼段,由二進(jìn)制數(shù)構(gòu)成,為了執(zhí)行任何給定的指令,必須對(duì)操作碼進(jìn)行測(cè)試“P(1)”,通過(guò)節(jié)拍脈沖T4的控制,以便識(shí)別所要求的操作。
指令譯碼器:根據(jù)指令中的操作碼強(qiáng)置微控制器單元的微地址,使下一條微指令指向相應(yīng)的微程序首地址。
實(shí)驗(yàn)中LCD顯示屏可以用來(lái)顯示模型機(jī)CPU中各組成單元的內(nèi)容。將FPGA 配置文件下載到實(shí)驗(yàn)臺(tái)后,按系統(tǒng)復(fù)位鍵,LCD液晶顯示屏即顯示CPU中各組成單元的內(nèi)容。其功能說(shuō)明如下:
指令名稱 | 作用 | 指令名稱 | 作用 | IN | 輸入單元INPUT | DR1 | 暫存器DR1 | OUT | 輸出單元OUPUT | DR2 | 暫存器DR2 | ALU | 算術(shù)邏輯單元 | PC | 程序計(jì)數(shù)器 | BUS | 內(nèi)部數(shù)據(jù)總線 | AR | 地址寄存器 | R0 | 寄存器R0 | RAM | 程序/數(shù)據(jù)存儲(chǔ)器 | R1 | 寄存器R1 | IR | 指令寄存器 | R2 | 寄存器R2 | MC | 微程序控制器 |
測(cè)試微程序的機(jī)器指令如下:
地址(16進(jìn)制) | 內(nèi)容(16進(jìn)制) | 助記符 | 說(shuō)明 | 00 | 00 | IN | “INPUT”中的數(shù)據(jù)66H → R0 | 01 | 10 | OUT 60H | [60H] → OUT 間接尋址,其中60H中數(shù)據(jù)為44H | 02 | 60 | 03 | 20 | SUB 61H | R0 - [61H] → R0 其中61H中數(shù)據(jù)為55H | 04 | 61 | 05 | 30 | AND 62H | R0 & [62H] → R0 其中62H中數(shù)據(jù)為01H | 06 | 62 | 07 | 40 | OR 63H | R0 | [63H] → R0 其中63H中數(shù)據(jù)為F0H | 08 | 63 | 09 | 50 | XOR 64H | R0 ^ [64H] → R0 其中64H中數(shù)據(jù)為00H | 0A | 64 | 0B | 60 | MOV #33H | 33H → R0 立即數(shù)尋址方式,將33H送到R0 | 0C | 33 | 0D | 70 | LDR 65H | [65H] → R0 間接尋址方式,其中65H中數(shù)據(jù)為77H | 0E | 65 |
三.實(shí)驗(yàn)步驟
1.微程序的輸入
根據(jù)二進(jìn)制微指令表,編輯LPM_ROM配置文件,與實(shí)驗(yàn)電路一同編譯后,得到FPGA的配置文件,將該文件下載到實(shí)驗(yàn)系統(tǒng)。實(shí)驗(yàn)板上的時(shí)鐘clock0選擇輸入頻率為1.5MHz。
2.輸入模型機(jī)的程序,這里采用自動(dòng)寫(xiě)入
(1)在QuartusII環(huán)境下,選擇LPM_RAM_DQ的存儲(chǔ)器初始文件(mif文件)為MyRam.mif文件
(2)將工程文件重新編譯后,下載到FPGA中,即完成LPM_RAM的配置。
(3)根據(jù)以上方法,復(fù)位信號(hào)RST(鍵8)=1;將控制開(kāi)關(guān)SWB、SWA(鍵4、鍵3)設(shè)置為0、0,按鍵7,每?jī)蓚(gè)
2次單步運(yùn)行(產(chǎn)生2個(gè)正脈沖)。
3.執(zhí)行程序
(1)按1次系統(tǒng)復(fù)位鍵8,并置鍵8為高電平,使CPU允許正常工作;
(2)控制開(kāi)關(guān)(鍵4、鍵3)設(shè)置為SWB、SWA=1,1,處于程序執(zhí)行方式,觀察圖6-1控制臺(tái):PR(11);
(3)通過(guò)鍵2、鍵1輸入運(yùn)算數(shù)據(jù)66H,按4次單步鍵7,產(chǎn)生2個(gè)脈沖,執(zhí)行2條微指令,進(jìn)入到圖6-1控制臺(tái)的RP(11),此時(shí)的微指令地址是“23”,微指令碼MC=008001;IN=66H
(4)再用鍵7產(chǎn)生1個(gè)脈沖,執(zhí)行1條微指令,微程序流程進(jìn)入圖6-2左的“運(yùn)行微程序”的最上塊:此時(shí)PC=00,送地址寄存器AR=00,PC自動(dòng)加1,PC=01,MC=00ED82,IN=66。
(5)鍵7產(chǎn)生1個(gè)脈沖,執(zhí)行微指令MC=00C048(圖6-2),RAM中的第一條指令碼00進(jìn)入BUS,再由BUS進(jìn)入指令寄存器IR=00。鍵7再進(jìn)1個(gè)脈沖,進(jìn)入MC=001001,執(zhí)行指令I(lǐng)N,送數(shù)IN→R0=66;
(6)鍵7產(chǎn)生1個(gè)脈沖,執(zhí)行完IN指令后,返回到初始端,執(zhí)行微指令MC=00ED82;
(7)仿照步驟4~6的操作方法,依次按按鍵7,觀察液晶顯示屏上檢測(cè)的CPU內(nèi)部寄存器和總線上的數(shù)據(jù)變化。
四.實(shí)驗(yàn)結(jié)果
針對(duì)設(shè)計(jì)的共8條指令,編寫(xiě)測(cè)試機(jī)器碼來(lái)測(cè)試指令執(zhí)行的正確性。將測(cè)試的機(jī)器碼連同模型機(jī)的電路下載到FPGA中,按照三中所敘述的步驟,觀察到液晶顯示屏上的主要數(shù)據(jù)變化如下
執(zhí)行第一條指令I(lǐng)N后,R0=66H
執(zhí)行第二條指令OUT 60H后,OUT=44H
執(zhí)行第三條指令SUB 61H后,R0=11H
執(zhí)行第四條指令A(yù)ND 62H后,R0=01H
執(zhí)行第五條指令OR 63H后,R0=F1H
執(zhí)行第六條指令XOR 64H后,R0=F1H
執(zhí)行第七條指令MOV #33H后,R0=33H
執(zhí)行第八條指令LDR 65H后,R0=65H
從以上測(cè)試代碼執(zhí)行的情況來(lái)看,微程序的設(shè)計(jì)沒(méi)有問(wèn)題。
五.實(shí)驗(yàn)中遇到的主要問(wèn)題和分析解決問(wèn)題的思路
實(shí)驗(yàn)中首先遇到的一個(gè)問(wèn)題是軟件的問(wèn)題,在使用QuartusII將康芯的示意配置文件修改后下載到FPGA中,F(xiàn)PGA中的微程序運(yùn)行一直不變,剛開(kāi)始以為是自己的微程序問(wèn)題,后來(lái)在檢查的時(shí)候發(fā)現(xiàn)FPGA的配置文件的生成時(shí)間跟電腦的時(shí)間不吻合,初步確定是配置文件沒(méi)有更新,后來(lái)在檢查編譯報(bào)告時(shí)發(fā)現(xiàn)提示該版本的Quartus不能生成編程文件。后來(lái)在裝有License的機(jī)器上將文件重新編譯一次,生成了真正的編程文件后,下載到FPGA中,執(zhí)行微指令,正常。中間經(jīng)常遇到的問(wèn)題是試驗(yàn)箱上的按鍵7按得太快的話,微程序的執(zhí)行順序會(huì)變得不正常,這個(gè)問(wèn)題還沒(méi)有解決。目前按鍵按得慢點(diǎn)的話不會(huì)出現(xiàn)這種問(wèn)題。還有個(gè)問(wèn)題,當(dāng)指令條數(shù)超過(guò)8條后,微控制器給出的微程序入口地址就不是按照原先的規(guī)律遞增了,通過(guò)請(qǐng)教老師得知微控制器譯碼的指令不能超過(guò)8條,所以本設(shè)計(jì)連同原先的IN和OUT兩條指令,剩下只設(shè)計(jì)6條。
六.學(xué)習(xí)經(jīng)驗(yàn)和切身體會(huì)
通過(guò)本次課程設(shè)計(jì),初步了解了CPU內(nèi)部的各部分,能夠使用微程序的方式來(lái)完成簡(jiǎn)單的CPU內(nèi)部控制序列的設(shè)計(jì),對(duì)微指令的理解更進(jìn)了一步。提高了自己分析問(wèn)題解決問(wèn)題的能力,在遇到的QuartusII軟件License導(dǎo)致無(wú)法生成編程配置文件這個(gè)問(wèn)題上通過(guò)一步步的分析,把原因定位到軟件的問(wèn)題上,從而解決了問(wèn)題。對(duì)教學(xué)實(shí)驗(yàn)的有一個(gè)建議,就是每臺(tái)電腦上裝上殺毒軟件后再裝上還原卡。實(shí)驗(yàn)中遇到不少問(wèn)題都是機(jī)器的問(wèn)題,例如軟件的License問(wèn)題,用U盤把編輯好的工程文件拷貝到別的裝有License的機(jī)子上打開(kāi)后發(fā)現(xiàn)文件夾被病毒莫名地隱藏了等等。
|
|