基于proteus的一个硬布线CPU

    • 指令集与CPU架构
    • 硬布线控制器
    • 指令流程图
  • 参考资料

指令集与CPU架构

本文是前述博客基于proteus的一个微程序CPU的姐妹篇,硬布线CPU的指令集完全兼容微程序CPU的指令集,分为以下五大类共38条机器指令,指令OP码如下表1所示:
1)系统指令:NOP、HLT、IRET;
2)寄存器及I/O操作指令:MOV、SET、IN、OUT/OUTA;
3)存储器及堆栈操作指令:LAD/POP、STO/PUSH;
4)跳转系列指令:JMP、JMPR、Jx(JC/JZ/JS)、JxR(JCR/JZR/JSR);
5)算术逻辑运算指令:SHT (RLC/ LLC/ RRC/ LRC)、SOP (INC/DEC/NOT/THR)、ADD/ADDI、SUB/SUBI、AND/ANDI、OR/ORI、XOR/XORI;

表1. 硬布线CPU指令集

硬布线CPU电路图如下图1所示,红线的左侧是与微程序CPU完全兼容的数据通路,包括了:程序/数据存储器ROM/RAM及其地址寄存器AR;指令寄存器IR;通用寄存器R0~R3;算术逻辑运算器ALU及其附属缓存器DA(兼作移位功能)和DB;外设I/O接口;中断向量地址IVA;程序计数器(PC)、运算结果标志位寄存器(PSW)及其断点寄存器(BP_PC、BP_PSW)。而图1红线右侧则是与微程序控制器功能对应的硬布线控制器(包括基于两级状态机的时序发生器电路)以及中断电路。

图1. 硬布线CPU电路图

硬布线控制器

硬布线CPU的控制器属于多周期硬布线控制器,采用两级状态机架构,如下图2所示:一级状态机MCLOCK由六个状态{M1, M2, M3, M4, M5, M6}组成,其中M1-M2是取指状态,M3-M6是执行状态。每一次状态M循环对应一个指令周期,其状态数目不固定,由该指令决定。状态机在每条指令最后的执行状态Mx结束后,自动跳转到下一条指令的取指状态M1。每一个状态M本身是一个二级状态机,与微程序CPU的微指令状态机完全相同:包括两个状态{T1,T2},循环进行状态转移T1→T2。在T1状态,指令/数据先从源部件打入总线BUS;在T2状态,指令/数据再从总线BUS打入目标部件。

图2. 硬布线CPU控制器的状态机架构

上述两级状态机的时序发生器电路如下图3所示,二级状态机与微程序CPU的微指令状态机完全相同,依旧使用JK触发器74LS73。时钟信号CLK驱动,循环进行固定的状态转移T1→T2。一级状态机则使用一个2位扭环计数器及其译码电路,由每次状态T循环开始的T1上升沿驱动,进行状态数量不固定的状态M循环(如图2所示)。一级状态机的次态Mx+1不仅取决于当前状态Mx,还由跳转信号#M决定:#M=1则照常进行状态转移Mx→Mx+1;#M=0则计数器输入置位{1,0,0,0},使次态Mx+1强制转移到M1。

图3. 状态机的时序发生器电路

跳转信号#M的形成逻辑电路如下图4所示:当一条指令的当前状态是指令周期最后一个状态Mx,其指令信号与状态节拍信号Mx的逻辑“与”令跳转信号#M=0,从而使次态强制转移到下一条指令的取指状态M1,构成M1→Mx循环。Mx与指令的关系如下:
Mx=M2 (M1→M2):NOP/HLT指令
(注:如下图4所示,#HLT指令信号由NOP指令产生,立即停机在状态M2的T2节拍)
2)Mx=M3 (M1→M3):IN、OUT、MOV、IRET、JMPR (JMPR/JxR) 指令
3)Mx=M4 (M1→M4):PUSH、POP、SET、SOP、JMPI (JMP/Jx) 指令
4)Mx=M5 (M1→M5):LAD、STO、SHT、ALU2_R (ADD、SUB、AND、OR、XOR) 指令
5)Mx=M6 (M1→M6):ALU2_I (ADDI、SUBI、ANDI、ORI、XORI) 指令

图4. 状态机的跳转信号形成逻辑电路

如下图5所示, 硬布线CPU是由指令寄存器IR保存的OP码{I7,I6,I5,I4}(参考上述CPU指令集列表1)经过两个74LS138译码器直接产生相应的指令信号。其中,单独设置指示信号ALU2代表五个双操作数运算指令ADD/SUB/AND/OR/XOR(这些指令状态机的时序相近),并且与指令寄存器IR的{I1I0}位结合,构成了以下两个指示信号:操作数之一来自指令第二字节IMM(立即数)的双操作数运算指示信号#ALU2_I和操作数全部来自寄存器的双操作数运算指示信号#ALU2_R。
另一方面,因为状态机时序相近的原因,在下图5中设置指示信号MEM_OP代表四个存储器操作指令LAD/STO/POP/PUSH。相似的,因为LAD/POP指令、STO/PUSH指令和跳转系列指令共用OP码,所以需要{I1,I0}位参与指令译码:当I1I0=00时,生成跳转指令信号#JMP和存储器操作指令信号#LAD/#STO(跳转目标地址或操作数地址来自指令第二字节ADDR);当{I1,I0}≠00时,生成跳转指令信号#JMPR和堆栈操作信号#POP/#PUSH(跳转目标地址或操作数地址来自寄存器)。

