CPU指令分析-1

本文详细介绍了CPU指令执行的IF(IFetch)和ID(Instruction Decode)阶段。在IF阶段,讨论了流水线寄存器if_reg的刷新和PC控制,以及取指状态控制,包括从ROM读取指令。ID阶段涉及指令解码器,用于生成解码后的信号。整个过程涉及到总线访问、状态控制和指令处理的复杂交互。
摘要由CSDN通过智能技术生成

1 Instruction Fetch(IF)阶段

IF阶段的操作有取指令,并决定下一条PC寄存器的内容。IF阶段由流水线寄存器与总线接口组成。

1.1 IF阶段的流水线寄存器(if_reg)

首先PC、指令寄存器以及流水线数据有效标志都设置为初始值以及对应的无效值:

if_pc = 0;  
if_insn = NOP[32'd0];  
if_en = DISABLE;  

流水线寄存器的刷新要在延迟信号stall无效的时候才能刷新,刷新有以下三个动作* flush有效,对流水线寄存器进行刷新操作 本操作包括设置新的PC地址,指令寄存器设置为NOP,流水线数据有效标志置为无效 * 分支处理 分支信号有效的时候,PC设置为分支地址,指令寄存器设置为读取的指令,流水线数据有效标志设置为有效 * PC步进处理 在既没有延迟,也没有分支的情况下,PC地址+1,指令寄存器和流水线数据有效标记和分支处理中的保持一致
指令insn等于rd_data,rd_data来源于两个地方:要么是spm里面的数据,要么是总线上的bus_rd_data。if_pc回去控制address,来控制总线的地址。IF阶段的总线信号会连接到总线0上。

  • 程序计数器PC的控制
    ROM会根据程序计数器的值读出数据,然后读出的数据会传到指令寄存器if_insn上,这个指令寄存器以及pc会传到ID指令译码阶段进行后续的操作,同时,还会传送一个enable信号if_en。if_en会在flush有效的时候拉低,其他时间都置为有效。

1.2 取指阶段的状态控制

首先在BUS_IF_STATE_IDLE状态,在刷新信号flush无效,address选通信号as_n有效的时候进行判断(flush是mem_flush,上电之后是无效的,as_n一直有效的[常量]) :

Created with Raphaël 2.2.0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值