Como criar descodificadores grandes usando um número de codecs mais pequenos
Amr Amr, parece que você está bastante interessado em como usar descodificadores binários. Pelo menos, vou assumir que é sobre isso que você está perguntando, dadas estas outras questões.
Descodificadores binários são blocos que pegam uma entrada n-bit codificada, e produzem uma das saídas [matemática]2^n[/math]. O decodificador mais simples é um decodificador [matemática]1:2[/math]: Ele pega uma única entrada de bit, e gera dois bits de saída que indicam se a entrada foi 0 ou 1.
Você quer construir um decodificador grande a partir de decodificadores menores. Pense nisto como um problema de divisão e conquista.
Ihe mostrarei uma estrutura de dados que você pode achar que não está relacionada no início, mas eu lhe asseguro que está. Eu mesmo desenhei estes diagramas, só para você.
Esta é uma árvore binária completa. Eu a identifiquei de uma forma particular. Como você pode ver, todos os ramos que vão para a esquerda são rotulados como 0, e todos os ramos que vão para a direita são rotulados como 1.
Se eu lhe der uma string de 3 bits, e lhe disser para seguir os ramos de acordo com os valores dos bits enquanto você lê os bits da string, você terminará em um dos 8 nós na parte inferior. Parabéns! Você acabou de decodificar a string de 3 bits com uma árvore binária.
A cada passo, você descartará metade da árvore. Você continua excluindo metade da árvore restante à medida que você vai descendo, até que haja apenas um nó na parte inferior que corresponda à string de 3 bits original.
Isso está relacionado à grande dica que eu deixei em uma resposta anterior: você pode aumentar o decodificador mais simples adicionando alguns AND gates para criar uma entrada de enable, e essa é a chave para aumentar a escala.
Em geral, quando a entrada de enable para um decodificador é 1, o decodificador produz 1 na posição que corresponde ao valor de entrada, e 0 na(s) outra(s) posição(ões). Quando o enable é 0, o decodificador sai zeros em todas as posições.*
Após você ter um enable input no seu decodificador, você pode construir um decodificador binário de qualquer tamanho a partir desse bloco básico.
Agora olhe para aquela árvore.
- Quando você estiver no primeiro nível da árvore, você olha para o primeiro bit do input.
- Independentemente de você ir para a esquerda ou para a direita, você vai acabar em um nó no segundo nível da árvore. Quando você está no segundo nível, você sempre olha para o segundo bit da entrada.
- e, independentemente de você ir para a esquerda ou direita de lá, você vai acabar em um nó no terceiro nível da árvore. Quando você está no terceiro nível, você olha para o terceiro bit de entrada.
Nota um padrão?
Você pode dizer que os nós em um nível da árvore ativam ou desativam os nós imediatamente abaixo deles na árvore.
Se você tivesse 15 decodificadores [matemática]1:2[/math] com inputs habilitados, você deveria ser capaz de estruturá-los de maneira similar àquela árvore, e terminar com um único decodificador [matemática]3:8[/math].
Mas e se você começasse com um decodificador maior? Não há problema. Você ainda estrutura o problema de forma similar: Você o divide em uma árvore. Cada nível da árvore olha para um subconjunto dos bits, e habilita ou desabilita sub-árvores abaixo dele de acordo.
Aqui está uma árvore radix-4. Ela olha para 2 bits por nível, fazendo uma das quatro escolhas. Ela corresponde a uma estrutura decodificadora [matemática]2:4[/math].
O primeiro nível da árvore olha para os dois primeiros bits para decidir o que fazer. Os nós do segundo nível da árvore olham para os próximos dois bits. O último nível da árvore fornece a saída decodificada final.
E, só para que você saiba: Você pode usar descodificadores de tamanho diferente em cada nível. Nada diz que todos têm de ser iguais.
O ponto, porém, é que eles serão estruturados como uma árvore.
Agora cabe a você descobrir exatamente como fazer o wire up das coisas. Desde que você entenda a estrutura, porém, ela não deve ser um grande mistério.
*Assumindo uma lógica ativa-elevada. Com a lógica active-low como a série 74xx TTL da velha escola, vire os 1s e 0s nesse parágrafo.