ppt课件-formalprocessorverification.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ppt课件-formalprocessorverification

这里说的state update并不是指内部信号,而是指那些外部可见的那些CPU状态。 如果这条原则被违反,那么以pushl指令为例,写esp必须在这个cycle中出现,因为如果在上跳沿出现,那么读取esp的操作就必须在下一个cycle才能进行。这就使得一条指令执行了两个cycle。 这条原则事实上没有什么太大的限制,因为如果需要读取当前cycle更新的寄存器,那么这个值必然在某根信号线上存在着。所以也就不需要读取寄存器。 所以,指令的语义设计时可以克服这一限制。 这个原则主要是针对指令语义设计而来的。 用在HCL中表示指令、寄存器、操作符类型 一个比较怪的地方是:我们的指令执行图是从下到上的。这种设计的原因等到PIPE的实现时我们会解释的。 之所以Write back阶段和PC Update阶段要回下来,是因为他们要访问Register file和PC这两个前面阶段用过的部件。 要注意的是虽然在语义动作中说各个可能写状态的阶段写状态的动作是顺序发生的。但实际上对于硬件来说,它们是同时在clock rising的时候发生的。 这个图中有些控制信号没有标出来。 似乎PC也应该是蓝色的。 事实上,不管需要几个字节,读入都是6个字节。 Split实际上是非常简单的。因为读出的一个字节就是8根信号线,只要将他们分为两股就可以了。 一个问题:Align没有使用Need valC信号,因为如果这条指令没有带常数,那么valC不管产生什么内容都无所谓。但valC到底是1-4字节还是2-5字节却要根据Need regids信号来确定。所以Need regids必须要,而Need valC可以不需要。 这也是一种常用的硬件设计方法:如果我们说一个信号在某种情况下用不到,那么它就可以是任意值。这样通过对它赋予某种赋值可以将他与其他信号合并或者其他简化。这里就是一个例子,valC并不是如果不需要的话,就为0。 事实上,不管需要几个字节,读入都是6个字节。 Split实际上是非常简单的。因为读出的一个字节就是8根信号线,只要将他们分为两股就可以了。 一个问题:Align没有使用Need valC信号,因为如果这条指令没有带常数,那么valC不管产生什么内容都无所谓。但valC到底是1-4字节还是2-5字节却要根据Need regids信号来确定。所以Need regids必须要,而Need valC可以不需要。 这也是一种常用的硬件设计方法:如果我们说一个信号在某种情况下用不到,那么它就可以是任意值。这样通过对它赋予某种赋值可以将他与其他信号合并或者其他简化。这里就是一个例子,valC并不是如果不需要的话,就为0。 大家可以写写看need_valC的写法(不要看书后的附录) 因为Decode阶段和Write Back阶段都主要是在操作register file,所以我们把他们合在一起讲。 写口E是用来写Execute阶段来的结果的,写口M是用来写Memory阶段来的结果的。 这里主要是要处理4个读写信号的地址。 当dstE和dstM相同时(这发生在popl %esp时),根据语义,应该是使用valM的值。 具体的表见P283-284 Set CC信号表示CC寄存器是否需要被更新。 只有OPl指令需要设置cc寄存器。 Mem read信号和Mem write信号不会同时为1。 可能初看上去非常古怪。明明计算下条指令地址PC应该是在本指令快结束时才能进行的。为什么放到了指令的开始呢。 因为我们把计算下条指令地址变成了计算本条指令地址。也就是说算出来的PC(圆圈中的那个)不是下条指令的地址,而是本条指令的地址。 相当于对时序进行切分时向前移动了一点。 在这种情况下,虽然lSA说存在一个PC寄存器。但实际上并不存在这个寄存器。相反,存在其他几个寄存器pIcode, pBch, pValM, pValC, pValP。(但程序员不可见) 另外,这种变换也没有引起问题。例如相对跳转(PC-relative寻址)(虽然Y86不存在这种寻址方式),这种寻址方式实际上是在Execute阶段将valP的值+偏移量。所以没有使用PC的值,即使用了在Fetch之前新的PC也已经有了,所以对于其后的各个阶段来说PC和SEQ中的是一样的。 这种变换的主要目的是要说明ISA和实现之间并不需要一一对应,只要语义一致就可以了。 这种变换也方便了我们下面要实现的PIPE。因为PIPE的地址预测是在fetch阶段就做的。 SEQ Summary Implementation Express every instruction as series of simple steps Follow same general flow for each instruction type

文档评论(0)

MvS023247 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档