USE WORK.synthesis_utilities.ALL; LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; LIBRARY STD; USE STD.textio.ALL; ------------------------------------------------------------------------- PACKAGE mem_pack_con IS PROCEDURE int2std_logic (int : IN INTEGER; std : OUT std_logic_vector); FUNCTION std_logic2int (stdin : IN std_logic_vector) RETURN INTEGER; PROCEDURE write_mem_con(l : INOUT LINE; VARIABLE m : IN byte_node_ptr); PROCEDURE read_mem_con(l : INOUT LINE; m : OUT byte_node_ptr:=NULL); --********* FUNCTION int2str (int : INTEGER) RETURN STRING; END mem_pack_con; -------------------------------------------------------------------------- PACKAGE BODY mem_pack_con IS --********************************************************************** FUNCTION int2str (int : INTEGER) RETURN STRING IS VARIABLE str : STRING(4 DOWNTO 1) := " "; VARIABLE temp : INTEGER := int; BEGIN FOR i IN 1 TO 4 LOOP str(i) := character'val(character'pos('0')+(temp MOD 10)); temp:=temp/10; END LOOP; RETURN str; END int2str; --********************************************************************** FUNCTION std_logic2int (stdin : IN std_logic_vector) RETURN INTEGER IS VARIABLE result : INTEGER; BEGIN result := 0; FOR i IN stdin'RIGHT TO stdin'LEFT LOOP IF stdin(i) = '1' THEN result := result + 2**(i-stdin'RIGHT); END IF; END LOOP; RETURN result; END std_logic2int; --*********************************************************************** PROCEDURE int2std_logic (int : IN INTEGER; std : OUT std_logic_vector) IS VARIABLE tmp : INTEGER; BEGIN tmp := int; FOR i IN std'RIGHT TO std'LEFT LOOP IF (tmp MOD 2 = 1) THEN std (i) := '1'; ELSE std (i) := '0'; END IF; tmp := tmp / 2; END LOOP; END int2std_logic; --************************************************************************ PROCEDURE write_mem_con(l : INOUT LINE; VARIABLE m : IN byte_node_ptr) IS VARIABLE str : STRING(1 TO 9); VARIABLE t : byte_node_ptr := m; BEGIN WHILE t/=NULL LOOP FOR i IN 0 TO 7 LOOP IF t.val(i)='1' THEN str(8-i) := '1'; ELSIF t.val(i)='0' THEN str(8-i) := '0'; ELSE str(8-i) := 'U'; END IF; END LOOP; IF t.link/= NULL THEN str(9) := ':'; ELSE str(9) := ' '; END IF; write(l,str,RIGHT); t:=t.link; END LOOP; END write_mem_con; --************************************************************************ PROCEDURE read_mem_con(l : INOUT LINE; m : OUT byte_node_ptr:=NULL) IS VARIABLE str : STRING(1 TO 9); VARIABLE t : byte_node_ptr := NULL; BEGIN t := NEW byte_node; m := t; LOOP read(l,str); FOR i IN 1 TO 8 LOOP IF str(i)='1' THEN t.val(8-i) := '1'; ELSIF str(i)='0' THEN t.val(8-i) := '0'; ELSIF str(i)='U' THEN t.val(8-i) := 'U'; END IF; END LOOP; IF str(9)=' ' THEN EXIT; END IF; t.link := NEW byte_node; t := t.link; END LOOP; t.link := NULL; END read_mem_con; --************************************************************************ END mem_pack_con;