Menu
Coddy logo textTech

Pipeline de datos y validación

Parte de la sección Diseño y verificación RTL del Journey de Verilog de Coddy. Lección 18 de 38.

Las canalizaciones separan el trabajo entre registros. Una bandera de validez viaja junto a cada elemento de datos para que una etapa posterior pueda distinguir una muestra de una burbuja. Con asignaciones no bloqueantes, una etapa posterior lee el valor anterior de una etapa anterior en el mismo flanco. El reinicio debe invalidar el trabajo en curso.

Extracto relevante; las declaraciones y conexiones circundantes se proporcionan en el desafío.

always @(posedge clk) begin
    stage <= data;
    stage_valid <= in_valid;
    result <= stage;
    out_valid <= stage_valid;
end

Los datos y su validez pasan por el mismo número de registros.

Alinea los datos y la validez a través de cada etapa de la canalización y vacía la validez al restablecer.

challenge icon

Desafío

Intermedio

Implementa una canalización de dos etapas con registros. En cada flanco que no sea de reinicio, la primera etapa captura a y in_valid. La segunda etapa utiliza los valores anteriores de la primera etapa: out_valid se convierte en su antiguo valor de validez, y y se convierte en sus antiguos datos más uno módulo 256 cuando son válidos; de lo contrario, se convierte en cero. El rst síncrono borra ambas etapas y las salidas. Columnas de salida: y, out_valid. Todos los controles y datos permanecen estables antes de cada flanco ascendente del reloj; los resultados se observan después.

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 después de que se estabilizan. 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 clk, input rst, input in_valid, input [7:0] a, output reg [7:0] y, output reg out_valid);
    // Reemplaza este marcador de posición con tu diseño.
    initial y = 0;
    initial out_valid = 0;
endmodule
quiz iconPonte a prueba

Esta 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

Practica por tu cuenta: Compilador de Verilog online