Verilog语言可以有多种方式来描述硬件,同时,使用这些描述方式,又可以在多个抽象层次上设计硬件,这是Verilog语言的重要特征。
在Verilog语言中,有以下3种最基本的描述方式:
-
- 数据流描述:采用assign连续赋值语句
- 行为描述:使用always语句或initial语句块中的过程赋值语句(推荐掌握)
- 结构化描述:实例化已有的功能模块或原语
以一个4位全加器为例:
|
|
|
module Full_Add_4b_1( A, B, Cin, Sum, Cout ); input[3:0] A; input[3:0] B; input Cin; output[3:0] Sum; output Cout; assign {Cout, Sum} = A + B + Cin; endmodule |
module Full_Add_4b_2( A, B, Cin, Sum, Cout ); input[3:0] A; input[3:0] B; input Cin; output[3:0] Sum; output Cout; reg [3:0] Sum; reg Cout; always @(A or B or Cin) begin {Cout, Sum} <= A + B + Cin; end endmodule |
`include "Full_Add_4b_1.v" module Full_Add_4b_3( A, B, Cin, Sum, Cout ); input[3:0] A; input[3:0] B; input Cin; output[3:0] Sum; output Cout; //实例化全加器 Full_Add_4b_1 FA0( A, B, Cin, Sum, Cout ); endmodule |
|
下面逐一对这些描述方式进行介绍:
数据流描述
在数字电路中,信号经过组合逻辑时会类似于数据流动,即信号从输入流向输出,并不会在其中存储。当输入发生变化时,总会在一定时间以后体现在输出端。同样,我们可以模拟数字