第三个阶段为调整和优化阶段, 这个阶段是龙芯2号逻辑设计的关键阶段。 与联调阶段相 比, 优化阶段发现的bug较少, 但根据对RTL进行综合以及用C模拟器进行性能分析的结果对整个设计的延迟、面积、性能进行了持续的优化。 通过初步的优化, 龙芯2号的延迟降低了一倍多, 面积降低了30%以上, 相同频率的性能提高了30%以上。 在这个阶段的每一周都充满了激动人心的改进, 深刻体会到精益求精的道理。 孔子说 “食不厌精” , 处理器设计更是如此。 用1%的工夫可以完成一个正确的设计, 但需要用99%的工夫来优化它。
在龙芯2的RTL优化过程中, 我们总结了三条经验。 第一条是精益求精的经验。 做一个正确的设计和做一个精品的设计是有很大区别的。 为了做到精益求精, 思想上要永不满足, 执着改进。 碰到复杂的问题, 不能满足于用复杂的方法来解决, 要努力把问题简单化再用简单的方法来解决。 第二条经验是在执着于细节的理解和把握的同时退后一步进行的全局的观察和思考是十分必要的。 在龙芯2号的优化中有很多都是在项目的推进过程中退后一步进行文档整理、看文章、或封闭自查时得到的启示。 对设计的微观了解和宏观把握是不可偏废的。 如果对设计的细节不做一定的了解, 则在整理文档或看文章过程都比较虚, 不会有灵感出现; 反之, 如果过于执着于细节, 则可能只见树木, 不见森林, 忽略了一些大的改进。 第三条经验是以事实为依据的经验。 对设计进行持续的性能分析、物理综合、以及仿真验证为龙芯2号的改进和改正提供了大量了事实依据。 在根据事实进行设计和改进时, 一定要在大量的事实和数据的基础上 (小量的、不具有代表性的不行) 对事实进行深入的分析, 弄清楚隐藏在这些事实后面的、本质的东西, 这样做的设计和改进才是最优的。
与RTL设计和验证同时进行的是FPGA验证环境的建设。 在这个方面我犯了个错误。 由于觉得有了龙芯1号的FPGA验证的经验, 龙芯2号的FPGA验证应该没有问题, 因此只让范宝峡一个人负责FPGA验证工作。 没想到由于龙芯2号的规模较大, 设计也更加复杂, 导致FPGA验证困难重重。 主要困难是由于在一片FPGA中放不下, 需要多片FPGA, 而且多片FPGA之间互连信号太多需要在每片FPGA接口处进行倍频传输。 此外由多发射引起的多端口寄存器堆也难以在FPGA中实现。 到4月下旬我才意识到FPGA验证方面投入的力量很不够并加强了这方面的力量。 直到6月下旬龙芯2号的第一个芯片tapeout之前的半个月, 才完成FPGA验证工作并通过FPGA验证及时地发现了设计中的一个错误。