这篇的重点是讲解如何使用多文件工程。伴随着学习的深入,编写的代码量会变得越来越大,尤其是当工程中有相互调用的模块关系的时候,如果还使用一个文件描述整个工程,就会使得文件变得非常的长而且难以查阅。
这篇新建一个名为 add4 的工程,目标是设计一个由四个一位全加器构成的四位加法器。在 verilog 语法中可以直接使用 + 运算符来构建加法器,当然在实际工程中生成一个加法器既不需要这么多工作也不需要这么麻烦,但这篇存在的价值是作为多文件工程的练习。
一位全加器的代码如下:
在 Quaruts 工程有两种方法调用其他文件中的模块,原理图连接和顶层模块例化。
方法一、原理图法,这种方法是先把需要调用的模块生成一个符号文件( .bsf ),绘制一个原理图文件并把它设为顶层文件,把自己生成的符号文件添加到原理图中并进行必要的连接。
前面说了 add4 是我们的项目名,为了是工程顺利编译通过,所以 add4 应该是我们的顶层模块名(使用原理图作为顶层文件不需要这个要求)这个 full_add 只是个底层的模块,所以把这个变成一个符号文件,在我们在顶层文件中调用他。如图,Create Symbol File for Current File(从这个文件创建一个符号文件),而 Set as Top-Level Entity 的意思就是设文件为顶层模块了。
注:生成的符号文件是不能独立通过编译的,在综合时原 verilog 文件仍然会被使用,在这里生成符号文件后 full_add.v 仍然不能删除。
新建空白原理图,在编辑器中双击左键打开下图中的对话框,如果上图中的文件创建成功,就会在 Project 下找到同名的符号文件。
Quaruts 和 Protel 这些绘图软件一样可以用 网络标号 来连接器件,具体方法是在导线上单击右键,然后修改网络标号。
注:在原理图中总线是用 两个英文句号来表示,而不是 verilog 里的冒号,像这样 [3..0] 。
画好了应该是这样子的:
把上图中的原理图文件设为项目的顶层文件就可以作为一种调用其他模块的方法了,这种方法适用于比较复杂的场合。
方法二、使用模块例化法,如图新建一个名为 add4.v 的 verilog 文件,此外这个代码中包括了原理图中忘记了的溢出标志位。
代码如下:
参照下图,理解上图代码中模块的连接方式(这张图不能用于项目,只作为示意):
在工程中把 add4.v 设为项目的顶层文件,同样可以实现和方法一中原理图类似的模块调用。