TWiki
>
P1076 Web
>
Vhdl2019CollectedRequirements
>
TopLCS2016_006b
(revision 14) (raw view)
Edit
Attach
---+ Language Change Specification for TextIO Updates ---++ | <sticky><b>LCS Number:</b></sticky> | LCS-2016-006b | | <sticky><b>Version:</b> </sticky> | 1 {27-Feb-2017};2 {8-Mar-2017} | | <sticky><b>Date:</b> </sticky> | 8-Mar-2017 | | <sticky><b>Status:</b> </sticky> | Draft | | <sticky><b>Author:</b> </sticky> | Patrick Lehmann / Pablo Blecua | | <sticky><b>Email:</b> </sticky> | [[Main.PatrickLehmann]] | | <sticky><b>Source Doc:</b></sticky> | [[FileIo][File IO / TextIO updates]] | | <sticky><b>Summary:</b> </sticky> | TextIO additions. %BR% See [[LCS2016_006a][LCS-2016-006a]] for file I/O additions. | ---+++ Voting Results: Cast your votes here Yes: 1 %USERSIG{PatrickLehmann - 2017-01-12}% - Ver 0 1 %USERSIG{JimLewis- 2017-03-05}% - Ver 2 1 %USERSIG(SteveGrout - 2017-03-05)% - Ver 2 No: 1 Abstain: 1 %USERSIG{BrentHahoe - 2017-02-16}% Ver 0 - Abstain due to lack of personal time for review. 1 %USERSIG{FarrellOstler - 2017-03-21}% ---+++ Revision Notes *V1:* This version implements: * Conversion to decimal string for std_(u)logic_vector, unsigned, and signed * Decimal read/write for std_(u)logic_vector, unsigned, and signed *V2:* * Moved "to_integer", "To_StdULogicVector", and "To_StdLogicVector" from ieee.numeric_std_unsigned to ieee.std_logic_1164. * Removed aliases in std_logic_textio (i.e. that package is not modified) * Updated "16.4 Package TEXTIO" to add DREAD and DWRITE procedures for BIT_VECTOR * Added "5.2.6 Predefined operations on scalar types" for the new: * TO_STRING for INTEGER/universal_integer with a FORMAT parameter. * TO_STRING for universal_real with a FORMAT or DIGITS parameter. * TO_BSTRING, TO_OSTRING, TO_HSTRING, TO_DSTRING for INTEGER/universal_integer/REAL/universal_real. * Added "5.3.2.4 Predefined operations on array types" for the new TO_DSTRING for BIT_VECTOR. * Added "G.4.8.5 Textio functions" to add the definitions of Dread, Decimal_read, Dwrite, and Decimal_write ---+++ Remarks None<br /><br /> ---+++ Details of Language Change ---++++ std_logic_1164 ---+++++ std_logic_1164.vhdl %GREEN%[...] %ENDCOLOR%<br />%GREEN% -- TO_INTEGER Moved from numeric_std_unsigned.vhdl (ID:D.1)%ENDCOLOR%<br />%RED% function TO_INTEGER (ARG : STD_ULOGIC_VECTOR) return NATURAL;%ENDCOLOR%<br />%GREEN% -- To_StdULogic_Vector Moved from numeric_std_unsigned.vhdl (ID:D.5)%ENDCOLOR%<br /> %RED%function To_StdULogicVector (ARG, SIZE : NATURAL) return STD_ULOGIC_VECTOR;%ENDCOLOR%<br />%RED% function To_StdULogicVector (ARG : NATURAL; SIZE_RES : STD_ULOGIC_VECTOR) return STD_ULOGIC_VECTOR;%ENDCOLOR%<br /><br />%RED% alias To_Std_ULogic_Vector is To_StdULogicVector [NATURAL, NATURAL return STD_ULOGIC_VECTOR];%ENDCOLOR%<br />%RED% alias To_SULV is To_StdULogicVector [NATURAL, NATURAL return STD_ULOGIC_VECTOR];%ENDCOLOR%<br />%RED% alias To_Std_ULogic_Vector is To_StdULogicVector [NATURAL, STD_ULOGIC_VECTOR return STD_ULOGIC_VECTOR];%ENDCOLOR%<br />%RED% alias To_SULV is To_StdULogicVector [NATURAL, STD_ULOGIC_VECTOR return STD_ULOGIC_VECTOR];%ENDCOLOR%<br />%GREEN% -- To_StdLogic_Vector Moved from numeric_std_unsigned.vhdl (ID:D.3)%ENDCOLOR%<br /> %RED%function To_StdLogicVector (ARG, SIZE : NATURAL) return STD_LOGIC_VECTOR;%ENDCOLOR%<br />%RED% function To_StdLogicVector (ARG : NATURAL; SIZE_RES : STD_LOGIC_VECTOR) return STD_LOGIC_VECTOR;%ENDCOLOR%<br /><br />%RED% alias To_Std_Logic_Vector is To_StdLogicVector [NATURAL, NATURAL return STD_LOGIC_VECTOR];%ENDCOLOR%<br />%RED% alias To_SLV is To_StdLogicVector [NATURAL, NATURAL return STD_LOGIC_VECTOR];%ENDCOLOR%<br />%RED% alias To_Std_Logic_Vector is To_StdLogicVector [NATURAL, STD_LOGIC_VECTOR return STD_LOGIC_VECTOR];%ENDCOLOR%<br />%RED% alias To_SLV is To_StdLogicVector [NATURAL, STD_LOGIC_VECTOR return STD_LOGIC_VECTOR];%ENDCOLOR%<br />%GREEN% -- New functions/procedures from LCS-2016-006b%ENDCOLOR% %RED%function TO_DSTRING (value : in STD_ULOGIC_VECTOR) return STRING;%ENDCOLOR% <literal><span class='WYSIWYG_COLOR' style='color: red;'>alias TO_DECIMAL_STRING is TO_DSTRING [STD_ULOGIC_VECTOR return STRING];<br /><br />procedure DWRITE (L : inout LINE; VALUE : in STD_ULOGIC_VECTOR;<br /> JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0);<br />alias DECIMAL_WRITE is DWRITE [LINE, STD_ULOGIC_VECTOR, SIDE, WIDTH];<br /><br />procedure DREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR;<br /> GOOD : out BOOLEAN);<br />procedure DREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR);<br />alias DECIMAL_READ is DREAD [LINE, STD_ULOGIC_VECTOR, BOOLEAN];<br />alias DECIMAL_READ is DREAD [LINE, STD_ULOGIC_VECTOR];</span></literal> ---+++++ std_logic_1164-body.vhdl <literal><span class='WYSIWYG_COLOR' style='color: red;'> function TO_INTEGER (ARG : STD_ULOGIC_VECTOR) return NATURAL is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> constant ARG_LEFT : INTEGER := ARG'length-1;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> alias XXARG : STD_ULOGIC_VECTOR(ARG_LEFT downto 0) is ARG;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable XARG : STD_ULOGIC_VECTOR(ARG_LEFT downto 0);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable RESULT : NATURAL := 0;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> if (ARG'length < 1) then</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> assert FALSE</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> report "STD_LOGIC_1164.TO_INTEGER: null detected, returning 0"</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> severity warning;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> return 0;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end if;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> XARG := TO_01(XXARG, 'X');</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> if (XARG(XARG'left) = 'X') then</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> assert FALSE</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> report "STD_LOGIC_1164.TO_INTEGER: metavalue detected, returning 0"</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> severity warning;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> return 0;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end if;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> for I in XARG'range loop</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> RESULT := RESULT+RESULT;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> if XARG(I) = '1' then</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> RESULT := RESULT + 1;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end if;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end loop;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> return RESULT;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end function TO_INTEGER;</span><br /><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> function To_StdULogicVector (ARG, SIZE : NATURAL) return STD_ULOGIC_VECTOR is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable RESULT : STD_ULOGIC_VECTOR(SIZE-1 downto 0);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable I_VAL : NATURAL := ARG;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> if (SIZE < 1) then return "";</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end if;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> for I in 0 to RESULT'left loop</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> if (I_VAL mod 2) = 0 then</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> RESULT(I) := '0';</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> else RESULT(I) := '1';</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end if;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> I_VAL := I_VAL/2;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end loop;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> if not(I_VAL = 0) then</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> assert FALSE</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> report "STD_LOGIC_1164.To_StdULogicVector: vector truncated"</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> severity warning;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end if;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> return RESULT;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end function To_StdULogicVector;</span><br /><br /><span class='WYSIWYG_COLOR' style='color: red;'> function To_StdULogicVector (ARG : NATURAL; SIZE_RES : STD_ULOGIC_VECTOR)</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> return STD_ULOGIC_VECTOR is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> return To_StdULogicVector (ARG => ARG, SIZE => SIZE_RES'length);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end function To_StdULogicVector; </span><br /><br /><span class='WYSIWYG_COLOR' style='color: red;'> function To_StdLogicVector (ARG, SIZE : NATURAL) return STD_LOGIC_VECTOR is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> return std_logic_vector(To_StdULogicVector (ARG => ARG, SIZE => SIZE));</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end function To_StdLogicVector;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> </span><br /><span class='WYSIWYG_COLOR' style='color: red;'> function To_StdLogicVector (ARG : NATURAL; SIZE_RES : STD_LOGIC_VECTOR)</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> return STD_LOGIC_VECTOR is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> return To_StdLogicVector (ARG => ARG, SIZE => SIZE_RES'length);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end function To_StdLogicVector;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> function TO_DSTRING (value : in STD_ULOGIC_VECTOR) return STRING is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable l : LINE;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> write(l, to_integer(value));</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> return(l.all);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end function TO_DSTRING;</span><br /><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> procedure DWRITE (L : inout LINE; VALUE : in STD_ULOGIC_VECTOR;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0) is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> write(L, to_dstring(VALUE), JUSTIFIED, FIELD);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end procedure DWRITE;</span><br /><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> procedure DREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> GOOD : out BOOLEAN) is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable value_i : INTEGER;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable good_i : BOOLEAN;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> READ(L => L, VALUE => value_i, GOOD => good_i);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> if good_i AND (value_i > -1) then</span><br /><span class='WYSIWYG_COLOR' style='color: green;'> -- TBC if we use a) or b). b) is implemented now.</span><br /><span class='WYSIWYG_COLOR' style='color: green;'> -- a) The user does not know the integer size, so as a convention</span><br /><span class='WYSIWYG_COLOR' style='color: green;'> -- we return the maximum integer length (i.e. 32 bits).</span><br /><span class='WYSIWYG_COLOR' style='color: green;'> -- b) Get the length from VALUE and truncate with a warning if the</span><br /><span class='WYSIWYG_COLOR' style='color: green;'> -- read integer doesn't fit in the vector.</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> VALUE := To_StdULogicVector(value_i, VALUE'LENGTH); </span><br /><span class='WYSIWYG_COLOR' style='color: red;'> else</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> VALUE := (VALUE'RANGE => 'X'); -- READ error or Negative number</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end if;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> GOOD := good_i;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end procedure DREAD;</span> <br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> procedure DREAD (L : inout LINE; VALUE : out STD_ULOGIC_VECTOR) is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable value_i : INTEGER;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> READ(L => L, VALUE => value_i);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> if (value_i < 0) then</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> assert false report "STD_LOGIC_1164.DREAD: Read value less than 0: "</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> & INTEGER'image(value_i);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> VALUE := (VALUE'RANGE => 'X');</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> else</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> VALUE := To_StdULogicVector(value_i, VALUE'LENGTH);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end if;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end procedure DREAD;</span></literal> ---++++ numeric_std ---+++++ numeric_std.vhdl <literal><span class='WYSIWYG_COLOR' style='color: red;'>function TO_DSTRING (value : in UNRESOLVED_UNSIGNED) return STRING;<br />alias TO_DECIMAL_STRING is TO_DSTRING [UNRESOLVED_UNSIGNED return STRING];<br />function TO_DSTRING (value : in UNRESOLVED_SIGNED) return STRING;<br />alias TO_DECIMAL_STRING is TO_DSTRING [UNRESOLVED_SIGNED return STRING];<br /><br />procedure DWRITE (L : inout LINE; VALUE : in UNRESOLVED_UNSIGNED;<br /> JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0);<br /><br />procedure DWRITE (L : inout LINE; VALUE : in UNRESOLVED_SIGNED;<br /> JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0);<br /><br />alias DECIMAL_WRITE is DWRITE [LINE, UNRESOLVED_UNSIGNED, SIDE, WIDTH];<br />alias DECIMAL_WRITE is DWRITE [LINE, UNRESOLVED_SIGNED, SIDE, WIDTH];<br /><br />procedure DREAD (L : inout LINE; VALUE : out UNRESOLVED_UNSIGNED;<br /> GOOD : out BOOLEAN);<br /><br />procedure DREAD (L : inout LINE; VALUE : out UNRESOLVED_UNSIGNED);<br /><br />procedure DREAD (L : inout LINE; VALUE : out UNRESOLVED_SIGNED;<br /> GOOD : out BOOLEAN);<br /><br />procedure DREAD (L : inout LINE; VALUE : out UNRESOLVED_SIGNED);<br /><br />alias DECIMAL_READ is DREAD [LINE, UNRESOLVED_UNSIGNED, BOOLEAN];<br />alias DECIMAL_READ is DREAD [LINE, UNRESOLVED_SIGNED, BOOLEAN];<br /><br />alias DECIMAL_READ is DREAD [LINE, UNRESOLVED_UNSIGNED];<br />alias DECIMAL_READ is DREAD [LINE, UNRESOLVED_SIGNED];</span></literal> ---+++++ %BLACK%numeric_std-body.vhdl%ENDCOLOR% <literal><span class='WYSIWYG_COLOR' style='color: red;'> function TO_DSTRING (value : in UNRESOLVED_UNSIGNED) return STRING is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable l : LINE;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> write(l, to_integer(value));</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> return(l.all);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end function TO_DSTRING;</span> <br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> function TO_DSTRING (value : in UNRESOLVED_SIGNED) return STRING is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable l : LINE;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> write(l, to_integer(signed(value)));</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> return(l.all);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end function TO_DSTRING;</span><br /><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> procedure DWRITE (L : inout LINE; VALUE : in UNRESOLVED_UNSIGNED;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0) is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> write(L, to_dstring(VALUE), JUSTIFIED, FIELD);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end procedure DWRITE;</span><br /><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> procedure DWRITE (L : inout LINE; VALUE : in UNRESOLVED_SIGNED;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0) is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> write(L, to_dstring(VALUE), JUSTIFIED, FIELD);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end procedure DWRITE;</span><br /><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> procedure DREAD (L : inout LINE; VALUE : out UNRESOLVED_UNSIGNED;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> GOOD : out BOOLEAN) is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable value_sulv : STD_ULOGIC_VECTOR(VALUE'RANGE);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> DREAD(L => L, VALUE => value_sulv, GOOD => GOOD);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> VALUE := unsigned(value_sulv);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end procedure DREAD;</span> <br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> procedure DREAD (L : inout LINE; VALUE : out UNRESOLVED_UNSIGNED) is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable value_sulv : STD_ULOGIC_VECTOR(VALUE'RANGE);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> DREAD(L => L, VALUE => value_sulv);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> VALUE := unsigned(value_sulv);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end procedure DREAD;</span><br /><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> procedure DREAD (L : inout LINE; VALUE : out UNRESOLVED_SIGNED;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> GOOD : out BOOLEAN) is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable value_i : INTEGER;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable good_i : BOOLEAN;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> READ(L => L, VALUE => value_i, GOOD => good_i);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> if good_i then</span><br /><span class='WYSIWYG_COLOR' style='color: green;'> -- TBC if we use a) or b). b) is implemented now.</span><br /><span class='WYSIWYG_COLOR' style='color: green;'> -- a) The user does not know the integer size, so as a convention</span><br /><span class='WYSIWYG_COLOR' style='color: green;'> -- we return the maximum integer length (i.e. 32 bits).</span><br /><span class='WYSIWYG_COLOR' style='color: green;'> -- b) Get the length from VALUE and truncate with a warning if the</span><br /><span class='WYSIWYG_COLOR' style='color: green;'> -- read integer doesn't fit in the vector.</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> VALUE := to_signed(value_i, VALUE'LENGTH); </span><br /><span class='WYSIWYG_COLOR' style='color: red;'> else</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> VALUE := (VALUE'RANGE => 'X'); -- READ error</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end if;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> GOOD := good_i;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end procedure DREAD;</span> <br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> ------------------------------------------------------------------</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> procedure DREAD (L : inout LINE; VALUE : out UNRESOLVED_SIGNED) is</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> variable value_i : INTEGER;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> begin</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> READ(L => L, VALUE => value_i);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> VALUE := to_signed(value_i, VALUE'LENGTH);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> end procedure DREAD;</span> </literal> ---++++ numeric_std_unsigned ---+++++ numeric_std_unsigned.vhdl <sticky><noautolink>%BR% --============================================================================%BR% -- Conversion Functions%BR% --============================================================================%BR% %GREEN%-- All the conversion functions are now defined in ieee.std_logic_1164, and therefore%BR%%ENDCOLOR% %GREEN%-- are not needed here anymore.%BR%%ENDCOLOR% %RED%<del> -- Id: D.1</del>%BR%%ENDCOLOR% %RED%<del> function TO_INTEGER (ARG : STD_ULOGIC_VECTOR) return NATURAL;</del>%BR%%ENDCOLOR% %RED%<del> -- Result subtype: NATURAL. Value cannot be negative since parameter is an</del>%BR%%ENDCOLOR% %RED%<del> -- UNSIGNED vector.</del>%BR%%ENDCOLOR% %RED%<del> -- Result: Converts the UNSIGNED vector to an INTEGER.</del>%BR%%ENDCOLOR% %RED%<del> -- Id: D.3</del>%BR%%ENDCOLOR% %RED%<del> function To_StdLogicVector (ARG, SIZE : NATURAL) return STD_LOGIC_VECTOR;</del>%BR%%ENDCOLOR% %RED%<del> -- Result subtype: STD_LOGIC_VECTOR(SIZE-1 downto 0)</del>%BR%%ENDCOLOR% %RED%<del> -- Result: Converts a non-negative INTEGER to an UNSIGNED vector with</del>%BR%%ENDCOLOR% %RED%<del> -- the specified SIZE.</del>%BR%%ENDCOLOR% %RED%<del> function To_StdLogicVector (ARG : NATURAL; SIZE_RES : STD_ULOGIC_VECTOR)</del>%BR%%ENDCOLOR% %RED%<del> return STD_LOGIC_VECTOR;</del>%BR%%ENDCOLOR% %RED%<del> -- Result subtype: STD_LOGIC_VECTOR(SIZE_RES'length-1 downto 0)</del>%BR%%ENDCOLOR% %RED%<del>alias To_Std_Logic_Vector is</del>%BR%%ENDCOLOR% %RED%<del>To_StdLogicVector[NATURAL, NATURAL return STD_LOGIC_VECTOR];</del>%BR%%ENDCOLOR% %RED%<del>alias To_Std_Logic_Vector is</del>%BR%%ENDCOLOR% %RED%<del>To_StdLogicVector[NATURAL, NATURAL return STD_LOGIC_VECTOR];</del>%BR%%ENDCOLOR% %RED%<del>alias To_SLV is</del>%BR%%ENDCOLOR% %RED%<del>To_StdLogicVector[NATURAL, NATURAL return STD_LOGIC_VECTOR];</del>%BR%%ENDCOLOR% %RED%<del>alias To_Std_Logic_Vector is</del>%BR%%ENDCOLOR% %RED%<del>To_StdLogicVector[NATURAL, STD_ULOGIC_VECTOR return STD_LOGIC_VECTOR];</del>%BR%%ENDCOLOR% %RED%<del>alias To_SLV is</del>%BR%%ENDCOLOR% %RED%<del>To_StdLogicVector[NATURAL, STD_ULOGIC_VECTOR return STD_LOGIC_VECTOR];</del>%BR%%ENDCOLOR% %RED%<del> -- Id: D.5</del>%BR%%ENDCOLOR% %RED%<del> function To_StdULogicVector (ARG, SIZE : NATURAL) return STD_ULOGIC_VECTOR;</del>%BR%%ENDCOLOR% %RED%<del> -- Result subtype: STD_ULOGIC_VECTOR(SIZE-1 downto 0)</del>%BR%%ENDCOLOR% %RED%<del> -- Result: Converts a non-negative INTEGER to an UNSIGNED vector with</del>%BR%%ENDCOLOR% %RED%<del> -- the specified SIZE.</del>%BR%%ENDCOLOR% %RED%<del> function To_StdULogicVector (ARG : NATURAL; SIZE_RES : STD_ULOGIC_VECTOR)</del>%BR%%ENDCOLOR% %RED%<del> return STD_ULOGIC_VECTOR;</del>%BR%%ENDCOLOR% %RED%<del> -- Result subtype: STD_LOGIC_VECTOR(SIZE_RES'length-1 downto 0)</del>%BR%%ENDCOLOR% %RED%<del>alias To_Std_ULogic_Vector is To_StdULogicVector[NATURAL, NATURAL return STD_ULOGIC_VECTOR];</del>%BR%%ENDCOLOR% %RED%<del>alias To_SULV is To_StdULogicVector[NATURAL, NATURAL return STD_ULOGIC_VECTOR];</del>%BR%%ENDCOLOR% %RED%<del>alias To_Std_ULogic_Vector is To_StdULogicVector[NATURAL, STD_ULOGIC_VECTOR return STD_ULOGIC_VECTOR];</del>%BR%%ENDCOLOR% %RED%<del>alias To_SULV is To_StdULogicVector[NATURAL, STD_ULOGIC_VECTOR return STD_ULOGIC_VECTOR];</del>%BR%%ENDCOLOR% </sticky> ---+++++ numeric_std_unsigned-body.vhdl <sticky><noautolink> %GREEN%-- All the conversion functions are now defined in ieee.std_logic_1164, and therefore%BR%%ENDCOLOR% %GREEN%-- are not needed here anymore.%BR%%ENDCOLOR% %RED%<del>-- Id: D.1</del>%BR%%ENDCOLOR% %RED%<del>function TO_INTEGER (ARG : STD_ULOGIC_VECTOR) return NATURAL is</del>%BR%%ENDCOLOR% %RED%<del>begin</del>%BR%%ENDCOLOR% %RED%<del>return TO_INTEGER(UNSIGNED(ARG));</del>%BR%%ENDCOLOR% %RED%<del>end function TO_INTEGER;</del>%BR%%ENDCOLOR% %RED%<del></del>%BR%%ENDCOLOR% %RED%<del>-- Id: D.3</del>%BR%%ENDCOLOR% %RED%<del>function To_StdLogicVector (ARG, SIZE : NATURAL) return STD_LOGIC_VECTOR is</del>%BR%%ENDCOLOR% %RED%<del>begin</del>%BR%%ENDCOLOR% %RED%<del>return STD_LOGIC_VECTOR (TO_UNSIGNED(ARG => ARG,</del>%BR%%ENDCOLOR% %RED%<del>SIZE => SIZE));</del>%BR%%ENDCOLOR% %RED%<del>end function To_StdLogicVector;</del>%BR%%ENDCOLOR% %RED%<del></del>%BR%%ENDCOLOR% %RED%<del>-- Id: D.5</del>%BR%%ENDCOLOR% %RED%<del>function To_StdULogicVector (ARG, SIZE : NATURAL) return STD_ULOGIC_VECTOR is</del>%BR%%ENDCOLOR% %RED%<del>begin</del>%BR%%ENDCOLOR% %RED%<del>return STD_ULOGIC_VECTOR (TO_UNSIGNED(ARG => ARG,</del>%BR%%ENDCOLOR% %RED%<del>SIZE => SIZE));</del>%BR%%ENDCOLOR% %RED%<del>end function To_StdULogicVector;</del>%BR%%ENDCOLOR% %RED%<del></del>%BR%%ENDCOLOR% %RED%<del>function To_StdLogicVector (ARG : NATURAL; SIZE_RES : STD_LOGIC_VECTOR)</del>%BR%%ENDCOLOR% %RED%<del>return STD_LOGIC_VECTOR is</del>%BR%%ENDCOLOR% %RED%<del>begin</del>%BR%%ENDCOLOR% %RED%<del>return STD_LOGIC_VECTOR (TO_UNSIGNED (ARG => ARG,</del>%BR%%ENDCOLOR% %RED%<del>SIZE => SIZE_RES'length));</del>%BR%%ENDCOLOR% %RED%<del>end function To_StdLogicVector;</del>%BR%%ENDCOLOR% %RED%<del></del>%BR%%ENDCOLOR% %RED%<del>function To_StdULogicVector (ARG : NATURAL; SIZE_RES : STD_ULOGIC_VECTOR)</del>%BR%%ENDCOLOR% %RED%<del>return STD_ULOGIC_VECTOR is</del>%BR%%ENDCOLOR% %RED%<del>begin</del>%BR%%ENDCOLOR% %RED%<del>return STD_ULOGIC_VECTOR (TO_UNSIGNED (ARG => ARG,</del>%BR%%ENDCOLOR% %RED%<del>SIZE => SIZE_RES'length));</del>%BR%%ENDCOLOR% %RED%<del>end function To_StdULogicVector;</del>%BR%%ENDCOLOR%</sticky> ---++++ 16.3 Package STANDARD <literal>package STANDARD is<br />[...]<br />-- function TO_STRING (VALUE: BIT_VECTOR) return STRING;<br />-- alias TO_BSTRING is TO_STRING [BIT_VECTOR return STRING];<br />-- alias TO_BINARY_STRING is TO_STRING [BIT_VECTOR return STRING];<br />-- function TO_OSTRING (VALUE: BIT_VECTOR) return STRING;<br />-- alias TO_OCTAL_STRING is TO_OSTRING [BIT_VECTOR return STRING];<br />-- function TO_HSTRING (VALUE: BIT_VECTOR) return STRING;<br />-- alias TO_HEX_STRING is TO_HSTRING [BIT_VECTOR return STRING];<br /><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_DSTRING (VALUE: BIT_VECTOR) return STRING;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_DECIMAL_STRING is TO_DSTRING [BIT_VECTOR return STRING];</span><br />[...]<br /><br />-- Predefined TO_STRING operations on scalar types<br /><br />-- function TO_STRING (VALUE: BOOLEAN) return STRING;<br />-- function TO_STRING (VALUE: BIT) return STRING;<br />-- function TO_STRING (VALUE: CHARACTER) return STRING;<br />-- function TO_STRING (VALUE: SEVERITY_LEVEL) return STRING;<br />-- function TO_STRING (VALUE: universal_integer) return STRING;<br />-- function TO_STRING (VALUE: universal_real) return STRING;<br />-- function TO_STRING (VALUE: INTEGER) return STRING;<br />-- function TO_STRING (VALUE: REAL) return STRING;<br />-- function TO_STRING (VALUE: TIME) return STRING;<br />-- function TO_STRING (VALUE: FILE_OPEN_KIND) return STRING;<br />-- function TO_STRING (VALUE: FILE_OPEN_STATUS) return STRING;<br /><br />-- Predefined overloaded TO_STRING operations<br /><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_STRING (VALUE: universal_real; DIGITS: NATURAL) return STRING;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_STRING (VALUE: universal_real; FORMAT: STRING) return STRING;</span><br />-- function TO_STRING (VALUE: REAL; DIGITS: NATURAL) return STRING;<br />-- function TO_STRING (VALUE: REAL; FORMAT: STRING) return STRING;<br />-- function TO_STRING (VALUE: TIME; UNIT: TIME) return STRING;<br /><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_STRING (VALUE: universal_integer; FORMAT: STRING) return STRING;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_STRING (VALUE: INTEGER; FORMAT: STRING) return STRING;</span><br /><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- Predefined TO_xSTRING operations on scalar types</span><br /><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_BSTRING (VALUE: universal_integer) return STRING;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_BINARY_STRING is TO_BSTRING [universal_integer return STRING];</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_OSTRING (VALUE: universal_integer) return STRING;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_OCTAL_STRING is TO_OSTRING [universal_integer return STRING];</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_HSTRING (VALUE: universal_integer) return STRING;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_HEX_STRING is TO_HSTRING [universal_integer return STRING];</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_DSTRING is TO_STRING [universal_integer return STRING];</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_DECIMAL_STRING is TO_STRING [universal_integer return STRING];</span><br /> <div> </div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_BSTRING (VALUE: INTEGER) return STRING;</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_BINARY_STRING is TO_BSTRING [INTEGER return STRING];</span></div> <div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_OSTRING (VALUE: INTEGER) return STRING;</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_OCTAL_STRING is TO_OSTRING [INTEGER return STRING];</span></div> </div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_HSTRING (VALUE: INTEGER) return STRING;</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_HEX_STRING is TO_HSTRING [INTEGER return STRING];</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_DSTRING is TO_STRING [INTEGER return STRING];</span></div> <div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_DECIMAL_STRING is TO_STRING [INTEGER return STRING];</span></div> <div> </div> <div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_BSTRING (VALUE: universal_real) return STRING;</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_BINARY_STRING is TO_BSTRING [universal_real return STRING];</span></div> <div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_OSTRING (VALUE: universal_real) return STRING;</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_OCTAL_STRING is TO_OSTRING [universal_real return STRING];</span></div> </div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_HSTRING (VALUE: universal_real) return STRING;</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_HEX_STRING is TO_HSTRING [universal_real return STRING];</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_DSTRING is TO_STRING [universal_real return STRING];</span></div> <div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_DECIMAL_STRING is TO_STRING [universal_real return STRING];</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'> </span></div> </div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_BSTRING (VALUE: REAL) return STRING;</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_BINARY_STRING is TO_BSTRING [REAL return STRING];</span></div> <div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_OSTRING (VALUE: REAL) return STRING;</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_OCTAL_STRING is TO_OSTRING [REAL return STRING];</span></div> </div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- function TO_HSTRING (VALUE: REAL) return STRING;</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_HEX_STRING is TO_HSTRING [REAL return STRING];</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_DSTRING is TO_STRING [REAL return STRING];</span></div> <div><span class='WYSIWYG_COLOR' style='color: red;'>-- alias TO_DECIMAL_STRING is TO_STRING [REAL return STRING];</span></div> </div> </div> <br />end <span class='WYSIWYG_COLOR' style='color: red;'>package</span> STANDARD;</literal> ---++++ 16.4 Package TEXTIO <literal>package TEXTIO is<br /><span class='WYSIWYG_COLOR' style='color: green;'>[...]</span><br />-- Input routines for standard types:<br /><span class='WYSIWYG_COLOR' style='color: green;'>[...]</span><br />alias BREAD is READ [LINE, BIT_VECTOR, BOOLEAN];<br />alias BREAD is READ [LINE, BIT_VECTOR];<br /><span class='WYSIWYG_COLOR' style='color: red;'>procedure BREAD (L : inout LINE; VALUE : out INTEGER;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> GOOD : out BOOLEAN);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>procedure BREAD (L : inout LINE; VALUE : out INTEGER);</span><br />alias BINARY_READ is READ [LINE, BIT_VECTOR, BOOLEAN];<br />alias BINARY_READ is READ [LINE, BIT_VECTOR];<br /><span class='WYSIWYG_COLOR' style='color: red;'>alias BINARY_READ is BREAD [LINE, INTEGER, BOOLEAN];</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>alias BINARY_READ is BREAD [LINE, INTEGER];</span> <br />procedure OREAD (L: inout LINE; VALUE: out BIT_VECTOR;<br /> GOOD: out BOOLEAN);<br />procedure OREAD (L: inout LINE; VALUE: out BIT_VECTOR);<br /><span class='WYSIWYG_COLOR' style='color: red;'>procedure OREAD (L : inout LINE; VALUE : out INTEGER;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> GOOD : out BOOLEAN);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>procedure OREAD (L : inout LINE; VALUE : out INTEGER);</span><br />alias OCTAL_READ is OREAD [LINE, BIT_VECTOR, BOOLEAN];<br />alias OCTAL_READ is OREAD [LINE, BIT_VECTOR];<br /><span class='WYSIWYG_COLOR' style='color: red;'>alias OCTAL_READ is OREAD [LINE, INTEGER, BOOLEAN];</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>alias OCTAL_READ is OREAD [LINE, INTEGER];</span><br /><br />procedure HREAD (L: inout LINE; VALUE: out BIT_VECTOR;<br /> GOOD: out BOOLEAN);<br />procedure HREAD (L: inout LINE; VALUE: out BIT_VECTOR);<br /><span class='WYSIWYG_COLOR' style='color: red;'>procedure HREAD (L : inout LINE; VALUE : out INTEGER;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> GOOD : out BOOLEAN);</span><br /><span class='WYSIWYG_COLOR' style='color: red;'>procedure HREAD (L : inout LINE; VALUE : out INTEGER);</span><br />alias HEX_READ is HREAD [LINE, BIT_VECTOR, BOOLEAN];<br />alias HEX_READ is HREAD [LINE, BIT_VECTOR];<br /><span class='WYSIWYG_COLOR' style='color: red;'>alias HEX_READ is HREAD [LINE, INTEGER, BOOLEAN];<br />alias HEX_READ is HREAD [LINE, INTEGER];<br /><br />procedure DREAD (L : inout LINE; VALUE : out BIT_VECTOR;<br /> GOOD : out BOOLEAN);<br />procedure DREAD (L : inout LINE; VALUE : out BIT_VECTOR);<br />alias DREAD is READ [LINE, INTEGER, BOOLEAN];<br />alias DREAD is READ [LINE, INTEGER];<br />alias DECIMAL_READ is DREAD [LINE, BIT_VECTOR, BOOLEAN];<br />alias DECIMAL_READ is DREAD [LINE, BIT_VECTOR];<br />alias DECIMAL_READ is READ [LINE, INTEGER, BOOLEAN];<br />alias DECIMAL_READ is READ [LINE, INTEGER];</span><br /><br />-- Output routines for standard types:<br /><span class='WYSIWYG_COLOR' style='color: green;'>[...]</span><br />alias BWRITE is WRITE [LINE, BIT_VECTOR, SIDE, WIDTH];<br /><span class='WYSIWYG_COLOR' style='color: red;'>procedure BWRITE (L : inout LINE; VALUE : in INTEGER;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0);</span><br />alias BINARY_WRITE is WRITE [LINE, BIT_VECTOR, SIDE, WIDTH];<br /><span class='WYSIWYG_COLOR' style='color: red;'>alias BINARY_WRITE is WRITE [LINE, INTEGER, SIDE, WIDTH];</span><br /><br /><br />procedure OWRITE (L: inout LINE; VALUE: in BIT_VECTOR;<br /> JUSTIFIED: in SIDE := RIGHT; FIELD: in WIDTH := 0);<br /><span class='WYSIWYG_COLOR' style='color: red;'>procedure OWRITE (L : inout LINE; VALUE : in INTEGER;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0);</span><br />alias OCTAL_WRITE is OWRITE [LINE, BIT_VECTOR, SIDE, WIDTH];<br /><span class='WYSIWYG_COLOR' style='color: red;'>alias OCTAL_WRITE is OWRITE [LINE, INTEGER, SIDE, WIDTH];</span><br /><br />procedure HWRITE (L: inout LINE; VALUE: in BIT_VECTOR;<br /> JUSTIFIED: in SIDE := RIGHT; FIELD: in WIDTH := 0);<br /><span class='WYSIWYG_COLOR' style='color: red;'>procedure HWRITE (L : inout LINE; VALUE : in INTEGER;</span><br /><span class='WYSIWYG_COLOR' style='color: red;'> JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0);</span><br />alias HEX_WRITE is HWRITE [LINE, BIT_VECTOR, SIDE, WIDTH];<br /><span class='WYSIWYG_COLOR' style='color: red;'>alias HEX_WRITE is HWRITE [LINE, INTEGER, SIDE, WIDTH];<br /><br />procedure DWRITE (L : inout LINE; VALUE : in BIT_VECTOR;<br /> JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0);<br />procedure DWRITE (L : inout LINE; VALUE : in INTEGER;<br /> JUSTIFIED : in SIDE := right; FIELD : in WIDTH := 0);<br />alias DECIMAL_WRITE is DWRITE [LINE, BIT_VECTOR, SIDE, WIDTH];<br />alias DECIMAL_WRITE is DWRITE [LINE, INTEGER, SIDE, WIDTH];</span><br /><br />end <span class='WYSIWYG_COLOR' style='color: red;'>package</span> TEXTIO;</literal> ---++++ 5.2.6 Predefined operations on scalar types %GREEN%Page 43 of the LRM%ENDCOLOR%<br />%GREEN%[...]%ENDCOLOR%<br />The function RISING_EDGE applied to a signal S of type BIT is TRUE if the expression “S'EVENT and S = '1'” is TRUE, and FALSE otherwise. The function FALLING_EDGE applied to a signal S of type BIT is TRUE if the expression “S'EVENT and S = '0'” is TRUE, and FALSE otherwise.<br /><br />%RED%The following operation is implicitly declared in package STD.STANDARD at the end of the package declaration:%ENDCOLOR%<br /><br />%RED%function TO_STRING (VALUE: universal_integer; FORMAT: STRING) return STRING;%ENDCOLOR%<br />%RED%function TO_STRING (VALUE: INTEGER; FORMAT: STRING) return STRING;%ENDCOLOR% <br />%RED%This overloaded TO_STRING operation returns the value of the VALUE parameter converted to a string whose format is specified by the value of the FORMAT parameter. The result type of the operation is the type STRING defined in package STANDARD.%ENDCOLOR%<br /><br />%RED%The format of the result is determined using the value of the FORMAT parameter in the manner described in ISO/IEC 8859-1:1998, ISO/IEC 9899:1999/Cor 1:2001, and ISO/IEC 9899:1999/Cor 2:2004 for the C fprintf function. A model is erroneous if it calls the operation with a value for the FORMAT parameter that is other than a conversion specification in which the conversion specifier is one of d, i, u, x, X, or o. Moreover, the model is erroneous if the conversion specification contains a length modifier or uses an asterisk for the field width or precision.%ENDCOLOR%<br /><br />The following operation is implicitly declared in package STD.STANDARD at the end of the package declaration:<br /><br />function TO_STRING (VALUE: TIME; UNIT: TIME) return STRING; This overloaded TO_STRING operation returns the string representation (see 5.7) of the value of its actual parameter. The result type of the operation is the type STRING defined in package STANDARD. The parameter UNIT specifies how the result is to be formatted. The value of this parameter shall be equal to one of the units declared as part of the declaration of type TIME; the result is that the TIME value is formatted as an integer or real literal representing the number of multiples of this unit, followed by the name of the unit itself. <br />The following operations are implicitly declared in package STD.STANDARD at the end of the package declaration: %RED%function TO_STRING (VALUE: universal_real; DIGITS: NATURAL) return STRING;%ENDCOLOR%<br />%RED%function TO_STRING (VALUE: universal_real; FORMAT: STRING) return STRING;%ENDCOLOR%<br />function TO_STRING (VALUE: REAL; DIGITS: NATURAL) return STRING;<br />function TO_STRING (VALUE: REAL; FORMAT: STRING) return STRING; These overloaded TO_STRING operations return the value of the VALUE parameter converted to a string whose format is specified by the value of the DIGITS or FORMAT parameter, respectively. The result type of the operations is the type STRING defined in package STANDARD. For the operation with the DIGITS parameter, the result is the string representation of the value. The DIGITS specifies how many digits appear to the right of the decimal point. If DIGITS is 0, then the string representation is the same as that produced by the TO_STRING operation without the DIGITS or FORMAT parameter. If DIGITS is non-zero, then the string representation contains an integer part followed by '.' followed by the fractional part, using the specified number of digits, and no exponent (e.g., 3.14159). For the operation with the FORMAT parameter, the format of the result is determined using the value of the FORMAT parameter in the manner described in ISO/IEC 8859-1:1998, ISO/IEC 9899:1999/Cor 1:2001, and ISO/IEC 9899:1999/Cor 2:2004 for the C fprintf function. A model is erroneous if it calls the operation with a value for the FORMAT parameter that is other than a conversion specification in which the conversion specifier is one of e, E, f, F, g, G, a, or A. Moreover, the model is erroneous if the conversion specification contains a length modifier or uses an asterisk for the field width or precision. An implementation shall support use of the conversion specifiers e, E, f, g, and G, and may additionally support use of the conversion specifiers F, a, and A. A model is erroneous if it calls the operation with a value for the FORMAT parameter that is a conversion specification in which the conversion specifier is one of F, a, or A and the implementation does not support use of the conversion specifier. The values of FLT_RADIX and DECIMAL_DIG (described in ISO/IEC 8859-1:1998, ISO/IEC 9899:1999/Cor 1:2001, and ISO/IEC 9899:1999/Cor 2:2004) are implementation defined. %RED%The following operations are implicitly declared in package STD.STANDARD at the end of the package declaration:%ENDCOLOR% %RED%alias TO_BSTRING is TO_STRING [universal_integer return STRING];%ENDCOLOR%<br />%RED%alias TO_BINARY_STRING is TO_STRING [universal_integer return STRING];%ENDCOLOR%<br />%RED%function TO_OSTRING (VALUE: universal_integer) return STRING;%ENDCOLOR%<br />%RED%alias TO_OCTAL_STRING is TO_OSTRING [universal_integer return STRING];%ENDCOLOR%<br />%RED%function TO_HSTRING (VALUE: universal_integer) return STRING;%ENDCOLOR%<br />%RED%alias TO_HEX_STRING is TO_HSTRING [universal_integer return STRING];%ENDCOLOR%<br />%RED%alias TO_DSTRING is TO_STRING [universal_integer return STRING];%ENDCOLOR%<br />%RED%alias TO_DECIMAL_STRING is TO_STRING [universal_integer return STRING];%ENDCOLOR% %RED%alias TO_BSTRING is TO_STRING [INTEGER return STRING];%ENDCOLOR%<br />%RED%alias TO_BINARY_STRING is TO_STRING [INTEGER return STRING];%ENDCOLOR%<br />%RED%function TO_OSTRING (VALUE: INTEGER) return STRING;%ENDCOLOR%<br />%RED%alias TO_OCTAL_STRING is TO_OSTRING [INTEGER return STRING];%ENDCOLOR%<br />%RED%function TO_HSTRING (VALUE: INTEGER) return STRING;%ENDCOLOR%<br />%RED%alias TO_HEX_STRING is TO_HSTRING [INTEGER return STRING];%ENDCOLOR%<br />%RED%alias TO_DSTRING is TO_STRING [INTEGER return STRING];%ENDCOLOR%<br />%RED%alias TO_DECIMAL_STRING is TO_STRING [INTEGER return STRING];%ENDCOLOR% %RED%These operations return strings that are the binary, octal, hexadecimal, and decimal, representations, respectively, of the parameters. For the TO_OSTRING operation, the result is an uppercase octal number corresponding to the representation of the parameter value. Similarly, for the TO_HSTRING operation, the result is an uppercase hexadecimal number corresponding to the representation of the parameter value. For the TO_DSTRING operation, the result is a decimal number corresponding to the representation of the parameter value.%ENDCOLOR% %RED%The following operations are implicitly declared in package STD.STANDARD at the end of the package declaration:%ENDCOLOR% %RED%alias TO_BSTRING is TO_STRING [universal_real return STRING];%ENDCOLOR%<br />%RED%alias TO_BINARY_STRING is TO_STRING [universal_real return STRING];%ENDCOLOR%<br />%RED%function TO_OSTRING (VALUE: universal_real) return STRING;%ENDCOLOR%<br />%RED%alias TO_OCTAL_STRING is TO_OSTRING [universal_real return STRING];%ENDCOLOR%<br />%RED%function TO_HSTRING (VALUE: universal_real) return STRING;%ENDCOLOR%<br />%RED%alias TO_HEX_STRING is TO_HSTRING [universal_real return STRING];%ENDCOLOR%<br />%RED%alias TO_DSTRING is TO_STRING [universal_real return STRING];%ENDCOLOR%<br />%RED%alias TO_DECIMAL_STRING is TO_STRING [universal_real return STRING];%ENDCOLOR% %RED%alias TO_BSTRING is TO_STRING [REAL return STRING];%ENDCOLOR%<br />%RED%alias TO_BINARY_STRING is TO_STRING [REAL return STRING];%ENDCOLOR%<br />%RED%function TO_OSTRING (VALUE: REAL) return STRING;%ENDCOLOR%<br />%RED%alias TO_OCTAL_STRING is TO_OSTRING [REAL return STRING];%ENDCOLOR%<br />%RED%function TO_HSTRING (VALUE: REAL) return STRING;%ENDCOLOR%<br />%RED%alias TO_HEX_STRING is TO_HSTRING [REAL return STRING];%ENDCOLOR%<br />%RED%alias TO_DSTRING is TO_STRING [REAL return STRING];%ENDCOLOR%<br />%RED%alias TO_DECIMAL_STRING is TO_STRING [REAL return STRING];%ENDCOLOR% %RED%These operations return strings that are the binary, octal, hexadecimal, and decimal, representations, respectively, of the parameters. For the TO_OSTRING operation, the result is an uppercase octal number corresponding to the representation of the parameter value. Similarly, for the TO_HSTRING operation, the result is an uppercase hexadecimal number corresponding to the representation of the parameter value. For the TO_DSTRING operation, the result is a decimal number corresponding to the representation of the parameter value.%ENDCOLOR%<br />%GREEN%[...]%ENDCOLOR% ---++++ 5.3.2.4 Predefined operations on array types <sticky>%GREEN%Page 50 of the LRM%ENDCOLOR%%BR% %GREEN%[...]%ENDCOLOR%%BR% function TO_HSTRING (VALUE: BIT_VECTOR) return STRING;%BR% alias TO_HEX_STRING is TO_HSTRING [BIT_VECTOR return STRING];%BR% %RED%function TO_DSTRING (VALUE: BIT_VECTOR) return STRING;%ENDCOLOR%%BR% %RED%alias TO_DECIMAL_STRING is TO_DSTRING [BIT_VECTOR return STRING];%ENDCOLOR%%BR% These operations return strings that are the binary, octal, %RED%<del>and</del>%ENDCOLOR% hexadecimal, %RED%and decimal,%ENDCOLOR% representations, respectively, of the parameters. For the TO_OSTRING operation, the result has an uppercase octal digit corresponding to each group of three elements in the parameter value. If the length of the parameter value is not a multiple of three, then one or two '0' elements are implicitly concatenated on the left of the parameter value to yield a value that is a multiple of three in length. Similarly, for the TO_HSTRING operation, the result has an uppercase hexadecimal digit corresponding to each group of four elements in the parameter value. If the length of the parameter value is not a multiple of four, then one, two, or three '0' elements are implicitly concatenated on the left of the parameter value to yield a value that is a multiple of four in length. %RED%For the%ENDCOLOR% %RED%TO_DSTRING operation, the result is a decimal number corresponding to the unsigned representation of the parameter value.%ENDCOLOR%%BR%</sticky> ---++++ G.4.8.5 Textio functions %GREEN%Page 536 of the LRM%ENDCOLOR% %GREEN%[...]%ENDCOLOR% Hex_read Alias for hread. %RED%Dwrite Decimal write. The pre- and post-binary-point parts of the number are written separately, with a binary point between them.%ENDCOLOR% %RED%Dread Decimal read. The number read is interpreted as separate pre- and post-binary-point parts, with an optional binary point between them. If a “.” is found in the input string, then the index is checked to ensure that the binary point is in the correct place. It is an error if a "." is found in the input string and the VALUE parameter is of type INTEGER.%ENDCOLOR% %RED%Decimal_write Alias for Dwrite.%ENDCOLOR% %RED%Decimal_read Alias for Dread.%ENDCOLOR% To_string Returns a string that can be padded and left or right justified, for example: %GREEN%[...]%ENDCOLOR% ---++ Style Notes <noautolink> <sticky> Changes are shown in %RED%red font%ENDCOLOR%.%BR% Deletions are %RED%<del>crossed out</del>%ENDCOLOR%.%BR% Editing or reviewing notes in %GREEN%green font%ENDCOLOR%. ---++ Reviewing Notes TODO ---++ Details of Language Change ---+++ x.y.z General %GREEN%[For reviewers to follow the chain of EBNF rules.]%ENDCOLOR% ---++ Comments The function: <pre>function TO_INTEGER (ARG : STD_ULOGIC_VECTOR) return NATURAL;</pre> is already in numeric_std_unsigned. See numeric_std_unsigned Id: D.1 -- %BUBBLESIG{JimLewis - 2017-03-05}% Version 2 of this LCS implements the quick-fix of making TO_INTEGER local to the std_logic_1164. It also defines To_StdULogicVector to remove the use of to_unsigned in the DREAD procedures defined in std_logic_1164. -- %BUBBLESIG{Pablo2Blecua - 2017-03-08}% @TODO Meeting 9-Mar-2017 * Does not need aliases in std_logic_textio, but it is ok to be there * if To_xString for integer is implicit in std.standard, need corresponding text in LRM -- %BUBBLESIG{JimLewis - 2017-03-09}% Deleted the changes from std_logic_textio. Regarding the to_Xstring for integers. I see three solutions: * We do not implement the to_Xstring functions in std.STANDARD and let the user write them themselves if needed (using the to_Xstring in numeric_std is very easy). * We implement in std.STANDARD to_hstring, to_ostring, to_bstring and to_dstring (the latter only for consistency since it should return the same as to_string). With the corresponding update of LRM 5.2.6 * We implement in std.STANDARD "function TO_STRING (VALUE: INTEGER; FORMAT: STRING) return STRING;" And update the LRM 5.2.6 specifying that FORMAT can be: d, i, u, x, X, o. This is more in line with what is now provided for REAL but does not provide the functionality of to_bstring. -- %BUBBLESIG{Pablo2Blecua - 2017-03-10}% I have implemented the 3rd solution that defines the new overloaded function: function TO_STRING (VALUE: INTEGER; FORMAT: STRING) return STRING -- %BUBBLESIG{Pablo2Blecua - 2017-03-12}% To be consistent with other types, such as std_logic_vector, it would be nice to have to_hstring, to_ostring, and to_bstring. These can just call your to_string(..., FORMAT) -- %BUBBLESIG{JimLewis - 2017-03-13}% Comments from 3/21/2017 Meeting * to_integer, to_slv * Rob is not real comfortable with moving these but it is not a show stopper * in numeric_std_unsigned is missing the aliases to to_integer (to maintain backward compatibility) * Perhaps we can wait on moving to_integer * Rob does not like to_hstring for real. How is it defined to work, esp wrt the decimal point? -- %BUBBLESIG{JimLewis - 2017-03-21}% 1.1) to_integer and to_sulv/to_slv are moved to std_logic_1164 because now they are used in there (due to the addition of TO_DSTRING and DREAD respectively). Since to_sulv was moved it made sense to move to_slv too. Now numeric_std_unsigned has no conversion functions. If it is decided not to move them and make a local version of to_integer and to_sulv in std_logic_1164 it can be done, but then there will be duplicated code. 1.2) I thought about the alias for to_integer in numeric_std_unsigned, but do we really need it? When using numeric_std_unsigned I think that std_logic_1164 must be used too, and therefore to_integer is visible (only that it is now in a different file). If that is not the case aliases can be quickly added. 1.3) It can be done both ways. My view is that it is "cleaner" to move them. 2.1) to_hstring (and to_ostring) for real are there to be consistent with what is in float_generic_pkg. I assumed that if for floats compliant to IEEE-754 these functions were offered they should also be there for real/universal_real. These functions return the "raw" hexadecimal value of the 32/64 bits representing the real number (as in float_generic_pkg). %GREEN%"For the TO_OSTRING operation, the result is an uppercase octal number corresponding to the representation of the parameter value. Similarly, for the TO_HSTRING operation, the result is an uppercase hexadecimal number corresponding to the representation of the parameter value."%ENDCOLOR% tried to say that but probably without success!.%BR%%BR% 2.2) Another option (at least for to_hstring) is to return the same as when calling to_STRING(..., FORMAT) with format being 'a' or 'A'.%BR%%BR% 2.3) Or they can just be removed. -- %BUBBLESIG{Pablo2Blecua - 2017-03-22}% %COMMENT%</sticky> </noautolink>
Edit
|
Attach
|
P
rint version
|
H
istory
:
r21
|
r16
<
r15
<
r14
<
r13
|
B
acklinks
|
V
iew topic
|
Raw edit
|
More topic actions...
Topic revision: r1 - 2020-02-17 - 15:34:40 -
TWikiGuest
P1076
Log In
or
Register
P1076 Web
Create New Topic
Index
Search
Changes
Notifications
RSS Feed
Statistics
Preferences
Webs
Main
P1076
Ballots
LCS2016_080
P10761
P1647
P16661
P1685
P1734
P1735
P1778
P1800
P1801
Sandbox
TWiki
VIP
VerilogAMS
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback