本学期的数电课程实验就是模型机设计,由四次小实验构成,最后一次实验验收要求使用quartus做出一个模型机。
该实验的重要性:该实验的核心在于基于实验指导书设计CPU,从而帮我们理解CPU的工作原理。而CPU作为计算机的核心部件,可以帮助我们引入一个全新的视角来理解操作系统和计算机系统(为之后的课程打基础)。所以建议大家在做这个实验之前,先花时间弄清楚,CPU究竟是怎么工作的。
以下为实验报告,内容较为详细,仅供参考,如有错误敬请斧正!
目录
5.1 从需要掌握的理论、遇到的困难、解决的办法以及经验教训等方面进行总结。
一、设计目的
本课程力图以“培养学生现代数字系统设计能力”为目标,贯彻以 CPU 设计为核心,以层次化、模块化设计方法为抓手的组织思路,培养学生设计与实现数字系统的能力。 本设计要求在进行了多个单元实验后,综合利用所学的理论知识, 结合在单元实验中所积累的成果(包括已经设计好的功能部件和调试方法),设计出一个简易计算机系统。
二、设计内容
⚫ 按给定的数据格式和指令系统,使用 EDA 工具设计一台用硬连线逻辑控制的简易计算机系统;
⚫ 要求灵活运用各方面知识,使得所设计的计算机系统具有较佳的性能;
⚫ 对所做设计的性能指标进行分析,整理出设计报告。
三、 详细设计
3.1 设计的整体架构
①模型机工作的基本形式
同步电路,采用串行工作方式,即“读取—执行—再读取—再执行……”。
②模型机的数据格式
数据字采用 8 位二进制定点补码表示,其中最高位(第 7 位)为符号位,小数点可视为最左或最右,其数值表示范围分别为:-1≤X<+1 或-128≤X<+127。
③模型机的指令系统(基于数据格式)
注:我们老师更改过跳转指令的操作码,如下图红色标注)
④模型机的寻址方式
指令的高 4 位为操作码,低 4 位分别用 2 位表示目的寄存器和源寄存器的编号, 或表 示寻址方式。共有 2 种寻址方式。
(1)寄存器直接寻址
当 R1 和 R2 均不是“11”时,R1 和 R2 分别表示两个操作数所在寄存器的地址(寄存器 编号),其中 R1 为目标寄存器地址,R2 为源寄存器地址。
(2)寄存器间接寻址
当 R1 或 R2 中有一个为“11”时,表示相应操作数的地址在 C 寄存器中。
⑤模型机的数据通路及说明
计算机的工作过程可以看作是受控下的数据流动,数据流所经过的路径称作机器的数据通路。数据通路不同,指令执行所经过的操作过程就不同,机器的结构也就不一样。
1. 取指令的过程
指令计数器中的内容(即下一条要执行的指令的地址),经选择器送至 RAM 的 地址输入端(开始执行,先把要执行的指令地址传过去);在 DL 和地址输入的共同作 用下,指令在时钟的上升沿从 RAM 中被读出送至总线 BUS 上,在 LD IR 信号的控 制下,BUS 上的指令在时钟的下降沿载入到指令寄存器 IR 中;然后指令计数器加 1 (这一条执行完,计数器加 1,为下一次可以直接用做准备)。
2. 执行指令--传送类指令
(a)寄存器之间的传送 MOVA R1,R2
要求完成的操作为(R2)→R1,执行过程为: 由 R2 的编码通过 RAA1、RAA0 从通用寄存器组 A 口读出 R2 的内容,在 S3~S0 和 M 的控制下,经 ALU 送入总线 BUS;由/WE 控制和 R1 的编码选择 RWBA1、RWBA0,将 BUS 上的数据写入通用寄存器 R1。
(b)寄存器到内存的传送 MOVB M,R2
要求完成的操作为(R2)→(C),执行过程为: 由 M 的编码 11 通过 RWBA1、RWBA0 从通用寄存器 B 口读出 C 寄存器中的地址,在 MADD=2 的控制下,地址通过选择器到达存储器 RAM 的地址输入端;由 R2 的编码通过 RAA1、RAA0 从通用寄存器组 A 口读出 R2 的内容,在 S3~S0 和 M 的控制下,经 ALU 送 入总线 BUS,并在/CS 和 XL 控制下将 BUS 上的数据写入存储器 RAM。
(c)内存到寄存器的传送 MOVC R1,M
要求完成的操作为((C))→R1,执行过程为: 由 M 的编码 11 通过 RAA1、RAA0 从通用寄存器 A 口读出 C 寄存器中的地址,在 MADD=1 的控制下,地址通过选择器到达存储器 RAM 的地址输入端,/CS 和 DL 使数据出 现在 BUS 上;由/WE 控制和 R1 的编码选择 RWBA1、RWBA0,将 BUS 上的数据写入通用寄存器 R1。
3. 执行指令--算术逻辑运算指令
将编码01(由RAA1、RAA0提供)对应的寄存器B中的数据并从通用寄存器组S口读出;
同时将编码00(由RWBA1、RWBA0提供)对应的寄存器A中的数据并从通用寄存器组D口读出;
在S3-S0和M的控制下,2个操作数在ALU中运算后经移位逻辑送入总线BUS;
由/WE(0)控制将BUS上的数据在时钟下降沿写入编码00(由RWBA1、RWBA0提供)对应的寄存器A中。
ADD、SUB指令影响状态位Cf和Zf。
4. 执行指令—转移类指令
(a)JMP,取好指令后,开始一个新的时钟周期,假设上一个取址位置为RAM中的00000000,在取好指令的同时,在pc_inc为1和时钟下降沿的共同作用下,PC现在存放的地址为00000001。执行指令期间,madd[1..0]保持不变,还是00,于是这个00000001通过选择器到达RAM的地址输入端,然后DL为1,在时钟上升沿到来的时候将该地址对应的内容传送到总线上,然后此时pc_ld为1, 在时钟下降沿到来瞬间,将总线上的数据写入到PC中。
(b)JC,取好指令后,开始一个新的时钟周期,假设上一个取址位置为RAM中的00000000,在取好指令的同时,在pc_inc和时钟下降沿的共同作用下,现在存放的地址为00000001。和JMP比起来,多了一个C为1的条件。若C=0,pc_inc为1,在时钟下降沿PC存储的地址变为00000010。也就是说跳过了00000001地址所存储的指令。
(c)JZ,与JC的区别就在于,判断条件为Z是否为1.