Cuando escribo 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 problemas comunes, como desajustes de tamaño de bus y cierres inferidos.
Desafortunadamente, ninguna de las tres herramientas detecta registros que no se están restableciendo. Para ver a qué me refiero, 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 registros que no se restablecen?
Respuestas:
Ninguna de las herramientas que mencionó es una verdadera herramienta de enlace. No se supone que estas herramientas le brinden una buena cobertura.
Vi dos herramientas comerciales de linting y ambas tenían reglas para detectar fracasos sin reinicio.
Veo tres opciones:
Ahora, el # 2 puede no ser tan simple. No sé si hay buenos linters gratuitos, y los profesionales son caros y te tomará mucho tiempo configurarlos.
# 3 es el enfoque que usaría. Si conoce algún lenguaje de secuencias de comandos (Perl, Python, ...), le llevará un día como máximo escribir una secuencia de comandos que busque fracasos no reiniciados. Si no conoce ningún lenguaje de secuencias de comandos, hay StackOverflow donde puede solicitar ayuda, unos días y ya está. Esto también agregará otra herramienta a su caja de herramientas personal que es muy valorada entre los diseñadores front-end: escribir scripts de procesamiento de texto.
¡Buena suerte!
fuente
Cuando ejecuto Modelsim en mis diseños VHDL, me da advertencias en Time = 0ps sobre la lógica con señales de entrada de tipo 'X' o 'U'. Olvidé el mensaje de advertencia exacto. Revisar estas advertencias puede decirme lo que no he inicializado.
fuente
Me baso en pruebas funcionales en lugar de herramientas de linting para esto, tiendo a alternar restablecer y reproducir partes del banco de pruebas. Si el dispositivo funciona correctamente después del reinicio, entonces ha reiniciado el espacio de estado lo suficiente, ¡o su banco de pruebas no es bueno!
fuente
A veces, las herramientas de diseño generará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 Clear asíncrono y Clock Enable), mientras que reg b se asignaría a un FDE (Flip flop, D y clock Enable). Esto le dirá que reg b no tiene reinicio.
fuente