SST20707-2015-1 - Avaliação 1 - Equipe 1
Revisão de 20h42min de 9 de abril de 2015 por Leonardo.op (discussão | contribs) (→Questão 5: Tanque com fluido)
Questão 1: Cruzamento de duas ruas
- IN: sensores std_logic_vector(1 downto 0);
- OUT: semaforoA, semaforoB std_logic;
- Para resolver o problema foi utilizado atribuição de seleção através dos sensores.
- Quando houver carro na rua B (identificado pelo sensor[0]) o semaforoB acende(verde); Quando houver carro na rua A (identificado pelo sensor[1]) o semaforoA acende(verde); Quando houver carros em ambas as ruas, o semaforoA liga(verde), pois tem prioridade sobre o semaforoB.
- Tabela verdade:
Entradas] | Saídas | ||
---|---|---|---|
Sensor[1] | Sensor[0] | SemaforoA | SemaforoB |
0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 |
1 | 0 | 1 | 0 |
1 | 1 | 1 | 0 |
- Código:
library ieee; use ieee.std_logic_1164.all; entity questao1 is port( --Entradas: sensores 1 e 2 --Saidas: semafaros 1 e 2 sensores : in std_logic_vector(1 downto 0); semafaroA, semafaroB : out std_logic); end entity; architecture funcio of questao1 is begin with sensores select semafaroA <= '1' when "10", '1' when "11", '0' when others; with sensores select semafaroB <= '1' when "01", '0' when others; end architecture;
- Forma de onda:
Questão 2: Um amplificador e três aparelhos
- IN: disco, fita, radio std_logic;
- OUT: amp_disco, amp_fita, amp_radio std_logic;
- Para resolver o problema foi utilizado atribuição de seleção através dos equipamentos (disco, fita e rádio).
- Quando apenas o rádio está ligado, o amp_radio é comutado; Quando apenas a fita está ligada, ou a fita e o rádio estão ligados, o amp_fita é comutado; Quando o disco está ligado, o amp_disco é comutado, independente das outras opções de fita ou rádio.
- Tabela verdade:
Entradas] | Saídas | ||||
---|---|---|---|---|---|
Disco | Fita | Radio | amp_D | amo_F | amp_R |
0 | 0 | 0 | o | 0 | 0 |
0 | 0 | 1 | 0 | 0 | 1 |
0 | 1 | 0 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 1 | 0 | 0 |
1 | 1 | 0 | 1 | 0 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
- Código:
library ieee; use ieee.std_logic_1164.all; entity questao2 is port( --Entradas: amplificador --Saidas: disco, fita e radio amplificador: in std_logic_vector(2 downto 0); disco, fita, radio: out std_logic); end entity; architecture funcio of questao2 is begin with amplificador select radio <= '1' when "001", '0' when others; with amplificador select fita <= '1' when "010", '1' when "011", '0' when others; with amplificador select disco <= '1' when "100", '1' when "101", '1' when "110", '1' when "111", '0' when others; end architecture;
- Forma de onda:
Questão 3: Intercomunicadores
- IN: presidente, vice, engenharia, seção std_logic;
- OUT: ch_presidente, ch_vice, ch_engenharia, ch_seção std_logic;
- Quando a seção está ligada, a comutação resulta em ch_secao; Quando a engenharia está ligada, ou engenharia e seção estão ligadas, a comutação resulta em ch_eng; Quando vice está ligada, ou engenharia e/ou seção estão ligadas, ch_vice é comutada; Quando presidente está ligada, a comutação é ch_pres, independente das demais entradas.
- Tabela verdade:
Entradas | Saídas | ||||||
---|---|---|---|---|---|---|---|
Pres | Vice | Eng | Seção | ch_P | ch_V | ch_E | ch_S |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |
0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 |
1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 |
1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 |
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 |
- Código:
library IEEE; use IEEE.std_logic_1164.all; entity questao3 is port (presidente, vice, engenharia, chefe_secao : in std_logic; ch_pres, ch_vice, ch_enge, ch_secao : out std_logic ); end questao3; architecture arquitetura of questao3 is constant ligado : std_logic := '1'; constant desligado : std_logic := '0'; signal sel : std_logic_vector(3 downto 0); begin sel <= presidente & vice & engenharia & chefe_secao; ch_pres <= ligado when ( sel(3)='1' ) else desligado; ch_vice <= ligado when ( ( sel(3)='0' ) and ( sel(2)='1' ) ) else desligado; ch_enge <= ligado when ( ( sel(3)='0' ) and ( sel(2)='0' ) and ( sel(1)='1' ) ) else desligado; ch_secao <= ligado when ( ( sel(3)='0' ) and ( sel(2)='0' ) and ( sel(1)='0' ) and ( sel(0)='1' )) else desligado; end architecture;
- Forma de onda:
Questão 4: Display de 7 segmentos
- IN: entrada std_logic_vector(3 downto 0)
- OUT: A,B,C,D,E,F,G std_logic
- Display de 7 segmentos, com a entrada sendo um vetor de 4 bits e a saída 7 bits. Na saída, os bits em 0 tornam o display ativo.
- Tabela verdade:
Entradas | Saídas | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Entr1 | Entr2 | Entr3 | Entr4 | A | B | C | D | E | F | G |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 |
0 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 |
1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 |
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 |
1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |
1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 |
- Código
-- Library library IEEE; use IEEE.std_logic_1164.all; -- Entity entity quarta is port ( -- Sinais de entrada, 4 entradas para 16 saídas entrada : in std_logic_vector(3 downto 0); -- Sinais de saída, 7 saídas para representar os números hexa A,B,C,D,E,F,G : out std_logic ); end quarta; architecture display of quarta is -- Este será o sinal "completo" que depois será atribuído as saídas signal S : std_logic_vector(0 to 6); begin -- Atribuição dos valores de entrada para o vetor S de acordo com os valores da entrada de 0 a F with entrada select -- Para o resultado em S considerar: Led superior A, superior direito B, abaixo C, led de baixo D,esquerda de baixo E, -- esquerda de cima F e o Led do meio G. S <= "0000001" when "0000", -- 0 "1001111" when "0001", -- 1 "0010010" when "0010", -- 2 "0000110" when "0011", -- 3 "1001100" when "0100", -- 4 "0100100" when "0101", -- 5 "0100000" when "0110", -- 6 "0001111" when "0111", -- 7 "0000000" when "1000", -- 8 "0000100" when "1001", -- 9 "0001000" when "1010", -- A "1100000" when "1011", -- B "0110001" when "1100", -- C "1000010" when "1101", -- D "0110000" when "1110", -- E "0111000" when "1111", -- F "1111111" when others; -- Atribuição do vetor S para as saídas do sistema A <= S(0); B <= S(1); C <= S(2); D <= S(3); E <= S(4); F <= S(5); G <= S(6); end display;
- Forma de onda:
Questão 5: Tanque com fluido
- IN: on_off, sensor_min, sensor_max;
- OUT: valvula_entrada, valvula_saida;
- Para resolver o problema é usado uma abordagem "Data-flow", através de duas atribuições condicionais as válvulas são "ativadas" ou "desativadas".
- A válvula de entrada esta ligada quando o sensor de nível mínimo esta ativo ou quando nenhum dos dois sensores esta ativo e a válvula de saída esta desligada.
- A válvula de saída esta ligada quando o sensor de nível máximo esta ativo ou quando nenhum dos dois sensores esta ativo e a válvula de entrada esta desligada.
- O sistema só funciona quando estiver ligado através da entrada "on/off".
- A função do sistema que controla as válvulas é deixar o nível de fluido sempre entre o nível mínimo e o máximo.
- Tabela verdade:
Entradas | auxiliares | Saídas | ||||
---|---|---|---|---|---|---|
on_off | sensor_min | sensor_max | aux_val1 | aux_val2 | Valvula_entrada | Valvula_saida |
0 | x | x | x | x | 0 | 1 |
1 | 0 | 0 | 0 | 0 | x | x |
1 | 0 | 0 | 0 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 1 | x | x |
1 | 0 | 1 | 0 | 0 | x | x |
1 | 0 | 1 | 0 | 1 | 0 | 1 |
1 | 0 | 1 | 1 | 0 | x | x |
1 | 0 | 1 | 1 | 1 | x | x |
1 | 1 | 0 | 0 | 0 | 1 | 0 |
1 | 1 | 0 | 0 | 1 | x | x |
1 | 1 | 0 | 1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 | 1 | x | x |
1 | 1 | 1 | 0 | 0 | x | x |
1 | 1 | 1 | 0 | 1 | x | x |
1 | 1 | 1 | 1 | 0 | x | x |
1 | 1 | 1 | 1 | 1 | x | x |
- * Os dois sensores nunca estão ativos ao mesmo tempo
- ** As duas válvulas nunca estão ativas ao mesmo tempo
- Código:
library IEEE; use IEEE.std_logic_1164.all; entity questao5 is port ( on_off, sensor_min, sensor_max : in std_logic; valvula_entrada, valvula_saida : out std_logic ); end questao5; architecture arquitetura of questao5 is constant ligado : std_logic := '1'; constant desligado : std_logic := '0'; signal aux_val1 : std_logic := '0'; signal aux_val2 : std_logic := '0'; begin aux_val1 <= ligado when ( on_off='1' and ((sensor_min='1') or (sensor_max='0' and aux_val2='0')) ) else desligado; valvula_entrada <= aux_val1; aux_val2 <= ligado when ( on_off='0' or ((sensor_max='1') or (sensor_min='0' and aux_val1='0')) ) else desligado; valvula_saida <= aux_val2; end architecture;
- Forma de onda:
- [0 a 30.0ns]
- O sistema esta desligado.
- A válvula de saída fica aberta para esvaziar o reservatório.
- Como o reservatório está vazio, o sensor de nível mínimo fica ativo.
- [30.0ns a 50.0ns]
- O sistema esta ligado.
- O reservatório está em nível mínimo
- A válvula de saída é desligada
- A válvula de entrada fica aberta até o reservatório chegar ao nível máximo
- [50.0ns a 70.0ns]
- O sistema esta ligado.
- O reservatório chega ao nível máximo
- A válvula de entrada é desligada
- A válvula de saída fica aberta até o reservatório chegar ao nível mínimo
- [0 a 30.0ns]
Questão 6: Cruzamento de três ruas
- IN: ruaA, ruaB, ruaC std_logic;
- OUT: semaforo1, semaforo2, semaforo3 std_logic;
- Para resolver o problema foi utilizado atribuição de seleção através da variável "ruas", que é uma concatenação das entradas(ruaA, ruaB e ruaC).
- Tabela verdade:
Entradas] | Saídas | ||||
---|---|---|---|---|---|
ruaA | ruaB | ruaC | semaforo1 | semaforo2 | semaforo3 |
0 | 0 | 0 | 1 | 0 | 0 |
0 | 0 | 1 | 0 | 0 | 1 |
0 | 1 | 0 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 | 0 |
1 | 0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 1 |
1 | 1 | 0 | 1 | 0 | 0 |
1 | 1 | 1 | 1 | 0 | 0 |
- Código:
library ieee; use ieee.std_logic_1164.all; entity questao6 is port( ruaA, ruaB, ruaC: in std_logic; semafaro1, semafaro2, semafaro3: out std_logic); end entity; architecture funcio of questao6 is signal ruas : std_logic_vector(2 downto 0); begin ruas <= (ruaA & ruaB & ruaC); with (ruas) select semafaro1 <= '1' when "000", '1' when "100", '1' when "110", '1' when "111", '0' when others; with (ruas) select semafaro2 <= '1' when "010", '1' when "011", '0' when others; with (ruas) select semafaro3 <= '1' when "001", '1' when "101", '1' when "110", '0' when others; end architecture;
- Forma de onda:
Questão 7: Tanque de dois níveis, com sensor de temperatura
- Código:
- Forma de onda:
Questão 8: Circuito aritmético
- IN: a,b std_logic_vector(7 downto 0); cin : in std_logic;
- OUT: cout std_logic; soma std_logic_vector(7 downto 0);
- Para realizar o processo de soma binária, é necessário um bit de carry in (cin/vem-um) e um bit de carry out(cout/vai-um);
- Para solucionar esse problema, foi utilizado um process com sensibilidade das entradas (a,b e cin), onde nele, foi realizado um for loop que fosse de i=0 até i=7, em cada loop ele realizava as seguintes operações:
- Código:
library ieee; use ieee.std_logic_1164.all; entity somador8bits is port( a,b : in std_logic_vector(7 downto 0); cin : in std_logic; cout : out std_logic; soma : out std_logic_vector(7 downto 0) ); end entity; architecture funcio of somador8bits is begin process(a,b,cin) variable b_carry : std_logic_vector(8 downto 0); begin b_carry(0) := cin; for i in 0 to 7 loop soma(i) <= a(i) xor b(i) xor b_carry(i); b_carry (i + 1) := (a(i) and b(i)) or (a(i) and b_carry(i)) or (b(i) and b_carry(i)); end loop; cout <= b_carry(7); end process; end architecture;
- Forma de onda: