上一篇文章学习了总线的相关知识,途中ABC当时假设为一个个的8位寄存器。这一篇要学习怎么构建这个寄存器

    

  这分为两个三个部分,数据输入,寄存器,数据输出。首先不管输出,来看数据输入和寄存器这两个部分。【03触发器与锁存器】中讲了D型触发器,那么我们的寄存器(D寄存器)就由D锁存器(74LS74)构成,结构如下:

    

  图中画了2位的寄存器,每一个部分就是一个1位的寄存器,如果一共8位的话就需要8个这样的1位寄存器。load端为0,那么数据端不论是多少,输出端Q都不会改变。如果load端为1,当时钟上沿时,Q就会保存D传入的数据。图中上面的寄存器拿load为0举例,下面的是load为1。实际搭建的图如下:

    

  中间四个数字电路分别为 74LS04(反相器),74LS08(与门),74LS32(或门),74LS74(D型锁存器)。黄线为load,蓝线为数据data,白线为时钟clk,可以连接到之前用555定时器做的pc上。实验到时候可以把黄线接在+或者-,表示load到0和1。这是你会看到灯泡(寄存器的数据),会随着clk,相应的根据load的值,存储或无视蓝线data的值。

  这样一个1位寄存器的输入和寄存就做完了,还差输出端。蓝线只需要接入到总线上,就能收到来自总线的数据了,但把数据输出到总线,需要做些处理,需要连接一个三态双向总线收发器。这个在【05总线】这一篇中由讲过为什么。

  整合:至此我们了解了一个1位的寄存器从输入到输出的制作,8位的话则需要8个这样的组合。这里我们可以直接用两个 4bit D-type registers with 3-state outputs(74LS173)即可。顾名思义,即3态输出端的4位D型寄存器集成电路。这里要说明一下,虽然我们要亲手做cpu,但改方便时要方便。我们当然不能方便到直接用一个8086放在面包板上就算做了个cpu,可当然也不能全用基本门电路,甚至用二三极管和电容做cpu,我们要找一个折中到办法,在了解到原理,但重复度比较高的零件,就尽量用即成的。下图位74LS173针脚图:

    

  • CP 时钟输入端(上升沿有效)
  • CR 清除端
  • 1~4D 数据输入端
  • 1~4Q 输出端
  • N,M 三态允许允许端(低电平有效)——是否输出到总线
  • G1,G2 数据选通端(低电平有效)——是否存入

这里引入官方说明:

  

  这样两个74LS173就组成了一个8位寄存器,包含输入和输出端的控制。由于实践中设计的cpu需要直观看到寄存器里的内容,所以不管输出到总线的控制信号如何,我们都希望能够通过LED灯来观察寄存器里的内容。所以我们使74LS173的输出端控制始终为可输出,连接到LED灯上,再在后面接一个74LS245(三态控制)来控制信号是否输出到总线。设计图如下:

    

  其中M,N始终接地,即低电平有效,输出端一直有效,通过LED灯后再进行三态输出处理。

  实操图第一步:

    

  实操图第二步:寄存器输出端连接到三态上,三态的输出端连接到总线。总线又通过蓝线连接到寄存器到输入端,还有三根黄线,最右边是load(数据是否存入),中间是clear(永远0),左边是三态的允许(是否输出到总线)。白线是clk。

    

  将设备连接到pc和总线上:

    

  连接多个寄存器:

    

  总结:至此多个寄存器已经可以和总线交互,并且连接到了pc上,随着时钟到改变,通过load和三态决定是否载入和输出数据。

  参考视频:eater.net

