Decodificación segura de case
Parte de la sección Diseño y verificación RTL del Journey de Verilog de Coddy. Lección 4 de 38.
Usa una instrucción case ordinaria para códigos de control exactos. Proporciona un comportamiento default para los códigos no compatibles y assign todas las salidas. La decodificación con comodines mediante casex puede ocultar bits de control desconocidos en la simulación, por lo que no es adecuada cuando los valores desconocidos deben seguir siendo visibles durante la depuración.
Extracto relevante; las declaraciones y conexiones circundantes se proporcionan en el desafío.
always @* begin
y = 0;
invalid = 0;
case (op)
0: y = a & b;
1: y = a | b;
default: invalid = 1;
endcase
endLos códigos no compatibles producen un estado explícito en lugar de conservar una salida anterior.
Define explícitamente los códigos de control no compatibles y evita ocultar controles desconocidos con casex.
Desafío
IntermedioImplementa una unidad lógica de 8 bits: op 0 calcula un AND entre a y b, op 1 calcula un OR entre a y b, op 2 calcula un XOR entre a y b, y op 3 devuelve cero con invalid establecido en uno. invalid es cero para las operaciones compatibles. Columnas de salida: y, invalid. Todos los valores de estímulo son valores binarios conocidos.
Completa design.v y conserva sus nombres de módulo y puertos. El testbench.v bloqueado proporciona cambios de entrada e imprime las salidas una vez estabilizadas. Elige un escenario mediante un argumento del simulador como +CASE=1; no se requiere entrada estándar. No añadas impresiones, retardos ni terminación de la simulación al diseño. La salida esperada es una fila de valores decimales por observación, separados por un espacio y terminada con un salto de línea.
Pruébalo tú mismo
module dut (input [1:0] op, input [7:0] a, input [7:0] b, output reg [7:0] y, output reg invalid);
// Reemplaza este marcador de posición con tu diseño.
initial y = 0;
initial invalid = 0;
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 signoPractica por tu cuenta: Compilador de Verilog online