广州大学数字逻辑与计算机组成(实验三)

广州大学学生实验报告

开课学院及实验室:计算机科学与工程实验室                       2023年12月15日

学院

计算机科学与网络工程学院

年级/专业/

 计科221

姓名

学号

实验课程名称

数字逻辑与计算机组成实验

成绩

实验项目名称

实验4 CPU指令设计实验

指导老师

一、实验目的

1、理解指令类型与指令格式之间的关系,掌握取指部件、指令解析和立即数扩展器的设计方法。

2、理解随机访问存储器 RAM 和只读存储器 ROM 的操作原理。

3、理解每条目标指令的功能和数据通路,掌握单周期处理器的控制器设计方法。(选做)

二、实验要求

1、电路图合理布局,适当添加标识符和注释文字,便于理解;

2、利用仿真测试,验证电路功能正确;

3、根据本次实验内容的要求,给出实验操作步骤,包括必要的电路原理图、实验结果、功能测试、错误现象及原因分析等内容写入实验报告。

4、 将实验报告和电路图.circ文件上交,文件名为学号,如200640001.docx、200640001.circ,所有题目的电路合在一个文件中。

三、参考资料

《实验教程》:实验5 取指令部件设计,实验6 单周期CPU设计与测试。

三、实验内容

1、实验测试指令数据的准备

从指令存储器的地址第12单元开始,依次写入以下5条机器指令:

自行编写数据镜像文件,然后导入存储器。

数据镜像文件格式要求:首行以v2.0 raw开头,下一行开始存放数据,数据位宽为32位时,每一个位置存放4个字节的数据,以空格或回车隔开。连续相同的重复数字可简化表示,如12*0,表示连续12个0。

代码镜像文件示例:

v2.0 raw

12*0 000012b7 fff28293 05be1863 288000ef 00112623

已知RISC-V指令格式如图所示:

如图,选择第12号单元(00C),写入表格中的数据。

接着,把这些数据保存,存为镜像文件,打开后的效果如下图。

   现测试一下,文件是否已经写入存储器中,测试效果如下。

2、设计立即数扩展器,对指令中的立即数字段进行扩展生成32位立即数。参考电路如图所示:

设计的电路如下图。利用分线器,实现将立即数字段扩展生成32位立即数imm输出。其中ExtOp选择哪种类型的立即数输出

3、设计指令解析电路,将指令分解出opcode、rd、funct3、rs1、rs2和funct7 字段。参考电路如图所示:

指令解析部分电路如下图,通过将存储器中第12单元开始的、刚才写入的指令输出到该部分电路中。然后通过分线器,将指令拆解,分为OpCode操作码、Rd等等。此外,还将封装的扩展器电路用于获取扩展后的立即数。

4、设计取指令部件,包括指令从存储器中的读取,PC的更新。其中,指令存储器可采用Logisim中的ROM组件实现,要求指令存储器容量为 16KB(地址位宽12位,即A[11:0],数据位宽32位,按字编址),指令字长为32位。

在程序设计中指令和数据寻址,都是以字节为单位,因而在Logisim中读取指令存储器时,最低2位地址舍弃;由于ROM地址编码定义为12位地址位宽,因而32位指令地址PC[31:0]中高18位地址也舍弃。只需把PC[13:2]赋值到A[11:0],其余的位皆无关。原理如图所示:

参考电路如图所示:

该部分电路如下图。

通过将寄存器中的PC连接到RAM存储器中,选择相应的地质单元,即可取出相应的指令了。

特别注意:由于低2位被刨除,所以,当要访问存储器中的第12号单元(即00c),则要重新考虑,当刨除第两位后,还要满足0000 0000 0000 1100,也就是把上面的式子左移两位,得0000 0000 0011 0000,所以第12位对应的PC0030H,往后的地址也是这么推,分别是00340038003c0040

5、设计输入输出信号的观测窗口。为了便于检测输入输出数据是否正确,在主要电路图的上方设计观测窗口,采用隧道方式将信号引出,便于集中观察。参考电路如图所示:

电路图设计如下。

6、测试。在指令存储器上加载代码镜像文件,读取到指令存储器12处的指令时,观察输出结果,是否符合以下标准:

第1条 ExtOp设置为001:Opcode=0110111、rs2=00000、funct3=001、rd=00101、rs1=00000、 funct7=000000、Imm=0x00001000。

第2条 ExtOp设置为000: Opcode=0010011、rs2=11111、funct3=000、rd=00101、rs1=00101、funct7=1111111、Imm=0xffffffff。

