计算机组成原理课程设计报告控制器综合设计实验(xiexiebang推荐)

时间:2019-05-14 04:16:13下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《计算机组成原理课程设计报告控制器综合设计实验(xiexiebang推荐)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《计算机组成原理课程设计报告控制器综合设计实验(xiexiebang推荐)》。

第一篇:计算机组成原理课程设计报告控制器综合设计实验(xiexiebang推荐)

计算机组成原理 课程设计报告

题目:控制器综合设计实验

学院: 姓名: 学号: 同组人: 完成日期:

一、需求分析

1、程序设计目的

(1)在掌握部件单元电路实验的基础上,进一步将其组成系统构造一台基本模型计算机。

(2使用简单模型机和复杂模型机的部分机器指令,并编写相应的微程序,具体上机调试掌握整机概念。

(3)掌握微程序控制器的组成原理。

(4)掌握微程序的编写、写入,观察微程序的运行。

(5)通过课程设计,使学生将掌握的计算机组成基本理论应用于实践中,在实际操作中加深对计算机各部件的组成和工作原理的理解,掌握微程序计算机中指令和微指令的编码方法,深入理解机器指令在计算机中的运行过程。

2、程序设计内容

(1)分析所设计系统中各功能模块的工作原理;

选用合适的器件(芯片); 提出系统的设计方案;

(2)根据系统流程图,编写程序与微程序并调试通过

记录运行情况

对所设计电路进行调试。

将ADD指令做适当的修改操作并调试通过

对原理图进行相应的修改,实现带移位的运算的模型机。

二、结构设计

[1] 运算器单元(ALU UINT)

运算器单元由以下部分构成:两片74LS181构成了并-串型8位ALU;两个8位寄存器DR1和DR2为暂存工作寄存器,保存参数或中间运算结果。ALU的S0~S3为运算控制端,Cn为最低进位输入,M为状态控制端。ALU的输出通过三态门74LS245连到数据总线上,由ALU-B控制该三态门。[2] 寄存器堆单元(REG UNIT)

该部分由3片8位寄存器R0、R1、R2组成,它们用来保存操作数用中间运算结构等。三个寄存器的输入输出均以连入数据总线,由LDRi和RS-B根据机器指令进行选通。

[3] 指令寄存器单元(INS UNIT)

指令寄存器单元中指令寄存器(IR)构成模型机时用它作为指令译码电路的输入,实现程序的跳转,由LDIR控制其选通。[4] 时序电路单元(STATE UNIT)

用于输出连续或单个方波信号,来控制机器的运行。[5] 微控器电路单元(MICRO-CONTROLLER UNIT)

微控器主要用来完成接受机器指令译码器送来的代码,使控制转向相应机器指令对应的首条微代码程序,对该条机器指令的功能进行解释或执行的工作。由输入的W/R信号控制微代码的输出锁存。由程序计数器(PC)和地址寄存器(AR)实现程序的取指功能。[6] 逻辑译码单元(LOG UNIT)

用来根据机器指令及相应微代码进行译码使微程序转入相应的微地址入口,从而实现微程序的顺序、分支、循环运行,及工作寄存器R0、R1、R2的选通译码。

[7] 主存储器单元(MAIN MEM)

用于存储实验中的机器指令。

[8] 输入输出单元(INPUT/OUTPUT DEVICE)

输入单元使用八个拨动开关作为输入设备,SW-B控制选通信号。输出单元将输入数据置入锁存器后由两个数码管显示其值。

*该CPU数据结构通路框图如下:

微指令译码电路如下:

图中MS24—MS16对应于微指令的第24—16位,S3S2S1S0MCn为运算器的方式控制,详见实验一和实验二;WE为外部器件的读写信号,‘1’表示写,‘0’表示读;1A、1B用于选通外部器件,通常接至底板IO控制电路的1A1B端,四个输出Y0Y1Y2Y3接外部器件的片选端。

图5—3中MS15—MS13对应于微指令中的F1,经锁存译码后产生6个输出信号:LRi、LDR1、LDR2、LDIR、LOAD、LAR。其中LDR1、LDR2为运算器的两个锁存控制(见实验一);LDIR为指令寄存器的锁存控制(见系统介绍中指令寄存器电路);LRi为寄存器堆的写控制,它与指令寄存器的第0位和第1位共同决定对哪个寄存器进行写操作(见系统介绍中寄存器堆电路和图5-4);LOAD为程序计数器的置数控制,LAR为地址寄存器的锁存控制(见系统介绍中程序计数器和地址寄存器电路)。以上6个输出信号均为‘1’有效。

图5—3中MS12—MS10对应于微指令中的F2,经锁存译码后产生6个输出信号:RAG、RBG、RCG、299-G、ALU-G、PC-G。其中RAG、RBG、RCG分别为寄存器Ax、Bx、Cx的输出控制(见系统介绍中寄存器堆电路);299-G为移位寄存器的输出控制(见实验二);ALU-G为运算器的输出控制(见实验一);PC-G为程序计数器的输出控制(见系统介绍中程序计数器和地址寄存器电路)。以上信号均为‘0’有效。

图5—3中MS9—MS9对应于微指令中的F3,经锁存译码后产生6个输出信号:P1、P2、P3、P4、AR、LPC。其中P1、P2、P3、P4位测试字,其功能是对机器指令进行译码,使微程序转入相应的微地址入口,从而实现微程序的顺序、分支和循环运行(见实验4的图4-1(b)和图5-4);AR为运算器的进位输出控制(见实验一);LPC为程序计数器的时钟控制(见系统介绍中程序计数器电路)。以上信号均为‘1’有效。

三、系统工作原理描述

1.数据通路

2.指令系统的设计及格式

实验设备的数据通路与图2-5-1 相同,微指令格式见表2-5-2 微指令格式,可根据自己的需要设计指令系统。

系统可以支持三种指令格式。机器指令格式

一、格式二与实验5 相同,这里介绍格式三:二字节指令,第一字节为操作码,第二字节D 为操作数

其中,OP-CODE 为操作码,Rs 为源寄存器,Rd 为目的寄存器,在无操作数 时,第0~3 位无意义。并规定:

按照实验3 中所介绍过的机器指令格式

一、格式二本实验设备最多可以

设计16 条指令,如果考虑各种寻址方式,系统功能就太低了。为了增加系统 功能,本实验台还提供了第二操作码进行二次译码,这样源寄存器和目的寄 存器都有指令的1,0 位决定(此时使用源寄存器总线数据应选择Rd,即

CBA=101)。这样给大家的微程序编程提供了更多的想象空间。为了易于编程 我们推荐下列格式:

其中,OP-CODE 为操作码,Rd(Rs)为目的(源)寄存器。M 为寻址 模式(第4 位和第7 位为这类指令的特征字),具体寻址方式可自行定义,建 议定义如下:

IN:单字节(8 位)指令。其含义是将数据开关上的8 位数据输入到目的寄存器 R0 中;

MOV:双字节传送指令。其含义是将源地址指出的内容传送到目的地址指出 的单元(或寄存器)中,其中①MOV R1,#XXH:地址单元01 和02 中的指令含 义是将指令的第二字节作为操作数传送到目的寄存器R1 中。②MOV addr,R1: 地址单元04 和05 中的指令含是将源寄存器R1 的内容传送到指令的第二字节所指 出的目的地址单元中;

ADD:单字节指令。其含义是将目的寄存器R1 的内容与源寄存器R0 的内容 相加,结果存入目的寄存器R1;

OUT:双字节指令。其含义是将内存中以第二字为地址的单元内容通过数据 总线送至LED 显示;

JMP:双字节指令。其含义为执行这条指令时,将指令第二字节的内容装入 程序计数器(PC)。3.微程序及微程序流程

微程序控制器首先在给出的微地址为00H 中读出

微指令,然后给出下一条微指令地址01H。微指令地址01H、02H 这两条微指令 均为公用微指令,机器指令的取指就是从这里开始的。微地址为01H 的微指令执 行的是PC→AR(要执行指令的地址送到地址寄存器AR)及PC+1(PC 指向下一 条机器指令或机器指令的下一字节)微指令,同时给出下一条微指令地址02H。微地址02H 中微指令执行的是(AR)→IR(把AR 所指RAM 中的指令送到IR 寄 存器),同时给出判别信号P(1)及微指令基地址(10H)。下一条微地址将根据P(1)的测试结果得出,即:下一条微地址=基地址(10H)∨指令寄存器(IR)中的高4 位。在产生下一条微指令地址时,由于指令中IR7、IR6、IR5、IR4 不同,所产生的 下一条微指令地址也不同。在IR7、IR6、IR5、IR4 为00(即:NOP 机器指令)时,执行10H 的微指令,而10H(NOP)这条微指令的功能只是给出了微指令的下地 址01。每一条机器指令对应微程序的最后一条微指令后续地址一定是01H。接下来 重新执行微指令地址为01H、02H 的公共微指令,取出下一条机器指令的操作 码,再根据P(1)的测试结果得出下一条微指令的微地址,┅┅。

四、外接口定义

实验仪器:

Dais-CMH+/CMH 计算器组成原理教学实验系统一台:Dais-CMH+计算机组成原理教学实验系统采用内、外总线结构,按开放式的要求设计了各关联的单元实验电路,创造了按键式操作环境,实验方式灵活多样。在系统监控的管理下向用户提供“L”(单元手动)、“H”(单元自动)、“M”(模型机)三种工作方式;自带虚拟PC逻辑示波器、逻辑笔等测试工具,Windows、DOS及LED多个操作平台自由选择,可自成一体独立运行,亦可配合先进的动态跟踪集成软件,凭借PC资源形成强大的在线调试与图形示意系统。

实验用扁平线导线若干:用于连接电脑与Dais-CMH+/CMH 计算器组成原理教学实验系统。导线若干:用于Dais-CMH+/CMH 计算器组成原理教学实验系统各组件之间的连接。电脑一台:显示“指令系统窗口”。

微指令格式:微指令字长32 位,各位对应控制功能如下:

其中:AR 为算术运算是否影响进位及判零标志控制位:UA5-UA0 为6 位后续微地址:A 字段和B1、B2 字段为译码字段,A 字段中的RS-B、RD-B 分别为源寄存器、目的寄存器及变 址寄存器的选通信号,它的功能是根据机器指令来选通三个工作寄存器R0、R1、R2,如图3 -3 所示,图中I0-I3 为指令寄存器的第0-3 位。LDR1 为打入工作寄存器信号的译码器使能

控制位。

B 字段中P(1)、P(2)、P(3)三个测试字位,其功能是根据机器指令及相应微代码进 行译码,使微程序转入相应的微地址入口,从而实现微程序的顺序、分支、循环运行。其原 理如图3-4。图中I7-I2 为指令寄存器第7-2 位输出,SE5-SE0 为微控器单元微地址锁存器 的置“1”控制端,参看图3-2。

图3-3 A 字段译码器的部分功能 图3-4 B 字段的功能

五、系统详细设计

程序设计基本原理

图3-1 时序电路原理图

实验所用的时序电路原理如图3—1 所示,可产生4 个等间隔的时序信号T1-T4 其

中Ф 为时钟信号,由位于实验装置右上方的方波信号源提供。学生可根据实验自行选择方 波信号的频率。为了便于控制程序的运行,时序电路发生器也设置了一个启停控制触发器 CR,使T1-T4 信号输出可控。图中STEP(单步)、STOP(停机)分别由位于实验装置中部管CPU 的两个PIO 口控制。启动信号START 由“单步”、“连续”二运行命令键产生。当按动“连续”

命令键时管理CPU 令STEP=0(EXEC),运行触发器CR 一直处于”1”状态,因此时序信号T1 —T4 将周而复始地发送出去。当按动”单步”命令键时管理CPU 令STEP=I(STEP),机器便 处于单步运行状态,即此时只发送一个CPU 周期的时序信号就停机。利用单步方式,每次只 读一条微指令,可以观察微指令的代码与当前微指令的执行结果。另外当机器连续运行时,如果按动“暂停”命令键管理CPU,则令STOP=1,也会使机器停机。

用复杂模型机方式设计并完成给定指令的微程序。MOV R0,IMM MOV R1,[10H] ADD R0,R1 JCZ L1 ;相对寻址 MOV [11H],R0 L1: HLT

微控器实验原理图

六、主要参考文献

《计算机组成原理》 高等教育出版社 唐朔飞著

《计算机组成原理与系统结构实验指导书》中国计量学院信息工程分院 徐展翼 程林滨著

第二篇:计算机组成原理课程设计

《计算机组成原理》课程设计

任务书

中原工学院计算机学院 2007年6月

前言

“计算机组成原理”是大学本科计算机相关专业的一门核心专业基础课程,必修,在先导课和后继课之间起着承上启下的作用。主要讲授单处理机系统的组成和工作原理,包括运算器、存储器、控制器和输入输出系统,其中控制器的设计是课程的重点和难点。为了让学生能融会贯通各知识点,增强对计算机系统各模块协同工作的认识,充分理解数据通路,掌握控制器的设计技术,课程设计一般也侧重于控制器的设计。考虑到学生的基础和现有实验环境,本次课程设计的题目是“微程序控制器的设计与实现”。通过该课程设计,希望学生在理论与实践相结合的基础上,加深对计算机整机概念,进一步理解计算机的内部结构和时空关系,进一步理解和掌握微程序控制器的设计思想和具体方法、步骤,从而提高自行设计、调试和分析问题的能力。课程设计题目

微程序控制器的设计与实现

目的

 巩固和深刻理解“计算机组成原理”课程所讲解的原理,加深对计算机各模块协同工作的认识

 掌握微程序设计的思想和具体流程、操作方法。 培养学生独立工作和创新思维的能力,取得设计与调试的实践经验。

 尝试利用编程实现微程序指令的识别和解释的工作流程

内容

按照要求设计一指令系统,该指令系统能够实现数据传送,进行加、减运算和无条件转移,具有累加器寻址、寄存器寻址、寄存器间接寻址、存储器直接寻址、立即数寻址等五种寻址方式。

具体要求

 仔细复习所学过的理论知识,掌握微程序设计的思想,并根据掌握的理论写出要设计的指令系统的微程序流程。指令系统至少要包括六条指令,具有上述功能和寻址方式。 根据微操作流程及给定的微指令格式写出相应的微程序  将所设计的微程序在虚拟环境中运行调试程序,并给出测试思路和具体程序段

 尝试用C或者Java语言实现所设计的指令系统的加载、识别和解释功能。 撰写课程设计报告。

设计环境

 伟福COP2000型计算机组成原理实验仪,微机,相关虚拟软件。

 VC开发环境或者Java开发环境。

课程设计时间

 1.5周

课程设计报告要求 完成设计任务后,在课程设计的最后阶段,需要总结全部设计工作,写出完整,规范的设计报告,在指定的时间内提交指导教师.课程设计报告要求有完整的格式,包括封面,目录,正文等,具体如下:

一、封面

包括:课程设计题目,姓名,学号,班级,指导教师,完成日期.二、目录

正文前必须要有目录.三、正文 正文包括的内容有: ⑴ 设计任务与要求;⑵ 设计方案(包括设计思路,采用的微指令格式,每条指令的指令流程及其微程序清单)(3)调试过程(包括实验步骤,出现的问题,解决的方法(4)小结(在整个课程设计过程中的总结和体会)(5)参考资料

成绩评定

课程设计的考核结果按优秀,良好,中等,及格和不及格来评价.对设计任务理解透彻,能够全面,正确,独立地完成设计内容所规定的任务,得出设计结果,并按时提交准确,完整,规范的设计报告,可评为优秀;按照设计任务要求能够顺利地完成任务,得出结果,按时提交较完整的,符合要求的设计报告,可评定为良好;按照设计要求完成了软件的编程与调试,基本完成了任务要求,提交符合要求的设计报告,可评为中等;基本完成设计目标,但不够完善,可能有若干小的缺陷,在帮助下能够完成任务要求,提交设计报告,可评为及格;不能完成指定的要求和任务,未提交设计报告的,评为不及格.参考资料 1.“计算机组成原理课程设计任务书” 2.“计算机组成原理” 课堂教材

第三篇:计算机组成原理课程设计范文

计算机组成原理课程设计指导材料

一. 课程设计目的

课程设计教学目的:通过本课程设计,学生可熟悉典型计算机的基本结构、基本组成和基本功能,掌握计算机主要组成部件工作原理的基本分析与设计方法,加深对理论课知识内容的理解。

二. 设计题目

题目1.内存扩充与连接 1.设计目的:

2.主要任务:

3.设计要求:

4.图表

画图时请按以下给出的原件图画 图1-1 8086芯片引脚图 图1-2内存芯片逻辑图

图1-3 译码器与门电路逻辑图 题目2.模型机组成设计

1.目的:通过对一个简单模型机的设计与实现,对计算机的基本组成、部件的设计、部件间的连接以及微指令执行的过程。

2.基本要求:画出模型机的设计图并举例描述利用该模型机进行加法运算时,各个功能部件的工作情况。

题目3.算数逻辑运算 1.目的:

(1).了解运算器 的组成结构。(2).掌握运算器的工作原理。(3).学习运算器的设计方法。

(4).掌握简单运算器的数据传 送通路。

(5).验证运算功能发生器74LS181 的组 合功能。

2.设计原理:

设计中所用的运算器数据通路图如下图。图中所示的是由两片74LS181 芯片以并/串 形式构成的8 位字长的运算器。右方为低4 位运算芯片,左方为高4 位运算芯片。低位芯片 的进位输出端Cn+4 与高位芯片的进位输入端Cn 相连,使低4 位运算产生的进位送进高4 位运算中。低位芯片的进位输入端Cn 可与外来进位相连,高位芯片的进位输出引至外部。两个芯片的控制端S0~S3 和M 各自相连,其控制电平按表。为进行双操作数运算,运算器的两个数据输入端分别由两个数据暂存器DR1、DR2(用锁存器74LS273 实现)来锁存数据。要将内总线上的数据锁存到DR1 或DR2 中,则锁存器74LS273 的控制端LDDR1 或LDDR2 须为高电平。当T4 脉冲来到的时候,总线上的数据就被锁存进DR1 或DR2 中了。为控制运算器向内总线上输出运算结果,在其输出端连接了一个三态门(用74LS245 实现)。若要将运算结果输出到总线上,则要将三态门74LS245 的控制端ALU-B 置低电平。否则输出高阻态。

3.根据设计原理描述进行原码加减运算及逻辑运算的程序流程 4.填写下表

三. 课程设计报告格式

1.报告组成及装订顺序:封面、目录、引言、正文、结论、参考文献、心得体会。2.书写格式要求:见学院课程设计报告要求

四. 其它要求

1.报告提交时间:截止12月31日

2.报告提交形式:以班级为单位提交电子版和打印版

第四篇:计算机组成原理实验

ALU设计

module ALU(ALU_OP,AB_SW,F_LED_SW,LED);

input[2:0] ALU_OP,AB_SW,F_LED_SW;

output[7:0] LED;reg[7:0] LED;

reg[31:0] A,B,F;reg OF,ZF;

always@(*)begin

end

always@(*)begin

ZF=0;OF=0;case(ALU_OP)

3'b000: begin F=A&B;end 3'b001: begin F=A|B;end 3'b010: begin F=A^B;end 3'b011: begin F=~(A|B);end 3'b100: begin {OF,F}=A+B;OF=OF^F[31];end 3'b101: begin {OF,F}=A-B;OF=OF^F[31];end 3'b110: begin F=A

3'b000: begin A=32'h0000_0000;B=32'h0000_0000;end 3'b001: begin A=32'h0000_0003;B=32'h0000_0607;end 3'b010: begin A=32'h8000_0000;B=32'h8000_0000;end 3'b011: begin A=32'h7FFF_FFFF;B=32'h7FFF_FFFF;end 3'b100: begin A=32'h8000_0000;B=32'hFFFF_FFFF;end 3'b101: begin A=32'hFFFF_FFFF;B=32'h8000_0000;end 3'b110: begin A=32'h1234_5678;B=32'h3333_2222;end 3'b111: begin A=32'h9ABC_DEF0;B=32'h1111_2222;end endcase endcase

if(F==32'b0)ZF=1;end

always@(*)begin

end case(F_LED_SW)

3'b000: LED=F[7:0];3'b001: LED=F[15:8];3'b010: LED=F[23:16];3'b011: LED=F[31:24];default:begin LED[7]=ZF;LED[0]=OF;LED[6:1]=6'b0;end endcase

endmodule 管脚配置

NET “AB_SW[0]” LOC = T10;NET “AB_SW[1]” LOC = T9;NET “AB_SW[2]” LOC = V9;NET “ALU_OP[0]” LOC = M8;NET “ALU_OP[1]” LOC = N8;NET “ALU_OP[2]” LOC = U8;NET “F_LED_SW[0]” LOC = V8;NET “F_LED_SW[1]” LOC = T5;NET “F_LED_SW[2]” LOC = B8;NET “LED[0]” LOC = U16;NET “LED[1]” LOC = V16;NET “LED[2]” LOC = U15;NET “LED[3]” LOC = V15;NET “LED[4]” LOC = M11;NET “LED[5]” LOC = N11;NET “LED[6]” LOC = R11;NET “LED[7]” LOC = T11;寄存器 module jicunqi(input Clk, input Reset, input [4:0] Reg_Addr, input Write_Reg, input [1:0] Sel, input AB, output reg [7:0] LED);reg [31:0] W_Data;wire [31:0] R_Data_A,R_Data_B,LED_Data;REG RU1(Clk,Reset,Reg_Addr,Reg_Addr,Reg_Addr,W_Data,Write_Reg,R_Data_A,R_Data_B);assign LED_Data=AB?R_Data_A : R_Data_B;always @(*)begin

W_Data=32'h0000_0000;

LED=8'b0000_0000;

if(Write_Reg)

begin

case(Sel)

2'b00: W_Data= 32'h1234_5678;

2'b01: W_Data= 32'h89AB_CDEF;2'b10: W_Data= 32'h7FFF_FFFF;2'b11: W_Data= 32'hFFFF_FFFF;endcase end

else

begin

case(Sel)

2'b00: LED=LED_Data[7:0];2'b01: LED=LED_Data[15:8];2'b10: LED=LED_Data[23:16];2'b11: LED=LED_Data[31:24];

endcase end end endmodule `timescale 1ns / 1ps // REG.v module REG(input Clk, input Reset, input [4:0] R_Addr_A, input [4:0] R_Addr_B, input [4:0] W_Addr, input [31:0] W_Data, input Write_Reg, output [31:0] R_Data_A, output [31:0] R_Data_B);

reg [31:0] REG_Files[0:31];integer i;

assign R_Data_A=REG_Files[R_Addr_A];assign R_Data_B=REG_Files[R_Addr_B];

always @(posedge Clk or posedge Reset)begin

if(Reset)

begin

for(i=0;i<=31;i=i+1)

REG_Files[i]<=32'h0000_0000;

end

else

begin

if(Write_Reg)

begin

REG_Files[W_Addr]<=W_Data;

end end end endmodule

管脚配置 NET “Clk” LOC=“C9”;NET “Reset” LOC=“D9”;NET “Reg_Addr[4]” LOC=“T5”;NET “Reg_Addr[3]” LOC=“V8”;NET “Reg_Addr[2]” LOC=“U8”;NET “Reg_Addr[1]” LOC=“N8”;NET “Reg_Addr[0]” LOC=“M8”;NET “Write_Reg” LOC=“V9”;NET “Sel[1]” LOC=“T9”;NET “Sel[0]” LOC=“T10”;NET “AB” LOC=“A8”;NET “LED[7]” LOC=“T11”;NET “LED[6]” LOC=“R11”;NET “LED[5]” LOC=“N11”;NET “LED[4]” LOC=“M11”;NET “LED[3]” LOC=“V15”;NET “LED[2]” LOC=“U15”;NET “LED[1]” LOC=“V16”;NET “LED[0]” LOC=“U16”;

第五篇:西南交通大学计算机组成原理课程设计报告

《计算机组成实验 C》

课程设计

适用专业:电子信息类专业

专 班 学 姓

业:软件工程 级:软件一班 号: 名:某某某

指导教师:陈红梅

实验学期:2014-2015 第 1 学期

西 南 交 通 大 学

信息科学与技术学院 目录

简化计算机系统的设计.......................................................................................................................2

一、实验目的...............................................................................................................................2 二.、实验内容...............................................................................................................................2 三.、预习要求...............................................................................................................................2

四、实验报告...............................................................................................................................2 1.BLOCK图...........................................................................................................................3 2.程序设计(纸质的版本我用手抄)...........................................................................4 3.仿真波形图.................................................................................................................11

4、仿真中遇到的问题:...................................................................................................14

五、实验感想............................................................................................................................15

简化计算机系统的设计

一、实验目的

通过学习简单的指令系统及其各指令的操作流程,用 VHDL 语言实现简单 的处理器模块,并通过调用存储器模块,将处理器模块和存储器模块连接形成简化的计 算机系统。

二.、实验内容

1.用 VHDL 语言实现简单的处理器模块。2.调用存储器模块设计 64×8 的存储器模块。

3.将简单的处理器模块和存储器模块连接形成简单的计算机系统。4.将指令序列存入存储器,然后分析指令执行流程。

三.、预习要求

1、学习简单指令集。

2、学习各指令的操作流程。

四、实验报告

1.BLOCK图

2.程序设计(纸质的版本我用手抄)

CPU的设计: LIBRARY ieee;USE ieee.std_logic_1164.ALL;

PACKAGE mypack IS CONSTANT idle : std_logic_vector(3 DOWNTO 0):=“0000”;CONSTANT load : std_logic_vector(3 DOWNTO 0):=“0001”;CONSTANT move : std_logic_vector(3 DOWNTO 0):=“0010”;CONSTANT addx : std_logic_vector(3 DOWNTO 0):=“0011”;CONSTANT subp : std_logic_vector(3 DOWNTO 0):=“0100”;CONSTANT andp : std_logic_vector(3 DOWNTO 0):=“0101”;CONSTANT orp : std_logic_vector(3 DOWNTO 0):=“0110”;CONSTANT xorp : std_logic_vector(3 DOWNTO 0):=“0111”;CONSTANT shrp : std_logic_vector(3 DOWNTO 0):=“1000”;CONSTANT shlp : std_logic_vector(3 DOWNTO 0):=“1001”;CONSTANT swap : std_logic_vector(3 DOWNTO 0):=“1010”;CONSTANT jmp : std_logic_vector(3 DOWNTO 0):=“1011”;CONSTANT jz : std_logic_vector(3 DOWNTO 0):=“1100”;CONSTANT read : std_logic_vector(3 DOWNTO 0):=“1101”;CONSTANT write : std_logic_vector(3 DOWNTO 0):=“1110”;CONSTANT stop : std_logic_vector(3 DOWNTO 0):=“1111”;END mypack;

LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE WORK.mypack.ALL;

------------------------cpu实体声明--ENTITY cpu IS PORT(reset : IN std_logic;--清零信号低有效

clock : IN std_logic;--时钟信号

Write_Read: OUT std_logic;--读写信号,'1'为写 M_address: OUT std_logic_vector(11 DOWNTO 0);--地址线 M_data_in: IN std_logic_vector(7 DOWNTO 0);--数据输入线 M_data_out: OUT std_logic_vector(7 DOWNTO 0);--数据输出线

overflow: OUT std_logic);

--溢出标志 END cpu;

------------------------cpuRTL级行为描述-

ARCHITECTURE RTL of cpu IS

SIGNAL IR: std_logic_vector(15 DOWNTO 0);--指令寄存器 SIGNAL MDR: std_logic_vector(7 DOWNTO 0);--数据寄存器 SIGNAL MAR: std_logic_vector(11 DOWNTO 0);--地址寄存器 SIGNAL status: integer RANGE 0 TO 6;--状态寄存器 BEGIN status_change: PROCESS(reset, clock, status)BEGIN IF reset = '0' THEN status <= 0;ELSIF clock'EVENT AND clock = '0' THEN

CASE status IS WHEN 0 =>

status <= 1;WHEN 1 => IF IR(15 DOWNTO 12)= Stop THEN

status <= 1;ELSE

status <= 2;END IF;WHEN 2 => CASE IR(15 DOWNTO 12)IS

WHEN Read|Write|Jmp|Jz|Swap =>

status <= 3;

WHEN OTHERS =>

status <= 0;

END CASE;WHEN 3 => IF IR(15 DOWNTO 12)= Swap THEN

status <= 0;ELSE

status <= 4;END IF;WHEN 4 => status <= 5;WHEN 5 => CASE IR(15 DOWNTO 12)IS

WHEN Read|Write =>

status <= 6;

WHEN OTHERS =>

status <= 0;

END CASE;WHEN OTHERS => status <= 0;END CASE;

ELSE

NULL;END IF;END PROCESS status_change;

seq: PROCESS(reset,clock)

VARIABLE PC:std_logic_vector(11 DOWNTO 0);--程序计数器

VARIABLE R0,R1,R2,R3: std_logic_vector(7 DOWNTO 0);--通用寄存器

VARIABLE A: std_logic_vector(7 DOWNTO 0);--临时寄存器

VARIABLE temp: std_logic_vector(8 DOWNTO 0);--临时变量 BEGIN IF(reset='0')THEN

--清零

IR <=(OTHERS=>'0');PC :=(OTHERS=>'0');R0 :=(OTHERS=>'0');R1 :=(OTHERS=>'0');R2 :=(OTHERS=>'0');R3 :=(OTHERS=>'0');A :=(OTHERS=>'0');MAR <=(OTHERS=>'0');MDR <=(OTHERS=>'0');ELSIF(clock'event AND clock='1')THEN overflow <= '0';CASE status IS

WHEN 0=>--状态0 IR <= M_data_in & “00000000”;

--取指令

PC := PC+1;

--程序计数器加1

WHEN 1=>--状态1 IF(IR(15 DOWNTO 12)/= stop)THEN MAR <= PC;

END IF;

CASE IR(15 DOWNTO 12)IS WHEN load => R0:= “0000” & IR(11 DOWNTO 8);WHEN shlp|shrp => CASE IR(11 DOWNTO 10)IS

--Rx to A WHEN “00”=> A:= R0;WHEN “01”=> A:= R1;WHEN “10”=> A:= R2;WHEN OTHERS => A:= R3;END CASE;WHEN Move|addx|subp|andp|orp|xorp|Swap=> CASE IR(9 DOWNTO 8)IS

--Ry to A WHEN “00”=> A:=R0;WHEN “01”=> A:=R1;WHEN “10”=> A:=R2;WHEN OTHERS=> A:=R3;END CASE;WHEN OTHERS => NULL;END CASE;

WHEN 2=>--状态2

CASE IR(15 DOWNTO 12)IS WHEN addx =>--Rx:= Rx + A;CASE IR(11 DOWNTO 10)IS WHEN “00”=> temp :=(R0(7)& R0(7 DOWNTO 0))+(A(7)& A(7 DOWNTO 0));

R0:=temp(7 DOWNTO 0);

overflow <= temp(8)XOR temp(7);WHEN “01”=> temp :=(R1(7)& R1(7 DOWNTO 0))+(A(7)& A(7 DOWNTO 0));

R1:=temp(7 DOWNTO 0);

overflow <= temp(8)XOR temp(7);WHEN “10”=> temp :=(R2(7)& R2(7 DOWNTO 0))+(A(7)& A(7 DOWNTO 0));

R2:=temp(7 DOWNTO 0);

overflow <= temp(8)XOR temp(7);WHEN OTHERS=> temp :=(R3(7)& R3(7 DOWNTO 0))+(A(7)& A(7 DOWNTO 0));

R3:=temp(7 DOWNTO 0);

overflow <= temp(8)XOR temp(7);END CASE;WHEN subp =>--Rx:= Rx-A;CASE IR(11 DOWNTO 10)IS WHEN “00”=> temp :=(R0(7)& R0(7 DOWNTO 0))+ NOT(A(7)& A(7 DOWNTO 0))+ 1;

R0:=temp(7 DOWNTO 0);

overflow <= temp(8)XOR temp(7);WHEN “01”=> temp :=(R1(7)& R1(7 DOWNTO 0))+ NOT(A(7)& A(7 DOWNTO 0))+ 1;

R1:=temp(7 DOWNTO 0);

overflow <= temp(8)XOR temp(7);WHEN “10”=> temp :=(R2(7)& R2(7 DOWNTO 0))+ NOT(A(7)& A(7 DOWNTO 0))+ 1;

R2:=temp(7 DOWNTO 0);

overflow <= temp(8)xor temp(7);WHEN OTHERS=> temp :=(R3(7)& R3(7 DOWNTO 0))+ NOT(A(7)& A(7 DOWNTO 0))+ 1;

R3:=temp(7 DOWNTO 0);

overflow <= temp(8)XOR temp(7);END CASE;WHEN move => CASE IR(11 DOWNTO 10)IS WHEN “00”=> R0:= A;WHEN “01”=> R1:= A;WHEN “10”=> R2:= A;WHEN OTHERS=> R3:= A;END CASE;

WHEN shrp => CASE IR(11 DOWNTO 10)IS WHEN “00”=> R0:= '0' & A(7 DOWNTO 1);WHEN “01”=> R1:= '0' & A(7 DOWNTO 1);WHEN “10”=> R2:= '0' & A(7 DOWNTO 1);WHEN OTHERS=> R3:= '0' & A(7 DOWNTO 1);END CASE;WHEN shlp => CASE IR(11 DOWNTO 10)IS WHEN “00”=> R0:= A(6 DOWNTO 0)& '0';WHEN “01”=> R1:= A(6 DOWNTO 0)& '0';WHEN “10”=> R2:= A(6 DOWNTO 0)& '0';WHEN OTHERS=> R3:= A(6 DOWNTO 0)& '0';END CASE;WHEN andp =>--Rx:= Rx AND A;CASE IR(11 DOWNTO 10)IS WHEN “00”=> R0:=R0 AND A;WHEN “01”=> R1:=R1 AND A;WHEN “10”=> R2:=R2 AND A;WHEN OTHERS=> R3:=R3 AND A;END CASE;WHEN orp =>--Rx:= Rx OR A;CASE IR(11 DOWNTO 10)IS WHEN “00”=> R0:=R0 OR A;WHEN “01”=> R1:=R1 OR A;WHEN “10”=> R2:=R2 OR A;WHEN OTHERS=> R3:=R3 OR A;END CASE;WHEN xorp =>--Rx:= Rx XOR A;CASE IR(11 DOWNTO 10)IS WHEN “00”=> R0:=R0 XOR A;WHEN “01”=> R1:=R1 XOR A;WHEN “10”=> R2:=R2 XOR A;WHEN OTHERS=> R3:=R3 XOR A;END CASE;WHEN Swap =>--Swap: Rx to Ry;CASE IR(11 DOWNTO 8)IS WHEN “0100”=> R0:=R1;WHEN “1000”=> R0:=R2;WHEN “1100”=> R0:=R3;WHEN “0001”=> R1:=R0;WHEN “1001”=> R1:=R2;WHEN “1101”=> R1:=R3;WHEN “0010”=> R2:=R0;WHEN “0110”=> R2:=R1;WHEN “1110”=> R2:=R3;WHEN “0111”=> R3:=R1;WHEN “1011”=> R3:=R2;WHEN “0011”=> R3:=R0;

WHEN OTHERS=> NULL;END CASE;WHEN OTHERS => NULL;END CASE;

WHEN 3=>--状态3 CASE IR(15 DOWNTO 12)IS WHEN Swap=>--Swap: A to Rx CASE IR(11 DOWNTO 10)IS WHEN “00”=> R0:=A;WHEN “01”=> R1:=A;WHEN “10”=> R2:=A;WHEN OTHERS=> R3:=A;END CASE;WHEN jmp|Jz|Read|Write => IR(7 DOWNTO 0)<= M_data_in;PC := PC+1;

WHEN OTHERS => NULL;END CASE;

WHEN 4=>--CASE IR(15 DOWNTO 12)IS WHEN jmp =>

条件转移指令

PC := IR(11 DOWNTO 0);MAR <= IR(11 DOWNTO 0);

WHEN Jz =>--令

IF(R0=“00000000”)then PC := IR(11 DOWNTO 0);MAR <= IR(11 DOWNTO 0);else MAR <= PC;END IF;

WHEN Read => MAR <= IR(11 DOWNTO 0);WHEN Write => MAR <= IR(11 DOWNTO 0);MDR <= R0;WHEN OTHERS => NULL;END CASE;

WHEN 5 =>--MAR <= PC;WHEN 6 =>--

CASE IR(15 DOWNTO 12)IS WHEN Read => R0 := M_data_in;

WHEN OTHERS=> NULL;END CASE;

取双字节指令的后半部分状态4

--无条件转移指状态5 状态6--

END CASE;END IF;END process seq;

comb: PROCESS(reset, status)BEGIN IF(reset = '1' AND status = 5 AND IR(15 DOWNTO 12)= Write)THEN

Write_Read <= '1';

ELSE Write_Read <= '0';END IF;END PROCESS comb;M_address <= MAR;M_data_out <= MDR;END RTL;

3.仿真波形图

3.1总体的仿真波形图

1、我们可以看到CPU有6种工作模式,并且在不同的工作模式下实现了不同的功能。

2、我们的仿真波形上的M_q输出的波形为,000、15、24、D0、1F......与我们cpu_mem.Mif文件中所输入的指令一一对应。

3、我们看到PC随着时钟信号的改变在自加1。并且不断的从内存文件中依次读出相应的指令,将其执行。

4、我们看到R0的值在变化,依次为00、05、39、43、9、0A、3B、18、43、00,和所给的实例程序的情况完全吻合。同理也可以看出R1、R2、R3均为正确结果

5、我们可以看到地址寄存器也随着时钟信号在自加1,说明我们的PC和地址寄存器是共同协调工作的,随着PC加1地址也随之加1.6、在数据寄存器在CPU执行第7、8两条指令后其值也是随之改变为了R0中的值,与我们的预期相同。

3.2仿真波形的分析

变化: 我们可以看到执行完上面的的七条指令后R0、R1中的值发生了变化,而R2、R3中的值依然为00 没有发生变化。

分析:第一条指令:由于我们程序中设定为00010101即为load指令,转化为十六进制即为第一条指令15H,而我们在CPU中约定load指令为Read 01F R0<-(01F),即为将立即数5送给R0寄存器,所以当我们执行15H这条指令后CPU会将05送给R0寄存器,我们也可以从波形上看到,当执行完成15H指令后R0中的值变成了05;

第二条指令:同样的我们将24H设定为Move R1,R0 R1<-(R0)是一条转移指令,把R0中的值送给R1,从波形图上可看出 执行完成24H后 R1中的值变成了05,与我们的预期相符。

第三、四指令:我们将 D0H、1FH设定为 Read 01F,即R0<-(01)F 将1F中的值送给R0,操作完后R0的值就为我们在1F单元中存储的39 的数据值了。从波形图上我们也能看出吻合。

第五条指令:我们将94H设定为 Shl R1 即将R1中的值左移一位,操作完成后R1的值变成了0A,与波形的情况也吻合。第六条指令:我们将31H设定为 Add R0,R1 R0<-(R0)+(R1)操作完成后R0的值为R0和R1的和,很明显的看出我们仿真波形上的值是正确的。

第七、八两条指令:我们将E0H和1EH设定为 Write 01E 01E<-(R0)我们执行完成后01E单元的值在RAM中显示为43,与实际相符。

第九条指令:我们将41H设定为 SUB R0,R1 R0<-(R0-R1)指令,即为减法指令,我们预测执行完41H后R0的值为39,波形图显示正确。

第十条指令:我们将A1H设定为 Awap R0,R1(R0)(R1)指令,即为交换指令,我们预期R0=0A R1=39,从波形上看出我们执行了 A1H后与我们的R0、R1值与预期结果相同。

第十一条指令:61H 设定为 OR R0,R1 R0<-(R0)AND(RI)执行完城后R0=3B 与波形图相同。

第十二条指令:84H设定为Shr RI R1<-(RI)右移执行完成后R1应为1C 与波形图结果相同指令正确。

第十三条指令:51H设定为AND R0,R1 执行相与操作,预计R0中为18,波形图上当执行到这条指令后R0中结果确实为38,指令运行正确。

第十四条指令:28H设定为Move R2,R0 转移指令,将R0的值送给R2,预计R2中的值将为18,从波形图上看出R2值当运行到28H的时候确实为18,我们的指令运行正确。

第十五条指令:2DH设定为Move R3,R1 转移指令 将R1中的值送给R3,我们预期R3中的值将会为1C,但执行完成后我们从波形图上看出R3的值为1CH,指令运行正确。

第十六条指令:7BH设定为XOR R2,R3 将R2和R3异或 我们预期 R3中的之将会变为1CH,从波形图上看到我们运行完成7BH后R3 的值为1CH,指令运行正确。

第十七、十八条指令:D0H、1EH设定为Read 01E R0<-(01E)将01E地址中的值送给R0寄存器,我们预期R0中的值将会为 43,从波形图上可以看出当运行到此处的时候R0的值变成了43,指令运行正确。

第十九、二十条指令:C0H、19H 设定为:JZ019,若(R0)=0转移至019,否则执行下一条指令,我们分析R0中的值并不为0,故不会跳转,我们从波形上也可以看出,R0、R1、R2、R3中的值并没有发生任何变化

第二十一、二十二条指令:1DH、D0H设定为Read 01D R0<-(01D),即将01D地址中的值取出送给R0,预期R0中的值将为0,从波形图上也可以看出,执行到此处R0的值变成了0。

第二十三、二十四条指令:B0H、13H设定为: JMP 013指令 无条件跳转至013H地址,而013H 为JZ 019 指令 同时这是的R0寄存器中的值为0,满足了跳转条件,此时程序将跳转到019H地质处执行,即是我们的低二十五条指令,为停止指令,程序停止。

第二十五条指令:F0H 设定为Stop 指令,执行到此处程序停止。

此后的指令均为数据存储的指令,在这里我就不一一进行介绍了,详情可以查看下图这个32字节的RAM内情表。

4、仿真中遇到的问题:

仿真过程中的一些问题首先是PC、R0、R1、R2、R3里面的值的顺序需要将其颠倒。

仿真后还有一个问题是R0、R1、R2、R3的值显示不正确,R0只显示了到了05 后面的值就都不正确了,调试了半天,我发现波形显示M_q在上升沿变化后,与之相连的M_data_in竟然不变,最后经过各种搜索后解决了此问题,原来lpm为输出多做了一次寄存,也就是两个脉冲才会读出MAR的值。与PC的变化不衔接,整整快了两个脉冲。所以把图上红圈处的勾去掉就行了。

五、实验感想

经过此次实验

我对CPU的工作原理有了很深刻的认识,发现了其中蕴藏着巨大的乐趣,我完全的搞懂了此次试验的原理,再次基础上,我还能结合此次实验去理解微机接口,计算机组成原理等课程,通过此次实验,我能熟练的使用VHDL来编写大型的程序代码,对于一个学软件的人来说,我的编程能力又上了一个台阶。

除此之外,我学习到了很多底层的东西,让我对计算机的工作原理有了更深刻的理解,让我在此后的编程中将受益无穷。

可能老师您会看到我这个课程设计的很多拷贝,反正是我做的就是我做的,别人参考也好拷贝也好,我都觉得无所谓,重要的是我能学习到东西,这也让我学习到了很多做人的道理,你说同学问你要课程设计,我能不给么,但是作为同学我只能啰嗦一句,你只能参考啊,不要完全照搬。单是有些人他就要完全照搬你的图和分析,自己也不提出自己的看法和见解,这总是让我很心寒,特别是那些学习成绩还不错的。我真是想不通问什么要人家好心给你的报告参考,你反过来要坑人家,就这样的人品,学习好又能咋样呢,都是转空子的人,以后也不会得到大家的认可。

下载计算机组成原理课程设计报告控制器综合设计实验(xiexiebang推荐)word格式文档
下载计算机组成原理课程设计报告控制器综合设计实验(xiexiebang推荐).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    计算机组成原理课程设计任务书

    《计算机组成原理》 课程设计任务书 一、设计任务: 1、 基本模型机设计与实现; 2、 在基本模型机设计的基础上设计一台复杂模型机。 二、功能指标和设计要求: 利用所学过的理论......

    计算机组成原理课程设计指导书

    长 沙 学院 课程设计指导书 系(部) 计算机科学与技术专 业计算机科学与技术2010年12 月 10 日 课程名称:计算机组成原理 课程编号:7020130610 主 笔 人:钟旭 主 审 人: 一、课程......

    计算机组成原理课程设计2007答案大全

    在验收的同时,学生必须回答下列问题: 1, 指令寄存器在组成中的作用是什么? 用来保存当前正在执行的一条指令。 2, 指令的执行过程是怎么进行的? 执行一条指令时,先把它从内存中取到......

    计算机组成原理课程设计论文

    摘 要 摘要 显示器作为计算机重要的输出部件和人机交流的窗户,是一台电脑必不可少的部分,其重要性是不言而喻的。我们打开电脑,从开机的字符提示到开机后的图形化界面以及浏览......

    计算机组成原理--课程设计指导书

    计算机组成原理课程设计指导书 基于EDA技术的单周期中央处理器的设计与实现 适用专业:计算机科学与技术专业 网络工程专业及相关专业 教 研 室:计算机科学与技术教研室 计算......

    计算机组成原理-石油大学大课程设计

    中国石油大学(北京)成教学院 计算机组成原理教程课程设计 一.题目:计算机组成原理课程涉及到计算机多方面的基础知识,从冯诺依曼计算机体系结构开始,计算机被划分为多个组成部分......

    计算机组成原理课程设计教学大纲

    计算机组成原理课程设计教学大纲 实习名称:计算机组成原理课程设计 课程编码:042219 学 分:3 实习周数:3 适用专业:计算机科学与技术 一、实习的目的与任务 通过该课程设计......

    _计算机组成原理实验2(最终定稿)

    计算机组成原理实验日志 实验题目: 进位、移位控制实验 实验目的: 了解带进位控制的运算器的组成结构; 验证带进位控制的运算器的功能。 了解移位发生器74LS299的功能......