一、架构设计

在正式开始设计 CPU 之前,我们需要设计两个架构来熟悉一下整个环境以及完成一些小的功能部件。两个架构分别是:

  1. 微程序控制的运算器设计
  2. 微程序控制的存储器读写系统设计

本篇文章主要探讨如何设计第一个架构。

下图即为我们将要设计的 微程序控制的运算器 的整体架构。


由于我们还没有正式开始设计 CPU 的指令,因此暂时用下述的指令进行设计。

至此,我们应该可以大体明白这个架构设计的逻辑。

  1. 指令预先存在 CROM 中
  2. uPC 从 CROM 中取出指令
  3. CROM 将指令传给 CPUIR,即指令寄存器中
  4. 指令寄存器再将具体的指令内容对应传给 ALU 中
  5. ALU 执行指令,输出结果

搞明白逻辑后,我们将元件分离一一进行实现,不难发现,一共有 4 个元件,列举如下所示。

  1. uPC — 计数器
  2. CROM — 存储器
  3. CPUIR — 寄存器
  4. ALU — 运算器

二、元件实现

(1) 计数器 — uPC

由于架构中 CROM 为 256*24,因此我们需要设计 8 位的计数器,即将两个 74161 元件组合起来进行设计。(各元件具体功能可以参看:动手设计 CPU(一)—— 各类元件功能表)

该元件设计不太复杂,因此此处不再赘言,具体设计内容可以查看下述的电路图。

设计完该元件后,我们将其封装,封装后的元件如下所示。

(2) 存储器 — CROM

点击下图的按钮,根据流程即可设计 1-port 的 ROM,此处设计部分为 Quartus 应用的操作,不明白的可以继续查询网上资料,此处不再赘言。

最后的设计成果如下所示。

(3) 寄存器 — CPUIR

由于 74273 元件仅提供 8 位寄存器,因此我们需要将 3 个 8 位寄存器进行并行连接组成我们所需要的 CPUIR,具体电路结构如下所示。

最后不要忘记将该元件封装,封装后的结果如下所示。

(4) 运算器 — ALU

由于 74181 中没有提供输入、输出端的寄存器,因此我们需要手动在原有的 ALU 元件中加入输入、输出寄存器的部分,并加入 74182 组成 8 位超前进位并行加法器,具体结构如下所示。


其中 register_normal 元件是使用 74273 封装的 8 位寄存器,主要是封装了输入端和输出端,与 74273 基本没有差别。最后,我们将这个元件封装,结果如下所示。

三、完整电路实现

设计完上述的 4 个元件之后,我们可以轻松搭建出我们所要设计的架构 微程序控制的运算器,具体搭建电路如下。

注意 uPC、CROM、uIR 的 CLK 均取反,其中 uIR 取反是为了和 uPC 保持一致,CROM 取反是因为 ROM 是下降沿打入。

而 uPC 取反的原因是,让 CROM 比 uPC 先打入,才可以读出 CROM 中第一个单元的数据。若 uPC 和 CROM 同时打入,则 uPC 的输出值会立马变成 0000 0001,即无法输出 0000 0000,因此我们需要令 CROM 比 uPC 先打入。

除了上述时钟的控制之外,其余地方没有太大难度,参考上图即可搭建成功!

四、仿真测试

内存设置

共存入两条指令,分别执行 A+BA+B+1 两个命令。

仿真结果

运行仿真,输出 CLK 的波形,即可得到输出结果。可以发现输出结果恰好为 A+BA+B+1 的答案,因此电路验证正确。

五、总结

至此,我们即实现了 微程序控制的运算器设计 的架构,总体上来说没有太大难度,主要的目的就是熟悉环境,并且设计一些基础元件,例如 ALU、uPC、uIR 等。

并且在结果输出的过程中我们遇到了时钟设计的问题,这个问题在之后将会经常出现,我们在设计时钟的时候一定要注意!

CPU 设计第二篇结束,旅程仍在继续!

