【从零开始自制CPU之学习篇06】寄存器
上一篇文章学习了总线的相关知识,途中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】寄存器的更多相关文章
- 【从零开始自制CPU之学习篇07】最简单的ALU—全加器
ALU是算术逻辑单元,是CPU中重要的一部分,因为CPU本质上就是不断重复最简单的计算.而我们这一版CPU的ALU部分更为简单,是一个只能做加法的ALU. 理论部分 我们需要一个能帮我们进行数学计算的 ...
- 【从零开始自制CPU之学习篇00】开篇
从今天开始决定用面包板制作一个8位的CPU,实现几个简单的指令.我给自己分两大部分计划,第一部分是学习制作CPU的理论知识,第二部分是实践.并打算实施计划的同时用博客的方式记录下来.理论知识的部分重点 ...
- 【从零开始自制CPU之学习篇05】总线
总线定义:总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线.地址总线和控制总线,分别用来传输数据.数 ...
- 【从零开始自制CPU之学习篇03】锁存器与触发器
本篇学习了两种锁存器:SR Latch和D Latch,一种触发器:D flip flop SR Latch:SR—锁存器 初始状态下,S和R都为0,Q和Q‘随机有一个为1另一个 为0(取决于电流速度 ...
- 【从零开始自制CPU之学习篇04】电容
电解电容: 多数在1μF以上,直接用数字表示.如:4.7μF.100μF.220μF等等.这种电容的两极有正负之分,长脚是正极. 独石电容: 独石电容器是多层陶瓷电容器的别称, 简称MLCC 读数方法 ...
- 【从零开始自制CPU之学习篇02】555定时器
555定时器是一种集成电路芯片,常被用于定时器.脉冲产生器和震荡电路.在CPU制作中作为pc(程序计数器)的主要组成部分.以下是我购买的NE555实拍图: NE555的针脚示意图: 555定时器各针脚 ...
- 【从零开始自制CPU之学习篇01】识别四色环电阻
制作CPU的好多部分都用到了各种阻值的电阻,由于我选购的是色环电阻,即电阻表面涂上一定颜色的色环,来代表这个电阻的阻值.因此通过色环来快速识别电阻阻值需要作为储备知识,不然一堆电阻插在面包板上很快就乱 ...
- Objective-C学习篇06—NSString与NSMutableString
NSString OC提供了定义字符串对象的方法,也就是将想要表达的字符串用一对双引号引起来,并在开头加上@.@是OC中的指令符,它告诉编译器@以后的内容为OC中的语法.比如@”Harbingwang ...
- iOS系列 基础篇 06 标签和按钮 (Label & Button)
iOS系列 基础篇 06 标签和按钮 (Label & Button) 目录: 标签控件 按钮控件 小结 标签和按钮是两个常用的控件,下面咱们逐一学习. 1. 标签控件 使用Single Vi ...
随机推荐
- 前端如何做好seo
一:什么是SEO? 搜索引擎优化(Search Engine Optimization),简称SEO.是按照搜索引擎给出的优化建议,以增强网站核心价值为目标,从网站结构.内容建设方案.用户互动传播等角 ...
- FunData — 电竞大数据系统架构演进
电竞出现在人们视野中的频率越来越高了,此次选取FunData作为电竞数据平台,v1.0 beta版本主要提供由Valve公司出品的顶级MOBA类游戏DOTA2相关数据接口(详情:open.varena ...
- 本地的jar包添加到maven库中 jdbc举例
1.配置(检查)Java环境变量 2.配置(检查)maven环境变量 3.找到maven文件的根目录下的config目录,修改setting.xml文件 配置maven本地仓库 <!-- loc ...
- react生命周期函数
如图,可以把组件生命周期大致分为三个阶段: 第一阶段:是组件第一次绘制阶段,如图中的上面虚线框内,在这里完成了组件的加载和初始化: 第二阶段:是组件在运行和交互阶段,如图中左下角虚线框,这个阶段组 ...
- js数组基础
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- [LeetCode] Magic Squares In Grid 网格中的神奇正方形
A 3 x 3 magic square is a 3 x 3 grid filled with distinct numbers from 1 to 9 such that each row, co ...
- JS 简单工厂模式,工厂模式(二)
一.什么是工厂模式: 工厂模式就是用来创建对象的一种最常用的设计模式,我们不暴露创建对象的具体逻辑,而是将逻辑封装到一个函数中,那么,这个函数 就可以被视为一个工厂.那么,在实际项目中,我们是不是可以 ...
- 排查MongoDB CPU使用率高的问题
1.公司业务调整,把一部分数据由Redis转至MongoDB,业务在测试环境正常,生产环境上线后发现压力一上来MongoDB的服务直接把CPU占满了,和开发的同学分析了一下也参考了一下百度上类似的问题 ...
- windows下 mysql 5.6.40 卸载 安装 修改密码
最近执行另一个mysql版本导出的sql脚本,出现问题!出于一些原因,把之前的mysql5.5卸载,由于卸载不干净出现了一些问题.特此总结方法! 参考链接: https://blog.csdn.net ...
- MyEclipse 10 报错记录
1. js文件:右键 >> MyEclipse >> Exclude From Validation 2. Servlet 警告:Window ==> Preferenc ...