-- -- File Name: ScoreBoardGenericPkg.vhd -- Design Unit Name: ScoreBoardGenericPkg -- Revision: STANDARD VERSION -- -- Maintainer: Jim Lewis email: jim@synthworks.com -- Contributor(s): -- Jim Lewis email: jim@synthworks.com -- -- -- Description: -- Defines types and methods to implement a FIFO based Scoreboard -- Defines type ScoreBoardPType -- Defines methods for putting values the scoreboard -- -- 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 -- 12/2006: 2006.12 Initial revision -- 08/2010 2010.08 Added Tailpointer -- 05/2012 2012.05 Changed FIFO to store pointers to ExpectedType -- Allows usage of unconstrained arrays -- 08/2012 2012.08 Added Type and Subprogram Generics -- 08/2013 2013.08 Generics: to_string replaced write, Match replaced check -- Added Tags - Experimental -- Added Array of Scoreboards -- 09/2013 2013.09 Added file handling, Check Count, Finish Status -- Find, Flush -- 06/2015 2015.06 Added Alerts, SetAlertLogID, Revised LocalPush, GetDropCount, -- Deprecated SetFinish and ReportMode - REPORT_NONE, FileOpen -- Deallocate, Initialized, Function SetName -- 11/2016 2016.11 Released as part of OSVVM -- 05/2017 2017.05 First print Actual then only print Expected if mis-match -- -- -- Copyright (c) 2006 - 2016 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 std.textio.all ; library ieee ; use ieee.std_logic_1164.all ; use ieee.numeric_std.all ; use work.TranscriptPkg.all ; use work.AlertLogPkg.all ; use work.NamePkg.all ; package ScoreboardGenericPkg is generic ( type ExpectedType ; type ActualType ; function Match(Actual : ActualType ; -- defaults Expected : ExpectedType) return boolean ; -- is "=" ; function expected_to_string(A : ExpectedType) return string ; -- is to_string ; function actual_to_string (A : ActualType) return string -- is to_string ; ) ; -- -- For a VHDL-2002 package, comment out the generics and -- -- uncomment the following, it replaces a generic instance of the package. -- -- As a result, you will have multiple copies of the entire package. -- -- Inconvenient, but ok as it still works the same. -- subtype ExpectedType is std_logic_vector ; -- subtype ActualType is std_logic_vector ; -- alias Match is std_match [ActualType, ExpectedType return boolean] ; -- for std_logic_vector -- alias expected_to_string is to_hstring [ExpectedType return string]; -- VHDL-2008 -- alias actual_to_string is to_hstring [ActualType return string]; -- VHDL-2008 -- ScoreboardReportType is deprecated -- Replaced by Affirmations. ERROR is the default. ALL turns on PASSED flag type ScoreboardReportType is (REPORT_ERROR, REPORT_ALL, REPORT_NONE) ; -- replaced by affirmations type ScoreBoardPType is protected ------------------------------------------------------------ -- Emulate arrays of scoreboards procedure SetArrayIndex(L, R : integer) ; -- supports integer indices procedure SetArrayIndex(R : natural) ; -- indicies 1 to R impure function GetArrayIndex return integer_vector ; impure function GetArrayLength return natural ; ------------------------------------------------------------ -- Push items into the scoreboard/FIFO -- Simple Scoreboard, no tag procedure Push (Item : in ExpectedType) ; -- Simple Tagged Scoreboard procedure Push ( constant Tag : in string ; constant Item : in ExpectedType ) ; -- Array of Scoreboards, no tag procedure Push ( constant Index : in integer ; constant Item : in ExpectedType ) ; -- Array of Tagged Scoreboards procedure Push ( constant Index : in integer ; constant Tag : in string ; constant Item : in ExpectedType ) ; -- ------------------------------------------------------------ -- -- Push items into the scoreboard/FIFO -- -- Function form supports chaining of operations -- -- In 2013, this caused overloading issues in some simulators, will retest later -- -- -- Simple Scoreboard, no tag -- impure function Push (Item : ExpectedType) return ExpectedType ; -- -- -- Simple Tagged Scoreboard -- impure function Push ( -- constant Tag : in string ; -- constant Item : in ExpectedType -- ) return ExpectedType ; -- -- -- Array of Scoreboards, no tag -- impure function Push ( -- constant Index : in integer ; -- constant Item : in ExpectedType -- ) return ExpectedType ; -- -- -- Array of Tagged Scoreboards -- impure function Push ( -- constant Index : in integer ; -- constant Tag : in string ; -- constant Item : in ExpectedType -- ) return ExpectedType ; -- for chaining of operations ------------------------------------------------------------ -- Check received item with item in the scoreboard/FIFO -- Simple Scoreboard, no tag procedure Check (ActualData : ActualType) ; -- Simple Tagged Scoreboard procedure Check ( constant Tag : in string ; constant ActualData : in ActualType ) ; -- Array of Scoreboards, no tag procedure Check ( constant Index : in integer ; constant ActualData : in ActualType ) ; -- Array of Tagged Scoreboards procedure Check ( constant Index : in integer ; constant Tag : in string ; constant ActualData : in ActualType ) ; ------------------------------------------------------------ -- Pop the top item (FIFO) from the scoreboard/FIFO -- Simple Scoreboard, no tag procedure Pop (variable Item : out ExpectedType) ; -- Simple Tagged Scoreboard procedure Pop ( constant Tag : in string ; variable Item : out ExpectedType ) ; -- Array of Scoreboards, no tag procedure Pop ( constant Index : in integer ; variable Item : out ExpectedType ) ; -- Array of Tagged Scoreboards procedure Pop ( constant Index : in integer ; constant Tag : in string ; variable Item : out ExpectedType ) ; -- ------------------------------------------------------------ -- -- Pop the top item (FIFO) from the scoreboard/FIFO -- -- Function form supports chaining of operations -- -- In 2013, this caused overloading issues in some simulators, will retest later -- -- -- Simple Scoreboard, no tag -- impure function Pop return ExpectedType ; -- -- -- Simple Tagged Scoreboard -- impure function Pop ( -- constant Tag : in string -- ) return ExpectedType ; -- -- -- Array of Scoreboards, no tag -- impure function Pop (Index : integer) return ExpectedType ; -- -- -- Array of Tagged Scoreboards -- impure function Pop ( -- constant Index : in integer ; -- constant Tag : in string -- ) return ExpectedType ; ------------------------------------------------------------ -- Empty - check to see if scoreboard is empty impure function Empty return boolean ; -- Simple impure function Empty (Tag : String) return boolean ; -- Simple, Tagged impure function Empty (Index : integer) return boolean ; -- Array impure function Empty (Index : integer; Tag : String) return boolean ; -- Array, Tagged ------------------------------------------------------------ -- SetAlertLogID - associate an AlertLogID with a scoreboard to allow integrated error reporting procedure SetAlertLogID(Index : Integer ; Name : string ; ParentID : AlertLogIDType := ALERTLOG_BASE_ID ; CreateHierarchy : Boolean := TRUE) ; procedure SetAlertLogID(Name : string ; ParentID : AlertLogIDType := ALERTLOG_BASE_ID ; CreateHierarchy : Boolean := TRUE) ; -- Use when an AlertLogID is used by multiple items (Model or other Scoreboards). See also AlertLogPkg.GetAlertLogID procedure SetAlertLogID (Index : Integer ; A : AlertLogIDType) ; procedure SetAlertLogID (A : AlertLogIDType) ; impure function GetAlertLogID(Index : Integer) return AlertLogIDType ; impure function GetAlertLogID return AlertLogIDType ; ------------------------------------------------------------ -- Set a scoreboard name. -- Used when scoreboard AlertLogID is shared between different sources. procedure SetName (Name : String) ; impure function SetName (Name : String) return string ; impure function GetName (DefaultName : string := "Scoreboard") return string ; ------------------------------------------------------------ -- Scoreboard Introspection -- Number of items put into scoreboard impure function GetItemCount return integer ; -- Simple, with or without tags impure function GetItemCount (Index : integer) return integer ; -- Arrays, with or without tags -- Number of items checked by scoreboard impure function GetCheckCount return integer ; -- Simple, with or without tags impure function GetCheckCount (Index : integer) return integer ; -- Arrays, with or without tags -- Number of items dropped by scoreboard. See Find/Flush impure function GetDropCount return integer ; -- Simple, with or without tags impure function GetDropCount (Index : integer) return integer ; -- Arrays, with or without tags ------------------------------------------------------------ -- Find - Returns the ItemNumber for a value and tag (if applicable) in a scoreboard. -- Find returns integer'left if no match found -- Also See Flush. Flush will drop items up through the ItemNumber -- Simple Scoreboard impure function Find ( constant ActualData : in ActualType ) return integer ; -- Tagged Scoreboard impure function Find ( constant Tag : in string; constant ActualData : in ActualType ) return integer ; -- Array of Simple Scoreboards impure function Find ( constant Index : in integer ; constant ActualData : in ActualType ) return integer ; -- Array of Tagged Scoreboards impure function Find ( constant Index : in integer ; constant Tag : in string; constant ActualData : in ActualType ) return integer ; ------------------------------------------------------------ -- Flush - Remove elements in the scoreboard upto and including the one with ItemNumber -- See Find to identify an ItemNumber of a particular value and tag (if applicable) -- Simple Scoreboard procedure Flush ( constant ItemNumber : in integer ) ; -- Tagged Scoreboard - only removes items that also match the tag procedure Flush ( constant Tag : in string ; constant ItemNumber : in integer ) ; -- Array of Simple Scoreboards procedure Flush ( constant Index : in integer ; constant ItemNumber : in integer ) ; -- Array of Tagged Scoreboards - only removes items that also match the tag procedure Flush ( constant Index : in integer ; constant Tag : in string ; constant ItemNumber : in integer ) ; ------------------------------------------------------------ -- Generally these are not required. When a simulation ends and -- another simulation is started, a simulator will release all allocated items. procedure Deallocate ; -- Deletes all allocated items procedure Initialize ; -- Creates initial data structure if it was destroyed with Deallocate ------------------------------------------------------------ ------------------------------------------------------------ -- Deprecated. Use alerts directly instead. -- AlertIF(SB.GetCheckCount < 10, ....) ; -- AlertIf(Not SB.Empty, ...) ; ------------------------------------------------------------ -- Set alerts if scoreboard not empty or if CheckCount < -- Use if need to check empty or CheckCount for a specific scoreboard. -- Simple Scoreboards, with or without tag procedure CheckFinish ( FinishCheckCount : integer ; FinishEmpty : boolean ) ; -- Array of Scoreboards, with or without tag procedure CheckFinish ( Index : integer ; FinishCheckCount : integer ; FinishEmpty : boolean ) ; ------------------------------------------------------------ -- Get error count -- Deprecated, replaced by usage of Alerts -- AlertFLow: Instead use AlertLogPkg.ReportAlerts or AlertLogPkg.GetAlertCount -- Not AlertFlow: use GetErrorCount to get total error count -- Simple Scoreboards, with or without tag impure function GetErrorCount return integer ; -- Array of Scoreboards, with or without tag impure function GetErrorCount(Index : integer) return integer ; ------------------------------------------------------------ -- Error count manipulation -- IncErrorCount - not recommended, use alerts instead - may be deprecated in the future procedure IncErrorCount ; -- Simple, with or without tags procedure IncErrorCount (Index : integer) ; -- Arrays, with or without tags -- Clear error counter. Caution does not change AlertCounts, must also use AlertLogPkg.ClearAlerts procedure SetErrorCountZero ; -- Simple, with or without tags procedure SetErrorCountZero (Index : integer) ; -- Arrays, with or without tags ------------------------------------------------------------ ------------------------------------------------------------ -- Deprecated. Names changed. Maintained for backward compatibility - would prefer an alias ------------------------------------------------------------ procedure FileOpen (FileName : string; OpenKind : File_Open_Kind ) ; -- Replaced by TranscriptPkg.TranscriptOpen procedure PutExpectedData (ExpectedData : ExpectedType) ; -- Replaced by push procedure CheckActualData (ActualData : ActualType) ; -- Replaced by Check impure function GetItemNumber return integer ; -- Replaced by GetItemCount procedure SetMessage (MessageIn : String) ; -- Replaced by SetName impure function GetMessage return string ; -- Replaced by GetName -- Deprecated and may be deleted in a future revision procedure SetFinish ( -- Replaced by CheckFinish Index : integer ; FCheckCount : integer ; FEmpty : boolean := TRUE; FStatus : boolean := TRUE ) ; procedure SetFinish ( -- Replaced by CheckFinish FCheckCount : integer ; FEmpty : boolean := TRUE; FStatus : boolean := TRUE ) ; ------------------------------------------------------------ -- SetReportMode -- Not AlertFlow -- REPORT_ALL: Replaced by AlertLogPkg.SetLogEnable(PASSED, TRUE) -- REPORT_ERROR: Replaced by AlertLogPkg.SetLogEnable(PASSED, FALSE) -- REPORT_NONE: Deprecated, do not use. -- AlertFlow: -- REPORT_ALL: Replaced by AlertLogPkg.SetLogEnable(AlertLogID, PASSED, TRUE) -- REPORT_ERROR: Replaced by AlertLogPkg.SetLogEnable(AlertLogID, PASSED, FALSE) -- REPORT_NONE: Replaced by AlertLogPkg.SetAlertEnable(AlertLogID, ERROR, FALSE) procedure SetReportMode (ReportModeIn : ScoreboardReportType) ; impure function GetReportMode return ScoreboardReportType ; end protected ScoreBoardPType ; end ScoreboardGenericPkg ; -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ package body ScoreboardGenericPkg is type ScoreBoardPType is protected body type ExpectedPointerType is access ExpectedType ; type ListType ; type ListPointerType is access ListType ; type ListType is record ItemNumber : integer ; TagPtr : line ; ExpectedPtr : ExpectedPointerType ; NextPtr : ListPointerType ; end record ; type ListArrayType is array (integer range <>) of ListPointerType ; type ListArrayPointerType is access ListArrayType ; variable ArrayLengthVar : integer := 1 ; variable HeadPointer : ListArrayPointerType := new ListArrayType(1 to 1) ; variable TailPointer : ListArrayPointerType := new ListArrayType(1 to 1) ; variable PopListPointer : ListArrayPointerType := new ListArrayType(1 to 1) ; type IntegerArrayType is array (integer range <>) of Integer ; type IntegerArrayPointerType is access IntegerArrayType ; variable ErrCntVar : IntegerArrayPointerType := new IntegerArrayType'(1 => 0) ; variable DropCountVar : IntegerArrayPointerType := new IntegerArrayType'(1 => 0) ; variable ItemNumberVar : IntegerArrayPointerType := new IntegerArrayType'(1 => 0) ; variable CheckCountVar : IntegerArrayPointerType := new IntegerArrayType'(1 => 0) ; variable AlertLogIDVar : IntegerArrayPointerType := new IntegerArrayType'(1 => OSVVM_SCOREBOARD_ALERTLOG_ID) ; variable NameVar : NamePType ; variable ReportModeVar : ScoreboardReportType ; variable FirstIndexVar : integer := 1 ; ------------------------------------------------------------ procedure SetName (Name : String) is ------------------------------------------------------------ begin NameVar.Set(Name) ; end procedure SetName ; ------------------------------------------------------------ impure function SetName (Name : String) return string is ------------------------------------------------------------ begin NameVar.Set(Name) ; return Name ; end function SetName ; ------------------------------------------------------------ impure function GetName (DefaultName : string := "Scoreboard") return string is ------------------------------------------------------------ begin return NameVar.Get(DefaultName) ; end function GetName ; ------------------------------------------------------------ procedure SetReportMode (ReportModeIn : ScoreboardReportType) is ------------------------------------------------------------ begin ReportModeVar := ReportModeIn ; if ReportModeVar = REPORT_ALL then Alert(OSVVM_SCOREBOARD_ALERTLOG_ID, "ScoreboardGenericPkg.SetReportMode: To turn off REPORT_ALL, use osvvm.AlertLogPkg.SetLogEnable(PASSED, FALSE)", WARNING) ; for i in AlertLogIDVar'range loop SetLogEnable(AlertLogIDVar(i), PASSED, TRUE) ; end loop ; end if ; if ReportModeVar = REPORT_NONE then Alert(OSVVM_SCOREBOARD_ALERTLOG_ID, "ScoreboardGenericPkg.SetReportMode: ReportMode REPORT_NONE has been deprecated and will be removed in next revision. Please contact OSVVM architect Jim Lewis if you need this capability.", WARNING) ; end if ; end procedure SetReportMode ; ------------------------------------------------------------ impure function GetReportMode return ScoreboardReportType is ------------------------------------------------------------ begin return ReportModeVar ; end function GetReportMode ; ------------------------------------------------------------ procedure SetArrayIndex(L, R : integer) is ------------------------------------------------------------ variable OldHeadPointer, OldTailPointer, OldPopListPointer : ListArrayPointerType ; variable OldErrCnt, OldDropCount, OldItemNumber, OldCheckCount, OldAlertLogIDVar : IntegerArrayPointerType ; variable Min, Max, Len, OldLen, OldMax : integer ; begin Min := minimum(L, R) ; Max := maximum(L, R) ; OldLen := ArrayLengthVar ; OldMax := Min + ArrayLengthVar - 1 ; Len := Max - Min + 1 ; ArrayLengthVar := Len ; if Len >= OldLen then FirstIndexVar := Min ; OldHeadPointer := HeadPointer ; HeadPointer := new ListArrayType(Min to Max) ; if OldHeadPointer /= NULL then HeadPointer(Min to OldMax) := OldHeadPointer.all ; -- (OldHeadPointer'range) ; Deallocate(OldHeadPointer) ; end if ; OldTailPointer := TailPointer ; TailPointer := new ListArrayType(Min to Max) ; if OldTailPointer /= NULL then TailPointer(Min to OldMax) := OldTailPointer.all ; Deallocate(OldTailPointer) ; end if ; OldPopListPointer := PopListPointer ; PopListPointer := new ListArrayType(Min to Max) ; if OldPopListPointer /= NULL then PopListPointer(Min to OldMax) := OldPopListPointer.all ; Deallocate(OldPopListPointer) ; end if ; OldErrCnt := ErrCntVar ; ErrCntVar := new IntegerArrayType'(Min to Max => 0) ; if OldErrCnt /= NULL then ErrCntVar(Min to OldMax) := OldErrCnt.all ; Deallocate(OldErrCnt) ; end if ; OldDropCount := DropCountVar ; DropCountVar := new IntegerArrayType'(Min to Max => 0) ; if OldDropCount /= NULL then DropCountVar(Min to OldMax) := OldDropCount.all ; Deallocate(OldDropCount) ; end if ; OldItemNumber := ItemNumberVar ; ItemNumberVar := new IntegerArrayType'(Min to Max => 0) ; if OldItemNumber /= NULL then ItemNumberVar(Min to OldMax) := OldItemNumber.all ; Deallocate(OldItemNumber) ; end if ; OldCheckCount := CheckCountVar ; CheckCountVar := new IntegerArrayType'(Min to Max => 0) ; if OldCheckCount /= NULL then CheckCountVar(Min to OldMax) := OldCheckCount.all ; Deallocate(OldCheckCount) ; end if ; OldAlertLogIDVar := AlertLogIDVar ; AlertLogIDVar := new IntegerArrayType'(Min to Max => OSVVM_SCOREBOARD_ALERTLOG_ID) ; if OldAlertLogIDVar /= NULL then AlertLogIDVar(Min to OldMax) := OldAlertLogIDVar.all ; Deallocate(OldAlertLogIDVar) ; end if ; elsif Len < OldLen then report "ScoreboardGenericPkg: SetArrayIndex, new array Length <= current array length" severity failure ; end if ; end procedure SetArrayIndex ; ------------------------------------------------------------ procedure SetArrayIndex(R : natural) is ------------------------------------------------------------ begin SetArrayIndex(1, R) ; end procedure SetArrayIndex ; ------------------------------------------------------------ procedure Deallocate is ------------------------------------------------------------ variable CurListPtr, LastListPtr : ListPointerType ; begin for Index in HeadPointer'range loop -- Deallocate contents in the scoreboards CurListPtr := HeadPointer(Index) ; while CurListPtr /= Null loop deallocate(CurListPtr.TagPtr) ; deallocate(CurListPtr.ExpectedPtr) ; LastListPtr := CurListPtr ; CurListPtr := CurListPtr.NextPtr ; Deallocate(LastListPtr) ; end loop ; end loop ; for Index in PopListPointer'range loop -- Deallocate PopListPointer - only has single element CurListPtr := PopListPointer(Index) ; if CurListPtr /= NULL then deallocate(CurListPtr.TagPtr) ; deallocate(CurListPtr.ExpectedPtr) ; deallocate(CurListPtr) ; end if ; end loop ; -- Deallocate arrays of pointers Deallocate(HeadPointer) ; Deallocate(TailPointer) ; Deallocate(PopListPointer) ; -- Deallocate supporting arrays Deallocate(ErrCntVar) ; Deallocate(DropCountVar) ; Deallocate(ItemNumberVar) ; Deallocate(CheckCountVar) ; Deallocate(AlertLogIDVar) ; -- Deallocate NameVar - NamePType NameVar.Deallocate ; ArrayLengthVar := 0 ; end procedure Deallocate ; ------------------------------------------------------------ -- Construct initial data structure procedure Initialize is ------------------------------------------------------------ begin SetArrayIndex(1, 1) ; end procedure Initialize ; ------------------------------------------------------------ impure function GetArrayIndex return integer_vector is ------------------------------------------------------------ begin return (1 => HeadPointer'left, 2 => HeadPointer'right) ; end function GetArrayIndex ; ------------------------------------------------------------ impure function GetArrayLength return natural is ------------------------------------------------------------ begin return ArrayLengthVar ; -- HeadPointer'length ; end function GetArrayLength ; ------------------------------------------------------------ procedure SetAlertLogID (Index : Integer ; A : AlertLogIDType) is ------------------------------------------------------------ begin AlertLogIDVar(Index) := A ; end procedure SetAlertLogID ; ------------------------------------------------------------ procedure SetAlertLogID (A : AlertLogIDType) is ------------------------------------------------------------ begin AlertLogIDVar(FirstIndexVar) := A ; end procedure SetAlertLogID ; ------------------------------------------------------------ procedure SetAlertLogID(Index : Integer ; Name : string ; ParentID : AlertLogIDType := ALERTLOG_BASE_ID ; CreateHierarchy : Boolean := TRUE) is ------------------------------------------------------------ begin AlertLogIDVar(Index) := GetAlertLogID(Name, ParentID, CreateHierarchy) ; end procedure SetAlertLogID ; ------------------------------------------------------------ procedure SetAlertLogID(Name : string ; ParentID : AlertLogIDType := ALERTLOG_BASE_ID ; CreateHierarchy : Boolean := TRUE) is ------------------------------------------------------------ begin AlertLogIDVar(FirstIndexVar) := GetAlertLogID(Name, ParentID, CreateHierarchy) ; end procedure SetAlertLogID ; ------------------------------------------------------------ impure function GetAlertLogID(Index : Integer) return AlertLogIDType is ------------------------------------------------------------ begin return AlertLogIDVar(Index) ; end function GetAlertLogID ; ------------------------------------------------------------ impure function GetAlertLogID return AlertLogIDType is ------------------------------------------------------------ begin return AlertLogIDVar(FirstIndexVar) ; end function GetAlertLogID ; ------------------------------------------------------------ impure function LocalOutOfRange( ------------------------------------------------------------ constant Index : in integer ; constant Name : in string ) return boolean is begin return AlertIf(OSVVM_SCOREBOARD_ALERTLOG_ID, Index < HeadPointer'Low or Index > HeadPointer'High, GetName & " " & Name & " Index: " & to_string(Index) & "is not in the range (" & to_string(HeadPointer'Low) & "to " & to_string(HeadPointer'High) & ")", FAILURE ) ; end function LocalOutOfRange ; ------------------------------------------------------------ procedure LocalPush ( ------------------------------------------------------------ constant Index : in integer ; constant Tag : in string ; constant Item : in ExpectedType ) is variable ExpectedPtr : ExpectedPointerType ; variable TagPtr : line ; begin if LocalOutOfRange(Index, "Push") then return ; -- error reporting in LocalOutOfRange end if ; ItemNumberVar(Index) := ItemNumberVar(Index) + 1 ; ExpectedPtr := new ExpectedType'(Item) ; TagPtr := new string'(Tag) ; if HeadPointer(Index) = NULL then -- 2015.05: allocation using ListTtype'(...) in a protected type does not work in some simulators -- HeadPointer(Index) := new ListType'(ItemNumberVar(Index), TagPtr, ExpectedPtr, NULL) ; HeadPointer(Index) := new ListType ; HeadPointer(Index).ItemNumber := ItemNumberVar(Index) ; HeadPointer(Index).TagPtr := TagPtr ; HeadPointer(Index).ExpectedPtr := ExpectedPtr ; HeadPointer(Index).NextPtr := NULL ; TailPointer(Index) := HeadPointer(Index) ; else -- 2015.05: allocation using ListTtype'(...) in a protected type does not work in some simulators -- TailPointer(Index).NextPtr := new ListType'(ItemNumberVar(Index), TagPtr, ExpectedPtr, NULL) ; TailPointer(Index).NextPtr := new ListType ; TailPointer(Index).NextPtr.ItemNumber := ItemNumberVar(Index) ; TailPointer(Index).NextPtr.TagPtr := TagPtr ; TailPointer(Index).NextPtr.ExpectedPtr := ExpectedPtr ; TailPointer(Index).NextPtr.NextPtr := NULL ; TailPointer(Index) := TailPointer(Index).NextPtr ; end if ; end procedure LocalPush ; ------------------------------------------------------------ -- Array of Tagged Scoreboards procedure Push ( ------------------------------------------------------------ constant Index : in integer ; constant Tag : in string ; constant Item : in ExpectedType ) is variable ExpectedPtr : ExpectedPointerType ; variable TagPtr : line ; begin if LocalOutOfRange(Index, "Push") then return ; -- error reporting in LocalOutOfRange end if ; LocalPush(Index, Tag, Item) ; end procedure Push ; ------------------------------------------------------------ -- Array of Scoreboards, no tag procedure Push ( ------------------------------------------------------------ constant Index : in integer ; constant Item : in ExpectedType ) is begin if LocalOutOfRange(Index, "Push") then return ; -- error reporting in LocalOutOfRange end if ; LocalPush(Index, "", Item) ; end procedure Push ; ------------------------------------------------------------ -- Simple Tagged Scoreboard procedure Push ( ------------------------------------------------------------ constant Tag : in string ; constant Item : in ExpectedType ) is begin LocalPush(FirstIndexVar, Tag, Item) ; end procedure Push ; ------------------------------------------------------------ -- Simple Scoreboard, no tag procedure Push (Item : in ExpectedType) is ------------------------------------------------------------ begin LocalPush(FirstIndexVar, "", Item) ; end procedure Push ; ------------------------------------------------------------ -- Array of Tagged Scoreboards impure function Push ( ------------------------------------------------------------ constant Index : in integer ; constant Tag : in string ; constant Item : in ExpectedType ) return ExpectedType is begin if LocalOutOfRange(Index, "Push") then return Item ; -- error reporting in LocalOutOfRange end if ; LocalPush(Index, Tag, Item) ; return Item ; end function Push ; ------------------------------------------------------------ -- Array of Scoreboards, no tag impure function Push ( ------------------------------------------------------------ constant Index : in integer ; constant Item : in ExpectedType ) return ExpectedType is begin if LocalOutOfRange(Index, "Push") then return Item ; -- error reporting in LocalOutOfRange end if ; LocalPush(Index, "", Item) ; return Item ; end function Push ; ------------------------------------------------------------ -- Simple Tagged Scoreboard impure function Push ( ------------------------------------------------------------ constant Tag : in string ; constant Item : in ExpectedType ) return ExpectedType is begin LocalPush(FirstIndexVar, Tag, Item) ; return Item ; end function Push ; ------------------------------------------------------------ -- Simple Scoreboard, no tag impure function Push (Item : ExpectedType) return ExpectedType is ------------------------------------------------------------ begin LocalPush(FirstIndexVar, "", Item) ; return Item ; end function Push ; ------------------------------------------------------------ -- Local Only -- Pops highest element matching Tag into PopListPointer(Index) procedure LocalPop (Index : integer ; Tag : string; Name : string) is ------------------------------------------------------------ variable CurPtr : ListPointerType ; begin if LocalOutOfRange(Index, "Pop/Check") then return ; -- error reporting in LocalOutOfRange end if ; if HeadPointer(Index) = NULL then ErrCntVar(Index) := ErrCntVar(Index) + 1 ; Alert(AlertLogIDVar(Index), GetName & " Empty during " & Name, FAILURE) ; return ; end if ; -- deallocate previous pointer if PopListPointer(Index) /= NULL then deallocate(PopListPointer(Index).TagPtr) ; deallocate(PopListPointer(Index).ExpectedPtr) ; deallocate(PopListPointer(Index)) ; end if ; -- Descend to find Tag field and extract CurPtr := HeadPointer(Index) ; if CurPtr.TagPtr.all = Tag then -- Non-tagged scoreboards find this one. PopListPointer(Index) := HeadPointer(Index) ; HeadPointer(Index) := HeadPointer(Index).NextPtr ; else loop if CurPtr.NextPtr = NULL then ErrCntVar(Index) := ErrCntVar(Index) + 1 ; Alert(AlertLogIDVar(Index), GetName & " Pop/Check (" & Name & "), tag: " & Tag & " not found", FAILURE) ; exit ; elsif CurPtr.NextPtr.TagPtr.all = Tag then PopListPointer(Index) := CurPtr.NextPtr ; CurPtr.NextPtr := CurPtr.NextPtr.NextPtr ; if CurPtr.NextPtr = NULL then TailPointer(Index) := CurPtr ; end if ; exit ; else CurPtr := CurPtr.NextPtr ; end if ; end loop ; end if ; end procedure LocalPop ; ------------------------------------------------------------ -- Local Only procedure LocalCheck ( ------------------------------------------------------------ constant Index : in integer ; constant ActualData : in ActualType ) is variable ExpectedPtr : ExpectedPointerType ; variable CurrentItem : integer ; variable WriteBuf : line ; variable FoundError : boolean ; begin CheckCountVar(Index) := CheckCountVar(Index) + 1 ; ExpectedPtr := PopListPointer(Index).ExpectedPtr ; CurrentItem := PopListPointer(Index).ItemNumber ; if not Match(ActualData, ExpectedPtr.all) then ErrCntVar(Index) := ErrCntVar(Index) + 1 ; FoundError := TRUE ; else FoundError := FALSE ; end if ; IncAffirmCount ; -- if FoundError or ReportModeVar = REPORT_ALL then if FoundError or GetLogEnable(AlertLogIDVar(Index), PASSED) then if AlertLogIDVar(Index) = OSVVM_SCOREBOARD_ALERTLOG_ID then write(WriteBuf, GetName(DefaultName => "Scoreboard")) ; else write(WriteBuf, GetName(DefaultName => "")) ; end if ; if ArrayLengthVar > 1 then write(WriteBuf, " (" & to_string(Index) & ") ") ; end if ; write(WriteBuf, " Received: " & actual_to_string(ActualData)) ; if FoundError then write(WriteBuf, " Expected: " & expected_to_string(ExpectedPtr.all)) ; end if ; if PopListPointer(Index).TagPtr.all /= "" then write(WriteBuf, " Tag: " & PopListPointer(Index).TagPtr.all) ; end if; write(WriteBuf, " Item Number: " & to_string(CurrentItem)) ; if FoundError then if ReportModeVar /= REPORT_NONE then -- Affirmation Failed Alert(AlertLogIDVar(Index), WriteBuf.all, ERROR) ; else -- Affirmation Failed, but silent, unless in DEBUG mode Log(AlertLogIDVar(Index), "ERROR " & WriteBuf.all, DEBUG) ; IncAlertCount(AlertLogIDVar(Index)) ; -- Silent Counted Alert end if ; else -- Affirmation passed Log(AlertLogIDVar(Index), WriteBuf.all, PASSED) ; end if ; deallocate(WriteBuf) ; end if ; end procedure LocalCheck ; ------------------------------------------------------------ -- Array of Tagged Scoreboards procedure Check ( ------------------------------------------------------------ constant Index : in integer ; constant Tag : in string ; constant ActualData : in ActualType ) is begin if LocalOutOfRange(Index, "Check") then return ; -- error reporting in LocalOutOfRange end if ; LocalPop(Index, Tag, "Check") ; LocalCheck(Index, ActualData) ; end procedure Check ; ------------------------------------------------------------ -- Array of Scoreboards, no tag procedure Check ( ------------------------------------------------------------ constant Index : in integer ; constant ActualData : in ActualType ) is begin if LocalOutOfRange(Index, "Check") then return ; -- error reporting in LocalOutOfRange end if ; LocalPop(Index, "", "Check") ; LocalCheck(Index, ActualData) ; end procedure Check ; ------------------------------------------------------------ -- Simple Tagged Scoreboard procedure Check ( ------------------------------------------------------------ constant Tag : in string ; constant ActualData : in ActualType ) is begin LocalPop(FirstIndexVar, Tag, "Check") ; LocalCheck(FirstIndexVar, ActualData) ; end procedure Check ; ------------------------------------------------------------ -- Simple Scoreboard, no tag procedure Check (ActualData : ActualType) is ------------------------------------------------------------ begin LocalPop(FirstIndexVar, "", "Check") ; LocalCheck(FirstIndexVar, ActualData) ; end procedure Check ; ------------------------------------------------------------ -- Array of Tagged Scoreboards procedure Pop ( ------------------------------------------------------------ constant Index : in integer ; constant Tag : in string ; variable Item : out ExpectedType ) is begin if LocalOutOfRange(Index, "Pop") then return ; -- error reporting in LocalOutOfRange end if ; LocalPop(Index, Tag, "Pop") ; Item := PopListPointer(Index).ExpectedPtr.all ; end procedure Pop ; ------------------------------------------------------------ -- Array of Scoreboards, no tag procedure Pop ( ------------------------------------------------------------ constant Index : in integer ; variable Item : out ExpectedType ) is begin if LocalOutOfRange(Index, "Pop") then return ; -- error reporting in LocalOutOfRange end if ; LocalPop(Index, "", "Pop") ; Item := PopListPointer(Index).ExpectedPtr.all ; end procedure Pop ; ------------------------------------------------------------ -- Simple Tagged Scoreboard procedure Pop ( ------------------------------------------------------------ constant Tag : in string ; variable Item : out ExpectedType ) is begin LocalPop(FirstIndexVar, Tag, "Pop") ; Item := PopListPointer(FirstIndexVar).ExpectedPtr.all ; end procedure Pop ; ------------------------------------------------------------ -- Simple Scoreboard, no tag procedure Pop (variable Item : out ExpectedType) is ------------------------------------------------------------ begin LocalPop(FirstIndexVar, "", "Pop") ; Item := PopListPointer(FirstIndexVar).ExpectedPtr.all ; end procedure Pop ; ------------------------------------------------------------ -- Array of Tagged Scoreboards impure function Pop ( ------------------------------------------------------------ constant Index : in integer ; constant Tag : in string ) return ExpectedType is begin if LocalOutOfRange(Index, "Pop") then -- error reporting in LocalOutOfRange return PopListPointer(FirstIndexVar).ExpectedPtr.all ; end if ; LocalPop(Index, Tag, "Pop") ; return PopListPointer(Index).ExpectedPtr.all ; end function Pop ; ------------------------------------------------------------ -- Array of Scoreboards, no tag impure function Pop (Index : integer) return ExpectedType is ------------------------------------------------------------ begin if LocalOutOfRange(Index, "Pop") then -- error reporting in LocalOutOfRange return PopListPointer(FirstIndexVar).ExpectedPtr.all ; end if ; LocalPop(Index, "", "Pop") ; return PopListPointer(Index).ExpectedPtr.all ; end function Pop ; ------------------------------------------------------------ -- Simple Tagged Scoreboard impure function Pop ( ------------------------------------------------------------ constant Tag : in string ) return ExpectedType is begin LocalPop(FirstIndexVar, Tag, "Pop") ; return PopListPointer(FirstIndexVar).ExpectedPtr.all ; end function Pop ; ------------------------------------------------------------ -- Simple Scoreboard, no tag impure function Pop return ExpectedType is ------------------------------------------------------------ begin LocalPop(FirstIndexVar, "", "Pop") ; return PopListPointer(FirstIndexVar).ExpectedPtr.all ; end function Pop ; ------------------------------------------------------------ -- Array of Tagged Scoreboards impure function Empty (Index : integer; Tag : String) return boolean is ------------------------------------------------------------ variable CurPtr : ListPointerType ; begin CurPtr := HeadPointer(Index) ; while CurPtr /= NULL loop if CurPtr.TagPtr.all = Tag then return FALSE ; -- Found Tag end if ; CurPtr := CurPtr.NextPtr ; end loop ; return TRUE ; -- Tag not found end function Empty ; ------------------------------------------------------------ -- Array of Scoreboards, no tag impure function Empty (Index : integer) return boolean is ------------------------------------------------------------ begin return HeadPointer(Index) = NULL ; end function Empty ; ------------------------------------------------------------ -- Simple Tagged Scoreboard impure function Empty (Tag : String) return boolean is ------------------------------------------------------------ variable CurPtr : ListPointerType ; begin return Empty(FirstIndexVar, Tag) ; end function Empty ; ------------------------------------------------------------ -- Simple Scoreboard, no tag impure function Empty return boolean is ------------------------------------------------------------ begin return HeadPointer(FirstIndexVar) = NULL ; end function Empty ; ------------------------------------------------------------ procedure CheckFinish ( ------------------------------------------------------------ Index : integer ; FinishCheckCount : integer ; FinishEmpty : boolean ) is variable EmptyError : Boolean ; variable WriteBuf : line ; begin if AlertLogIDVar(Index) = OSVVM_SCOREBOARD_ALERTLOG_ID then write(WriteBuf, GetName(DefaultName => "Scoreboard")) ; else write(WriteBuf, GetName(DefaultName => "")) ; end if ; if ArrayLengthVar > 1 then if WriteBuf.all /= "" then swrite(WriteBuf, " ") ; end if ; write(WriteBuf, "Index(" & to_string(Index) & "), ") ; else if WriteBuf.all /= "" then swrite(WriteBuf, ", ") ; end if ; end if ; if FinishEmpty then AffirmIf(AlertLogIDVar(Index), Empty(Index), WriteBuf.all & "Checking Empty: " & to_string(Empty(Index)) & " FinishEmpty: " & to_string(FinishEmpty)) ; if not Empty(Index) then -- Increment internal count on FinishEmpty Error ErrCntVar(Index) := ErrCntVar(Index) + 1 ; end if ; end if ; AffirmIf(AlertLogIDVar(Index), CheckCountVar(Index) >= FinishCheckCount, WriteBuf.all & "Checking CheckCount: " & to_string(CheckCountVar(Index)) & " >= Expected: " & to_string(FinishCheckCount)) ; if not (CheckCountVar(Index) >= FinishCheckCount) then -- Increment internal count on FinishCheckCount Error ErrCntVar(Index) := ErrCntVar(Index) + 1 ; end if ; deallocate(WriteBuf) ; end procedure CheckFinish ; ------------------------------------------------------------ procedure CheckFinish ( ------------------------------------------------------------ FinishCheckCount : integer ; FinishEmpty : boolean ) is begin for AlertLogID in AlertLogIDVar'range loop CheckFinish(AlertLogID, FinishCheckCount, FinishEmpty) ; end loop ; end procedure CheckFinish ; ------------------------------------------------------------ impure function GetErrorCount (Index : integer) return integer is ------------------------------------------------------------ begin return ErrCntVar(Index) ; end function GetErrorCount ; ------------------------------------------------------------ impure function GetErrorCount return integer is ------------------------------------------------------------ variable TotalErrorCount : integer := 0 ; begin for Index in AlertLogIDVar'range loop TotalErrorCount := TotalErrorCount + GetErrorCount(Index) ; end loop ; return TotalErrorCount ; end function GetErrorCount ; ------------------------------------------------------------ procedure IncErrorCount (Index : integer) is ------------------------------------------------------------ begin ErrCntVar(Index) := ErrCntVar(Index) + 1 ; IncAlertCount(AlertLogIDVar(Index), ERROR) ; end IncErrorCount ; ------------------------------------------------------------ procedure IncErrorCount is ------------------------------------------------------------ begin ErrCntVar(FirstIndexVar) := ErrCntVar(FirstIndexVar) + 1 ; IncAlertCount(AlertLogIDVar(FirstIndexVar), ERROR) ; end IncErrorCount ; ------------------------------------------------------------ procedure SetErrorCountZero (Index : integer) is ------------------------------------------------------------ begin ErrCntVar(Index) := 0; end procedure SetErrorCountZero ; ------------------------------------------------------------ procedure SetErrorCountZero is ------------------------------------------------------------ begin ErrCntVar(FirstIndexVar) := 0 ; end procedure SetErrorCountZero ; ------------------------------------------------------------ impure function GetItemCount (Index : integer) return integer is ------------------------------------------------------------ begin return ItemNumberVar(Index) ; end function GetItemCount ; ------------------------------------------------------------ impure function GetItemCount return integer is ------------------------------------------------------------ begin return ItemNumberVar(FirstIndexVar) ; end function GetItemCount ; ------------------------------------------------------------ impure function GetCheckCount (Index : integer) return integer is ------------------------------------------------------------ begin return CheckCountVar(Index) ; end function GetCheckCount ; ------------------------------------------------------------ impure function GetCheckCount return integer is ------------------------------------------------------------ begin return CheckCountVar(FirstIndexVar) ; end function GetCheckCount ; ------------------------------------------------------------ impure function GetDropCount (Index : integer) return integer is ------------------------------------------------------------ begin return DropCountVar(Index) ; end function GetDropCount ; ------------------------------------------------------------ impure function GetDropCount return integer is ------------------------------------------------------------ begin return DropCountVar(FirstIndexVar) ; end function GetDropCount ; ------------------------------------------------------------ procedure SetFinish ( ------------------------------------------------------------ Index : integer ; FCheckCount : integer ; FEmpty : boolean := TRUE; FStatus : boolean := TRUE ) is begin Alert(AlertLogIDVar(Index), "OSVVM.ScoreboardGenericPkg.SetFinish: Deprecated and removed. See CheckFinish", ERROR) ; end procedure SetFinish ; ------------------------------------------------------------ procedure SetFinish ( ------------------------------------------------------------ FCheckCount : integer ; FEmpty : boolean := TRUE; FStatus : boolean := TRUE ) is begin SetFinish(FirstIndexVar, FCheckCount, FEmpty, FStatus) ; end procedure SetFinish ; ------------------------------------------------------------ -- Array of Tagged Scoreboards -- Find Element with Matching Tag and ActualData -- Returns integer'left if no match found impure function Find ( ------------------------------------------------------------ constant Index : in integer ; constant Tag : in string; constant ActualData : in ActualType ) return integer is variable CurPtr : ListPointerType ; begin if LocalOutOfRange(Index, "Find") then return integer'left ; -- error reporting in LocalOutOfRange end if ; CurPtr := HeadPointer(Index) ; loop if CurPtr = NULL then -- Failed to find it ErrCntVar(Index) := ErrCntVar(Index) + 1 ; if Tag /= "" then Alert(AlertLogIDVar(Index), GetName & " Did not find Tag: " & Tag & " and Actual Data: " & actual_to_string(ActualData), FAILURE ) ; else Alert(AlertLogIDVar(Index), GetName & " Did not find Actual Data: " & actual_to_string(ActualData), FAILURE ) ; end if ; return integer'left ; elsif CurPtr.TagPtr.all = Tag and Match(ActualData, CurPtr.ExpectedPtr.all) then -- Found it. Return Index. return CurPtr.ItemNumber ; else -- Descend CurPtr := CurPtr.NextPtr ; end if ; end loop ; end function Find ; ------------------------------------------------------------ -- Array of Simple Scoreboards -- Find Element with Matching ActualData impure function Find ( ------------------------------------------------------------ constant Index : in integer ; constant ActualData : in ActualType ) return integer is begin return Find(Index, "", ActualData) ; end function Find ; ------------------------------------------------------------ -- Tagged Scoreboard -- Find Element with Matching ActualData impure function Find ( ------------------------------------------------------------ constant Tag : in string; constant ActualData : in ActualType ) return integer is begin return Find(FirstIndexVar, Tag, ActualData) ; end function Find ; ------------------------------------------------------------ -- Simple Scoreboard -- Find Element with Matching ActualData impure function Find ( ------------------------------------------------------------ constant ActualData : in ActualType ) return integer is begin return Find(FirstIndexVar, "", ActualData) ; end function Find ; ------------------------------------------------------------ -- Array of Tagged Scoreboards -- Flush Remove elements with tag whose itemNumber is <= ItemNumber parameter procedure Flush ( ------------------------------------------------------------ constant Index : in integer ; constant Tag : in string ; constant ItemNumber : in integer ) is variable CurPtr, RemovePtr, LastPtr : ListPointerType ; begin if LocalOutOfRange(Index, "Find") then return ; -- error reporting in LocalOutOfRange end if ; CurPtr := HeadPointer(Index) ; LastPtr := NULL ; loop if CurPtr = NULL then -- Done return ; elsif CurPtr.TagPtr.all = Tag then if ItemNumber >= CurPtr.ItemNumber then -- remove it RemovePtr := CurPtr ; if CurPtr = TailPointer(Index) then TailPointer(Index) := LastPtr ; end if ; if CurPtr = HeadPointer(Index) then HeadPointer(Index) := CurPtr.NextPtr ; else -- if LastPtr /= NULL then LastPtr.NextPtr := LastPtr.NextPtr.NextPtr ; end if ; CurPtr := CurPtr.NextPtr ; -- LastPtr := LastPtr ; -- no change DropCountVar(Index) := DropCountVar(Index) + 1 ; deallocate(RemovePtr.TagPtr) ; deallocate(RemovePtr.ExpectedPtr) ; deallocate(RemovePtr) ; else -- Done return ; end if ; else -- Descend LastPtr := CurPtr ; CurPtr := CurPtr.NextPtr ; end if ; end loop ; end procedure Flush ; ------------------------------------------------------------ -- Tagged Scoreboard -- Flush Remove elements with tag whose itemNumber is <= ItemNumber parameter procedure Flush ( ------------------------------------------------------------ constant Tag : in string ; constant ItemNumber : in integer ) is begin Flush(FirstIndexVar, Tag, ItemNumber) ; end procedure Flush ; ------------------------------------------------------------ -- Array of Simple Scoreboards -- Flush - Remove Elements upto and including the one with ItemNumber procedure Flush ( ------------------------------------------------------------ constant Index : in integer ; constant ItemNumber : in integer ) is variable CurPtr : ListPointerType ; begin if LocalOutOfRange(Index, "Find") then return ; -- error reporting in LocalOutOfRange end if ; CurPtr := HeadPointer(Index) ; loop if CurPtr = NULL then -- Done return ; elsif ItemNumber >= CurPtr.ItemNumber then -- Descend, Check Tail, Deallocate HeadPointer(Index) := HeadPointer(Index).NextPtr ; if CurPtr = TailPointer(Index) then TailPointer(Index) := NULL ; end if ; DropCountVar(Index) := DropCountVar(Index) + 1 ; deallocate(CurPtr.TagPtr) ; deallocate(CurPtr.ExpectedPtr) ; deallocate(CurPtr) ; CurPtr := HeadPointer(Index) ; else -- Done return ; end if ; end loop ; end procedure Flush ; ------------------------------------------------------------ -- Simple Scoreboard -- Flush - Remove Elements upto and including the one with ItemNumber procedure Flush ( ------------------------------------------------------------ constant ItemNumber : in integer ) is begin Flush(FirstIndexVar, ItemNumber) ; end procedure Flush ; ------------------------------------------------------------ ------------------------------------------------------------ -- Remaining Deprecated. ------------------------------------------------------------ ------------------------------------------------------------ ------------------------------------------------------------ -- Deprecated. Maintained for backward compatibility. -- Use TranscriptPkg.TranscriptOpen procedure FileOpen (FileName : string; OpenKind : File_Open_Kind ) is ------------------------------------------------------------ begin -- WriteFileInit := TRUE ; -- file_open( WriteFile , FileName , OpenKind ); TranscriptOpen(FileName, OpenKind) ; end procedure FileOpen ; ------------------------------------------------------------ -- Deprecated. Maintained for backward compatibility. procedure PutExpectedData (ExpectedData : ExpectedType) is ------------------------------------------------------------ begin Push(ExpectedData) ; end procedure PutExpectedData ; ------------------------------------------------------------ -- Deprecated. Maintained for backward compatibility. procedure CheckActualData (ActualData : ActualType) is ------------------------------------------------------------ begin Check(ActualData) ; end procedure CheckActualData ; ------------------------------------------------------------ -- Deprecated. Maintained for backward compatibility. impure function GetItemNumber return integer is ------------------------------------------------------------ begin return GetItemCount(FirstIndexVar) ; end GetItemNumber ; ------------------------------------------------------------ -- Deprecated. Maintained for backward compatibility. procedure SetMessage (MessageIn : String) is ------------------------------------------------------------ begin -- deallocate(Message) ; -- Message := new string'(MessageIn) ; SetName(MessageIn) ; end procedure SetMessage ; ------------------------------------------------------------ -- Deprecated. Maintained for backward compatibility. impure function GetMessage return string is ------------------------------------------------------------ begin -- return Message.all ; return GetName("Scoreboard") ; end function GetMessage ; end protected body ScoreBoardPType ; end ScoreboardGenericPkg ;