资源预览内容
第1页 / 共101页
第2页 / 共101页
第3页 / 共101页
第4页 / 共101页
第5页 / 共101页
第6页 / 共101页
第7页 / 共101页
第8页 / 共101页
第9页 / 共101页
第10页 / 共101页
亲,该文档总共101页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
6.1 CPU的设计规范 6.2 一个非常简单CPU的设计与实现 6.3 相对简单CPU的设计和实现 6.4 简单CPU的缺点 6.5 实例:8085微处理器的内部结构,第六章 CPU设计,CPU设计的两种方法:,硬布线逻辑控制(hardwired control) 微序列控制器(microsequencer) (微序列控制或微程序控制),6.1 CPU的设计规范,1设计CPU的步骤 确定它的用途 关键:使CPU的处理能力和它所执行的任务匹配。 设计指令集结构 设计状态图(CPU就是一个复杂的有限状态机),列出在每个状态中执行的微操作 从一个状态转移到另外一个状态的条件, 设计必要的数据通路和控制逻辑,实现这个 有限状态机,最终实现这个CPU。,2CPU执行如下的操作序列,取指令周期:从存储器中取出一条指令,然后 转到译码周期。 译码周期:对该指令进行译码,即确定取到的 是哪一种指令,然后转移到这种指 令对应的执行周期。 执行周期:执行该指令,然后转移到取指令周 期去取下一条指令。,3一般CPU状态图,6.2.1 非常简单CPU的设计规范 164字节的存储空间,每个字节是8位。 6位宽的地址:A50 存储器的8位值:D70 2一个程序员可以访问的寄存器AC(8位累加器) 3指令集(4条指令),6.2 一个非常简单CPU的设计与实现,4寄存器,一个6位的地址寄存器AR:它通过A50向存储 器提供地址。 一个6位的程序计数器PC:它包含下一条将被执 行指令的地址。 一个8位的数据寄存器DR:它通过D50从存储 器接收指令和数据。 一个2位的指令寄存器IR:它用来存放从存储器中 取回的指令的操作码部分。,一个CPU仅仅就是一个复杂的有限状态机。 设计CPU的途径:,设计CPU的状态图。 设计必要的数据通路和控制逻辑,以便实现这个 有限状态机,最终实现这个CPU。,6.2.2 从存储器中取指令 一、从存储器中取出指令的操作序列 1. 将地址放在地址引脚A50上,把地址送给 存储器。 2. 在给存储器足够的时间处理内部译码并将需 要的指令取出来之后,向存储器发一个信号,使存 储器将此指令输出到它的输出引脚,这些引脚与 CPU的D70相连接。CPU从这些引脚读入数据。,二、取指令周期的状态 FETCH1: ARPC FETCH2: DRM,PCPC1 FETCH3: IRDR76,ARDR50 实现PC加1的两种方案,在取指令周期(易与实现) 在执行周期,三、取指令周期的状态图,6.2.3 指令译码 当CPU把一条指令从存储器中取出来之后,它 必须判断所取的是哪种指令,从而可以调用正确的 执行周期。 在状态图中,此过程表示为一系列的从取指令 周期结束到各个执行周期之间的分支。 对于本CPU,有四条指令,因此有四个不同的 执行周期。,取指令和译码周期的状态图,6.2.4 指令执行 6.2.4.1 ADD指令 CPU必须完成两件事情: 从存储器中取出一个操作数。 将这个操作数和累加器中的值相加,并把结果存 回到累加器中。 ADD1: DRM ADD2: ACACDR 6.2.4.2 AND指令 AND1: DRM AND2: ACACDR,6.2.4.3 JMP指令 JMP1: PCDR50 另外一种选择 ;PCAR 6.2.4.4 INC指令 INC1: ACAC+1 本CPU的状态图 包括了取指、译码和执行周期。,6.2.5 建立所需的数据通路 考察存在哪些数据传送从而设计CPU的内部数据通路。 一、与CPU的每个状态相关联的操作 FETCH1: ARPC FETCH2: DRM,PCPC1 FETCH3: IRDR76,ARDR50 ADD1: DRM ADD2: ACACDR AND1: DRM AND2: ACACDR JMP1: PCDR50 INC1: ACAC1,二、设计数据通路的两种不同方案 1在所有需要传送数据的部件之间创建一条直接通路。 使用多路选择器或者缓冲器为那些有多个数据源的 寄存器从多个可能的输入中选择一个。 随着CPU复杂度的增加,这种方案将变得不现实。 2在CPU的内部创建一条总线。在各个部件之间使用总 线传递数据。,三、设计数据通路 第一步:把每个部件都连接到系统总线上 第二步:决定每个部件应该完成的功能 将操作重新分组 分组的依据:他们所修改的寄存器。 AR: ARPC;ARDR50 PC: PCPC1;PCDR50 DR: DRM IR: IRDR76 AC: ACACDR;ACACDR;ACAC1, 对每一个操作进行分析从而决定每个部件应该完 成的功能 1. AR,DR以及IR总是从其它一些部件中装入数据 2. PC和AC能够从其它一些部件中装入数据,但它们 还要能够自增他们的当前值。 创建一个单独的硬件 用来使这两个寄存器的当 前值加1,并且使结果能够重新装入寄存器; 把每个寄存器设计为一个计数器而且能够并行的 装载。,第三步:修改设计 注意如下几点: 1. AR仅仅向存储器提供数据,除此之外不跟任何部件 传送数据。因此,没有必要将它的输出连接到内部总 线上。 2. IR不通过内部总线向任何其他部件提供数据,所以 IR 的输出到内部总线的连接可以删除。 3. AC不向其他任何单元提供数据;因此与内部总线的 连接也可以删除。 4. 总线是8位宽,但是并非所有被传送的数据都是8位宽; 有一些是6位宽,有一个是2位宽。,必须确定哪些寄存器从总线的哪些位上接收和发送 数据。 5. AC必须能够装载AC和DR的和,以及AC和DR的逻 辑与的结果。CPU必须包含一个能够产生这些结果 的ALU。 第四步:修改后的CPU内部组织结构 (图中的控制信号将会由控制单元来产生) 第五步:必须保证在同一个状态将要发生的传送能够 事实上同时发生。 FETCH2: DRM,PCPC1 FETCH3: IRDR76,ARDR50,ARPC;ARDR50 PCPC1;PCDR50 DRM IRDR76 ACACDR;ACACDR;ACAC1,6.2.6 非常简单ALU的设计 1ALU完成两个功能 将两个输入相加 将两个输入相与 2设计方法 创建两个单独的硬件来实现每个功能, 加法:用标准的8位并行加法器 逻辑与:用8个2位与门 使用一个多路选择器从两个结果中选择一 个输出 3电路图,ALU,6.2.7 用硬布线逻辑设计控制单元 控制单元:产生控制信号,从而使所有的操作能 以正确的顺序执行。 设计控制单元有两种主要的方法: 硬布线控制:使用时序逻辑和组合逻辑产生控制信号。 微程序控制(或微序列控制):使用存储器查表方式 来输出控制信号。 本章重点:硬布线控制方法, 简单的控制单元包括三个部分,一个计数器:保存当前状态; 一个译码器:接受当前状态并为每个状态生成单独 的信号; 一些组合逻辑:接受单独的状态信号为每一部件生 成控制信号,以及计数器的控制信号。, 一般硬布线控制单元, 对于本CPU,总共有9个状态。因此,需要一个4位 的计数器和一个4-16位的译码器。译码器的输出位 中有7个用不到。,一、将状态分配到译码器的各个输出 1. 将FETCH1规定为计数器的0值,并使用计数器的 CLR输入来达到这个状态。 2. 将顺序的状态指派为计数器的连续值,并且使用 计数器的INC输入来遍历所有的这些状态。 FETCH2:计数器值1 FETCH3:计数器值2 同样:将ADD1和ADD2指派为连续的计数值 对AND1和AND2也是一样,3. 根据指令操作码和执行周期的最大状态数量来指派 执行周期的第一个状态。用操作码产生计数器的数 据输入,并用计数器的LD输入使之达到合适的执 行周期。 实质:实现从操作码到执行周期的一种映射。 为了装入正确执行周期的地址,控制单元必须完 成两件事情。 必须能够将正确的执行周期的第一个状态 的地址放到计数器的输入上。 必须发出计数器的LD信号。, 如何构造映射函数? 计数器的输入是IR值的一个函数。 目标:使这个函数越简单越好。 一个可能的映射:10IR10 如果IR=00,那么计数器的输入就是1000; 当IR=01,则输入为1001, 以此类推。,非常简单CPU的指令,第一状态,以及操作码,文中给出的映射函数的计数值, 存在一些问题 由于状态ADD1的计数值是8,而AND1的计数值 是9,那我们应该给ADD2安排一个什么值? 如何从ADD1去访问ADD2呢? 解决方法:使执行周期的第一个状态的计数值之间的间 隔至少为2。 通过映射1IR100可以达到这个目的。 使得ADD1,AND1,JMP1,INC1的 计数值分别是8,10,12,14 将ADD2指派为计数值9 AND2的计数值指派为11,二、为计数器产生控制信号 对于计数器,我们必须产生INC,CLR和LD信号。 当控制单元遍历顺序状态,从FETCH1,FETCH2, ADD1到AND1时,INC信号有效。 CLR则用来从每一个执行周期的末尾返回到取指令 周期,这可能发生在ADD2,AND2,JMP1和INC1 状态。 LD信号在每个取指令周期的末尾FETCH3状态中 发出。 三、控制单元部分电路图,四、组合形成控制AR,PC,DR,IR,M,ALU以及缓冲 器的控制信号。 首先考虑AR寄存器,它是在状态FETCH1 (ARPC)和FETCH3(ARDR50) 期间装载 的。通过将这两个状态信号进行逻辑OR操作,CPU 就为AR产生了LD信号。 为PC,DR,AC以及IR创建如下的控制信号: PCLOAD = JMP1 PCINC = FETCH2,FETCH1: ARPC FETCH2: DRM, PCPC1 FETCH3: IRDR76, A RDR50 ADD1: DRM ADD2: ACACDR AND1: DRM AND2: ACACDR JMP1: PCDR50 INC1: ACAC1,DRLOAD = FETCH2 ADD1 AND1 ACLOAD = ADD2 AND2 ACINC = INC1 IRLOAD = FETCH3, ALU的控制输入ALUSEL,把ALUSEL设置为AND2,就能保证当CPU执行 ADD或AND指令时,有正确的结果从ALU流向AC。,当ALUSEL=0时,ALU输出的是两个输入的算术和; 当ALUSEL=1时,那么输出就是输入的逻辑与。, 产生缓冲器的有效信号 例如: DR寄存器 在FETCH3(IRDR76,ARDR50), ADD2(ACAC+DR), AND2(ACACDR) 以及JMP1(PCDR50)的时候,DR的内容必须 放到总线上。将这些状态值进行逻辑或,就能够得到 DRBUS信号。,这个过程也可以用于产生其它缓冲器的控制信号: MEMBUS = FETCH2 ADD1 AND1 PCBUS = FETCH1 产生一个READ信号 该信号从CPU输出,并要求存储器输出它读到的数据。 READ = FETCH2 ADD1 AND1 五、控制单元中用来产生这些控制信号的部分电路图,6.2.8 设计验证 对每条指令的取指令、译码以及执行周期进行跟踪。 1. 考虑如下这段代码,它每条指令仅仅包含了一次。 0: ADD 4 1: AND 5 2: INC 3: JMP 0 4: 27H 5: 39H,2. CPU遵循状态图并以合适的状态
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号