| 简单的Verilog HDL程序介绍 17
 第三章 Verilog HDL 基本语法
 --------------------------------------------------------------------------------------------------------------------------------------------
 ------
 下面先介绍几个简单的Verilog HDL程序,然后从中分析Verilog HDL程序的特性。
 例[3.1.1]:module adder ( count,sum,a,b,cin );
 input [2:0] a,b;
 input cin;
 output count;
 output [2:0] sum;
 assign {count,sum} = a + b + cin;
 endmodule
 这个例子通过连续赋值语句描述了一个名为adder的三位加法器可以根据两个三比特数a、b和进位
 (cin)计算出和(sum)和进位(count)。 从例子中可以看出整个Verilog HDL程序是嵌套在module
 和 endmodule 声明语句里的。
 例[3.1.2]:module compare ( equal,a,b );
 output equal; //声明输出信号equal
 input [1:0] a,b; //声明输入信号a,b
 assign equal=(a==b)?1:0;
 /*如果a、b 两个输入信号相等,输出为1。否则为0*/
 endmodule
 这个程序通过连续赋值语句描述了一个名为compare的比较器。对两比特数 a、b 进行比较,如a与b
 相等,则输出equal为高电平,否则为低电平。在这个程序中,/*........*/和//.........表示注释
 部分,注释只是为了方便程序员理解程序,对编译是不起作用的。
 例[3.1.3]:module trist2(out,in,enable);
 output out;
 input in, enable;
 bufif1 mybuf(out,in,enable);
 endmodule
 这个程序描述了一个名为trist2的三态驱动器。程序通过调用一个在Verilog语言库中现存的三态驱
 动器实例元件bufif1来实现其功能。
 例[3.1.4]: module trist1(out,in,enable);
 output out;
 input in, enable;
 mytri tri_inst(out,in,enable);
 //调用由mytri模块定义的实例元件tri_inst
 endmodule
 module mytri(out,in,enable);
 output out;
 input in, enable;
 assign out = enable? in : 'bz;
 endmodule
 这个程序例子通过另一种方法描述了一个三态门。在这个例子中存在着两个模块。模块trist1调用由
 模块mytri定义的实例元件tri_inst。模块trist1是顶层模块。模块mytri则被称为子模块。
 通过上面的例子可以看到:
 18
 第三章 Verilog HDL 基本语法
 --------------------------------------------------------------------------------------------------------------------------------------------
 ------
 • Verilog HDL程序是由模块构成的。每个模块的内容都是嵌在module和endmodule两个
 语句之间。每个模块实现特定的功能。模块是可以进行层次嵌套的。正因为如此,才可
 以将大型的数字电路设计分割成不同的小模块来实现特定的功能,最后通过顶层模块
 调用子模块来实现整体功能。
 • 每个模块要进行端口定义,并说明输入输出口,然后对模块的功能进行行为逻辑描述。
 • Verilog HDL程序的书写格式自由,一行可以写几个语句,一个语句也可以分写多行。
 • 除了endmodule语句外,每个语句和数据定义的最后必须有分号。
 • 可以用/*.....*/和//.......对Verilog HDL程序的任何部分作注释。一个好的,有使
 用价值的源程序都应当加上必要的注释,以增强程序的可读性和可维护性。
 |