summaryrefslogtreecommitdiff
path: root/libraries/synopsys/std_logic_textio.vhdl
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/synopsys/std_logic_textio.vhdl')
-rw-r--r--libraries/synopsys/std_logic_textio.vhdl634
1 files changed, 634 insertions, 0 deletions
diff --git a/libraries/synopsys/std_logic_textio.vhdl b/libraries/synopsys/std_logic_textio.vhdl
new file mode 100644
index 0000000..d69a87e
--- /dev/null
+++ b/libraries/synopsys/std_logic_textio.vhdl
@@ -0,0 +1,634 @@
+----------------------------------------------------------------------------
+--
+-- Copyright (c) 1990, 1991, 1992 by Synopsys, Inc. All rights reserved.
+--
+-- This source file may be used and distributed without restriction
+-- provided that this copyright statement is not removed from the file
+-- and that any derivative work contains this copyright notice.
+--
+-- Package name: STD_LOGIC_TEXTIO
+--
+-- Purpose: This package overloads the standard TEXTIO procedures
+-- READ and WRITE.
+--
+-- Author: CRC, TS
+--
+----------------------------------------------------------------------------
+
+use STD.textio.all;
+library IEEE;
+use IEEE.std_logic_1164.all;
+
+package STD_LOGIC_TEXTIO is
+--synopsys synthesis_off
+ -- Read and Write procedures for STD_ULOGIC and STD_ULOGIC_VECTOR
+ procedure READ(L:inout LINE; VALUE:out STD_ULOGIC);
+ procedure READ(L:inout LINE; VALUE:out STD_ULOGIC; GOOD: out BOOLEAN);
+ procedure READ(L:inout LINE; VALUE:out STD_ULOGIC_VECTOR);
+ procedure READ(L:inout LINE; VALUE:out STD_ULOGIC_VECTOR; GOOD: out BOOLEAN);
+ procedure WRITE(L:inout LINE; VALUE:in STD_ULOGIC;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0);
+ procedure WRITE(L:inout LINE; VALUE:in STD_ULOGIC_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0);
+
+ -- Read and Write procedures for STD_LOGIC_VECTOR
+ procedure READ(L:inout LINE; VALUE:out STD_LOGIC_VECTOR);
+ procedure READ(L:inout LINE; VALUE:out STD_LOGIC_VECTOR; GOOD: out BOOLEAN);
+ procedure WRITE(L:inout LINE; VALUE:in STD_LOGIC_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0);
+
+ --
+ -- Read and Write procedures for Hex and Octal values.
+ -- The values appear in the file as a series of characters
+ -- between 0-F (Hex), or 0-7 (Octal) respectively.
+ --
+
+ -- Hex
+ procedure HREAD(L:inout LINE; VALUE:out STD_ULOGIC_VECTOR);
+ procedure HREAD(L:inout LINE; VALUE:out STD_ULOGIC_VECTOR; GOOD: out BOOLEAN);
+ procedure HWRITE(L:inout LINE; VALUE:in STD_ULOGIC_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0);
+ procedure HREAD(L:inout LINE; VALUE:out STD_LOGIC_VECTOR);
+ procedure HREAD(L:inout LINE; VALUE:out STD_LOGIC_VECTOR; GOOD: out BOOLEAN);
+ procedure HWRITE(L:inout LINE; VALUE:in STD_LOGIC_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0);
+
+ -- Octal
+ procedure OREAD(L:inout LINE; VALUE:out STD_ULOGIC_VECTOR);
+ procedure OREAD(L:inout LINE; VALUE:out STD_ULOGIC_VECTOR; GOOD: out BOOLEAN);
+ procedure OWRITE(L:inout LINE; VALUE:in STD_ULOGIC_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0);
+ procedure OREAD(L:inout LINE; VALUE:out STD_LOGIC_VECTOR);
+ procedure OREAD(L:inout LINE; VALUE:out STD_LOGIC_VECTOR; GOOD: out BOOLEAN);
+ procedure OWRITE(L:inout LINE; VALUE:in STD_LOGIC_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0);
+
+
+--synopsys synthesis_on
+end STD_LOGIC_TEXTIO;
+
+package body STD_LOGIC_TEXTIO is
+--synopsys synthesis_off
+
+ -- Type and constant definitions used to map STD_ULOGIC values
+ -- into/from character values.
+
+ type MVL9plus is ('U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-', ERROR);
+ type char_indexed_by_MVL9 is array (STD_ULOGIC) of character;
+ type MVL9_indexed_by_char is array (character) of STD_ULOGIC;
+ type MVL9plus_indexed_by_char is array (character) of MVL9plus;
+
+ constant MVL9_to_char: char_indexed_by_MVL9 := "UX01ZWLH-";
+ constant char_to_MVL9: MVL9_indexed_by_char :=
+ ('U' => 'U', 'X' => 'X', '0' => '0', '1' => '1', 'Z' => 'Z',
+ 'W' => 'W', 'L' => 'L', 'H' => 'H', '-' => '-', others => 'U');
+ constant char_to_MVL9plus: MVL9plus_indexed_by_char :=
+ ('U' => 'U', 'X' => 'X', '0' => '0', '1' => '1', 'Z' => 'Z',
+ 'W' => 'W', 'L' => 'L', 'H' => 'H', '-' => '-', others => ERROR);
+
+
+ -- Overloaded procedures.
+
+ procedure READ(L:inout LINE; VALUE:out STD_ULOGIC; GOOD:out BOOLEAN) is
+ variable c: character;
+ begin
+ loop -- skip white space
+ read(l,c);
+ exit when ((c /= ' ') and (c /= CR) and (c /= HT));
+ end loop;
+
+ if (char_to_MVL9plus(c) = ERROR) then
+ value := 'U';
+ good := FALSE;
+ else
+ value := char_to_MVL9(c);
+ good := TRUE;
+ end if;
+ end READ;
+
+ procedure READ(L:inout LINE; VALUE:out STD_ULOGIC_VECTOR; GOOD:out BOOLEAN) is
+ variable m: STD_ULOGIC;
+ variable c: character;
+ variable s: string(1 to value'length-1);
+ variable mv: STD_ULOGIC_VECTOR(0 to value'length-1);
+ constant allU: STD_ULOGIC_VECTOR(0 to value'length-1)
+ := (others => 'U');
+ begin
+ loop -- skip white space
+ read(l,c);
+ exit when ((c /= ' ') and (c /= CR) and (c /= HT));
+ end loop;
+
+ if (char_to_MVL9plus(c) = ERROR) then
+ value := allU;
+ good := FALSE;
+ return;
+ end if;
+
+ read(l, s);
+ for i in integer range 1 to value'length-1 loop
+ if (char_to_MVL9plus(s(i)) = ERROR) then
+ value := allU;
+ good := FALSE;
+ return;
+ end if;
+ end loop;
+
+ mv(0) := char_to_MVL9(c);
+ for i in integer range 1 to value'length-1 loop
+ mv(i) := char_to_MVL9(s(i));
+ end loop;
+ value := mv;
+ good := TRUE;
+ end READ;
+
+ procedure READ(L:inout LINE; VALUE:out STD_ULOGIC) is
+ variable c: character;
+ begin
+ loop -- skip white space
+ read(l,c);
+ exit when ((c /= ' ') and (c /= CR) and (c /= HT));
+ end loop;
+
+ if (char_to_MVL9plus(c) = ERROR) then
+ value := 'U';
+ assert FALSE report "READ(STD_ULOGIC) Error: Character '" &
+ c & "' read, expected STD_ULOGIC literal.";
+ else
+ value := char_to_MVL9(c);
+ end if;
+ end READ;
+
+ procedure READ(L:inout LINE; VALUE:out STD_ULOGIC_VECTOR) is
+ variable m: STD_ULOGIC;
+ variable c: character;
+ variable s: string(1 to value'length-1);
+ variable mv: STD_ULOGIC_VECTOR(0 to value'length-1);
+ constant allU: STD_ULOGIC_VECTOR(0 to value'length-1)
+ := (others => 'U');
+ begin
+ loop -- skip white space
+ read(l,c);
+ exit when ((c /= ' ') and (c /= CR) and (c /= HT));
+ end loop;
+
+ if (char_to_MVL9plus(c) = ERROR) then
+ value := allU;
+ assert FALSE report
+ "READ(STD_ULOGIC_VECTOR) Error: Character '" &
+ c & "' read, expected STD_ULOGIC literal.";
+ return;
+ end if;
+
+ read(l, s);
+ for i in integer range 1 to value'length-1 loop
+ if (char_to_MVL9plus(s(i)) = ERROR) then
+ value := allU;
+ assert FALSE report
+ "READ(STD_ULOGIC_VECTOR) Error: Character '" &
+ s(i) & "' read, expected STD_ULOGIC literal.";
+ return;
+ end if;
+ end loop;
+
+ mv(0) := char_to_MVL9(c);
+ for i in integer range 1 to value'length-1 loop
+ mv(i) := char_to_MVL9(s(i));
+ end loop;
+ value := mv;
+ end READ;
+
+ procedure WRITE(L:inout LINE; VALUE:in STD_ULOGIC;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0) is
+ begin
+ write(l, MVL9_to_char(value), justified, field);
+ end WRITE;
+
+
+ procedure WRITE(L:inout LINE; VALUE:in STD_ULOGIC_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0) is
+ variable s: string(1 to value'length);
+ variable m: STD_ULOGIC_VECTOR(1 to value'length) := value;
+ begin
+ for i in 1 to value'length loop
+ s(i) := MVL9_to_char(m(i));
+ end loop;
+ write(l, s, justified, field);
+ end WRITE;
+
+ -- Read and Write procedures for STD_LOGIC_VECTOR
+ procedure READ(L:inout LINE; VALUE:out STD_LOGIC_VECTOR) is
+ variable tmp: STD_ULOGIC_VECTOR(VALUE'length-1 downto 0);
+ begin
+ READ(L, tmp);
+ VALUE := STD_LOGIC_VECTOR(tmp);
+ end READ;
+
+ procedure READ(L:inout LINE; VALUE:out STD_LOGIC_VECTOR; GOOD: out BOOLEAN) is
+ variable tmp: STD_ULOGIC_VECTOR(VALUE'length-1 downto 0);
+ begin
+ READ(L, tmp, GOOD);
+ VALUE := STD_LOGIC_VECTOR(tmp);
+ end READ;
+
+ procedure WRITE(L:inout LINE; VALUE:in STD_LOGIC_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0) is
+ begin
+ WRITE(L, STD_ULOGIC_VECTOR(VALUE), JUSTIFIED, FIELD);
+ end WRITE;
+
+
+ --
+ -- Hex Read and Write procedures.
+ --
+
+ --
+ -- Hex, and Octal Read and Write procedures for BIT_VECTOR
+ -- (these procedures are not exported, they are only used
+ -- by the STD_ULOGIC hex/octal reads and writes below.
+ --
+ --
+
+ procedure Char2QuadBits(C: Character;
+ RESULT: out Bit_Vector(3 downto 0);
+ GOOD: out Boolean;
+ ISSUE_ERROR: in Boolean) is
+ begin
+ case c is
+ when '0' => result := x"0"; good := TRUE;
+ when '1' => result := x"1"; good := TRUE;
+ when '2' => result := x"2"; good := TRUE;
+ when '3' => result := x"3"; good := TRUE;
+ when '4' => result := x"4"; good := TRUE;
+ when '5' => result := x"5"; good := TRUE;
+ when '6' => result := x"6"; good := TRUE;
+ when '7' => result := x"7"; good := TRUE;
+ when '8' => result := x"8"; good := TRUE;
+ when '9' => result := x"9"; good := TRUE;
+ when 'A' => result := x"A"; good := TRUE;
+ when 'B' => result := x"B"; good := TRUE;
+ when 'C' => result := x"C"; good := TRUE;
+ when 'D' => result := x"D"; good := TRUE;
+ when 'E' => result := x"E"; good := TRUE;
+ when 'F' => result := x"F"; good := TRUE;
+
+ when 'a' => result := x"A"; good := TRUE;
+ when 'b' => result := x"B"; good := TRUE;
+ when 'c' => result := x"C"; good := TRUE;
+ when 'd' => result := x"D"; good := TRUE;
+ when 'e' => result := x"E"; good := TRUE;
+ when 'f' => result := x"F"; good := TRUE;
+ when others =>
+ if ISSUE_ERROR then
+ assert FALSE report
+ "HREAD Error: Read a '" & c &
+ "', expected a Hex character (0-F).";
+ end if;
+ good := FALSE;
+ end case;
+ end;
+
+ procedure HREAD(L:inout LINE; VALUE:out BIT_VECTOR) is
+ variable ok: boolean;
+ variable c: character;
+ constant ne: integer := value'length/4;
+ variable bv: bit_vector(0 to value'length-1);
+ variable s: string(1 to ne-1);
+ begin
+ if value'length mod 4 /= 0 then
+ assert FALSE report
+ "HREAD Error: Trying to read vector " &
+ "with an odd (non multiple of 4) length";
+ return;
+ end if;
+
+ loop -- skip white space
+ read(l,c);
+ exit when ((c /= ' ') and (c /= CR) and (c /= HT));
+ end loop;
+
+ Char2QuadBits(c, bv(0 to 3), ok, TRUE);
+ if not ok then
+ return;
+ end if;
+
+ read(L, s, ok);
+ if not ok then
+ assert FALSE
+ report "HREAD Error: Failed to read the STRING";
+ return;
+ end if;
+
+ for i in 1 to ne-1 loop
+ Char2QuadBits(s(i), bv(4*i to 4*i+3), ok, TRUE);
+ if not ok then
+ return;
+ end if;
+ end loop;
+ value := bv;
+ end HREAD;
+
+ procedure HREAD(L:inout LINE; VALUE:out BIT_VECTOR;GOOD: out BOOLEAN) is
+ variable ok: boolean;
+ variable c: character;
+ constant ne: integer := value'length/4;
+ variable bv: bit_vector(0 to value'length-1);
+ variable s: string(1 to ne-1);
+ begin
+ if value'length mod 4 /= 0 then
+ good := FALSE;
+ return;
+ end if;
+
+ loop -- skip white space
+ read(l,c);
+ exit when ((c /= ' ') and (c /= CR) and (c /= HT));
+ end loop;
+
+ Char2QuadBits(c, bv(0 to 3), ok, FALSE);
+ if not ok then
+ good := FALSE;
+ return;
+ end if;
+
+ read(L, s, ok);
+ if not ok then
+ good := FALSE;
+ return;
+ end if;
+
+ for i in 1 to ne-1 loop
+ Char2QuadBits(s(i), bv(4*i to 4*i+3), ok, FALSE);
+ if not ok then
+ good := FALSE;
+ return;
+ end if;
+ end loop;
+ good := TRUE;
+ value := bv;
+ end HREAD;
+
+
+ procedure HWRITE(L:inout LINE; VALUE:in BIT_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0) is
+ variable quad: bit_vector(0 to 3);
+ constant ne: integer := value'length/4;
+ variable bv: bit_vector(0 to value'length-1) := value;
+ variable s: string(1 to ne);
+ begin
+ if value'length mod 4 /= 0 then
+ assert FALSE report
+ "HWRITE Error: Trying to read vector " &
+ "with an odd (non multiple of 4) length";
+ return;
+ end if;
+
+ for i in 0 to ne-1 loop
+ quad := bv(4*i to 4*i+3);
+ case quad is
+ when x"0" => s(i+1) := '0';
+ when x"1" => s(i+1) := '1';
+ when x"2" => s(i+1) := '2';
+ when x"3" => s(i+1) := '3';
+ when x"4" => s(i+1) := '4';
+ when x"5" => s(i+1) := '5';
+ when x"6" => s(i+1) := '6';
+ when x"7" => s(i+1) := '7';
+ when x"8" => s(i+1) := '8';
+ when x"9" => s(i+1) := '9';
+ when x"A" => s(i+1) := 'A';
+ when x"B" => s(i+1) := 'B';
+ when x"C" => s(i+1) := 'C';
+ when x"D" => s(i+1) := 'D';
+ when x"E" => s(i+1) := 'E';
+ when x"F" => s(i+1) := 'F';
+ end case;
+ end loop;
+ write(L, s, JUSTIFIED, FIELD);
+ end HWRITE;
+
+ procedure Char2TriBits(C: Character;
+ RESULT: out bit_vector(2 downto 0);
+ GOOD: out Boolean;
+ ISSUE_ERROR: in Boolean) is
+ begin
+ case c is
+ when '0' => result := o"0"; good := TRUE;
+ when '1' => result := o"1"; good := TRUE;
+ when '2' => result := o"2"; good := TRUE;
+ when '3' => result := o"3"; good := TRUE;
+ when '4' => result := o"4"; good := TRUE;
+ when '5' => result := o"5"; good := TRUE;
+ when '6' => result := o"6"; good := TRUE;
+ when '7' => result := o"7"; good := TRUE;
+ when others =>
+ if ISSUE_ERROR then
+ assert FALSE report
+ "OREAD Error: Read a '" & c &
+ "', expected an Octal character (0-7).";
+ end if;
+ good := FALSE;
+ end case;
+ end;
+
+ procedure OREAD(L:inout LINE; VALUE:out BIT_VECTOR) is
+ variable c: character;
+ variable ok: boolean;
+ constant ne: integer := value'length/3;
+ variable bv: bit_vector(0 to value'length-1);
+ variable s: string(1 to ne-1);
+ begin
+ if value'length mod 3 /= 0 then
+ assert FALSE report
+ "OREAD Error: Trying to read vector " &
+ "with an odd (non multiple of 3) length";
+ return;
+ end if;
+
+ loop -- skip white space
+ read(l,c);
+ exit when ((c /= ' ') and (c /= CR) and (c /= HT));
+ end loop;
+
+ Char2TriBits(c, bv(0 to 2), ok, TRUE);
+ if not ok then
+ return;
+ end if;
+
+ read(L, s, ok);
+ if not ok then
+ assert FALSE
+ report "OREAD Error: Failed to read the STRING";
+ return;
+ end if;
+
+ for i in 1 to ne-1 loop
+ Char2TriBits(s(i), bv(3*i to 3*i+2), ok, TRUE);
+ if not ok then
+ return;
+ end if;
+ end loop;
+ value := bv;
+ end OREAD;
+
+ procedure OREAD(L:inout LINE; VALUE:out BIT_VECTOR;GOOD: out BOOLEAN) is
+ variable ok: boolean;
+ variable c: character;
+ constant ne: integer := value'length/3;
+ variable bv: bit_vector(0 to value'length-1);
+ variable s: string(1 to ne-1);
+ begin
+ if value'length mod 3 /= 0 then
+ good := FALSE;
+ return;
+ end if;
+
+ loop -- skip white space
+ read(l,c);
+ exit when ((c /= ' ') and (c /= CR) and (c /= HT));
+ end loop;
+
+ Char2TriBits(c, bv(0 to 2), ok, FALSE);
+ if not ok then
+ good := FALSE;
+ return;
+ end if;
+
+ read(L, s, ok);
+ if not ok then
+ good := FALSE;
+ return;
+ end if;
+
+ for i in 1 to ne-1 loop
+ Char2TriBits(s(i), bv(3*i to 3*i+2), ok, FALSE);
+ if not ok then
+ good := FALSE;
+ return;
+ end if;
+ end loop;
+ good := TRUE;
+ value := bv;
+ end OREAD;
+
+
+ procedure OWRITE(L:inout LINE; VALUE:in BIT_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0) is
+ variable tri: bit_vector(0 to 2);
+ constant ne: integer := value'length/3;
+ variable bv: bit_vector(0 to value'length-1) := value;
+ variable s: string(1 to ne);
+ begin
+ if value'length mod 3 /= 0 then
+ assert FALSE report
+ "OWRITE Error: Trying to read vector " &
+ "with an odd (non multiple of 3) length";
+ return;
+ end if;
+
+ for i in 0 to ne-1 loop
+ tri := bv(3*i to 3*i+2);
+ case tri is
+ when o"0" => s(i+1) := '0';
+ when o"1" => s(i+1) := '1';
+ when o"2" => s(i+1) := '2';
+ when o"3" => s(i+1) := '3';
+ when o"4" => s(i+1) := '4';
+ when o"5" => s(i+1) := '5';
+ when o"6" => s(i+1) := '6';
+ when o"7" => s(i+1) := '7';
+ end case;
+ end loop;
+ write(L, s, JUSTIFIED, FIELD);
+ end OWRITE;
+
+ -- Hex Read and Write procedures for STD_LOGIC_VECTOR
+ procedure HREAD(L:inout LINE; VALUE:out STD_ULOGIC_VECTOR;GOOD:out BOOLEAN) is
+ variable tmp: bit_vector(VALUE'length-1 downto 0);
+ begin
+ HREAD(L, tmp, GOOD);
+ VALUE := To_X01(tmp);
+ end HREAD;
+
+ procedure HREAD(L:inout LINE; VALUE:out STD_ULOGIC_VECTOR) is
+ variable tmp: bit_vector(VALUE'length-1 downto 0);
+ begin
+ HREAD(L, tmp);
+ VALUE := To_X01(tmp);
+ end HREAD;
+
+ procedure HWRITE(L:inout LINE; VALUE:in STD_ULOGIC_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0) is
+ begin
+ HWRITE(L, To_bitvector(VALUE),JUSTIFIED, FIELD);
+ end HWRITE;
+
+ -- Hex Read and Write procedures for STD_LOGIC_VECTOR
+
+ procedure HREAD(L:inout LINE; VALUE:out STD_LOGIC_VECTOR) is
+ variable tmp: STD_ULOGIC_VECTOR(VALUE'length-1 downto 0);
+ begin
+ HREAD(L, tmp);
+ VALUE := STD_LOGIC_VECTOR(tmp);
+ end HREAD;
+
+ procedure HREAD(L:inout LINE; VALUE:out STD_LOGIC_VECTOR; GOOD: out BOOLEAN) is
+ variable tmp: STD_ULOGIC_VECTOR(VALUE'length-1 downto 0);
+ begin
+ HREAD(L, tmp, GOOD);
+ VALUE := STD_LOGIC_VECTOR(tmp);
+ end HREAD;
+
+ procedure HWRITE(L:inout LINE; VALUE:in STD_LOGIC_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0) is
+ begin
+ HWRITE(L, To_bitvector(VALUE), JUSTIFIED, FIELD);
+ end HWRITE;
+
+
+ -- Octal Read and Write procedures for STD_ULOGIC_VECTOR
+ procedure OREAD(L:inout LINE; VALUE:out STD_ULOGIC_VECTOR;GOOD:out BOOLEAN) is
+ variable tmp: bit_vector(VALUE'length-1 downto 0);
+ begin
+ OREAD(L, tmp, GOOD);
+ VALUE := To_X01(tmp);
+ end OREAD;
+
+ procedure OREAD(L:inout LINE; VALUE:out STD_ULOGIC_VECTOR) is
+ variable tmp: bit_vector(VALUE'length-1 downto 0);
+ begin
+ OREAD(L, tmp);
+ VALUE := To_X01(tmp);
+ end OREAD;
+
+ procedure OWRITE(L:inout LINE; VALUE:in STD_ULOGIC_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0) is
+ begin
+ OWRITE(L, To_bitvector(VALUE),JUSTIFIED, FIELD);
+ end OWRITE;
+
+ -- Octal Read and Write procedures for STD_LOGIC_VECTOR
+
+ procedure OREAD(L:inout LINE; VALUE:out STD_LOGIC_VECTOR) is
+ variable tmp: STD_ULOGIC_VECTOR(VALUE'length-1 downto 0);
+ begin
+ OREAD(L, tmp);
+ VALUE := STD_LOGIC_VECTOR(tmp);
+ end OREAD;
+
+ procedure OREAD(L:inout LINE; VALUE:out STD_LOGIC_VECTOR; GOOD: out BOOLEAN) is
+ variable tmp: STD_ULOGIC_VECTOR(VALUE'length-1 downto 0);
+ begin
+ OREAD(L, tmp, GOOD);
+ VALUE := STD_LOGIC_VECTOR(tmp);
+ end OREAD;
+
+ procedure OWRITE(L:inout LINE; VALUE:in STD_LOGIC_VECTOR;
+ JUSTIFIED:in SIDE := RIGHT; FIELD:in WIDTH := 0) is
+ begin
+ OWRITE(L, STD_ULOGIC_VECTOR(VALUE), JUSTIFIED, FIELD);
+ end OWRITE;
+
+
+--synopsys synthesis_on
+end STD_LOGIC_TEXTIO;