在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: processor

新书出版——《超标量处理器设计》

[复制链接]
发表于 2015-5-1 17:17:20 | 显示全部楼层
期待lz的ARMv7
发表于 2015-5-4 22:18:24 | 显示全部楼层
回复 26# leishangwen


   你是步步惊芯的作者吧,您的那本书开启了我的处理器研究之路
发表于 2015-5-4 22:29:20 | 显示全部楼层
回复 24# processor


   楼主我问一下,那个ISSUE QUEUE 流水级到底是怎样架构在流水线里的:你的这本书上说的是存在在一个流水段里面,但是分派段是直接分派到发射队列里面,还是先经过一个类似于前端的流水段间寄存器再在下一个周期存入到IQ中。总的来说,该书中的IQ的位置与我在网上看到的普林斯顿大学讲授的IQ的位置不同。
发表于 2015-5-5 21:07:46 | 显示全部楼层
回复 1# processor


   有意思,关注
 楼主| 发表于 2015-5-5 23:20:07 | 显示全部楼层
回复 33# Romer

issue queue就可以理解为是一个流水线寄存器,指令写到这个缓存后,可以按照乱序的方式发射出去,取得操作数,然后送到对应的执行单元中,指令写到issue queue的过程当然也是需要占用时间的,因为需要在issue queue中找出空闲的空间,这对于compacting方式的issue queue会简单一些,而对于non-compacting方式的issue queue则会复杂一些;不仅如此,如果采用了分立式的issue queue,那么每个周期从rename过来的指令,例如3条指令,并不一定都会写到某一个issue queue中,因此在写入到issue queue之前,需要根据指令的类型,有选择的把它们写到对应的issue queue中,这个过程也会占据一定的时间;还需要考虑到:如果两个issue queue都可以接收同一类型的指令,比如都可以接收普通的ALU运算指令,那么如何把rename阶段过来的ALU指令分配到这2个issue queue中,使它们能够获得比较平衡的利用率,这也是需要在写issue queue之前要考虑的问题,因此书中把这个过程叫做“dispatch”,你可以理解为指令经过rename之后,还需要dispatch这个流水线阶段,才可以写到issue queue中,下面给出的就是这样的流水线过程,在dispatch和issue两个流水线阶段之间的流水线寄存器就是我们所说的issue queue了。



        rename    |     dispatch    |   issue   




需要注意的是,“dispatch”和“issue”这两个词在不同的公司中,表达的含义可能是相反的,比如在IBM的资料中,指令写到issue queue的过程就是dispatch,指令从issue queue中选出来的过程就是issue,这和本书使用的表达方式是一样的,但是在其它公司的术语中,“issue”表达的是把指令写到issue queue中,而dispatch则是把指令从issue queue中选出来,事实上在这样的表达环境中,issue queue更多的被称为reservation station,简称RS,在阅读文献的时候,需要根据上下文的语境来判断这两个词表达的含义是什么。
发表于 2015-5-6 13:16:47 | 显示全部楼层
回复 35# processor


   经楼主这么一说,我懂了。ISSUE阶段:先进行的是特定EU的仲裁电路从对应的IQ(上一个流水线寄存器)中选出自己需要的准备好的指令,                                                      再唤醒对应的消费者指令,同时发射已选指令到EU。
   那么我觉得ROB也应该是以流水线寄存器的形式存在的,而且应该代替WB处的流水线寄存器吧,如图中:ROB的流水线前面的逻辑负责往ROB中写运算结果,异常信息等等,其后面的retire阶段的逻辑负责提交指令,处理异常和恢复错误预测分支等。

  最后谢谢楼主详细而又热情的回复了。

乱序执行流水线示意图

乱序执行流水线示意图
 楼主| 发表于 2015-5-6 22:46:08 | 显示全部楼层
回复 36# Romer


   严格来说,ROB的作用并不是流水线寄存器,它只是处理器中用来记录指令流的原始顺序的一个FIFO,对于使用PRF进行rename的方式,指令在rename之后就会把信息写到ROB中,而对于使用ROB进行rename的设计中,指令在ROB中占据的entry其实就是这条指令被重命名之后的寄存器,之所以说ROB不是流水线寄存器,是因为它不是横跨在两个流水线阶段之间,而是在流水线的很多阶段都可能读或者写ROB,尤其是对于使用ROB进行rename的设计更是如此,例如在准备操作数的时候会读取ROB,而执行单元把结果计算出来之后也会把结果写到ROB中,而指令retire的时候也会读取ROB,等等,总之ROB所担负的内容还是挺多的。
发表于 2015-5-6 23:22:41 | 显示全部楼层
回复 37# processor

嗯,这个我懂了。但还有个问题:(以4-way,6-issue为例,当采用基于PRF的Rename时,ROB为一般结构(以你的书中Page323处为例))Exception(当指令在前端发生异常时),type,areg,preg,opreg,pc均是在分派段写入到ROB中,complete,exception(当执行阶段发生了异常时)在执行结束后写入到指定的ROB;但我觉得该结构的ROB的一个表项的每个位都是在不同周期只访问一次(读或写),那么其每个位只需支持一个读和一个写操作,这是不同于多端口寄存器的设计的(寄存器中每个reg都可能被读写所以每个ram cell很大),而此处的ROB的方操作不同于多端口寄存器,所以多端口ROB的面积增加是不是就只来自于更多的地址译码器了。
 楼主| 发表于 2015-5-9 00:25:00 | 显示全部楼层
回复 38# Romer
  其实ROB是按照FIFO的形式来组织的,在指令分派阶段,会有4条指令要写到ROB中,这就是FIFO的写入,在retire阶段,会有多条指令被读取出来,这就是ROB的读取,读和写分别受到读指针和写指针的控制,再加上执行单元计算完成后的写回,而且这些端口都是不能复用的,所以ROB肯定是要多端口的结构,如果用寄存器来实现ROB的存储,那么速度会快,但是面积会大,用定制的RAM面积会小,但是速度相对会慢一些,多端口结构除了存储器本身需要驱动更多的端口之外,布线资源也是一个非常严重的问题,尤其是工艺越来越小的时候,布线就更是一个绕不开的话题了
发表于 2015-5-14 23:21:53 | 显示全部楼层
回复 39# processor


  姚老师,你能不能给一个具体的超标量处理器设计流程,谢谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-26 04:07 , Processed in 0.023848 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表