Utilizando atribuições condicionais (when-else), escrever em VHDL e simular uma
entidade que descreva um multiplexador 8 para 1 (8x1). Essa entidade deve ter dois
vetores de entrada (S com 3 bits e D com 8 bits) e um bit de saída (Y). A tabela
verdade do multiplexador é apresentada abaixo.
Tabela no anexo
Respostas
Conhecer o significado das palavras "when" e "else" já nos dá uma boa ideia de como utilizaremos essa estrutura no código, podemos traduzir estas palavras, respectivamente, por "quando" e "senão/caso contrário".
De modo geral, a estrutura ficará, portanto, da seguinte forma:
Vamos então mostrar como fica o código e, posteriormente, comento um pouco mais a respeito do que foi feito.
Comentários:
--> As primeiras linhas foram reservadas para informar a utilização da biblioteca IEEE e dos recursos inclusos no padrão 1164.
--> No bloco "entity", declaramos todas entradas e saídas do circuito e quantos bits cada um possui. Note que, no caso de haver mais de um bit, declaramos como um vetor de bits (std_logic_vector). É importante ressaltar também que, o nome dado à entity deve ser igual ao do projeto, já que, dependendo do software utilizado, podem surgir erros na montagem e simulação do projeto.
--> No bloco "architecture", vamos tratar do comportamento do circuito, isto é, de que modo e o que ele apresentará na sua saída. Perceba que a estrutura when/else apresenta uma alternativa de mais alto nível quando comparado a simples implementação da expressão booleana que descreveria o mesmo mux, isto é, em tese, não precisamos nem sequer saber que circuito o software irá implementar, nos basta saber o comportamento que será produzido.
A simulação deverá gerar um diagrama de formas de onda semelhante ao que é apresentado na figura anexada à resolução. Nesta simulação, utilizamos entradas randômicas em D para demonstrar o comportamento do mux, ou seja, a entradas de seleção S ditam qual dos bits de entrada será mostrado na saída Y.