| | 成 绩 | : |
| ------ | --------------------- | --------------------- |
| 实验二 | 多周期 CPU 设计与实现 | 多周期 CPU 设计与实现 |
# 一、实验目的
1. 认识和掌握多周期数据通路图的构成、原理及其设计方法;
2. 掌握多周期 CPU 的实现方法,代码实现方法;
3. 编写一个编译器,将 MIPS 汇编程序编译为二进制机器码;
4. 掌握多周期 CPU 的测试方法;
5. 掌握多周期 CPU 的实现方法。
# 二、实验内容
设计一个多周期 CPU,该 CPU 至少能实现以下指令功能操作。需设计的指令与格式如下:
**==> 算术运算指令**
- add rd, rs, rt
| 000000 | rs(5 位) | rt(5 位) | rd(5 位) | reserved |
| ------ | -------- | -------- | -------- | -------- |
| | | | | |
功能:rd<-rs + rt。
- sub rd, rs, rt
| 000001 | rs(5 位) | rt(5 位) | rd(5 位) | reserved |
| ------ | -------- | -------- | -------- | -------- |
| | | | | |
完成功能:rd<-rs - rt。
- addiu rt, rs, immediate
功能:rt<-rs + (sign-extend)immediate。
**==> 逻辑运算指令**
- and rd , rs , rt
| 010000 | rs(5 位) | rt(5 位) | rd(5 位) | reserved |
| ------ | -------- | -------- | -------- | -------- |
| | | | | |
功能:rd←rs & rt;逻辑与运算。
- andi rt , rs ,immediate
| 010001 | rs(5 位) | rt(5 位) | immediate(16 位) |
| ------ | -------- | -------- | ---------------- |
| | | | |
功能:rt←rs & (zero-extend)immediate;immediate 做“0”扩展再参加“与”运算。
- ori rt , rs ,immediate
| 010010 | rs(5 位) | rt(5 位) | immediate(16 位) |
| ------ | -------- | -------- | ---------------- |
| | | | |
功能:rt←rs | (zero-extend)immediate;immediate 做“0”扩展再参加“或”运算。
- xori rt , rs , immediate
功能:rt←rs (zero-extend)immediate;immediate 做“0”扩展再参加“异或”运算。
**==> 移位指令**
- sll rd, rt,sa
| 011000 | 未用 | rt(5 位) | rd(5 位) | sa | reserved |
| ------ | ---- | -------- | -------- | -- | -------- |
| | | | | | |
功能:rd<-rt<<(zero-extend)sa,左移 sa 位 ,(zero-extend)sa。
**==> 比较指令**
- slti rt, rs,immediate 带符号
| 100110 | rs(5 位) | rt(5 位) | immediate(16 位) |
| ------ | -------- | -------- | ---------------- |
| | | | |
功能:if (rs <(sign-extend)immediate) rt =1 else rt=0, 具体请看表 2 ALU 运算功能表,带符号。
- slt rd, rs, rt 带符号
| 100111 | rs(5 位) | rt(5 位) | rd(5 位) | reserved |
| ------ | -------- | -------- | -------- | -------- |
| | | | | |
功能:if (rs<rt) rd =1 else rd=0, 具体请看表 2 ALU 运算功能表,带符号。
**==> 存储器读写指令**
- sw rt, immediate(rs)
功能:memory[rs+ (sign-extend)immediate]<-rt。即将 rt 寄存器的内容保存到 rs 寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中。
- lw rt, immediate(rs)
功能:rt <- memory[rs + (sign-extend)immediate]。即读取 rs 寄存器内容和立即数符号扩展后的数相加作为地址的内存单元中的数,然后保存到 rt 寄存器中。
**==> 分支指令**
- beq rs,rt, immediate (说明:immediate 从 pc+4 开始和转移到的指令之间间隔条数)
| 110100 | rs(5 位) | rt(5 位) | immediate(16 位) |
| ------ | -------- | -------- | ---------------- |
| | | | |
功能:if(rs=rt) pc <-pc + 4 + ((sign-extend)immediate <<2) else pc <-pc + 4。
- bne rs,rt, immediate (说明:immediate 从 pc+4 开始和转移到的指令之间间隔条数)
| 110101 | rs(5 位) | rt(5 位) | immediate(16 位) |
| ------ | -------- | -------- | ---------------- |
| | | | |
功能:if(rs!=rt) pc <-pc + 4 + ((sign-extend)immediate <<2) else pc <-pc + 4。
- bltz rs,immediate
| 110110 | rs(5 位) | 00000 | immediate |
| ------ | -------- | ----- | --------- |
| | | | |
功能:if(rs<$0) pc←pc + 4 +( (sign-extend)immediate <<2) else pc ←pc + 4。
**==> 跳转指令**
- j addr
| 111000 | addr[27:2] |
| ------ | ---------- |
| | |
功能:pc <-{(pc+4)[31:28],addr[27:2],2'b00},跳转。
说明:由于 MIPS32 的指令代码长度占 4 个字节,所以指令地址二进制数最低 2 位均为 0,将指令地址放进指令代码中时,可省掉!这样,除了最高 6 位操作码外,还有 26 位可用于存放地址,事实上,可存放 28 位地址,剩下最高 4 位由 pc+4 最高 4 位拼接上。
- jr rs
| 111001 | rs(5 位) | 未用 | 未用 | reserved |
| ------ | -------- | ---- | ---- | -------- |
| | | | | |
功能:pc <- rs,跳转。
**==> 调用子程序指令**
- jal addr
| 111010 | addr[27:2] |
| ------ | ---------- |
| | |
功能:调用子程序,pc <- {(pc+4)[31:28],addr[27:2],2'b00};$31<-pc+4,返回地址设置;子程序返回,需用指令 jr $31。跳转地址的形成同 j addr 指令。
**==> 停机指令**
- halt (停机指令)
| 111111 | 00000000000000000000000000(26 位) |
| ------ | --------------------------------- |
| | |
不改变 pc 的值,pc 保持不变。
# 三、实验原理
多周期 CPU 指的是将整个 CPU 的执行过程分成几个阶段,每个阶段用一个时钟去完成,然后开始下一条指令的执行,而每种指令执行时所用的时钟数不尽相同,这就是所谓的多周期 CPU。CPU 在处理指令时,一般需要经过以下几个阶段:
1. 取指令(IF):根据程序计数器 pc 中的指令地址,从存储器中取出一条指令,同时,
pc 根据指令字长度自动递增产生下一条指令所需要的指令地址,但遇到“地址转移”指令时,则控制器把“转移地址”送入 pc,当然得到的“地址”需要做些变换才送入 pc。
2. 指令译码(ID):对取指令操作中得到的指令进行分析并译码,确定这条指令需要完
成的操作,从而产生相应的操作控制信号,用于驱动执行状态中的各种操作。
3. 指令执行(EXE):根据指令译码得到的操作控制信号,具体地执行指令动作,然后转移到结果写回状态。
4. 存储器访问(MEM):所有需要访问存储器的操作都将在这个步骤中执行,该步骤给 出存储器的数据地址,把数据写入到存储器中数据地址所指定的存储单元或者从存储器中得到数据地址单元中的数据。
5. 结果写回(WB):指令执行的结果或者访问存储器中得到的数据写回相应的目的寄存
器中。
实验中就按照这五个阶段进行设计,这样一条指令的执行最长需要五个(小)时钟周期才能完成,但具体情况怎样?要根据该条指令的情况而定,有些指令不需要五个时钟周期的, 这就是多周期的 CPU。
![](https://www.writebug.com/myres/static/uploads/2021/11/10/b912916c26416feca5d4664ce4ba2143.writebug)
图 1 多周期 CPU 指令处理过程
MIPS 指令的三种格式:
![](https://www.writebug.com/myres/static/uploads/2021/11/10/13ead570f8501a7f0b97b119db7c1fa4.writebug)
其中,
op:为操作码;
rs:为第 1 个源操作数寄存器,寄存器地址(编号)是 00000~11111,00~1F;
rt:为第 2 个源操作数寄存器,或目的操作数寄存器,寄存器地址(同上);
rd:为目的操作数寄存器,寄存器地址(同上);
sa:为位移量(shift amt
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
算机组成原理实验 (2018 秋):用 Verilog 设计并实现的简易单周期和多周期 CPU。 MultiCycleCPU:多周期 CPU 设计与实现。 SingleCycleCPU:单周期 CPU 设计与实现。 hex_to_7seg:子模块,作用是将十六进制数转换为可供七段数码管显示的编码。
资源推荐
资源详情
资源评论
收起资源包目录
100013154-Verilog实现简易单周期和多周期 CPU .zip (86个子文件)
computer-organization-lab
MultiCycleCPU
多周期CPU设计_报告文档.pdf 3.06MB
MultiCycleCPU.srcs
sim_1
new
CPU_sim_1.v 1KB
constrs_1
new
multi_cpu.xdc 2KB
sources_1
new
Basys3_CPU.v 2KB
DataMemory.v 1KB
Mux2_32bits.v 647B
clk_div.v 786B
Mux4_5bits.v 779B
top_CPU.v 4KB
IR.v 705B
DFF_32bits.v 720B
ALU.v 1KB
InstructionMemory.v 996B
Four_LED.v 1KB
PC.v 877B
Counter4.v 669B
Mux4_32bits.v 909B
Hex_To_7Seg.v 2KB
ControlUnit.v 10KB
Mux4_4bits.v 779B
Mux4_16bits.v 909B
ImmediateExtend.v 990B
RegisterFile.v 1KB
test_instructions.txt 864B
SingleCycleCPU
单周期CPU设计_报告文档.pdf 2.21MB
test_instructions.txt 756B
SingleCycleCPU.srcs
sim_1
new
CPU_sim_1.v 1KB
constrs_1
new
Basys3_CPU_1.xdc 2KB
sources_1
new
Basys3_CPU.v 2KB
DataMemory.v 1KB
Mux2_32bits.v 647B
clk_div.v 786B
top_CPU.v 3KB
ALU.v 1KB
InstructionMemory.v 1KB
Button_Debounce.v 1KB
Four_LED.v 1KB
PC.v 877B
Counter4.v 669B
Mux4_32bits.v 909B
Hex_To_7Seg.v 2KB
ControlUnit.v 5KB
Mux4_4bits.v 779B
Mux2_5bits.v 642B
Mux4_16bits.v 909B
ImmediateExtend.v 993B
RegisterFile.v 1KB
LICENSE 1KB
多周期CPU设计_报告文档.docx-md
5-706016a3bc2b34c12c59715d1015e62d.png 371B
3-886dff1939f6a4439b8b228b4c29d663.png 459B
20-a9898253ad80d4d20836c29184478e87.png 128KB
17-9c33bf0081792b6cc1af5f825ee8e78a.png 164KB
4-c12e34d3bbaa259f6e0481fa4450d7cf.png 431B
6-216ab62ab575f5a80110dcdc275a3898.png 12KB
8-8f90ce4cc0bf8efbd33fddba59e15809.png 17KB
14-40783abf2fbcb3c8c08c95a7b9ef1088.png 171KB
27-fff07f91a1eed370428775ca4f6e3795.png 25KB
19-99265d45f306c70feebad806faf86c14.png 125KB
24-ce759a30445b25eece87fa6cbc10d2df.png 90KB
25-6380d90105ef8e73875f05d598d93ec5.png 24KB
2-5d467c5f6e6baa7ed524dd1b5b114e26.png 427B
9-f2ecca0afc9a513a4109f5ea81cd9359.png 80KB
1-667f7b5898272577452afcf8dd19ca2a.png 429B
28-13de0e50deee204b79c5cb0dfc6cd154.png 25KB
13-6d2546079c52a39f650fc3904e2d6b36.png 167KB
7-89dc4b1c7cce6e42ab9a460d2308885d.png 62KB
18-ecb63e6be489f40cc2944e7e18f8f653.png 169KB
12-24c7bc62ca8556c1403b0a1c3c4fcf5d.png 161KB
15-a9f0caa420a766ed70bec50c0088e13a.png 169KB
26-56b57b382be61072eb0bfbdba1f3dbd7.png 24KB
10-9c19e75dc934500b03f4932bf4ffd8e2.png 58KB
22-1b29250a5f3844647bd049a0c8c54f10.png 168KB
11-512225a7f44bf8b93cde282deb7a4373.png 4KB
23-e6533e49edce586f2c9f9fab6690254f.png 48KB
16-5a19621f896ea2e5989aa951f44f0234.png 179KB
21-358508e4e966b477743c032bc441a68c.png 174KB
多周期CPU设计_报告文档.pdf 3.06MB
READMEBEFORE.md 656B
README.md 71KB
hex_to_7seg
hex_to_7seg.srcs
sim_1
new
sim1.v 822B
constrs_1
new
top_LEDs.xdc 3KB
sources_1
new
clk_div.v 786B
top_LEDs.v 1KB
Mux4_8bits.v 779B
Counter4.v 777B
Hex_To_7Seg.v 2KB
共 86 条
- 1
资源评论
神仙别闹
- 粉丝: 2687
- 资源: 7649
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功