MIPS CPU中程序计数器(PC)地址读取机制及相关疑问
关于MIPS CPU程序计数器(PC)地址读取的疑问与解答
用户当前理解与疑问
当前理解:当程序计数器(PC)中存储有地址时,控制单元(CU)会在每个时钟周期通过地址总线发送地址信号,以此访问主存并获取对应指令,进而读取PC中的内容。
疑问列表
- 疑问1:发送的地址信号是否与PC中存储的地址完全一致?
- 疑问2:控制单元(CU)是如何确定要传输的地址以访问内存的?此外,实际中PC的内容具体是如何被读取的?会用到哪些逻辑电路?
解答
疑问1解答:地址信号与PC存储地址的一致性
在标准MIPS单周期或多周期处理器中,绝大多数顺序执行场景下,地址总线发送的地址就是PC当前存储的地址——PC的核心作用就是记录下一条待执行指令的主存位置。
但存在两种例外情况:
- 分支/跳转指令执行时:遇到
beq、bne(分支)或j、jal(跳转)指令时,控制单元会根据指令携带的立即数或目标地址计算出新的PC值,此时地址总线传输的是计算后的目标地址,而非原PC值。 - 异常/中断触发时:当处理器触发非法指令、地址错误等异常,或响应外部中断时,PC会被强制设置为架构规定的异常/中断处理程序入口地址,此时地址总线发送的是该固定入口地址,而非原PC值。
疑问2解答:地址确定逻辑与PC读取实现
控制单元(CU)的地址选择逻辑
CU对内存访问地址的选择,完全基于当前处理器的执行阶段和指令类型,核心是通过控制信号选择地址总线的输入来源:
- 正常顺序执行:直接选择PC寄存器的当前值,用于从主存读取下一条指令。
- 分支/跳转场景:CU先解析指令的操作码(opcode)和功能码(funct),判断指令类型后,通过ALU计算分支偏移量或拼接跳转目标地址,将计算结果作为新的PC值输出到地址总线。
- 异常/中断场景:CU触发硬件信号,直接将PC设置为MIPS架构规定的异常向量表固定地址(如0x80000080),无需额外计算。
PC内容的读取逻辑与相关电路
PC本质是一个带同步加载功能的寄存器,其读取和更新由时钟信号同步控制:
- 读取过程:PC的输出端直接连接到地址总线的输入多路选择器(MUX),当CU通过控制信号选中PC作为地址来源时,MUX会将PC的当前值传输到地址总线——寄存器的输出是持续有效的,无需额外的"主动读取"操作,只需通路被选中即可。
- 核心逻辑电路:
- PC寄存器:由D触发器构成,存储当前指令地址,时钟上升沿触发更新。
- 多路选择器(MUX):负责切换地址总线的输入来源(PC值、分支计算值、异常入口地址等),由CU的控制信号控制选择端。
- ALU:分支/跳转时计算新PC值(例如
PC + 4 + 偏移量)。 - 组合逻辑门:生成控制信号,控制MUX选择、PC更新时机等。
内容的提问来源于stack exchange,提问作者Lorenzo Cuttitta
相关产品推荐
相关产品推荐

