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

    1. 清空状态(把其他开关全关了)
    1. 打开PC OE, 打开 内存地址寄存器 WE
    1. PC 输出位置(2位) 到 内存地址寄存器
    1. 清空状态
    1. 打开 PC WE, PC自身加1 (永远指向下一条位置)
  • 1.step 1,内存地址寄存器传送地址,内存缓存寄存器获取数据

    1. 清空状态
    1. 打开 内存地址寄存器 OE, 打开 内存缓存寄存器 WE, 打开 内存 OE
    1. 通过 内存地址寄存器 传输地址到内存
    1. 内存收到的地址把此地址的一个字节(二进制不分[数据,指令])通过外部数据总线 传输到 内存缓存寄存器
  • 2.step 2, 内存缓存寄存器把数据传送到指令寄存器

    1. 清空状态
    1. 打开内存缓存寄存器OE,打开指令寄存器WE,时钟一吼,立即传送到位
  • 3.step 3,指令寄存器干活

    1. 清空状态
    1. 开始译码
    1. 拆分1个字节,高4位操作码,低4位操作数(内存地址)
    1. 如果操作码是ADD,则跳转到step 7
    1. 如果操作码是MOV_TO_ADDR,跳转到step 8
    1. 如果操作码是MOV_A,MOV_B则往下执行
    1. 把低4位的地址传送到 内存地址寄存器
    1. 打开内存地址寄存器WE,打开 指令寄存器OE,时钟一吼,低4位的地址就传送到了 内存地址寄存器
  • 4.step 4, 执行一次step 1, 传递地址获取内存数据

    1. 执行一次step 1,此时 内存缓存寄存器中有了数据
    1. 这个时候根据指令本身来执行(译码),此时指令寄存器中的指令是1000,即MOV_A,因此需要把数据传送到寄存器A
  • 5.step 5, 把数据传送到寄存器A

    1. 清空状态
    1. 打开 内存缓存寄存器的OE, 打开寄存器A的WE,时钟脉冲一到, 一个字节的数据通过 CPU内部数据总线传送到了寄存器A,一条指令执行完毕
  • 6.step 6, 回到step 0

  • 7.step 7, 执行ADD

    1. 清空状态
    1. 打开寄存器A,寄存器B的OE,打开ALU的OE,打开寄存器C的WE, 时钟一到, A+B的结果就被存放在了寄存器C
    1. ADD执行完毕,回到step 0
  • 8.step 8, 执行MOV_TO_ADDR

    1. 清空状态
    1. 准备好数据与地址,打开指令寄存器OE,打开内存地址寄存器WE,打开寄存器C的OE, 打开内存缓存寄存器的WE,时钟一喊, 地址和数据都准备完成
    1. 清空状态
    1. 打开 内存地址寄存器OE, 打开 内存缓存寄存器OE,打开 内存WE (往内存的某个地址上写数据)
    1. 至此最后一条指令执行完毕
    1. 再次回到step 0, 此时PC:0,因此将循环往复的从头执行

根据整体流程开始改造

  • 一共17个开关,也就是17个1,0的二进制,我这里就不在前面补0了. 这里的流程与上面一一对应

MOV_A(1000)的流程:

  • 0.step 0
    1. 1000000001
    1. 10 (这一步需要额外多算一步,这里只是为了对应上面的流程)
  • 1.step 1
    1. 11010000000000
  • 2.step 2
    1. 100000000000100
  • 3.step 3
    1. 1000001000
  • 4.step 4
    1. 11010000000000
  • 5.step 5
    1. 100000000010000

MOV_B(1001)的流程,与MOV_A的流程除了step 5不一样,其他都一样:

  • 5.step 5
    1. 100000010000000

ADD(1011)流程: step 0 ~ step 2都一样:

  • 3.step 3
    1. 1000000101100000

MOV_TO_ADDR(1010) 流程: step 0 ~ step 2一样

    1. 10010001000001000
    1. 100110000000000

