Chisel典型代码分析01-分支预测块地址位提取

def instBytes = if (HasCExtension) 2 else 4

def instOffsetBits = log2Ceil(instBytes)

def carryPos = log2Ceil(PredictWidth)+instOffsetBits

def getLower(pc: UInt) = pc(carryPos-1, instOffsetBits) 怎么理解上面的代码?

instBytes是每条指令占用的字节数,如果是压缩,就占用2个字节。反之是4个字节。

instOffsetBits = log2Ceil(instBytes) 计算需要多少位来表示这些字节内的偏移。每加一条指令,需要的PC地址偏移。PC占用2个字节,那么最低1位就需要在地址运算加1时去掉。

carryPos是PC当中用来表示每个分支预测块占用的地址段的最高位。

getLower(pc: UInt):给出一个pc,取出其中用来表示每个分支预测块的地址变化范围的部分。

例如:假设给定pc值为 "1010110000"。

  • HasCExtension 为真,所以 instBytes = 2
  • PredictWidth 为16,所以 log2Ceil(16) = 4

则carryPos= log2Ceil(16)+1=5。

getLower(pc: UInt)=pc(5-1:1)= 1000。

也就是说,对于pc值为 "1010110000",其中1000部分是和分支预测地址相关的。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值