【从零开始自制CPU之学习篇06】寄存器的更多相关文章

  1. 【从零开始自制CPU之学习篇07】最简单的ALU—全加器

    ALU是算术逻辑单元,是CPU中重要的一部分,因为CPU本质上就是不断重复最简单的计算.而我们这一版CPU的ALU部分更为简单,是一个只能做加法的ALU. 理论部分 我们需要一个能帮我们进行数学计算的 ...

  2. 【从零开始自制CPU之学习篇00】开篇

    从今天开始决定用面包板制作一个8位的CPU,实现几个简单的指令.我给自己分两大部分计划,第一部分是学习制作CPU的理论知识,第二部分是实践.并打算实施计划的同时用博客的方式记录下来.理论知识的部分重点 ...

  3. 【从零开始自制CPU之学习篇05】总线

    总线定义:总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线.地址总线和控制总线,分别用来传输数据.数 ...

  4. 【从零开始自制CPU之学习篇03】锁存器与触发器

    本篇学习了两种锁存器:SR Latch和D Latch,一种触发器:D flip flop SR Latch:SR—锁存器 初始状态下,S和R都为0,Q和Q‘随机有一个为1另一个 为0(取决于电流速度 ...

  5. 【从零开始自制CPU之学习篇04】电容

    电解电容: 多数在1μF以上,直接用数字表示.如:4.7μF.100μF.220μF等等.这种电容的两极有正负之分,长脚是正极. 独石电容: 独石电容器是多层陶瓷电容器的别称, 简称MLCC 读数方法 ...

  6. 【从零开始自制CPU之学习篇02】555定时器

    555定时器是一种集成电路芯片,常被用于定时器.脉冲产生器和震荡电路.在CPU制作中作为pc(程序计数器)的主要组成部分.以下是我购买的NE555实拍图: NE555的针脚示意图: 555定时器各针脚 ...

  7. 【从零开始自制CPU之学习篇01】识别四色环电阻

    制作CPU的好多部分都用到了各种阻值的电阻,由于我选购的是色环电阻,即电阻表面涂上一定颜色的色环,来代表这个电阻的阻值.因此通过色环来快速识别电阻阻值需要作为储备知识,不然一堆电阻插在面包板上很快就乱 ...

  8. Objective-C学习篇06—NSString与NSMutableString

    NSString OC提供了定义字符串对象的方法,也就是将想要表达的字符串用一对双引号引起来,并在开头加上@.@是OC中的指令符,它告诉编译器@以后的内容为OC中的语法.比如@”Harbingwang ...

  9. iOS系列 基础篇 06 标签和按钮 (Label & Button)

    iOS系列 基础篇 06 标签和按钮 (Label & Button) 目录: 标签控件 按钮控件 小结 标签和按钮是两个常用的控件,下面咱们逐一学习. 1. 标签控件 使用Single Vi ...

随机推荐

  1. java类路径classpath

    java编译器编译.java文件和java虚拟机执行.class文件时的路径和写法不一样. 在没有设置任何classpath环境变量的情况下,javac可以编译全路径的.java文件.例如: java ...

  2. unity打包exe中的资源管理

    给美术和产品用unity做一些exe工具,会频频遇到导入导出资源的情况. 首先所有的文件应该放在StreamingAssets文件夹下, 如果需要动态替换贴图,这样美术只要替换default.png就 ...

  3. json转化技巧

    如果用户是一级下拉菜单,二级联动,动态加载内容到二级菜单,并在下方内容处,随着用户选择的内容动态加载相应内容. 实现的方法其实很简单 select部分:一级菜单选择内容,ajax动态加载,因为内容固定 ...

  4. meta标签整合

    <title>名称</title>(便于搜索) <meta name="keywords" content="内容"> ke ...

  5. js计算发表的时间...分钟/小时以前/以后

    网上找的都好复杂,这本来就是个粗略显示通俗的时间,绕来绕去都晕了 function timeAgo(o){ var n=new Date().getTime(); var f=n-o; var bs= ...

  6. FTP连接超时

    今天程序在连接FTP服务器,突然无法连接,用Windows 的 Explorer能正常连接,但用 WebRequest.WebResponse连接时,总是抛出连接超时异常. 后查找相关资料,原因是:程 ...

  7. 使用Skaffold一键将项目发布到Kubernetes

    当前skaffold版本为v0.4,还未发布正式版本,不建议在生产环境中使用: skaffold用于开发人员快速部署程序到Kubernetes中:skaffold提供了dev.run两种模式:使用sk ...

  8. vs2012开发基于MFC的ActiveX控件

    1.新建工程 2.一直点击下一步,直到出现一下界面,注意红色标注选项,点击完成. 3.进入工程的属性界面,设置工程属性 4.添加对话框资源及其他控件,添加对话框类, 5.设置对话框属性 6.设置Dia ...

  9. VS 2013+ ArcGIS 10.3 AddIn 断点不断异常解决

    1. http://resources.arcgis.com/en/help/arcobjects-net/conceptualhelp/index.html#/How_to_debug_add_in ...

  10. unittest各个组件之间的关系

    各个组件的含义: TestCase:测试用例,测试用例里面会有很多测试方法,是单元测试中最小维度的测试行为. TestSuite:测试套件,是测试用例的集合. TestFixure:测试固件,测试准备 ...