Tareas de comprobación reutilizables
Parte de la sección Diseño y verificación RTL del Journey de Verilog de Coddy. Lección 27 de 38.
Una task de Verilog agrupa trabajo procedimental y puede devolver resultados mediante argumentos de salida o de entrada/salida. Las task del banco de pruebas reducen las comprobaciones duplicadas. A diferencia de una function combinacional, una task puede incluir controles de temporización cuando corresponda, pero estas task de comprobación realizan únicamente comparaciones de tiempo cero. Usa task automáticas si varias llamadas concurrentes necesitan almacenamiento local independiente; las llamadas proporcionadas aquí son secuenciales.
Extracto relevante; las declaraciones y conexiones circundantes se proporcionan en el desafío.
task check_value;
input [7:0] actual,expected;
output ok;
begin ok = (actual === expected); end
endtaskLa persona que realiza la llamada recibe el resultado de la comprobación mediante un argumento de salida explícito.
Define las direcciones de los argumentos de task y restablece las variables de resultado por llamada antes de recopilar los fallos.
Desafío
IntermedioImplementa check_value para que ok sea uno cuando actual y expected coincidan según la igualdad de cuatro estados, y cero en caso contrario. Este módulo contiene una task exclusiva de simulación a la que llama el banco de pruebas bloqueado. Columnas de salida: ok.
Completa design.v y conserva los nombres de sus módulos y puertos. El testbench.v bloqueado proporciona cambios de entrada e imprime las salidas después de que se estabilicen. Elige un escenario mediante un argumento del simulador como +CASE=1; no se requiere entrada estándar. Mantén la impresión y el control del escenario en el banco de pruebas bloqueado; implementa únicamente el cuerpo de la task. La salida esperada es una fila de valores decimales por observación, separados por un espacio y terminados con un salto de línea.
Pruébalo tú mismo
module dut;
task check_value;
input [7:0] actual,expected;
output ok;
begin
// Completa la tarea del checker.
ok=0;
end
endtask
endmoduleEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Diseño y verificación RTL
1RTL combinacional confiable
Los valores predeterminados evitan los latchesCodificadores de prioridadValidación one-hotDecodificación segura de caseRepaso: enrutador de solicitudes4RTL secuencial controlado
Prioridad de reinicio y habilitaciónContadores con saturaciónPipeline de datos y validaciónDetección de flancos muestreadosRepaso: contador de eventos7Proyecto - Monitor de muestras
Acumular muestrasAceptar muestras habilitadas2Anchos y aritmética con signo
Conservar los bits de acarreoComparaciones con signoDesplazamientos aritméticos a la derechaDesbordamiento y saturaciónRepaso: diferencia con signo3RTL reutilizable
Funciones combinacionalesParámetros seguros en anchuraBucles generateGenerate condicionalRepaso - Máscara de bits reutilizable6Testbenches con autocomprobación
Comprobaciones de cuatro estadosTareas de comprobación reutilizablesModelos de referencia y puntuacionesCobertura de límites y controlRepaso: auditoría del sumadorPractica por tu cuenta: Compilador de Verilog online