模块的结构
构成:接口 + 逻辑功能
module block(a, b, c, d);
// 信号流向
input a, b;
output c, d;
// 逻辑功能
assign c = a | b;
assign d = a & b;
endmodule
端口定义¶
端口声明:
模块引用:
-
顺序引用
-
指定名称
模块内容¶
I/O 说明:
- 输入口:
input[信号位宽-1:0] 端口名;
- 输出口:
output[信号位宽-1:0] 端口名;
- 输入/输出口:
inout[信号位宽-1:0] 端口名;
内部信号说明:模块内用到的wire, reg类型变量的说明
功能定义:
-
assign声明
常用于描述组合逻辑
-
实例原件
要求每个实例元件的名字唯一
-
always块
既能描述组合逻辑,又能描述时序逻辑
特性:
- assign, always语句间并发,always语句内按顺序执行(always块内的语句称为顺序语句,always块称为过程块)
- 过程块(initial, always等)、连续赋值语句、实例引用并行,表示一种通过变量名相互连接的关系,在同一模块中三者秩序没有关系
- 只有连续赋值语句assign和实例引用语句可以独立于过程块而存在于模块的功能定义部分