在Verilog HDL中,always块会根据敏感列表和编码综合出组合逻辑,锁存器,时序逻辑。仿真器无法验证综合出的电路是否与你的目标一致。
Systemverilog增加了特别实现过程块alway_comb, always_latch和always_ff。这些过程块减少了设计的模糊性,使得仿真器能够检查,并实现特定的硬件电路。(三种always_块均用于RTL设计。)
1 组合逻辑块 always_comb
always_comb用于产生组合逻辑:
- 隐式的,全变量敏感列表。
- 任意变量只能被一个always_comb赋值。
- 不能包含时间控制和事件控制。
- 若推断块内不是组合逻辑,可能会产生警告。
- 在时间0时,所有initial块和always块后自动触发。
always_comb
begin
if(sel)
out = a;
else
out = b;
end
2 锁存器块 always_latch
- 隐式的,全变量敏感列表。
- 任意变量只能被一个always_comb赋值。
- 不能包含时间控制和事件控制。
- 若推断块内不是锁存器逻辑,可能会产生警告。
- 在时间0时,所有initial块和always块后自动触发。
always_latch
begin
if(en)
out = a;
end
3 寄存器块 always_ff
- 在always_ff块中被赋值的变量,不能在其他过程块中被赋值。
- 不能包含时间控制。
- 包含且仅包含一个事件控制。
- 若推断块内不是时序逻辑,可能会产生警告。
always_ff@(posedge clk or negedge rst_n)
begin
if(~rst_n)
q <= 0;
else
q <= d;
end



7155

被折叠的 条评论
为什么被折叠?



