从4004到core i7:处理器的进化史 (3)-1—万事开头难

时间:2014-02-19来源:摘自《果壳小组》网

  有了契约,整个解决方案就被分成了两部分:硬件和软件。只要其中的接口(interface)不变,两边其实都不大关心对面究竟在背地里搞什么名堂。我们经常见到这种接口,它就是指令集(instruction set)。

  于是在软件一方,人们渐渐觉得机器码看起来实在是太诡异了,就出现了高级语言,让编程这件非人类的事情尽量地向人类的自然语言靠拢。当然,这一切都离不开编译器(compiler)的支持。如今人们已经离软硬划分的借口很远了,远到了软件已经出现了自己的一套哲学、思考问题的范式。

  在CPU,也就是硬件的一方,人们的步伐看起来似乎要慢得多。毕竟,硬件是一件需要大量金钱和经验的工作,这导致它不可避免的不像软件那么易于上手,从业者不那么人山人海。不过,我们已经看到了至少3代的CPU,其中每一代的性能提升都是非常巨大的。我们将要看到,这种巨大的性能的提升,其本质是集成度的极大提高,源动力是电路和器件层面的。和软件相反,今天的“聪明”的CPU雄心勃勃,正在试图越过曾经神圣不可侵犯的契约,高效的完成一些以往只有编译器才能完成的优化工作。

  上面的内容说得有点远了,我们再考虑回我们的小学算术题,只不过这一次完全从CPU的角度考虑,就是下面几条指令:

  load reg1, mem1
  load reg2, mem2
  add reg1,reg2,reg3
  store mem3, reg3

  其中我们假设1和2分别存在mem1和mem2里,运算结果存在mem3里

  从上面的伪汇编码,再结合算术的类比,我们想到:

  我们必须有一张纸来记住题目和答案->CPU必须有存储器(memory)、寄存器(register)的配合

  我们必须会计算加法->CPU中必须有算术-逻辑单元(Arithmetic Logic Unit,ALU)。

  我们需要理解纸上的符号->CPU需要有指令译码(instruction decode)器

  纸上的符号被理解之后还要被我们转移到脑海中至少短暂地被记住->CPU需要有与存储器直接进行交涉的加载/存储单元(load/store unit)

  我们需要从试卷上的一大堆题目中选择一道我们将要完成的题目->CPU需要有取指(instruction fetch)单元

  上面的例子中我们已经涉及到了几乎全部的CPU子模块。漏下的可能只是分支单元(branch),I/O单元(I/O controller),以及控制上面这么多逻辑的控制器(controller)了。我们得到了第一个CPU模型,正如第一代CPU设计者们用非常straightforward的思考建造的一样。

  以上我们从空间上讨论了第一个CPU应该有些什么单元,下面我再列一下从时序上来说一个指令执行分为哪些阶段:

  IF = instruction fetch
  ID = instruction decode
  OC = operhand calculation
  EX = execution
  WB = result writeback

  将上面这5个步骤老老实实重复一遍,一条指令就执行完了。

  注意上面的MR步骤对于存储器的操作是只读的,WB步骤对于存储器的操作是只写的。你解题的时候应该不能擅自修改题目的运算数,或者抄袭一个还不存在的答案吧!!

  这第一个CPU模型虽然简陋,却能够工作。我们后续将要讨论的高性能处理器无不是处于对它的优化改良而成。

1 2 3

关键词: CPU 存储器 处理器 逻辑电路 C语言

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版