Menu
Coddy logo textTech

Pipeline de Dados e Valid

Parte da seção Design e Verificação RTL do Journey de Verilog da Coddy. Lição 18 de 38.

Os pipelines distribuem o trabalho entre registradores. Um sinalizador de validade acompanha cada item de dados para que um estágio posterior possa distinguir uma amostra de uma bolha. Com atribuições não bloqueantes, um estágio posterior lê o valor anterior de um estágio anterior na mesma borda. O reset deve invalidar o trabalho em andamento.

Trecho relevante; as declarações e conexões ao redor são fornecidas no desafio.

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

Os dados e sua validade passam pelo mesmo número de registradores.

Alinhe os dados e a validade em cada estágio do pipeline e limpe a validade na reinicialização.

challenge icon

Desafio

Médio

Implemente um pipeline de dois estágios de registradores. Em cada borda que não seja de reset, o primeiro estágio captura a e in_valid. O segundo estágio usa os valores anteriores do primeiro estágio: out_valid torna-se seu valor de validade anterior, e y torna-se seus dados anteriores mais um, módulo 256, quando válido; caso contrário, zero. O rst síncrono limpa ambos os estágios e as saídas. Colunas de saída: y, out_valid. Todos os controles e dados permanecem estáveis antes de cada borda de subida do clock; os resultados são observados depois dela.

Complete design.v e preserve os nomes e as portas de seu módulo. O testbench.v bloqueado fornece alterações nas entradas e imprime as saídas depois que elas se estabilizam. Ele escolhe um cenário usando um argumento do simulador, como +CASE=1; não é necessária entrada padrão. Não adicione impressão, atrasos ou encerramento da simulação ao design. A saída esperada é uma linha de valores decimais por observação, separados por um espaço e terminando com uma nova linha.

Experimente você mesmo

module dut (input clk, input rst, input in_valid, input [7:0] a, output reg [7:0] y, output reg out_valid);
    // Substitua este placeholder pelo seu design.
    initial y = 0;
    initial out_valid = 0;
endmodule
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Design e Verificação RTL

Pratique por conta própria: Compilador de Verilog online