資源描述:
《vhdl實驗_指令譯碼器》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在行業(yè)資料-天天文庫。
1、學院計算機組成原理實驗報告?年級 學號 姓名 成績 專業(yè) 實驗地點計算機實驗室 指導教師 實驗項目CPU指令譯碼器實驗日期 一.實驗目的1.理解指令譯碼器的作用和重要性2.學習設計指令譯碼器二.實驗原理組合邏輯控制器中的控制信號直接由各種類型的邏輯門和觸發(fā)器等構成,一旦控制部件構成后,除非重新設計和物理上對它重新連接,否則要想增加新的功能是不可能的。結構上的這種缺陷使得應連線控制器的設計和調(diào)試變得非常復雜而且代價很大。所以,硬連線控制器曾一度被微程序控制器所取代。但是隨著新一代機器及VSLI技術的發(fā)展,這種控制器又得到了廣泛重視。邏輯網(wǎng)絡的輸入信號來源有3個:①指令
2、操作碼譯碼器的輸出In;②來自時序發(fā)生器的節(jié)拍電位信號Tk;③來自執(zhí)行部件的反饋信號Bj。邏輯網(wǎng)絡的輸出信號就是微操作控制信號,用來對執(zhí)行部件進行控制。組合邏輯控制器的基本原理為:某一微操作控制信號Cm是指令操作碼譯碼器的輸出In,時序信號(節(jié)拍電位信號Tk)和狀態(tài)信號Bj邏輯函數(shù)。即Cm=f(In,Tk,Bj)用這種方法設計控制器,需要根據(jù)每條指令的要求,讓節(jié)拍電位和時序脈沖有步驟地去控制機器的各有關部件,一步一步地執(zhí)行指令所規(guī)定的微操作,從而在一個指令周期內(nèi)完成一條指令所規(guī)定的全部操作。三.實驗步驟1.將實驗臺設置成FPGA-CPU獨立調(diào)試模式,REGSEL=0,CLK
3、SEL=1,FDSEL=0。使用實驗臺上的單脈沖,即STEP_CLK短路子短接,短路子RUN_CLK斷開。2.將設計在QuartusⅡ下輸入,編譯后下載到TEC-CA上得FPGA中。3.波動試驗臺上的開關SD5~SD0,改變IR[15..12],進位標志C和結束位0標志Z,觀察指示燈R10~R0顯示的控制信號,并填寫表6-28和表6-29。四.實驗分析進位C對應試驗臺開關SD4,結果為0標志Z對應試驗臺開關SD5。IR[15..12]對應試驗臺開關SD0、SD1、SD2、SD3。根據(jù)已給表格實驗填寫得出實驗結果。五.實驗結果添加功能OUTBOUNDSR指令編碼:OUTBOU
4、NDDRSR00000000功能:[SR]=SR;PC=PC+1INBOUNDDR,SR指令編碼INBOUNDDRSR00000000功能:[DR]=[DR]-DR。PC=PC+1一.實驗代碼libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityinstruction_decoderisport(IRH:instd_logic_vector(3downto0);c,z:instd_logic;op_code:outstd_
5、logic_vector(2downto0);c_z_j_flag:outstd_logic;lj_instruct:outstd_logic;DRWr:bufferstd_logic;Mem_Write:outstd_logic;DW_intruct:bufferstd_logic;change_z:outstd_logic;change_c:outstd_logic;sel_memdata:outstd_logic);endinstruction_decoder;architecturebehavofinstruction_decoderissignalzj_instr
6、uct,cj_instruct:std_logic;beginsel_memdata<=IRH(3)andIRH(2)and(notIRH(1));change_z<=((notIRH(3))and(notIRH(2)))or((notIRH(3))andIRH(2)and(notIRH(1)))or((notIRH(3))andIRH(2)andIRH(1)and(notIRH(0)));change_c<=(notIRH(3))and(notIRH(2));c_z_j_flag<=(zj_instructand(notz))or(cj_instructand(notc)
7、);DRWr_proc:process(IRH)beginifIRH(3)='0'then--算術邏輯指令DRWr<='1';elsifIRH(2)='1'andIRH(1)='0'then--MVRDDR,DATA;LDRDR,SRDRWr<='1';elseDRWr<='0';endif;endprocess;M_instruct:process(IRH)begincaseIRH(3downto0)iswhen"1000"
8、"1100"=>--jmpaddr;mvrddr,dataMem_Write<='0';