首页 圈子 我的社区 微课程 问答 积分兑换 活动 投票 搜索 文章 软件 用户 相册 资料
全部 Proteus教学 其它

基于proteus的CPU控制器设计(硬布线版)

zhangls
发表于 2019-04-28 15:05:51

硬布线版vs微程序版

本文是前述基于proteus的CPU控制器设计(微程序版)的姐妹篇,两个控制器的数据通路完全相同,指令集基本一致:硬布线版指令集是微程序版的扩展,增加了一条JMP3指令,如下表1所示:

表1. 硬布线控制器指令集列表


由上述指令表1可以推导出入硬布线版的指令状态图(如下图1所示):所有指令的取指操作都是相同的指令流ROM→IR(即CPU从程序存储器PROGRAM取出指令,经过总线BUS流向指令寄存器IR)。NOP和HLT指令只有上述取指操作,没有执行操作(HLT指令取指后硬件停机);而JMP1(直接寻址)/JMP2(间接寻址)/JMP3(二次间址)指令的执行操作则分别需要一次、两次和三次数据流ROM→PC(即CPU从程序存储器PROGRAM取出数据,经过总线BUS流向程序计数器PC),才能把目标地址送入PC。

图1. 硬布线控制器指令状态图


单周期硬布线控制器

如下图2所示,单周期硬布线版的最小版本CPU由蓝线左侧的数据通路和蓝线右侧的单周期硬布线控制器组成,左侧的数据通路与微程序版的最小版本CPU数据通路完全相同,而右侧的单周期硬布线控制器通过两级状态机来实现上述图1所示的指令状态图。

图2. 最小版本CPU(单周期硬布线版)


单周期硬布线版控制器将上述指令状态图1视为一个固定周期的“状态机”:以状态数目最多的JMP3指令为标准,状态机包含四个状态{M1, M2, M3, M4},每个状态Mx本身又是一个二级状态机,包括了状态T1(源部件→总线)和 T2(总线→目标部件)。CPU循环进行状态转移M1→M4,在每个状态Mx内又循环进行状态转移T1→T2,如下图3所示。

图3. 状态机架构(单周期硬布线控制器)

运用图3所示的状态机架构来分析上述指令状态图1,可以得到单周期硬布线版的指令流程图(如图4所示):图中每个方框就是一个状态Mx,对应微程序流程图中相同方框位置的一条微指令(没有微指令对应的状态Mx是冗余的空闲状态);其中,M1是所有指令公共的取指状态,M2、M3、M4是执行状态。每个状态Mx内部亦有相同的T1和T2周期(不需要取出微指令和确定微指令下址,所以没有T3和T4周期)。在T1周期,指令或数据先从一个部件打入总线BUS;在T2周期,指令或数据再从总线BUS打入另一个部件。在最后的执行状态M4结束后,自动跳转到下一条指令的取指状态M1(HLT指令例外,取指状态M1结束时硬件停机,等待人工复位跳转到下一条指令的取指状态)。整个CPU的运行过程就是不断的状态转移M1→M2→M3→M4→M1→……

图4. 指令流程图(单周期硬布线版)

在上述单周期硬布线版的指令流程图4中,每个状态周期【Mx】内部执行的微操作信号与对应的微指令流程图完全相同,不同的是微程序控制器通过每条微指令中的微命令位输出微操作信号,而硬布线控制器则可以看作是特定的指令信号和特定的状态节拍信号Mx的逻辑与组合,如下表2所示。根据表2可以整理成如下所示的微操作信号形成逻辑:
LDIR = M1
LDAR = PC_INC = #OE = M1+(JMP1+JMP2+JMP3) * M2+( JMP2+JMP3) * M3+JMP3 * M4
#LDPC = (JMP1+JMP2+JMP3) * M2+(JMP2+JMP3) * M3+JMP3 * M4
(注:取指状态M1的微操作是所有指令公共的操作,无需指令信号参与形成逻辑)

表2. 微操作信号形成逻辑

单周期硬布线版的时序发生器电路如下图5所示:一级状态机的状态转移电路是由两个D触发器组成的一个2位扭环计数器,输出状态节拍序列{M1,M2,M3,M4};而二级状态机仅仅需要输出节拍序列{T1,T2 },所以直接使用一个JK触发器74LS73实现。时钟信号CLK驱动二级状态机,循环发送节拍信号T1→T2→T1→……每一次状态T循环即为一个状态周期【Mx】;而每次状态T循环开始的T1上升沿驱动一级状态机,循环发送状态节拍信号M1→M2→M3→M4→M1→……每一次状态M循环即为一个指令周期。在取指状态M1中,指令锁存到指令寄存器IR后,指令的OP码[I7,I6,I5]经过图5中的3-8译码器74LS138生成唯一的CPU指令信号,然后在各个执行状态(M2/M3/M4)中与相应的节拍信号Mx结合,形成在特定指令的特定状态Mx所需的微操作信号。

