[vhdl-200x-ft] to_dstring, dread, and dwrite

From: David Bishop <dbishop@server.vhdl.org>
Date: Mon Aug 09 2004 - 07:55:13 PDT

There is a basic issue with the decimal interpretation of a binary string.
Is it signed or unsigned?

To resolve this problem, I have moved all of the "d" functions
into packages where a decimal value is defined for the vector.
Example: If you want to do a "dwrite" of a bit_vector, you
would need to do that with "numeric_bit_unsiged" as that is the only
package where a decimal interpretation of a bit_vector is defined.

To resolve some of the ambiguity with FT8 and FT5A, I would propose the
following:

Place the following functions in
in standard.textio:

   procedure HREAD (L: inout LINE; VALUE: out BIT_VECTOR; GOOD : out BOOLEAN);
   procedure HREAD (L: inout LINE; VALUE: out BIT_VECTOR);
   procedure HWRITE (L: inout LINE; VALUE: in BIT_VECTOR;
   JUSTIFIED: in SIDE := RIGHT; FIELD:in WIDTH := 0);
   procedure OREAD (L: inout LINE; VALUE: out BIT_VECTOR; GOOD : out BOOLEAN);
   procedure OREAD (L: inout LINE; VALUE: out BIT_VECTOR);
   procedure OWRITE (L: inout LINE; VALUE: in BIT_VECTOR;
   JUSTIFIED: in SIDE := RIGHT; FIELD:in WIDTH := 0);
   alias bread is READ [line, BIT_VECTOR, boolean] ;
   alias bread is READ [line, BIT_VECTOR] ;
   alias bwrite is write [line, BIT_VECTOR, side, width] ;
   alias dread is READ [line, INTEGER, boolean] ;
   alias dread is READ [line, INTEGER] ;
   -- to_string routines
   function justify (value : string; justified : side := RIGHT;
   field : width := 0) return string;
   function to_string ( VALUE : in integer; JUSTIFIED : in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   alias to_dstring is to_string [integer, side, width return string];
   function to_string (VALUE : in bit_vector; JUSTIFIED : in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   alias to_bstring is to_string [bit_vector, side, width return string];
   function to_hstring (VALUE : in bit_vector; JUSTIFIED : in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   function to_ostring (VALUE : in bit_vector;JUSTIFIED : in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;

Place the following in IEEE.std_logic_1164:
   alias bread is read [line, STD_ULOGIC, BOOLEAN] ;
   alias bread is read [line, STD_ULOGIC] ;
   alias bread is read [line, STD_ULOGIC_VECTOR, BOOLEAN] ;
   alias bread is read [line, STD_ULOGIC_VECTOR] ;
   alias bread is read [line, STD_LOGIC_VECTOR, BOOLEAN] ;
   alias bread is read [line, STD_LOGIC_VECTOR] ;
   alias bwrite is write [line, STD_ULOGIC, side, width] ;
   alias bwrite is write [line, STD_ULOGIC_VECTOR, side, width] ;
   alias bwrite is write [line, STD_LOGIC_VECTOR, side, width] ;
   procedure HREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR;
   GOOD : out BOOLEAN);
   procedure HREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR);
   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;
   GOOD : out BOOLEAN);
   procedure HREAD (L : inout LINE; VALUE : out STD_LOGIC_VECTOR);
   procedure HWRITE (L : inout LINE; VALUE : in STD_LOGIC_VECTOR;
   JUSTIFIED : in SIDE := RIGHT; FIELD : in WIDTH := 0);
   procedure OREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR;
   GOOD : out BOOLEAN);
   procedure OREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR);
   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;
   GOOD : out BOOLEAN);
   procedure OREAD (L : inout LINE; VALUE : out STD_LOGIC_VECTOR);
   procedure OWRITE (L : inout LINE; VALUE : in STD_LOGIC_VECTOR;
   JUSTIFIED : in SIDE := RIGHT; FIELD : in WIDTH := 0);
   function to_string (VALUE :in std_ulogic_vector; JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   alias to_bstring is to_string [std_ulogic_vector, side, width return string];
   function to_hstring (VALUE:in std_ulogic_vector; JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   function to_ostring (VALUE :in std_ulogic_vector;JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   function to_string (VALUE :in std_logic_vector; JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   alias to_bstring is to_string [std_logic_vector, side, width return string];
   function to_hstring (VALUE:in std_logic_vector; JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   function to_ostring (VALUE :in std_logic_vector;JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;

Place the following in IEEE.numeric_std and IEEE.numeric_bit
   alias bread is read [line, UNSIGNED, BOOLEAN] ;
   alias bread is read [line, UNSIGNED] ;
   alias bread is read [line, SIGNED, BOOLEAN] ;
   alias bread is read [line, SIGNED] ;
   alias bwrite is write [line, STD_ULOGIC, side, width] ;
   alias bwrite is write [line, UNSIGNED, side, width] ;
   alias bwrite is write [line, SIGNED, side, width] ;
   procedure HREAD (L : inout LINE; VALUE : out UNSIGNED;
   GOOD : out BOOLEAN);
   procedure HREAD (L : inout LINE; VALUE : out UNSIGNED);
   procedure HWRITE (L : inout LINE; VALUE : in UNSIGNED;
   JUSTIFIED : in SIDE := RIGHT; FIELD : in WIDTH := 0);
   procedure HREAD (L : inout LINE; VALUE : out SIGNED;
   GOOD : out BOOLEAN);
   procedure HREAD (L : inout LINE; VALUE : out SIGNED);
   procedure HWRITE (L : inout LINE; VALUE : in SIGNED;
   JUSTIFIED : in SIDE := RIGHT; FIELD : in WIDTH := 0);
   procedure OREAD (L : inout LINE; VALUE : out UNSIGNED;
   GOOD : out BOOLEAN);
   procedure OREAD (L : inout LINE; VALUE : out UNSIGNED);
   procedure OWRITE (L : inout LINE; VALUE : in UNSIGNED;
   JUSTIFIED : in SIDE := RIGHT; FIELD : in WIDTH := 0);
   procedure OREAD (L : inout LINE; VALUE : out SIGNED;
   GOOD : out BOOLEAN);
   procedure OREAD (L : inout LINE; VALUE : out SIGNED);
   procedure OWRITE (L : inout LINE; VALUE : in SIGNED;
   JUSTIFIED : in SIDE := RIGHT; FIELD : in WIDTH := 0);
   function to_string (VALUE :in UNSIGNED; JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   alias to_bstring is to_string [UNSIGNED, side, width return string];
   function to_hstring (VALUE:in UNSIGNED; JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   function to_ostring (VALUE :in UNSIGNED;JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   function to_string (VALUE :in SIGNED; JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   alias to_bstring is to_string [SIGNED, side, width return string];
   function to_hstring (VALUE:in SIGNED; JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   function to_ostring (VALUE :in SIGNED;JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   function to_dstring (VALUE :in SIGNED; JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   function to_dstring (VALUE :in UNSIGNED; JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   procedure DREAD (L : inout LINE; VALUE : out UNSIGNED;
   GOOD : out BOOLEAN);
   procedure DREAD (L : inout LINE; VALUE : out UNSIGNED);
   procedure DWRITE (L : inout LINE; VALUE : in UNSIGNED;
   JUSTIFIED : in SIDE := RIGHT; FIELD : in WIDTH := 0);
   procedure DREAD (L : inout LINE; VALUE : out SIGNED;
   GOOD : out BOOLEAN);
   procedure DREAD (L : inout LINE; VALUE : out SIGNED);
   procedure DWRITE (L : inout LINE; VALUE : in SIGNED;
   JUSTIFIED : in SIDE := RIGHT; FIELD : in WIDTH := 0);

Place the following in IEEE.numeric_unsigned and IEEE.numeric_bit_unsigned
(with errors for negative numbers)
   procedure HREAD (L: inout LINE; VALUE: out INTEGER; GOOD : out BOOLEAN);
   procedure HREAD (L: inout LINE; VALUE: out INTEGER);
   procedure HWRITE (L: inout LINE; VALUE: in INTEGER;
   JUSTIFIED: in SIDE := RIGHT; FIELD:in WIDTH := 0);
   procedure OREAD (L: inout LINE; VALUE: out INTEGER; GOOD : out BOOLEAN);
   procedure OREAD (L: inout LINE; VALUE: out INTEGER);
   procedure OWRITE (L: inout LINE; VALUE: in INTEGER;
   JUSTIFIED: in SIDE := RIGHT; FIELD:in WIDTH := 0);
   procedure BREAD (L: inout LINE; VALUE: out INTEGER; GOOD : out BOOLEAN);
   procedure BREAD (L: inout LINE; VALUE: out INTEGER);
   procedure BWRITE (L: inout LINE; VALUE: in INTEGER;
   JUSTIFIED: in SIDE := RIGHT; FIELD:in WIDTH := 0);

   function to_dstring (VALUE :in STD_LOGIC_VECTOR; JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   procedure DREAD (L : inout LINE; VALUE : out STD_LOGIC_VECTOR;
   GOOD : out BOOLEAN);
   procedure DREAD (L : inout LINE; VALUE : out STD_LOGIC_VECTOR);
   procedure DWRITE (L : inout LINE; VALUE : in STD_LOGIC_VECTOR;
   JUSTIFIED : in SIDE := RIGHT; FIELD : in WIDTH := 0);

   function to_dstring (VALUE :in STD_ULOGIC_VECTOR;JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   procedure DREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR;
   GOOD : out BOOLEAN);
   procedure DREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR);
   procedure DWRITE (L : inout LINE; VALUE : in STD_ULOGIC_VECTOR;
   JUSTIFIED : in SIDE := RIGHT; FIELD : in WIDTH := 0);

   function to_dstring (VALUE :in BIT_VECTOR; JUSTIFIED :in SIDE := RIGHT;
   FIELD :in WIDTH := 0) return string ;
   procedure DREAD (L : inout LINE; VALUE : out BIT_VECTOR;
   GOOD : out BOOLEAN);
   procedure DREAD (L : inout LINE; VALUE : out BIT_VECTOR);
   procedure DWRITE (L : inout LINE; VALUE : in BIT_VECTOR;
   JUSTIFIED : in SIDE := RIGHT; FIELD : in WIDTH := 0);
Received on Mon Aug 9 07:55:21 2004

This archive was generated by hypermail 2.1.8 : Mon Aug 09 2004 - 07:55:23 PDT