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

Utilizando atribuições seletivas (with-select), escrever em VHDL e simular uma
entidade que descreva um decodificador de 4 para 16. Essa entidade deve ter como
entrada um vetor A de 4 bits e, como saída, um vetor Y de 16 bits. A tabela verdade do
decodificador é apresentada abaixo.

Tabela no anexo

Anexos:

Soluções para a tarefa

Respondido por GeBEfte
2

A estrutura with/select nos permite selecionar um sinal dentre uma gama de opções e, para tanto, utiliza-se um sinal seletor que dirá qual das possíveis opções será escolhida de acordo com o valor desse sinal de seleção.

De modo geral, a estrutura será montada da seguinte forma:

\sf with~ sinal\underline{~}seletor~select\\~~~~saida~<=~"opcao_1"~when~"sinal\underline{~}de\underline{~}selecao_1",\\~~~~~~~~~~~~~~~~~~\,"opcao_2"~when~"sinal\underline{~}de\underline{~}selecao_2",\\~~~~~~~~~~~~~~~~~~\,"opcao_3"~when~ "sinal\underline{~}de\underline{~}selecao_3",\\~~~~~~~~~~~~~~~~~~~~~~~\vdots~~~~~~~~~\vdots~~~~~~~~~~~~~~~~\vdots\\~~~~~~~~~~~~~~~~~~\,"opcao_n"~when~"sinal\underline{~}de\underline{~}selecao_n";\\

Vamos então ao código e comentamos um pouco mais posteriormente.

\sf library~ IEEE;\\use~IEEE.std\underline{~}logic\underline{~}1164.all;\\\\entity~decod16x1~is\\~~~~port(\\~~~~~~~~A:~in~std\underline{~}logic\underline{~}vector(3~downto~0);\\~~~~~~~~Y:~out~std\underline{~}logic\underline{~}vector(15~downto~0)\\~~~~);\\end ~decod16x1;

\sf architecture~behavior~of~decod16x1~is\\begin\\with~A~select

\sf &_{_{_{_{.}}}}~~~~Y~<=~"0000000000000001"~when~"0000",\\~~~~~~~~~~~~~~~~\,"0000000000000010"~when~"0001",\\~~~~~~~~~~~~~~~~\,"0000000000000100"~when~"0010",\\~~~~~~~~~~~~~~~~\,"0000000000001000"~when~"0011",\\~~~~~~~~~~~~~~~~\,"0000000000010000"~when~"0100",\\~~~~~~~~~~~~~~~~\,"0000000000100000"~when~"0101",\\~~~~~~~~~~~~~~~~\,"0000000001000000"~when~"0110",\\~~~~~~~~~~~~~~~~\,"0000000010000000"~when~"0111",

\sf _{_{_{_{.}}}}~~~~~~ ~~~~ ~~~~"0000000100000000"~when~"1000",\\~~~~~~ ~~~~ ~~~~~~"0000001000000000"~when~"1001",\\~~~~~~ ~~~~ ~~~~~~"0000010000000000"~when~"1010",\\~~~~~~ ~~~~ ~~~~~~"0000100000000000"~when~"1011",\\~~~~~~ ~~~~ ~~~~~~"0001000000000000"~when~"1100",\\~~~~~~ ~~~~ ~~~~~~"0010000000000000"~when~"1101",\\~~~~~~ ~~~~ ~~~~~~"0100000000000000"~when~"1110",\\~~~~~~ ~~~~ ~~~~~~"1000000000000000"~when~"1111";\\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. A estrutura with/select apresenta uma alternativa de mais alto nível às expressões booleanas que implementariam o mesmo decodificador, ou seja, deixamos a cargo do software que "ache" a melhor forma de montar o circuito com o comportamento que descrevemos em VHDL.

A simulação deverá gerar um diagrama de formas de onda semelhante ao que é apresentado na figura anexada à resolução.

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

Anexos:
Perguntas interessantes