|
|
- --
- -- 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 ;
|