实验7-模型机组成与程序运行-实验报告.doc_第1页
实验7-模型机组成与程序运行-实验报告.doc_第2页
实验7-模型机组成与程序运行-实验报告.doc_第3页
实验7-模型机组成与程序运行-实验报告.doc_第4页
实验7-模型机组成与程序运行-实验报告.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

班级:计算机科学与技术3班 学号: 20090810310 姓名: 康小雪 日期: 2011-12-1 实验7模型机组成与程序运行实验预习实验报告1. 计算机整机模型机的组成和工作原理。2. 计算机执行机器指令的工作过程。3. 微指令、微程序的设计及调试。实验报告一、 波形图:参数设置:Endtime:2.0us Gridsize:25.0ns信号设置:Clkjp: 控制电路时钟信号,设置周期为100ns占空比为50%。Clrar: AR寄存器清零信号,用于清除当前AR的状态,二进制输入,低电平有效。ClrKong: 控制电路清零信号,用于清除当前控制电路的状态,二进制输入,低电平有效。dp: 单拍执行信号,用于使状态机输出且仅输出一次脉冲,二进制输入,高电平有效。qd: 启动信号,用于启动状态机,二进制输入,低电平有效。tj: 停机控制信号,用于使状态机保持当前状态,二进制输入,高电平有效。Scan_pc: 查看打当前pc的值,二位十六进制输出。Scan_ar: 查看打当前ar的值,二位十六进制输出。Scan_result: 查看打当前总线上的值,二位十六进制输出。Jp: t1,t2,t3,t4节拍脉冲信号的组合,四位二进制输出,高电平时有效。K: 输入数据,八位二进制输入。仿真波形:运算以(非C非D)(非B加A)为例:其中A=05H B=0AH C=01H D=02H其中mif文件设置为:波形:分析:(由于操作太多,仅分析LDA 18H这个操作,后面的操作分析类似) 0-100ns,初始状态:启动控制电路,所有信号均处于初始状态。 100-500ns,sw-pc:此时节拍信号执行一个循环,next_add=00001. 500-1000ns,pc-ar,pc+1-pc:ar被赋予pc的值,pc则从原来的0变为了1,next_add=00010. 1000-1500ns,RAM-IR:此时是读取IR指令的操作,下址先是变为了01000然后读取到指令为20H,下址next_add迅速变为01001。 1500-2000ns,pc-ar,pc+1-pc:ar被赋予pc的值,pc则从原来的1变为了2,next_add=10101. 2000-2500ns,RAM-AR:读取到01H单元中存的地址为18H,RAM将18H传送给AR,下址next_add=10110. 2500-3000ns,RAM-R5:读取到18H中存的数为01H该值应该被传送给R5,LDA操作完成,下址重新恢复为next_add=0001以重新读取操作。之后的波形图截取如下:。这是最后一步的运算结果,将运算得到的F8存入第1EH单元中:结论:本实验的设计能正确实现模拟状态机的单步运行功能,并且在一系列的qd模拟机之后,能够从mif文件中准确地读出数据,并且对表达式(非C非D)(非B加A)进行相应的运算,最终得到F8的结果,并执行存入1EH 单元中,故电路设计正确。二、实验日志预习疑问解答:1. 计算机整机模型机的组成和工作原理。2. 计算机执行机器指令的工作过程。根据冯.诺依曼的设计,计算机应能自动执行程序,而执行程序又归结为逐条执行指令。执行一条指令又可分为以下五个基本操作: 取指令:从存储器某个地址单元中取出要执行的指令送到CPU内部的指令寄存器暂存; 分析指令:或称指令译码,把保存在指令寄存器中的指令送到指令译码器,译出该指令对应的微操作信号,控制各个部件的操作; 取操作数:如果需要,发出取数据命令,到存储器取出所需的操作数; 执行指令:根据指令译码,向各个部件发出相应控制信号,完成指令规定的各种操作; 保存结果:如果需要保存计算结果,则把结果保存到指定的存储器单元中。完成一条指令所需的时间称为指令周期。一个指令周期往往包括多个总线周期,而一个总线周期又包含多个时钟周期。时钟周期是计算机中最小的时间单位。3. 微指令、微程序的设计及调试。思考题:1. 给定一个复合运算式子以及指令码IR7.5与八位BUS总线对应情况。要求写出七条指令新的指令码并写出复合运算执行mif文件。修改模型机电路调试程序以实现复合运算。例:已知A=55H,B=8AH,C=F0H;IR7.5对应BUS8,BUS1,BUS3;写出(Aplus/B)(/(/CplusB)的mif文件,并在模拟机上实现。答:模拟机电路修改如下:存储器预设指令重设:RAM地址内容00H20H01H1EH02H80H03H40H04H20H存储数据/B (75H) 05H20H06H1DH07HC0H08H20H09H40H0AH21H存储数据A+/B (CAH)0BH20H0CH1FH0DH80H0EH40H0FH22H存储数据/C (0FH)10H20H11H1EH12HC0H13H22H14H80H15HE0H16H21H17H40H18H23H存储数据(A+/B)(/(/C+B)19H60H1AH23H1BHA0H1CH00H1DH55H存储数据A1EH8AH存储数据B1FHF0H存储数据C计算结果:(A+/B)(/(/C+B)=42H2. Microcomputer.vhd代码中进程ct1,ct2,ct3,ct4功能划分依据是什么?ct1:微序列控制器下址跳转。ct2:实现各种指令,主要集中在实现从存储器或者寄存器释放数据到总线上。ct3:完成各种指令,从总线上装载数据到相应的存储器或者寄存器中。ct4:生成下址,判断下址生成方式,根据不太那个的方式生成下址。3. Microcomputer.vhd代码中如何定义并初始化RAM?type ram is array(0 to 37)of std_logic_vector(7 downto 0); -38*8ramsignalram8:ram:=(x”20”, x”1e”, x”80”, x”40”, x”20”, x”20”, x”1d”, x”c0”, x”20”, x”40”, x”21”, x”20”, x”1f”, x”80”, x”40”, x”22”, x”20”, x”1e”, x”c0”, x”22”, x”80”, x”e0”, x”21”, x”40”, x”23”, x”60”, x”23”, x”a0”, x”00”, x”55”, x”8a”, x”f0”,others=x”00”) initialize ram44. Microcomputer.vhd代码中bus_reg_t2=ram8(conv_integer(ar)与ram8(conv_integer(ar)=r5的含义什么?将ram8存储器中对应于ar中地址单元的数据取出来放到bus_reg_t2寄存器中。将r5寄存器中的数据装载到ram8存储器对应于ar中地址单元中。5. Microcomputer.vhd代码中bus_reg_t2= r5;ram8(conv_integer(ar)=r5可否修改成bus_reg_t2= r5;ram8(conv_integer(ar)= bus_reg_t2?为什么?可以这样修改,但是不修改更能体现CPU设计的方式。6. Microcomputer.vhd代码中bus_reg,bus_reg_t2,bus_reg_t3属于bus_reg同类的Signal,用途是什么?Bus_reg:一个时序周期后总线上的数据。Bus_reg_t2:记录t2时刻总线上的中间数据。Bus_reg_t3:记录t3时刻总线上的中间数据。7. Microcomputer.vhd代码中mpc,mpc_t2,,mpc_t3,mpc_t4属于mpc同类的Signal,用途是什么?Mpc:一个时序周期后微序列控制器的下址。Mpc_t2:记录绝对地址寻址方式的下址。Mpc_t3:记录t3时刻的下址,和Mpc_t2相同。Mpc_t4:记录t4时刻的下址,和mpc_t3相同,同时如果是映射寻址,则修改下址。8. Microcomputer.vhd代码中mpc_t2与bus_reg_2信号赋值=有什么值得注意的?Mpc_t2是5位的,bus_reg_t2是8位。Mpc_t2是直接赋值,bus_reg_t2是通过其他的信号量赋值。9. Microcomputer.vhd代码中ct2进程中mpc_t2=mpc,ct3进程中有mpc_t3=mpc_t2,ct4进程有mpc_t4=mpc_t3,共同起什么作用?请在代码中寻找另一个相似例子?保证在mpc出错时,能及时停在mpc当前地址状态,保持前面运行的状态,不会扰乱cpu前面的运行结果。T2:bus_reg_t2=bus_reg_t2T3:bus_reg_t3=bus_reg_t2T4:bus_reg -当在mpc跳转到00010时刻mpc_t4-其余时刻mpc_t4DR1之后由于IR指令的不同,ALU的值也会不相同,此时可以看到,IR的后三位和最后一次R5-DR1的跳变的下址刚好是一样的,就可以在R5-DR1跳变时,令 P1有效,此时,IR的值没有改变依然是操作指令,这个时候打入的值就可以做为下址,指导ALU进行相应的运算。2 下载之后,地址的跳转有问题。每一次总是在上一条指令还没有执行完时,地址就跳到下一条指令了,导致数据出现了严重的错误,后来经过检查,原来运算器部分是需要两个节拍,存储器部分也是,不然操作不够,修改了存储器部分的电路,pc的节拍应该先于RAM的节拍,并修改了运算器部分代码,如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity exp_r_ALU isport(T2,T3:in std_logic;sw,r4,r5,alu_bus:in std_logic;lddr1,lddr2,ldr4,ldr5:in std_logic;m,cn:in std_logic;s:in std_logic_vector(3 downto 0);k:in std_logic_vector(7 downto 0);d:inout std_logic_vector(7 downto 0);end exp_r_ALU;architecture bhv of exp_r_ALU issignal dr1,dr2,rr4,rr5,aluout,br:std_logic_vector(7 downto 0);signal sel:std_logic_vector(5 downto 0);begin ldreg:process(T2,T3,lddr1,lddr2,ldr4,ldr5,br)beginif T2event and T2=1then if lddr1=1then dr1=br;elsif lddr2=1then dr2=br;end if;end if;if T3event and T3=1then if ldr4=1then rr4=br;elsif ldr5=1then rr5=br;end if;end if;end process;alu:process(m,cn,s,dr1,dr2,sel,aluout)beginselaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluoutaluout=xff;end case;end process;br=k when(sw=0and r4=1and r5=1and alu_bus=1)elserr4 when(sw=1and r4=0and r5=1and alu_bus=1)elserr5 when(sw=1and r4=1and r5=0and alu_bus=1)elsealuout when(sw=1and r4=1and r5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论