图5. 指令译码电路

因为数据通路是相同的,所以硬布线CPU执行指令所需的微操作信号序列与前述微程序CPU保持一致。每一个微操作信号由当前状态节拍信号Mx和特定的指令信号通过逻辑形成。如下表2所示。

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

根据上表2可以推导出如下图6所示的微操作信号硬布线逻辑电路。其中,横向信号线是状态节拍信号Mx(M1~M6),横向信号线下方是指令寄存器IR译码生成的指令信号组合。横向信号线上方的一排与非门和反相器则对应上表2的所有方框:每个与非门的一端输入横向信号线下方的指令信号组合(对应上表2某个方框中的所有指令信号)的逻辑,另一端输入状态节拍信号Mx;每个反相器只输入节拍信号Mx(反相器),表示任何指令在该状态Mx都有效。在下图6中,最上方的若干个与非门或反相器输出(低电平有效)通过与门逻辑形成某一个微操作信号(对应上表2中的某一行)。

图6. 微操作信号硬布线逻辑电路

指令流程图

硬布线CPU的状态机流程图与微程序CPU的微程序流程图基本相同,其中每一个方框代表一个状态Mx,对应微程序流程图中的一条微指令。每一个方框内的微操作信号都由上图6所示的硬布线逻辑电路生成,亦与微程序流程图方框中的微操作信号基本一致。
取指周期和中断处理周期的状态机流程图如下图7所示:所有机器指令至少需要2个CPU周期(M1和M2)的取指周期,在M1周期开始时刻,通过中断标记信号INT决定是运行取指周期(INT=0),还是运行中断处理周期(INT=1)。指令寄存器IR在M1周期或者复位信号#RESET=0的情况下清零。在取指周期M2的T2节拍上升沿时刻,信号IR_CLK上跳变,把从程序存储器PROGRAM取出的指令打入指令寄存器IR,再通过指令寄存器IR的{I7,I6,I5,I4}译码产生一系列的指令信号(如上述指令译码电路图5所示)。若产生NOP指令信号,则直接返回M1周期取出下一条指令;若产生HLT指令信号,则CPU直接停机,重启跳出断点后进入下一指令的取指周期。若产生其他信号,则进入执行周期(M3~M6)。

图7. 取指周期和中断处理周期的状态机流程图

如上图7 所示,所有CPU指令的状态机都经过公共的取指周期(M1~M2状态),然后在取指周期末尾,OP码{I7,I6,I5,I4}译码产生一系列指令信号,进入各自指令的执行周期。下图8列出了寄存器操作指令(MOV、SET指令)和I/O操作指令(IN、OUT/OUTA指令)执行周期的状态机流程图,与微程序流程图完全一致。

图8. 寄存器及I/O操作指令的状态机流程图

下图9列出存储器操作指令(LAD/STO指令)和堆栈操作指令(POP/PUSH指令)执行周期的状态机流程图。与微程序流程图相比,硬布线版本CPU不需要考虑微指令容量问题,因此堆栈操作指令POP和PUSH的执行周期只占用两个CPU周期,效率得到提升。

图9. 存储器及堆栈操作指令的状态机流程图

下图10所示的状态机流程图包括了中断返回指令、目标地址来源寄存器的跳转指令JMPR(包括JMPR和JxR系列指令)和目标地址来源存储器的跳转指令JMPI(包括JMP和Jx系列指令)。与微程序流程图相比,硬布线版本CPU不需要考虑微指令容量的问题,因此跳转指令JMPR的执行周期只占用两个CPU周期,效率大大提高。

图10. 中断返回及跳转系列指令的状态机流程图

如下图11所示:算术逻辑运算系列指令的状态机都在M3周期生成运算器74LS181的控制端逻辑[S3,S2,S1,S0,M,CN],其中,双操作数运算指令ALU2系列(包括ADD、SUB、AND、OR、XOR五种指令)在M3周期微操作信号一致,在M4周期则出现两个分支:操作数之一来自存储器的指令系列ALU2_I和操作数全部来自寄存器的指令系列ALU2_R。

图11. 算术逻辑运算系列指令的状态机流程图

参考资料

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

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

