芯片现在做到哪一步了? 我们有了256字节的RAM,有了寄存器、总线。我们把CPU框图展现出来(红框表示已经做完的部分): R0\R1\R2\R3是4个通用功能寄存器。TMP\ACC是一个关键器件(马上揭晓)的输入、输出寄存器。其中ACC通过总线既做输入,也做输出。ACC全称“accumulate ”。 现在我们的芯片还只能支持“通过总线读写寄存器、内存”,其他什么都干不了。下面我们就给它加上最关键的功能:ALU。 ALUALU全称“arithmetic and logic unit”(算数运算和逻辑运算单元)。 算数运算:加、减、乘、除、左移、右移。(卷积等复杂的数学运算,我们这个芯片就不支持了。DSP芯片干的就这活儿)。 逻辑运算:大于、小于、等于、非、或、与、异或。(同样也不支持集合运算等复杂逻辑运算。热门的NPU芯片就能做复杂的逻辑运算)。 有了ALU,芯片才算有了“能力”,要不然芯片只能读、写内存,那还要它干啥。 1位加法从最简单的问题出发,我们先看下如何完成1位的加法。 先只考虑:0+0=0,0+1=1,1+1=0。很容易想到如下电路: 1+1=0的同时,还要产生一个进位。我们得把产生的进位考虑进去,再加一个输出表示是否有进位: 0+0=0,我们只考虑了最低位计算的情况,如果是高位计算,低位有进位怎么办?再加一个输出表示低位是否有进位: 完事。是不是很easy,从简单到复杂。我们会一直遵循这个方法解决问题。 8位加法8位加法就简单了,并联我们的1位加法电路。把前一个的移位输出作为下一个的输入。 左移这个貌似最简单。无脑画电路图: 其他数学运算减、乘、除最后都可以用乘法和位移运算搞定。大家可以随便找本计算机教科书来参考。 逻辑运算都有现成的门电路可以使用。只不过数据宽度记得是8(总线的数据宽度)。 组合所有运算电路ALU可以支持多种运算,那种运算实际生效呢?还记得我们用4X16译码器选择RAM中的字节。同样我们可以利用译码器作为开关位,选中那种运算实际生效。 ALU完整电路评论: 看到这篇文章很感慨!多年前深圳户口调干考试,计算机类试卷的最后一题,就是给你一些运算电路,加法器,ALU什么的,让你画线设计连成一台8位CPU。幸好我学习了三天微机原理(只有三天时间,以前我学机械工程的,跨行业考试),仔细看过CPU结构。后来刚好通过分数线顺利调入深圳。真是险过剃头。 |
|
来自: 山峰云绕 > 《计算机科学(体系结构原理等)》