去年年底的时候买了一本书《兼容ARM9的软核处理器设计》,前一段时间很仔细的进行了阅读,感觉很有参考价值。作者是一位芯片设计工程师,其利用空余时间做了一个很有意思的开源项目,自己采用FPGA实现了一个兼容ARM9处理器的RTL软核。初看到这个想法的时候,我觉得很疯狂,因为想要实现一个ARM9处理器兼容的CPU不是一件容易的事情,处理器内部流水线机制、相关性的处理、各种计算单元的实现,另外还需要去验证处理器软核的正确性,需要启动Linux操作系统。所以说无论从工作量还是技术难度讲,都不是一件非常容易的事情。

阅读了作者的设计思路之后,给我最大的感受是:将处理器设计简单化了!作者对ARM指令进行了仔细的分类分析,对流水线存在的问题进行了深入分析,对计算单元进行了归一化实现。整个设计看上去显得非常简单。一共才用了1800verilog code实现了一个兼容ARM9的处理器。有人说过,将一件复杂的事情简单化不容易;将一件简单的事情复杂化容易。作者的确将一件复杂的事情简单化了,其在设计的过程中将功力都放在了分析系统、分析问题、构建模型上面。由于模型很清晰,问题在设计阶段都解决了,从而使得真正的实现过程变得很简单。

由此我想到了一些项目上的事情,如果我们的设计没有做好,急于去实现,那么我们的实现一定会存在很多的漏洞。这个我实际上已经遇到过很多次了,很多人往往会把一件本来很简单的事情搞的巨复杂,用了一堆的函数指针,定义了一个又一个对象,开辟了若干个线程/进程,通过RPC进行互相通信,而真正实现的功能却很简单。为什么一个简单的系统需要如此复杂的设计?如此复杂的设计如何保证系统的可维护性?如此复杂的设计如何解决客户遇到的问题?很多技术的确很美,但要用对地方。一个优秀的设计,最简单的技术才最美!ARM9软核处理器设计给了我们一个很好的案例,虽然,作者设计的流水线还有很大的优化空间,但是,为了达到兼容处理器的目的,很多简化设计的思想是非常可取的。

其实,这样的设计案例我觉得应该在大学中强烈推荐,学生应该仔细研读、分析、实践,让Linux操作系统在自己的CPU上跑起来!这样我们才可以对CPU理解的更加到位。