Modelos de referencia y puntuaciones
Parte de la sección Diseño y verificación RTL del Journey de Verilog de Coddy. Lección 28 de 38.
Un banco de pruebas con autoverificación calcula el comportamiento esperado de forma independiente de la salida del diseño. Un modelo de referencia puede usar aritmética sencilla incluso cuando la implementación utiliza una estructura diferente. Un marcador de resultados cuenta las observaciones y las discrepancias. Inicializa sus contadores una vez por escenario y compara solo después de que la salida del diseño se haya estabilizado.
Extracto relevante; las declaraciones y conexiones circundantes se proporcionan en el desafío.
expected = {1'b0,a} + {1'b0,b};
checked = checked + 1;
if(actual !== expected) errors = errors + 1;El valor esperado proviene del comportamiento de entrada especificado, no de copiar actual.
Calcula los valores esperados de forma independiente, toma una muestra en un momento definido y registra cada resultado comprobado.
Desafío
IntermedioImplementa una comprobación de referencia para un sumador sin signo de cuatro bits. Calcula la suma matemática completa de cinco bits a+b y, después, devuelve ok=1 solo si actual coincide exactamente con ese resultado en una comparación de cuatro estados. 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 sus nombres de módulo y puertos. El testbench.v bloqueado proporciona los cambios de entrada e imprime las salidas una vez que se estabilizan. 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 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_sum;
input [3:0] a,b;
input [4:0] actual;
output ok;
reg [4:0] expected;
begin
// Completa la tarea del verificador.
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