3.2 CPU的自动化

news2024/11/18 4:48:51

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.coloradmin.cn/o/1252699.html

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

相关文章

2017年7月13日 Go生态洞察:向Go 2迈进

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

手撕AVL_二叉平衡树(图文并茂)

目录 前言 一 . AVL树的概念 二 . AVL树节点的定义 三 . AVL树的插入 1.插入节点 2.调节负载因子 四 . AVL树的旋转 1.左单旋 2.左右双旋 五 . AVL树性能分析 总结 前言 大家好,今天带大加手撕AVL树的插入 一 . AVL树的概念 二叉搜索树虽可以缩短查找的效率&#x…

process control 化学工程 需要用到MATLAB的Simulink功能

process control 化学工程 需要用到MATLAB的Simulink功能 所有问题需要的matlab simulink 模型 WeChat: ye1-6688 The riser tube brings in contact the recirculating catalyst with the feed oil, which then vaporizes and splits to lighter components as it flows up th…

【ArcGIS Pro微课1000例】0038:基于ArcGIS Pro的人口密度分析与制图

文章目录 一、人口密度二、人口密度分析1. 点密度分析2. 核密度分析三、结果比对一、人口密度 人口密度是指单位土地面积上居住的人口数,通常以每平方千米或每公顷内的常住人口为单位计算。人口密度同资源、经济密切结合,因此,科学准确地分析人口密度的分布情况,对合理制定…

当你准备开始学习 Java 时,确保已完成以下准备工作,安装Java开发环境并验证通过。

当你准备开始学习 Java 时,确保已完成以下准备工作: a. 安装Java开发环境 下载Java Development Kit (JDK): 访问Oracle官方网站,选择适用于你操作系统的JDK版本,点击下载。 安装JDK: 下载完成后&#xf…

window获取密码工具

工具getpass.exe 运行输出密码到5.txt 工具gethashes.exe 运行之后输入到6.txt,会得到一个$local 再运行gethashes.exe $local 可以看到加密的账户密码,用工具进行解密就可以得到密码 工具pwdump7 还有其他的mimikatz,msf工具都可以获取。

如何把自己银行卡里的钱转账充值到自己支付宝上?

原文来源:https://www.caochai.com/article-4524.html 支付宝余额是支付宝核心功能之一,主要用于网购支付、线下支付、转账等场景。用户可以将银行卡、余额宝等资金转入或转出至支付宝余额,实现快速转账和支付。 如何把自己银行卡里的钱转账…

案例-某验四代滑块反爬逆向研究二

