Soluções do capítulo 12

Exercício 12.10.1


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

LIBRARY ieee;capa_1ra
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.ALL;

ENTITY memor_4 IS
  PORT (ce, wr   : IN    BIT;                    
        endereco : IN    UNSIGNED (3 DOWNTO 0);
        dado     : INOUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END memor_4;

ARCHITECTURE teste OF memor_4 IS
  TYPE matriz_dados IS ARRAY (0 TO 2**endereco'LENGTH-1) OF STD_LOGIC_VECTOR(3 DOWNTO 0);
  SIGNAL memoria : matriz_dados;
BEGIN
  mem: PROCESS (ce, wr)
  BEGIN
    IF ce'EVENT AND ce ='1' THEN
      IF wr = '0' THEN memoria(to_integer(endereco)) <= dado;          -- escrita do dado
      END IF;
    END IF;
  END PROCESS mem;
 
  tri: PROCESS (ce, wr, endereco)
  BEGIN
    IF ce ='0' AND wr ='1' THEN dado <= memoria(to_integer(endereco));  -- leitura do dado
    ELSE                        dado <= (OTHERS => 'Z');
    END IF;
  END PROCESS tri;
END teste;


Exercício 12.10.6

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

ENTITY rec_tes IScapa_1ra
END rec_tes;

ARCHITECTURE teste OF rec_tes IS
  TYPE instante IS
    RECORD
      hora    : INTEGER RANGE 0 TO 23;
      minuto  : INTEGER RANGE 0 TO 59;
      segundo : INTEGER RANGE 0 TO 59;
    END RECORD;
 
CONSTANT inicio_operacao : instante := (7,30,00);  -- exemplo vide linha 29
SIGNAL   temp_opr        : instante;

BEGIN
  abc: PROCESS
    VARIABLE tempo : instante;
  BEGIN
   WAIT FOR 1 sec;
   IF tempo.segundo < 59 THEN  tempo.segundo := tempo.segundo +1;
   ELSE                        tempo.segundo := 0;
     IF tempo.minuto < 59 THEN tempo.minuto  := tempo.minuto +1;
     ELSE                      tempo.minuto  := 0;
       IF tempo.hora < 23 THEN tempo.hora    := tempo.hora +1;
       ELSE                    tempo.hora    := 0;
       END IF;
     END IF;
   END IF;
   temp_opr <= tempo;
 END PROCESS;
 --temp_opr <= inicio_operacao;   -- exemplo
END teste;