赋值
赋值方式
- 非阻塞赋值:<=
时序逻辑一定用非阻塞赋值,比如:always 模块的敏感列表包含时钟。 - 阻塞赋值:=
组合逻辑一定使用阻塞赋值,比如:always 模块的敏感列表不包含时钟,或者 assign 模块
赋值语句
- assign
称为持续赋值语句,对应的信号犹如固化的逻辑门电路实时反映。 - always
称为过程赋值语句,对应的信号改变需要一定触发条件。
信号类型
- 连线型(Net Type)
定义为 wire,默认初始值为高阻态 ‘Z’ - 寄存器型(Register Type)
定义为 reg,默认初始值为不定态 ‘X’
声明为input output
的参数都默认为 wire 类型,TestBench 必须使用 wire 类型作为输出。
赋值规则
assign 定义的组合逻辑只能对 wire 类型赋值,而且必须是阻塞赋值;always、initial 定义的逻辑只能对 reg 类型赋值。
always 模块中使用相同的赋值方式;同一变量不要在不同的 always 语句赋值。
执行方式
Verilog 的语句执行分为并行执行和顺序执行,执行方式取决于模块语句的赋值方式。
阻塞赋值的语句为顺序执行,非阻塞赋值的语句为并行执行。