赞
踩
1、融合贯通本课程各章节的内容,综合运用所学,以CPU为核心,理解CPU的各个功能模块的工作原理。
2、学习和掌握硬件设计和调试基本方法,掌握FPGA开发的一般流程和工具,培养硬件系统观和系统设计能力。
参考MIPS指令系统,设计一台能实现20条MIPS指令的简易计算机,包括运算器,存储器,数据通路,控制器,以及显示模块。
alu算术逻辑单元要实现ADD(加)、SUB(减)、AND(寄存器与)、OR(寄存器或)、X0R(异或)、SLL(左移)、SRL(逻辑右移)、SRA(算术右移)、LUI(立即数左移)等计算功能,具体执行什么运算由4位aluc决定。
函数原型:module alu (a,b,aluc,r,z);
a: 源操作数1 32位
b: 源操作数2 32位
aluc: 操作控制码 4位
r: 目的操作数 32位
z: 零标志位 1位
ALU使用到的模块:
1) addsub32模块:32位加减运算模块利用并行进位加法器(cla32模块)
2) shift模块:实现移位
3) mux4x32:32位四选一选择器
功能描述:
1、给alu提供运算需要的数据。
2、将alu运算产生的数据保存在寄存器中。
原理设计:
用5位地址编码32个寄存器的地址。每个寄存器都是32位,每个寄存器都有写使能端信号。
函数原型:
module regfile (rna,rnb,d,wn,we,clk,clrn,qa,qb);
rna: 读寄存器地址1 5位
rnb: 读寄存器地址2 5位
d: 写数据 32位
wn: 写地址 5位
qa: 读出操作数1 32位
qb: 读出操作数2 32位
we: 使能端 1位
ckl: 时钟 1位
clrn:复位 1位
控制器作用:
通过读取指令的op和func来确定指令执行的操作类型,转换成各种指令信号。来控制各个部件运作。
控制器指令译码对应表:
控制器输出控制信号对照表:
下图为控制信号组合对应指令的真值表:
函数实现:module sccu_dataflow
(op,func,z,wmem,wreg,regrt,m2reg,aluc,shift,aluimm,pcsource,ja1,sext);
op: 指令高6位
func: 指令低6位
z: 零标志位
存储器分为两部分:
1.用来存储指令的储存器
scinstmem (a,inst);
(1)作用:把要执行的指令放在一个具体的文件中,可以保证指令自动寻址可 以找到。
(2)设计原理:在文件中设计n个寄存器,每个寄存器里面存放一条指令。系统在执行的时候会按照既定的寻址方式,寻找对应的寄存器,然后将其值取出作为指令运行;
2.用来储存数据的存储器
scdatamem (clk,dataout,datain,addr,we,inclk,outclk);
作用:储存放在储存器上的数据,通过地址可以找到对应的数据,也可以通过地址和数据的方式来把一个数据保存在储存器上。
1.打开工程文件
2.调试使用signaltap,工程中的stp1.stp也是可以直接使用的。双击打开stp1.stp,完全编译
3.编译完成后下载sof文件到开发板。之后按开始调试按钮;然后KEY[0]键即可抓取信号。
Scinstmem.v文件中的指令执行后采集到的信号如下图:
这次实验让我加深了对单周期CPU的理解,之前由于疫情的原因我们只能在网上进行理论知识的授课,从而到学校了才能补实验课,时间过长对于上学期所学知识有点遗忘了,借助这几天的实验再次重拾有关CPU设计的知识,包括ALU、数据通路、寄存器、存储器等等,也让我们回顾了之前数字逻辑课程上所学的关于门电路以及Verilog语言的知识,是一次很好的综合性实验和锻炼。
当然,在这之间我们也遇到了很多问题,比如由于命名错误或者步骤错误导致最后编译运行的时候出错,同样也告诉我们,在上实验课之前,应事先做好预习,明白这节课的实验任务,以及要用到上课老师所讲到的哪些理论知识,这样就能更加熟悉并快速地掌握每次实验。
当然,在这之间我们也遇到了很多问题,比如由于命名错误或者步骤错误导致最后编译运行的时候出错,同样也告诉我们,在上实验课之前,应事先做好预习,明白这节课的实验任务,以及要用到上课老师所讲到的哪些理论知识,这样就能更加熟悉并快速地掌握每次实验。
最后,感谢高老师对我们一学期的指导与付出,没有高老师的指导我们也不能这么顺利地完成本次实验,同时我们也会谨记高老师的教诲,把计算机组成原理的知识运用到我们之后的专业课之中,做到整个计算机知识体系的融会贯通。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。