|
|
- --
- -- File Name: MessagePkg.vhd
- -- Design Unit Name: MessagePkg
- -- Revision: STANDARD VERSION, revision 2015.01
- --
- -- Maintainer: Jim Lewis email: jim@synthworks.com
- -- Contributor(s):
- -- Jim Lewis SynthWorks
- --
- --
- -- Package Defines
- -- Data structure for multi-line name/message to be associated with a data structure.
- --
- -- Developed for:
- -- SynthWorks Design Inc.
- -- VHDL Training Classes
- -- 11898 SW 128th Ave. Tigard, Or 97223
- -- http://www.SynthWorks.com
- --
- -- Latest standard version available at:
- -- http://www.SynthWorks.com/downloads
- --
- -- Revision History:
- -- Date Version Description
- -- 06/2010: 0.1 Initial revision
- -- 07/2014: 2014.07 Moved specialization required by CoveragePkg to CoveragePkg
- -- 07/2014: 2014.07a Removed initialized pointers which can lead to memory leaks.
- -- 01/2015: 2015.01 Removed initialized parameter from Get
- --
- --
- -- Copyright (c) 2010 - 2015 by SynthWorks Design Inc. All rights reserved.
- --
- -- Verbatim copies of this source file may be used and
- -- distributed without restriction.
- --
- -- This source file is free software; you can redistribute it
- -- and/or modify it under the terms of the ARTISTIC License
- -- as published by The Perl Foundation; either version 2.0 of
- -- the License, or (at your option) any later version.
- --
- -- This source is distributed in the hope that it will be
- -- useful, but WITHOUT ANY WARRANTY; without even the implied
- -- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- -- PURPOSE. See the Artistic License for details.
- --
- -- You should have received a copy of the license with this source.
- -- If not download it from,
- -- http://www.perlfoundation.org/artistic_license_2_0
- --
- use work.OsvvmGlobalPkg.all ;
- use work.AlertLogPkg.all ;
-
- library ieee ;
- use ieee.std_logic_1164.all ;
- use ieee.numeric_std.all ;
- use ieee.math_real.all ;
- use std.textio.all ;
-
- package MessagePkg is
-
- type MessagePType is protected
-
- procedure Set (MessageIn : String) ;
- impure function Get (ItemNumber : integer) return string ;
- impure function GetCount return integer ;
- impure function IsSet return boolean ;
- procedure Clear ; -- clear message
- procedure Deallocate ; -- clear message
-
- end protected MessagePType ;
-
- end package MessagePkg ;
-
- --- ///////////////////////////////////////////////////////////////////////////
- --- ///////////////////////////////////////////////////////////////////////////
- --- ///////////////////////////////////////////////////////////////////////////
-
- package body MessagePkg is
-
- -- Local Data Structure Types
- type LineArrayType is array (natural range <>) of line ;
- type LineArrayPtrType is access LineArrayType ;
-
- type MessagePType is protected body
-
- variable MessageCount : integer := 0 ;
- constant INITIAL_ITEM_COUNT : integer := 16 ;
- variable MaxMessageCount : integer := 0 ;
- variable MessagePtr : LineArrayPtrType ;
-
- ------------------------------------------------------------
- procedure Set (MessageIn : String) is
- ------------------------------------------------------------
- variable NamePtr : line ;
- variable OldMaxMessageCount : integer ;
- variable OldMessagePtr : LineArrayPtrType ;
- begin
- MessageCount := MessageCount + 1 ;
- if MessageCount > MaxMessageCount then
- OldMaxMessageCount := MaxMessageCount ;
- MaxMessageCount := MaxMessageCount + INITIAL_ITEM_COUNT ;
- OldMessagePtr := MessagePtr ;
- MessagePtr := new LineArrayType(1 to MaxMessageCount) ;
- for i in 1 to OldMaxMessageCount loop
- MessagePtr(i) := OldMessagePtr(i) ;
- end loop ;
- Deallocate( OldMessagePtr ) ;
- end if ;
- MessagePtr(MessageCount) := new string'(MessageIn) ;
- end procedure Set ;
-
- ------------------------------------------------------------
- impure function Get (ItemNumber : integer) return string is
- ------------------------------------------------------------
- begin
- if MessageCount > 0 then
- if ItemNumber >= 1 and ItemNumber <= MessageCount then
- return MessagePtr(ItemNumber).all ;
- else
- Alert(OSVVM_ALERTLOG_ID, "%% MessagePkg.Get input value out of range", FAILURE) ;
- return "" ; -- error if this happens
- end if ;
- else
- Alert(OSVVM_ALERTLOG_ID, "%% MessagePkg.Get message is not set", FAILURE) ;
- return "" ; -- error if this happens
- end if ;
- end function Get ;
-
- ------------------------------------------------------------
- impure function GetCount return integer is
- ------------------------------------------------------------
- begin
- return MessageCount ;
- end function GetCount ;
-
- ------------------------------------------------------------
- impure function IsSet return boolean is
- ------------------------------------------------------------
- begin
- return MessageCount > 0 ;
- end function IsSet ;
-
- ------------------------------------------------------------
- procedure Deallocate is -- clear message
- ------------------------------------------------------------
- variable CurPtr : LineArrayPtrType ;
- begin
- for i in 1 to MessageCount loop
- deallocate( MessagePtr(i) ) ;
- end loop ;
- MessageCount := 0 ;
- MaxMessageCount := 0 ;
- deallocate( MessagePtr ) ;
- end procedure Deallocate ;
-
- ------------------------------------------------------------
- procedure Clear is -- clear
- ------------------------------------------------------------
- begin
- Deallocate ;
- end procedure Clear ;
-
- end protected body MessagePType ;
-
- end package body MessagePkg ;
|