Exercício 8.8.4 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
ENTITY sb_prc3 IS![]() PORT (a_i, b_i : IN BIT_VECTOR (3 DOWNTO 0); c_i : IN BIT; s_o : OUT BIT_VECTOR (3 DOWNTO 0); c_o : OUT BIT); END sb_prc3; ARCHITECTURE exemplo OF sb_prc3 IS PROCEDURE soma ( a, b, c : IN BIT; -- modo IN, classe default= constant SIGNAL soma, vai_1 : OUT BIT) IS -- modo OUT, classe default= variable BEGIN soma <= a XOR b XOR c; vai_1 <= (a AND b) OR (a AND c) OR (b AND c); END soma; SIGNAL c : BIT_VECTOR (3 DOWNTO 1); -- vai um interno BEGIN soma (a_i(0), b_i(0), c_i, s_o(0), c(1)); soma (a_i(1), b_i(1), c(1), s_o(1), c(2)); soma (a_i(2), b_i(2), c(2), s_o(2), c(3)); soma (a_i(3), b_i(3), c(3), s_o(3), c_o); END exemplo; |
|
|
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 38 |
ENTITY sb_cnv1 IS![]() PORT (e_inteiro : IN INTEGER RANGE 0 to 7; -- entrada formato inteiro s_bit : BUFFER BIT_VECTOR (2 DOWNTO 0); -- saida convertida para vetor de bits s_inteiro : OUT INTEGER RANGE 0 to 7); -- saida convertida para inteiro END sb_cnv1; ARCHITECTURE teste OF sb_cnv1 IS FUNCTION converte_inteiro (b_x : BIT_VECTOR) RETURN INTEGER IS VARIABLE temp : INTEGER; BEGIN temp := 0; FOR i IN 0 TO (b_x'LENGTH -1) LOOP -- numero de iteracoes funcao do tamanho do vetor entrada IF b_x(i) = '1' THEN temp := temp + 2**i; END IF; END LOOP; RETURN temp; END converte_inteiro; PROCEDURE converte_bit (SIGNAL inteiro_e : IN INTEGER; SIGNAL bit_s : OUT BIT_VECTOR) IS VARIABLE temp_entrada : INTEGER; VARIABLE temp_saida : BIT_VECTOR (bit_s'LENGTH-1 DOWNTO 0); -- variavel com mesmo tamanho do vetor saida BEGIN temp_entrada := inteiro_e; FOR i IN 0 TO (bit_s'LENGTH - 1) LOOP -- numero de iteracoes funcao do tamanho do vetor saida IF (temp_entrada MOD 2 = 1) THEN temp_saida(i) := '1'; ELSE temp_saida(i) := '0'; END IF; temp_entrada := temp_entrada / 2; END LOOP; bit_s <= temp_saida; END converte_bit; BEGIN converte_bit (e_inteiro, s_bit); -- dado formato inteiro convertido para bit_vector s_inteiro <= converte_inteiro (s_bit); -- dado formato bit_vector convertido novamente para inteiro END teste; |