您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 北邮计算机组成原理课程设计-代码与实验报告
北京邮电大学课程设计报告课程设计名称采用硬布线控制器的顺序模型处理器设计与调试学院计算机学院指导教师戴志涛班级班内序号学号学生姓名成绩颜力琦课程设计内容教学目的:融会贯通计算机组成原理各章节内容,加深对CPU各模块工作原理及相互联系的认识,掌握硬布线控制器的设计方法,学习运用可编程逻辑技术进行逻辑设计和调试的基本步骤和方法基本内容:设计一个硬布线控制器,和TEC-8模型的数据通路结合在一起,构成一个完整的CPU实验方法:使用VHDL语言编写程序,使用TEC-8实验台调试程序团队分工:颜力琦:组长,负责程序流程图、算法设计、控制台部分代码的编写、拓展指令编写程序调试、实验报告编写潘自成:负责微程序部分代码的编写、程序调试、资料收集周卓彬:负责控制台部分代码的编写、时序信号的控制代码编写、PC指针代码编写、程序调试,实验报告编写学生课程设计报告(附页)课程设计成绩评定遵照实践教学大纲并根据以下四方面综合评定成绩:1、课程设计目的任务明确,选题符合教学要求,份量及难易程度2、团队分工是否恰当与合理3、综合运用所学知识,提高分析问题、解决问题及实践动手能力的效果4、是否认真、独立完成属于自己的课程设计内容,课程设计报告是否思路清晰、文字通顺、书写规范评语:成绩:指导教师签名:年月日注:评语要体现每个学生的工作情况,可以加页。计算机组成原理课程设计实验报告采用硬布线控制器的顺序模型处理器设计与调试一、实验目的(1)融会贯通计算机组成原理各章节教学内容,通过知识的综合应用,加深对CPU各模块工作原理及相互联系的认识,建立清晰的整机概念。(2)掌握硬布线控制器的设计方法。(3)学习运用可编程逻辑技术进行逻辑设计和调试的基本步骤和方法(4)学习运用VHDL语言,用编写编译下载程序到altera芯片运行。(5)培养科学研究的独立工作能力,获得工程设计与组装调试的实践经验二、实验设备TEC-8实验系统一台PC计算机一台逻辑笔一只USB下载器一根三、设计与调试任务(1)设计一个硬连线控制器,和TEC-8模型计算机的数据通路结合在一起,构成一个完整的CPU,该CPU要求:能够完成控制台操作:启动程序运行、读存储器、写存储器、读寄存器、写寄存器;能够执行表中的指令,完成规定的操作。(2)在Quarts下对硬布线控制器设计方案进行编辑和编译。(3)将编译后的硬布线控制器下载到TEC-8实验台上的EPM7128中,使其成为一个硬布线控制器。(4)根据指令系统,编写检测硬布线控制器正确性的测试程序,并用测试程序对硬布线控制器在单拍方式下进行调试,直到成功。四、实验原理(1)硬布线控制器基本原理硬布线控制器是一种把控制部件看作产生专门固定时序控制信号的逻辑电路,这种逻辑电路是一种由门电路和触发器构成的复杂树形逻辑网络。当执行不同机器指令时,通过激活一系列彼此很不相同的控制信号来实现对指令的解释。每个微操作控制信号C是一系列输入量的逻辑函数,即用组合逻辑来实现C=f(Im,Mi,Tk,Bj)Im是机器指令操作码译码器的输出信号,Mi是节拍电位信号,Tk是节拍脉冲信号,Bj表示来自执行部件的反馈信息,是状态条件信号。在TEC-8实验系统中,节拍脉冲信号Tk,(T1~T3)已经直接输送给数据通路。4位指令操作码IR4~IR7直接成为Im的一部分;SWC、SWB、SWA可以看做是Im的另一部分。Mi是时序发生器产生的节拍信号W1~W3;Bi包括ALU产生的进位信号C、结果为0信号Z等。(2)硬布线控制器逻辑模块图硬布线控制器的某一操作控制信号C在某条特定指令和状态条件下,在某一序号的特定节拍电位和节拍脉冲时间间隔中起作用,从而激活这条控制信号线,对执行部件实施控制。图中芯片的输出信号就是微操作控制信号,它用来对执行部件进行控制。另有一些信号则根据条件变量来改变时序发生器的计数顺序,以便跳过某些状态,从而可以缩短指令周期。其中IR7~IR4,SWA,SWB,SWC是机器指令操作码译码器的输出信号,W1,W2,W3是节拍电位信号,T1,T2,T3是节拍脉冲信号,C,Z是结果反馈信息,图中树形逻辑网络N在接收三个输入信号来源的信号后输出LDZ,LDC,CIN,LIR,SELCTL,STOP等微操作控制信号,用来对执行部件进行控制。(3)TEC-8数据通路图控制器:CLR:INSTD_LOGIC;--清零信号T3,W1,W2,W3:INSTD_LOGIC;--时序信号C,Z:INSTD_LOGIC;--标志信号LDZ:OUTSTD_LOGIC;--当它为1时,如果运算结果为0,在T3的上升沿,将1写入到Zbiaozhi寄存器;如果运算结果不为0,将0保存到Z标志寄存器。LDC:OUTSTD_LOGIC;--当它为1时,在T3的上升沿将运算得到的进位保存到C标志寄存器。CIN:OUTSTD_LOGIC;--进位输出。M:OUTSTD_LOGIC;--控制算术逻辑运算类型ABUS:OUTSTD_LOGIC;--当它为1时,将开关数据送到数据总线DBUS;当它为0时,禁止开关数据送数据总线DBUS。DRW:OUTSTD_LOGIC;--为1时,在T3上升沿对RD1、RD0选中的寄存器进行写操作,将数据总线DBUS上的数D7~D0写入选定的寄存器。PCINC:OUTSTD_LOGIC;--当它为1时,在T3的上升沿PC加1。LPC:OUTSTD_LOGIC;--当它为1时,在T3的上升沿,将数据总线DBUS上的D7~D0写入程序计数器PC。LAR:OUTSTD_LOGIC;--当它为1时,在T3的上升沿,将数据总线DBUS上的D7~D0写入地址寄存器AR。PCADD:OUTSTD_LOGIC;--当它为1时,将当前的PC值加上相对转移量,生成新的PC。ARINC:OUTSTD_LOGIC;--当它为1时,在T3的上升沿AR加1。SELCTL:OUTSTD_LOGIC;--当它为1时,TEC-8实验系统处于实验台状态,当它为0时,TEC-8实验系统处于运行程序状态。MEMW:OUTSTD_LOGIC;--当它为1时,在T2为1期间将数据总线DBUS上的D7~D0写入双端口RAM。写入的存储器单元由AR7~AR0指定。STOP:OUTSTD_LOGIC;--当它为1时,在T3结束后时序发生器停止输出节拍脉冲T1、T2、T3。LIR:OUTSTD_LOGIC;--当它为1时,在T3的上升沿将从双端口RAM的右端口读出的指令INS7~INS0写入指令寄存器IR。读出的存储器单元由PC7~PC0指定。SBUS:OUTSTD_LOGIC;--当它为1时,数据开关SD7~SD0的数送数据总线DBUS。MBUS:OUTSTD_LOGIC;--当它为1时,将双端口RAM的左端口数据送到数据总线DBUSSHORT:OUTSTD_LOGIC;--只产生节拍W1。LONG:OUTSTD_LOGIC;--产生节拍W1、W2、W3。SW:INSTD_LOGIC_VECTOR(2DOWNTO0);--即SWCSWBSWA,控制台方式控制信号IR:INSTD_LOGIC_VECTOR(3DOWNTO0);--即IR7-IR4,指令的操作码S:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--ALU的方式控制,与M配合以选择逻辑或算数运算SEL:OUTSTD_LOGIC_VECTOR(3DOWNTO0);--寄存器选择向量(4)机器指令流程图设计五、设计步骤与实验过程(1)设计步骤1、学习硬布线控制器基本原理2、设计机器指令周期流程图3、设计组合逻辑译码表4、根据组合逻辑译码表和控制器流程图写出VHDL代码5、分配各输入输出信号管脚6、下载程序到芯片7、反复调试(2)实验日志、故障及排除方案2016.8.29日志:熟悉实验台遇到问题及解决方案:由于学习tec8实验台已有一段时间,操作不熟练,按照以前的实验步骤,写存储器,读存储器,写寄存器,读寄存器。2016.8.30日志:复习用VHDL语言编写程序遇到问题及解决方案:1、语法记不清,重新理解了ENTITY、PROCESS、ARCHITECTURE等意义和使用方法。2、Quartus操作方法也已忘记,重新找到以前的课件,按照课件一步一步练习操作,2016.8.31日志:尝试建立一个可以编译下载到EMP7128SLC84-15芯片的工程,并将示例程序编译后分配管脚,下载到芯片。遇到问题及解决方案:1、因为一开始使用的是64位的quartus,分配管脚报错:license文件不支持该芯片,用32位的重新建工程就编译通过。2、因为用的是自己的win10的电脑,无法识别USB下载器,又将工程拷贝到实验室电脑上成功下载到芯片。3、一开始不清楚从哪输入IR7~IR4、C、Z,和同学讨论后,理解了将程序先存入存储器,连线后可执行微程序。2016.9.1日志:1、研究输入输出信号的具体作用。2、根据硬布线控制器参考流程图写组合逻辑译码表。3、按要求编写程序VHDL代码。遇到问题及解决方案:1、循环操作中读寄存器的ST0判断与取值难以直接改变,ST0作为一个signal,不可以在两个process中同时有赋值语句,所以设置了SST0控制,SST0为1时ST0置1。2、不知道如何利用T3控制,后经和组员讨论利用T3下降沿来完成时序同步。2016.9.2日志:1、继续编写程序。2、初步在实验台调试编写的程序遇到问题及解决方案:1、初次调试运行程序时指令输出不正确,检查程序后发现需要每次进入进程时初始化。2、前几次调试时写寄存器操作跳转出错,检查代码发现未给SST0置0。3、SST0对ST0的控制需要同步处理,即在一个拍结束后再对ST0控制。2016.9.5日志:1、逐条验证编写的指令。2、运行老师给的检验程序遇到问题及解决方案:1、老师的检验程序运行至JMP时IR显示出错,查找原因,发现LD命令未能正确运行,排除法找出是代码错误引起。一共找出两个错误。(1)课本程序框图中LD语句W3的节拍里未注明S的取值,写程序时理解为初始化为0,请教同学后,理解了S应保持W2时的值不变;(2)修改代码后仍运行不正确,检查管脚配置发现漏掉了M,加上后编译运行,结果正确2、欲添加自己的指令,不能确定指令相应的输出信号与代码,经查书和上网查找后解决问题。六、算法设计(伪代码)1、首先是时序PROCESS,伪代码描述如下:PROCESS(RST0,SST0,T3,SW,CLR)BEGINIFCLR='0'THENST0清零;ELSIFSW有意义THEN--SW四种情况均要用到ST0控制if同步信号到来then--通过T3实现标记置位/复位同步完成对ST0的复位和置位;ENDIF;elseNULL;endif;ENDIF;ENDPROCESS;2、其次是指令控制PROCESS,设计思想涉及到两级的译码结构(两重SWITCH-CASE)结构,由于要实线“可以在任何地方开始程序”,在取值时需要做一些调整。用伪代码描述如下:PROCESS(SW,W3,W2,W1,IR,CLR)BEGIN初始化;CASESWISWHEN100=IFST0='0'THEN写R0和R1;SST0有效;ELSIFST0='1'THEN写R2和R3;RST0有效;ENDIF;WHEN011=每拍读两个;WHEN010=IFST0='0'THEN给首地址;SST0有效;ELSIFST0='1'THEN自增;ENDIF;WHEN001=IFST0='0'THEN给首地址;SST0有效;ELSIFST0='1'THEN自增;ENDIF;WHEN000=IFST0='0'THEN给首地址;SST0有效;ELSIFST0='1'THEN取指,并保证ST0永远为1;CASEIRIS0001-1111操作码译码;ENDCASE;ENDIF;ENDCASE;ENDPROCESS;七、实验VHDL代码LIBRARYIEEE;USEIEEE.std_logic_1164.ALL;ENTITYCPUISPORT(CLR:IN
本文标题:北邮计算机组成原理课程设计-代码与实验报告
链接地址:https://www.777doc.com/doc-6865918 .html