简易计算机的搭建

这篇具有很好参考价值的文章主要介绍了简易计算机的搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简易计算机的搭建

1、一些无关紧要的前置知识

​ 现代计算机类设备的主流架构一般有两种:一为冯诺依曼体系架构;一为哈弗架构。

​ 主流计算机采用的架构一般为冯诺依曼体系,是将程序和数据放在一起存储的架构;

​ 单片机设备一般采用哈弗架构,是将程序与数据分开存储的一种架构。

以下基本都是有关冯诺依曼架构的知识

​ 冯诺依曼架构提出计算机由四个子系统构成:存储器(寄存器、内存、硬盘)、计算单元(ALU)、控制单元(进行协调各个单元)、输入输出单元(外设)。

​ CPU(中央处理器)是由寄存器计算单元控制单元组成。

​ 一般64位机的系统为64bit.

​ CPU和内存、硬盘、外设等非CPU内部组件连接的中介为总线。总线分为 数据总线(两端组件可双向通信)、地址总线(单向)、控制总线(单向,用于传送指令)。

​ 一个机器周期:取指令 ----> 译码 ----> 执行。有流水线时,可以相较来说同时进行,比如可在译码时进行下一个周期的取指令。

​ CPU指令架构分为 CISC复杂指令集(一般 x86CPU 电脑)和 RISC精简指令集(一般 ARM的CPU 手机、单片机)。

2、复用器(选择器)

​ 复用器的作用是选择使用哪一个组件输入进来的数。

​ 最简单的复用器是输入两个二进制位,输出指定的一个。这个功能可以使用一个单刀双掷的继位器实现,控制继位器的触点选择和继位器的高低电平实现选择输出。

​ 多位的复用器可以使用几个单个复用组成。一个复用器分高低电平,低走下一层第一个复用器,高走下一层第二个复用器,如此反复可实现多位复用器。

​ 输入n个二进制位和一个选择数,选择数可以是十进制,十进制0即走第零个,以此类推。也可以将十进制拆成二进制来选择,拆成二进制时,把整个复用器看作好几个组合成的,最高位走最后一个小的二选一复用器进行次层两边的选择,依此类推。

n位复用器即2^n个输入和一个位数选择和一个输出

3、简易的计算单元(ALU)

​ 由加法器、减法器(实际计算机中没使用,这里直接用了)、与、或和两个复用器及一些输入输出构成。输入为两个操作数、一个进位数、一个选择数(选择输出哪个运算结果。截取一下这个选择数的低一位,作为加法器和减法器的进位/借位选择,不截取的话复位器要选择位数多的,造成浪费。)。输出为一个结果和一个进位/借位。

我们做的ALU会把所有运算都做一遍输出选择的运算,有没有办法让它只作我们选择的运算?

​ 不知道。但不重要。首先说全算一遍根本不会影响运算速度,因为是并联,所以运算总时间只是耗费最多时间那个时间,所以这样做只会多耗一些电。我们用的电脑也是全算一遍,只不过实际的CPU对比如ALU这些电路逻辑作了简化,即电路组合后将表达式化简组成为新的电路,很晦涩,看不懂,但这样优化更节省时间和电。

4、PC计数器

​ 一个加法器和一个寄存器和几个输入输出组成。寄存器的输出传给加法器的一个操作数,同时寄存器的输出作为计数器的结果,第一次寄存器的输出为0,所以计数器从0开始计数;加法器的另一个操作数为1,进位器0;加法器的输出有两个,一个相加的结果,放进寄存器的输入,进行下次加一,另一个输出为进位,溢出后,相加结果变为零,进行第二轮的计数。寄存器有一个使能开关,和一个时钟。一次时钟周期进行一次加一计数。

简易计算机的搭建

5、实现一块内存

​ 使用分线器和n个寄存器即可实现一个n位寻址的存储,具体细节略。

6、带内存和寄存器和ALU的CPU (最最最初步的CPU)

​ 只说下原理。可以对PC计数器操作实现从内存的不同地址读出数据(可以通过输入往内存中输入数据),读出数据后通过ALU与寄存器中的数相加(寄存器中初始为0),即第一次相加得到第一个数放到寄存器中,如此循环,可以实现从内存中不断读数并不断相加。

提一句,我们做的这个ALU在CPU中没有使能开关和时钟,所以它不受总的时钟控制,当有操作数和运算符(指令)时它就运算;当操作数和运算符发生改变时它也进行运算。

7、给最最最初步的CPU加个指令操作

​ 添加一块指令内存。在指令内存中填入指令,下面我只举例子,咱制作时都可以随意指定每个地址里指令位代表的含义。我这里添加的内存是8位寻址,即256个地址,每个地址16位数据。

以下为个人定义的,可随意作修改

最低两位作为ALU的操作运算的选择;

将第14位作为总时钟周期的控制,将它和总时钟作一个与操作,只有当它为1时,这些组件(寄存器、PC计数器、

内存);

数据内存的输出接一个复用器,0为从内存中取数,1为取0,将第十三位作为这个复用器的选择位;

