Parâmetros Seguros quanto à Largura
Parte da seção Design e Verificação RTL do Journey de Verilog da Coddy. Lição 12 de 38.
Os fundamentos introduziram larguras configuráveis. O RTL reutilizável também deve lidar com a menor largura válida, dimensionar deliberadamente as expressões intermediárias e evitar posições de bit codificadas diretamente. A replicação {WIDTH{1'b1}} cria uma máscara com largura correspondente. Parâmetros são constantes de elaboração, não controles de tempo de execução.
Trecho relevante; as declarações e conexões ao redor são fornecidas no desafio.
wire [WIDTH:0] sum;
assign sum = {1'b0,a} + {1'b0,b};
assign y = sum[WIDTH] ? {WIDTH{1'b1}} : sum[WIDTH-1:0];Tanto a posição do carry quanto o valor de saturação se adaptam à largura configurada.
Teste a largura legal mínima e derive cada fatia e constante dependente da largura a partir dos parâmetros.
Desafio
MédioConstrua um incrementador de WIDTH bits que retorne os WIDTH bits menos significativos de a+1. A entrada b não é utilizada. O mesmo módulo deve funcionar tanto para WIDTH=1 quanto para larguras maiores. WIDTH é positivo. O testbench bloqueado instancia valores de WIDTH 1, 4 e 8, usando os bits menos significativos de a e b para as instâncias mais estreitas. As colunas de saída são y1, y4 e y8 em decimal.
Conclua 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; 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 #(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