版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、计算机组成原理课程设计报告题目8位模型计算机的设计姓名学号班号指导老师成绩191. 课程设计目的(1) 、计算机组成原理课程设计的主要任务是让学生通过动脑和动手解决计算机设计中的实际问题。综合运用所学计算机组成原理知识,在掌握部件单元电路实验的基础上,进一步将其组成系统构造一台基本的模型计算机,掌握整机概念,并设计机器指令系统,编写程序,在所设计的模型计算机上调试运行。(2) 、通过一台模型机的设计过程,明确计算机的控制原理与控制过程,巩固和灵活应用所学的理论知识,掌握计算机组成的一般设计方法,提高学生设计能力和实践操作技能,为从事计算机研制与设计打下基础。2. 开发工具选择以TEC-CA教学
2、实验系统为平台,采用硬件描述语言VHDL为设计工具,应用QUARTUS环境进行大规模集成电路的功能设计仿真。3. 方案选择实习的内容为八位模型计算机的设计,为单总线,微程序控制方式,设置两种寻址方式:直接寻址(“0”)和寄存器寻址(“1”)。微程序控制方式由微指令译码产生。微程序中一条机器指令往往分成几步执行,将每一步操作所需的若干为命令以代码编写在一条微指令中,若干条微指令组成一段微程序,对应一条机器指令。然后根据系统的需要,事先编制各段微程序,将它存入控制存储器(CM中。微程序执行过程:( 1)从控存中逐条取出“取指令操作”,执行取指令公共操作。( 2)根据指令的操作码,经过微地址形成部件
3、,得到这条指令的入口地址,并送入微地址寄存器中。( 3)从控存中逐条的取出对应的微指令并执行。( 4)执行完一条机器指令对应的微程序后又回到取指微程序的入口地址,继续第(1)步,以完成取下一条机器指令的公共操作。微程序控制基本框图:图1微程序控制基本框4.指令系统设计sta, add, sub, andl, jmp, shl, nop。所要设计的微程序控制器是由七条指令来完成的,即:实现功能分别如下:sta指令实现存操作;add指令实现加法操作;sub指令实现减法操作;andl指令实现与操作;jmp指令实现无条件跳转操作;shl指令实现逻辑左移操作;nop指令实现空操作。操作码寻址方式标志位7
4、5410图2指令格式模拟机采用了定长的指令格式,每条指令字长为8位。采用的寻址方式为直接寻址和寄存器寻址,标志位为“0”时为直接寻址,为“1”时为寄存器寻址。操作码类型及编码方式如下:操作码staaddsuband1jmpshlnop编码方式000001010011100101110含义传送加减与跳转逻辑左移空表1指令列表5 .模型机框图设计ALU ,以及程序计数器模拟机数据通路如下图所示,模型机采用单总线结构,主要包括运部件PC、累加器ACC、指令寄存器内存。IR、数据寄存器 MDR、地址寄存器 MAR和通用寄存器 R, RAM为图2模拟机数据通路(1)寄存器的位数所有的寄存器都均为8位:
5、通用寄存器Ro该模拟机有1个通用寄存器,用于寄存器寻址时存放结果,提供操作数。 指令寄存器IR。为了提高取指令的速度,将指令从内存中读出,经数据总线直接置入IR。 数据寄存器MDR、地址寄存器MARo地址寄存器MAR提供访问主存的地址;数据寄存器MDR,把从内存取出的数据暂存于MDR中,在用到该数据进行运算时,再从MDR中取出数据进行运算。微212019181716151413121110987654-0地alu_reg_loadacc_loadpc_loaloadmdralu_alu_incaddrcsr_alu_alu_下址址srlbus_pcbus_accbusd_ir_mar_busa
6、ndacc_pc_busnwaddsub字段程序计数器PC。用于存放下一条指令的内存地址。(2)总线宽度:该模拟机只有一条总线,且总线宽度为8位。(3)ALU位数及运算功能ALU可以实现8位操作数的运算,即ALU的位数为8位。ALU运算功能为:力口(001:add)、减(010:sub)、逻辑与(011:and)、左移(101:shl)、跳转(100:jmp)、空(110:nop)。(4)微命令的设置(各标识的含义)6 .指令流程图指令的流程图如图3所示,共有8条指令,每条指令都要经过取指令、分析指令和执行指令3个步骤。在取指令阶段,8条指令是一样的,首先程序计数器PC的内容通过总线送入地址寄
7、存器MAR,存储信息,PC+1传送给PC,把读出的内容传送给指令寄存器IR。再接下来的操作中,7 .微指令格式(微程序控制器)设计微指令格式设计如表1:控制信号描述ACC_bus用ACC的内容驱动总线load_ACC将总线上的数据载入ACCPC_bus用PC的内容驱动总线load_IR将总线上的数据装载至IRload_MAR将总线上的数据装载至MARMDR_bus用MDR的内容驱动总线ALU_ACC用ALU的结果装载ACCINC_PCPC+1并将结果存至PC中Addr_bus用IR指令中的地址部分驱动总线CS片选。用MAR的内容设置存储器地址R_NW读取,/、可写。当R_NW匕效且CS有效时,
8、MBR勺内容存储吁存储器中Reg_bus用寄存器R的内容驱动总线load_Reg将总线上的数据装载至RALU_ADD在ALU中执行逻辑加操作ALU_SUB在ALU中执行减操作ALU_AND在ALU中执行与操作ALU_SHL在ALU中执行左移操作表2微指令格式8 .微程序(微程序控制器)设计根据微处理器的数据通路和指令系统,可得出微程序的流程图如图4所示。微程序的编码采用直接编码方法,每一个控制信号对应一位,共有17个控制信号,根据微指令格式把相关的控制信号整合到一起进行编码。微程序流程图的下地址,可知共有25条微指令,表2给出了该模拟机微程序的编码。地址3的下地址,应该根据指令操作码来和寻址方
9、式形成,所以将其下地址设为11111,表示如果下地址为11111时,且寻址方式标志位为0(即立即寻址),则下地址应为01&指令的操作码,若寻址方式标志位为1(即寄存器寻址),则下地址应为10&指令的操作码。图4微程序流程图该模拟机微程序的编码如下0=>0000000011=>000000000000002=>0000000113=>0000000114=>000000000000005=>000000000000016=>0000000007=>0000000008=>00000000000000000110119=>
10、000000000000000001110010=>000000000000000001001011=>000000000000000001010012=>000000000000000001011013=>000000000000000001100114=>0000000000000015=>0000000000000116=>00000000017=>00100000018=>0000000000000119=>00000000020=>0000000000000121=>00000000022=>0000000
11、000000123=>00000000024=>000000000000000000000025=>0000000009.VHDL实现头文件如下:LIBRARYIEEE;USEcpu_defsISTYPEopcodeIS(sta,add,sub,and1,jmp,shl,nop);CONSTANTword_w:NATURAL:=8;CONSTANTop_w:NATURAL:=3;CONSTANTrfill:STD_LOGIC_VECTOR(op_w-1downto0):=(others=>'0');- -FUNCTIOnslv2op(slv:INSTD_
12、LOGIC_VECTOR)RETURNopcode;FUNCTIONop2slv(op:inopcode)RETURNSTD_LOGIC_VECTOR;ENDPACKAGEcpu_defs;PACKAGEBODYcpu_defsISTYPEoptableISARRAY(opcode)OFSTD_LOGIC_VECTOR(op_w-1DOWNTO0);CONSTANTtrans_table:optable:=("000","001","010","011","100","101"
13、;,"110");FUNCTIONop2slv(op:INopcode)RETURNSTD_LOGIC_VECTORISBEGINRETURNtrans_table(op);ENDFUNCTIONop2slv;- -functionslv2op(slv:instd_logic_vector)returnopcodeis- -variabletransop:opcode;- -begin- -foriinopcodeloop- -ifslv=trans_table(i)then- -transop:=i;- -endif;- -endloop;- -returntransop
14、;- -endfunctionslv2op;ENDPACKAGEBODYcpu_defs;源程序如下:LIBRARYIEEE;USECPUISPORT(clock:INSTD_LOGIC;reset:INSTD_LOGIC;mode:INSTD_LOGIC_VECTOR(2DOWNTO0);mem_addr:INUNSIGNED(word_w-op_w-1DOWNTO0);output:OUTSTD_LOGIC_VECTOR(word_w-1DOWNTO0);data_r_out:OUTSTD_LOGIC_VECTOR(21DOWNTO0);op_out:OUTSTD_LOGIC_VECTOR
15、(op_w-1DOWNTO0);add_r_out:OUTUNSIGNED(4DOWNTO0);ENDENTITY;ARCHITECTURErtlOFCPUISTYPEmem_arrayISARRAY(0TO2*(word_w-op_w)-1)OFSTD_LOGIC_VECTOR(word_w-1DOWNTO 0);SIGNALmem: mem_array;CONSTANTprog:mem_array:=(0=>op2slv(sta)&STD_LOGIC_VECTOR(TO_UNSIGNED(9,word_w-op_w-1)&'0',1=>op2sl
16、v(sta)&STD_LOGIC_VECTOR(TO_UNSIGNED(10,word_w-op_w-1)&'1',2=>op2slv(add)&STD_LOGIC_VECTOR(TO_UNSIGNED(9,word_w-op_w-1)&'1',3=>op2slv(sub)&STD_LOGIC_VECTOR(TO_UNSIGNED(10,word_w-op_w-1)&'0',4=>op2slv(and1)&STD_LOGIC_VECTOR(TO_UNSIGNED(10,wo
17、rd_w-op_w-1)&'0',5=>op2slv(shl)&STD_LOGIC_VECTOR(TO_UNSIGNED(10,word_w-op_w-1)&'0',6=>op2slv(nop)&STD_LOGIC_VECTOR(TO_UNSIGNED(9,word_w-op_w-1)&'0',7=>op2slv(sta)&STD_LOGIC_VECTOR(TO_UNSIGNED(11,word_w-op_w-1)&'0',8=>op2slv(jmp)
18、&STD_LOGIC_VECTOR(TO_UNSIGNED(12,word_w-op_w-1)&'0',9=>STD_LOGIC_VECTOR(TO_UNSIGNED(2,word_w),10=>STD_LOGIC_VECTOR(TO_UNSIGNED(3,word_w),OTHERS=>(OTHERS=>'0');TYPEmicrocode_arrayISARRAY(0TO25)OFSTD_LOGIC_VECTOR(21DOWNTO0);CONSTANTcode:microcode_array:=(0=>"
19、;000000001",1=>"00000000000000",2=>"000000011",3=>"000000011",4=>"00000000000000",5=>"00000000000001",6=>"000000000",7=>"000000000",8=>"0000000000000000011011",9=>"0000000000000000011
20、100",10=>"0000000000000000010010",11=>"0000000000000000010100",12=>"0000000000000000010110",13=>"0000000000000000011001",14=>"00000000000000",15=>"00000000000001",16=>"000000000",17=>"001000000&qu
21、ot;,18=>"00000000000001",19=>"000000000",20=>"00000000000001",21=>"000000000",22=>"00000000000001",23=>"000000000",24=>"0000000000000000000000",25=>"000000000");SIGNAL countUNSIGNED(word_w-op_w-1D
22、OWNTO0);SIGNALopSIGNALz_flagSIGNALmdr_outSIGNALmar_outSIGNALIR_outSIGNALacc_out:STD_LOGIC_VECTOR(op_w-1DOWNTO0);:STD_LOGIC;:STD_LOGIC_VECTOR(word_w-1DOWNTO0);:UNSIGNED(word_w-op_w-1DOWNTO0);:STD_LOGIC_VECTOR(word_w-1DOWNTO0);:UNSIGNED(word_w-1DOWNTO0);SIGNALsysbus_out:STD_LOGIC_VECTOR(word_w-1DOWNTO
23、0);BEGINPROCESS(reset,clock)VARIABLEinstr_reg:STD_LOGIC_VECTOR(word_w-1DOWNTO0);VARIABLEacc:UNSIGNED(word_w-1DOWNTO0);CONSTANTzero:UNSIGNED(word_w-1DOWNTO0):=(OTHERS=>'0');VARIABLEmdr:STD_LOGIC_VECTOR(word_w-1DOWNTO0);VARIABLEreg:STD_LOGIC_VECTOR(word_w-1DOWNTO0);VARIABLEmar:UNSIGNED(word
24、_w-op_w-1DOWNTO0);VARIABLEsysbus:STD_LOGIC_VECTOR(word_w-1DOWNTO0);VARIABLEmicrocode:microcode_array;VARIABLEadd_rVARIABLEdata_rVARIABLEtempBEGIN:UNSIGNED(4DOWNTO0);:STD_LOGIC_VECTOR(21DOWNTO0);:STD_LOGIC_VECTOR(4DOWNTO0);IFreset='0'THENadd_r:=(OTHERS=>'0');count<=(OTHERS=>&
25、#39;0');instr_reg:=(OTHERS=>'0');acc:=(OTHERS=>'0');mdr:=(OTHERS=>'0');reg:=(OTHERS=>'0');mar:=(OTHERS=>'0');z_flag<='0'mem<=prog;sysbus:=(OTHERS=>'0');ELSIFRISING_EDGE(clock)THEN-microprogramcontrollerdata_r:=code(T
26、O_INTEGER(add_r);IFdata_r(4DOWNTO0)="11111"THEN-判断下地址temp:="01"&op(2DOWNTO0);add_r:=UNSIGNED(temp);ELSIFdata_r(4DOWNTO0)="11011"THENIFIR_out(0)='1'THENadd_r:="00101"ELSEadd_r:="00100"ENDIF;ELSIFdata_r(4DOWNTO0)="11100"THENIFIR_o
27、ut(0)='1'THENadd_r:="10001"ELSEadd_r:="01111"ENDIF;ELSIFdata_r(4DOWNTO0)="11101"THENIFz_flag='1'THENadd_r:="10111"ELSEadd_r:="11000"ENDIF;ELSEadd_r:=UNSIGNED(data_r(4DOWNTO0);ENDIF;data_r_out<=data_r;add_r_out<=add_r;-PCIFdata_r
28、(16)='1'THEN-PC_bus='1'sysbus:=rfill&STD_LOGIC_VECTOR(count);ENDIF;IFdata_r(19)='1'THEN-load_PC='1'count<=UNSIGNED(mdr(word_w-op_w-1DOWNTO0);ELSIFdata_r(10)='1'THEN-INC_PC='1'count<=count+1;ELSEcount<=count;ENDIF;-IRIFdata_r(15)='1'
29、;THEN-load_IRinstr_reg:=mdr;ENDIF;IFdata_r(9)='1'THEN-Addr_bus='1'sysbus:='0'&rfill&instr_reg(word_w-op_w-1DOWNTO1);ENDIF;op<=instr_reg(word_w-1DOWNTOword_w-op_w);IR_out<=instr_reg;op_out<=op;-ALUIFdata_r(18)='1'THEN-ACC_bus='1'sysbus:=STD_LOG
30、IC_VECTOR(acc);ENDIF;IFdata_r(20)='1'THEN-REG_bus='1'sysbus:=STD_LOGIC_VECTOR(reg);ENDIF;IFdata_r(17)='1'THEN-load_ACC='1'acc:=UNSIGNED(mdr);ENDIF;IFdata_r(13)='1'THEN-MDR_bus='1'sysbus:=mdr;ENDIF;IFIR_out(0)='0'THENIFdata_r(11)='1'THEN
31、-ALU_ACC='1'IFdata_r(6)='1'THEN-ALU_add='1'acc:=acc+UNSIGNED(mdr);ELSIFdata_r(5)='1'THEN-ALU_sub='1'acc:=acc-UNSIGNED(mdr);ELSIFdata_r(12)='1'THEN-ALU_and='1'acc:=accandUNSIGNED(mdr);ELSIFdata_r(21)='1'THEN-ALU_srl='1'acc:=acc(w
32、ord_w-1-1DOWNTO0)&'0'ENDIF;ENDIF;ELSEIFdata_r(11)='1'THEN-ALU_ACC='1'IFdata_r(6)='1'THEN-ALU_add='1'acc:=acc+UNSIGNED(reg);ELSIFdata_r(12)='1'THEN-ALU_and='1'acc:=accandUNSIGNED(reg);ELSIFdata_r(21)='1'THEN-ALU_srl='1'acc:=a
33、cc(word_w-1-1DOWNTO0)&'0'ENDIF;ENDIF;ENDIF;IFacc=zeroTHENz_flag<='1'ELSEz_flag<='0'ENDIF;acc_out<=acc;-RAMIFdata_r(14)='1'THEN-load_MAR='1'mar:=UNSIGNED(sysbus(word_w-op_w-1DOWNTO0);-load_MDR='1'-load_REG='1'-CS='1'-R_NW=
34、39;1'ELSIFdata_r(12)='1'THENmdr:=sysbus;ELSIFdata_r(18)='1'THENreg:=sysbus;ELSIFdata_r(8)='1'THENIFdata_r(7)='1'THENmdr:=mem(TO_INTEGER(mar);ELSEmem(TO_INTEGER(mar)<=mdr;ENDIF;ENDIF;mdr_out<=mdr;mar_out<=mar;ENDIF;sysbus_out<=sysbus;ENDPROCESS;PROCESS(
35、mode,mem_addr)BEGIN- -mode=0->sysbus- -mode=1->PC- -mode=2->resultofALU- -mode=3->IR- -mode=4->MAR- -mode=5->MDR- -mode=6->memoutput<=(OTHERS=>'0');CASEmodeisWHEN"000"=>output<=sysbus_out;WHEN"001"=>output(word_w-op_w-1DOWNTO0)<=STD_
36、LOGIC_VECTOR(count);WHEN"010"=>output<=STD_LOGIC_VECTOR(acc_out);WHEN"011"=>output<=IR_out;WHEN"100"=>output(word_w-op_w-1DOWNTO0)<=STD_LOGIC_VECTOR(mar_out);WHEN"101"=>output<=mdr_out;WHEN"110"=>output<=mem(TO_INTEGER(m
37、em_addr);WHENothers=>output<=(OTHERS=>'Z');ENDCASE;ENDPROCESS;ENDARCHITECTURE;10 .调试仿真add_r_out下地址的输出端,clock为时钟脉冲,data_r_out为微指令的输出,mem_addr为内存地址的输入,mode为输出模式的选择,op_out为操作码的输出,output结果的输出,根据模式决定,reset复位信号,1. mode的值为010,则output中输出为acc中的内容:STA指令:把9号单元的数据放到acc中,把10号单元的数据放入寄存器中。此时acc值为2
38、,寄存器的值为3,仿真图并不显示。号工an *n_*d.drrald_±_outd.i.也 r outp.gES 国 国F1 国 Id?0 0 » HU.D ns 4U.Li nc LUO D m tlC D ns 120.0 u 130.a nc 140 Q u 15D 0 he l&O.O nt 1T0.D iIii!riTV :3父可 LR1 Y 固 X si LilX 因 * 广 LH- 1旭北划二商mJ耐油面团注教打。取口,切二RXI电:面或垣口附慎匚巾inZ仿真图1STA指令ADD指令:的数据为5。9号单元的数据放到acc,并与寄存器中的数据相加,把结果
39、放到acc中,acc中alt四Big神与司4533国下国1Jmsii.addi'rnaLaJ.i_r_c-utdat通M190.0200.0m划04土120.0a2SO.OX2S0.0n二_rL_J-1_J_1-J_J_L_J_1-Uio恒1I_x_w1XW20。,<附201口叽鼻:1J回工机11历口仁士.刈二1日1口口寸田:1*二口11汨阳关|:打口工LIR口口311”;,匚后口二中四日1311FQ111X2C仿真图2ADD指令SUB指令:acc中的数据与10号单元的数据想减,结果放到acc中。acc中数据为2。elflClrI七”1IIW_-E.JdsMi0riitaur_o
40、at口A.QBtg灯中tAND指令:JJCL'M珈UIErLZrnZZM1_11_L_J1_|1_J_1L_JLJ-1TDLSI【1E0%口司父可:;0】X-r.-trii-j-r5,riVr«-in.trt-"r,r日X131;(UJj二X型】X川也I忙厂r1rs-1-,UItsJMU.rr«sFWTT1T?:TimnwE用工匚存幻-正匚1家而函Ki步而荷加-尸口福匚*门1市亍冷一工.JC二回X-lIIII时!I仿真图3SUB指令acc中的数据与10号单元的数据相与,结果放到acc中。acc中数据为2。Nf口0-14«k1>LHSinTn
41、_2d江E>0“a型HL2国ill_r_crat&LS出证41田op.Mt粉453口aiput31a.0320.0n=G30.JL列b&H=3M.0EBO.O3tE37D.0,工380.0m350,0皿40031LO.OII>IIJ_11_1_1_r_I-1_H:0d回.:T1卜-田:JX_L一脚J叼1L世Li但口而日!江山1小工伸向|工汪印】口mi;-口:1JUU4号L2U8I:旧二门注口口即::|1%._、门1WUJUlS仿真图4AND指令SHL指令:acc中的数据逻辑左移一位,空位补0,结果放入acc中。acc中数据为4.mp血wmpm血pE川f"4mpMM,mpMWfH皿口MWFuEmp门中。kresetklnelli_bddlS田aJd_r_out田ittaroutS”.Qlt国PW-tpt仿真图5SHL指令NOP指令:此操作为空操作,对acc中数据无影响。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业单位联考《综合应用能力》试题及答案解析(A类)
- 2025年安全员B证考试试题学生专用附答案详解
- 2025年安全员B证考试试题一(预热题)附答案详解
- 2025年安全员B证考试试题一附答案详解ab卷
- 安全教育课标题课件
- 组训自我介绍
- 中专毕业生自我鉴定一千字
- 广西高职单招职业适应性测试考前备考题库及答案解析
- 徐州生物工程职业技术学院单招面试题库及答案解析
- 心肺复苏试题及答案50题
- 2025年采购工程师笔试题及答案
- 基层支部联建活动方案
- 高电压与绝缘技术论文
- 2024DBJ33T1095-预拌砂浆应用技术规程
- 5、二级供应商品质管理
- 2025年江西省交通投资集团有限责任公司社会招聘43人笔试备考题库及答案详解1套
- 2025年上海高三物理高考重点知识点归纳总结(复习必背)
- 医院医学影像科科室年终总结
- 高一家长会化学教师课件
- 2025年危险化学品安全考试题库(危险化学品安全操作规范修订与培训效果)试题
- 2025年中国电脑CPU散热器市场调查研究报告
评论
0/150
提交评论