3.2 CPU的自动化
CPU的自动化
- 改造1-使用2进制导线
- 改造2
- 根据整体流程开始改造
- 指令分析
- 指令MOV_A的开关2进制表格
- 手动时钟gif
- 自动时钟gif
根据之前的CPU内部结构改造,制造一个cpu控制单元
改造一
- 之前的CPU全由手动开关自己控制,极度繁琐,而开关能跟二进制一一对应, 开:1, 关:0
- 图1是之前的, 图2是改造后的,图3是改造后的近景图
- 把之前 WE,OE开关 全部替换成 能用二进制控制的导线
- 近景图可以看到改造后的WE,OE使用的导线都被编号了
- 例如: PC的WE:1号,OE:0号, 指令寄存器的WE:2号,OE:3号
- 与左边的二进制开关编号一一对应
- 这样,假设 PC给内存地址寄存器传值的话,也就是开启PC的OE,开启内存地址寄存器的WE,只需要在二进制开关上的第9位,和第0位 置1即可
- 效果图4: 模拟PC给内存地址寄存器传值
图1 之前的
图2 改造后的
图3 近景图
图4 模拟PC计数器 给 内存地址寄存器传值
改造二:
-
上述的改造还需要手动输入二进制,才能实现自动化,因此继续改造
-
根据之前写的整体流程,这里复制过来一份:
-
需要把这些流程全部替换成二进制(控制他们的开关)
-
0.step 0 , PC
-
- 清空状态(把其他开关全关了)
-
- 打开PC OE, 打开 内存地址寄存器 WE
-
- PC 输出位置(2位) 到 内存地址寄存器
-
- 清空状态
-
- 打开 PC WE, PC自身加1 (永远指向下一条位置)
-
1.step 1,内存地址寄存器传送地址,内存缓存寄存器获取数据
-
- 清空状态
-
- 打开 内存地址寄存器 OE, 打开 内存缓存寄存器 WE, 打开 内存 OE
-
- 通过 内存地址寄存器 传输地址到内存
-
- 内存收到的地址把此地址的一个字节(二进制不分[数据,指令])通过外部数据总线 传输到 内存缓存寄存器
-
2.step 2, 内存缓存寄存器把数据传送到指令寄存器
-
- 清空状态
-
- 打开内存缓存寄存器OE,打开指令寄存器WE,时钟一吼,立即传送到位
-
3.step 3,指令寄存器干活
-
- 清空状态
-
- 开始译码
-
- 拆分1个字节,高4位操作码,低4位操作数(内存地址)
-
- 如果操作码是ADD,则跳转到step 7
-
- 如果操作码是MOV_TO_ADDR,跳转到step 8
-
- 如果操作码是MOV_A,MOV_B则往下执行
-
- 把低4位的地址传送到 内存地址寄存器
-
- 打开内存地址寄存器WE,打开 指令寄存器OE,时钟一吼,低4位的地址就传送到了 内存地址寄存器
-
4.step 4, 执行一次step 1, 传递地址获取内存数据
-
- 执行一次step 1,此时 内存缓存寄存器中有了数据
-
- 这个时候根据指令本身来执行(译码),此时指令寄存器中的指令是1000,即MOV_A,因此需要把数据传送到寄存器A
-
5.step 5, 把数据传送到寄存器A
-
- 清空状态
-
- 打开 内存缓存寄存器的OE, 打开寄存器A的WE,时钟脉冲一到, 一个字节的数据通过 CPU内部数据总线传送到了寄存器A,一条指令执行完毕
-
6.step 6, 回到step 0
-
7.step 7, 执行ADD
-
- 清空状态
-
- 打开寄存器A,寄存器B的OE,打开ALU的OE,打开寄存器C的WE, 时钟一到, A+B的结果就被存放在了寄存器C
-
- ADD执行完毕,回到step 0
-
8.step 8, 执行MOV_TO_ADDR
-
- 清空状态
-
- 准备好数据与地址,打开指令寄存器OE,打开内存地址寄存器WE,打开寄存器C的OE, 打开内存缓存寄存器的WE,时钟一喊, 地址和数据都准备完成
-
- 清空状态
-
- 打开 内存地址寄存器OE, 打开 内存缓存寄存器OE,打开 内存WE (往内存的某个地址上写数据)
-
- 至此最后一条指令执行完毕
-
- 再次回到step 0, 此时PC:0,因此将循环往复的从头执行
根据整体流程开始改造
- 一共17个开关,也就是17个1,0的二进制,我这里就不在前面补0了. 这里的流程与上面一一对应
MOV_A(1000)的流程:
- 0.step 0
-
- 1000000001
-
- 10 (这一步需要额外多算一步,这里只是为了对应上面的流程)
- 1.step 1
-
- 11010000000000
- 2.step 2
-
- 100000000000100
- 3.step 3
-
- 1000001000
- 4.step 4
-
- 11010000000000
- 5.step 5
-
- 100000000010000
MOV_B(1001)的流程,与MOV_A的流程除了step 5不一样,其他都一样:
- 5.step 5
-
- 100000010000000
ADD(1011)流程: step 0 ~ step 2都一样:
- 3.step 3
-
- 1000000101100000
MOV_TO_ADDR(1010) 流程: step 0 ~ step 2一样
-
- 10010001000001000
-
- 100110000000000
指令分析流程
- 根据上面已经可以得到所有的开关2进制流程
- 类似内存单元中的2进制表来控制每个内存单元,但内存单元中的表还是需要手动输入
- 想要让这张表自动执行,需要一个由时钟控制的计数器
- 这个计数器的值,相当于地址,每次+1,地址就+1
- 根据上面的流程可知一共需要25组2进制,也就意味着需要25个地址,每个地址需要17位的数据,而查找表根据2的N次方来产生地址表,因此,需要2^5,相当于5位二进制
- 同时需要一个5位的计数器,对应查找表的5位地址
-
- 建立一张查找表,存放对应的地址(5位)和数据(17位),图1
-
- 5位的计数器,根据计数器每次+1来,找到对应查找表的地址, 执行相应的开关2进制
-
- 每次时钟一吼, 5位计数器就得到响应,立马把地址传递到查找表, 查找表根据对应地址的数据输出开关2进制(图2)
-
- 使用自动的实时时钟,10赫兹,图3
-
- 10赫兹:一秒钟执行10组高低电频,MOV_A指令有7组,一秒大概能执行到MOV_B的step 1
表格举例(MOV_A指令)
二进制开关指令(17位) | 对应step |
---|---|
1000000001 | step 0 中的1 |
10 | step 0 中的2 |
11010000000000 | step 1 |
100000000000100 | step 2 |
1000001000 | step 3 |
11010000000000 | step 4 |
100000000010000 | step 5 |
图1,根据上面表格的示例,创建一张地址5位,数据17位的查找表(专门用于地址-数据查询)
- 其余为0的数据就是清空状态(只是为了补齐地址,让每一条指令在开头,仅仅是看起来方便)
- MOV_A所在的起始位置:
-
- 0x00:0x00 这个起始位置的指令就是 1000000001 (step 0)
-
- 0x04:0x02 (也就是地址0x07)是这条指令的最后的操作:100000000010000(0x4010)
- MOV_B的起始位置:0x08:0x00 (地址0x08)
- ADD起始位置:0x10:0x00 (地址0x10)
- MOV_TO_ADDR的起始位置:0x18:0x00 (地址0x18)
图2, 计数器根据时钟来自动+1, 并输出到查找表中,查找表根据地址,输出对应的开关2进制,这里的时钟依旧使用手点
图3,全自动,使用自动时钟(使用10赫兹的实时时钟)
相关文章:

