组原课设硬布线逻辑.docx
《组原课设硬布线逻辑.docx》由会员分享,可在线阅读,更多相关《组原课设硬布线逻辑.docx(13页珍藏版)》请在冰豆网上搜索。
组原课设硬布线逻辑
评语:
课中检查完成的题号及题数:
成绩:
自评分:
95
实验报告
实验名称:
基于硬布线控制器设计并实现
带中断功能的复杂模型机
日期:
2013-12-31
本人信息
班级:
学号:
姓名:
同组同学信息
班级:
学号:
姓名:
一、实验目的:
1.
掌握硬布线的控制器的组成原理、设计方法
2.
了解硬布线的控制器和微程序控制器的各自优点
3.
用硬布线控制器实现一个带有中断功能的复杂模型机
二、实验内容:
1.
编写机器指令测试程序运行情况以及中断响应。
2.
用VHDL语言编写带有中断的硬件程序
3.
用CM3P联机调试进行中断复杂机的构造和模拟
三、项目要求及分析:
要设计实现带有中断功能的复杂模型机,可采用以下步骤完成:
1.根据带中断功能的复杂模型机的微程序流程图,画出状态机描述图
2.根据机器指令文件确定控制器控制信号位
3.根据定义好的控制信号位以及微程序执行流程,编写VHDL源程序,编译
4.搭建程序测试环境,分配管脚,将程序载入CM3P测试机
5.联机测试指令
四、具体实现:
应包括:
状态图、控制信号表、控制引脚图、VHDL程序、机器码验证程序等。
状态图:
控制信号表:
控制引脚图:
CTRL
SIGNAL
INTAWRRDIOM
S3S2S1S0
LDALDBLDR0STMLOADLDARLDIR
ALU_BRS_BRD_BRI_BSP_BPC_B
LDPCSTICLI
RETT1INS7-INS0
PIN
60595857
56555453
49484746454406
054342412304
02215214
15315417-10
VHDL程序:
LIBRARYIEEE;
USEIEEE.std_logic_1164.ALL;
ENTITYCONTROLLERIS
PORT(
RESET:
INSTD_LOGIC;
T1:
INSTD_LOGIC;
INS:
INSTD_LOGIC_VECTOR(7DOWNTO0);
CTRL:
OUTSTD_LOGIC_VECTOR(16DOWNTO0)
);
ENDCONTROLLER;
ARCHITECTURECONTROLLER_ARCHOFCONTROLLERIS
TYPESTATEIS(S10,S9,S8,S7,S6,S5,S4,S3,S2,S1,S0);
SIGNALCUFSM:
STATE;
--CTRL:
WR,RD,IOM,S3,S2,S1,S0,LDA,LDB,LOAD,LDAR,LDIR,ALU_B,R0_B,LDR0,PC_B,LDPC
BEGIN
PROCESS(T1,RESET,INS)
BEGIN
IFRESET='0'THEN
CTRL<="00000000010011010";--NOP
CUFSM<=S0;
ELSIFT1'EVENTANDT1='1'THEN
CASECUFSMIS
WHENS0=>
CTRL<="00000000011011001";--PC->AR,PC+1
CUFSM<=S1;
WHENS1=>
CTRL<="01000000010111010";--MEM->BUS,BUS->IR
CUFSM<=S2;
WHENS2=>
IFINS="00000000"THEN--ADDINS
CTRL<="00000001010010010";--R0->BUS,BUS->A
CUFSM<=S3;
ELSIFINS="00100000"THEN--ININS
CTRL<="01100000010011110";--IN->BUS,BUS->R0
CUFSM<=S6;
ELSIFINS="00110000"THEN--OUTINS
CTRL<="10100000010010010";--R0->BUS,BUS->OUT
CUFSM<=S7;
ELSIFINS="01010000"THEN--HLTINS
CTRL<="00000000010011010";--NOP
CUFSM<=S8;
ELSIFINS="11100000"THEN--JMPINS
CTRL<="00000000011011001";--PC->AR,PC+1
CUFSM<=S9;
ELSE--INVALIDINS
CTRL<="00000000011011001";--PC->AR,PC+1
CUFSM<=S1;
ENDIF;
WHENS3=>
CTRL<="00000000110010010";--R0->BUS,BUS->B
CUFSM<=S4;
WHENS4=>
CTRL<="00010010010001110";--A+B->BUS,BUS->R0
CUFSM<=S5;
WHENS5=>
CTRL<="00000000011011001";--PC->AR,PC+1
CUFSM<=S1;
WHENS6=>
CTRL<="00000000011011001";--PC->AR,PC+1
CUFSM<=S1;
WHENS7=>
CTRL<="00000000011011001";--PC->AR,PC+1
CUFSM<=S1;
WHENS8=>
CTRL<="00000000010011010";--NOP
CUFSM<=S8;
WHENS9=>
CTRL<="01000000000011011";--MEM->BUS,BUS->PC
CUFSM<=S10;
WHENS10=>
CTRL<="00000000011011001";--PC->AR,PC+1
CUFSM<=S1;
ENDCASE;
ENDIF;
ENDPROCESS;
ENDCONTROLLER_ARCH;
机器码验证程序:
;//*****************************************//
;////
;//带中断处理能力的模型机实验指令文件//
;////
;//ByTangDuCO.,LTD//
;////
;//*****************************************//
;//*****StartOfMainMemoryData*****//
$P0060;LDIR0,13H将立即数13装入R0
$P0113
$P0230;OUTC0H,R0将R0中的内容写入端口C0中,即写
$P03C0;ICW1,边沿触发,单片模式,需要ICW4
$P0460;LDIR0,30H将立即数30装入R0
$P0530
$P0630;OUTC1H,R0将R0中的内容写入端口C1中,即写
$P07C1;ICW2,中断向量为30-37
$P0860;LDIR0,03H将立即数03装入R0
$P0903
$P0A30;OUTC1H,R0将R0中的内容写入端口C1中,即写
$P0BC1;ICW4,非缓冲,86模式,自动EOI
$P0C60;LDIR0,FEH将立即数FE装入R0
$P0DFE
$P0E30;OUTC1H,R0将R0中的内容写入端口C1中,即写
$P0FC1;OCW1,只允许IR0请求
$P1063;LDISP,A0H初始化堆栈指针为A0
$P11A0
$P1270;STICPU开中断
$P1320;INR0,00H从端口00(IN单元)读入计数初值
$P1400
$P1541;LOOP:
MOVR1,R0移动数据,并等待中断
$P16E0;JMPLOOP跳转,并等待中断
$P1715
;以下为中断服务程序:
$P2080;CLICPU关中断
$P2161;LDIR1,01H将立即数01装入R1
$P2201
$P2304;ADDR0,R1将R0和R1相加,即计数值加1
$P2430;OUT40H,R0将计数值输出到端口40(OUT单元)
$P2540
$P2670;STICPU开中断
$P27B0;IRET中断返回
$P3020;IR0的中断入口地址20
;//*****EndOfMainMemoryData*****//
;//**StartOfMicroControllerData**//
$M000001C1;NOP
$M01000102;中断测试,P<4>
$M02006D43;PC->AR,PC加1
$M03107070;MEM->IR,P<1>
$M04002405;RS->B
$M0504B201;A加B->RD
$M06002407;RS->B
$M07013201;A与B->RD
$M08106009;MEM->AR
$M09183001;IO->RD
$M0A106010;MEM->AR
$M0B000001;NOP
$M0C103001;MEM->RD
$M0D200601;RD->MEM
$M0E005341;A->PC
$M0F0000CB;NOP,P<3>
$M10280401;RS->IO
$M11103001;MEM->RD
$M12200413;RS->MEM
$M13001A14;SP->A
$M1406C201;A加1->SP
$M15064216;A减1->SP
$M16006A17;SP->AR
$M17103001;MEM->RD
$M18064219;A减1->SP
$M19006A1A;SP->AR
$M1A105141;MEM->PC
$M1B005341;A->PC
$M1C10101D;MEM->A
$M1D10608C;MEM->AR,P<2>
$M1E10601F;MEM->AR
$M1F101020;MEM->A
$M2010608C;MEM->AR,P<2>
$M22406A23;INTA#,SP->AR
$M23200C24;PC->MEM
$M24001A25;SP->A
$M2506C226;A加1->SP
$M26406027;INTA#,入口->AR
$M27105142;MEM->PC
$M28101029;MEM->A
$M2900282A;RI->B
$M2A04E22B;A加B->AR
$M2B04928C;A加B->A,P<2>
$M2C10102D;MEM->A
$M2D002C2E;PC->B
$M2E04E22F;A加B->AR
$M2F04928C;A加B->A,P<2>
$M30001604;RD->A
$M31001606;RD->A
$M32006D48;PC->AR,PC加1
$M33006D4A;PC->AR,PC加1
$M34003401;RS->RD
$M35000035;NOP
$M36006D51;PC->AR,PC加1
$M37000181;STI
$M380001C1;CLI
$M39006A12;SP->AR
$M3A001A15;SP->A
$M3B001A18;SP->A
$M3C006D5C;PC->AR,PC加1
$M3D006D5E;PC->AR,PC加1
$M3E006D68;PC->AR,PC加1
$M3F006D6C;PC->AR,PC加1
;//**EndOfMicroControllerData**//
五、调试运行结果:
当中断来临时(即连续按动kk+),R0+1,并通过OUT输出;
六、所遇问题及解决方法:
本程序有以下难点:
1.对于控制信号位的确定,除要将对应控制信号翻译准确之外还需要注意控制位的高低电平有效。
2.对于VHDL程序的编写,需要注意中断触发时跳转语句的编写,此处由于之前学习了C程序的编写,尚未出现比较大的问题。
3.对于联机调试程序,需要耐心细心的设置好管脚分配等。
由于在做实验之前操作比较规范,此次试验并未遇到比较大的困难,调试程序费时较多,但最终运行正确。
七、实验总结:
1.
通过此次试验,明白了硬布线控制器的工作原理,较为深入的对计算机内部运行机制进行了理解。
2.
进一步锻炼了实践能力。
3.
更加深入理解了团队合作的重要性。
八、建议:
1.
由于试验较为综合,可对学生的完成进度进行分步检查。
2.
建议试验前从整体上给学生以引导,便于入手。