上一章我们讲述了两个简单的CPU的设计的完整过程,它们的.docVIP

上一章我们讲述了两个简单的CPU的设计的完整过程,它们的.doc

  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文档。上传文档
查看更多
上一章我们讲述了两个简单的CPU的设计的完整过程,它们的

上一章我们讲述了两个简单的CPU的设计的完整过程,它们的控制单元都使用硬布线逻辑直接实现的。实现控制单元的另外一种方法就是微序列控制单元,我们将在本章进行讨论。 1基本的微序列设计 当我们设计一个CPU的控制单元的时候我们往往是先给出一个CPU的状态图,然后设计一个有限状态机。硬布线逻辑是根据CPU的现态和输入(包括操作码和标志寄存器的内容)来进行状态转移,同时输出数据路径个组件的控制信号。 1.1微序列操作 一个微序列控制器也是一个有限状态机,一个通用的微序列控制器如下图: 说明: 图中寄存器用来存储CPU状态图中的一个状态,把它作为微代码存储器的地址访问微代码存储器。 微代码存储器输出微指令,可以分成两个部分:一个部分是微操作,这些信号被输出到CPU的其他部分用以产生CPU数据路径中的控制信号。另一部分被用来产生下一个访问微代码存储器的地址。这一部分加上操作码、标志寄存器以及CPU现在的状态(也就是Register中的内容)一起产生下一次访问微代码存储器的地址。 下一个地址产生单元接受操作码、标志寄存器内容和微代码存储器的输出,然后根据现在CPU所处的状态决定产生下一次访问微代码存储器的地址。它生成所有可能的转移地址,然后选择正确的输出到寄存器中。 一个可能的地址就是微代码存储器现在地址加一。 另一个可能的地址是要跳转的绝对地址。 每个微序列控制其还需要能够正确地访问执行例程,这就需要用到影射逻辑。把取指得到的操作码影射到执行子例程的第一条微指令的地址上。这个影射操作时在每个取指周期结束时进行的。 像所有高级语言编程一样,微代码也可以有子程序。当几条指令执行同一段微代码时,这段微代码就可以用一个子程序来实现。当调用此子程序时,这个子程序的微代码地址就被作为一个跳转的绝对地址赋给寄存器,而当前地址加一的地址则被保存为返回地址。(需要硬件的寄存器或者堆栈来实现) 一个微序列控制器最基本的四个部分就是: 现在地址加一 绝对地址 影射逻辑地址 子例程返回地址 1.2微指令格式 每个微程序控制器可以有它自己的微指令格式。但是每条微指令必须包含以下几个部分的内容: 下面我们分别介绍这几个部分的内容: SELECT域 SELECT域用于指名下条指令地址的来源。它仅仅是指名下条指令地址的来源,而不直接给出下条指令的地址。例如:取指例程最后一条指令时,它的SELECT域会指名下一条地址将来自影射逻辑。 对于条件转移指令,执行子例程的执行需要根据标志为的判断来进行。对于这样的指令SELECT域要有相应的标志寄存器的选择。然后根据所选择的标志寄存器以及SELECT域的内容来决定下一地址的来源。 ADDR域 ADDR域就是来指名下一条指令执行的绝对地址的。例如当执行完一个例程需要进入取指例程时,对指明了下一个地址来源的微指令来说,ADDR域是无用的。例如:影射逻辑地址。 MICOR-OPERATION域 MICRO-OPERATION域用来描述要执行的微操作,有三种描述方法: 水平微代码(全编码??) 为了实现水平微代码,我们先列出CPU执行的所有微操作。然后我们给每个微操作赋MICRO-OPERATION域中的1bit。这将导致MICRO-OPERATION域的位数很多。而且这种编码方法将使很多的MICRO-OPERATION域中的位在大多数时间无用。 垂直微代码(全编码??) 为了实现垂直微代码,CPU可以执行的微操作被分组,然后每个微操作被赋予一个组合的二进制数,例如:16个微操作可以用4bit的MICRO-OPERATION域来描述(0000~1111)。事实上我们用4bit只能表示15个微操作,因为我们必须空出一个状态来描述空操作。垂直微代码的编码方式需要很少的MICRO-OPERATION域的位数,但是它需要一个译码器来产生真正的微操作信号。 直接生成控制信号 在以上两种方法中,CPU都必须要把微操作信号转换成控制信号来进行数据路径的载入(LOAD)、清零(CLR)、加一(INC)、ALU控制以及总线上各个Buffers的开关等操作。第三种微代码的编码方法就是把控制信号直接存储到微指令中,这种方法不需要另外的组合逻辑,但是它可读性差,不宜于调试。 2设计和实现A Very Simple CPU的微序列控制单元 为了验证为序列控制器的设计过程,我们首先来考虑前一章中的Very Simple CPU的控制单元的设计。本节将用微序列控制器重新设计其控制单元。我们将不在重新讲述指令集、有限状态机、数据路径以及ALU的设计。我们只讲述控制信号的产生过程。 2.1基本流程 这个Very Simple CPU的微序列控制器的基本框图如下: 在这个Very Simple CPU中只有两种可能的地址,一个是操作码影射地址另一个是绝对跳转地址

文档评论(0)

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

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

版权声明书
用户编号:6153235235000003

1亿VIP精品文档

相关文档