第十二位作为存操作数的寄存器的使能;

第十一位作为数据内存的输入使能;

第十位作为数据内存的输出使能;

存操作数的寄存器输出连接一个复用器,0为从中取数,1为取0,将第九位作为这个复用器的选择位;

现在想要实现跳转到指定地址去取操作数和指令(可通过这个实现一个循环),需要修改PC计数器的逻辑。原来的PC计数器是由一个寄存器和一个加法器构成,将加一的结果不断放到寄存器中,现在需要将加一的结果进行复用器的和要跳转的地方作选择。来个图:简易计算机的搭建

加了 要跳去地址的输入 和 选择走之前计数的逻辑还是后来输入的那个逻辑的输入(选择位)。要跳去的地址在数据内存中,所以直接连数据内存输出即可。将第八位作为选择是否走跳转的选择位;

接下来还要加一个比较,即将寄存器里的数据和内存中走到的数据作一个比较,以作后续的分支操作。这里需要对ALU添加一个比较的逻辑(比较器的组成大概可以用异或非和一些与或的逻辑实现,这里不写了),再在我们的CPU中加一个寄存器用来存放比较的结果,这个寄存器的时钟连总时钟,这个寄存器的值一直保持到下次作运算。将第七位作为这个寄存器的使能开关。

以下为现在CPU的样子:

简易计算机的搭建

​​ 上面的位数太乱了,下面也许就位数和位数控制的隧道名作了改变

指令里面来一个位表示控制条件跳转,起名je。比较寄存器中的输出和je作与,如果都为真,则走这个跳转,也就是je和cmp与之后再和jmp来个或,表示当条件成立时跳转或者无条件跳转。

8、查找表

指令位输出换成查找表(3-8译码器),做一个映射,将指令位数缩小一下,以方便后面将指令和数据地址放到一起。注意,这个查找表只是个映射,可不是比如00对应0,01对应1。可以0000对应0101010101010101......

将输入和指令对应上,以后往查找表输入少的位数即映射出真正的指令。

9、合并内存

接下来要做的是将数据和指令放到一个内存中,所以我们往内存中写指令时,就不能像之前那样写了。我们这里是16bit内存,我们将高5bit定义为指令,将低11bit定义为数据所在的地址。这样我们一个时钟周期就不能完成一个指令操作了,因为现在的指令为 指令 + 要操作的数据所在的地址,我们第一个时钟周期需要将整个指令取出来,并将高11位(指令)放到寄存器放起来,因为还没有数据,与此同时,将数据的地址放到PC里查出数据来;第二个时钟周期运行指令。这样两个时钟周期执行一条指令被称为两个时钟周期为一个机器周期。

大体来说:取指一个周期,操作一个周期。取指这个周期就是把指令(指令+数据地址)拿出来,操作就是运行。可以用一个时钟周期加一个D触发器实现每次取上次反操作。这个不能作为真实的指令,但可以放到查找表的最高位输入,因为放到最高位,它为0时即可设置后面的位数指令全为取值,它为1可操作后面的操作指令,这样就区分开来了。有点抽象,哎。

10、简易CPU

以上的步骤已将让我们得到了一个简易的CPU,现在可以把一些输入输出提出来,以方便将CPU封装使用。

首先,CPU中的内存不能叫内存了,把它看作一个Flash闪存,然后将它的寻址位改小,这里改为8bit。原来为11bit,高出的3bit作为扩充外部存储器的使用。复用器选择完地址后,不直接交给CPU中的Flash处理了,先处理一下,这里规定这11位地址的高三位全0走CPU中的Flash,否则走外设中的存储。所以先将这11bit作一个分线,将低8bit放到Flash的地址位,然后用高三位和使能开关做处理决定这个Flash走不走这个地址(高三位先做或非操作,全0才输出1,之后分别和使能输入和使能输出做与操作并连接Flash的使能输入和使能输出)。

这个简易CPU对外暴露的管脚称为总线。分别有:控制器的输入使能 和 控制器的输出使能 作为控制总线; 11bit的寻址(3bit选择存储+地址)作为地址总线;立即数(作为输入口)和 ALU的运算结果 作为数据总线。

除了以上几个管脚外,我们的CPU在使用时还需要一个时钟输入

可以把我们的CPU使用起来,以下是CPU接了两个存储和一个终端,具体操作看图:

简易计算机的搭建

这个终端我们指定了地址不是一个范围,就是 011 00000000, 所以每一位都需要参与或非运算。一些或非前面的非运算是因为那一位需要取1。其他参考CPU内部的Flash的介绍。

11、引导分区

对于单片机来说,代码是烧录在CPU中的,所以无所谓引导不引导了。

对于PC机来说,硬盘上从上往下分为:引导区 --》 分区表(看作目录)--》C盘 / D盘 ..

