模块(module)是Verilog的基本描述单位,用于描述某个设计的功能或结构,及其与其他模块通信(连接)的外部端口。
Verilog程序由关键词module
和endmodule
进行定义。
定义模块的步骤:
- 定义模块的端口
- 定义模块内部连接到端口的信号类型
- 定义内部信号
- 描述模块内部实现的功能
定义端口:
端口的类型:input、output
Scalar (single bit) - 不需要给出信号的位数
verilog
input cin;
Vector (multiple bits) - 需要定义具体的位数,范围从左往右
verilog
output [7:0] OUT;
结构描述
一般使用内部元件、自定义的下层模块对电路进行描述。
数据流描述
一般使用连续赋值assign
语句描述。
verilog
assign [delay] LHS_net = RHS_ expression
行为描述
一般使用Initial
或Always
语句描述。
- initial语句:此语句只执行一次。
- always语句:此语句总是循环执行, 或者说此语句重复执行。
只有寄存器类型数据能够在这两种语句中被赋值。寄存器类型数据在被赋新值前保持原有值不变。所有的初始化语句和always
语句在0时刻并发执行。
来自always
语句和initial
语句(只有寄存器类型数据可以在这两种语句中赋值)的值能够驱动门或开关。
而来自于门或连续赋值语句(只能驱动线网)的值能够反过来用于触发always
语句和initial
语句。