第一篇:計算機組成原理 中斷實驗
實驗五中斷實驗
實驗地點:格致A315 實驗日期:2016年12月29日
一、實驗目的
學習和掌握中斷產生、響應、處理等技術;
二、實驗說明及內容 說明:
1.要求中斷隱指令中執行關中斷功能,如果用戶中斷服務程序允許被中斷,必須在中斷服務程序中執行EI開中斷命令。
2.教學機的中斷系統共支持三級中斷,由三個無鎖按鍵確定從右到左依次為一、二、三級中斷,對應的INT2、INT1、INT0的編碼分別是01、10、11,優先級也依次升高。這決定了它們的中斷向量(即中斷響應后,轉去執行的程序地址)為XXX4、XXX8、XXXC;可以看到,每級中斷實際可用的空間只有四個字節,故這個空間一般只存放一條轉移指令,而真正的用戶中斷服務程序則存放在轉移指令所指向的地址。
3.用戶需擴展中斷隱指令、開中斷指令、關中斷指令、中斷返回指令及其節拍。
內容:
1.擴展中斷隱指令。
2.擴展開中斷指令EI、關中斷指令DI、中斷返回指令IRET。
3.確定中斷向量表地址。中斷向量表是以 XXX4H為首地址的一段內存區。高12位由用戶通過置中斷向量用的插針(在三個無鎖按鍵下方)確定。三級中斷對應的中斷向量為XXX4H、XXX8H、XXXCH。當有中斷請求且被響應后,將執行存放在該中斷的中斷向量所指向的內存區的指令。
4.填寫中斷向量表。在上述的XXX4H、XXX8H、XXXCH地址寫入三條JR OFFSET轉移指令,OFFSET分別對應三段中斷服務程序的相對地址。但在本仿真終端中輸入時,用戶不需要計算偏移量,直接輸入要轉向的絕對地址即可。
5.編寫中斷服務程序。中斷服務程序可以放在中斷向量表之后,中斷服務程序可實現在程序正常運行時在計算機屏幕上顯示與優先級相對應的不同字符; 6.編寫主程序。可編寫一死循環程序,等待中斷;
三、實驗過程及步驟
1.填寫中斷向量表。
(1)選擇3級中斷的中斷向量為2104H、2108H、210CH。
(2)教學機中下方有一個12們波特開關,設置中斷向量的高12位為:0010 0001 0000.開關向上為1,向下為0.(3)填寫中斷向量表:
從2104H單元開始輸入下面的程序:
(2104)JR 2120
;跳轉到中斷服務程序(2108)JR 2130(210C)JR 2140
2.編寫中斷服務程序
該中斷服務程序,先開中斷,顯示字符“BI”和對應的中斷優先級“1”、“2”或“3”后,等待從鍵盤輸入一個字符,在鍵盤輸入一個字符后,顯示該字符和字符“EI”,然后退出當前中斷服務程序,返回中斷斷點,繼續執行。用A、E命令從2120H單元開始輸入下面的程序(標有*的語句要用E命令輸入)2120:PUSH R0 2121: PUSH R3 2122: MVRD R3,31 2124: JR 2150
2130: PUSH R0 2131: PUSH R3 2132: MVRD R3,32 2134: JR 2150
2140: PUSH R0 2141: PUSH R3 2142: MVRD R3,33 2144: JR 2150
*2150: EI 2151: MVRD R0,0042 2153: CALA 2200 2155: MVRD R0,0049 2157: CALA 2200 2159: MVRR R0,R3 215A: CALA 2200
215C: IN 81 215D: SHR R0 215E: SHR R0 215F: JRNC 215C 2160: IN 80
2161: MVRD R0,0045 2163 CALA 2200 2165: MVRD R0,0049 2167: CALA 2200 2169: MVRR R0,R3 216A: CALA 2200 216C: POP R3 216D: POP R0 *216E: IRET
2200: PUSH R0 2201: IN 81 2202: SHR R0 2203: JRNC 2201 2204: POP R0 2205: OUT 80 2206: RET
3、編寫主程序
從地址2000H開始輸入下列程序 *2000: EI 2001: MVRD R0,0036 2003: CALA 2200 2005: MVRD R0,4000 2007: DEC R0 2008: JRNZ 2007 2009: JR 2001 200A: RET
4、運行主程序,等待、響應中斷。在命令行提示符狀態下輸入: G 2000
屏幕將連續顯示“6”.在程序執行過程中接下教學機右下方任意一個無鎖按鍵。此時,教學機轉向執行本級中斷服務程序。在接收鍵盤一個字符后,退出當前級的中斷服務程序,恢復中斷現場,接著執行斷點處的程序。若在此期間,又有更高一級的中斷請求,則教學機轉向執行該級的中斷服務程序。需要注意的是,若當前中斷為高級的中斷,則不會響應低級中斷。
5、擴展提高內容:在保證上述案例所有功能條件下,補充實現:(1)按鍵盤上的任意鍵退出中斷過程中要求顯示所按鍵字符;
(2)將主程序的死循環修改為按空格鍵退出循環。
四、實驗結果及分析
實驗結論:通過中斷可以調用子程序,同時中斷可以嵌套,同時中斷也有優先級,優先級較高的優先調用,優先級較低的要等到優先級比他高的中斷調用以后才調用。
實驗心得體會:通過本次實驗懂得了什么是中斷,同時也學會了中斷的調用,以及中斷的優先級和中斷的調用次序。同時通過本次實驗我懂了計算機內部線程與進程的調用。在寫入程序的時候,監控程序的A命令只支持基本指令,擴展指令應用E命令將指令代碼寫入到相應的存儲單元中;上述程序中帶*者為擴展指令。在擴展實驗中,應循環地址寫為實驗指導書上默認的“2007”導致輸入的“6”不能一直循環,導致實驗不能成功,最后在老師的指導下,發現錯誤,及時將地址改正為“2009”,獲取到循環值后,最后實驗成功,讓我意識到做實驗時,應該準確、細心的操作和輸入正確的值。
教師評閱:
第二篇:計算機組成原理實驗
ALU設計
module ALU(ALU_OP,AB_SW,F_LED_SW,LED);
input[2:0] ALU_OP,AB_SW,F_LED_SW;
output[7:0] LED;reg[7:0] LED;
reg[31:0] A,B,F;reg OF,ZF;
always@(*)begin
end
always@(*)begin
ZF=0;OF=0;case(ALU_OP)
3'b000: begin F=A&B;end 3'b001: begin F=A|B;end 3'b010: begin F=A^B;end 3'b011: begin F=~(A|B);end 3'b100: begin {OF,F}=A+B;OF=OF^F[31];end 3'b101: begin {OF,F}=A-B;OF=OF^F[31];end 3'b110: begin F=A
3'b000: begin A=32'h0000_0000;B=32'h0000_0000;end 3'b001: begin A=32'h0000_0003;B=32'h0000_0607;end 3'b010: begin A=32'h8000_0000;B=32'h8000_0000;end 3'b011: begin A=32'h7FFF_FFFF;B=32'h7FFF_FFFF;end 3'b100: begin A=32'h8000_0000;B=32'hFFFF_FFFF;end 3'b101: begin A=32'hFFFF_FFFF;B=32'h8000_0000;end 3'b110: begin A=32'h1234_5678;B=32'h3333_2222;end 3'b111: begin A=32'h9ABC_DEF0;B=32'h1111_2222;end endcase endcase
if(F==32'b0)ZF=1;end
always@(*)begin
end case(F_LED_SW)
3'b000: LED=F[7:0];3'b001: LED=F[15:8];3'b010: LED=F[23:16];3'b011: LED=F[31:24];default:begin LED[7]=ZF;LED[0]=OF;LED[6:1]=6'b0;end endcase
endmodule 管腳配置
NET “AB_SW[0]” LOC = T10;NET “AB_SW[1]” LOC = T9;NET “AB_SW[2]” LOC = V9;NET “ALU_OP[0]” LOC = M8;NET “ALU_OP[1]” LOC = N8;NET “ALU_OP[2]” LOC = U8;NET “F_LED_SW[0]” LOC = V8;NET “F_LED_SW[1]” LOC = T5;NET “F_LED_SW[2]” LOC = B8;NET “LED[0]” LOC = U16;NET “LED[1]” LOC = V16;NET “LED[2]” LOC = U15;NET “LED[3]” LOC = V15;NET “LED[4]” LOC = M11;NET “LED[5]” LOC = N11;NET “LED[6]” LOC = R11;NET “LED[7]” LOC = T11;寄存器 module jicunqi(input Clk, input Reset, input [4:0] Reg_Addr, input Write_Reg, input [1:0] Sel, input AB, output reg [7:0] LED);reg [31:0] W_Data;wire [31:0] R_Data_A,R_Data_B,LED_Data;REG RU1(Clk,Reset,Reg_Addr,Reg_Addr,Reg_Addr,W_Data,Write_Reg,R_Data_A,R_Data_B);assign LED_Data=AB?R_Data_A : R_Data_B;always @(*)begin
W_Data=32'h0000_0000;
LED=8'b0000_0000;
if(Write_Reg)
begin
case(Sel)
2'b00: W_Data= 32'h1234_5678;
2'b01: W_Data= 32'h89AB_CDEF;2'b10: W_Data= 32'h7FFF_FFFF;2'b11: W_Data= 32'hFFFF_FFFF;endcase end
else
begin
case(Sel)
2'b00: LED=LED_Data[7:0];2'b01: LED=LED_Data[15:8];2'b10: LED=LED_Data[23:16];2'b11: LED=LED_Data[31:24];
endcase end end endmodule `timescale 1ns / 1ps // REG.v module REG(input Clk, input Reset, input [4:0] R_Addr_A, input [4:0] R_Addr_B, input [4:0] W_Addr, input [31:0] W_Data, input Write_Reg, output [31:0] R_Data_A, output [31:0] R_Data_B);
reg [31:0] REG_Files[0:31];integer i;
assign R_Data_A=REG_Files[R_Addr_A];assign R_Data_B=REG_Files[R_Addr_B];
always @(posedge Clk or posedge Reset)begin
if(Reset)
begin
for(i=0;i<=31;i=i+1)
REG_Files[i]<=32'h0000_0000;
end
else
begin
if(Write_Reg)
begin
REG_Files[W_Addr]<=W_Data;
end end end endmodule
管腳配置 NET “Clk” LOC=“C9”;NET “Reset” LOC=“D9”;NET “Reg_Addr[4]” LOC=“T5”;NET “Reg_Addr[3]” LOC=“V8”;NET “Reg_Addr[2]” LOC=“U8”;NET “Reg_Addr[1]” LOC=“N8”;NET “Reg_Addr[0]” LOC=“M8”;NET “Write_Reg” LOC=“V9”;NET “Sel[1]” LOC=“T9”;NET “Sel[0]” LOC=“T10”;NET “AB” LOC=“A8”;NET “LED[7]” LOC=“T11”;NET “LED[6]” LOC=“R11”;NET “LED[5]” LOC=“N11”;NET “LED[4]” LOC=“M11”;NET “LED[3]” LOC=“V15”;NET “LED[2]” LOC=“U15”;NET “LED[1]” LOC=“V16”;NET “LED[0]” LOC=“U16”;
第三篇:_計算機組成原理實驗2
計算機組成原理實驗日志
實驗題目:
進位、移位控制實驗
實驗目的:
(1)了解帶進位控制的運算器的組成結構;(2)驗證帶進位控制的運算器的功能。(3)了解移位發生器74LS299的功能;(4)驗證移位控制電路的組合功能。實驗主要步驟:
一、進位
(1)按圖1.2-2連接實驗電路并檢查無誤。(2)打開電源開關。
(3)用輸入開關向暫存器DR1和DR2置數,方法同前。
(4)關閉數據輸入三態門(SW-B=1),打開ALU輸出三態門(ALU-B=0),并使LDDR1=0、LDDR2=0,關閉寄存器打入控制門。
(5)對進位標志清零。實驗板上“SWITCH UNIT”單元中的CLR開關為標志CY、ZI的清零開關,它為零狀態時是清零狀態,所以將此開關做1→0→1操作,即可使標志位清零。
注意:進位標志指示燈CY亮時表示進位標志為“0”,無進位;標志指示燈CY滅時表示進位為“1”,有進位。
圖1.2-1 帶進位運算器通路圖
圖1.2-2 帶進位運算實驗接線圖
(6)驗證帶進位運算及進位鎖存功能。使Cn=1,AR=0,進行帶進位算術運算。例如,做加法運算,使ALU-B=0,S3、S2、S1、S0、M的狀態為1、0、0、1、0,此時數據總線上顯示的數據為DR1加DR2加當前進位標志的和,但這時的進位狀態位還沒有打入進位鎖存器中,(它是要靠T4節拍來打入的。)這個結果是否有進位產生,則要按動微動開關KK2,若進位標志燈亮,則無進位,反之則有進位。因為做加法運算時數據總線一直顯示的數據為DR1+DR2+CY,所以當有進位輸入到進位鎖存器時,總線顯示的數據將為加上當前進位鎖存器中鎖存的進位的結果。
二、移位
(1)按圖1.3-2連接實驗電路并檢查無誤。(2)打開電源開關。(3)向移位寄存器置數。
①撥動輸入開關,形成二進制數01101011(或其它數值)。
②使SWITCH UNIT單元中的開關SW-B=0,打開數據輸入三態門。③使S0=
1、S1=1,并按動微動開關KK2,則將二進制數01101011置入了移位寄存器。
④使SW-B=1,關閉數據輸入三態門。(4)移位運算操作。
①參照表1.3-1中的內容,先將S1、S0置為0、0,檢查移位寄存器單元裝入的數是否正確,然后通過改變S0、S1、M、299-B的狀態,并按動微動開關KK2,觀察移位結果。
②根據移位控制電路功能表1.3-1中的內容,分析移位運算的結果是否正確。
圖1.3-2 移位運算實驗接線圖
實驗結果: 一.進位
向DR1中置入80H 向DR2中置入 80H CY初始位置為亮 0 加法完成后 CY為滅總線顯示01H 二.移位
輸入00011000 移位后 00110000 心得體會:
通過本次實驗了解了的帶進位的加法和移位器的原理。
第四篇:_計算機組成原理實驗3
計算機組成原理實驗日志3 實驗題目:
靜態隨機存儲器實驗 實驗目的:
掌握靜態隨機存儲器RAM工作特性及數據的讀/寫方法。實驗主要步驟:
(1)形成時鐘脈沖信號T3。具體接線方法和操作步驟如下:
①接通電源,把示波器接到方波信號源的輸出插孔H23調節電位器W1及W2,使H23端輸出實驗所期望的頻率和占空比的方波。
②將時序電路模塊(STATE UNIT)單元中的φ和信號源單元(SIGNAL UNIT)中的H23排針相連。
③在時序電路模塊中有兩個二進制開關“STOP”和“STEP”。將“STOP”開關置為“RUN”狀態、“STEP”開關置為“EXEC”狀態時,按動微動開關START,則T3端輸出連續的方波信號,此時調節電位器W1,用示波器觀察,使T3輸出實驗要求的脈沖信號。當“STOP”開關置為“RUN”狀態、“STEP”開關置為“STEP”狀態時,每按動一次微動開關START,則T3輸出一個單脈沖,其脈沖寬度與連續方式相同。用PC聯機軟件中的示波器功能也能看到波形。這樣可以代替真實示波器。
(2)按圖2-2連接實驗線路,仔細查線無誤后接通電源。
圖2-2 靜態隨機存儲器實驗接線圖(3)寫存儲器。給存儲器的00、01、02、03、04地址單元中分別寫入數據11H、12H、13H、14H、15H。
由上面的存儲器實驗原理圖(圖2-2)看出,由于數據和地址全由一個數據開關給出,因此要分時地給出。下面的寫存儲器要分兩個步驟:第一步寫地址,先關掉存儲器的片選(CE=1),打開地址鎖存器門控信號(LDAR=1),打開數據開關三態門(SW-B=0),由開關給出要寫入的存儲單元的地址,按動START產生T3脈沖將地址打入到地址鎖存器;第二步寫數據,關掉地址鎖存器門控信號(LDAR=0),打開存儲器片選(CE=0),使之處于寫狀態(CE=0,WE=1),由開關給出此單元要寫入的數據,按動STRAT產生T3脈沖將數據寫入到當前的地址單元中。寫其他單元依次循環上述步驟。
寫存儲器流程如圖2-3所示(以向00號單元寫入11H為例)。
圖2-3 寫存儲器流程圖
(4)讀存儲器。
依次讀出第00、01、02、03、04號單元中的內容,觀察上述各單元中的內容是否與前面寫入的一致。同寫操作類似,讀每個單元也需要兩步:第一步寫地址,先關掉存儲器的片選(CE=1),打開地址鎖存器門控信號(LDAR=1),打開,由開關給出要讀存儲單元的地址,按動START產生T3脈沖將地址打入到地址鎖存器;第二步讀存儲器,關掉數據開關三態門(SW-B=1),打開存儲器(CE=0),使它處于讀狀態(CE=0,WE=0),此時數據總線上顯示的數據即為從存儲器當前地址中讀出的數據內容。讀其他單元依次循環上述步驟。
讀存儲器操作流程如下圖2-4所示(以從00號單元讀出11H數據為例)。
圖2-4 讀存儲器流程圖
實驗結果:
置入存儲器地址00 寫入存儲器數據 11H 置入存儲器地址01 寫入存儲器數據12H 置入存儲器地址02 寫入存儲器數據13H 置入存儲器地址03 寫入存儲器數據14H 置入存儲器地址04 寫入存儲器數據15H
讀數據
置入存儲器地址00 讀出存儲器數據11H 置入存儲器地址01 讀出存儲器數據12H 置入存儲器地址02 讀出存儲器數據13H 置入存儲器地址03 讀出存儲器數據14H 置入存儲器地址04 讀出存儲器數據15H 實驗思考題
(1)一片靜態存儲器6116(2K×8),容量是多大?因實驗箱上地址寄存器只有8位接入6116的A7-A0,而高三位A8-A10接地,所以實際存儲容量是多少?為什么?
答:容量是16kbit大小,當只有A7-A0只有8位字時,實際容量是256*8=4Kbit大小。(2)歸納出向存儲器寫入一個數據的過程,包括所需的控制信號(為“1”還是為“0”)有效。
答:根據實驗指導書上WR0有效,此時為寫入數據
心得體會:
通過這次實驗掌握了靜態存儲器的基本原理,以及存儲器是如何寫入數據和讀取數據的,強化了計算機存儲器的理解
第五篇:計算機組成原理實驗(存儲器)
實驗3 半導體存儲器原理實驗
(一)、實驗目的
(1)熟悉靜態隨機存儲器RAM和只讀存儲器ROM的工作特性和使用方法;(2)熟悉半導體存儲器存儲和讀出數據的過程;(3)了解使用半導體存儲器電路時的定時要求。
(二)、實驗要求
利用Quartus Ⅱ器件庫提供的參數化存儲單元,設計一個由128X8位的RAM和128X8位的ROM構成的存儲器系統。請設計有關邏輯電路,要求仿真通過,并設計波形文件,驗證該存儲器系統的存儲與讀出。
(三)、實驗原理圖與仿真圖
ram內所存儲的數據:
rom內所存儲的數據:
仿真圖如下:
(四)心得體會
本次試驗中,我們應該熟練掌握Quartus Ⅱ軟件的使用方法;熟悉靜態隨機存儲器RAM和只讀存儲器ROM的工作特性和使用方法;熟悉半導體存儲器存儲和讀出數據的過程;了解使用半導體存儲器電路時的定時要求。并且制定實驗方案然后進行實驗驗證。要學會將學到的知識運用到實際中。