Informática, perguntado por lucas27484, 7 meses atrás

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

Anexos:

Soluções para a tarefa

Respondido por GeBEfte
2

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:

\sf acao_1~~ when~~condicao_1~~else\\acao_2~~when~~condicao_2~~else\\acao_3~~when~~condicao_3~~else\\~~~\, \vdots~~~~~~~~~\vdots~~~~~~~~~\vdots\\\\acao_n~~ when~~ condicao_n\,;

Vamos então mostrar como fica o código e, posteriormente, comento um pouco mais a respeito do que foi feito.

\sf library~ IEEE;\\use~ IEEE.std\underline{~}logic\underline{~}1164.all;\\\\entity~ mux8x1~ is\\~~~~	port(\\~~~~~~~~	S:~ in~ std\underline{~}logic\underline{~}vector(2~ downto~ 0);\\~~~~~~~~	D:~ in ~std\underline{~}logic\underline{~}vector(7~ downto~ 0);\\~~~~~~~~	Y:~ out~ std\underline{~}logic\\~~~~	);\\end~ mux8x1;\\

\sf architecture~ behavior~ of~ mux8x1~ is\\begin\\~~~~	Y ~<=~ D(0)~ when~ S~ =~ "000"~ else\\~~~~ 		~~~~~~~~~~\, D(1)~ when ~S~ =~ "001"~ else\\~~~~ 		~~~~~~~~~~\,		 D(2)~ when ~S~ = ~"010"~ else\\	~~~~ 		~~~~~~~~~~\,	 D(3) ~when ~S ~= ~"011"~ else\\	~~~~ 		~~~~~~~~~~\,	 D(4)~ when~ S ~= ~"100" ~else\\		~~~~ 		~~~~~~~~~~\, D(5)~ when~ S~ =~ "101"~ else\\~~~~ 		~~~~~~~~~~\,		 D(6) ~when ~S ~= ~"110" ~else\\~~~~ 		~~~~~~~~~~\,		 D(7) ~when~ S~ =~ "111";\\end ~behavior;

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.

\Huge{\begin{array}{c}\Delta \tt{\!\!\!\!\!\!\,\,o}\!\!\!\!\!\!\!\!\:\,\perp\end{array}}Qualquer~d\acute{u}vida,~deixe~ um~coment\acute{a}rio

Anexos:
Perguntas interessantes