Altifigence Academy

11 / 63 · Conceito

Decodificadores, seleção one-hot e entradas válidas

Converta endereços binários em linhas de seleção e defina enable, intervalos e invariantes.

De um endereço a linhas de seleção

Um decodificadorDecodificador Circuito que ativa a linha de saída correspondente a um código binário. Com enable, pode colocar todas as saídas em 0 quando está desabilitado. de NN bits converte um endereço em uma seleção entre até 2N2^N saídas. Com enable ee, pode-se definir:

di=e∧(a=i)d_i=e\land(a=i)

Em um decodificador 2 para 4: d0=ea‾1a‾0d_0=e\overline a_1\overline a_0, d1=ea‾1a0d_1=e\overline a_1a_0, d2=ea1a‾0d_2=ea_1\overline a_0, d3=ea1a0d_3=ea_1a_0. Com enable=0, todas as saídas valem 0; com enable=1, exatamente uma vale 1.

Mude a1a0 com enable=1 e observe que apenas uma entre d0–d3 é ativada. Depois coloque enable=0 e confira que todas se apagam.

Do endereço às linhas de seleção one-hot

d[i] = enable AND (2 × a1 + a0 = i)

O valor padrão completa a função

SystemVerilog
module decoder2 (
  input logic en,
  input logic [1:0] addr,
  output logic [3:0] select
);
  always_comb begin
    select = 4'b0000;
    if (en) begin
      case (addr)
        2'd0: select = 4'b0001;
        2'd1: select = 4'b0010;
        2'd2: select = 4'b0100;
        2'd3: select = 4'b1000;
        default: select = 4'b0000;
      endcase
    end
  end
endmodule

A atribuição inicial cobre todos os caminhos de execução para evitar a retenção da saída anterior. Escrever always_comb não transforma automaticamente um ramo indefinido em um circuito correto.

Quando a quantidade de saídas não é potência de dois

Dez dispositivos exigem quatro bits de endereço, mas 10–15 são inválidos. É preciso especificar uma política, como todas as saídas em 0 e um indicador de erro em 1. Um código não usado não autoriza qualquer saída.

Além da correspondência entrada-saída, verifique se nunca há várias seleções ativas ao mesmo tempo e se todas se apagam ao desabilitar. Esses invariantesInvariante Condição que deve ser verdadeira em toda execução permitida. Por exemplo, a ocupação de uma FIFO com profundidade 4 sempre fica entre 0 e 4. Saiba mais são especialmente importantes para habilitação de escrita de memória e seleção de barramentos. À medida que o decodificador cresce, aumentam o fan-out e a carga da fiação dos endereços; por isso, uma decodificação hierárquica pode ser apropriada.

Experimente

Projete um decodificador de dez saídas. Determine a largura do endereço, a quantidade de códigos inválidos e a condição obrigatória com en=0.

Ler a explicação

O endereço precisa de ⌈log⁡210⌉=4\lceil\log_2 10\rceil=4 bits e há seis códigos inválidos. Com en=0, todas as seleções devem valer 0, qualquer que seja o endereço. Para um endereço inválido, pode-se especificar que todas valham 0 e que um erro seja indicado separadamente.

Sua escolha vale neste navegador. Altere-a a qualquer momento no rodapé.