1. 简介
21264处理器是一款4-way,乱序执行的超标量处理器,采用0.35um的CMOS工艺,工作电压是2.2V, 工作频率是466-667MHz; 处理器能支持60条指令,也即ROB的深度是60; Load/Store指令也采取乱序执行, 总共7级流水。I-CACHE和D-CACHE都是采用2路组相连,64KB
2级取指,1级rename, 1级issue, 1级read register file, 1级执行,1级写回,共7级流水。
2. 取指
第一级访问I-CACHE: 根据PC值读I-CACHE, 得到一组cache set(也即两个cache line), data+tag
第二级根据PC中的tag判断是否hit, 然后选出正确的data(instruction)送到译码器和rename模块。
同时将PC值送到分支预测器中,预测下一拍的PC值。这里的预测分为line/way预测和分支预测,line/way预测指的是根据PC值,预测出我们需要的inst位于cacheline中哪个way(图中的successor way), 以及对应的PC值(图中的index)。这里的预测地址(BTB)直接放到了I-CACHE中
缺点是每条cacheline都包括line/way的预测信息,但是很多cache line中其实没有分支指令,从而造成了浪费。并且当一条cacheline被替换时,对应的line/way预测信息就被清除了,但独立的BTB和cacheline 就没有关系。
分支预测采用局部分支预测和全局分支预测竞争的的方式预测方向
3. 寄存器重命名
使用统一的PRF进行寄存器重命名,其中mapq的深度和ROB的深度是一致的,表示流水线最多可以执行多少条指令。下图中的save map stage是checkpoint,用来做恢复用的,也是80个entry。我理解map contert-addressable memories 是用来处理uop个数超过限制的,4条指令,每条指令最多两个source, 所以最多8个source, 有些指令在这个周期处理不了,需要留到下个周期。register scoreboard 是确定src 和dst atag,然后发送请求给arbiter, 请求分配若干个ptag, 并将atag和ptag的对应关系记录下来。
4. 发射
包括两个发射队列,整数和浮点发射队列,整数发射队列有20个entry, 被4个执行单元共享;浮点有15个entry, 被2个执行单元共享
5. 执行单元
6. 提交
一条指令执行完之后并不会马上离开流水线,而是会等到它之前的所有指令都执行完成之后,才会离开ROB,此时它的结果才可以更新处理器的状态, 并对外界可见
如果一条指令在即将离开流水先后发生了异常,那么需要刷掉流水线中这条指令后的所有指令,rename, issueq, rob, pipeline中的都得刷掉。