SST20707-2015-1 - Avaliação 1 - Equipe 2

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar

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

Tabela1.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
  • 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

Exercicio1.jpg

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
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;


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

Tabela2.jpg

  • 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
Exercicio2.jpg
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
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;


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

Tabela3.jpg

  • 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
Exercicio3.jpg
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
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;


4 - Display de 7 segmentos

Desenvolver um sistema que mostra um número hexadecimal num display de 7 segmentos

Tabela verdade

Tabela4.jpg

Wave Form

Arquivo:Exercicio4.jpg

Método utilizado


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

Tabela5.jpg

  • 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

Exercicio5.jpg

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
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;


6 -Cruzamento de três ruas

7 - Tanque de dois níveis, com sensor de temperatura

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

Tabela somador.jpg


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).

Somador porta.jpg


Tabela verdade

Tabela somador completo.jpg

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
Waveform88.jpg

Método utilizado

Data-Flow

Foi o mais simples e rápido de fazer.