- 在Verilog硬件描述语言(HDL)中,信号的赋值方式主要分为两种:连续赋值和过程赋值。每种赋值方式有其独特的用途和语法,并适用于不同类型的电路描述。
1. 连续赋值(Continuous Assignment,assign 和=)
- 连续赋值主要用于描述
组合逻辑
,通常与assign
关键字一起使用。它在顶层模块或过程块外部进行,用于对wire
类型的信号赋值。
特点:
- 组合逻辑:连续赋值用于实现组合逻辑,表示输出信号始终等于表达式的值。
- 实时更新:当右边的表达式中的任何信号发生变化时,左边的信号会立即更新。
- 信号类型:通常用于
wire
类型信号。
示例
示例 1:
module blink_led(
input wire a,
output wire b
);
assign b = a;
endmodule
示例 2:
module combinational_logic (
input wire a,
input wire b,
output wire c
);
// c 始终等于 a 和 b 的逻辑与
assign c = a & b;
endmodule
2. 过程赋值(Procedural Assignment)
- 过程赋值用于过程块(如
always
或initial
块)内,适用于描述组合逻辑或时序逻辑
。过程赋值可以进一步分为两种:阻塞赋值(=
)和非阻塞赋值(<=
)。
2.1 阻塞赋值(Blocking Assignment,=
)
特点 :
- 顺序执行:阻塞赋值按书写顺序执行,一个语句必须在前一个语句完成后才能执行下一个语句。
- 阻塞行为:在赋值完成之前,后续的语句不会执行。相当于“阻塞”了后续操作。