Soluções do capítulo 7

Exercício 7.6.3


1
2
3
4
5
6
7
8
9
10
11


1
2
3
4
5
6
7
8
9
10
11
12

13
14
15
16
17
ENTITY som_e1 IScapa_1ra
  PORT   (a, b, ve  : IN  BIT;
          s, vs     : OUT BIT);
END som_e1;

ARCHITECTURE teste OF som_e1 IS

BEGIN
  s  <=  a XOR b  XOR ve;                      -- soma
  vs <= (a AND b) OR (a AND ve) OR (b AND ve); -- vai um
END teste;


ENTITY som_e2 IS
  PORT  ( x, y  : IN  BIT_VECTOR (3 DOWNTO 0);  -- entradas do somador
          s     : OUT BIT_VECTOR (3 DOWNTO 0)); -- soma
 END som_e2;

ARCHITECTURE estrutural OF som_e2 IS
  COMPONENT som_e1
    PORT   (a, b, ve : IN  BIT := '0';  s, vs : OUT BIT);
  END COMPONENT;

  SIGNAL v   : BIT_VECTOR (3 DOWNTO 1);  -- vai um interno
BEGIN
  x0: som_e1 PORT MAP(   x(0),    y(0),    OPEN,     s(0),     v(1));
  x1: som_e1 PORT MAP(   x(1),    y(1),    v(1),     s(1),     v(2)); 
  x2: som_e1 PORT MAP(   x(2),    y(2),    v(2),     s(2),     v(3));
  x3: som_e1 PORT MAP(   x(3),    y(3),    v(3),     s(3),     OPEN);
END estrutural;

Exercício 7.6.8

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

ENTITY loop_n1 IScapa_1ra
 GENERIC (n         : INTEGER := 4);
  PORT (inteiro_e : IN  INTEGER RANGE 0 TO 2**n-1;     -- entrada inteiro
        bit_s     : OUT BIT_VECTOR (n-1 DOWNTO 0));  -- saida convertida para bit_vector
END loop_n1;


ARCHITECTURE teste OF loop_n1 IS
BEGIN
  abc_next: PROCESS (inteiro_e)
    VARIABLE temp_entrada : INTEGER RANGE 0 TO 2**n-1;
    VARIABLE temp_saida   : BIT_VECTOR (n-1 DOWNTO 0);
  BEGIN
    temp_entrada := inteiro_e;
    loop_1: FOR i IN 0 TO n-1 LOOP
      IF (temp_entrada MOD 2 = 1) THEN
        temp_saida(i) := '1';
        temp_entrada := temp_entrada /2;
        NEXT loop_1;
      ELSE
        temp_saida(i) := '0';
        temp_entrada := temp_entrada /2;
        NEXT loop_1;
      END IF;
     END LOOP;
    bit_s <= temp_saida;
  END PROCESS;
END teste;