动手设计 CPU(二)—— 微程序控制的运算器相关推荐

  1. 计算机组成课程设计之二——微程序控制的存储器读写系统设计

    如果部分电路图显示不清楚可放大页面后查看 设计要求 课程设计平台为设计环境提供了容量为256×8的随机存储器.在此基础上,设计相应的外围电路和时序对随机存储器进行读写操作.结构框图如下图所示,设计完成 ...

  2. 自己动手写CPU之第七阶段(5)——流水线暂停机制的设计与实现

    将陆续上传本人写的新书<自己动手写CPU>,今天是第28篇.我尽量每周四篇 China-pub的预售地址例如以下(有文件夹.内容简单介绍.前言): http://product.china ...

  3. 计算机组成原理课程设计_微程序控制的运算器设计

    实验四 微程序控制的运算器设计 实验分析 设计要求: 利用之前设计的具有超前进位功能的8位ALU,实现简单算术或逻辑运算 两操作数由八位寄存器R0.R1提供,其结果放入R2中.具体何种操作可由微命令任 ...

  4. 31条指令单周期cpu设计(Verilog)-(二)总体设计

    目录 31条指令单周期cpu设计(Verilog)-(一)相关软件 31条指令单周期cpu设计(Verilog)-(二)总体设计 31条指令单周期cpu设计(Verilog)-(三)指令分析      ...

  5. 自己动手写CPU(7)转移指令的实现

    自己动手写CPU(7)转移指令的实现 分支延迟槽 在MIPS五级流水线中,一条指令被分成了五个阶段:取指.译指.执行.仿存.回写.当第一条指令的执行阶段结束时,第二条指令的译指阶段也已经结束了. 那么 ...

  6. 计算机组成原理课程设计——CPU与简单模型机设计

    一.设计目的 1.掌握一个简单CPU的组成原理. 2.在掌握部件单元电路的基础上,进一步将其构造一台基本模型计算机. 3.掌握微程序控制器设计. 二.设计任务与要求 设计任务: 用所学知识,设计并构造 ...

  7. 【自己动手写CPU】异常相关指令的实现

    MIPS架构中定义的异常类型 MIPS32架构中,有些事情打断程序的正常的执行流程,这些事情称为中断.陷阱.系统调用以及其他打断程序执行流程的情况,统称为异常. 此处的OpenMIPS处理器只实现了其 ...

  8. FPGA设计CPU书籍

      一直以来CPU内部是绝大多数IT工程师难以触及的领域.纵使学习过计算机架构相关课程,自己动手实现CPU也始终遥不可及,因为这涉及计算机系统的最底层--芯片设计.   而近年来FPGA芯片产品的发展 ...

  9. 自己动手写CPU(8)加载存储指令的实现

    自己动手写CPU(8)加载存储指令的实现 好久没更新blog了,暑假提前放了.现在收假也该收收心了,继续捡起之前的CPU,自己开的坑不管咋样把它填完吧. 指令介绍 1.加载指令 2.存储指令 修改系统 ...

  10. 自己动手写CPU(6)流水线暂停、乘累加减与除法器的实现

    自己动手写CPU(6)流水线暂停.乘累加减与除法器的实现 流水线暂停 因为OpenMIPS设计乘累加.乘累减.除法指令在流水线执行阶段占用多个时钟周期,因此需要暂停流水线,以等待这些多周期指令执行完毕 ...

最新文章

  1. 浅谈微软跨平台与MONO
  2. TF之LoR:基于tensorflow利用逻辑回归算LoR法实现手写数字图片识别提高准确率
  3. 太极团队内部邮件曝光:iOS8完美越狱重大突破
  4. fir.im Weekly - iOS 保持界面流畅的技巧 1
  5. Oracle Discover产品简介
  6. 如何在ESX下抓取数据包
  7. Console-算法-递归算法示例
  8. 94年的博士后又拿到了这个金奖!原来是他的学弟
  9. 使用U盘安装Fedora14 32bit操作系统(参考自www.osyunwei.com)
  10. [唐胡璐]VBS技巧 - Adding Quotes(为字符串加双引号)
  11. 如何维持手机电池寿命_手机电池不耐用,都怪这些充电坏毛病
  12. 返回JSON出现Infinite recursion无限循环错误的解决
  13. after、append和appendTo三个函数的区别
  14. 关于Fragment 不响应onActivityResult的情况分析
  15. 智能优化算法应用:基于GWO优化的最小交叉熵图像多阈值分割 - 附代码
  16. 利用ACIS、HOOPS开发三维软件
  17. java模拟借书系统E R图_作业—模拟借书系统
  18. ssm+vue基于微信小程序的数学辅导教学学习系统#毕业设计
  19. html跳转页面携带数据
  20. 物联网:互联网的终结者?

热门文章

  1. 面向对象语言-反射机制
  2. 保护数据库安全十七招
  3. C语言判断四个嫌疑犯问题,C语言谁是窃贼问题代码及解析
  4. Tensorflow(GPU版安装后代码测试)
  5. 服务器webpack构建性能,webpack构建和性能优化探索
  6. 混合选择集的坐标提起lisp_晓东CAD家园-论坛-A/VLISP-[LISP程序]:请教如何对选择集进行排序-我有(setq ss(ssget _w p0 p1 (list (0 . CIRC...
  7. 加载远程图片_Cocos Creator工程JavaScript实现远程图片的加载
  8. php5.1 0day,关于phpwind 5.01-5.3 0day的分析
  9. java creat sql,java 实体类 生成 create sql
  10. 计算机信息与自然科学,郑旭飞 - 计算机与信息科学学院 - Powered by 西南大学