分享

1.6:从芯片说起~完成你的第一个芯片

 山峰云绕 2022-01-25

https://m.toutiao.com/is/LjYJMyy/?=1.6 


完成1.3、1.4、1.5之后,我们就只差“根据时钟滴答完成6个操作”,就可以做出来自己的芯片。下面,我们就完成这个芯片的核心管理者:Control Section

Control Section控制了芯片内部所有已有的器件。比如IAR寄存器的S开关、E开关。还记得S\E开关分别是干啥的么?S是设置使能开关,E是输出使能开关。

时钟滴答

最简单的时钟电路:

Control Section控制了所有寄存器的S\E开关,但是所有寄存器的开关肯定是用到的时候才能开启,不能常开。所以我们采用如下过程生成clock s、clock e两个时钟信号:

首先,借助线路的延迟,我们将clk延迟1/4个周期得到clock d:

然后利用或门、与门,我们生成clock e、clock s:

在一个时钟周期内,只有寄存器A的E开关和寄存器B的S开关同时为高电平时,寄存器A的内容才会复制到到寄存器B里面。

门电路搭建计步器

怎么讲了半天没讲到6个步骤是怎么循环执行的?别着急,马上就来。

按照我们的要求,步进器要完成下面的功能:有6个输出,每个中滴答有且只能有一个输出为高电平(表示选中),且要能够循环操作。

废话不多说,上电路:

可以看到随着时钟滴答,step1、2、3、4、5、6、7依次变为高电平。

如何得到一个循环呢?我们来个取巧的方案:

当7位为高电平的时候,就复位一下:(妥妥浪费一个时钟周期)

执行ADD指令

有了计步器,我们就可以考虑把计步器的6个输出和对应的器件的s、e开关连接起来,执行每个时钟滴答应该完成的动作:

左边的寄存器输出使能,右边的寄存器设置使能。以计步器的输出1位高电平使能为例讲解:此时bus 1的e开关打开,IAR寄存器的e开关打开,MAR寄存器的s开关打开,ACC寄存器的s开关打开。通过总线,IAR的值传递给了ACC\MAR。bus 1的输出直连传递给ALU。

还记得这个是啥么?

  1. 获取指令地址,同时“PC自增1”。复制IAR寄存器。复制到MAR(RAM地址寄存器,还记得么),同时也复制到ALU的输入:ACC寄存器。使能bus1寄存器(一个神奇的魔鬼数字1,和PC自增1联系起来了)。!!!对于step2\step3大家可以自己分析。

对于执行ADD指令,计步器这么连接:

第4步:R1寄存器的值被设置到了TMP寄存器中。

第5步:R0寄存器的值被设置到了ACC寄存器中

第6步:ACC寄存器的值被设置到了R0寄存器。

完整电路图

完整的连线,需要遍历所有指令连接一遍计步器的输出。前面ADD命令我们已经完成了,其他指令也就很简单了。大家可以自己来一遍

你的第一个芯片

你的第一个芯片就这样完成了,后面添加I\O输出、显示也不过是添加新的寄存器和指令而已。

附一个JS做得CPU模型网站:

http://www./but_how_do_it_know_cpu_model.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多