logo资料库

计算机组成原理简单单周期CPU的设计.doc

第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
资料共30页,剩余部分请下载后查看
1.课程设计目的
2.课设的任务
3.设计方案选择
4.指令系统设计
4.1指令格式设计
4.2指令编码
4.3验证程序段及其机器指令
lw $0,$0,0
lw $1,$0,0
sub $2,$2,$1
beq $2,$0,1
jump 2
add $3,$2,$1
addi $4,$3,2
ori $5,$4,3
or $6,$5,$3
and $7,$6,$5
sw $7,$0,3
lw $8,$0,3
lw $0,$0,0
lw $1,$0,0
sub $2,$2,$1
beq $2,$0,1
jump 2
add $3,$2,$1
addi $4,$3,2
ori $5,$4,3
or $6,$5,$3
and $7,$6,$5
sw $7,$0,3
lw $8,$0,3
5.设计通路的设计
6.控制器的设计:
关键功能部件设计
7.模型机的调试仿真
8.课程设计回顾总结
9.参考文献
本科生课程设计成绩评定表
班级: 学号: 姓名:
序号
评分项目
满分
实得分
1
态度认真,遵守纪律,无缺勤
10
2
设计方案可行性、正确性、创新性
20
3
采用多周期的处理器,实现指令丰富,包含常用的R型、I型及J型指令,且使用要求的测试程序,仿真结果正确
30
4
撰写报告内容完善,结构合理,图表规范
20
5
设计验收,问题回答正确,思路清晰
20
总分
评语:
说明:最终成绩以五级分制记。
优: 90---100分
良: 80---90分
中: 70---80分
及格:60---70分
不及格:60分以下
河北地质大学 信息工程学院 计算机组成原理课程设计报告 题 目 基于 MIPS 单周期处理器的设计及仿真 姓 名 学 号 班 号 指导老师 成 绩 左瑞欣 2018 年 1 月 12 日 1
2
目 录 1. 课程设计目的······························································································ 1 2. 课设的任务································································································· 1 3. 设计方案 ···································································································1 4.指令系统设计······························································································· 1 4.1 指令格式·································································································· 1 4.2 指令编码·································································································· 2 4.3 验证程序段及其机器指令·············································································3 5.数据通路的设计······························································································ 4 6.控制器的设计······························································································· 4 7. 模型机的调试仿真························································································ 19 8. 课程设计回顾总结 ····················································································· 25 9. 参考文献 ································································································· 26 3
1. 课程设计目的 用所学的计算机组成原理知识,通过课程设计,设计,实验,仿真,调试出一台能 执行几条指令的模型机,从而掌握计算机组成部件如寄存器,寄存器组,运算器,存储 器等的工作原理及设计方法,进而形成数据通路。通过控制器连接成整机,建立整机的 概念,深入理解指令在 CPU 中的执行过程,同时,提高设计能力和实践操作技能,为从 事计算机研制与设计打下基础。 2. 课设的任务 设计一个多周期的处理器,采用 32 位的 MIPS 指令格式,存储器按字节编址,大端 方式存放数据,数据要求按字边界对齐。 设计模型机的数据通路及控制器。在对模型机中的各功能部件进行仿真分析和功能 验证的基础上,实现模型机的整机系统,能够正确地执行存放在主存中的程序。 本课题内容要实现的功能是((const1-M[a]+const2)&const3)|const4->M[b] 3. 设计方案选择 本次实验设计单周期 CPU,基于 Quartus 开发平台,使用 VHDL 硬件描述语言,采用 模块化的设计思想,底层元件用 VHDL 进行描述,部件中设计了 32 个 32 位寄存器组,1 个 RAM,1 个 ROM,1 个 32 位的选择器,1 个 5 位的选择器,1 个位扩展器,1 个控制器, 指令地址寄存器,指令加法器以及运算器,在指令地址寄存器中取出指令地址,在 ROM 里取出指令并进行指令译码,通过层层部件,在控制器控制的情况下,完成取指,译码, 地址计算,访问存储器,数据写回。顶层模型机用原理图实现。设计步骤如下: (1)指令系统的设计 (2)根据指令的功能给出所需的功能部件,将功能部件连接构成数据通路。 (3)依据指令执行过程中数据的流动过程,画出指令流程图。 (4)依据指令的流程图,画出状态转换图。 (5)依据状态转换图,使用状态机实现控制器的设计。 (6)使用要求的测试程序,验证模型机的功能 4. 指令系统设计 4.1 指令格式设计 1
R 型指令由 6 位的操作数 op,5 位第一源操作数 rs,第二源操作数 rt,目的操 作数 rd,移位 shamt,功能 func 组成 I 型指令由 6 位的操作数 op,5 位第一源操作数 rs,立即数 imm16,目的操作数 rt, 图 4. 1 R 型指令 组成. J 型指令 R 型指令由 6 位的操作数 op,26 位跳转地址 target 组成. 图 4. 2 I 型指令 4.2 指令编码 图 4. 3 J 型指令 表 4. 1 指令编码 指令 操作码 OP 所属的 指令格 式 ADD SUB AND OR XOR LW SW ANDI ORI 000000 000000 000000 000000 000000 100010 101011 001101 001101 R R R R R I I I I Fun 0001 0010 0011 0100 0101 0001 0001 0011 0100 2 备注 R[rd]← R[rs]+R[rt] 无符号加法 R[rd] ←R[rs]-R[rt] 无符号减法 R[rd] ←R[rs]&R[rt] R 型逻辑与 R[rd] ←R[rs]|R[rt] R 型逻辑或 R[rd] ←R[rs]⊕R[rt] R 型逻辑异或 R[rt] ←M[R[rs]+Imm] 主存中内容写入寄存器 M[R[rs]+Imm] ←R[rt] 寄存器中内容回写到主存 R[rt] ←M[R[rs]&Imm] 立即数与 R[rt] ←M[R[rs]|Imm]
BEQ J 000100 000010 I J 0010 4.3 验证程序段及其机器指令 立即数或 CondR[rs]-R[rt] If(Cond eq 0) pcpc+4+符扩(imm16) pc 高 4 位拼接 imm26 再拼接 2 个 0 lw $0,$0,0 lw $1,$0,0 sub $2,$2,$1 beq $2,$0,1 jump 2 add $3,$2,$1 addi $4,$3,2 ori $5,$4,3 or $6,$5,$3 and $7,$6,$5 sw $7,$0,3 lw $8,$0,3 指令名称 LW LW SUB BEQ JUMP ADD ADDI ORI OR AND 表 4. 2 程序段及其机器指令 指令说明 lw $0,$0,0 lw $1,$0,0 sub $2,$2,$1 beq $2,$0,1 机器指令 10001000000000000000000000000000 1000100000000010000000000000001 00000000010000010001000000100010 00010000010000000000000000000001 jump 2 00001000000000000000000000000010 add $3,$2,$1 addi $4,$3,2 ori $5,$4,3 or $6,$5,$3 00000000010000010001100000100000 00110000011001000000000000000010 00110100100001010000000000000011 000000001010001100011000000100101 and $7,$6,$5 00000000110001010011100000100100 3
SW LW sw $7,$0,3 lw $8,$0,3 10101100000001110000000000000011 10001000000010000000000000000011 5. 设计通路的设计 单周期数据通路设计思想:为简化数据通路设计,假定所用的数据存储器和指令存 储器皆为一种理想存储器。理想存储器有一个 32 位数据输入端 datain,一个数据 32 位 数据输出端 dataout,还有一个读写公用地址输入端 address,控制信号有一个写使能 信号 wren,写操作受时钟信号 clk 的控制,下降沿到来时开始写入信息,该理想存储器 的读操作是组合逻辑操作,即在地址 address 有效后,经过一个“取数时间”,数据输 出端 dataout 上数据有效,写操作是时序逻辑操作,即在 wren 为 1 的情况下,当时钟 clk 边沿到来时,datain 开始写入存储单元。 图 5. 1 数据通路框图 指令地址寄存器给出的指令地址传给指令存储器,指令存储器中取出指令同时译 码,译成各个操作数,从 A 里取出第一源操作数送入运算器,第二源操作数由 Rt 或立 即数产生送入运算器,若是立即数,则要经过位扩展成 32 位再送入运算器运算,R 型运 算结果经过选择器存入 Rd 寄存器,sw 指令存入数据存储器里,其他 I 型运算结果经过 选择器存入 Rt 寄存器。 6. 控制器的设计: 表 6. 1 各个指令控制器信号取值 指令 操作码、功能码的取值 所需控制信号的值 4
add sub op="000000"; func="100000" op="000000"; func="100010" pcwr=“1”; regdst=“1”;extop=“0”; alusrc=“0”;memtoreg=“0”;regwr=“1”; jump=“0”;branch=“0”;yunsaun=“0001” pcwr=“1”; regdst=“1”;extop=“0”; alusrc=“0”;memtoreg=“0”;regwr=“1”; jump=“0”;branch=“0”;yunsaun=“0010” pcwr=“1”; regdst=“0”;extop=“1”; lw op="100010" alusrc=“1”;memtoreg=“1”;regwr=“1”; jump=“0”;branch=“0”;yunsaun=“0001” pcwr=“1”; regdst=“0”;extop=“1”; sw op="101011" alusrc=“1”;memtoreg=“1”;regwr=“0”; jump=“0”;branch=“0”;yunsaun=“0001” pcwr=“1”; regdst=“0”;extop=“0”; addi op="001100" alusrc=“1”;memtoreg=“0”;regwr=“1”; jump=“0”;branch=“0”;yunsaun=“0001” pcwr=“1”; regdst=“0”;extop=“0”; ori op="001101" alusrc=“1”;memtoreg=“0”;regwr=“1”; and or op="000000" func="100100" op="000000" func="100101" jump=“0”;branch=“0”;yunsaun=“0100” pcwr=“1”; regdst=“1”;extop=“0”; alusrc=“0”;memtoreg=“0”;regwr=“1”; jump=“0”;branch=“0”;yunsaun=“0011” pcwr=“1”; regdst=“1”;extop=“0”; alusrc=“0”;memtoreg=“0”;regwr=“1”; jump=“0”;branch=“0”;yunsaun=“0100” pcwr=“1”; regdst=“0”;extop=“1”; beq op="000100" alusrc=“0”;memtoreg=“0”;regwr=“1”; jump op="000010" jump=“0”;branch=“1”;yunsaun=“0010” pcwr=“1”; regdst=“1”;extop=“0”; alusrc=“0”;memtoreg=“0”;regwr=“0”; 5
分享到:
收藏