Mudanças entre as edições de "SST20707-2015-1 - Avaliação 1 - Equipe 2"
(46 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
Linha 10: | Linha 10: | ||
;Tabela verdade: | ;Tabela verdade: | ||
− | [[Arquivo: | + | [[Arquivo:tabela11.jpg]] |
*A = 0 - não possui carro na rua A | *A = 0 - não possui carro na rua A | ||
Linha 28: | Linha 28: | ||
Utilizamos esse modelo pois era um código com poucas entradas e saídas. Dessa forma ficou mais simples e fácil de entender. | Utilizamos esse modelo pois era um código com poucas entradas e saídas. Dessa forma ficou mais simples e fácil de entender. | ||
+ | |||
+ | {{collapse top | '''Código VHDL''' - Clicar no "+" para expandir }} | ||
+ | |||
+ | ;:<syntaxhighlight lang=vhdl> | ||
+ | |||
+ | library IEEE; | ||
+ | use IEEE.std_logic_1164.all; | ||
+ | |||
+ | entity prova is | ||
+ | port (A, B, C, POWER: in STD_LOGIC; | ||
+ | |||
+ | VALVULA_1, VALVULA_2, LED, LED_ERRO: out STD_LOGIC); | ||
+ | end prova; | ||
+ | |||
+ | architecture exercicio5 of prova is | ||
+ | |||
+ | signal ABC : std_logic_vector (2 downto 0); | ||
+ | |||
+ | begin | ||
+ | |||
+ | ABC <= A&B&C; | ||
+ | vazao : process(ABC) is | ||
+ | begin | ||
+ | |||
+ | if POWER = '0' then | ||
+ | LED <= '0'; | ||
+ | |||
+ | case(ABC) is | ||
+ | |||
+ | when "001" => | ||
+ | VALVULA_1 <= '1'; | ||
+ | VALVULA_2 <= '0'; | ||
+ | LED_ERRO <= '0'; | ||
+ | when "011" => | ||
+ | VALVULA_1 <= '0'; | ||
+ | VALVULA_2 <= '0'; | ||
+ | LED_ERRO <= '0'; | ||
+ | when "111" => | ||
+ | VALVULA_1 <= '0'; | ||
+ | VALVULA_2 <= '1'; | ||
+ | LED_ERRO <= '0'; | ||
+ | when others => | ||
+ | LED_ERRO <= '1'; | ||
+ | VALVULA_1 <= '0'; | ||
+ | VALVULA_2 <= '0'; | ||
+ | end case; | ||
+ | |||
+ | else | ||
+ | VALVULA_1 <= '0'; | ||
+ | VALVULA_2 <= '1'; | ||
+ | LED <= '1'; | ||
+ | |||
+ | |||
+ | end if; | ||
+ | |||
+ | end process vazao; | ||
+ | end exercicio5; | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | {{collapse bottom}} | ||
+ | |||
+ | * Link vídeo: https://youtu.be/EJigl08gFx4 | ||
=2 - Um amplificador e três aparelhos= | =2 - Um amplificador e três aparelhos= | ||
Linha 38: | Linha 102: | ||
;Tabela verdade: | ;Tabela verdade: | ||
− | [[Arquivo: | + | [[Arquivo:tabela22.jpg]] |
*A = Toca-discos | *A = Toca-discos | ||
Linha 46: | Linha 110: | ||
;Wave Form: | ;Wave Form: | ||
− | [[Arquivo:Exercicio2.jpg]] | + | [[Arquivo:Exercicio2.jpg|1070px|thumb|left]] |
;Método adotado: | ;Método adotado: | ||
Linha 52: | Linha 116: | ||
Utilizamos esse modelo pois esse código já possuia 3 entradas, portanto a tabela verdade fica um pouco maior. Dessa forma ficou um código menor e mais simples. | Utilizamos esse modelo pois esse código já possuia 3 entradas, portanto a tabela verdade fica um pouco maior. Dessa forma ficou um código menor e mais simples. | ||
+ | |||
+ | |||
+ | {{collapse top | '''Código VHDL''' - Clicar no "+" para expandir }} | ||
+ | |||
+ | ;:<syntaxhighlight lang=vhdl> | ||
+ | |||
+ | |||
+ | |||
+ | library IEEE; | ||
+ | use IEEE.std_logic_1164.all; | ||
+ | |||
+ | entity prova is | ||
+ | port (A, B, C : in STD_LOGIC; | ||
+ | S : out STD_LOGIC_vector (2 downto 0)); | ||
+ | end prova; | ||
+ | |||
+ | architecture exercicio2 of prova is | ||
+ | signal ABC : std_logic_vector (2 downto 0); | ||
+ | |||
+ | begin | ||
+ | ABC <= A & B & C; | ||
+ | amplifica : process(ABC) is | ||
+ | begin | ||
+ | case(ABC) is | ||
+ | when "001" => S <= "001"; | ||
+ | when "010" => S <= "010"; | ||
+ | when "011" => S <= "010"; | ||
+ | when "100" => S <= "100"; | ||
+ | when "101" => S <= "100"; | ||
+ | when "110" => S <= "100"; | ||
+ | when "111" => S <= "100"; | ||
+ | when others => S <= "000"; | ||
+ | end case; | ||
+ | |||
+ | end process amplifica; | ||
+ | end exercicio2; | ||
+ | |||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | {{collapse bottom}} | ||
=3 - Intercomunicadores= | =3 - Intercomunicadores= | ||
Linha 63: | Linha 169: | ||
;Tabela verdade: | ;Tabela verdade: | ||
− | [[Arquivo: | + | [[Arquivo:Tabela33.jpg]] |
*A = Presidente | *A = Presidente | ||
Linha 72: | Linha 178: | ||
;Wave Form: | ;Wave Form: | ||
− | [[Arquivo:Exercicio3.jpg]] | + | [[Arquivo:Exercicio3.jpg|1070px|thumb|left]] |
;Método adotado: | ;Método adotado: | ||
Linha 79: | Linha 185: | ||
Utilizamos esse código por ter 4 entradas e porque foi o método que ficou mais claro e simples para o grupo. | Utilizamos esse código por ter 4 entradas e porque foi o método que ficou mais claro e simples para o grupo. | ||
+ | |||
+ | {{collapse top | '''Código VHDL''' - Clicar no "+" para expandir }} | ||
+ | |||
+ | ;:<syntaxhighlight lang=vhdl> | ||
+ | |||
+ | library IEEE; | ||
+ | use IEEE.std_logic_1164.all; | ||
+ | |||
+ | entity prova is | ||
+ | port (A, B, C, D : in STD_LOGIC; | ||
+ | S : out STD_LOGIC_vector (3 downto 0)); | ||
+ | end prova; | ||
+ | |||
+ | architecture exercicio3 of prova is | ||
+ | signal ABCD : std_logic_vector (3 downto 0); | ||
+ | |||
+ | begin | ||
+ | ABCD <= A & B & C & D; | ||
+ | amplifica : process(ABCD) is | ||
+ | begin | ||
+ | case(ABCD) is | ||
+ | when "0001" => S <= "0001"; | ||
+ | when "0010" => S <= "0010"; | ||
+ | when "0011" => S <= "0010"; | ||
+ | when "0100" => S <= "0100"; | ||
+ | when "0101" => S <= "0100"; | ||
+ | when "0110" => S <= "0100"; | ||
+ | when "0111" => S <= "0100"; | ||
+ | when "1000" => S <= "1000"; | ||
+ | when "1001" => S <= "1000"; | ||
+ | when "1011" => S <= "1000"; | ||
+ | when "1100" => S <= "1000"; | ||
+ | when "1101" => S <= "1000"; | ||
+ | when "1110" => S <= "1000"; | ||
+ | when "1111" => S <= "1000"; | ||
+ | when others => S <= "0000"; | ||
+ | |||
+ | end case; | ||
+ | |||
+ | end process amplifica; | ||
+ | end exercicio3; | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | {{collapse bottom}} | ||
+ | |||
+ | * Link vídeo: https://youtu.be/pnfvQbq5quc | ||
=4 - Display de 7 segmentos= | =4 - Display de 7 segmentos= | ||
Linha 87: | Linha 244: | ||
[[Arquivo:Tabela4.jpg]] | [[Arquivo:Tabela4.jpg]] | ||
− | |||
− | |||
;Método utilizado: | ;Método utilizado: | ||
+ | Data flow | ||
+ | |||
+ | |||
+ | {{collapse top | '''Código VHDL''' - Clicar no "+" para expandir }} | ||
+ | |||
+ | ;:<syntaxhighlight lang=vhdl> | ||
+ | |||
+ | library IEEE; | ||
+ | use IEEE.Std_Logic_1164.all; | ||
+ | entity decoderNumero is | ||
+ | port (C: in std_logic_vector(3 downto 0); | ||
+ | F: out std_logic_vector(6 downto 0) | ||
+ | ); | ||
+ | end decoderNumero; | ||
+ | |||
+ | architecture decod_bhv of decoderNumero is | ||
+ | Begin | ||
+ | with C select | ||
+ | F <= "1000000" when "0000", -- 0 -- 1 apagado | ||
+ | "1111001" when "0001", -- 1 | ||
+ | "1011011" when "0010", -- 2 | ||
+ | "0110000" when "0011", -- 3 | ||
+ | "0011001" when "0100", -- 4 | ||
+ | "0010010" when "0101", -- 5 | ||
+ | "0000010" when "0110", -- 6 | ||
+ | "1111000" when "0111", -- 7 | ||
+ | "0000000" when "1000", -- 8 | ||
+ | "0011000" when "1001", -- 9 | ||
+ | "0001000" when "1010", -- A | ||
+ | "0000011" when "1011", -- b | ||
+ | "1000110" when "1100", -- C | ||
+ | "0100001" when "1101", -- d | ||
+ | "0000110" when "1110", -- E | ||
+ | "0001110" when "1111", -- F | ||
+ | "1111111" when others; | ||
+ | end decod_bhv; | ||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | {{collapse bottom}} | ||
+ | * Foi mostrado em sala para professor e não foi gravado vídeo; | ||
=5 - Tanque com fluido= | =5 - Tanque com fluido= | ||
Linha 99: | Linha 295: | ||
;Tabela verdade | ;Tabela verdade | ||
− | [[Arquivo: | + | [[Arquivo:Tabela55.jpg]] |
*001 - nível mínimo | *001 - nível mínimo | ||
Linha 117: | Linha 313: | ||
Foi o mais simples e rápido de fazer, pois colocamos somente os casos de entrada possíveis e as demais colocamos como erro. | Foi o mais simples e rápido de fazer, pois colocamos somente os casos de entrada possíveis e as demais colocamos como erro. | ||
+ | |||
+ | |||
+ | {{collapse top | '''Código VHDL''' - Clicar no "+" para expandir }} | ||
+ | |||
+ | ;:<syntaxhighlight lang=vhdl> | ||
+ | |||
+ | library IEEE; | ||
+ | use IEEE.std_logic_1164.all; | ||
+ | |||
+ | entity prova is | ||
+ | port (A, B, C, POWER: in STD_LOGIC; | ||
+ | |||
+ | VALVULA_1, VALVULA_2, LED, LED_ERRO: out STD_LOGIC); | ||
+ | end prova; | ||
+ | |||
+ | architecture exercicio5 of prova is | ||
+ | |||
+ | signal ABC : std_logic_vector (2 downto 0); | ||
+ | |||
+ | begin | ||
+ | |||
+ | ABC <= A&B&C; | ||
+ | vazao : process(ABC) is | ||
+ | begin | ||
+ | |||
+ | if POWER = '0' then | ||
+ | LED <= '0'; | ||
+ | |||
+ | case(ABC) is | ||
+ | |||
+ | when "001" => | ||
+ | VALVULA_1 <= '1'; | ||
+ | VALVULA_2 <= '0'; | ||
+ | LED_ERRO <= '0'; | ||
+ | when "011" => | ||
+ | VALVULA_1 <= '0'; | ||
+ | VALVULA_2 <= '0'; | ||
+ | LED_ERRO <= '0'; | ||
+ | when "111" => | ||
+ | VALVULA_1 <= '0'; | ||
+ | VALVULA_2 <= '1'; | ||
+ | LED_ERRO <= '0'; | ||
+ | when others => | ||
+ | LED_ERRO <= '1'; | ||
+ | VALVULA_1 <= '0'; | ||
+ | VALVULA_2 <= '0'; | ||
+ | end case; | ||
+ | |||
+ | else | ||
+ | VALVULA_1 <= '0'; | ||
+ | VALVULA_2 <= '1'; | ||
+ | LED <= '1'; | ||
+ | |||
+ | |||
+ | end if; | ||
+ | |||
+ | end process vazao; | ||
+ | end exercicio5; | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | {{collapse bottom}} | ||
+ | |||
+ | * Link vídeo: https://youtu.be/SoKGOK8p9Sc | ||
=6 -Cruzamento de três ruas= | =6 -Cruzamento de três ruas= | ||
+ | |||
+ | Desenvolver um sistema para controlar semáforos em um cruzamento de 3 ruas, com as seguintes características | ||
+ | |||
+ | Fechamento dos semáforos | ||
+ | |||
+ | - Quando o semáforo 1 abrir para a rua A, automaticamente os semáforos 2 e 3 devem fechar | ||
+ | |||
+ | - Quando o semáforo 2 abrir para a rua B, automaticamente os semáforos 1 e 3 devem fechar | ||
+ | |||
+ | - Quando o semáforo 3 abrir para a rua C, automaticamente os semáforos 1 e 2 devem fechar | ||
+ | |||
+ | Prioridades | ||
+ | |||
+ | - O motorista que está na rua A tem prioridade sobre o que está na rua B | ||
+ | |||
+ | - O motorista que está na rua B tem prioridade sobre o que está na rua C | ||
+ | |||
+ | - O motorista que está na rua C tem prioridade sobre o que está na rua A | ||
+ | |||
+ | - Quando houver carros nas três ruas, a rua A é preferencial | ||
+ | |||
+ | - Quando não houver nenhum carro na rua, o sinal para a rua A deverá ser aberto | ||
+ | |||
+ | ;Tabela verdade: | ||
+ | [[Arquivo:tabela6.jpg]] | ||
+ | |||
+ | *A = 0 - não possui carro na rua A | ||
+ | *A = 1 - possui carro na rua A | ||
+ | *B = 0 - não possui carro na rua B | ||
+ | *B = 1 - possui carro na rua B | ||
+ | *C = 0 - não possui carro na rua C | ||
+ | *C = 1 - possui carro na rua C | ||
+ | *S1 = 0 - sinaleira da rua A fechada | ||
+ | *S1 = 1 - sinaleira da rua A aberta | ||
+ | *S2 = 0 - sinaleira da rua B fechada | ||
+ | *S2 = 1 - sinaleira da rua B aberta | ||
+ | *S3 = 0 - sinaleira da rua C fechada | ||
+ | *S3 = 1 - sinaleira da rua C aberta | ||
+ | |||
+ | ;Wave Form: | ||
+ | [[Arquivo:wave6.jpg|1070px|thumb|left]] | ||
+ | |||
+ | ;Método utilizado | ||
+ | |||
+ | Behavioral if | ||
+ | |||
+ | Foi o mais simples, rápido de fazer e de melhor entendimento pela equipe. | ||
+ | |||
+ | {{collapse top | '''Código VHDL''' - Clicar no "+" para expandir }} | ||
+ | |||
+ | ;:<syntaxhighlight lang=vhdl> | ||
+ | |||
+ | |||
+ | library IEEE; | ||
+ | use IEEE.std_logic_1164.all; | ||
+ | |||
+ | entity prova is | ||
+ | port (A, B, C : in STD_LOGIC; | ||
+ | S1, S2, S3 : out STD_LOGIC); | ||
+ | end prova; | ||
+ | |||
+ | architecture exercicio6 of prova is | ||
+ | begin | ||
+ | sinal : process(A,B,C) is | ||
+ | begin | ||
+ | if (A = '0' and B = '0' and C = '1') then | ||
+ | S1 <= '0'; | ||
+ | S2 <= '0'; | ||
+ | S3 <= '1'; | ||
+ | elsif (A = '0' and B = '1' and C = '0') then | ||
+ | S1 <= '0'; | ||
+ | S2 <= '1'; | ||
+ | S3 <= '0'; | ||
+ | elsif (A = '1' and B = '0' and C = '0') then | ||
+ | S1 <= '1'; | ||
+ | S2 <= '0'; | ||
+ | S3 <= '0'; | ||
+ | elsif (A = '1' and B = '0' and C = '1') then | ||
+ | S1 <= '0'; | ||
+ | S2 <= '0'; | ||
+ | S3 <= '1'; | ||
+ | elsif (A = '1' and B = '1' and C = '0') then | ||
+ | S1 <= '1'; | ||
+ | S2 <= '0'; | ||
+ | S3 <= '0'; | ||
+ | elsif (A = '0' and B = '1' and C = '1') then | ||
+ | S1 <= '0'; | ||
+ | S2 <= '1'; | ||
+ | S3 <= '0'; | ||
+ | else | ||
+ | S1 <= '1'; | ||
+ | S2 <= '0'; | ||
+ | S3 <= '0'; | ||
+ | end if; | ||
+ | end process sinal; | ||
+ | end exercicio6; | ||
+ | |||
+ | |||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | {{collapse bottom}} | ||
=7 - Tanque de dois níveis, com sensor de temperatura= | =7 - Tanque de dois níveis, com sensor de temperatura= | ||
+ | |||
+ | Desenvolver um sistema para controlar o nível de água em dois tanques por meio de duas válvulas, com as seguintes características | ||
+ | |||
+ | O tanque 2 | ||
+ | |||
+ | - Possui saída para a distribuição, por isso seu nível está sempre em redução | ||
+ | |||
+ | - Possui dois sensores, que indicam o nível mínimo (válvula 2 deve ser acionada) e o máximo (válvula 2 deve ser desligada) | ||
+ | |||
+ | O tanque 1: | ||
+ | |||
+ | - É alimentado pela rede pública de abastecimento | ||
+ | |||
+ | - Possui os mesmos sensores do tanque 2 | ||
+ | |||
+ | - Além desses dois, tendo em vista as oscilações presentes na rede de abastecimento, um sensor de segurança está disponível, indicando um nível intermediário (válvula 1 deve ser acionada se a válvula 2 estiver acionada) | ||
+ | |||
+ | Sempre que chegar no nível mínimo, os tanques devem ser enchidos até o nível máximo | ||
+ | |||
+ | O sensor de temperatura é composto por dois sensores, um que indica se a água está muito fria e outro que indica se a água está muito quente. | ||
+ | |||
+ | Para todos os sensores do sistema, casos de falhas devem acionar um alarme. | ||
+ | |||
+ | ;Tabela verdade: | ||
+ | [[Arquivo:tabela7.jpg]] | ||
+ | |||
+ | Tanque 1: | ||
+ | *A - nível máximo | ||
+ | *B - margem de segurança | ||
+ | *C - nível mínimo | ||
+ | Tanque 2: | ||
+ | *D - nível máximo | ||
+ | *E - nível mínimo | ||
+ | |||
+ | |||
+ | |||
+ | *V1 - válvula do tanque 1 | ||
+ | *V2 - válvula do tanque 2 | ||
+ | *POWER = 1 - sistema funcionando | ||
+ | *POWER = 0 - não importa a entrada: V1 e V2 = 0 | ||
+ | *ERRO = 1 - não é uma entrada possível | ||
+ | *temp - sensor de temperatura | ||
+ | *aguafria = 1 - água está fria | ||
+ | *aguaquente = 1 - água está quente | ||
+ | |||
+ | OBS: Foram feitas duas tabelas diferenciadas, pois a temperatura não depende da entrada nem do power. | ||
+ | |||
+ | |||
+ | ; Wave Form | ||
+ | [[Arquivo:wave7.jpg|1070px|thumb|left]] | ||
+ | |||
+ | ;Método utilizado | ||
+ | |||
+ | Behavioral case e if | ||
+ | |||
+ | Foi o mais simples e rápido de fazer. | ||
+ | |||
+ | {{collapse top | '''Código VHDL''' - Clicar no "+" para expandir }} | ||
+ | |||
+ | ;:<syntaxhighlight lang=vhdl> | ||
+ | |||
+ | library IEEE; | ||
+ | use IEEE.std_logic_1164.all; | ||
+ | |||
+ | entity prova is | ||
+ | Port ( A, B, C, D, E, POWER : in std_logic; | ||
+ | TEMP : in std_logic_vector(1 downto 0); | ||
+ | V1, V2, ERRO, AGUAFRIA, AGUAQUENTE : out std_logic); | ||
+ | end entity; | ||
+ | |||
+ | architecture exercicio7 of prova is | ||
+ | signal ABCDE : std_logic_vector (4 downto 0); | ||
+ | begin | ||
+ | ABCDE <= A&B&C&D&E; | ||
+ | |||
+ | vazao : process(ABCDE) | ||
+ | |||
+ | begin | ||
+ | |||
+ | if POWER = '1' then | ||
+ | |||
+ | case (ABCDE) is | ||
+ | when "00101" => | ||
+ | V1 <= '1'; | ||
+ | V2 <= '1'; | ||
+ | ERRO <= '0'; | ||
+ | |||
+ | when "01101" => | ||
+ | V1 <= '1'; | ||
+ | V2 <= '1'; | ||
+ | ERRO <= '0'; | ||
+ | |||
+ | when "11101" => | ||
+ | V1 <= '1'; | ||
+ | V2 <= '1'; | ||
+ | ERRO <= '0'; | ||
+ | |||
+ | when "00111" => | ||
+ | V1 <= '1'; | ||
+ | V2 <= '0'; | ||
+ | ERRO <= '0'; | ||
+ | |||
+ | when "01111" => | ||
+ | V1 <= '1'; | ||
+ | V2 <= '0'; | ||
+ | ERRO <= '0'; | ||
+ | |||
+ | when "11111" => | ||
+ | V1 <= '0'; | ||
+ | V2 <= '0'; | ||
+ | ERRO <= '0'; | ||
+ | when others => | ||
+ | ERRO <= '1'; | ||
+ | V1 <= '0'; | ||
+ | V2 <= '0'; | ||
+ | end case; | ||
+ | |||
+ | else | ||
+ | ERRO <= '0'; | ||
+ | V1 <= '0'; | ||
+ | V2 <= '0'; | ||
+ | AGUAQUENTE <= '0'; | ||
+ | AGUAFRIA <= '0'; | ||
+ | |||
+ | end if; | ||
+ | |||
+ | if TEMP = "00" then | ||
+ | AGUAFRIA <= '1'; | ||
+ | AGUAQUENTE <='0'; | ||
+ | |||
+ | elsif TEMP = "11" then | ||
+ | AGUAQUENTE <= '1'; | ||
+ | AGUAFRIA <= '0'; | ||
+ | |||
+ | elsif TEMP = "01" then | ||
+ | AGUAQUENTE <= '0'; | ||
+ | AGUAFRIA <= '0'; | ||
+ | |||
+ | elsif TEMP = "10" then | ||
+ | AGUAQUENTE <= '0'; | ||
+ | AGUAFRIA <= '0'; | ||
+ | |||
+ | |||
+ | end if; | ||
+ | |||
+ | end process; | ||
+ | |||
+ | end exercicio7; | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | {{collapse bottom}} | ||
+ | |||
+ | * Link vídeo: https://youtu.be/5it-ibn2fRs | ||
=8 - Somador de 8 bits= | =8 - Somador de 8 bits= | ||
Linha 127: | Linha 652: | ||
;Tabela verdade: | ;Tabela verdade: | ||
− | [[Arquivo: | + | [[Arquivo:tabela888.jpg]] |
Linha 145: | Linha 670: | ||
;Tabela verdade: | ;Tabela verdade: | ||
− | [[Arquivo: | + | [[Arquivo:tabela88.jpg]] |
S = A xor B xor Cin | S = A xor B xor Cin | ||
Linha 154: | Linha 679: | ||
; Wave Form | ; Wave Form | ||
− | [[Arquivo:waveform88.jpg| | + | [[Arquivo:waveform88.jpg|1070px|thumb|left]] |
− | Método utilizado | + | ;Método utilizado |
Data-Flow | Data-Flow | ||
Foi o mais simples e rápido de fazer. | Foi o mais simples e rápido de fazer. | ||
+ | |||
+ | |||
+ | {{collapse top | '''Código VHDL''' - Clicar no "+" para expandir }} | ||
+ | |||
+ | ;:<syntaxhighlight lang=vhdl> | ||
+ | |||
+ | |||
+ | library IEEE; | ||
+ | use IEEE.std_logic_1164.all; | ||
+ | |||
+ | entity prova is | ||
+ | port ( | ||
+ | cin: in STD_LOGIC; | ||
+ | a,b: in STD_LOGIC_VECTOR(7 DOWNTO 0); | ||
+ | cout: out STD_LOGIC; | ||
+ | s: out STD_LOGIC_VECTOR(7 DOWNTO 0)); | ||
+ | end prova; | ||
+ | |||
+ | architecture exericio8 of prova is | ||
+ | begin | ||
+ | process(a,b,cin) | ||
+ | variable soma: std_logic_vector(7 downto 0); | ||
+ | variable c: std_logic; | ||
+ | begin | ||
+ | c := cin; | ||
+ | for i in 0 to 7 loop | ||
+ | soma(i) := a(i) xor b(i) xor c; | ||
+ | c := (a(i) and b(i)) or ((a(i) xor b(i)) and c); | ||
+ | end loop; | ||
+ | cout <= c; | ||
+ | s <= soma; | ||
+ | end process; | ||
+ | end exericio8; | ||
+ | |||
+ | |||
+ | |||
+ | </syntaxhighlight> | ||
+ | |||
+ | |||
+ | {{collapse bottom}} |
Edição atual tal como às 13h52min de 5 de maio de 2015
Relatório referente a Avaliação 1:
1 - Cruzamento de duas ruas
Desenvolver um sistema automático para os semáforos em um cruzamento de duas ruas, com as seguintes características:
1- Quando houver carros somente na rua B, o semáforo 2 deverá permanecer verde 2- Quando houver carros somente na rua A, o semáforo 1 deverá permanecer verde 3- Quando houver carros nas duas ruas, o semáforo 1 deverá permanecer verde
- Tabela verdade
- A = 0 - não possui carro na rua A
- A = 1 - possui carro na rua A
- B = 0 - não possui carro na rua B
- B = 1 - possui carro na rua B
- S1 = 0 - sinaleira da rua A fechada
- S1 = 1 - sinaleira da rua A aberta
- S2 = 0 - sinaleira da rua B fechada
- S2 = 1 - sinaleira da rua B aberta
- Wave Form
- Método adotado
Behavioral if
Utilizamos esse modelo pois era um código com poucas entradas e saídas. Dessa forma ficou mais simples e fácil de entender.
Código VHDL - Clicar no "+" para expandir |
---|
|
- Link vídeo: https://youtu.be/EJigl08gFx4
2 - Um amplificador e três aparelhos
Desenvolver um sistema que comuta a utilização de um amplificador para três aparelhos, obedecendo as seguintes prioridades:
1- Toca-discos 2- Toca-fitas 3- Rádio FM
- Tabela verdade
- A = Toca-discos
- B = Toca-fitas
- C = Rádio FM
- S = Saída em forma de vetor (da esquerda para a direita mostra a ordem e preferência= A,B,C)
- Wave Form
- Método adotado
Behavioral case
Utilizamos esse modelo pois esse código já possuia 3 entradas, portanto a tabela verdade fica um pouco maior. Dessa forma ficou um código menor e mais simples.
Código VHDL - Clicar no "+" para expandir |
---|
|
3 - Intercomunicadores
Desenvolver um sistema que comuta intercomunicadores em uma empresa, obedecendo as seguintes prioridades:
1- Presidente 2- Vice-presidente 3- Engenharia 4- Chefe de seção
- Tabela verdade
- A = Presidente
- B = Vice-presidente
- C = Engenharia
- D = Chefe de seção
- S = Saída em forma de vetor (da esquerda para a direita mostra a ordem e preferência = A,B,C,D)
- Wave Form
- Método adotado
Behavioral case
Utilizamos esse código por ter 4 entradas e porque foi o método que ficou mais claro e simples para o grupo.
Código VHDL - Clicar no "+" para expandir |
---|
|
- Link vídeo: https://youtu.be/pnfvQbq5quc
4 - Display de 7 segmentos
Desenvolver um sistema que mostra um número hexadecimal num display de 7 segmentos
- Tabela verdade
- Método utilizado
Data flow
Código VHDL - Clicar no "+" para expandir |
---|
|
- Foi mostrado em sala para professor e não foi gravado vídeo;
5 - Tanque com fluido
Desenvolver um sistema para controlar o nível de fluido em um tanque por meio de uma válvula de entrada e uma válvula de saída, de igual vazão. O nível de fluído deve ser mantido entre dois níveis, medidos com dois sensores, um de mínimo e outro de máximo. Um botão para total esvaziamento do tanque (equivalente à um botão de liga/desliga do tanque) deve ser previsto.
- Tabela verdade
- 001 - nível mínimo
- 011 - nível médio
- 111 - tanque cheio
- Power = 0 - sistema funcionando
- Power = 1 - esvaziamento do tanque (não importa os valores de A,B,C)
- LED = aceso mostra que Power está em 1
- LED_ERRO = aceso quando a entrada não for nenhuma das possíveis
- Obs: Foi colocado somente 2 exemplos de erro na tabela
- Wave Form
- Método utilizado
Behavioral case
Foi o mais simples e rápido de fazer, pois colocamos somente os casos de entrada possíveis e as demais colocamos como erro.
Código VHDL - Clicar no "+" para expandir |
---|
|
- Link vídeo: https://youtu.be/SoKGOK8p9Sc
6 -Cruzamento de três ruas
Desenvolver um sistema para controlar semáforos em um cruzamento de 3 ruas, com as seguintes características
Fechamento dos semáforos
- Quando o semáforo 1 abrir para a rua A, automaticamente os semáforos 2 e 3 devem fechar
- Quando o semáforo 2 abrir para a rua B, automaticamente os semáforos 1 e 3 devem fechar
- Quando o semáforo 3 abrir para a rua C, automaticamente os semáforos 1 e 2 devem fechar
Prioridades
- O motorista que está na rua A tem prioridade sobre o que está na rua B
- O motorista que está na rua B tem prioridade sobre o que está na rua C
- O motorista que está na rua C tem prioridade sobre o que está na rua A
- Quando houver carros nas três ruas, a rua A é preferencial
- Quando não houver nenhum carro na rua, o sinal para a rua A deverá ser aberto
- Tabela verdade
- A = 0 - não possui carro na rua A
- A = 1 - possui carro na rua A
- B = 0 - não possui carro na rua B
- B = 1 - possui carro na rua B
- C = 0 - não possui carro na rua C
- C = 1 - possui carro na rua C
- S1 = 0 - sinaleira da rua A fechada
- S1 = 1 - sinaleira da rua A aberta
- S2 = 0 - sinaleira da rua B fechada
- S2 = 1 - sinaleira da rua B aberta
- S3 = 0 - sinaleira da rua C fechada
- S3 = 1 - sinaleira da rua C aberta
- Wave Form
- Método utilizado
Behavioral if
Foi o mais simples, rápido de fazer e de melhor entendimento pela equipe.
Código VHDL - Clicar no "+" para expandir |
---|
|
7 - Tanque de dois níveis, com sensor de temperatura
Desenvolver um sistema para controlar o nível de água em dois tanques por meio de duas válvulas, com as seguintes características
O tanque 2
- Possui saída para a distribuição, por isso seu nível está sempre em redução
- Possui dois sensores, que indicam o nível mínimo (válvula 2 deve ser acionada) e o máximo (válvula 2 deve ser desligada)
O tanque 1:
- É alimentado pela rede pública de abastecimento
- Possui os mesmos sensores do tanque 2
- Além desses dois, tendo em vista as oscilações presentes na rede de abastecimento, um sensor de segurança está disponível, indicando um nível intermediário (válvula 1 deve ser acionada se a válvula 2 estiver acionada)
Sempre que chegar no nível mínimo, os tanques devem ser enchidos até o nível máximo
O sensor de temperatura é composto por dois sensores, um que indica se a água está muito fria e outro que indica se a água está muito quente.
Para todos os sensores do sistema, casos de falhas devem acionar um alarme.
- Tabela verdade
Tanque 1:
- A - nível máximo
- B - margem de segurança
- C - nível mínimo
Tanque 2:
- D - nível máximo
- E - nível mínimo
- V1 - válvula do tanque 1
- V2 - válvula do tanque 2
- POWER = 1 - sistema funcionando
- POWER = 0 - não importa a entrada: V1 e V2 = 0
- ERRO = 1 - não é uma entrada possível
- temp - sensor de temperatura
- aguafria = 1 - água está fria
- aguaquente = 1 - água está quente
OBS: Foram feitas duas tabelas diferenciadas, pois a temperatura não depende da entrada nem do power.
- Wave Form
- Método utilizado
Behavioral case e if
Foi o mais simples e rápido de fazer.
Código VHDL - Clicar no "+" para expandir |
---|
|
- Link vídeo: https://youtu.be/5it-ibn2fRs
8 - Somador de 8 bits
Supondo a soma de dois bits, para cada par de bit somado existem duas saídas: o vai um (carry) e o resultado da soma.
- Tabela verdade
Pela tabela verdade podemos concluir que S e carry podem ser calculados por uma porta XOR e uma porta AND, respectivamente.
S = B xor B
Carry = A and B
- Somador Completo
O circuito capaz de realizar a soma de 3 bits (A,B e Cin) dois significativos e um de transporte, gerando o resultado em dois bits ( S e Cout) é denominado somador completo. A entrada Cin (bit Carry de entrada) recebe o transporte da soma do estagio anterior (carry).
- Tabela verdade
S = A xor B xor Cin
Cout = (A and B) or (B and Cin) or (A and Cin)
Um somador de 8 bits basicamente são 8 somadores de 1 bit
- Wave Form
- Método utilizado
Data-Flow
Foi o mais simples e rápido de fazer.
Código VHDL - Clicar no "+" para expandir |
---|
|