Laços de Geração
Parte da seção Design e Verificação RTL do Journey de Verilog da Coddy. Lição 13 de 38.
Um loop generate-for cria hardware repetido durante a elaboração. Seu índice genvar não é um registrador de runtime que muda. Blocos generate nomeados fornecem nomes hierárquicos previsíveis para as instâncias ou atribuições criadas. Os limites do loop devem ser constantes determinadas em tempo de elaboração.
Trecho relevante; as declarações e conexões ao redor são fornecidas no desafio.
genvar i;
generate
for(i=0;i<WIDTH;i=i+1) begin: bitcell
assign y[i] = a[i] ^ b[i];
end
endgenerateCada iteração elabora uma operação separada em nível de bit, em vez de consumir um ciclo de clock.
Use genvar com limites constantes para descrever uma estrutura repetida durante a elaboração.
Desafio
MédioUse um loop generate-for nomeado com genvar i para instanciar uma atribuição contínua por bit, produzindo y[i] = a[i] XOR b[i]. WIDTH é positivo. O testbench bloqueado instancia valores de WIDTH 1, 4 e 8, usando os bits menos significativos de a e b para instâncias mais estreitas. As colunas de saída são y1, y4 e y8 em decimal.
Complete design.v e preserve os nomes e as portas do 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; nenhuma entrada padrão é necessária. 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 terminados por uma nova linha.
Experimente você mesmo
module dut #(parameter WIDTH=4) (input [WIDTH-1:0] a,b, output [WIDTH-1:0] y);
// Implemente o circuito parametrizado.
assign y = 0;
endmoduleEsta 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
1RTL Combinacional Confiável
Valores padrão evitam latchesCodificadores de prioridadeValidação One-HotDecodificação segura de caseRecapitulação - Roteador de requisições4RTL Sequencial Controlado
Prioridade de Reset e EnableContadores SaturantesPipeline de Dados e ValidDetecção de Bordas AmostradasRecapitulação - Contador de Eventos7Projeto - Monitor de Amostras
Acumular AmostrasAceitar Amostras Habilitadas2Larguras e Aritmética com Sinal
Preservando Bits de CarryComparações com SinalDeslocamentos Aritméticos à DireitaOverflow e SaturaçãoRecapitulação — Diferença com Sinal3RTL Reutilizável
Funções CombinacionaisParâmetros Seguros quanto à LarguraLaços de GeraçãoGeração CondicionalRecapitulação - Máscara de Bits ReutilizávelPratique por conta própria: Compilador de Verilog online