3.2 CPU的自动化
CPU的自动化 改造1-使用2进制导线改造2根据整体流程开始改造指令分析指令MOV_A的开关2进制表格手动时钟gif自动时钟gif 根据之前的CPU内部结构改造,制造一个cpu控制单元 改造一 之前的CPU全由手动开关自己控制,极度繁琐,而开关能跟二进制一一对应, 开:1, 关:0图1是之前的, …...
深入理解@Resource与@Autowired:用法与区别解析
Resource: Resource 是Java EE提供的注解,也可以在Spring中使用。它是按照名称进行注入的,默认通过属性名(通常是类名的小驼峰命名方式)或者name属性来匹配。如果找不到符合名称的bean,则会抛出异常。在使…...

高级驾驶辅助系统 (ADAS)介绍
随着汽车技术持续快速发展,推动更安全、更智能、更高效的驾驶体验一直是汽车创新的前沿。高级驾驶辅助系统( ADAS ) 是这场技术革命的关键参与者,是 指集成到现代车辆中的一组技术和功能,用于增强驾驶员安全、改善驾驶体验并协助完成各种驾驶任务。它使用传感器、摄像头、雷…...

2 使用React构造前端应用
文章目录 简单了解React和Node搭建开发环境React框架JavaScript客户端ChallengeComponent组件的主要结构渲染与应用程序集成 第一次运行前端调试将CORS配置添加到Spring Boot应用使用应用程序部署React应用程序小结 前端代码可从这里下载: 前端示例 后端使用这里介…...

[计算机网络]运输层概述
虽然我自己也不知道写在前面和前言有什么区别..... 这个系列其实是针对<深入浅出计算机网络>的简单总结,加入了一点个人的理解和浅薄见识,如果您有一些更好的意见和见解,欢迎随时协助我改正,感激不尽啦. 最近心态平和了不少, 和过去也完全做了个割舍吧,既然痛苦和压力的…...

