Ao escrever o Verilog, uso uma variedade de "linters" que fornecerão erros e avisos. Estes são meu simulador (ModelSim), meu compilador (Quartus II) e um linter (Verilator). Juntos, tenho uma boa cobertura para armadilhas comuns, como diferenças de tamanho de ônibus e travas inferidas.
Infelizmente, nenhuma das três ferramentas detecta registros que não estão sendo redefinidos. Para entender o que quero dizer, considere o seguinte.
reg a;
reg b;
always @(posedge clk_i or posedge rst_i) begin
if(rst_i) begin
a <= 1'b0; // Reset a
// Ooops, forgot to reset b
end else begin
// Do stuff with a and b
end
end
Como posso fazer com que minhas ferramentas detectem automaticamente registros que não estão sendo redefinidos?