构建单周期CPU记录Ⅰ

本文最后更新于 2024年9月12日 下午

构建单周期CPU记录Ⅰ(初步,包括lw和sw)

核心部件

PC(Program Counter,程序计数器)

image-20240911170903742

IM(Instuction Memory,指令存储器)

image-20240911200511537

GRF(Register File,寄存器文件)

image-20240911200549683

DM(Data Memory,数据存储器)

image-20240911200524349

附加部件

ALU

image-20240911200643385

SPLT(splitter,分离器)

image-20240911200703680

EXT(extender,扩位器)

image-20240911200729925

NXTAD(Next Address,下一个地址的计算器)

image-20240911200825778

信号控制分析

信号表

指令 RegWrite ALUControl[2:0] MemWrite
lw 1 010 0
sw 0 010 1

信号说明

RegWrite

  • 连接WE3端口

  • 1:将数据写入寄存器

  • 0:没有写入寄存器文件的数据

ALUControl

  • 010:ALU实现加法

MemWrite

  • 1:向存储器写入数据
  • 0:没有向存储器写入数据

CU

据此,我们可以搭建一个初步的信号控制

lw:100011(31:26) + rs(25:21) + rt(20:16) + offset(15:0)

sw:101011 (31:26) + rs(25:21) + rt(20:16) + offset(15:0)

image-20240911203252095

整体

image-20240911203327623

使用Python批量构造代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
s ="""
<comp lib=\"4\" loc=\"(Y_,Z_)\" name=\"Register\">
<a name=\"width\" val=\"32\"/>
</comp>
<comp lib=\"0\" loc=\"(T_,Z_)\" name=\"Tunnel\">
<a name=\"facing\" val=\"east\"/>
<a name=\"width\" val=\"32\"/>
<a name=\"label\" val=\"iX_\"/>
</comp>
<comp lib=\"0\" loc=\"(Y_,Z_)\" name=\"Tunnel\">
<a name=\"width\" val=\"32\"/>
<a name=\"label\" val=\"oX_\"/>
</comp>
"""

Y, Z = 90, 30
for X in range(0, 32):
Y += 80
T = Y-30
print(s.replace("Y_",str(Y)).replace("T_", str(T)).replace("X_",str(X)).replace("Z_",str(Z)))



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
s = """<comp lib=\"0\" loc=\"(80,H_)\" name=\"Tunnel\">
<a name=\"facing\" val=\"east\"/>
<a name=\"width\" val=\"32\"/>
<a name=\"label\" val=\"iX_\"/>
</comp>
<comp lib=\"0\" loc=\"(130,H_)\" name=\"Tunnel\">
<a name=\"width\" val=\"32\"/>
<a name=\"label\" val=\"oX_\"/>
</comp>
"""
H = 10
for x in range(32):
H += 20
print(s.replace("H_",str(H)).replace("X_",str(x)))


构建单周期CPU记录Ⅰ
https://meteor041.git.io/2024/09/11/构建单周期CPU-初步-包括lw和sw/
作者
meteor041
发布于
2024年9月11日
许可协议