【分布式】分布式事务及其解决方案
目录 一、分布式事务二、分布式事务的解决方案1. 全局事务(1)DTP模型(2) 两阶段提交协议(2PC)原理二阶段提交的缺点 (3)三阶段提交协议(3PC)原理 2. 基于可靠…...

【文末送书】机器学习高级实践
2023年初是人工智能爆发的里程碑式的重要阶段,以OpenAI研发的GPT为代表的大模型大行其道,NLP领域的ChatGPT模型火爆一时,引发了全民热议。而最新更新的GPT-4更是实现了大型多模态模型的飞跃式提升,它能够同时接受图像和文本的输入…...

吉他初学者学习网站搭建系列(1)——目录
文章目录 背景文章目录功能网站地址网站展示展望 背景 这个系列是对我最近周末搭建的吉他工具类平台YUERGS的总结。我个人业余爱好是自学吉他,我会在这个平台中动手集成我认为很有帮助的一些工具,来提升我的吉他水平和音乐素养,希望也可以帮…...

qgis添加arcgis的mapserver
左侧浏览器-ArcGIS地图服务器-右键-新建连接 Folder: / 展开-双击图层即可...

关于「光学神经网络」的一切:理论、应用与发展
/目录/ 一、线性运算的光学实现 1.1. 光学矩阵乘法器 1.2. 光的衍射实现线性运行 1.3. 基于Rayleigh-Sommerfeld方程的实现方法 1.4. 基于傅立叶变换的实现 1.5. 通过光干涉实现线性操作 1.6. 光的散射实现线性运行 1.7. 波分复用(WDM)实现线性运…...
【HarmonyOS】ArkTS开发@Styles装饰器和@Extend装饰器详解
文章目录 HarmonyOS详解ArkTS详解ArkTS装饰器深度解析:@Styles、@Extend、和stateStyles@Styles装饰器:优雅的组件样式定义与重用@Extend装饰器:扩展原生组件样式的利器stateStyles:多态样式的应用示例场景:装饰器的联合使用进阶应用:动态样式与交互最佳实践:样式的组织…...
Android修行手册-一个滑动旋转的弧形菜单
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列...
数组名的理解
1.引入 int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[0]; 这⾥我们使⽤ &arr[0] 的⽅式拿到了数组第⼀个元素的地址,但是其实数组名本来就是地址,⽽且是数组⾸元素的地址,我们来做个测试。 #include <stdio.…...

Robots 元标签与 X-Robots 标签
Robots Meta Tag 和 X-Robots-Tag 是两个常用的 HTML 标签,它们对观察机动爬虫和其他网络机器人很有启发性。这些标签可以控制您的网页如何被记录和显示。 什么是机器人元标记? 机器人元标记是一个 HTML 标签,它提供信息来查看电机爬虫和其…...

【数据结构实验】排序(二)希尔排序算法的详细介绍与性能分析
文章目录 1. 引言2. 希尔排序算法原理2.1 示例说明2.2 时间复杂性分析 3. 实验内容3.1 实验题目(一)输入要求(二)输出要求 3.2 算法实现3.3 代码解析3.4 实验结果 4. 实验结论 1. 引言 排序算法在计算机科学中扮演着至关重要的角色…...

微信小程序开发者工具] ? Enable IDE Service (y/N) ESC[27DESC[27C
在HBuilder运行微信小程序开发者工具报错 如何解决 打开微信小程序开发者工具打开设置--->安全设置--->服务器端口选择打开就可以啦...
【数据结构】E : 货币套汇(图路径)
E : 货币套汇(图路径) Description 套汇是指利用货币汇兑率的差异将一个单位的某种货币转换为大于一个单位的同种货币。例如,假定1 美元可以买0.7 英镑,1 英镑可以买9.5 法郎,1法郎可以买到0.16美元。通过货币兑换&a…...
图书管理系统源码,图书管理系统开发,图书借阅系统源码SqlHelper数据库访问操作方法简述
SqlHelper 是封装了数据库操作方法的类库,使用它我们可以链接数据库操作数据库表数据增删改查,其中主要SqlConnection ,ExecuteNonQuery,ExecuteScalar,ExecuteDataTable四个主要方法SqlConnection负责根据访问配置文件web.config中connstr链接数据库字符串去打开数据库,…...
富文本编辑器的实现与回显
文本编辑器实现-wangeditor 写之前记得安装wangeditor插件,到时候报错别赖我 import “wangeditor/editor/dist/css/style.css”; import { Editor, Toolbar } from “wangeditor/editor-for-vue”; defineOptions({name: "BaseEditor" });const mode …...

探索亚马逊云科技云存储服务的性能
文章作者:Libai 引言 随着企业越来越多地依赖云存储解决方案,确保存储性能的最佳状态变得至关重要。在本文中,我们将探讨在亚马逊云科技云存储服务上进行存储性能基准测试的重要性,以及如何帮助企业做出资源分配和优化的明智决策…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...