有的CPU内部有一块存储空间可以写程序,作为引导(X86CPU无内部无存储,它是通过BIOS来存储这段引导程序的)。无论内存中的这段代码还是BIOS中的这段代码,它的作用是从硬盘中读取一段固定(这个大小是和CPU厂商协调好的)的数据(代码)放到内存中,硬盘中的这段代码用来执行(可抽象地看作指向)我们的操作系统,这样可以将操作系统运行起来。这样跳一下而不是直接在硬盘中将操作系统放到内存里是因为不同的操作系统内核大小不同,我们去跳到操作系统的这段程序大小是和CPU厂商协调好的,也就是CPU从硬盘中0地址读取比如32Byte大小的代码加载到内存,我们在这32Byte中写代码调用操作系统。文章来源地址https://www.toymoban.com/news/detail-749187.html

到了这里,关于简易计算机的搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【计算机视觉】对比学习综述(自己的一些理解)

    对比loss 对比学习的 loss(InfoNCE)即以最 大化互信息为目标推导而来。其核心是通过计算样本表示间的距离,拉近正样本, 拉远负样本,因而训练得到的模型能够区分正负例。 具体做法为:对一个 batch 输入的图片,随机用不同的数据增强方法生成两个 view,对他们用相同的

    2024年02月12日
    浏览(34)
  • 基于AT89C51单片机的简易计算机设计

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87715642?spm=1001.2014.3001.5503 源码获取 主要内容: 本设计是以单片机AT89C51为核心的简易计算器设计,要通过芯片AT89C51实现计算器程序运行来完成加、减、乘和除的简单计算功能。 基本要求: 1、采

    2024年02月08日
    浏览(39)
  • 大学期间计算机专业值得参加的一些优质比赛

    在大学里参加竞赛的好处是真的多,获奖不仅有荣誉,能为保研、考研和找工作加分,而且很多比赛还有不菲的奖金;即使没能获奖,比赛过程中也能提升自己的编程动手能力和团队协作能力,是一份宝贵的经历。 今天给大家推荐一波计算机专业值得参加的竞赛。 1、 ACM/I

    2024年02月16日
    浏览(112)
  • 计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型

    大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用5-利用PCA降维方法实现简易人脸识别模型,本文将介绍如何使用主成分分析(PCA)实现简易的人脸识别模型。首先,我们将简要介绍PCA的原理及其在人脸识别中的应用。接着,我们将通过实例演示如何使用Python实现

    2024年02月03日
    浏览(29)
  • 【计算机视觉】关于图像处理的一些基本操作

    图像平滑是指受传感器和大气等因素的影响,遥感图像上会出现某些亮度变化过大的区域,或出现一些亮点(也称噪声)。这种为了抑制噪声,使图像亮度趋于平缓的处理方法就是图像平滑。图像平滑实际上是低通滤波,平滑过程会导致图像边缘模糊化。 均值滤波 线性滤波,针

    2024年02月14日
    浏览(32)
  • 51单片机实现简易计算机,Keil4代码Proteus工程一步到位

    目录  前言  Proteus硬件部分 键盘 程序部分 运算代码逻辑(代码解释) LCD屏幕显示运算结果 输入部分 键值判断部分 删除按键的实现 程序执行运算 Hello,大家好。想做关于嵌入式的一些小项目已经很久了,今天借着我们课设的机会,给大家展示我自己对代码逻辑的理解,为了方

    2024年02月08日
    浏览(30)
  • 【计算机视觉】CLIP:连接文本和图像(关于CLIP的一些补充说明)

    我们推出了一个名为CLIP的神经网络,它可以有效地从自然语言监督中学习视觉概念。CLIP可以应用于任何视觉分类基准,只需提供要识别的视觉类别名称,类似于GPT-2和GPT-3的“零样本”功能。 尽管深度学习彻底改变了计算机视觉,但当前的方法存在几个主要问题: 典型的视

    2024年02月09日
    浏览(36)
  • 以后要做GIS开发的话是学GIS专业还是学计算机专业好一些?

    GIS开发其实严格来说分为前后端以及底层开发。不同的方向,代表了不同的开发语言。 所以大家首先要了解自己具体要做的岗位类型是什么,其次才是选择专业侧重点。 但是严格来说,选择某个专业,到就业方向这个过程,并不是不可逆的。意思是,假设你的专业并不适合

    2024年01月21日
    浏览(31)
  • 一、计算机视觉-快速搭建开发环境

    搭建环境Anaconda 是必不可少的,用Anaconda 我们可以很容易的部署计算机视觉开发环境(包括用到的包、和IDE等) 下面我们看下Anaconda 是什么,为什么要用Anaconda Anaconda 是一个流行的开源发行版和包管理器,主要用于数据科学、机器学习和科学计算的 Python 和 R 环境。它提供了

    2024年02月22日
    浏览(37)
  • 入门Python编程:了解计算机语言、Python介绍和开发环境搭建

    计算机语言是用来控制计算机行为的一种语言,通过它可以告诉计算机该做什么。计算机语言和人类语言在本质上没有太大区别,只是交流的对象不同。 计算机语言发展经历了三个阶段: 1. 机器语言 机器语言使用二进制编码来编写程序。 执行效率高,但编写起来麻烦。 2

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包