1.always_ff
module example_always_ff (
input logic clk,
input logic rstn,
input logic a,
output logic q
);
always_ff @(posedge clk or negedge rstn) begin
if (!rstn) begin
q <= 0; // 使用非阻塞赋值
end else begin
q <= a; // 使用非阻塞赋值
end
end
endmodule
- 敏感列表:明确要求只能在时钟边沿或复位信号变化时触发。
- 赋值方式:只允许使用非阻塞赋值(<=),确保在时钟边沿时更新信号的行为符合时序逻辑的预期。一般推荐在时序逻辑中使用非阻塞赋值(<=)
2. always
module example_always (
input logic clk,
input logic rstn,
input logic a,
output logic q
);
always @(posedge clk or negedge rstn) begin
if (!rstn) begin
q = 0; // 使用阻塞赋值
end else begin
q = a; // 使用阻塞赋值
end
end
endmodule
- 敏感列表:指定时钟和复位信号。
- 赋值方式:使用了阻塞赋值(=),这可能导致在同一时钟周期内出现时序问题