11 / 37 · Conceito
Codificadores e prioridade: escolha uma entre várias solicitações
Distinga a hipótese one-hot do codificador dos resultados valid e seleção de um codificador de prioridade.
As aulas podem ser lidas gratuitamente. Inscreva-se para salvar o progresso.
O sentido inverso do decodificador também precisa de condições
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. Saiba mais converte um endereço em seleção one-hotOne-hot Representação na qual exatamente um bit vale 1. Se todos em 0 também forem permitidos, a condição é chamada one-hot-or-zero. Saiba mais; um codificador converte a posição ativa em endereço. Um codificador one-hot simples pressupõe uma única entrada ativa. Com várias entradas em 1, é necessário especificar qual será informada.
Para , demos prioridade ao maior número. Com todas as entradas em 0, definimos valid=0 e index=00. Usar apenas index=00 para detectar ausência de solicitação confundiria esse caso com r0.
| Entrada r3r2r1r0 | valid | index |
|---|---|---|
| 1--- | 1 | 11 |
| 01-- | 1 | 10 |
| 001- | 1 | 01 |
| 0001 | 1 | 00 |
| 0000 | 0 | 00 |
O traço significa o mesmo resultado tanto com 0 quanto com 1, não permissão para aplicar X de simulação. Os padrões definidos de cima para baixo são mutuamente exclusivos.
Com 1011, index=11. Com 0110, r2 tem prioridade sobre r1 e produz index=10.
Ver os dados da forma de onda
| Sinal | Forma de onda | Valores do barramento |
|---|---|---|
| solicitações | 234523 | 0000 → 0001 → 0011 → 0110 → 1011 → 1000 |
| valid | 01.... | |
| index | 2.345. | 00 → 01 → 10 → 11 |
O RTL deve mostrar a prioridade
always_comb begin
valid = |request;
index = 2'b00;
if (request[3]) index = 2'd3;
else if (request[2]) index = 2'd2;
else if (request[1]) index = 2'd1;
endSe somente request[0] valer 1, permanece o index=0 padrão e valid=1. Valores padrão cobrem todos os caminhos e evitam memória no circuito combinacional. Teste as 16 entradas; com valid=1, confira que o bit escolhido está ativo e todos os superiores estão em 0.
Seleção e justiça são problemas diferentes
Se r3 permanecer em 1, r0 nunca será escolhida. Este circuito implementa prioridade fixa. Uma arbitragem justa precisa lembrar escolhas anteriores, tornando-se sequencial.
Prática · Observe solicitações, endereço e grant
r3r2r1r0=1011; valid=1; index=11; grant=1000. Solicitações de número maior têm prioridade. Quando valid=0, index não identifica nenhuma solicitação selecionada.
A solicitação inicial 1011 seleciona r3. Ao desligar r3, r1 é escolhida: index=01, grant=0010. Enquanto r1 permanecer em 1, ligar ou desligar r0 não deve alterar o resultado.
Compare «Desligar tudo» com ativar somente r0. Ambos dão index=00, mas valid e grant diferem. Um circuito seguinte que leia apenas index pode atender uma solicitação inexistente.
grant, com 1 apenas na solicitação escolhida, resulta da decodificação de index e valid:
Verifique três invariantes: no máximo um 1 em grant; uma solicitação real em toda posição concedida; e todos os números superiores ao escolhido em 0. Esta prática não consome solicitações nem lembra escolhas. A espera das inferiores enquanto r3 permanece ativa é uma característica da prioridade fixa.
Experimente
Indique index, valid e grant para 0101 e 0001. Por que r0 não pode ser atendida em 0000 apenas porque index=00?
Ler a explicação
Para 0101: index=10, valid=1 e grant=0100. Para 0001: index=00, valid=1 e grant=0001. Em 0000, index=00 é apenas o valor padrão: valid=0 e grant=0000 indicam que não há solicitação.