3.1 数字逻辑电路设计与Verilog代码开发

掌握数字逻辑电路的知识、具备Verilog语言编程能力是完成本书中CPU设计的基础。在以往的教学培训中,我们发现大部分初学者对数字逻辑电路的知识掌握得还不错,毕竟数字逻辑电路是大部分工科生本科阶段必学的一门课程,但是Verilog语言编程水平就参差不齐了。不少学生实验中耗费时间过多就是因为Verilog编程能力不过关。对于这个现象,我们一度很困惑,因为Verilog语言的语法很简单,而且设计CPU时只需要使用其中的一个子集(称为“可综合Verilog子集”),为什么那么多学生掌握得不好呢?后来,我们想明白了,语言只是一种手段,对编程语言的掌握程度与语言本身无关。比如,C语言的语法很简单,用很短的时间就能学会,但在短时间内学会语法就能成为C语言编程高手吗?当然不可能。高水平的C语言编程人员往往在数据结构和算法方面有良好的基础,并且透彻掌握了编译、汇编、链接等方面的知识,如果编写的软件规模比较大则还需要具有一定的软件工程开发经验。Verilog语言也是一样,要想达到比较高的Verilog编程水平,首先要有电路设计的意识,其次要知道不同的电路如何用Verilog语言来描述,还要知道EDA工具在仿真、综合、实现的时候如何对所编写的Verilog代码进行处理。从这个角度来看,学好Verilog语言确实不容易。

如果你原来只是对Verilog有初步的了解和认识,我们并不指望你学完这一章就能顿悟,你还是需要大量的动手实践才能体会Verilog编程中的各种细节。所以,这一节将以实例讲解为主要形式,先给大家提供一个模仿的基础,再通过后续的多次实践,让大家在动手过程中不断体会,最终学会用Verilog语言写出一个可综合的数字逻辑电路。即使你认为自己的Verilog编程水平已经很不错,我们也建议你参考一下本节中代码的风格。从我们的工程实践经验来看,这种代码风格是合理且高效的。如果你已经有很好的Verilog编程能力,想继续精进,那么我们推荐你看看Stuart Sutherland和Don Mills编写的Verilog and System Verilog Gotchas101 Common Coding Errors and How to Avoid Them,该书的内容没有丰富的实战经验是写不出来的,你可以从该书中学习到丰富的工程实践知识。