对于Verilog模块来说,它的结构由有两部分模块说明和功能描述,我们接下来看一个简单的模块!
module MUX21 (a,b,s,y);
input a,b,s;
output y;
assign y = (s ? a : b );
endmodule
以上是一个简单的二选一模块,其中的 module 是模块的起始点,与endmodule共同约束着整个模块
MUX21:是模块名,类似于c语言的函数名,如果要引用的话需要例化。
(a,b,s,y):端口列表,所有输入及所有需要输出模块的信号都要列在表中。
input和output:属于端口信号声明,端口信号声明由三个部分组成,分别是输入输出属性(input和output和inout)、信号的数据类型(wire和reg)、信号位宽([N1:N2])。
位宽不做说明的话,默认为一位。
数据类型不做说明,默认为wire型。
以上就属于模块说明,而assign属于功能描述语句,这里只有一句,越复杂的项目,这部分就越多。
功能描述语句中只用三种很常用,assign语句、always语句、底层模块调用语句(也就是例化语句目前暂不详述)。