系列文章目录 第一部分 案例-某验四代滑块反爬逆向研究一 第二部分 案例-某验四代滑块反爬逆向研究二 文章目录 系列文章目录前言一、js文件加载先后顺序二、每次刷新都会初始化 device_id, 所以追栈可以知道它从哪执行的三、删除node中的检测点(vm忽视&#xff09…

【一文讲清楚 Anaconda 相关环境配置】

文章目录 0 前言1 Package 与环境1.1 module1.2 package1.3 环境 2 Conda、Miniconda、Anaconda和Pip & PyPI2.1 Conda2. 2 Miniconda2.3 Anaconda2.3.1 Anaconda Navigator2.3.2 Anaconda PowerShell Prompt & Anaconda Prompt2.3.3 Jupyter notebook 2.4 Pip & P…

深信服实验学习笔记——nmap常用命令

文章目录 1. 主机存活探测2. 常见端口扫描、服务版本探测、服务器版本识别3. 全端口&#xff08;TCP/UDP&#xff09;扫描4. 最详细的端口扫描5. 三种TCP扫描方式 1. 主机存活探测 nmap -sP <靶机IP>-sP代表 2. 常见端口扫描、服务版本探测、服务器版本识别 推荐加上-v参…

PTA NeuDS-数据库题目集

一.判断题 1.在数据库中产生数据不一致的根本原因是冗余。T 解析&#xff1a;数据冗余是数据库中产生数据不一致的根本原因&#xff0c;因为当同一数据存储在多个位置时&#xff0c;如果其中一个位置的数据被修改&#xff0c;其他位置的数据就不一致了。因此&#xff0c;在数据…

【测试开发工程师】TestNG测试框架零基础入门(上)

哈喽大家好&#xff0c;我是小浪。那么今天是一期基于JavaTestNG测试框架的入门教学的博客&#xff0c;从只会手工测试提升到自动化测试&#xff0c;这将对你的测试技术提升是非常大的&#xff0c;有助于我们以后在找工作、面试的时候具备更大的竞争力~ 文章目录 一、什么是T…

【数据结构实验】排序(二)希尔排序算法的详细介绍与性能分析

文章目录 1. 引言2. 希尔排序算法原理2.1 示例说明2.2 时间复杂性分析 3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现3.3 代码解析3.4 实验结果 4. 实验结论 1. 引言 排序算法在计算机科学中扮演着至关重要的角色…

坚鹏:中国银联公司银行业前沿技术介绍及其数据分析方法实战培训

中国银联公司银行业前沿技术介绍及其数据分析方法实战培训圆满结束 ——借力数字化技术实现基于场景的精准化、场景化、智能化营销 中国银联公司&#xff08;China UnionPay&#xff09;成立于2002年3月&#xff0c;是经国务院同意&#xff0c;中国人民银行批准&#xff0c;在合…

一种太阳能风能市电互补路灯方案介绍

太阳能市电互补路灯是一种环保、节能的照明设施&#xff0c;它利用太阳能进行发电并实现照明。这种路灯在白天吸收阳光并将其转化为电能&#xff0c;到了晚上则利用储存的电能为LED灯提供电力&#xff0c;实现照明功能。下面叁仟智慧将详细介绍太阳能市电互补路灯灯的工作原理和…

人工智能|机器学习——循环神经网络的简洁实现

循环神经网络的简洁实现 如何使用深度学习框架的高级API提供的函数更有效地实现相同的语言模型。 我们仍然从读取时光机器数据集开始。 import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2lbatch_size, num_steps 32, 35 t…

4-20mA高精度采集方案

下载链接&#xff01;https://mp.weixin.qq.com/s?__bizMzU2OTc4ODA4OA&mid2247557466&idx1&snb5a323285c2629a41d2a896764db27eb&chksmfcfaf28dcb8d7b9bb6211030d9bda53db63ab51f765b4165d9fa630e54301f0406efdabff0fb&token976581939&langzh_CN#rd …

明道云伙伴成果与展望

摘要&#xff1a;这篇文章介绍了明道云在过去一年的成果以及未来的计划。明道云将把更多资源和精力投入到伙伴身上&#xff0c;提供更全面的支持&#xff0c;包括产品特性、展业支持和 GTM &#xff08;Go-To-Market&#xff09;支持三个方面。在产品特性方面&#xff0c;明道云…

【数据结构实验】排序(一)冒泡排序改进算法 Bubble及其性能分析

文章目录 1. 引言2. 冒泡排序算法原理2.1 传统冒泡排序2.2 改进的冒泡排序 3. 实验内容3.1 实验题目&#xff08;一&#xff09;输入要求&#xff08;二&#xff09;输出要求 3.2 算法实现 4. 实验结果5. 实验结论 1. 引言 排序算法是计算机科学中一个重要而基础的研究领域&…

03:2440--UART

目录 一:UART 1:概念 2:工作模式 3:逻辑电平 4:串口结构图 5:时间的计算 二:寄存器 1:简单的UART传输数据 A:GPHCON--配置引脚 B:GPHUP----使能内部上拉​编辑 C: UCON0---设置频率115200 D: ULCON0----数据格式8n1 E:发送数据 A:UTRSTAT0 B:UTXHO--发送数据输…