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?
Respostas:
Nenhuma das ferramentas que você mencionou é uma ferramenta de aprendizado real. Essas ferramentas não devem fornecer uma boa cobertura de fiapos.
Vi duas ferramentas comerciais de fiapos e ambas tinham regras para detectar flops não redefinidos.
Eu vejo três opções:
Agora, o número 2 pode não ser tão simples. Não sei se existem bons aplicativos gratuitos por aí, e os profissionais são caros e levarão muito tempo para você configurar.
# 3 é a abordagem que eu usaria. Se você conhece alguma linguagem de script (Perl, Python, ...), você precisará de um dia no máximo para escrever um script que procure flops não redefinidos. Se você não conhece nenhuma linguagem de script, há o StackOverflow onde você pode pedir ajuda - alguns dias e está pronto. Isso também adicionará outra ferramenta à sua caixa de ferramentas pessoal, que é muito valorizada entre os designers de front-end - escrevendo scripts de processamento de texto.
Boa sorte!
fonte
Quando executo o Modelsim nos meus projetos de VHDL, ele me dá avisos em Time = 0ps sobre a lógica com sinais de entrada do tipo 'X' ou 'U'. Eu esqueço a mensagem de aviso exata. Passar por esses avisos pode me dizer o que não inicializei.
fonte
Confio nos testes funcionais, em vez de nas ferramentas de fiapos, pois costumo alternar as redefinições e reproduzir novamente as partes do banco de testes. Se o dispositivo funcionar corretamente após a redefinição, você redefiniu o espaço de estado o suficiente, ou sua bancada de testes não é boa!
fonte
Às vezes, as ferramentas de design produzem uma série de relatórios que fornecem todos os tipos de informações interessantes. Por exemplo, o Xilinx pode chamar isso de Relatório de Mapa, que informa quais componentes lógicos foram mapeados para quais componentes físicos.
No exemplo acima, reg a seria mapeado para um FDCE (Flip flop, D, com Clear assíncrono e clock Enable), enquanto reg b seria mapeado para um FDE (Flip flop, D e clock Enable). Isso indica que o registro b não foi zerado.
fonte