Decodificação segura de case
Parte da seção Design e Verificação RTL do Journey de Verilog da Coddy. Lição 4 de 38.
Use uma instrução case comum para códigos de controle exatos. Forneça um comportamento default para códigos sem suporte e assign todas as saídas. A decodificação com curingas usando casex pode ocultar bits de controle desconhecidos na simulação, portanto ela é inadequada quando os valores desconhecidos devem permanecer visíveis durante a depuração.
Trecho relevante; as declarações e conexões ao redor são fornecidas no desafio.
always @* begin
y = 0;
invalid = 0;
case (op)
0: y = a & b;
1: y = a | b;
default: invalid = 1;
endcase
endCódigos não compatíveis produzem um status explícito em vez de manter uma saída anterior.
Defina explicitamente os códigos de controle não compatíveis e evite mascarar controles desconhecidos com casex.
Desafio
MédioImplemente uma unidade lógica de 8 bits: op 0 calcula um AND b, op 1 calcula um OR b, op 2 calcula um XOR b e op 3 retorna zero com invalid definido como um. invalid é zero para operações compatíveis. Colunas de saída: y, invalid. Todos os valores de estímulo são valores binários conhecidos.
Complete design.v e preserve os nomes dos módulos e as portas. 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 a 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 terminada por uma nova linha.
Experimente você mesmo
module dut (input [1:0] op, input [7:0] a, input [7:0] b, output reg [7:0] y, output reg invalid);
// Substitua este placeholder pelo seu design.
initial y = 0;
initial invalid = 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 SinalPratique por conta própria: Compilador de Verilog online