Detectar registros que no se reinician

8

Al escribir Verilog, utilizo una variedad de "linters" que darán errores y advertencias. Estos son mi simulador (ModelSim), mi compilador (Quartus II), junto con un linter (Verilator). Juntos, tengo una buena cobertura para las fallas comunes, como los desajustes en el tamaño del bus y los cierres inferidos.

Lamentablemente, ninguna de las tres herramientas detecta registros que no se están restableciendo. Para ver lo que quiero decir, considere lo siguiente.

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

¿Cómo puedo hacer que mis herramientas detecten automáticamente los registros que no se están restableciendo?

    
pregunta Randomblue

4 respuestas

3

Ninguna de las herramientas que mencionaste es una herramienta de alineación real. Se supone que estas herramientas no le brindan una buena cobertura de líneas.

Vi dos herramientas comerciales de linting y ambas tenían reglas para detectar fracasos que no se restablecen.

Veo tres opciones:

  1. Si la respuesta de David Kessner funciona para usted, es un camino a seguir.
  2. Obtenga una herramienta de alineación decente que hará el trabajo.
  3. Escriba un script que detectará los flops no restablecidos.

Ahora, # 2 puede no ser tan simple. No sé si hay buenos dinteles gratuitos, y los profesionales son caros y le llevará mucho tiempo configurarlos.

# 3 es el enfoque que usaría. Si conoces algún lenguaje de scripting (Perl, Python, ...) te llevará un día como máximo escribir un script que busque fracasos no restablecidos. Si no conoce ningún lenguaje de scripting, hay StackOverflow donde puede solicitar ayuda, unos días y listo. Esto también agregará otra herramienta a su caja de herramientas personal que es muy valiosa entre los diseñadores de aplicaciones para usuario: escribir scripts de procesamiento de texto.

¡Buena suerte!

    
respondido por el Vasiliy
4

Cuando ejecuto Modelsim en mis diseños VHDL, me da advertencias a Time = 0ps sobre la lógica con señales de entrada de tipo 'X' o 'U'. Olvido el mensaje de advertencia exacto. Pasar por estas advertencias puede indicarme lo que no he inicializado.

    
respondido por el user3624
1

Confío en las pruebas funcionales en lugar de herramientas de alineación para esto, tiendo a alternar el reinicio y reproducir partes del banco de pruebas. Si el dispositivo funciona correctamente después de reiniciar, entonces, o bien ha restablecido el espacio de estado lo suficiente, ¡o su banco de pruebas no es bueno!     

respondido por el shuckc
0

A veces, las herramientas de diseño emitirán una serie de informes que le proporcionarán todo tipo de información interesante. Por ejemplo, Xilinx podría llamar a esto un Informe de Mapa, que le indica qué componentes lógicos se asignaron a qué componentes físicos.

En el ejemplo anterior, reg a se asignaría a un FDCE (Flip flop, D, con Borrar asíncrono y reloj habilitado), mientras que reg b se asignaría a un FDE (Flip flop, D, y reloj habilitado) . Esto le diría que reg b no tiene reinicio.

    
respondido por el ajs410

Lea otras preguntas en las etiquetas