Soluções do capítulo 15

Exercício 15.5.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
30
31
32
33
34
ENTITY forma_5e IScapa_1ra
  PORT (s0, s1  : OUT BIT_VECTOR(1 DOWNTO 0);
        n0, n1  : OUT INTEGER);
END forma_5e;

ARCHITECTURE teste OF forma_5e IS
  TYPE sinais IS
    RECORD nt : INTEGER;
           dt : BIT_VECTOR(1 DOWNTO 0);
    END RECORD;
 TYPE conjunto_sinais IS ARRAY (natural RANGE <>) OF sinais;
 CONSTANT vet : conjunto_sinais := ((1,"01"),(3,"11"),(2,"10"),(0,"00"));

BEGIN
-- valor atribuido em:
--        t=t+0ns    t=t+20 ns              t=t+50 ns              t=t+100ns
  xyz: PROCESS BEGIN                                                
    s0 <= vet(0).dt, vet(1).dt AFTER 20 ns, vet(2).dt AFTER 70 ns, vet(3).dt AFTER 100 ns;
    n0 <= vet(0).nt, vet(1).nt AFTER 20 ns, vet(2).nt AFTER 70 ns, vet(3).nt AFTER 100 ns;
    WAIT FOR 140 ns; -- tranferencias agendadas em t=t+0ns, e aguarda 140 ns para repetir ciclo
  END PROCESS;
  
  abc: PROCESS BEGIN                   -- iteracao ocorre na execucao da decl. WAIT
    s1 <= vet(0).dt; n1 <= vet(0).nt;
    WAIT FOR 20 ns;                    -- s1 =01, n1=1 em t+0ns,     e aguarda 20ns
    s1 <= vet(1).dt; n1 <= vet(1).nt;
    WAIT FOR 50 ns;                    -- s1 =11, n1=3 em t+0+20ns,  e aguarda 50ns
    s1 <= vet(2).dt; n1 <= vet(2).nt;
    WAIT FOR 30 ns;                    -- s1 =10, n1=2 em t+20+50ns, e aguarda 30ns
    s1 <= vet(3).dt; n1 <= vet(3).nt;
    WAIT FOR  0 ns;                    -- s1 =00, n1=0 em t+70+30ns, e aguarda  0 ns;
    WAIT FOR 40 ns;                    -- aguarda  30 ns, reiniciando em t+140ns;
  END PROCESS;
END teste;


Exercício 15.5.5

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
-- versao VHDL-1993capa_1ra
-- gera arquivo binario contendo os estimulos para o teste de tes_ex6
ENTITY tes_ex4 IS
  GENERIC(ini_a : INTEGER :=  0;  -- valor inicial do estimulo entrada a
          max_a : INTEGER := 15;  -- valor final   do estimulo entrada a
          ini_b : INTEGER :=  0;  -- valor inicial do estimulo entrada b         
          max_b : INTEGER :=  7;  -- valor final   do estimulo entrada b
          arquivo_dados : STRING  := "dados.dat"); -- nome do aquivo de dados
END tes_ex4;

ARCHITECTURE teste OF tes_ex4 IS
BEGIN
 escreve: PROCESS
   TYPE arq_int  IS FILE OF INTEGER;
   FILE arquivo_wr : arq_int OPEN Write_Mode IS arquivo_dados;
 BEGIN 
   FOR va IN ini_a TO max_a LOOP
      FOR vb IN ini_b TO max_b LOOP
        WRITE(arquivo_wr, va);     
        WRITE(arquivo_wr, vb);
      END LOOP;
    END LOOP;
    FILE_CLOSE(arquivo_wr);
    WAIT;
  END PROCESS escreve;
END teste;