Soluções do capítulo 3

Exercício 3.10.5


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
ENTITY priord_1 IS capa_1ra
  PORT (p0, p1, p2, p3  : IN  BIT;
        int, x1,x0      : OUT BIT);
END priord_1;

ARCHITECTURE teste OF priord_1 IS
  SIGNAL p : BIT_VECTOR (0 TO 3);
  SIGNAL x : BIT_VECTOR (2 DOWNTO 0);
BEGIN
  p <= p0 & p1 & p2 & p3;
  int <= x(2);
  x1  <= x(1);
  x0  <= x(0);
  WITH p SELECT      -- localmente estatica
    x <= "100" WHEN "1111"|"1110"|"1101"|"1100"|"1011"|"1010"|"1001"|"1000", -- p=1---
         "101" WHEN "0111"|"0110"|"0101"|"0100",                             -- p=01--
         "110" WHEN "0011"|"0010",                                           -- p=001-
         "111" WHEN "0001",                                                  -- p=0001
         "011" WHEN "0000";                                                  -- p=0000
END teste;

Exercício 3.10.9

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
ENTITY bcd_mpx 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_mpx;

ARCHITECTURE comb OF bcd_mpx IS
BEGIN
  sel_mostrador: BLOCK           -- selecao de um dos 4 mostradores
  BEGIN                          -- 0 aciona mostrador
    mst <= "0111" WHEN sel= "00" ELSE
           "1011" WHEN sel= "01" ELSE
           "1101" WHEN sel= "10" ELSE
           "1110";
  END BLOCK sel_mostrador;

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