不在复位感知 always_ff 块内复位触发器的后果是什么?
示例 1:
always_ff @(posedge clk, negedge rst) begin
if (~rst) begin
reg_a <='0;
reg_b <='0;
end else begin
if (condition_1) begin
reg_a <= some_signal;
end else if (condition_2) begin
reg_b <= some signal;
end
end
end
示例 2:
always_ff @(posedge clk, negedge rst) begin
if (~rst) begin
reg_a <='0;
end else begin
if (condition_1) begin
reg_a <= some_signal;
end else if (condition_2) begin
reg_b <= some signal;
end
end
end
示例 1 和示例 2 之间的唯一区别是,在示例 2 中,reg_b 没有任何重置条件。这个后端/综合错误的后果是什么?我有前端 RTL 设计背景,在合成方面经验很少。所以,我试图理解为什么上面的示例 2 是一个不好的做法。
一个明显的问题是 - 在示例 2 中重置 reg_b 之后将是 X。因此,如果 reg_b 用于任何控制逻辑,那么它可能会在设计中引入错误。除此之外,这还会产生什么其他问题?