Soluções do capítulo 4

Exercício 4.9.2


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
ENTITY certo1 IScapa_1ra
  PORT (a, b :  IN  BIT;  
        c    :  IN  BOOLEAN; 
        x, y, z, k    :  OUT BIT);
END certo1;

ARCHITECTURE teste OF certo1 IS
BEGIN
  abc: PROCESS (a, b, c)
  BEGIN
 -- IF a THEN x <= '1';               -- resultado da expressao nao e' boolean
 -- END IF;
    IF a = '1' THEN x <= '1';         -- correto resultado da expressao boolean
    END IF;   
    IF c THEN z <= '1';               -- correto c tipo boolean
    END IF;   
 -- IF a AND b = '1' THEN y <= '0';   -- expresao dubia
 -- END IF;
    IF (a AND b) = '1' THEN y <= '0';
    END IF;
    IF c AND b = '1' THEN k <= '1';  -- equivale c=TRUE AND b='1'
    END IF;
  END PROCESS abc;
END teste;


Exercício 4.9.13

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
ENTITY bcd_mps IS capa_1ra
  PORT (bcd    : IN  BIT_VECTOR(3 DOWNTO 0);  -- entrada BCD
        sel    : IN  BIT_VECTOR(1 DOWNTO 0);  -- selecao mostrador
        sgm    : OUT BIT_VECTOR(6 DOWNTO 0);  -- 7 segmentos
        mst    : OUT BIT_VECTOR(3 DOWNTO 0)); -- segmento comum mostrador
END bcd_mps;

ARCHITECTURE comb OF bcd_mps IS
  BEGIN                         
    sel_mostrador: PROCESS(sel)    -- selecao de um dos 4 mostradores
    BEGIN                          -- 0 aciona mostrador
      CASE sel IS
        WHEN "00"   => mst <= "0111";
        WHEN "01"   => mst <= "1011";
        WHEN "10"   => mst <= "1101";
        WHEN OTHERS => mst <= "1110";
      END CASE;
  END PROCESS;

  bcd_p_7: PROCESS (bcd)          -- converte codigo BCD para 7 segmentos
  BEGIN                           -- 1 liga segmento
    CASE bcd IS                  
    --                            abcdefg
      WHEN "0000" => sgm <= "1111110";  --     -----
      WHEN "0001" => sgm <= "1100000";  --    |  f   |
      WHEN "0010" => sgm <= "1011010";  --  e |      | a
      WHEN "0011" => sgm <= "1110011";  --     ------
      WHEN "0100" => sgm <= "1100101";  --    |  g   |
      WHEN "0101" => sgm <= "0110111";  --  d |      | b
      WHEN "0110" => sgm <= "0111111";  --    ------
      WHEN "0111" => sgm <= "1100010";  --       c
      WHEN "1000" => sgm <= "1111111";
      WHEN "1001" => sgm <= "1110111";
      WHEN OTHERS => sgm <= "0000000";
    END CASE;
  END PROCESS;
END comb;