第3条 ExtOp设置为011: Opcode=1100011、rs2=11101、funct3=001、rd=10000、rs1=11100、funct7=000010、Imm=0x00000050。

第4条 ExtOp设置为100:Opcode=110111、rs2=01000、funct3=000、rd=00001、rs1=00000、funct7=0010100、Imm=0x00000288。

第5条 ExtOp设置为010: Opcode=0100011、rs2=00001、funct3=010、rd=01100、rs1=00010、funct7=0000000、Imm=0x0000000c。

1选择第一条指令输出,并且将ExtOp设置为001,具体的输出如下图所示。

2选择第二条指令输出,并且将ExtOp设置为000,具体的输出如下图所示。

3选择第三条指令输出,并且将ExtOp设置为011,具体的输出如下图所示。

4选择第四条指令输出,并且将ExtOp设置为100,具体的输出如下图所示。

5选择第五条指令输出,并且将ExtOp设置为010,具体的输出如下图所示。

7、设计指令控制器。根据RISC-V指令与控制信号之间的关系表,参照给出的单周期控制器设计原理图,设计实现该单周期处理器的控制电路, 并验证电路的正确性。

指令控制器原理图

(注:此图中缺ALUASrc、ALUBSrc、ExtOp三个控制信号的生成电路,需补上)

根据课本P236,表8.59条指令的控制信号取值的表,逻辑非常简单,效果如下图。

8、单周期CPU完整设计

利用前面实验已经完成的取指令部件、寄存器堆部件、指令译码部件、立即数扩展部件、指令控制部件,连接数据通路,实现单周期CPU的电路图。

实验电路图如下。

包括PC(寄存器)、指令存储器(ROM)、扩展器、数据存储器(RAM),以及之前实验中完成的ALU和寄存器堆。

左上角为PC,它是一个寄存器,存储当前的PC值,输出端连接一个加法器,为了使PC+4抑或是PC+imm。当然,+4还是+imm是由PC 下方的多路选择器控制,jump0,则PC正常地一条一条指令执行,即PC+4.jump=1,则PC+imm,无条件跳转。

中上方为指令存储器,将来会在RISCV中编写好程序然后转换为 二进制指令,存入。它的输出端连接一个分线器,这是指令解析器,其设计参考了课本P199中的表,RISC-V指令格式。

利用解析出来的值,输入控制器中。

最后,控制器输出端口的各种值 MEmWrALUCtr等,控制了访问主存、访问寄存器、生成跳转指令等功能。

各隧道如下。

9、运行测试程序来验证处理器设计的正确性

利用9条指令编写一个汇编源程序(如累加求和、排序等),在RARS模拟器中编译调试正确后转换为机器代码,写入指令存储器,启动程序执行,观察运行结果是否正确。

RARS中编写累加求和的程序。

  

至于为什么要把累加和存放到主存第四单元,原因是指令中的主存地址被剔除了低两位,所以当指令要访问主存的1号单元,实际上是访问4号单元。

   详细说就是,指令被刨除后,值仍为1,即0001,那么刨除之前一定是0001xx,这个1就是4了。

接着,把该程序转为机器代码。

编入程序存储器(ROM)中

在主存0号单元写入累加上限n=5.运行(预期结果为15)。

运行结束,一号单元为0000000f15,正确。

测试累加到500x00000032)。预期结果为12754fb

结果为

四、实验步骤及结果

已放入每道题后面

五、分析与思考

1本实验是一个综合性强的实验,首先要求对前面的ALU运算功能熟悉,且要对寄存器堆的工作原理了解,而且还要先在实验三中的汇编语言编写中打下基础。

2实验中要 注意,连接 隧道时,要分清是输入还是输出,如果输入输出乱用,会发生数据冲突,即出现标红的线。

      

3 数据通路中寄存器、ALU或者其他功能单元的连接可能存在问题,导致数据传输或运算错误。总而言之,如果其中一个部件出现小问题,都有可能导致整个线路信号出现错误。所以,前期的连线应该逐步测试

4由于电路比较复杂,所以很可能一不小心把两个端口连到了一块,从而导致错误。即因为在电路中创建了短路,即两个信号线被直接连接在一起。这可能导致电路异常行为,因为信号可能被直接短路到地或电源。比如下图的寄存器。

发生端口不匹配的原因不是别的,而是因为第三和第四个端口连接到了一块。

这种错误不易察觉,所以当出现了端口不匹配的时候,可以往这方面考虑一下。

5接着还有一个问题,就是寄存器的值是会累加的,所以在测试累加和实验时,在测试完一个后,应该重启logism。避免值的累加,导致结果错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值