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。 ![]() 还记得这个是啥么?
对于执行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 |
|
来自: 山峰云绕 > 《计算机科学(体系结构原理等)》