基于proteus的一个硬布线CPU相关推荐

  1. 8位12指令硬布线CPU设计

    实验f4a 8位12指令硬布线CPU设计 模型机是计算机的缩细模型,通过它可以理解计算机整机的结构及功能,理解CPU.存储器.中断控制器.接口的结构及实现逻辑和各部件之间的接口关系.本次课程设计的主要 ...

  2. 计组高分笔记:【05】中央处理器 「CPU细节 | 取指周期 | 间址周期 | 执行周期 | 中断周期 | 数据通路 | 硬布线控制器 | 微程序控制器 | 指令流水线 | LOAD | STORE」

    文章目录 1. CPU的功能和基本结构 1.1 CPU的组成 1.1.1 运算器的基本组成 1.2.2 控制器的基本组成 1.2.3 CPU的总图 2. 指令执行过程 2.1 指令周期 2.2 指令的 ...

  3. 计组学习笔记之CPU(3)——硬布线控制器和微程序控制器

    目录 控制器 控制器的结构和功能 硬布线控制器 硬布线控制器的定义 硬布线控制器结构 逻辑网络输入信号的三个来源 硬布线控制器的基本原理 微操作控制信号 微操作控制信号的产生 安排微操作时序的原则 微 ...

  4. 中央处理器(CPU)—— 控制器的功能和基本原理(硬布线控制器(CU))

    本文主要介绍硬布线控制器设计(了解即可) 1.硬布线控制器的设计 ---- 纯硬件方式实现控制器 (1)硬布线控制器概念 设计思路: 硬布线控制器基本原理 (2)硬布线控制器设计(了解) 分析每个阶段 ...

  5. (计算机组成原理)第五章中央处理器-第四节1:CPU硬布线控制器的设计原理(逻辑表达式,微操作时序,电路设计)

    文章目录 一:内容回顾 二:硬布线控制 (1)CU如何发出微命令 (2)逻辑化表达式 三:硬布线控制器设计 (1)硬布线控制器设计步骤 (2)步骤一:分析各个阶段的微操作序列 (3)步骤三:安排微操作 ...

  6. hc05与单片机连接图_基于proteus的51单片机开发实例(13)-LED指示那个按键被按下

    1. 基于proteus的51单片机开发实例(13)-LED指示那个按键被按下 1.1. 实验目的 本实例将实现两路外部中断的检测和识别,让我们能够更好地理解51单片机的外部中断以及中断优先级的概念. ...

  7. 2016计算机课程设计,2016年计算机组成原理课程设计-硬布线控制器的设计.doc

    2016年计算机组成原理课程设计-硬布线控制器的设计 编 号: 学 号: 课 程 设 计 教 学 院计算机学院课程名称计算机组成原理课程设计题 目硬布线控制器的设计专 业计算机科学与技术班 级二班姓 ...

  8. 8 计算机组成原理第五章 中央处理器 控制器 硬布线控制器 微程序控制器

    文章目录 1 控制器的功能和工作原理 1.1 控制器的结构和功能 1.2 控制单元的输入和输出 1.2.1 控制单元输入 1.2.2 控制单元输出 2 硬布线控制器 2.1 CPU的控制方式 2.2 ...

  9. 基于proteus的功率_学习电路仿真:基于proteus电路仿真软件的步进电机仿真

    本文是电路仿真软件的进阶篇,对于电路仿真软件的基础篇,大家可翻阅往期文章哦.本文中,将基于proteus电路仿真软件的步进电机仿真,一起来了解下吧. 步进电机广泛应用在生产实践的各个领域.它最大的应用 ...

最新文章

  1. 计算机桌面是是在哪个盘,电脑虚拟内存是设置在哪个盘的
  2. 软件测试黑马程序员课后答案_软件测试课后习题答案
  3. 运算符重载(c++细节篇二)
  4. MTK 添加自定义PMS权限 Patch
  5. python怎么输出文字_python怎么输出汉字
  6. NoNode for /hbase/hbaseid解决方案
  7. java实现打印直角三角形
  8. iphone8plus屏幕尺寸_百思买在苹果发布会前列出了一款“iPhone SE Plus”屏幕保护保护膜...
  9. C++工作笔记-仿大佬“容器”风格
  10. iOS界面设计之基础控件的学习 --- UITextField
  11. hdu 1203 I NEED A OFFER!
  12. BZOJ - 2783 树
  13. ASP.NET 2.0下实现匿名用户向注册用户的迁移(上) zhuan
  14. 海康威视 java B/S 开发 流程
  15. siamfc代码解读_分析SiamFC
  16. python、变量命名中字母不区分大小写_python变量名不区分大小写吗
  17. 接连倒闭失联的背后 传统健身房生意为什么突然就不行了?
  18. 完蛋,公司被一条 update 语句干趴了!
  19. 顺丰快递单号查询API接口调试demo【快递100API接口】
  20. cpu第几代计算机,赛扬G系列有几代cpu分别是

热门文章

  1. 长春计算机学校哪个好技校,长春市技校排名前十的学校
  2. 使用Flex做出对比杜邦分析图
  3. Google AdWords: Intermediate Techniques Google AdWords:中级技术 Lynda课程中文字幕
  4. 第一份工作,入职前的感想和疑惑
  5. 社区团购系统介绍 社区团购小程序分析
  6. 01背包问题(取还是不取呢)
  7. CC65 开发FC/NES 游戏(一)环境搭建(2021-04-27更新部分内容和修改部分错误介绍)
  8. 逆向学习(二) 安卓逆向
  9. gis 联合 融合_三大院齐聚郑州,共同探索BIM+GIS和大数据应用的无限可能
  10. cocos2d-iphone之魔塔20层第二部分