位宽不匹配问题
- 信号或操作数的位宽不匹配,可能导致仿真或综合错误。
module top (
input wire [3:0] a,
output wire [7:0] b
);
assign b = a;
endmodule
case 语句中没有覆盖所有情况
module top (
input wire [1:0] sel,
input wire [7:0] a,
input wire [7:0] b,
input wire [7:0] c,
output reg [7:0] y
);
always @(*) begin
case (sel)
2'b00: y = a;
2'b01: y = b;
// 缺少默认分支,未定义的 sel 值会导致 y 的值不确定(可能为高阻态或保持旧值)。
// 默认分支:覆盖所有未定义的情况 default: y = c;
endcase
end
endmodule
- case 语句中没有覆盖所有情况,如下图综合工具可能会推断出锁存器(Latch),以保持 y 的旧值,导致设计行为不符合预期。
- 使用default: