You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

52 lines
1.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

from hardware.util import Register, Memory
#硬件资源
class Hardware:
def __init__(self):
#寄存器
self.pc = Register() #程序计数器
#通用寄存器
self.genRegCnt = 32 #通用寄存器数
self.genReg = [] #通用寄存器组
for i in range(self.genRegCnt):
self.genReg.append(Register())
#流水线寄存器
# 约定指令在第i个阶段可以读pplReg[i]中的寄存器、写pplReg[i+1]中的寄存器
self.pplRegCnt = 5 #流水线上每个阶段的寄存器数
self.stageCnt = 5 #流水线阶段数
self.pplReg = [] #流水线寄存器
for i in range(self.stageCnt):
stage = []
for j in range(self.pplRegCnt):
stage.append(Register())
self.pplReg.append(stage)
#存储器
self.instrMemSize = 1 << 32 #指令存储器字节数
self.dataMemSize = 1 << 32 #数据存储器字节数
self.instrMem = Memory(self.instrMemSize) #指令存储器
self.dataMem = Memory(self.dataMemSize) #数据存储器
#全局同步
#效果:
# 对所有寄存器和存储器进行同步
def globalSync(self):
#程序计数器同步
self.pc.sync()
#通用寄存器同步
for reg in self.genReg:
reg.sync()
#流水线寄存器同步
for stage in self.pplReg:
for reg in stage:
reg.sync()
#存储器同步
self.instrMem.sync()
self.dataMem.sync()