Soluções do capítulo 13

Exercício 13.4.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
25
26
27
28
29
30
31
32
33
34
35
36
37
-- versao VHDL-1993capa_1ra
--
ENTITY arqv_j IS
  GENERIC(n : INTEGER := 2);
  PORT(dado_lido  : OUT STRING(1 TO n);
       tamanho    : OUT NATURAL);  --
END arqv_j;

ARCHITECTURE teste OF arqv_j IS
  TYPE vetor_2d IS ARRAY(0 TO 7) OF STRING(1 TO 3);
  CONSTANT dado_escrito : vetor_2d := ("abc","def","ghi","jkl","mno","pqr","stu","vxz");
 
  TYPE arquivo_u IS FILE OF STRING; -- limites do vetor nao definidos "unconstrained array type"
  FILE arq_rd : arquivo_u;
  TYPE arquivo_c IS FILE OF STRING(1 TO 3); -- limites definidos
  FILE arq_wr : arquivo_c;
 BEGIN
  escreve_le: PROCESS
    VARIABLE dado_lido_v : STRING(1 TO n);
    VARIABLE tamanho_v : NATURAL;
  BEGIN
    FILE_OPEN(arq_wr, "\vhd\dado_j.dat",Write_Mode);
    FOR i IN 0 TO 7 LOOP 
      WRITE(arq_wr, dado_escrito(i));  -- escreve   
    END LOOP;                          --
    FILE_CLOSE(arq_wr);                -- fecha o arquivo
 
    FILE_OPEN(arq_rd, "\vhd\dado_j.dat",Read_Mode);
    WHILE NOT ENDFILE(arq_rd) LOOP          -- testa fim do arquivo
      READ(arq_rd, dado_lido_v, tamanho_v); -- le os valores na forma binaria
      dado_lido <= dado_lido_v;             -- argumento do procedimento tipo variavel
      tamanho <= tamanho_v;
      WAIT FOR 10 ns;                       -- aguarda 10 ns para proxima leitura
    END LOOP;                         
  WAIT;
  END PROCESS escreve_le;
END teste;


Exercício 13.4.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
33
34
35
36

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

-- versao VHDL-1993capa_1ra
USE STD.TEXTIO.ALL;

ENTITY arq_cnv1 IS
END arq_cnv1;

ARCHITECTURE teste OF arq_cnv1 IS  
 BEGIN
  converte: PROCESS    
    FILE     arq_texto   : TEXT OPEN READ_MODE IS "dad_txt.dat"; -- arquivo formato:
    VARIABLE linha       : LINE;                       -- | | | | | | | | |
    VARIABLE ck_v, rst_v : BIT;                        --    0   1   1   0
    VARIABLE d_v,  q_v   : BIT;                        --    0   0   1   0

    VARIABLE car         : CHARACTER;                  --    1   1   0   0
                                                          
    TYPE arq_tipo_bit IS FILE OF BIT;
    FILE arq_bin : arq_tipo_bit OPEN Write_Mode IS "dad_bin.dat";
 
  BEGIN
    WHILE NOT ENDFILE(arq_texto) LOOP
     READLINE(arq_texto, linha);             -- leitura de uma linha
     READ(linha, car); READ(linha, ck_v);    -- leitura dos dados, espaco e valor
     READ(linha, car); READ(linha, rst_v);   --               "
     READ(linha, car); READ(linha, d_v);     --               "
     READ(linha, car); READ(linha, q_v);     --               " 
 
     WRITE(arq_bin, ck_v);  -- esqueve dados
     WRITE(arq_bin, rst_v); --          "
     WRITE(arq_bin, d_v);   --          "
     WRITE(arq_bin, q_v);   --          "  
    END LOOP;
    FILE_CLOSE(arq_texto);    
    FILE_CLOSE(arq_bin);                  
    WAIT;
  END PROCESS converte;
END teste;
 

-- versao VHDL-1993
-- verifica conteudo do arquivo criado pela entidade arq_cnv1
ENTITY arq_cnv2 IS
  PORT (ck_s, rst_s, d_s, q_s  : OUT BIT);
END arq_cnv2;

ARCHITECTURE teste OF arq_cnv2 IS  
 BEGIN
  verifica: PROCESS     
    TYPE arq_tipo_bit IS FILE OF BIT;
    FILE arq_bin : arq_tipo_bit OPEN Read_Mode IS "dad_bin.dat";
    VARIABLE ck_v, rst_v : BIT;                       
    VARIABLE d_v,  q_v   : BIT;               
  BEGIN
    WHILE NOT ENDFILE(arq_bin) LOOP
     READ(arq_bin, ck_v);   ck_s  <= ck_v;   -- le dados; tranfere sinal
     READ(arq_bin, rst_v);  rst_s <= rst_v;  --    "
     READ(arq_bin, d_v);    d_s   <= d_v;    --    "
     READ(arq_bin, q_v);    q_s   <= q_v;    --    "
     WAIT FOR 10 ns;      -- tempo para apresentacao dos dados 
    END LOOP;
    FILE_CLOSE(arq_bin);                  
    WAIT;
  END PROCESS verifica;
END teste;