指令分析流程

  • 根据上面已经可以得到所有的开关2进制流程
  • 类似内存单元中的2进制表来控制每个内存单元,但内存单元中的表还是需要手动输入
  • 想要让这张表自动执行,需要一个由时钟控制的计数器
  • 这个计数器的值,相当于地址,每次+1,地址就+1
  • 根据上面的流程可知一共需要25组2进制,也就意味着需要25个地址,每个地址需要17位的数据,而查找表根据2的N次方来产生地址表,因此,需要2^5,相当于5位二进制
  • 同时需要一个5位的计数器,对应查找表的5位地址
    1. 建立一张查找表,存放对应的地址(5位)和数据(17位),图1
    1. 5位的计数器,根据计数器每次+1来,找到对应查找表的地址, 执行相应的开关2进制
    1. 每次时钟一吼, 5位计数器就得到响应,立马把地址传递到查找表, 查找表根据对应地址的数据输出开关2进制(图2)
    1. 使用自动的实时时钟,10赫兹,图3
    1. 10赫兹:一秒钟执行10组高低电频,MOV_A指令有7组,一秒大概能执行到MOV_B的step 1

表格举例(MOV_A指令)

二进制开关指令(17位)对应step
1000000001step 0 中的1
10step 0 中的2
11010000000000step 1
100000000000100step 2
1000001000step 3
11010000000000step 4
100000000010000step 5

图1,根据上面表格的示例,创建一张地址5位,数据17位的查找表(专门用于地址-数据查询)

  • 其余为0的数据就是清空状态(只是为了补齐地址,让每一条指令在开头,仅仅是看起来方便)
  • MOV_A所在的起始位置:
    1. 0x00:0x00 这个起始位置的指令就是 1000000001 (step 0)
    1. 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赫兹的实时时钟)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据分片在分布式 SQL 数据库中的工作原理

各种规模的企业都在拥抱面向用户的应用程序的快速现代化,作为其更广泛的数字化转型战略的一部分。此类应用程序所依赖的关系数据库 (RDBMS) 基础设施突然需要支持更大的数据量和事务量。然而,在这种情况下,单体 RDBMS 往往很快就会过载。在 R…

【网络】DNS协议、ICMP协议、NAT技术

DNS协议、ICMP协议、NAT技术 一、DNS协议1、产生背景2、域名简介3、域名解析的工作流程4、使用dig工具分析DNS过程 二、ICMP协议1、ICMP介绍2、ICMP协议格式3、ping命令4、traceroute命令 三、NAT技术1、NAT技术背景2、NAT IP转换过程3、地址转换表4、NAPT技术5、重新理解路由器…

2023年亚太杯数学建模A题——深度学习苹果图像识别(思路+模型+代码+成品)

Image Recognition for Fruit-Picking Robots 水果采摘机器人的图像识别功能 问题 1:计数苹果 根据附件 1 中提供的可收获苹果的图像数据集,提取图像特征,建立数学模型,计算每幅图像中的苹果数量,并绘制附件 1 中所有…

佳易王各行业收银管理系统软件,企业ERP管理软件,企业或个体定制开发软件以及软件教程资源下载总目录,持续更新,可关注收藏查阅

系统简介 1、佳易王软件功能实用、操作简单、软件绿色免安装,解压即可使用,软件已经内置数据库,不需再安装其他数据库文件。 2、佳易王软件,已经形成系列,上百款管理系统软件涵盖多个行业。 3、已为多个企业个体定制…

mac rancher desktop 修改docker镜像源

1. ssh到rancher虚拟机 LIMA_HOME"$HOME/Library/Application Support/rancher-desktop/lima" "/Applications/Rancher Desktop.app/Contents/Resources/resources/darwin/lima/bin/limactl" shell 0 2. 提升权限 sudo bash 3. 更改镜像源 vi /etc/dock…

在 Go 中使用 Protocol Buffers

各位准备好了吗!这一次,我们将深入探讨 Protocol Buffers(protobuf)及其在数据序列化中的超能力所在。 介绍 Protocol Buffers,也被称为 protobuf,是由谷歌开发的一种语言无关的二进制序列化格式。其主要…

究极短的快排代码【QuickSort】

快排 QuickSort 两边向中间扫描法:取一个基点值,从左往右扫描,基点值左边所有元素小于它,遇到大于基点值的则停下,开始从右往左扫描,右边所有元素大于他,遇到小于基点值则停下,如果…

Win 10部署stable-diffusion-webui时github报错的解决方法

这篇博客就是简单记录一下。有很多文章已经详细介绍了怎么在Windows上部署stable-diffusion-webui了,例如: 本地部署Stable Diffusion教程,详细教学,已安装成功 - 知乎 (zhihu.com) 五千字长文:Stable Diffusion 保姆…

MySQL日期函数sysdate()与now()的区别,获取当前时间,日期相关函数

