0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用ALU,RAM,寄存器打造一个CPU 2

jf_78858299 来源:北洋洋洋 作者:北洋 2023-01-30 15:56 次阅读

解码阶段

现在我们拿到了指令, 「前四位是操作码」 对应的是指令表中的LOAD A指令。对应的描述是**「将RAM的值放入寄存器A」**

「后四位1110是RAM的内存地址」 ,转成十进制就是14.

控制单元

指令通过”控制单元“进行 「解码」 。解码的作用就是判断这个操作码对应的操作是什么(通过少量的逻辑门即可判断)

针对不同的操作码有对应的指令判断电路从而执行不同的操作。例如下面这个就是检查操作码是不是LOADA(0010)指令。

1675065084(1).png

执行阶段

指令寄存器拿到数据DATA后通过控制单元进行解码,现在我们知道了这个是LOADA指令,就可以进行执行阶段了

  1. 「打开RAM允许读取线」 :我们将检查LOADA指令的电路连接到RAM的READ ENBALE中( 「如果LOADA输输出为1那么READN ENANLE也是1因此就会打开RAM的允许读取线」 ),「并把地址14传入过去。」
  2. 「读取RAM 对应地址的值」 :RAM拿到地址14上的值,0000 0001也就是十进制的三
  3. 「RAM DATA线连接所有的寄存器」 :LOAD_A指令代表这个值存储在A寄存器中并不影响其他寄存器。因此需要将RAM读出来的值给到寄存器,所以**「RAM的DATA数据线需要将所有的寄存器都连接起来(DATA线既可以用来做输入又可以用来做输出使用)。」**
  4. 「打开指定寄存器的允许输入线」 :用检查“是否为LOADA指令的电路” 「打开寄存器A的允许写入线」 (因为是LOADA指令,所以需要将A寄存器的允许写入打开),这样就将RAM中地址为14的值输出保存到了寄存器A中。

1675065167(1).png

  1. 「取下一条指令指令地址寄存器+1」 :执行阶段结束。开始下一个取指令阶段(读取0001的RAM地址到指令寄存器中,然后在解码执行........之后一直重复这个过程)

抽象--控制单元

上面解释的只是一个LOADA指令,「不同的指令由不同的逻辑电路解码,这些逻辑电路会配置CPU内的组件来执行对应操作。这些逻辑电路太复杂我们可以把整个逻辑电路封装为上面所说的控制单元。」

小结

也就是下图中的线路。可以看到控制单元 「链接了所有的寄存器」 (用于存放和读取数字),和RAM链接的是 「允许读取和允许输入线」 (READ ENABLE WRITE ENABLE),还有一条线是**「ADDRESS INPUT」** ,这条线是用来告知使用的是16个地址空间中的哪个地址(比如之前的14)

1675065144(1).png

上面解释了指令表中的LOADA指令,LOADB指令和LOADA原理一致,包括STOREB也是只不过是相反过来 「打开寄存器的允许读取和RAM的允许写入传入地址最后将寄存器的值通过DATA线给到RAM对应地址」 。但是ADD指令有些不同,我们看下这个操作码是如何做处理的。

参考资料

[1]https://juejin.cn/post/7134166674160222221/:https://juejin.cn/post/7134166674160222221/

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5308

    浏览量

    119980
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10824

    浏览量

    211095
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1367

    浏览量

    114517
  • ALU
    ALU
    +关注

    关注

    0

    文章

    33

    浏览量

    13075
收藏 人收藏

    评论

    相关推荐

    解析CPU中的寄存器

    8位寄存器在16位寄存器中,而16位寄存器在32位寄存器中。
    发表于 09-19 10:10 3949次阅读

    闪存存储寄存器吗?_寄存器和存储的区别

    闪存存储寄存器吗? 很明显不是 ,属于储存一个
    发表于 10-11 17:12 1.2w次阅读

    寄存器变量

    C语言中使用关键字register来声明局部变量为寄存器变量。寄存器变量的值会被存放在CPU寄存器中,每当需要使用它们时,CPU就可以直接
    发表于 06-03 10:13 2339次阅读

    8051单片机中的寄存器是算CPU还是RAM

    可以划分CPURAM部分,但CPURAM有交叉的部分(比如寄存器组等) 4、CPU部分
    发表于 06-14 15:42 4007次阅读

    关于Block RAM寄存器输出

    关于Block RAM寄存器输出,我们在《通过RTL改善时序的技巧之Block RAM的输出》中介绍过。如果我们在时序报告中关键路径上看到这样条信息: 在第
    的头像 发表于 03-26 15:50 1792次阅读
    关于Block <b class='flag-5'>RAM</b>的<b class='flag-5'>寄存器</b>输出

    GPIO寄存器

    每组IO口有10寄存器组成,如果芯片有GPIOA~GPIOI,9组那么共有90寄存器如果
    发表于 12-08 17:06 5次下载
    GPIO<b class='flag-5'>寄存器</b>

    如何在VHDL中实现简单的寄存器

    寄存器是设备中用于存储数据的常见电子元件。这些是最小的数据保存元素,用于存储 CPU 正在处理的操作数或指令。有不同类型的寄存器,即指令寄存器、程序
    发表于 07-29 16:48 4544次阅读
    如何在VHDL中实现<b class='flag-5'>一</b><b class='flag-5'>个</b>简单的<b class='flag-5'>寄存器</b>

    如何使用ALU,RAM,寄存器打造CPU 1

    CPU简介 **「计算机的心脏是中央处理单元,简称“CPU”」** 。这篇文章就利用前几篇文章中提到过的ALU,RAM,寄存器组件做
    的头像 发表于 01-30 15:56 801次阅读

    如何使用ALU,RAM,寄存器打造CPU 3

    在指令表中我们看到ADD指令的后四位 **「寄存器 OR RAM地址列中,列出来的不是之前的RAM地址而是两位的寄存器ID」** 。两位可
    的头像 发表于 01-30 16:01 1101次阅读
    如何使用<b class='flag-5'>ALU</b>,<b class='flag-5'>RAM</b>,<b class='flag-5'>寄存器</b><b class='flag-5'>打造</b><b class='flag-5'>一</b><b class='flag-5'>个</b><b class='flag-5'>CPU</b> 3

    cpu寄存器和存储的区别

    cpu寄存器和存储的区别 寄存器存在于CPU中,速度很快,数目有限;存储是内存,速度稍慢,但
    发表于 03-21 15:12 1360次阅读

    计算机寄存器和存储

    存储,CPU都在片内,所以寄存器是片内RAM
    发表于 03-21 15:22 2016次阅读

    寄存器和存储如何区分

    寄存器是计算机硬件中最快、最小、最常用的存储。它是CPU内部的存储,通常作为指令和数据的存储和暂存空间。在CPU中,
    的头像 发表于 04-09 18:43 1.4w次阅读

    用于RISC-V处理的三重模块化冗余ALU寄存器文件的设计示

    用于RISC-V处理的三重模块化冗余ALU寄存器文件的设计示例 演讲ppt分享
    发表于 07-17 16:34 2次下载

    CPU的6主要寄存器

    CPU寄存器是中央处理内的组成部分,是有限存贮容量的高速存贮部件。寄存器CPU内部的元件,包括通用
    的头像 发表于 02-03 15:15 3858次阅读

    寄存器分为基本寄存器和什么两种

    寄存器是计算机中用于存储数据的高速存储单元,它们是CPU内部的重要组成部分。寄存器可以分为基本寄存器和扩展寄存器两种类型。
    的头像 发表于 07-12 10:31 1099次阅读