图5. 时序发生器电路(单周期硬布线版)


多周期硬布线控制器

如下图6所示,多周期硬布线版的最小版本CPU由蓝线左侧的数据通路和蓝线右侧的单周期硬布线控制器组成,左侧的数据通路与微程序版的最小版本CPU数据通路完全相同,而右侧的多周期硬布线控制器通过动态可重构的两级状态机来实现上述图1所示的指令状态图。

图6. 最小版本CPU(多周期硬布线版)


仔细观察前述的(单周期)状态机流程图2-35,除了最多状态数目的JMP3指令外,其余指令都存在一个或多个空闲的状态周期。因此,单周期硬布线控制器的状态机虽然结构简单,次态MX+1仅取决于当前状态MX,但是运行效率不高。硬布线控制器的另一种设计方法是指令周期可变的“多周期硬布线控制器”,其状态机如上图2-39所示。每条指令的状态数目各不相同,按照指令执行周期的实际需求设定,没有空闲的状态。每个指令周期末尾,状态机受跳转信号触发,自动跳转到下一条指令的取指状态M1。

图7. 状态机架构(多周期硬布线版)

根据上述多周期硬布线版的状态机架构图7,可以把单周期硬布线版本的指令流程图4改成如下图8所示的多周期硬布线版本的指令流程图。

图8. 指令流程图(多周期硬布线版)


因为每条指令的状态数目不固定,所以多周期版硬布线控制器的状态机电路如下图9所示:二级状态机仍使用JK触发器74LS73,由时钟信号CLK驱动,循环进行固定的状态转移T1→T2。一级状态机则使用一个四位环形计数器,由每次状态T循环开始的T1上升沿驱动,进行状态数量不固定的状态M循环(如图2-39所示)。一级状态机的次态Mx+1不仅取决于当前状态MX,还由跳转信号#M决定:#M =1照常进行状态转移Mx→Mx+1;#M =0则计数器输入置位{1,0,0,0},使次态Mx+1强制转移到M1。

图9. 状态机电路图(多周期硬布线版)


跳转信号#M的形成逻辑如下式所述:当一条指令的当前状态是指令周期最后一个状态Mx时,其指令信号与状态节拍信号Mx的逻辑与令跳转信号#M=0,使次态强制转移到下一条指令的取指状态M1。
#M =#(NOP• M1) * #(JMP1•M2) * #(JMP2•M3) * #(JMP3•M4)
上式对应的跳转信号#M形成逻辑电路如下图10的中间所示。因为跳转信号#M的影响,微操作信号形成逻辑可以简化为以下表达式,其逻辑电路如下图10的左上方所示。
LDIR =#(LDPC) = M1; LDAR = PC_INC = 1; #OE = 0;
而多周期硬布线版的时序发生器电路图10中的指令译码电路(3-8译码器74LS138)、时钟电路、初始化电路、复位电路、双位指令计数器电路都与单周期硬布线版的时序发生器电路图5完全相同。

图10. 时序发生器电路(多周期硬布线版)


参考资料

本文的内容节选自作者编撰的教材专著《基于Proteus的计算机系统实验教程——逻辑、组成原理、体系结构、微机接口》(机械工业出版社),更详细的内容可以直接在书中查阅。
读者如有兴趣,可以在 当当网图书, 京东图书,亚马逊上搜索作者姓名赖晓铮即可找到这本著作。


本书详细描述了在proteus虚拟仿真环境中,从逻辑电路开始,一步一步构造运算器、存储器、控制器,最终用三种CPU体系架构(微程序、硬布线、流水线)实现了一个8位的CPU。并且,这个CPU不仅可以做逻辑、算术运算,拥有循环、分支、堆栈等程序结构,还可以完整实现对8086所有外设的控制,即替代8086完整实现了传统《微机原理》里讲到的所有外设实验。
本书的全部proteus工程文件,PPT,实验视频以及配套的两种形式课程设计(纯汇编、硬件改动)的资料都放在 百度网盘,提取密码:34ad
广州风标为本书配套了实验箱(如下图所示),可以让学生在电脑的proteus虚拟仿真环境中设计CPU或选择已有的8086、8051、ARM等CPU模型,然后通过虚拟总线映射到实验箱的物理总线,控制实验箱面板上的真实外设。有兴趣的读者可以自行联系 广州风标教育技术股份有限公司


作者:华南理工大学 赖晓铮教授


3778 1

你的回应
  • min_x91

    2020-06-23 11:50:28 min_x91

    如果有C语言版就更好

意见反馈