select sleep(2) as datetime union all select sysdate() -- sysdate() 返回的时间是当前的系统时间,而 now() 返回的是当前的会话时间。 union all select now() -- 等价于 localtime,localtime(),localtimestamp,localtimestamp(),current_timestamp,curre…

PyTorch-ReID重识别算法库与数据集资料汇总

Torchreid 是一个用于深度学习人员重新识别的库,用 PyTorch 编写,为我们的 ICCV’19 项目 Omni-Scale Feature Learning for Person Re-Identification 开发。 PyTorch-ReID的特点是 多GPU训练支持图像和视频 REID端到端培训和评估极其轻松地准备 Rei…

图书管理系统源码,图书管理系统开发,图书借阅系统源码三框架设计原理和说明

TuShuManger项目简介和创建 这里一共设计了6个项目,主要是借助三层架构思想分别设计了主要的三层,包括model实体层,Dal数据库操作层,Bll业务调用层,其他有公共使用项目common层,DButitly提取出来的数据库访问层,下面我们分别创建每个项目和开始搭建整个过程 TuShuManger…

nodejs+vue+python+PHP+微信小程序-书吧租阅管理系统的设计与实现-安卓-计算机毕业设计

在当今高度发达的信息中,信息管理改革已成为一种更加广泛和全面的趋势。为确保中国经济的持续发展,信息时代日益更新,书吧租阅管理系统仍在蓬勃发展。同时,随着信息社会的快速发展,各种管理系统面临着越来越多的数据需…

柑橘病害数据集(四类图像分类,没有打yolo标签)

1.文件夹分为训练集和测试集 在这个数据集中,有一类是新鲜柑橘,还有另外三种疾病,溃疡病、黑斑病和绿化病。 2.train文件夹 2.1.blackspot(黑斑病) 文件夹 206张照片 2.2.canker(溃疡病) 文…

STM32 配置中断常用库函数

单片机学习 目录 一、配置AFIO相关库函数 1.1函数GPIO_AFIODeInit 1.2函数GPIO_EventOutputConfig 1.3函数GPIO_EventOutputCmd 1.4函数GPIO_EXTILineConfig 二、配置EXTI相关库函数 2.1函数EXTI_DeInit 2.2函数EXTI_Init 2.3函数EXTI_StructInit 2.4函数 EXTI_Gener…

运维高级-day02

一、编写系统服务启动脚本 RHEL6风格 1、Linux运行级别 Linux运行有七个级别 级别 描述 0 停机状态,系统默认运行级别不能设置为0,否则系统不能正常启动。使用init0命令,可关闭系统 1 单用户状态,此状态仅root用户可登录。用…

超越噪音,让音乐重获新生:iZotope RX 10音频降噪修复软件

在音乐制作或者音频处理的过程中,噪音往往是一个让人头痛的问题。无论是环境噪音,还是设备产生的噪音,都会对音频质量产生重大影响。而现在,我们有了iZotope RX 10,这款专业的音频降噪修复软件,可以将你从噪…

C# 使用NPOI操作Excel的工具类

写在前面 NPOI是POI项目的.NET迁移版本。POI是一个开源的Java 读写 Excel、Word 等微软Ole2组件文档的项目;使用NPOI可以在没有安装Office或者相应环境的机器上对Word或Excel文档进行读写操作。 NPOI类库中操作EXCEL有两个模块分别是: 1️.HSSF模块&a…

【UCAS自然语言处理作业二】训练FFN, RNN, Attention机制的语言模型,并计算测试集上的PPL

文章目录 前言前馈神经网络数据组织Dataset网络结构训练超参设置 RNN数据组织&Dataset网络结构训练超参设置 注意力网络数据组织&Dataset网络结构Attention部分完整模型 训练部分超参设置 结果与分析训练集Loss测试集PPL 前言 本次实验主要针对前馈神经网络&#xff0…

#define例题

我们已经学了#define的所有知识,让我们来看这道题,可不要又陷入陷阱 题目要求: #define N 4 #define Y(n) ((N2)*n) int main() {int z 2 * (N Y(5 1));printf("z%d\n", z);return 0; } 求这个z的值是多少? 我们直接…

vuex actions异步请求 跟module模块化

actions vuex里面的异步操作,接受参数context ,参数有commt,getters,state 列如:调用 mutations 方法实现修改state 数据 (只能通过mutations 修改 state 数据) state:()>{count: 0, }mutations: {addCount(state)…