From cde14ceacf570a5ec070a0618573bb53def7ddcc Mon Sep 17 00:00:00 2001 From: Patrick Lehmann Date: Mon, 7 Dec 2015 14:24:07 +0100 Subject: [PATCH] Updated files to OSVVM release 2014.01. --- packages/CoveragePkg.vhd => CoveragePkg.vhd | 771 +++++++++------ CoveragePkg_release_notes.pdf | Bin 0 -> 18613 bytes CoveragePkg_user_guide.pdf | Bin 0 -> 148389 bytes MessagePkg.vhd | 204 ++++ README.md | 26 +- .../RandomBasePkg.vhd => RandomBasePkg.vhd | 0 packages/RandomPkg.vhd => RandomPkg.vhd | 915 +++++++++++++----- RandomPkg_user_guide.pdf | Bin 0 -> 51280 bytes ...SortListPkg_int.vhd => SortListPkg_int.vhd | 63 +- doc/CoveragePkg_release_notes.pdf | Bin 16962 -> 0 bytes doc/CoveragePkg_user_guide.pdf | Bin 141312 -> 0 bytes doc/RandomPkg_user_guide.pdf | Bin 44611 -> 0 bytes 12 files changed, 1417 insertions(+), 562 deletions(-) rename packages/CoveragePkg.vhd => CoveragePkg.vhd (87%) create mode 100644 CoveragePkg_release_notes.pdf create mode 100644 CoveragePkg_user_guide.pdf create mode 100644 MessagePkg.vhd rename packages/RandomBasePkg.vhd => RandomBasePkg.vhd (100%) rename packages/RandomPkg.vhd => RandomPkg.vhd (52%) create mode 100644 RandomPkg_user_guide.pdf rename packages/SortListPkg_int.vhd => SortListPkg_int.vhd (85%) delete mode 100644 doc/CoveragePkg_release_notes.pdf delete mode 100644 doc/CoveragePkg_user_guide.pdf delete mode 100644 doc/RandomPkg_user_guide.pdf diff --git a/packages/CoveragePkg.vhd b/CoveragePkg.vhd similarity index 87% rename from packages/CoveragePkg.vhd rename to CoveragePkg.vhd index 6a8c848..f54dbd0 100644 --- a/packages/CoveragePkg.vhd +++ b/CoveragePkg.vhd @@ -1,7 +1,7 @@ -- -- File Name: CoveragePkg.vhd -- Design Unit Name: CoveragePkg --- Revision: STANDARD VERSION, revision 2013.05 +-- Revision: STANDARD VERSION, revision 2014.01 -- -- Maintainer: Jim Lewis email: jim@synthworks.com -- Contributor(s): @@ -22,75 +22,63 @@ -- Latest standard version available at: -- http://www.SynthWorks.com/downloads -- --- Revision History: +-- Revision History: See also CoveragePkg_release_notes.pdf -- Date Version Description -- 06/2010: 0.1 Initial revision -- 09/2010 Release in SynthWorks' VHDL Testbenches and Verification classes -- 02/2011: 1.0 Requires VHDL-2008 types integer_vector and boolean_vecctor -- Changed CoverBinType to facilitage long term support of cross coverage -- 02/2011: 1.1 Added GetMinCov, GetMaxCov, CountCovHoles, GetCovHole --- 04/2011: 2.0 Added CovPType --- 06/2011: 2.1 Removed Signal Based Coverage --- 07/2011: 2.2 Added Weight, AtLeast, randomization with percentage thresholds +-- 04/2011: 2.0 Added protected type based data structure: CovPType +-- 06/2011: 2.1 Removed signal based coverage modeling +-- 07/2011: 2.2 Added randomization with coverage goals (AtLeast), weight, and percentage thresholds +-- Revised RandCovPoint, RandCovBinVal, AddBins, AddCross, GenBin, Added SetWeightMode -- Randomization with weights/weight modes -- Cleaned up parameter naming --- 11/2011: 2.2a Made ALL_RANGE and constants in ZERO_BIN and ONE_BIN have a 1 index +-- 11/2011: 2.2a Changed constants ALL_RANGE, ZERO_BIN, and ONE_BIN to have a 1 index -- rather than 0 to match the range of BinVal -- 12/2011: 2.2b Fixed minor inconsistencies on interface declarations. --- Library RandomPkg is assumed to be in the same library as CoveragePkg +-- Package RandomPkg is assumed to be in the same library as CoveragePkg -- 01/2012: 2.3 Added Function GetBin from Jerry K. -- Made write for RangeArrayType visible -- 01/2012: 2.4 --- Added bin merging and deletion for overlapping bins +-- Revised AddBins and AddCross to handle merging and deletion for overlapping bins +-- Note merging is an experimental feature. -- Renamed RandCovHole to RandCovBinVal - maintained old version calls new -- Renamed GetCovHole to GetHoleBinVal - maintained old version calls new -- 04/2013: 2013.04 --- Added control for merging and deletion. --- Note: Merging will change in a future revision. --- Merging is off by default. Use function SetMerging to turn it on. +-- Revised AddBins and AddCross s.t. bin merging is off by default. +-- Added SetMerging to enable/disable merging. +-- Note: Merging is an experimental feature and still evolving. +-- Revised AddBins and AddCross to check for changes in BinVal size (different size bin). -- Added RandCovPoint for integer. --- Thresholding is now enabled or disabled by an internal variable. --- Enable or disable using SetThresholding. Off by default. --- Revised RandCovPoint and RandCovBinVal to use thresholding. --- Thresholding is also turned on by SetCovThreshold(Percent). --- Added coverage target multiplier as a multiplier to all AtLeast values. --- Multiplier is CovTarget/100. It is 100% by default. --- Change it with SetCovTarget. Removed the default value from --- the PercentCov parameter of all methods (RandCovPoint, --- RandCovBinVal, IsCovered, CountCovHoles, GetHoleBinVal, and --- WriteCovHoles). Replaced the default value with an --- overloaded function that uses coverage target instead. --- Added ILLEGAL_FAILURE mode to illegal bin control. --- When set, if an illegal bin is encountered, a severity --- failure will be generated. +-- Added SetThresholding and SetCovThreshold(Percent) to enable/disable(default) thresholding. +-- Revised RandCovPoint and RandCovBinVal to use new mechanism. +-- Added SetCovTarget to increase/decrease coverage goals for longer/shorter simulation runs. +-- Made CovTarget the default percentage goal (via overloading) for methods RandCovPoint, +-- RandCovBinVal, IsCovered, CountCovHoles, GetHoleBinVal, and WriteCovHoles +-- Revised SetIllegalMode and ICover to support ILLEGAL_FAILURE (severity FAILURE on illegal bin). -- Added manual bin iteration support. -- BinIndex: GetNumBins, GetMinIndex, GetMaxIndex -- BinVal: GetBinVal(BinIndex), GetMinBinVal, GetMaxBinVal -- Point: GetPoint (BinIndex), GetMinPoint, GetMaxPoint --- Added FileOpenWriteBin and FileCloseWriteBin --- Opens default file for WriteBin, WriteCovHoles, and DumpBin +-- Added GetCov to return the current percent done of the entire coverage model. +-- Added FileOpenWriteBin and FileCloseWriteBin to specify default file for WriteBin, WriteCovHoles, and DumpBin -- Added CompareBins to facilitate comparing two coverage models. --- Added error checking to methods. --- Uninitialized model checks to WriteBin, WriteCovHoles, and WriteCovDb. --- Check AddBins or AddCross do not change the current BinVal size. +-- Revised WriteBin, WriteCovHoles, and WriteCovDb to check for uninitialized model. +-- Revised WriteBins and WriteCovHoles to only print weight if the selected WeightMode uses the weight. -- Added IsInitialized to check if a coverage model is initialized. -- Added GetBinInfo and GetBinValLength to get bin information --- WriteBins and WriteCovHoles only print weight if the selected WeightMode uses the weight. --- Changed WriteCovDb default for File_Open_Kind to WRITE_MODE --- Generally only one WriteCovDb is needed per coverage model. --- Updated WriteCovDb and ReadCovDb for new internal control/state variables --- in the order of ThresholdingEnable, CovTarget, and MergingEnable. --- To manually edit old file, add FALSE, 100.0, FALSE to end of first line --- Removed IgnoreBin with AtLeast and Weight parameters. --- These are zero for ignore bins. --- Working on consistency of naming. The following have changed: +-- Changed WriteCovDb default for File_Open_Kind to WRITE_MODE +-- Revised WriteCovDb and ReadCovDb for new internal control/state variables +-- Removed IgnoreBin with AtLeast and Weight parameters. These are zero for ignore bins. +-- Revised method naming for consistency. The following have changed: -- New Name Old Name Why -- CovBinErrCnt GetErrorCount Consistency between packages -- GetMinCount GetMinCov[return integer] Naming clarity -- GetMaxCount GetMaxCov[return integer] Naming clarity -- SetName SetItemName SetName now does multi-line messages --- --- The following methods with an AtLeast parameter are deprecated, +-- Deprecated usage of the AtLeast parameter (integer) with the following methods: -- RandCovPoint, RandCovBinVal, IsCovered, CountCovHoles, -- GetHoleBinVal, and WriteCovHoles. -- 5/2013 2013.05 @@ -98,8 +86,16 @@ -- Removed extra variable declaration in functions GetHoleBinval, -- RandCovBinVal, RandCovHole, GetHoleBinVal -- Using work.RandomPkg.NULL_RANGE_TYPE to remove NULL range warnings --- --- +-- 1/2014 2014.01 +-- Revised ReadCovDb to support merging of coverage models +-- Revised RandCovPoint and RandCovBinVal to log the bin index in the LastIndex variable +-- Revised ICover to look in bin referenced by LastIndex first +-- Added GetLastIndex and GetLastBinVal +-- Revised AddBins and AddCross bin merging to allow arbitrary CountBin overlap (facilitated by LastIndex) +-- Note: Merging is an experimental feature and still evolving. +-- Split SetName into SetMessage (headers) and SetName (printing illegal bins) +-- Added methods GetItemCount and GetTotalCovGoal +-- Revised GetCov to use CovTarget and overloaded to use a PercentCov parameter. -- -- Development Notes: -- The coverage procedures are named ICover to avoid conflicts with @@ -148,8 +144,9 @@ use std.textio.all ; -- library ieee_proposed ; -- remove with VHDL-2008 -- use ieee_proposed.standard_additions.all ; -- remove with VHDL-2008 -use work.RandomPkg.all ; use work.RandomBasePkg.all ; +use work.RandomPkg.all ; +use work.MessagePkg.all ; package CoveragePkg is @@ -164,7 +161,7 @@ package CoveragePkg is constant ALL_RANGE : RangeArrayType := (1=>(Integer'left, Integer'right)) ; procedure write ( file f : text ; BinVal : RangeArrayType ) ; - + procedure write ( variable buf : inout line ; constant BinVal : in RangeArrayType) ; -- CovBinBaseType.action values. -- Note that coverage counting depends on these values @@ -314,7 +311,9 @@ package CoveragePkg is procedure SetIllegalMode (A : IllegalModeType) ; procedure SetWeightMode (A : WeightModeType; Scale : real := 1.0) ; procedure SetName (NameIn : String) ; + procedure SetMessage (MessageIn : String) ; procedure DeallocateName ; -- clear name + procedure DeallocateMessage ; -- clear message procedure SetThresholding(A : boolean := TRUE ) ; -- 2.5 procedure SetCovThreshold (Percent : real) ; procedure SetCovTarget (Percent : real) ; -- 2.5 @@ -364,6 +363,7 @@ package CoveragePkg is procedure Deallocate ; + procedure ICoverLast ; procedure ICover( CovPoint : integer) ; procedure ICover( CovPoint : integer_vector) ; @@ -381,16 +381,22 @@ package CoveragePkg is impure function CountCovHoles return integer ; impure function IsCovered return boolean ; impure function IsCovered ( PercentCov : real ) return boolean ; + impure function GetCov ( PercentCov : real ) return real ; impure function GetCov return real ; -- PercentCov of entire model/all bins + impure function GetItemCount return integer ; + impure function GetTotalCovGoal ( PercentCov : real ) return integer ; + impure function GetTotalCovGoal return integer ; + impure function GetLastIndex return integer ; -- Return BinVal impure function GetBinVal ( BinIndex : integer ) return RangeArrayType ; + impure function GetLastBinVal return RangeArrayType ; impure function RandCovBinVal ( PercentCov : real ) return RangeArrayType ; impure function RandCovBinVal return RangeArrayType ; impure function GetMinBinVal return RangeArrayType ; impure function GetMaxBinVal return RangeArrayType ; - impure function GetHoleBinVal ( ReqHoleNum : integer ; CovTargetPercent : real ) return RangeArrayType ; - impure function GetHoleBinVal ( CovTargetPercent : real ) return RangeArrayType ; + impure function GetHoleBinVal ( ReqHoleNum : integer ; PercentCov : real ) return RangeArrayType ; + impure function GetHoleBinVal ( PercentCov : real ) return RangeArrayType ; impure function GetHoleBinVal ( ReqHoleNum : integer := 1 ) return RangeArrayType ; -- Return Points @@ -430,7 +436,7 @@ package CoveragePkg is procedure WriteCovHoles ( FileName : string; PercentCov : real ; OpenKind : File_Open_Kind := APPEND_MODE ) ; procedure DumpBin ; -- Development only - procedure ReadCovDb (FileName : string) ; + procedure ReadCovDb (FileName : string; Merge : boolean := FALSE) ; procedure WriteCovDb (FileName : string; OpenKind : File_Open_Kind := WRITE_MODE ) ; impure function GetErrorCount return integer ; @@ -727,16 +733,19 @@ package body CoveragePkg is ------------------------------------------------------------ - procedure write ( file f : text ; CovPoint : integer_vector ) is + procedure write ( + variable buf : inout line ; + CovPoint : integer_vector + ) is -- package local. called by ICover ------------------------------------------------------------ alias iCovPoint : integer_vector(1 to CovPoint'length) is CovPoint ; begin - write(f, "(" & integer'image(iCovPoint(1)) ) ; + write(buf, "(" & integer'image(iCovPoint(1)) ) ; for i in 2 to iCovPoint'right loop - write(f, "," & integer'image(iCovPoint(i)) ) ; + write(buf, "," & integer'image(iCovPoint(i)) ) ; end loop ; - write(f, ")") ; + swrite(buf, ")") ; end procedure write ; @@ -758,10 +767,49 @@ package body CoveragePkg is end procedure write ; + ------------------------------------------------------------ + procedure write ( + -- called by WriteBin and WriteCovHoles + ------------------------------------------------------------ + variable buf : inout line ; + constant BinVal : in RangeArrayType + ) is + ------------------------------------------------------------ + begin + for i in BinVal'range loop + if BinVal(i).min = BinVal(i).max then + write(buf, "(" & integer'image(BinVal(i).min) & ") " ) ; + elsif (BinVal(i).min = integer'left) and (BinVal(i).max = integer'right) then + swrite(buf, "(ALL) " ) ; + else + write(buf, "(" & integer'image(BinVal(i).min) & " to " & + integer'image(BinVal(i).max) & ") " ) ; + end if ; + end loop ; + end procedure write ; + + + ------------------------------------------------------------ + procedure WriteBinVal ( + -- package local for now + ------------------------------------------------------------ + variable buf : inout line ; + constant BinVal : in RangeArrayType + ) is + begin + for i in BinVal'range loop + write(buf, BinVal(i).min) ; + write(buf, ' ') ; + write(buf, BinVal(i).max) ; + write(buf, ' ') ; + end loop ; + end procedure WriteBinVal ; + + ------------------------------------------------------------ -- package local function failed (InValid : boolean ; Message : string := " ") return boolean is - -- Move to TbUtilPkg and make visible? + -- Move to TextUtilPkg and make visible? ------------------------------------------------------------ begin if InValid then @@ -833,22 +881,6 @@ package body CoveragePkg is end procedure read ; - ------------------------------------------------------------ - procedure write ( - -- package local for now - ------------------------------------------------------------ - variable buf : inout line ; - constant BinVal : in RangeArrayType - ) is - begin - for i in BinVal'range loop - write(buf, BinVal(i).min) ; - write(buf, ' ') ; - write(buf, BinVal(i).max) ; - write(buf, ' ') ; - end loop ; - end procedure write ; - -- ------------------------------------------------------------ function BinLengths ( @@ -1122,13 +1154,8 @@ package body CoveragePkg is type CovPType is protected body -- Name Data Structure - type LineListType ; - type LineListPtrType is access LineListType ; - type LineListType is record - Name : Line ; - NextPtr : LineListPtrType ; - end record LineListType ; - + variable Message : MessagePType ; + -- CoverageBin Data Structures type RangeArrayPtrType is access RangeArrayType ; @@ -1148,13 +1175,13 @@ package body CoveragePkg is variable NumBins : integer := 0 ; variable BinValLength : integer := 1 ; variable OrderCount : integer := 0 ; -- for statistics + variable ItemCount : integer := 0 ; -- Count of randomizations + variable LastIndex : integer := 1 ; -- Index of last randomization -- Internal Modes and Names variable IllegalMode : IllegalModeType := ILLEGAL_ON ; variable WeightMode : WeightModeType := AT_LEAST ; variable WeightScale : real := 1.0 ; - variable NameHeadPtr : LineListPtrType := NULL ; - variable NameTailPtr : LineListPtrType := NULL ; variable ThresholdingEnable : boolean := FALSE ; -- thresholding disabled by default variable CovThreshold : real := 45.0 ; @@ -1218,12 +1245,14 @@ package body CoveragePkg is ------------------------------------------------------------ procedure SetWeightMode (A : WeightModeType; Scale : real := 1.0) is ------------------------------------------------------------ + variable buf : line ; begin WeightMode := A ; WeightScale := Scale ; if (WeightMode = REMAIN_EXP) and (WeightScale > 2.0) then - write(OUTPUT, "%%WARNING: WeightScale > 2.0 and large Counts can cause RandCovPoint to fail due to integer values out of range" & LF) ; + swrite(buf, "%%WARNING: WeightScale > 2.0 and large Counts can cause RandCovPoint to fail due to integer values out of range") ; + writeline(OUTPUT, buf) ; end if ; if (WeightScale < 1.0) and (WeightMode = REMAIN_WEIGHT or WeightMode = REMAIN_SCALED) then report "WeightScale must be > 1.0 when WeightMode = REMAIN_WEIGHT or WeightMode = REMAIN_SCALED" @@ -1239,77 +1268,62 @@ package body CoveragePkg is ------------------------------------------------------------ procedure SetName (NameIn : String) is ------------------------------------------------------------ - variable NamePtr : line ; begin - NamePtr := new string'(NameIn) ; - if NameHeadPtr = NULL then - NameHeadPtr := new LineListType'(NamePtr, NULL) ; - NameTailPtr := NameHeadPtr ; - if not RvSeedInit then - RV.InitSeed(NameIn) ; - RvSeedInit := TRUE ; - end if ; - else - NameTailPtr.NextPtr := new LineListType'(NamePtr, NULL) ; - NameTailPtr := NameTailPtr.NextPtr ; + Message.SetName(NameIn) ; + if not RvSeedInit then -- Init seed if not initialized + RV.InitSeed(NameIn) ; + RvSeedInit := TRUE ; + end if ; + end procedure SetName ; + + ------------------------------------------------------------ + procedure SetMessage (MessageIn : String) is + ------------------------------------------------------------ + begin + Message.SetMessage(MessageIn) ; + if not RvSeedInit then -- Init seed if not initialized + RV.InitSeed(MessageIn) ; + RvSeedInit := TRUE ; end if ; - end procedure SetName ; + end procedure SetMessage ; ------------------------------------------------------------ -- pt local for now -- file formal parameter not allowed with a public method procedure WriteBinName ( file f : text ; S : string ; Prefix : string := "%%" ) is ------------------------------------------------------------ - variable CurPtr : LineListPtrType ; + variable MessageCount : integer ; variable buf : line ; begin - if NameHeadPtr = NULL then + MessageCount := Message.GetMessageCount ; + if MessageCount = 0 then if Prefix'length + S'length > 0 then write(buf, Prefix & S) ; writeline(f, buf) ; -- write(f, Prefix & S & LF); end if ; else - write(buf, Prefix & S & NameHeadPtr.Name.all) ; + write(buf, Prefix & S & Message.GetMessage(1)) ; writeline(f, buf) ; - -- write(f, Prefix & S & NameHeadPtr.Name.all & LF) ; - CurPtr := NameHeadPtr.NextPtr ; - while CurPtr /= NULL loop - write(buf, Prefix & CurPtr.Name.all) ; + for i in 2 to MessageCount loop + write(buf, Prefix & Message.GetMessage(i)) ; writeline(f, buf) ; - -- write(f, Prefix & CurPtr.Name.all & LF) ; - CurPtr := CurPtr.NextPtr ; end loop ; end if ; end procedure WriteBinName ; ------------------------------------------------------------ - procedure DeallocateName is + procedure DeallocateMessage is ------------------------------------------------------------ - variable CurPtr : LineListPtrType ; begin - while NameHeadPtr /= NULL loop - CurPtr := NameHeadPtr ; - NameHeadPtr := NameHeadPtr.NextPtr ; - deallocate( CurPtr.Name) ; - deallocate( CurPtr ) ; - end loop ; - NameTailPtr := NULL ; -- contents deallocated above - end procedure DeallocateName ; + Message.DeallocateMessage ; + end procedure DeallocateMessage ; ------------------------------------------------------------ - -- pt local - impure function NumberOfNames return integer is + procedure DeallocateName is ------------------------------------------------------------ - variable CurPtr : LineListPtrType ; - variable Count : integer := 0 ; begin - CurPtr := NameHeadPtr ; - while CurPtr /= NULL loop - Count := Count + 1 ; - CurPtr := CurPtr.NextPtr ; - end loop ; - return Count ; - end function NumberOfNames ; + Message.DeallocateName ; + end procedure DeallocateName ; ------------------------------------------------------------ procedure SetThresholding (A : boolean := TRUE ) is @@ -1465,7 +1479,7 @@ package body CoveragePkg is begin Position := NumBins + 1 ; FoundInside := FALSE ; - FindLoop : for i in 1 to NumBins loop + FindLoop : for i in NumBins downto 1 loop -- skip this CovBin if CovPoint is not in it next FindLoop when not inside(BinVal, CovBinPtr(i).BinVal.all) ; Position := i ; @@ -1474,8 +1488,50 @@ package body CoveragePkg is end loop ; end procedure FindBinInside ; + ------------------------------------------------------------ + -- pt local + -- Inserts values into a new bin. + -- Called by InsertBin + procedure InsertNewBin( + BinVal : RangeArrayType ; + Action : integer ; + Count : integer ; + AtLeast : integer ; + Weight : integer ; + PercentCov : real := 0.0 + ) is + begin + NumBins := NumBins + 1 ; + CovBinPtr.all(NumBins).BinVal := new RangeArrayType'(BinVal) ; + CovBinPtr.all(NumBins).Action := Action ; + CovBinPtr.all(NumBins).Count := Count ; + CovBinPtr.all(NumBins).AtLeast := AtLeast ; + CovBinPtr.all(NumBins).Weight := Weight ; + CovBinPtr.all(NumBins).PercentCov := PercentCov ; + CovBinPtr.all(NumBins).OrderCount := 0 ; --- Metrics for evaluating randomization order Temp + end procedure InsertNewBin ; - ------------------------------------------------------------ + + ------------------------------------------------------------ + -- pt local + -- Inserts values into a new bin. + -- Called by InsertBin + procedure MergeBin ( + Position : Natural ; + Count : integer ; + AtLeast : integer ; + Weight : integer + ) is + begin + CovBinPtr.all(Position).Count := CovBinPtr.all(Position).Count + Count ; + CovBinPtr.all(Position).AtLeast := CovBinPtr.all(Position).AtLeast + AtLeast ; + CovBinPtr.all(Position).Weight := CovBinPtr.all(Position).Weight + Weight ; + CovBinPtr.all(Position).PercentCov := + real(CovBinPtr.all(Position).Count)*100.0/maximum(real(CovBinPtr.all(Position).AtLeast), 1.0) ; + end procedure MergeBin ; + + + ------------------------------------------------------------ -- pt local -- All insertion comes here -- Enforces the general insertion use model: @@ -1494,50 +1550,46 @@ package body CoveragePkg is variable Position : integer ; variable FoundInside : boolean ; begin - FindBinInside(BinVal, Position, FoundInside) ; - if not MergingEnable or CountMode = COUNT_ALL or not FoundInside then - -- Usage: general insertion - NumBins := NumBins + 1 ; - CovBinPtr.all(NumBins).BinVal := new RangeArrayType'(BinVal) ; - CovBinPtr.all(NumBins).Action := Action ; - CovBinPtr.all(NumBins).Count := Count ; - CovBinPtr.all(NumBins).AtLeast := AtLeast ; - CovBinPtr.all(NumBins).Weight := Weight ; - CovBinPtr.all(NumBins).PercentCov := PercentCov ; - CovBinPtr.all(NumBins).OrderCount := 0 ; --- Metrics for evaluating randomization order Temp - elsif Action = COV_COUNT then - if CovBinPtr.all(Position).Action = COV_COUNT then - if CovBinPtr.all(Position).BinVal.all = BinVal then - -- Usage: When count bins are equal, merge them. - CovBinPtr.all(Position).AtLeast := CovBinPtr.all(Position).AtLeast + AtLeast ; - CovBinPtr.all(Position).Weight := CovBinPtr.all(Position).Weight + Weight ; - CovBinPtr.all(Position).Count := CovBinPtr.all(Position).Count + Count ; - CovBinPtr.all(Position).PercentCov := - real(CovBinPtr.all(Position).Count)*100.0/maximum(real(CovBinPtr.all(Position).AtLeast), 1.0) ; + if not MergingEnable then + InsertNewBin(BinVal, Action, Count, AtLeast, Weight, PercentCov) ; + + else -- handle merging +-- future optimization, FindBinInside only checks against Ignore and Illegal bins + FindBinInside(BinVal, Position, FoundInside) ; + + if not FoundInside then + InsertNewBin(BinVal, Action, Count, AtLeast, Weight, PercentCov) ; + + elsif Action = COV_COUNT then +-- when check only ignore and illegal bins, only action is to drop + if CovBinPtr.all(Position).Action /= COV_COUNT then + null ; -- drop count bin when it is inside a Illegal or Ignore bin + + elsif CovBinPtr.all(Position).BinVal.all = BinVal then + -- Bins match, so merge the count values + MergeBin (Position, Count, AtLeast, Weight) ; else - -- Usage: Count bin inside a previous count bin is an error, unless COUNT_ALL - -- ?? Can we run into this algorithmically? - if so can add variable to allow it - -- if CountMode /= COUNT_ALL then -- this check is redundant - report "InsertBin (AddBins/AddCross): inserted count bin is a subset of prior count bin" severity failure ; - -- end if ; - end if; - else - -- Usage: Drop count bin when in either ignore or illegal bin - -- Facilitates capture of count bins - null ; -- quietly drop the bin + -- Bins overlap, but do not match, insert new bin + InsertNewBin(BinVal, Action, Count, AtLeast, Weight, PercentCov) ; + end if; + + elsif Action = COV_IGNORE then +-- when check only ignore and illegal bins, only action is to report error + if CovBinPtr.all(Position).Action = COV_COUNT then + InsertNewBin(BinVal, Action, Count, AtLeast, Weight, PercentCov) ; + else + report "InsertBin (AddBins/AddCross): ignore bin dropped. It is a subset of prior bin" severity error ; + end if; + + elsif Action = COV_ILLEGAL then +-- when check only ignore and illegal bins, only action is to report error + if CovBinPtr.all(Position).Action = COV_COUNT then + InsertNewBin(BinVal, Action, Count, AtLeast, Weight, PercentCov) ; + else + report "InsertBin (AddBins/AddCross): illegal bin dropped. It is a subset of prior bin" severity error ; + end if; end if ; - elsif ACTION = COV_IGNORE then - -- Usage: Most likely an error. - -- Potential: fine grain entry of catch-all ignore bins - -- However, ignore bins are non-signaling, so fine grain entry not useful - report "InsertBin (AddBins/AddCross): inserted ignore bin dropped. It is a subset of prior bin" severity error ; - -- null ; -- quietly drop the bin - elsif ACTION = COV_ILLEGAL then - -- Usage: fine grain entry of catch-all illegal bins, - -- Illegal bins are signaling. Drop the ones with overlap. - report "InsertBin (AddBins/AddCross): inserted illegal bin dropped. It is a subset of prior bin" severity error ; - -- null ; -- quietly drop the bin - end if ; + end if ; -- merging enabled end procedure InsertBin ; @@ -1668,7 +1720,7 @@ package body CoveragePkg is deallocate(CovBinPtr(i).BinVal) ; end loop ; deallocate(CovBinPtr) ; - DeallocateName ; + Message.Deallocate ; -- Restore internal variables to their default values NumBins := 0 ; OrderCount := 0 ; @@ -1686,42 +1738,68 @@ package body CoveragePkg is ------------------------------------------------------------ - procedure ICover ( CovPoint : integer) is + -- Local + procedure ICoverIndex( Index : integer ; CovPoint : integer_vector ) is ------------------------------------------------------------ + variable buf : line ; begin - ICover((1=> CovPoint)) ; - end procedure ICover ; + -- Update Count, PercentCov + CovBinPtr(Index).Count := CovBinPtr(Index).Count + CovBinPtr(Index).action ; + CovBinPtr(Index).PercentCov := real(CovBinPtr(Index).Count)*100.0/maximum(real(CovBinPtr(Index).AtLeast), 1.0) ; + -- OrderCount handling - Statistics + OrderCount := OrderCount + 1 ; + CovBinPtr(Index).OrderCount := OrderCount + CovBinPtr(Index).OrderCount ; + if CovBinPtr(Index).action = COV_ILLEGAL and IllegalMode /= ILLEGAL_OFF then + write(buf, "%% " & Message.GetName & " Illegal Value: " ) ; + if CovPoint = NULL_INTV then + swrite(buf, "LastIndex Value") ; + else + write(buf, CovPoint) ; + end if ; + write(buf, " is in an illegal Bin. " & "Time: " & time'image(now)) ; + writeline(OUTPUT, buf) ; + if IllegalMode = ILLEGAL_FAILURE then + report Message.GetName & " Illegal Value" severity failure ; + end if ; + end if ; + end procedure ICoverIndex ; ------------------------------------------------------------ - procedure ICover( CovPoint : integer_vector) is + procedure ICoverLast is ------------------------------------------------------------ begin - CovLoop : for i in 1 to NumBins loop - -- skip this CovBin if CovPoint is not in it - next CovLoop when not inside(CovPoint, CovBinPtr(i).BinVal.all) ; + ICoverIndex(LastIndex, NULL_INTV) ; + end procedure ICoverLast ; - -- found CovPoint in this CovBin, run this code and exit. - CovBinPtr(i).Count := CovBinPtr(i).Count + CovBinPtr(i).action ; - -- place holder for actions to do to weight vector - CovBinPtr(i).PercentCov := real(CovBinPtr(i).Count)*100.0/maximum(real(CovBinPtr(i).AtLeast), 1.0) ; + ------------------------------------------------------------ + procedure ICover ( CovPoint : integer) is + ------------------------------------------------------------ + begin + ICover((1=> CovPoint)) ; + end procedure ICover ; - -- OrderCount handling - OrderCount := OrderCount + 1 ; - CovBinPtr(i).OrderCount := OrderCount + CovBinPtr(i).OrderCount ; - if CovBinPtr(i).action = COV_ILLEGAL and IllegalMode /= ILLEGAL_OFF then - write(OUTPUT, "%%Illegal Value: " ) ; - write(OUTPUT, CovPoint) ; - write(OUTPUT, " is in an illegal Bin. " & "Time: " & time'image(now) & LF) ; - if IllegalMode = ILLEGAL_FAILURE then - report "Illegal Value" severity failure ; - end if ; - end if ; - exit CovLoop when CountMode = COUNT_FIRST ; -- only find first one - end loop CovLoop ; - end procedure ICover ; + ------------------------------------------------------------ + procedure ICover( CovPoint : integer_vector) is + ------------------------------------------------------------ + variable Found : boolean := FALSE ; + begin + if CountMode = COUNT_FIRST and inside(CovPoint, CovBinPtr(LastIndex).BinVal.all) then + ICoverIndex(LastIndex, CovPoint) ; + Found := TRUE ; + end if; + if not Found then + CovLoop : for i in 1 to NumBins loop + -- skip this CovBin if CovPoint is not in it + next CovLoop when not inside(CovPoint, CovBinPtr(i).BinVal.all) ; + -- Mark Covered + ICoverIndex(i, CovPoint) ; + exit CovLoop when CountMode = COUNT_FIRST ; -- only find first one + end loop CovLoop ; + end if ; + end procedure ICover ; ------------------------------------------------------------ @@ -1882,19 +1960,20 @@ package body CoveragePkg is end function IsCovered ; - ------------------------------------------------------------ - impure function GetCov return real is ------------------------------------------------------------ - variable TotalCovGoal, TotalCovCount : integer := 0 ; + impure function GetCov ( PercentCov : real ) return real is + ------------------------------------------------------------ + variable TotalCovGoal, TotalCovCount, ScaledCovGoal : integer := 0 ; begin BinLoop : for i in 1 to NumBins loop if CovBinPtr(i).action = COV_COUNT then - TotalCovGoal := TotalCovGoal + CovBinPtr(i).AtLeast ; - if CovBinPtr(i).Count <= CovBinPtr(i).AtLeast then + ScaledCovGoal := integer(ceil(PercentCov * real(CovBinPtr(i).AtLeast)/100.0)) ; + TotalCovGoal := TotalCovGoal + ScaledCovGoal ; + if CovBinPtr(i).Count <= ScaledCovGoal then TotalCovCount := TotalCovCount + CovBinPtr(i).Count ; else -- do not count the extra values that exceed their cov goal - TotalCovCount := TotalCovCount + CovBinPtr(i).AtLeast ; + TotalCovCount := TotalCovCount + ScaledCovGoal ; end if ; end if ; end loop BinLoop ; @@ -1903,30 +1982,80 @@ package body CoveragePkg is ------------------------------------------------------------ - impure function GetHoleBinVal ( ReqHoleNum : integer ; CovTargetPercent : real ) return RangeArrayType is + impure function GetCov return real is + ------------------------------------------------------------ + variable TotalCovGoal, TotalCovCount : integer := 0 ; + begin + return GetCov( CovTarget ) ; + end function GetCov ; + + + ------------------------------------------------------------ + impure function GetItemCount return integer is + ------------------------------------------------------------ + begin + return ItemCount ; + end function GetItemCount ; + + + ------------------------------------------------------------ + impure function GetTotalCovGoal ( PercentCov : real ) return integer is + ------------------------------------------------------------ + variable TotalCovGoal, ScaledCovGoal : integer := 0 ; + begin + BinLoop : for i in 1 to NumBins loop + if CovBinPtr(i).action = COV_COUNT then + ScaledCovGoal := integer(ceil(PercentCov * real(CovBinPtr(i).AtLeast)/100.0)) ; + TotalCovGoal := TotalCovGoal + ScaledCovGoal ; + end if ; + end loop BinLoop ; + return TotalCovGoal ; + end function GetTotalCovGoal ; + + + ------------------------------------------------------------ + impure function GetTotalCovGoal return integer is + ------------------------------------------------------------ + begin + return GetTotalCovGoal(CovTarget) ; + end function GetTotalCovGoal ; + + + ------------------------------------------------------------ + impure function GetLastIndex return integer is + ------------------------------------------------------------ + begin + return LastIndex ; + end function GetLastIndex ; + + + ------------------------------------------------------------ + impure function GetHoleBinVal ( ReqHoleNum : integer ; PercentCov : real ) return RangeArrayType is ------------------------------------------------------------ variable HoleCount : integer := 0 ; + variable buf : line ; begin CovLoop : for i in 1 to NumBins loop - if CovBinPtr(i).action = COV_COUNT and CovBinPtr(i).PercentCov < CovTargetPercent then + if CovBinPtr(i).action = COV_COUNT and CovBinPtr(i).PercentCov < PercentCov then HoleCount := HoleCount + 1 ; if HoleCount = ReqHoleNum then return CovBinPtr(i).BinVal.all ; end if ; end if ; end loop CovLoop ; - write(OUTPUT, "%%Error GetHoleBinVal did not find hole. " & + write(buf, "%%Error GetHoleBinVal did not find hole. " & "HoleCount = " & integer'image(HoleCount) & "ReqHoleNum = " & integer'image(ReqHoleNum) & LF) ; + writeline(OUTPUT, buf) ; return CovBinPtr(NumBins).BinVal.all ; end function GetHoleBinVal ; ------------------------------------------------------------ - impure function GetHoleBinVal ( CovTargetPercent : real ) return RangeArrayType is + impure function GetHoleBinVal ( PercentCov : real ) return RangeArrayType is ------------------------------------------------------------ begin - return GetHoleBinVal(1, CovTargetPercent) ; + return GetHoleBinVal(1, PercentCov) ; end function GetHoleBinVal ; @@ -1989,6 +2118,7 @@ package body CoveragePkg is variable MaxCovPercent : real ; variable MinCovPercent : real ; begin + ItemCount := ItemCount + 1 ; MinCovPercent := GetMinCov ; if ThresholdingEnable then MaxCovPercent := MinCovPercent + CovThreshold ; @@ -2017,7 +2147,8 @@ package body CoveragePkg is -- DistInt returns integer range 0 to Numbins-1 -- Caution: DistInt can fail when sum(WeightVec) > 2**31 -- See notes in CalcWeight for REMAIN_EXP - return 1 + RV.DistInt( WeightVec ) ; -- return range 1 to NumBins + LastIndex := 1 + RV.DistInt( WeightVec ) ; -- return range 1 to NumBins + return LastIndex ; end function RandHoleIndex ; @@ -2029,6 +2160,14 @@ package body CoveragePkg is end function GetBinVal ; + ------------------------------------------------------------ + impure function GetLastBinVal return RangeArrayType is + ------------------------------------------------------------ + begin + return CovBinPtr( LastIndex ).BinVal.all ; + end function GetLastBinVal ; + + ------------------------------------------------------------ impure function RandCovBinVal ( PercentCov : real ) return RangeArrayType is ------------------------------------------------------------ @@ -2135,7 +2274,7 @@ package body CoveragePkg is begin return ToRandPoint(GetBinVal(BinIndex)) ; end function GetPoint ; - + ------------------------------------------------------------ impure function GetMinPoint return integer is @@ -2326,31 +2465,34 @@ package body CoveragePkg is -- pt local for now -- file formal parameter not allowed with method procedure WriteBin ( file f : text ) is ------------------------------------------------------------ + variable buf : line ; begin WriteBinName(f, "WriteBin: ") ; if NumBins < 1 then - Write(f, "%%FATAL, Coverage Model is empty. Nothing to print." & LF ) ; + swrite(buf, "%%FATAL, Coverage Model is empty. Nothing to print.") ; + writeline(f, buf) ; report "Coverage model is empty. Nothing to print." severity failure ; end if ; for i in 1 to NumBins loop -- CovBinPtr.all'range if CovBinPtr(i).count < 0 then - write(f, "%%Illegal Bin:") ; - write(f, CovBinPtr(i).BinVal.all) ; - write(f, " Count = " & integer'image(-CovBinPtr(i).count)) ; - write(f, "" & LF) ; + swrite(buf, "%%Illegal Bin:") ; + write(buf, CovBinPtr(i).BinVal.all) ; + write(buf, " Count = " & integer'image(-CovBinPtr(i).count)) ; + write(buf, "" & LF) ; elsif CovBinPtr(i).action = COV_COUNT then - write(f, "%% Bin:") ; - write(f, CovBinPtr(i).BinVal.all) ; - write(f, " Count = " & integer'image(CovBinPtr(i).count)) ; - write(f, " AtLeast = " & integer'image(CovBinPtr(i).AtLeast)) ; + swrite(buf, "%% Bin:") ; + write(buf, CovBinPtr(i).BinVal.all) ; + write(buf, " Count = " & integer'image(CovBinPtr(i).count)) ; + write(buf, " AtLeast = " & integer'image(CovBinPtr(i).AtLeast)) ; if WeightMode = WEIGHT or WeightMode = REMAIN_WEIGHT then -- Print Weight only when it is used - write(f, " Weight = " & integer'image(CovBinPtr(i).Weight)) ; + write(buf, " Weight = " & integer'image(CovBinPtr(i).Weight)) ; end if ; - write(f, "" & LF) ; + writeline(f, buf) ; end if ; end loop ; - write(f, "" & LF) ; + swrite(buf, "") ; + writeline(f, buf) ; end procedure WriteBin ; @@ -2380,31 +2522,33 @@ package body CoveragePkg is -- pt local for now -- file formal parameter not allowed with method procedure DumpBin ( file f : text ) is ------------------------------------------------------------ + variable buf : line ; begin WriteBinName(f, "DumpBin: ") ; -- if NumBins < 1 then -- Write(f, "%%FATAL, Coverage Model is empty. Nothing to print." & LF ) ; -- end if ; for i in 1 to NumBins loop -- CovBinPtr.all'range - write(f, "%% Bin:") ; - write(f, CovBinPtr(i).BinVal.all) ; + swrite(buf, "%% Bin:") ; + write(buf, CovBinPtr(i).BinVal.all) ; case CovBinPtr(i).action is - when COV_COUNT => write(f, " Count = ") ; - when COV_IGNORE => write(f, " Ignore = ") ; - when COV_ILLEGAL => write(f, " Illegal = ") ; - when others => write(f, " BOGUS BOGUS BOGUS = ") ; + when COV_COUNT => swrite(buf, " Count = ") ; + when COV_IGNORE => swrite(buf, " Ignore = ") ; + when COV_ILLEGAL => swrite(buf, " Illegal = ") ; + when others => swrite(buf, " BOGUS BOGUS BOGUS = ") ; end case ; - write(f, integer'image(CovBinPtr(i).count)) ; + write(buf, CovBinPtr(i).count) ; -- write(f, " Count = " & integer'image(CovBinPtr(i).count)) ; - write(f, " AtLeast = " & integer'image(CovBinPtr(i).AtLeast)) ; - write(f, " Weight = " & integer'image(CovBinPtr(i).Weight)) ; - write(f, " OrderCount = " & integer'image(CovBinPtr(i).OrderCount)) ; + write(buf, " AtLeast = " & integer'image(CovBinPtr(i).AtLeast)) ; + write(buf, " Weight = " & integer'image(CovBinPtr(i).Weight)) ; + write(buf, " OrderCount = " & integer'image(CovBinPtr(i).OrderCount)) ; if CovBinPtr(i).count > 0 then - write(f, " Normalized OrderCount = " & integer'image(CovBinPtr(i).OrderCount/CovBinPtr(i).count)) ; + write(buf, " Normalized OrderCount = " & integer'image(CovBinPtr(i).OrderCount/CovBinPtr(i).count)) ; end if ; - write(f, "" & LF) ; + writeline(f, buf) ; end loop ; - write(f, "" & LF) ; + swrite(buf, "") ; + writeline(f,buf) ; end procedure DumpBin ; @@ -2424,26 +2568,29 @@ package body CoveragePkg is -- pt local procedure WriteCovHoles ( file f : text; PercentCov : real := 100.0 ) is ------------------------------------------------------------ + variable buf : line ; begin WriteBinName(f, "WriteCovHoles: ") ; if NumBins < 1 then - Write(f, "%%FATAL, Coverage Model is empty. Nothing to print." & LF ) ; + swrite(buf, "%%FATAL, Coverage Model is empty. Nothing to print.") ; + writeline(f, buf) ; report "Coverage model is empty. Nothing to print." severity failure ; end if ; CovLoop : for i in 1 to NumBins loop if CovBinPtr(i).action = COV_COUNT and CovBinPtr(i).PercentCov < PercentCov then - write(f, "%% Bin:") ; - write(f, CovBinPtr(i).BinVal.all) ; - write(f, " Count = " & integer'image(CovBinPtr(i).Count)) ; - write(f, " AtLeast = " & integer'image(CovBinPtr(i).AtLeast)) ; + swrite(buf, "%% Bin:") ; + write(buf, CovBinPtr(i).BinVal.all) ; + write(buf, " Count = " & integer'image(CovBinPtr(i).Count)) ; + write(buf, " AtLeast = " & integer'image(CovBinPtr(i).AtLeast)) ; if WeightMode = WEIGHT or WeightMode = REMAIN_WEIGHT then -- Print Weight only when it is used - write(f, " Weight = " & integer'image(CovBinPtr(i).Weight)) ; + write(buf, " Weight = " & integer'image(CovBinPtr(i).Weight)) ; end if ; - write(f, "" & LF) ; + writeline(f, buf) ; end if ; end loop CovLoop ; - write(f, "" & LF) ; + swrite(buf, "") ; + writeline(f, buf) ; end procedure WriteCovHoles ; @@ -2493,15 +2640,18 @@ package body CoveragePkg is -- pt local impure function FindBin ( ------------------------------------------------------------ + Merge : boolean ; BinVal : RangeArrayType ; Action : integer ) return integer is begin - for i in 1 to NumBins loop - if BinVal = CovBinPtr(i).BinVal.all and Action = CovBinPtr(i).Action then - return i ; - end if; - end loop ; + if Merge then + for i in 1 to NumBins loop + if BinVal = CovBinPtr(i).BinVal.all and Action = CovBinPtr(i).Action then + return i ; + end if; + end loop ; + end if ; return 0 ; end function FindBin ; @@ -2521,12 +2671,25 @@ package body CoveragePkg is variable iWeightScale : real ; variable iCovThreshold : real ; variable iCountMode : integer ; - variable iNumberOfNames : integer ; + variable iNumberOfMessages : integer ; variable iThresholdingEnable : boolean ; variable iCovTarget : real ; variable iMergingEnable : boolean ; begin + ReadLoop0 : while not EndFile(CovDbFile) loop + ReadLine(CovDbFile, buf) ; + EmptyOrCommentLine(buf, Empty) ; + next when Empty ; + + if buf.all /= "CoveragePkg_Not_Named" then + Message.SetName(buf.all) ; + end if ; + + exit ReadLoop0 ; + end loop ReadLoop0 ; + + ReadLoop1 : while not EndFile(CovDbFile) loop ReadLine(CovDbFile, buf) ; EmptyOrCommentLine(buf, Empty) ; @@ -2579,12 +2742,13 @@ package body CoveragePkg is EmptyOrCommentLine(buf, Empty) ; next when Empty ; - read(buf, iNumberOfNames, ReadValid) ; - exit ReadLoop2 when failed(not ReadValid, "ReadCovDb: Failed while reading NumberOfNames") ; + read(buf, iNumberOfMessages, ReadValid) ; + exit ReadLoop2 when failed(not ReadValid, "ReadCovDb: Failed while reading NumberOfMessages") ; - for i in 1 to iNumberOfNames loop + for i in 1 to iNumberOfMessages loop + exit ReadLoop2 when failed(EndFile(CovDbFile), "ReadCovDb: End of File while reading Messages") ; ReadLine(CovDbFile, buf) ; - SetName(buf.all) ; + SetMessage(buf.all) ; end loop ; exit ReadLoop2 ; @@ -2627,12 +2791,13 @@ package body CoveragePkg is ------------------------------------------------------------ -- pt local - procedure ReadCovDb ( + procedure ReadCovDbDataBase ( ------------------------------------------------------------ File CovDbFile : text ; constant NumRangeItems : in integer ; constant NumLines : in integer ; - variable Good : out boolean + constant Merge : in boolean ; + variable Good : out boolean ) is variable buf : line ; variable Empty : boolean ; @@ -2666,22 +2831,21 @@ package body CoveragePkg is read(buf, BinVal, ReadValid) ; exit ReadLoop when failed(not ReadValid, "ReadCovDb: Failed while reading BinVal") ; - index := FindBin(BinVal, Action) ; - if index > 0 then -- found it. --- Should count add to current count? - CovBinPtr(index).Count := Count ; + index := FindBin(Merge, BinVal, Action) ; + if index > 0 then -- merge it + CovBinPtr(index).Count := CovBinPtr(index).Count + Count ; + CovBinPtr(index).PercentCov := real(CovBinPtr(index).Count)*100.0/maximum(real(CovBinPtr(index).AtLeast), 1.0) ; else - InsertBin(BinVal, Action, Count, AtLeast, Weight, PercentCov) ; - end if ; + InsertNewBin(BinVal, Action, Count, AtLeast, Weight, PercentCov) ; + end if ; end loop ReadLoop ; Good := ReadValid ; - end ReadCovDb ; + end ReadCovDbDataBase ; ------------------------------------------------------------ -- pt local - procedure ReadCovDb ( File CovDbFile : text ) is - -- procedure ReadCovDb (FileName : string) is + procedure ReadCovDb (File CovDbFile : text; Merge : boolean := FALSE) is ------------------------------------------------------------ -- Format: Action Count min1 max1 min2 max2 -- file CovDbFile : text open READ_MODE is FileName ; @@ -2689,6 +2853,10 @@ package body CoveragePkg is variable NumLines : integer ; variable ReadValid : boolean ; begin + if not Merge then + Deallocate ; -- remove any old bins + end if ; + ReadLoop : loop -- Read coverage private variables to the file ReadCovVars(CovDbFile, ReadValid) ; @@ -2699,19 +2867,19 @@ package body CoveragePkg is exit when not ReadValid ; -- Read the file - ReadCovDb(CovDbFile, NumRangeItems, NumLines, ReadValid) ; + ReadCovDbDataBase(CovDbFile, NumRangeItems, NumLines, Merge, ReadValid) ; exit ; end loop ReadLoop ; end ReadCovDb ; ------------------------------------------------------------ - procedure ReadCovDb (FileName : string) is + procedure ReadCovDb (FileName : string; Merge : boolean := FALSE) is ------------------------------------------------------------ -- Format: Action Count min1 max1 min2 max2 file CovDbFile : text open READ_MODE is FileName ; begin - ReadCovDb(CovDbFile) ; + ReadCovDb(CovDbFile, Merge) ; end procedure ReadCovDb ; @@ -2722,6 +2890,13 @@ package body CoveragePkg is variable buf : line ; begin -- write coverage private variables to the file + if Message.GetName /= "" then + write(buf, Message.GetName) ; + else + swrite(buf, "CoveragePkg_Not_Named") ; + end if ; + writeline(CovDbFile, buf) ; + write(buf, RV.GetSeed ) ; write(buf, ' ') ; write(buf, CovThreshold) ; @@ -2741,7 +2916,7 @@ package body CoveragePkg is write(buf, MergingEnable) ; -- boolean write(buf, ' ') ; writeline(CovDbFile, buf) ; - write(buf, NumberOfNames ) ; + write(buf, Message.GetMessageCount ) ; writeline(CovDbFile, buf) ; WriteBinName(CovDbFile, "", "") ; end procedure WriteCovVars ; @@ -2775,7 +2950,7 @@ package body CoveragePkg is write(buf, ' ') ; write(buf, CovBinPtr(LineCount).PercentCov) ; write(buf, ' ') ; - write(buf, CovBinPtr(LineCount).BinVal.all) ; + WriteBinVal(buf, CovBinPtr(LineCount).BinVal.all) ; writeline(CovDbFile, buf) ; end loop WriteLoop ; end procedure WriteCovDb ; @@ -2997,11 +3172,11 @@ package body CoveragePkg is -- ------------------------------------------------------------ ------------------------------------------------------------ - -- Deprecated. Replaced by SetName with multi-line support + -- Deprecated. Replaced by SetMessage with multi-line support procedure SetItemName (ItemNameIn : String) is ------------------------------------------------------------ begin - SetName(ItemNameIn) ; + SetMessage(ItemNameIn) ; end procedure SetItemName ; @@ -3092,6 +3267,7 @@ package body CoveragePkg is variable WeightVec : integer_vector(0 to NumBins-1) ; -- Prep for change to DistInt variable MinCount, AdjAtLeast, MaxAtLeast : integer ; begin + ItemCount := ItemCount + 1 ; MinCount := GetMinCov ; -- iAtLeast := integer(ceil(CovTarget * real(AtLeast)/100.0)) ; if ThresholdingEnable then @@ -3123,7 +3299,8 @@ package body CoveragePkg is end if ; end loop CovLoop ; -- DistInt returns integer range 0 to Numbins-1 - return 1 + RV.DistInt( WeightVec ) ; -- return range 1 to NumBins + LastIndex := 1 + RV.DistInt( WeightVec ) ; -- return range 1 to NumBins + return LastIndex ; end function RandHoleIndex ; ------------------------------------------------------------ @@ -3165,6 +3342,7 @@ package body CoveragePkg is impure function GetHoleBinVal ( ReqHoleNum : integer ; AtLeast : integer ) return RangeArrayType is ------------------------------------------------------------ variable HoleCount : integer := 0 ; + variable buf : line ; begin CovLoop : for i in 1 to NumBins loop -- if CovBinPtr(i).action = COV_COUNT and CovBinPtr(i).Count < minimum(AtLeast, CovBinPtr(i).AtLeast) then @@ -3175,9 +3353,10 @@ package body CoveragePkg is end if ; end if ; end loop CovLoop ; - write(OUTPUT, "%%Error GetHoleBinVal did not find hole. " & + write(buf, "%%Error GetHoleBinVal did not find hole. " & "HoleCount = " & integer'image(HoleCount) & "ReqHoleNum = " & integer'image(ReqHoleNum) & LF) ; + writeline(OUTPUT, buf) ; return CovBinPtr(NumBins).BinVal.all ; end function GetHoleBinVal ; @@ -3196,28 +3375,31 @@ package body CoveragePkg is procedure WriteCovHoles ( file f : text; AtLeast : integer ) is ------------------------------------------------------------ -- variable minAtLeast : integer ; + variable buf : line ; begin WriteBinName(f, "WriteCovHoles: ") ; if NumBins < 1 then - Write(f, "%%FATAL, Coverage Model is empty. Nothing to print." & LF ) ; + swrite(buf, "%%FATAL, Coverage Model is empty. Nothing to print.") ; + writeline(f, buf) ; report "Coverage model is empty. Nothing to print." severity failure ; end if ; CovLoop : for i in 1 to NumBins loop -- minAtLeast := minimum(AtLeast,CovBinPtr(i).AtLeast) ; -- if CovBinPtr(i).action = COV_COUNT and CovBinPtr(i).Count < minAtLeast then if CovBinPtr(i).action = COV_COUNT and CovBinPtr(i).Count < AtLeast then - write(f, "%% Bin:") ; - write(f, CovBinPtr(i).BinVal.all) ; - write(f, " Count = " & integer'image(CovBinPtr(i).Count)) ; - write(f, " AtLeast = " & integer'image(CovBinPtr(i).AtLeast)) ; + swrite(buf, "%% Bin:") ; + write(buf, CovBinPtr(i).BinVal.all) ; + write(buf, " Count = " & integer'image(CovBinPtr(i).Count)) ; + write(buf, " AtLeast = " & integer'image(CovBinPtr(i).AtLeast)) ; if WeightMode = WEIGHT or WeightMode = REMAIN_WEIGHT then -- Print Weight only when it is used - write(f, " Weight = " & integer'image(CovBinPtr(i).Weight)) ; - end if; - write(f, "" & LF) ; + write(buf, " Weight = " & integer'image(CovBinPtr(i).Weight)) ; + end if ; + writeline(f, buf) ; end if ; end loop CovLoop ; - write(f, "" & LF) ; + swrite(buf, "") ; + writeline(f, buf) ; end procedure WriteCovHoles ; @@ -3264,12 +3446,14 @@ package body CoveragePkg is variable NumBins1, NumBins2 : integer ; variable BinInfo1, BinInfo2 : CovBinBaseType ; variable BinVal1, BinVal2 : RangeArrayType(1 to Bin1.GetBinValLength) ; + variable buf : line ; begin NumBins1 := Bin1.GetNumBins ; NumBins2 := Bin2.GetNumBins ; if (NumBins1 /= NumBins2) then - write(OUTPUT, "Bins have different lengths" & LF) ; + write(buf, "Bins have different lengths" & LF) ; + writeline(OUTPUT, buf) ; ErrorCount := ErrorCount + 1 ; return ; end if ; @@ -3281,21 +3465,22 @@ package body CoveragePkg is BinVal2 := Bin2.GetBinVal(i) ; if BinInfo1 /= BinInfo2 or BinVal1 /= BinVal2 then ErrorCount := ErrorCount + 1 ; - write(OUTPUT, "%% Bin:" & integer'image(i) & " miscompare." & LF) ; - write(OUTPUT, "%% Bin1: ") ; - write(OUTPUT, BinVal1) ; - write(OUTPUT, " Action = " & integer'image(BinInfo1.action)) ; - write(OUTPUT, " Count = " & integer'image(BinInfo1.count)) ; - write(OUTPUT, " AtLeast = " & integer'image(BinInfo1.AtLeast)) ; - write(OUTPUT, " Weight = " & integer'image(BinInfo1.Weight)) ; - write(OUTPUT, ""& LF) ; - write(OUTPUT, "%% Bin2: ") ; - write(OUTPUT, BinVal2) ; - write(OUTPUT, " Action = " & integer'image(BinInfo2.action)) ; - write(OUTPUT, " Count = " & integer'image(BinInfo2.count)) ; - write(OUTPUT, " AtLeast = " & integer'image(BinInfo2.AtLeast)) ; - write(OUTPUT, " Weight = " & integer'image(BinInfo2.Weight)) ; - write(OUTPUT, ""& LF) ; + write(buf, "%% Bin:" & integer'image(i) & " miscompare." & LF) ; + writeline(OUTPUT, buf) ; + swrite(buf, "%% Bin1: ") ; + write(buf, BinVal1) ; + write(buf, " Action = " & integer'image(BinInfo1.action)) ; + write(buf, " Count = " & integer'image(BinInfo1.count)) ; + write(buf, " AtLeast = " & integer'image(BinInfo1.AtLeast)) ; + write(buf, " Weight = " & integer'image(BinInfo1.Weight)) ; + writeline(OUTPUT, buf) ; + swrite(buf, "%% Bin2: ") ; + write(buf, BinVal2) ; + write(buf, " Action = " & integer'image(BinInfo2.action)) ; + write(buf, " Count = " & integer'image(BinInfo2.count)) ; + write(buf, " AtLeast = " & integer'image(BinInfo2.AtLeast)) ; + write(buf, " Weight = " & integer'image(BinInfo2.Weight)) ; + writeline(OUTPUT, buf) ; end if ; end loop ; end procedure CompareBins ; diff --git a/CoveragePkg_release_notes.pdf b/CoveragePkg_release_notes.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7ec2e688a394bf1d7511b68d8ed33fd00c1ba6b5 GIT binary patch literal 18613 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 WUi(6VUiFaw47T2 literal 0 HcmV?d00001 diff --git a/CoveragePkg_user_guide.pdf b/CoveragePkg_user_guide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8fafe50c5e61f0edee63ea79c4ca817799ee393f GIT binary patch literal 148389 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 of line ; + type LineArrayPtrType is access LineArrayType ; + + ------------------------------------------------------------ + -- Local. Get first word from a string + function GetWord (Message : string) return string is + ------------------------------------------------------------ + alias aMessage : string( 1 to Message'length) is Message ; + begin + for i in aMessage'range loop + if aMessage(i) = ' ' or aMessage(i) = HT then + return aMessage(1 to i-1) ; + end if ; + end loop ; + return aMessage ; + end function GetWord ; + + + type MessagePType is protected body + + variable NamePtr : line := new string'("") ; + variable MessageCount : integer := 0 ; + constant INITIAL_ITEM_COUNT : integer := 25 ; + variable MaxMessageCount : integer := INITIAL_ITEM_COUNT ; + variable MessagePtr : LineArrayPtrType := new LineArrayType(1 to INITIAL_ITEM_COUNT) ; + + ------------------------------------------------------------ + procedure SetName (NameIn : String) is + ------------------------------------------------------------ + begin + deallocate(NamePtr) ; + NamePtr := new string'(NameIn) ; + end procedure SetName ; + + ------------------------------------------------------------ + impure function GetName return string is + ------------------------------------------------------------ + begin + if NamePtr.all /= "" or MessagePtr(1) = NULL then + return NamePtr.all ; + else + return GetWord( MessagePtr(1).all ) ; + end if ; + end function GetName ; + + ------------------------------------------------------------ + impure function IsSetName return boolean is + ------------------------------------------------------------ + begin + return NamePtr.all /= "" ; + end function IsSetName ; + + ------------------------------------------------------------ + procedure SetMessage (MessageIn : String) is + ------------------------------------------------------------ + variable NamePtr : line ; + variable OldMaxMessageCount : integer ; + variable OldMessagePtr : LineArrayPtrType ; + begin + MessageCount := MessageCount + 1 ; + if MessageCount > MaxMessageCount then + OldMaxMessageCount := MaxMessageCount ; + MaxMessageCount := OldMaxMessageCount * 2 ; + OldMessagePtr := MessagePtr ; + MessagePtr := new LineArrayType(1 to MaxMessageCount) ; + for i in 1 to OldMaxMessageCount loop + MessagePtr(i) := OldMessagePtr(i) ; + end loop ; + Deallocate( OldMessagePtr ) ; + end if ; + MessagePtr(MessageCount) := new string'(MessageIn) ; + end procedure SetMessage ; + + ------------------------------------------------------------ + impure function GetMessage (ItemNumber : integer) return string is + ------------------------------------------------------------ + begin + if MessageCount > 0 then + if ItemNumber >= 1 and ItemNumber <= MessageCount then + return MessagePtr(ItemNumber).all ; + else + report LF & "%% MessagePkg:MessagePType.GetMessage input value out of range" severity failure ; + return "" ; -- error if this happens + end if ; + else + return NamePtr.all ; + end if ; + end function GetMessage ; + + ------------------------------------------------------------ + impure function GetMessageCount return integer is + ------------------------------------------------------------ + begin + return MessageCount ; + end function GetMessageCount ; + + ------------------------------------------------------------ + procedure DeallocateName is -- clear name + ------------------------------------------------------------ + begin + deallocate(NamePtr) ; + NamePtr := new string'("") ; + end procedure DeallocateName ; + + ------------------------------------------------------------ + procedure DeallocateMessage is -- clear message + ------------------------------------------------------------ + variable CurPtr : LineArrayPtrType ; + begin + for i in 1 to MessageCount loop + deallocate( MessagePtr(i) ) ; + end loop ; + MessageCount := 0 ; + -- Do NOT Do this: deallocate( MessagePtr ) ; + end procedure DeallocateMessage ; + + ------------------------------------------------------------ + procedure Deallocate is -- clear all + ------------------------------------------------------------ + begin + DeallocateName ; + DeallocateMessage ; + end procedure Deallocate ; + + end protected body MessagePType ; + +end package body MessagePkg ; + + diff --git a/README.md b/README.md index 16261f6..60e0c51 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,31 @@ -# Unofficial "Open Source VHDL Verification Methodology" Repository +# "Open Source VHDL Verification Methodology" -This is an unofficial repository of [Open Source VHDL Verification Methodology][osvvm] (OS-VVM) provided for Git submodule linking. +This is an **unofficial** repository of "Open Source VHDL Verification Methodology" provided for **git submodule linking**. + +------ +[**Open Source VHDL Verification Methodology (OS-VVM)**][osvvm] is an intelligent testbench methodology that allows mixing of “Intelligent Coverage” (coverage driven randomization) with directed, algorithmic, file based, and constrained random test approaches. The methodology can be adopted in part or in whole as needed. With OSVVM you can add advanced verification methodologies to your current testbench without having to learn a new language or throw out your existing testbench or testbench models. + +**Source:** [http://www.osvvm.org/][osvvm] +**License:** [Artistic License 2.0][PAL2.0] +**Copyright:** Copyright © 2012-2015 by [SynthWorks Design Inc.](http://www.synthworks.com/) ## Release History + - 22.01.2014 - 2014.01 Complete OS-VVM package containing VHDL sources and documentation. - 25.05.2013 - 2013.05 Complete OS-VVM package containing VHDL sources, documentation and sample designs1. 1 This repository does not contain the OS-VVM user guide and the example designs provided by [Aldec][aldec], due to the unknow license state of these files. - [osvvm]: http://www.osvvm.org/ - [aldec]: http://www.aldec.com/ +------ + +*These files are uploaded by Patrick Lehmann.* + + [osvvm]: http://www.osvvm.org/ + [aldec]: http://www.aldec.com/ + [PAL2.0]: http://www.perlfoundation.org/artistic_license_2_0 + + + + + diff --git a/packages/RandomBasePkg.vhd b/RandomBasePkg.vhd similarity index 100% rename from packages/RandomBasePkg.vhd rename to RandomBasePkg.vhd diff --git a/packages/RandomPkg.vhd b/RandomPkg.vhd similarity index 52% rename from packages/RandomPkg.vhd rename to RandomPkg.vhd index 23297c1..e0f2a85 100644 --- a/packages/RandomPkg.vhd +++ b/RandomPkg.vhd @@ -1,35 +1,35 @@ -- --- File Name: RandomPkg.vhd --- Design Unit Name: RandomPkg --- Revision: STANDARD VERSION, revision 2013.05 +-- File Name : RandomPkg.vhd +-- Design Unit Name : RandomPkg +-- Revision : STANDARD VERSION, revision 2014.01 -- --- Maintainer: Jim Lewis email: jim@synthworks.com --- Contributor(s): --- Jim Lewis email: jim@synthworks.com +-- Maintainer : Jim Lewis email : jim@synthworks.com +-- Contributor(s) : +-- Jim Lewis email : jim@synthworks.com -- * -- --- * In writing procedures normal, poisson, the following sources were referenced: +-- * In writing procedures normal, poisson, the following sources were referenced : -- Wikipedia -- package rnd2 written by John Breen and Ken Christensen -- package RNG written by Gnanasekaran Swaminathan -- -- --- Description: +-- Description : -- RandomPType, a protected type, defined to hold randomization RandomSeeds and -- function methods to facilitate randomization with uniform and weighted -- distributions -- --- Developed for: +-- Developed for : -- SynthWorks Design Inc. -- VHDL Training Classes -- 11898 SW 128th Ave. Tigard, Or 97223 --- http://www.SynthWorks.com +-- http ://www.SynthWorks.com -- --- Revision History: +-- Revision History : -- Date Version Description --- 12/2006: 0.1 Initial revision +-- 12/2006 : 0.1 Initial revision -- Numerous revisions for VHDL Testbenches and Verification --- 02/2009: 1.0 First Public Released Version +-- 02/2009 : 1.0 First Public Released Version -- 02/25/2009 1.1 Replaced reference to std_2008 with a reference to -- ieee_proposed.standard_additions.all ; -- 06/2010 1.2 Added Normal and Poisson distributions @@ -47,25 +47,27 @@ -- 5/2013 - Removed extra variable declaration in functions RandInt and RandReal -- 5/2013 2013.05 Big vector randomization added overloading RandUnsigned, RandSlv, and RandSigned -- Added NULL_RANGE_TYPE to minimize null range warnings +-- 1/2014 2014.01 Added RandTime, RandReal(set), RandIntV, RandRealV, RandTimeV +-- Made sort, revsort from SortListPkg_int visible via aliases -- --- Copyright (c) 2006 - 2013 by SynthWorks Design Inc. All rights reserved. +-- Copyright (c) 2006 - 2014 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 +-- 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 +-- 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 +-- 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 +-- http ://www.perlfoundation.org/artistic_license_2_0 -- use work.RandomBasePkg.all ; @@ -79,10 +81,10 @@ use ieee.numeric_std.all ; use ieee.numeric_std_unsigned.all ; use ieee.math_real.all ; --- comment out following 3 lines with VHDL-2008. Leave in for VHDL-2002 --- library ieee_proposed ; -- remove with VHDL-2008 --- use ieee_proposed.standard_additions.all ; -- remove with VHDL-2008 --- use ieee_proposed.standard_textio_additions.all ; -- remove with VHDL-2008 +-- comment out following 3 lines with VHDL-2008. Leave in for VHDL-2002 +-- library ieee_proposed ; -- remove with VHDL-2008 +-- use ieee_proposed.standard_additions.all ; -- remove with VHDL-2008 +-- use ieee_proposed.standard_textio_additions.all ; -- remove with VHDL-2008 package RandomPkg is @@ -90,15 +92,19 @@ package RandomPkg is -- For now they are defined in the package RandomBasePkg.vhd -- package RandomGenericPkg is -- generic ( - -- type RandomSeedType ; -- base type for randomization - -- procedure Uniform (Result : out real ; Seed : inout RandomSeedType) ; + -- type RandomSeedType ; -- base type for randomization + -- procedure Uniform (Result : out real ; Seed : inout RandomSeedType) ; -- function GenRandSeed(IV : integer_vector) return RandomSeedType ; -- function GenRandSeed(I : integer) return RandomSeedType ; -- function GenRandSeed(S : string) return RandomSeedType ; -- ) ; + -- make things from SortListPkg_int visible + alias sort is work.SortListPkg_int.sort[integer_vector return integer_vector] ; + alias revsort is work.SortListPkg_int.revsort[integer_vector return integer_vector] ; + -- note NULL_RANGE_TYPE should probably be in std.standard - subtype NULL_RANGE_TYPE is integer range 0 downto 1 ; + subtype NULL_RANGE_TYPE is integer range 0 downto 1 ; constant NULL_INTV : integer_vector (NULL_RANGE_TYPE) := (others => 0) ; -- Supports DistValInt functionality @@ -115,32 +121,32 @@ package RandomPkg is type RandomParmType is record Distribution : RandomDistType ; - Mean : Real ; -- also used as probability of success - StdDeviation : Real ; -- also used as number of trials for binomial + Mean : Real ; -- also used as probability of success + StdDeviation : Real ; -- also used as number of trials for binomial end record ; -- RandomParm IO - function to_string(A : RandomDistType) return string ; - procedure write(variable L: inout line ; A : RandomDistType ) ; - procedure read(variable L: inout line ; A : out RandomDistType ; good : out boolean ) ; - procedure read(variable L: inout line ; A : out RandomDistType ) ; - function to_string(A : RandomParmType) return string ; - procedure write(variable L: inout line ; A : RandomParmType ) ; - procedure read(variable L: inout line ; A : out RandomParmType ; good : out boolean ) ; - procedure read(variable L: inout line ; A : out RandomParmType ) ; + function to_string(A : RandomDistType) return string ; + procedure write(variable L : inout line ; A : RandomDistType ) ; + procedure read(variable L : inout line ; A : out RandomDistType ; good : out boolean ) ; + procedure read(variable L : inout line ; A : out RandomDistType ) ; + function to_string(A : RandomParmType) return string ; + procedure write(variable L : inout line ; A : RandomParmType ) ; + procedure read(variable L : inout line ; A : out RandomParmType ; good : out boolean ) ; + procedure read(variable L : inout line ; A : out RandomParmType ) ; type RandomPType is protected -- Seed Manipulation -- Known ambiguity between InitSeed with string and integer_vector - -- Recommendation, use: RV.InitSeed(RV'instance_path) ; - -- For integer_vector use either: RV.InitSeed(IV => (1,5)) ; - -- or: RV.InitSeed(integer_vector'(1,5)) ; + -- Recommendation, use : RV.InitSeed(RV'instance_path) ; + -- For integer_vector use either : RV.InitSeed(IV => (1,5)) ; + -- or : RV.InitSeed(integer_vector'(1,5)) ; procedure InitSeed (S : string ) ; procedure InitSeed (I : integer ) ; procedure InitSeed (IV : integer_vector ) ; - -- SetSeed & GetSeed: Used to save and restore seed values + -- SetSeed & GetSeed : Used to save and restore seed values procedure SetSeed (RandomSeedIn : RandomSeedType ) ; impure function GetSeed return RandomSeedType ; -- SeedRandom = SetSeed & GetSeed for SV compatibility @@ -166,26 +172,26 @@ package RandomPkg is -- alias SetRandomMode is SetRandomParm [RandomDistType, Real, Real] ; -- Base Randomization Distributions - -- Uniform: Generate a random number with a Uniform distribution + -- Uniform : Generate a random number with a Uniform distribution impure function Uniform (Min, Max : in real) return real ; impure function Uniform (Min, Max : integer) return integer ; - impure function Uniform (Min, Max : integer ; Exclude: integer_vector) return integer ; + impure function Uniform (Min, Max : integer ; Exclude : integer_vector) return integer ; -- FavorSmall -- Generate random numbers with a greater number of small -- values than large values impure function FavorSmall (Min, Max : real) return real ; impure function FavorSmall (Min, Max : integer) return integer ; - impure function FavorSmall (Min, Max : integer ; Exclude: integer_vector) return integer ; + impure function FavorSmall (Min, Max : integer ; Exclude : integer_vector) return integer ; -- FavorBig -- Generate random numbers with a greater number of large -- values than small values impure function FavorBig (Min, Max : real) return real ; impure function FavorBig (Min, Max : integer) return integer ; - impure function FavorBig (Min, Max : integer ; Exclude: integer_vector) return integer ; + impure function FavorBig (Min, Max : integer ; Exclude : integer_vector) return integer ; - -- Normal: Generate a random number with a normal distribution + -- Normal : Generate a random number with a normal distribution impure function Normal (Mean, StdDeviation : real) return real ; -- Normal + RandomVal >= Min and RandomVal < Max impure function Normal (Mean, StdDeviation, Min, Max : real) return real ; @@ -197,7 +203,7 @@ package RandomPkg is Exclude : integer_vector := NULL_INTV ) return integer ; - -- Poisson: Generate a random number with a poisson distribution + -- Poisson : Generate a random number with a poisson distribution -- Discrete distribution = only generates integral values impure function Poisson (Mean : real) return real ; -- Poisson + RandomVal >= Min and RandomVal < Max @@ -210,32 +216,61 @@ package RandomPkg is ) return integer ; - -- real randomization with a range - impure function RandReal(Min, Max: Real) return real ; - - -- integer randomization with a range + -- randomization with a range impure function RandInt (Min, Max : integer) return integer ; + impure function RandReal(Min, Max : Real) return real ; + impure function RandTime (Min, Max : time ; Unit : time := ns) return time ; impure function RandSlv (Min, Max, Size : natural) return std_logic_vector ; impure function RandUnsigned (Min, Max, Size : natural) return Unsigned ; - impure function RandSigned (Min, Max : integer; Size : natural ) return Signed ; + impure function RandSigned (Min, Max : integer ; Size : natural ) return Signed ; + impure function RandIntV (Min, Max : integer ; Size : natural) return integer_vector ; + impure function RandIntV (Min, Max : integer ; Unique : natural ; Size : natural) return integer_vector ; + impure function RandRealV (Min, Max : real ; Size : natural) return real_vector ; + impure function RandTimeV (Min, Max : time ; Size : natural ; Unit : time := ns) return time_vector ; + impure function RandTimeV (Min, Max : time ; Unique : natural ; Size : natural ; Unit : time := ns) return time_vector ; + + + -- randomization with a range and exclude vector + impure function RandInt (Min, Max : integer ; Exclude : integer_vector ) return integer ; + impure function RandTime (Min, Max : time ; Exclude : time_vector ; Unit : time := ns) return time ; + impure function RandSlv (Min, Max : natural ; Exclude : integer_vector ; Size : natural ) return std_logic_vector ; + impure function RandUnsigned (Min, Max : natural ; Exclude : integer_vector ; Size : natural ) return Unsigned ; + impure function RandSigned (Min, Max : integer ; Exclude : integer_vector ; Size : natural ) return Signed ; + impure function RandIntV (Min, Max : integer ; Exclude : integer_vector ; Size : natural) return integer_vector ; + impure function RandIntV (Min, Max : integer ; Exclude : integer_vector ; Unique : natural ; Size : natural) return integer_vector ; + impure function RandTimeV (Min, Max : time ; Exclude : time_vector ; Size : natural ; Unit : in time := ns) return time_vector ; + impure function RandTimeV (Min, Max : time ; Exclude : time_vector ; Unique : natural ; Size : natural ; Unit : in time := ns) return time_vector ; - -- integer randomization with a range and exclude vector - impure function RandInt (Min, Max : integer; Exclude: integer_vector ) return integer ; - impure function RandSlv (Min, Max : natural; Exclude: integer_vector; Size : natural ) return std_logic_vector ; - impure function RandUnsigned (Min, Max : natural; Exclude: integer_vector ; Size : natural ) return Unsigned ; - impure function RandSigned (Min, Max : integer; Exclude: integer_vector ; Size : natural ) return Signed ; -- Randomly select a value within a set of values impure function RandInt ( A : integer_vector ) return integer ; - impure function RandSlv (A : integer_vector ; Size : natural) return std_logic_vector ; - impure function RandUnsigned (A : integer_vector ; Size : natural) return Unsigned ; - impure function RandSigned (A : integer_vector ; Size : natural ) return Signed ; + impure function RandReal ( A : real_vector ) return real ; + impure function RandTime (A : time_vector) return time ; + impure function RandSlv (A : integer_vector ; Size : natural) return std_logic_vector ; + impure function RandUnsigned (A : integer_vector ; Size : natural) return Unsigned ; + impure function RandSigned (A : integer_vector ; Size : natural ) return Signed ; + impure function RandIntV (A : integer_vector ; Size : natural) return integer_vector ; + impure function RandIntV (A : integer_vector ; Unique : natural ; Size : natural) return integer_vector ; + impure function RandRealV (A : real_vector ; Size : natural) return real_vector ; + impure function RandRealV (A : real_vector ; Unique : natural ; Size : natural) return real_vector ; + impure function RandTimeV (A : time_vector ; Size : natural) return time_vector ; + impure function RandTimeV (A : time_vector ; Unique : natural ; Size : natural) return time_vector ; + -- Randomly select a value within a set of values with exclude values (so can skip last or last n) - impure function RandInt ( A : integer_vector; Exclude: integer_vector ) return integer ; - impure function RandSlv (A : integer_vector; Exclude: integer_vector; Size : natural) return std_logic_vector ; - impure function RandUnsigned (A : integer_vector; Exclude: integer_vector ; Size : natural) return Unsigned ; - impure function RandSigned (A : integer_vector; Exclude: integer_vector ; Size : natural ) return Signed ; + impure function RandInt ( A, Exclude : integer_vector ) return integer ; + impure function RandReal ( A, Exclude : real_vector ) return real ; + impure function RandTime (A, Exclude : time_vector) return time ; + impure function RandSlv (A, Exclude : integer_vector ; Size : natural) return std_logic_vector ; + impure function RandUnsigned (A, Exclude : integer_vector ; Size : natural) return Unsigned ; + impure function RandSigned (A, Exclude : integer_vector ; Size : natural ) return Signed ; + impure function RandIntV (A, Exclude : integer_vector ; Size : natural) return integer_vector ; + impure function RandIntV (A, Exclude : integer_vector ; Unique : natural ; Size : natural) return integer_vector ; + impure function RandRealV (A, Exclude : real_vector ; Size : natural) return real_vector ; + impure function RandRealV (A, Exclude : real_vector ; Unique : natural ; Size : natural) return real_vector ; + impure function RandTimeV (A, Exclude : time_vector ; Size : natural) return time_vector ; + impure function RandTimeV (A, Exclude : time_vector ; Unique : natural ; Size : natural) return time_vector ; + -- Randomly select between 0 and N-1 based on the specified weight. -- where N = number values in weight array @@ -244,11 +279,13 @@ package RandomPkg is impure function DistUnsigned ( Weight : integer_vector ; Size : natural ) return unsigned ; impure function DistSigned ( Weight : integer_vector ; Size : natural ) return signed ; + -- Distribution with just weights and with exclude values - impure function DistInt ( Weight : integer_vector; Exclude: integer_vector ) return integer ; - impure function DistSlv ( Weight : integer_vector; Exclude: integer_vector; Size : natural ) return std_logic_vector ; - impure function DistUnsigned ( Weight : integer_vector; Exclude: integer_vector; Size : natural ) return unsigned ; - impure function DistSigned ( Weight : integer_vector; Exclude: integer_vector; Size : natural ) return signed ; + impure function DistInt ( Weight : integer_vector ; Exclude : integer_vector ) return integer ; + impure function DistSlv ( Weight : integer_vector ; Exclude : integer_vector ; Size : natural ) return std_logic_vector ; + impure function DistUnsigned ( Weight : integer_vector ; Exclude : integer_vector ; Size : natural ) return unsigned ; + impure function DistSigned ( Weight : integer_vector ; Exclude : integer_vector ; Size : natural ) return signed ; + -- Distribution with weight and value impure function DistValInt ( A : DistType ) return integer ; @@ -256,13 +293,15 @@ package RandomPkg is impure function DistValUnsigned ( A : DistType ; Size : natural) return unsigned ; impure function DistValSigned ( A : DistType ; Size : natural) return signed ; + -- Distribution with weight and value and with exclude values - impure function DistValInt ( A : DistType; Exclude: integer_vector ) return integer ; - impure function DistValSlv ( A : DistType; Exclude: integer_vector; Size : natural) return std_logic_vector ; - impure function DistValUnsigned ( A : DistType; Exclude: integer_vector; Size : natural) return unsigned ; - impure function DistValSigned ( A : DistType; Exclude: integer_vector; Size : natural) return signed ; + impure function DistValInt ( A : DistType ; Exclude : integer_vector ) return integer ; + impure function DistValSlv ( A : DistType ; Exclude : integer_vector ; Size : natural) return std_logic_vector ; + impure function DistValUnsigned ( A : DistType ; Exclude : integer_vector ; Size : natural) return unsigned ; + impure function DistValSigned ( A : DistType ; Exclude : integer_vector ; Size : natural) return signed ; - -- Large vector handling. + + -- Large vector handling. impure function RandUnsigned (Size : natural) return unsigned ; impure function RandSlv (Size : natural) return std_logic_vector ; impure function RandSigned (Size : natural) return signed ; @@ -273,14 +312,14 @@ package RandomPkg is impure function RandSlv (Min, Max : std_logic_vector) return std_logic_vector ; impure function RandSigned (Min, Max : signed) return signed ; - + -- Convenience Functions - impure function RandReal return real ; -- 0.0 to 1.0 - impure function RandReal(Max: Real) return real ; -- 0.0 to Max + impure function RandReal return real ; -- 0.0 to 1.0 + impure function RandReal(Max : Real) return real ; -- 0.0 to Max impure function RandInt (Max : integer) return integer ; impure function RandSlv (Max, Size : natural) return std_logic_vector ; impure function RandUnsigned (Max, Size : natural) return Unsigned ; - impure function RandSigned (Max : integer; Size : natural ) return Signed ; + impure function RandSigned (Max : integer ; Size : natural ) return Signed ; end protected RandomPType ; @@ -307,7 +346,7 @@ package body RandomPkg is return A * ValRange + Min ; end function Scale ; - function Scale (A : real ; Min, Max : integer) return integer is + function Scale (A : real ; Min, Max : integer) return integer is variable ValRange : real ; variable rMin, rMax : real ; begin @@ -330,6 +369,87 @@ package body RandomPkg is return sqrt(A) ; end FavorBig ; + -- local. + function to_time_vector (A : integer_vector ; Unit : time) return time_vector is + variable result : time_vector(A'range) ; + begin + for i in A'range loop + result(i) := A(i) * Unit ; + end loop ; + return result ; + end function to_time_vector ; + + -- local + function to_integer_vector (A : time_vector ; Unit : time) return integer_vector is + variable result : integer_vector(A'range) ; + begin + for i in A'range loop + result(i) := A(i) / Unit ; + end loop ; + return result ; + end function to_integer_vector ; + + -- Local. Remove the exclude list from the list - integer_vector + procedure RemoveExclude(A, Exclude : integer_vector ; variable NewA : out integer_vector ; variable NewALength : inout natural ) is + alias norm_NewA : integer_vector(1 to NewA'length) is NewA ; + begin + NewALength := 0 ; + for i in A'range loop + if not inside(A(i), Exclude) then + NewALength := NewALength + 1 ; + norm_NewA(NewALength) := A(i) ; + end if ; + end loop ; + end procedure RemoveExclude ; + + -- Local. Inside - real_vector + function inside(A : real ; Exclude : real_vector) return boolean is + begin + for i in Exclude'range loop + if A = Exclude(i) then + return TRUE ; + end if ; + end loop ; + return FALSE ; + end function inside ; + + -- Local. Remove the exclude list from the list - real_vector + procedure RemoveExclude(A, Exclude : real_vector ; variable NewA : out real_vector ; variable NewALength : inout natural ) is + alias norm_NewA : real_vector(1 to NewA'length) is NewA ; + begin + NewALength := 0 ; + for i in A'range loop + if not inside(A(i), Exclude) then + NewALength := NewALength + 1 ; + norm_NewA(NewALength) := A(i) ; + end if ; + end loop ; + end procedure RemoveExclude ; + + -- Local. Inside - time_vector + function inside(A : time ; Exclude : time_vector) return boolean is + begin + for i in Exclude'range loop + if A = Exclude(i) then + return TRUE ; + end if ; + end loop ; + return FALSE ; + end function inside ; + + -- Local. Remove the exclude list from the list - time_vector + procedure RemoveExclude(A, Exclude : time_vector ; variable NewA : out time_vector ; variable NewALength : inout natural ) is + alias norm_NewA : time_vector(1 to NewA'length) is NewA ; + begin + NewALength := 0 ; + for i in A'range loop + if not inside(A(i), Exclude) then + NewALength := NewALength + 1 ; + norm_NewA(NewALength) := A(i) ; + end if ; + end loop ; + end procedure RemoveExclude ; + ----------------------------------------------------------------- -- RandomParmType IO @@ -342,18 +462,18 @@ package body RandomPkg is ----------------------------------------------------------------- - procedure write(variable L: inout line ; A : RandomDistType ) is + procedure write(variable L : inout line ; A : RandomDistType ) is begin write(L, to_string(A)) ; end procedure write ; ----------------------------------------------------------------- - procedure read(variable L: inout line ; A : out RandomDistType ; good : out boolean ) is + procedure read(variable L : inout line ; A : out RandomDistType ; good : out boolean ) is variable strval : string(1 to 40) ; variable len : natural ; begin - -- procedure SREAD (L: inout LINE; VALUE: out STRING; STRLEN: out NATURAL); + -- procedure SREAD (L : inout LINE ; VALUE : out STRING ; STRLEN : out NATURAL) ; sread(L, strval, len) ; A := RandomDistType'value(strval(1 to len)) ; good := len > 0 ; @@ -361,7 +481,7 @@ package body RandomPkg is ----------------------------------------------------------------- - procedure read(variable L: inout line ; A : out RandomDistType ) is + procedure read(variable L : inout line ; A : out RandomDistType ) is variable good : boolean ; begin read(L, A, good) ; @@ -378,20 +498,20 @@ package body RandomPkg is ----------------------------------------------------------------- - procedure write(variable L: inout line ; A : RandomParmType ) is + procedure write(variable L : inout line ; A : RandomParmType ) is begin write(L, to_string(A)) ; end procedure write ; ----------------------------------------------------------------- - procedure read(variable L: inout line ; A : out RandomParmType ; good : out boolean ) is + procedure read(variable L : inout line ; A : out RandomParmType ; good : out boolean ) is variable strval : string(1 to 40) ; variable len : natural ; variable igood : boolean ; begin loop - -- procedure SREAD (L: inout LINE; VALUE: out STRING; STRLEN: out NATURAL); + -- procedure SREAD (L : inout LINE ; VALUE : out STRING ; STRLEN : out NATURAL) ; sread(L, strval, len) ; A.Distribution := RandomDistType'value(strval(1 to len)) ; igood := len > 0 ; @@ -408,7 +528,7 @@ package body RandomPkg is ----------------------------------------------------------------- - procedure read(variable L: inout line ; A : out RandomParmType ) is + procedure read(variable L : inout line ; A : out RandomParmType ) is variable good : boolean ; begin read(L, A, good) ; @@ -464,7 +584,7 @@ package body RandomPkg is -- -- randomization mode -- - variable RandomParm : RandomParmType ; -- left most values ok for init + variable RandomParm : RandomParmType ; -- left most values ok for init procedure SetRandomParm (RandomParmIn : RandomParmType) is begin @@ -496,20 +616,20 @@ package body RandomPkg is -- For compatibility with previous version procedure SetRandomMode (RandomDistIn : RandomDistType) is begin - SetRandomParm(RandomDistIn); + SetRandomParm(RandomDistIn) ; end procedure SetRandomMode ; - + -- -- Base Randomization Distributions -- -- - -- Uniform: Generate a random number with a Uniform distribution + -- Uniform : Generate a random number with a Uniform distribution -- impure function Uniform (Min, Max : in real) return real is variable rRandomVal : real ; begin - assert (Max >= Min) report "%%RandomPkg Uniform: Max < Min" severity FAILURE ; + assert (Max >= Min) report "%%RandomPkg Uniform : Max < Min" severity FAILURE ; Uniform(rRandomVal, RandomSeed) ; return scale(rRandomVal, Min, Max) ; end function Uniform ; @@ -517,12 +637,12 @@ package body RandomPkg is impure function Uniform (Min, Max : integer) return integer is variable rRandomVal : real ; begin - assert (Max >= Min) report "%%RandomPkg Uniform: Max < Min" severity FAILURE ; + assert (Max >= Min) report "%%RandomPkg Uniform : Max < Min" severity FAILURE ; Uniform(rRandomVal, RandomSeed) ; return scale(rRandomVal, Min, Max) ; end function Uniform ; - impure function Uniform (Min, Max : integer ; Exclude: integer_vector) return integer is + impure function Uniform (Min, Max : integer ; Exclude : integer_vector) return integer is variable iRandomVal : integer ; variable ExcludeList : SortListPType ; variable count : integer ; @@ -548,20 +668,20 @@ package body RandomPkg is impure function FavorSmall (Min, Max : real) return real is variable rRandomVal : real ; begin - assert (Max >= Min) report "%%RandomPkg FavorSmall: Max < Min" severity FAILURE ; + assert (Max >= Min) report "%%RandomPkg FavorSmall : Max < Min" severity FAILURE ; Uniform(rRandomVal, RandomSeed) ; - return scale(FavorSmall(rRandomVal), Min, Max) ; -- real + return scale(FavorSmall(rRandomVal), Min, Max) ; -- real end function FavorSmall ; impure function FavorSmall (Min, Max : integer) return integer is variable rRandomVal : real ; begin - assert (Max >= Min) report "%%RandomPkg FavorSmall: Max < Min" severity FAILURE ; + assert (Max >= Min) report "%%RandomPkg FavorSmall : Max < Min" severity FAILURE ; Uniform(rRandomVal, RandomSeed) ; - return scale(FavorSmall(rRandomVal), Min, Max) ; -- integer + return scale(FavorSmall(rRandomVal), Min, Max) ; -- integer end function FavorSmall ; - impure function FavorSmall (Min, Max : integer ; Exclude: integer_vector) return integer is + impure function FavorSmall (Min, Max : integer ; Exclude : integer_vector) return integer is variable iRandomVal : integer ; variable ExcludeList : SortListPType ; variable count : integer ; @@ -578,7 +698,7 @@ package body RandomPkg is return iRandomVal ; end function FavorSmall ; - + -- -- FavorBig -- Generate random numbers with a greater number of large @@ -587,7 +707,7 @@ package body RandomPkg is impure function FavorBig (Min, Max : real) return real is variable rRandomVal : real ; begin - assert (Max >= Min) report "%%RandomPkg FavorBig: Max < Min" severity FAILURE ; + assert (Max >= Min) report "%%RandomPkg FavorBig : Max < Min" severity FAILURE ; Uniform(rRandomVal, RandomSeed) ; return scale(FavorBig(rRandomVal), Min, Max) ; -- real end function FavorBig ; @@ -595,12 +715,12 @@ package body RandomPkg is impure function FavorBig (Min, Max : integer) return integer is variable rRandomVal : real ; begin - assert (Max >= Min) report "%%RandomPkg FavorBig: Max < Min" severity FAILURE ; + assert (Max >= Min) report "%%RandomPkg FavorBig : Max < Min" severity FAILURE ; Uniform(rRandomVal, RandomSeed) ; return scale(FavorBig(rRandomVal), Min, Max) ; -- integer end function FavorBig ; - impure function FavorBig (Min, Max : integer ; Exclude: integer_vector) return integer is + impure function FavorBig (Min, Max : integer ; Exclude : integer_vector) return integer is variable iRandomVal : integer ; variable ExcludeList : SortListPType ; variable count : integer ; @@ -622,11 +742,11 @@ package body RandomPkg is -- Normal -- Generate a random number with a normal distribution -- - -- Use Box Muller, per Wikipedia: - -- http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform + -- Use Box Muller, per Wikipedia : + -- http ://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform -- - -- Use polar method, per Wikipedia: - -- http://en.wikipedia.org/wiki/Marsaglia_polar_method + -- Use polar method, per Wikipedia : + -- http ://en.wikipedia.org/wiki/Marsaglia_polar_method -- impure function Normal (Mean, StdDeviation : real) return real is variable x01, y01 : real ; @@ -650,7 +770,7 @@ package body RandomPkg is -- loop -- Uniform (x01, RandomSeed) ; -- Uniform (y01, RandomSeed) ; - -- x := 2.0 * x01 - 1.0 ; -- scale to -1 to 1 + -- x := 2.0 * x01 - 1.0 ; -- scale to -1 to 1 -- y := 2.0 * y01 - 1.0 ; -- s := x*x + y*y ; -- exit when s < 1.0 and s > 0.0 ; @@ -669,14 +789,14 @@ package body RandomPkg is variable rRandomVal : real ; begin if Max < Min then - report "%%RandomPkg Normal: Max < Min" severity FAILURE ; + report "%%RandomPkg Normal : Max < Min" severity FAILURE ; else loop rRandomVal := Normal (Mean, StdDeviation) ; exit when rRandomVal >= Min and rRandomVal <= Max ; end loop ; - end if ; - return rRandomVal ; + end if ; + return rRandomVal ; end function Normal ; -- Normal + RandomVal >= Min and RandomVal <= Max @@ -690,14 +810,14 @@ package body RandomPkg is variable iRandomVal : integer ; begin if Max < Min then - report "%%RandomPkg Normal: Max < Min" severity FAILURE ; + report "%%RandomPkg Normal : Max < Min" severity FAILURE ; else loop iRandomVal := integer(round( Normal(Mean, StdDeviation) )) ; exit when iRandomVal >= Min and iRandomVal <= Max and not inside(iRandomVal, Exclude) ; end loop ; - end if ; + end if ; return iRandomVal ; end function Normal ; @@ -707,44 +827,44 @@ package body RandomPkg is -- Generate a random number with a poisson distribution -- Discrete distribution = only generates integral values -- - -- Use knuth method, per Wikipedia: - -- http://en.wikipedia.org/wiki/Poisson_distribution + -- Use knuth method, per Wikipedia : + -- http ://en.wikipedia.org/wiki/Poisson_distribution -- impure function Poisson (Mean : real) return real is - variable Product : Real := 1.0; - variable Bound : Real := 0.0; + variable Product : Real := 1.0 ; + variable Bound : Real := 0.0 ; variable UniformRand : Real := 0.0 ; variable PoissonRand : Real := 0.0 ; begin - Bound := exp(-1.0 * Mean); + Bound := exp(-1.0 * Mean) ; Product := 1.0 ; -- add this check to set parameters? if Mean <= 0.0 or Bound <= 0.0 then - report "Poisson: Mean < 0 or too large. Mean = " & real'image(Mean) severity failure ; + report "Poisson : Mean < 0 or too large. Mean = " & real'image(Mean) severity failure ; return -1.0 ; end if ; while (Product >= Bound) loop - PoissonRand := PoissonRand + 1.0; + PoissonRand := PoissonRand + 1.0 ; Uniform(UniformRand, RandomSeed) ; - Product := Product * UniformRand; - end loop; + Product := Product * UniformRand ; + end loop ; return PoissonRand ; - end function Poisson ; -- no range + end function Poisson ; -- no range -- Poisson + RandomVal >= Min and RandomVal < Max impure function Poisson (Mean, Min, Max : real) return real is variable rRandomVal : real ; begin if Max < Min then - report "%%RandomPkg Poisson: Max < Min" severity FAILURE ; + report "%%RandomPkg Poisson : Max < Min" severity FAILURE ; else loop rRandomVal := Poisson (Mean) ; exit when rRandomVal >= Min and rRandomVal <= Max ; end loop ; - end if ; + end if ; return rRandomVal ; end function Poisson ; @@ -757,23 +877,23 @@ package body RandomPkg is variable iRandomVal : integer ; begin if Max < Min then - report "%%RandomPkg Poisson: Max < Min" severity FAILURE ; + report "%%RandomPkg Poisson : Max < Min" severity FAILURE ; else loop iRandomVal := integer(round( Poisson (Mean) )) ; exit when iRandomVal >= Min and iRandomVal <= Max and not inside(iRandomVal, Exclude) ; end loop ; - end if ; + end if ; return iRandomVal ; end function Poisson ; - + -- - -- real randomization with a range + -- integer randomization with a range -- Distribution determined by RandomParm -- - impure function RandReal(Min, Max: Real) return real is + impure function RandInt (Min, Max : integer) return integer is begin case RandomParm.Distribution is when NONE | UNIFORM => return Uniform(Min, Max) ; @@ -782,17 +902,16 @@ package body RandomPkg is when NORMAL => return Normal(RandomParm.Mean, RandomParm.StdDeviation, Min, Max) ; when POISSON => return Poisson(RandomParm.Mean, Min, Max) ; when others => - report "RandomPkg: distribution not implemented" severity failure ; - return real(integer'low) ; + report "RandomPkg : distribution not implemented" severity failure ; + return integer'low ; end case ; - end function RandReal ; - + end function RandInt ; -- - -- integer randomization with a range + -- real randomization with a range -- Distribution determined by RandomParm -- - impure function RandInt (Min, Max : integer) return integer is + impure function RandReal(Min, Max : Real) return real is begin case RandomParm.Distribution is when NONE | UNIFORM => return Uniform(Min, Max) ; @@ -801,10 +920,18 @@ package body RandomPkg is when NORMAL => return Normal(RandomParm.Mean, RandomParm.StdDeviation, Min, Max) ; when POISSON => return Poisson(RandomParm.Mean, Min, Max) ; when others => - report "RandomPkg: distribution not implemented" severity failure ; - return integer'low ; + report "RandomPkg : distribution not implemented" severity failure ; + return real(integer'low) ; end case ; - end function RandInt ; + end function RandReal ; + + impure function RandTime (Min, Max : time ; Unit :time := ns) return time is + variable IntVal : integer ; + begin + -- if Max - Min > 2**31 result will be out of range + IntVal := RandInt(0, (Max - Min)/Unit) ; + Return Min + Unit*IntVal ; + end function RandTime ; impure function RandSlv (Min, Max, Size : natural) return std_logic_vector is begin @@ -816,17 +943,66 @@ package body RandomPkg is return to_unsigned(RandInt(Min, Max), Size) ; end function RandUnsigned ; - impure function RandSigned (Min, Max : integer; Size : natural ) return Signed is + impure function RandSigned (Min, Max : integer ; Size : natural ) return Signed is begin return to_signed(RandInt(Min, Max), Size) ; end function RandSigned ; + impure function RandIntV (Min, Max : integer ; Size : natural) return integer_vector is + variable result : integer_vector(1 to Size) ; + begin + for i in result'range loop + result(i) := RandInt(Min, Max) ; + end loop ; + return result ; + end function RandIntV ; + + impure function RandIntV (Min, Max : integer ; Unique : natural ; Size : natural) return integer_vector is + variable result : integer_vector(1 to Size) ; + variable iUnique : natural ; + begin + -- if Unique = 0, it is more efficient to call RandIntV(Min, Max, Size) + iUnique := Unique ; + if Max-Min+1 < Unique then + report "RandIntV / RandRealV / RandTimeV: Unique > number of values available" severity failure ; + iUnique := Max-Min+1 ; + end if ; + for i in result'range loop + result(i) := RandInt(Min, Max, result(maximum(1, 1 + i - iUnique) to Size)) ; + end loop ; + return result ; + end function RandIntV ; + + impure function RandRealV (Min, Max : real ; Size : natural) return real_vector is + variable result : real_vector(1 to Size) ; + begin + for i in result'range loop + result(i) := RandReal(Min, Max) ; + end loop ; + return result ; + end function RandRealV ; + + impure function RandTimeV (Min, Max : time ; Size : natural ; Unit : time := ns) return time_vector is + variable result : time_vector(1 to Size) ; + begin + for i in result'range loop + result(i) := RandTime(Min, Max, Unit) ; + end loop ; + return result ; + end function RandTimeV ; + + impure function RandTimeV (Min, Max : time ; Unique : natural ; Size : natural ; Unit : time := ns) return time_vector is + begin + -- if Unique = 0, it is more efficient to call RandTimeV(Min, Max, Size) + return to_time_vector(RandIntV(Min/Unit, Max/Unit, Unique, Size), Unit) ; + end function RandTimeV ; + -- -- integer randomization with a range and exclude vector -- Distribution determined by RandomParm -- - impure function RandInt (Min, Max : integer; Exclude: integer_vector ) return integer is + impure function RandInt (Min, Max : integer ; Exclude : integer_vector ) return integer is begin case RandomParm.Distribution is when NONE | UNIFORM => return Uniform(Min, Max, Exclude) ; @@ -835,26 +1011,65 @@ package body RandomPkg is when NORMAL => return Normal(RandomParm.Mean, RandomParm.StdDeviation, Min, Max, Exclude) ; when POISSON => return Poisson(RandomParm.Mean, Min, Max, Exclude) ; when others => - report "RandomPkg: distribution not implemented" severity failure ; + report "RandomPkg : distribution not implemented" severity failure ; return integer'low ; end case ; end function RandInt ; - impure function RandSlv (Min, Max : natural; Exclude: integer_vector; Size : natural ) return std_logic_vector is + impure function RandTime (Min, Max : time ; Exclude : time_vector ; Unit : time := ns) return time is + variable IntVal : integer ; + begin + -- if Min or Max > 2**31 value will be out of range + return RandInt(Min/Unit, Max/Unit, to_integer_vector(Exclude, Unit)) * Unit ; + end function RandTime ; + + impure function RandSlv (Min, Max : natural ; Exclude : integer_vector ; Size : natural ) return std_logic_vector is begin return std_logic_vector(to_unsigned(RandInt(Min, Max, Exclude), Size)) ; end function RandSlv ; - impure function RandUnsigned (Min, Max : natural; Exclude: integer_vector; Size : natural ) return Unsigned is + impure function RandUnsigned (Min, Max : natural ; Exclude : integer_vector ; Size : natural ) return Unsigned is begin return to_unsigned(RandInt(Min, Max, Exclude), Size) ; end function RandUnsigned ; - impure function RandSigned (Min, Max : integer; Exclude: integer_vector; Size : natural ) return Signed is + impure function RandSigned (Min, Max : integer ; Exclude : integer_vector ; Size : natural ) return Signed is begin return to_signed(RandInt(Min, Max, Exclude), Size) ; end function RandSigned ; + impure function RandIntV (Min, Max : integer ; Exclude : integer_vector ; Size : natural) return integer_vector is + variable result : integer_vector(1 to Size) ; + begin + for i in result'range loop + result(i) := RandInt(Min, Max, Exclude) ; + end loop ; + return result ; + end function RandIntV ; + + impure function RandIntV (Min, Max : integer ; Exclude : integer_vector ; Unique : natural ; Size : natural) return integer_vector is + variable ResultPlus : integer_vector(1 to Size + Exclude'length) ; + begin + -- if Unique = 0, it is more efficient to call RandIntV(Min, Max, Size) + ResultPlus(Size+1 to ResultPlus'right) := Exclude ; + for i in 1 to Size loop + ResultPlus(i) := RandInt(Min, Max, ResultPlus(maximum(1, 1 + i - Unique) to ResultPlus'right)) ; + end loop ; + return ResultPlus(1 to Size) ; + end function RandIntV ; + + impure function RandTimeV (Min, Max : time ; Exclude : time_vector ; Size : natural ; Unit : in time := ns) return time_vector is + begin + return to_time_vector( RandIntV(Min/Unit, Max/Unit, to_integer_vector(Exclude, Unit), Size), Unit ) ; + end function RandTimeV ; + + impure function RandTimeV (Min, Max : time ; Exclude : time_vector ; Unique : natural ; Size : natural ; Unit : in time := ns) return time_vector is + begin + -- if Unique = 0, it is more efficient to call RandIntV(Min, Max, Size) + return to_time_vector( RandIntV(Min/Unit, Max/Unit, to_integer_vector(Exclude, Unit), Unique, Size), Unit ) ; + end function RandTimeV ; + + -- -- Randomly select a value within a set of values @@ -866,59 +1081,261 @@ package body RandomPkg is return A_norm( RandInt(1, A'length) ) ; end function RandInt ; - impure function RandSlv (A : integer_vector ; Size : natural) return std_logic_vector is + impure function RandReal ( A : real_vector ) return real is + alias A_norm : real_vector(1 to A'length) is A ; + begin + return A_norm( RandInt(1, A'length) ) ; + end function RandReal ; + + impure function RandTime ( A : time_vector ) return time is + alias A_norm : time_vector(1 to A'length) is A ; + begin + return A_norm( RandInt(1, A'length) ) ; + end function RandTime ; + + impure function RandSlv (A : integer_vector ; Size : natural) return std_logic_vector is begin return std_logic_vector(to_unsigned(RandInt(A), Size)) ; end function RandSlv ; - impure function RandUnsigned (A : integer_vector ; Size : natural) return Unsigned is + impure function RandUnsigned (A : integer_vector ; Size : natural) return Unsigned is begin return to_unsigned(RandInt(A), Size) ; end function RandUnsigned ; - impure function RandSigned (A : integer_vector ; Size : natural ) return Signed is + impure function RandSigned (A : integer_vector ; Size : natural ) return Signed is begin return to_signed(RandInt(A), Size) ; end function RandSigned ; + impure function RandIntV (A : integer_vector ; Size : natural) return integer_vector is + variable result : integer_vector(1 to Size) ; + begin + for i in result'range loop + result(i) := RandInt(A) ; + end loop ; + return result ; + end function RandIntV ; + + impure function RandIntV (A : integer_vector ; Unique : natural ; Size : natural) return integer_vector is + variable result : integer_vector(1 to Size) ; + variable iUnique : natural ; + begin + -- if Unique = 0, it is more efficient to call RandIntV(A, Size) + -- require A'length >= Unique + iUnique := Unique ; + if A'length < Unique then + report "RandIntV: Unique > length of set of values" severity failure ; + iUnique := A'length ; + end if ; + for i in result'range loop + result(i) := RandInt(A, result(maximum(1, 1 + i - iUnique) to Size)) ; + end loop ; + return result ; + end function RandIntV ; + + impure function RandRealV (A : real_vector ; Size : natural) return real_vector is + variable result : real_vector(1 to Size) ; + begin + for i in result'range loop + result(i) := RandReal(A) ; + end loop ; + return result ; + end function RandRealV ; + + impure function RandRealV (A : real_vector ; Unique : natural ; Size : natural) return real_vector is + alias A_norm : real_vector(1 to A'length) is A ; + variable result : real_vector(1 to Size) ; + variable IntResult : integer_vector(result'range) ; + begin + -- randomly generate indices + IntResult := RandIntV(1, A'length, Unique, Size) ; + -- translate indicies into result values + for i in result'range loop + result(i) := A_norm(IntResult(i)) ; + end loop ; + return result ; + end function RandRealV ; + + impure function RandTimeV (A : time_vector ; Size : natural) return time_vector is + variable result : time_vector(1 to Size) ; + begin + for i in result'range loop + result(i) := RandTime(A) ; + end loop ; + return result ; + end function RandTimeV ; + + impure function RandTimeV (A : time_vector ; Unique : natural ; Size : natural) return time_vector is + alias A_norm : time_vector(1 to A'length) is A ; + variable result : time_vector(1 to Size) ; + variable IntResult : integer_vector(result'range) ; + begin + -- randomly generate indices + IntResult := RandIntV(1, A'length, Unique, Size) ; + -- translate indicies into result values + for i in result'range loop + result(i) := A_norm(IntResult(i)) ; + end loop ; + return result ; + end function RandTimeV ; + -- -- Randomly select a value within a set of values with exclude values (so can skip last or last n) -- Distribution determined by RandomParm -- - impure function RandInt ( A : integer_vector; Exclude: integer_vector ) return integer is - alias A_norm : integer_vector(1 to A'length) is A ; - variable ExcludeIndexList : SortListPType ; - variable iVal : integer ; - begin - -- convert exclude list into indices of A_norm to exclude - -- necessary to preserve ordering of the distribution (such as NORMAL) - for i in A_norm'range loop - if inside(A_norm(i), Exclude) then - ExcludeIndexList.add(i) ; - end if ; - end loop ; - -- Randomize an index into A_Norm with exclude index list - iVal := RandInt(1, A'length, ExcludeIndexList.to_array (EraseList => TRUE)) ; - -- return the value at the randomized index - return A_norm(iVal) ; + + impure function RandInt ( A, Exclude : integer_vector ) return integer is + variable NewA : integer_vector(1 to A'length) ; + variable NewALength : natural ; + begin + -- Remove Exclude from A + RemoveExclude(A, Exclude, NewA, NewALength) ; + -- Randomize Index + return NewA(RandInt(1, NewALength)) ; end function RandInt ; - impure function RandSlv (A : integer_vector; Exclude: integer_vector; Size : natural) return std_logic_vector is + impure function RandReal ( A, Exclude : real_vector ) return real is + variable NewA : real_vector(1 to A'length) ; + variable NewALength : natural ; + begin + -- Remove Exclude from A + RemoveExclude(A, Exclude, NewA, NewALength) ; + -- Randomize Index + return NewA(RandInt(1, NewALength)) ; + end function RandReal ; + + impure function RandTime ( A, Exclude : time_vector ) return time is + variable NewA : time_vector(1 to A'length) ; + variable NewALength : natural ; + begin + -- Remove Exclude from A + RemoveExclude(A, Exclude, NewA, NewALength) ; + -- Randomize Index + return NewA(RandInt(1, NewALength)) ; + end function RandTime ; + + impure function RandSlv (A, Exclude : integer_vector ; Size : natural) return std_logic_vector is begin return std_logic_vector(to_unsigned(RandInt(A, Exclude), Size)) ; end function RandSlv ; - impure function RandUnsigned (A : integer_vector; Exclude: integer_vector; Size : natural) return Unsigned is + impure function RandUnsigned (A, Exclude : integer_vector ; Size : natural) return Unsigned is begin return to_unsigned(RandInt(A, Exclude), Size) ; end function RandUnsigned ; - impure function RandSigned (A : integer_vector; Exclude: integer_vector; Size : natural ) return Signed is + impure function RandSigned (A, Exclude : integer_vector ; Size : natural ) return Signed is begin return to_signed(RandInt(A, Exclude), Size) ; end function RandSigned ; + impure function RandIntV (A, Exclude : integer_vector ; Size : natural) return integer_vector is + variable result : integer_vector(1 to Size) ; + variable NewA : integer_vector(1 to A'length) ; + variable NewALength : natural ; + begin + -- Remove Exclude from A + RemoveExclude(A, Exclude, NewA, NewALength) ; + -- Randomize Index + for i in result'range loop + result(i) := NewA(RandInt(1, NewALength)) ; + end loop ; + return result ; + end function RandIntV ; + + impure function RandIntV (A, Exclude : integer_vector ; Unique : natural ; Size : natural) return integer_vector is + variable result : integer_vector(1 to Size) ; + variable NewA : integer_vector(1 to A'length) ; + variable NewALength, iUnique : natural ; + begin + -- if Unique = 0, it is more efficient to call RandIntV(Min, Max, Size) + -- Remove Exclude from A + RemoveExclude(A, Exclude, NewA, NewALength) ; + -- Require NewALength >= Unique + iUnique := Unique ; + if NewALength < Unique then + report "RandIntV: Unique > Length of Set A - Exclude" severity failure ; + iUnique := NewALength ; + end if ; + -- Randomize using exclude list of Unique # of newly generated values + for i in result'range loop + result(i) := RandInt(NewA(1 to NewALength), result(maximum(1, 1 + i - iUnique) to Size)) ; + end loop ; + return result ; + end function RandIntV ; + + impure function RandRealV (A, Exclude : real_vector ; Size : natural) return real_vector is + variable result : real_vector(1 to Size) ; + variable NewA : real_vector(1 to A'length) ; + variable NewALength : natural ; + begin + -- Remove Exclude from A + RemoveExclude(A, Exclude, NewA, NewALength) ; + -- Randomize Index + for i in result'range loop + result(i) := NewA(RandInt(1, NewALength)) ; + end loop ; + return result ; + end function RandRealV ; + + impure function RandRealV (A, Exclude : real_vector ; Unique : natural ; Size : natural) return real_vector is + variable result : real_vector(1 to Size) ; + variable NewA : real_vector(1 to A'length) ; + variable NewALength, iUnique : natural ; + begin + -- if Unique = 0, it is more efficient to call RandRealV(Min, Max, Size) + -- Remove Exclude from A + RemoveExclude(A, Exclude, NewA, NewALength) ; + -- Require NewALength >= Unique + iUnique := Unique ; + if NewALength < Unique then + report "RandRealV: Unique > Length of Set A - Exclude" severity failure ; + iUnique := NewALength ; + end if ; + -- Randomize using exclude list of Unique # of newly generated values + for i in result'range loop + result(i) := RandReal(NewA(1 to NewALength), result(maximum(1, 1 + i - iUnique) to Size)) ; + end loop ; + return result ; + end function RandRealV ; + + impure function RandTimeV (A, Exclude : time_vector ; Size : natural) return time_vector is + variable result : time_vector(1 to Size) ; + variable NewA : time_vector(1 to A'length) ; + variable NewALength : natural ; + begin + -- Remove Exclude from A + RemoveExclude(A, Exclude, NewA, NewALength) ; + -- Randomize Index + for i in result'range loop + result(i) := NewA(RandInt(1, NewALength)) ; + end loop ; + return result ; + end function RandTimeV ; + + impure function RandTimeV (A, Exclude : time_vector ; Unique : natural ; Size : natural) return time_vector is + variable result : time_vector(1 to Size) ; + variable NewA : time_vector(1 to A'length) ; + variable NewALength, iUnique : natural ; + begin + -- if Unique = 0, it is more efficient to call RandRealV(Min, Max, Size) + -- Remove Exclude from A + RemoveExclude(A, Exclude, NewA, NewALength) ; + -- Require NewALength >= Unique + iUnique := Unique ; + if NewALength < Unique then + report "RandTimeV: Unique > Length of Set A - Exclude" severity failure ; + iUnique := NewALength ; + end if ; + -- Randomize using exclude list of Unique # of newly generated values + for i in result'range loop + result(i) := RandTime(NewA(1 to NewALength), result(maximum(1, 1 + i - iUnique) to Size)) ; + end loop ; + return result ; + end function RandTimeV ; + -- -- Basic Discrete Distributions @@ -932,25 +1349,25 @@ package body RandomPkg is DistArray := Weight ; sum := 0 ; for i in DistArray'range loop - DistArray(i) := DistArray(i) + sum ; + DistArray(i) := DistArray(i) + sum ; if DistArray(i) < sum then - report "DistInt failed: negative weight or sum > 31 bits" - severity failure ; + report "DistInt failed : negative weight or sum > 31 bits" + severity failure ; return DistArray'low ; -- allows debugging vs integer'left, out of range - end if ; + end if ; sum := DistArray(i) ; end loop ; - if sum >= 1 then + if sum >= 1 then iRandomVal := Uniform(1, sum) ; for i in DistArray'range loop if iRandomVal <= DistArray(i) then return i ; - end if; + end if ; end loop ; - report "DistInt: randomization failed" severity failure ; + report "DistInt : randomization failed" severity failure ; else - report "DistInt: No randomizatoin weights" severity failure ; - end if ; + report "DistInt : No randomizatoin weights" severity failure ; + end if ; return DistArray'low ; -- allows debugging vs integer'left, out of range end function DistInt ; @@ -969,12 +1386,12 @@ package body RandomPkg is return to_signed(DistInt(Weight), Size) ; end function DistSigned ; - + -- -- Basic Distributions with exclude values (so can skip last or last n) -- Always uses Uniform via DistInt -- - impure function DistInt ( Weight : integer_vector; Exclude: integer_vector ) return integer is + impure function DistInt ( Weight : integer_vector ; Exclude : integer_vector ) return integer is variable DistArray : integer_vector(weight'range) ; variable ExcludeTemp : integer ; begin @@ -988,17 +1405,17 @@ package body RandomPkg is return DistInt(DistArray) ; end function DistInt ; - impure function DistSlv ( Weight : integer_vector; Exclude: integer_vector; Size : natural ) return std_logic_vector is + impure function DistSlv ( Weight : integer_vector ; Exclude : integer_vector ; Size : natural ) return std_logic_vector is begin return std_logic_vector(to_unsigned(DistInt(Weight, Exclude), Size)) ; end function DistSlv ; - impure function DistUnsigned ( Weight : integer_vector; Exclude: integer_vector; Size : natural ) return unsigned is + impure function DistUnsigned ( Weight : integer_vector ; Exclude : integer_vector ; Size : natural ) return unsigned is begin return to_unsigned(DistInt(Weight, Exclude), Size) ; end function DistUnsigned ; - impure function DistSigned ( Weight : integer_vector; Exclude: integer_vector; Size : natural ) return signed is + impure function DistSigned ( Weight : integer_vector ; Exclude : integer_vector ; Size : natural ) return signed is begin return to_signed(DistInt(Weight, Exclude), Size) ; end function DistSigned ; @@ -1010,7 +1427,7 @@ package body RandomPkg is -- impure function DistValInt ( A : DistType ) return integer is variable DistArray : integer_vector(0 to A'length -1) ; - alias DistRecArray : DistType(DistArray'range) is A; + alias DistRecArray : DistType(DistArray'range) is A ; begin for i in DistArray'range loop DistArray(i) := DistRecArray(i).Weight ; @@ -1038,54 +1455,54 @@ package body RandomPkg is -- Distribution for sparse values with exclude values (so can skip last or last n) -- Always uses Uniform via DistInt -- - impure function DistValInt ( A : DistType; Exclude: integer_vector ) return integer is + impure function DistValInt ( A : DistType ; Exclude : integer_vector ) return integer is variable DistArray : integer_vector(0 to A'length -1) ; - alias DistRecArray : DistType(DistArray'range) is A; + alias DistRecArray : DistType(DistArray'range) is A ; begin for i in DistRecArray'range loop if inside(DistRecArray(i).Value, exclude) then - DistArray(i) := 0 ; -- exclude + DistArray(i) := 0 ; -- exclude else DistArray(i) := DistRecArray(i).Weight ; - end if; + end if ; end loop ; return DistRecArray(DistInt(DistArray)).Value ; end function DistValInt ; - impure function DistValSlv ( A : DistType; Exclude: integer_vector; Size : natural ) return std_logic_vector is + impure function DistValSlv ( A : DistType ; Exclude : integer_vector ; Size : natural ) return std_logic_vector is begin return std_logic_vector(to_unsigned(DistValInt(A, Exclude), Size)) ; end function DistValSlv ; - impure function DistValUnsigned ( A : DistType; Exclude: integer_vector; Size : natural ) return unsigned is + impure function DistValUnsigned ( A : DistType ; Exclude : integer_vector ; Size : natural ) return unsigned is begin return to_unsigned(DistValInt(A, Exclude), Size) ; end function DistValUnsigned ; - impure function DistValSigned ( A : DistType; Exclude: integer_vector; Size : natural ) return signed is + impure function DistValSigned ( A : DistType ; Exclude : integer_vector ; Size : natural ) return signed is begin return to_signed(DistValInt(A, Exclude), Size) ; end function DistValSigned ; -- - -- Large vector handling. + -- Large vector handling. -- impure function RandUnsigned (Size : natural) return unsigned is constant NumLoops : integer := integer(ceil(real(Size)/30.0)) ; constant Remain : integer := (Size - 1) mod 30 + 1 ; -- range 1 to 30 - variable RandVal : unsigned(1 to Size) ; + variable RandVal : unsigned(1 to Size) ; begin - if size = 0 then + if size = 0 then return NULL_UV ; -- Null array - end if ; + end if ; for i in 0 to NumLoops-2 loop RandVal(1 + 30*i to 30 + 30*i) := to_unsigned(RandInt(0, 2**30-1), 30) ; end loop ; - RandVal(1+30*(NumLoops-1) to Remain + 30*(NumLoops-1)) := to_unsigned(RandInt(0, 2**Remain-1), Remain) ; - return RandVal ; + RandVal(1+30*(NumLoops-1) to Remain + 30*(NumLoops-1)) := to_unsigned(RandInt(0, 2**Remain-1), Remain) ; + return RandVal ; end function RandUnsigned ; - + impure function RandSlv (Size : natural) return std_logic_vector is begin return std_logic_vector(RandUnsigned(Size)) ; @@ -1095,98 +1512,98 @@ package body RandomPkg is begin return signed(RandUnsigned(Size)) ; end function RandSigned ; - - + + impure function RandUnsigned (Max : unsigned) return unsigned is alias normMax : unsigned (Max'length downto 1) is Max ; variable Result : unsigned(Max'range) := (others => '0') ; - alias normResult : unsigned(normMax'range) is Result ; + alias normResult : unsigned(normMax'range) is Result ; variable Size : integer ; begin -- Size = -1 if not found or Max'length = 0 - Size := find_leftmost(normMax, '1') ; + Size := find_leftmost(normMax, '1') ; - if Size > 0 then - loop - normResult(Size downto 1) := RandUnsigned(Size) ; - exit when normResult <= Max ; - end loop ; + if Size > 0 then + loop + normResult(Size downto 1) := RandUnsigned(Size) ; + exit when normResult <= Max ; + end loop ; return Result ; -- = normResult with range same as Max - else - return resize("0", Max'length) ; - end if ; - end function RandUnsigned ; + else + return resize("0", Max'length) ; + end if ; + end function RandUnsigned ; -- Working version that scales the value -- impure function RandUnsigned (Max : unsigned) return unsigned is -- constant MaxVal : unsigned(Max'length+3 downto 1) := (others => '1') ; -- begin - -- if max'length > 0 then + -- if max'length > 0 then -- -- "Max'length+3" creates 3 guard bits -- return resize( RandUnsigned(Max'length+3) * ('0'&Max+1) / ('0'&MaxVal+1), Max'length) ; - -- else + -- else -- return NULL_UV ; -- Null Array - -- end if ; - -- end function RandUnsigned ; - + -- end if ; + -- end function RandUnsigned ; + impure function RandSlv (Max : std_logic_vector) return std_logic_vector is begin return std_logic_vector(RandUnsigned( unsigned(Max))) ; - end function RandSlv ; + end function RandSlv ; impure function RandSigned (Max : signed) return signed is begin if max'length > 0 then - assert (Max >= 0) report "%%RandomPkg RandSigned: Max < 0" severity FAILURE ; + assert (Max >= 0) report "%%RandomPkg RandSigned : Max < 0" severity FAILURE ; return signed(RandUnsigned( unsigned(Max))) ; else return NULL_SV ; -- Null Array - end if ; - end function RandSigned ; - - + end if ; + end function RandSigned ; + + impure function RandUnsigned (Min, Max : unsigned) return unsigned is - constant LEN : integer := maximum(Max'length, Min'length) ; + constant LEN : integer := maximum(Max'length, Min'length) ; begin - if LEN > 0 and Min <= Max then + if LEN > 0 and Min <= Max then return RandUnsigned(Max-Min) + Min ; - else - if Len > 0 then - report "%%RandomPkg RandUnsigned: Max < Min" severity FAILURE ; - end if ; - return NULL_UV ; - end if; - end function RandUnsigned ; + else + if Len > 0 then + report "%%RandomPkg RandUnsigned : Max < Min" severity FAILURE ; + end if ; + return NULL_UV ; + end if ; + end function RandUnsigned ; + - impure function RandSlv (Min, Max : std_logic_vector) return std_logic_vector is - constant LEN : integer := maximum(Max'length, Min'length) ; + constant LEN : integer := maximum(Max'length, Min'length) ; begin - if LEN > 0 and Min <= Max then + if LEN > 0 and Min <= Max then return RandSlv(Max-Min) + Min ; else - if Len > 0 then - report "%%RandomPkg RandSlv: Max < Min" severity FAILURE ; - end if ; - return NULL_SlV ; - end if ; - end function RandSlv ; - - + if Len > 0 then + report "%%RandomPkg RandSlv : Max < Min" severity FAILURE ; + end if ; + return NULL_SlV ; + end if ; + end function RandSlv ; + + impure function RandSigned (Min, Max : signed) return signed is - constant LEN : integer := maximum(Max'length, Min'length) ; + constant LEN : integer := maximum(Max'length, Min'length) ; begin - if LEN > 0 and Min <= Max then + if LEN > 0 and Min <= Max then return resize(RandSigned(resize(Max,LEN+1) - resize(Min,LEN+1)) + Min, LEN) ; else - if Len > 0 then - report "%%RandomPkg RandSigned: Max < Min" severity FAILURE ; - end if ; - return NULL_SV ; - end if ; - end function RandSigned ; + if Len > 0 then + report "%%RandomPkg RandSigned : Max < Min" severity FAILURE ; + end if ; + return NULL_SV ; + end if ; + end function RandSigned ; + - -- -- Convenience Functions. Resolve into calls into the other functions -- @@ -1195,10 +1612,10 @@ package body RandomPkg is return RandReal(0.0, 1.0) ; end function RandReal ; - impure function RandReal(Max: Real) return real is -- 0.0 to Max + impure function RandReal(Max : Real) return real is -- 0.0 to Max begin return RandReal(0.0, Max) ; - -- assert Max >= 0.0 report "RandReal: Range Error" severity FAILURE ; + -- assert Max >= 0.0 report "RandReal : Range Error" severity FAILURE ; -- return RandReal * Max ; end function RandReal ; @@ -1218,7 +1635,7 @@ package body RandomPkg is end function RandUnsigned ; - impure function RandSigned (Max : integer; Size : natural ) return Signed is + impure function RandSigned (Max : integer ; Size : natural ) return Signed is begin -- chose 0 to Max rather than -Max to +Max to be same as RandUnsigned, either seems logical return to_signed(RandInt(0, Max), Size) ; diff --git a/RandomPkg_user_guide.pdf b/RandomPkg_user_guide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..81239fcfda16252dbe397bdae88746d0665dce51 GIT binary patch literal 51280 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 literal 0 HcmV?d00001 diff --git a/packages/SortListPkg_int.vhd b/SortListPkg_int.vhd similarity index 85% rename from packages/SortListPkg_int.vhd rename to SortListPkg_int.vhd index 185affc..5d62fa2 100644 --- a/packages/SortListPkg_int.vhd +++ b/SortListPkg_int.vhd @@ -1,7 +1,7 @@ -- -- File Name: SortListPkg_int.vhd -- Design Unit Name: SortListPkg_int --- Revision: STANDARD VERSION, revision 2013.05 +-- Revision: STANDARD VERSION, revision 2014.01 -- -- Maintainer: Jim Lewis email: jim@synthworks.com -- Contributor(s): @@ -30,10 +30,11 @@ -- 4/2013 2013.04 No Changes -- 5/2013 2013.05 No changes of substance. -- Deleted extra variable declaration in procedure remove +-- 1/2014 2014.01 Added RevSort. Added AllowDuplicate paramter to Add procedure -- -- -- --- Copyright (c) 2008 - 2013 by SynthWorks Design Inc. All rights reserved. +-- Copyright (c) 2008 - 2014 by SynthWorks Design Inc. All rights reserved. -- -- Verbatim copies of this source file may be used and -- distributed without restriction. @@ -74,9 +75,10 @@ package SortListPkg_int is function inside (constant E : ElementType; constant A : in ArrayofElementType) return boolean ; impure function sort (constant A : in ArrayofElementType) return ArrayofElementType ; + impure function revsort (constant A : in ArrayofElementType) return ArrayofElementType ; type SortListPType is protected - procedure add ( constant A : in ElementType ) ; + procedure add ( constant A : in ElementType ; constant AllowDuplicate : Boolean := FALSE ) ; procedure add ( constant A : in ArrayofElementType ) ; procedure add ( constant A : in ArrayofElementType ; Min, Max : integer ) ; procedure add ( variable A : inout SortListPType ) ; @@ -95,6 +97,7 @@ package SortListPkg_int is procedure remove ( variable A : inout SortListPType ) ; impure function to_array (constant EraseList : boolean := FALSE) return ArrayofElementType ; + impure function to_rev_array (constant EraseList : boolean := FALSE) return ArrayofElementType ; end protected SortListPType ; end SortListPkg_int ; @@ -124,32 +127,38 @@ package body SortListPkg_int is variable HeadPointer : ListPointerType := NULL ; -- variable TailPointer : ListPointerType := NULL ; - procedure add ( constant A : in ElementType ) is + procedure add ( constant A : in ElementType ; constant AllowDuplicate : Boolean := FALSE ) is variable CurPtr, tempPtr : ListPointerType ; begin if HeadPointer = NULL then HeadPointer := new ListType'(A, NULL) ; - elsif A = HeadPointer.A then -- ignore duplicates - return ; - + if AllowDuplicate then + tempPtr := HeadPointer ; + HeadPointer := new ListType'(A, tempPtr) ; + end if ; elsif A < HeadPointer.A then tempPtr := HeadPointer ; HeadPointer := new ListType'(A, tempPtr) ; - else CurPtr := HeadPointer ; - loop - exit when CurPtr.NextPtr = NULL ; - exit when A < CurPtr.NextPtr.A ; - if A = CurPtr.NextPtr.A then return ; end if; -- exit + AddLoop : loop + exit AddLoop when CurPtr.NextPtr = NULL ; + exit AddLoop when A < CurPtr.NextPtr.A ; + if A = CurPtr.NextPtr.A then + if AllowDuplicate then + exit AddLoop ; -- insert + else + return ; -- return without insert + end if; + end if ; CurPtr := CurPtr.NextPtr ; - end loop ; + end loop AddLoop ; tempPtr := CurPtr.NextPtr ; CurPtr.NextPtr := new ListType'(A, tempPtr) ; end if ; end procedure add ; - + procedure add ( constant A : in ArrayofElementType ) is begin for i in A'range loop @@ -364,15 +373,37 @@ package body SortListPkg_int is return result ; end function to_array ; - end protected body SortListPType ; + impure function to_rev_array (constant EraseList : boolean := FALSE) return ArrayofElementType is + variable result : ArrayofElementType(Count downto 1) ; + begin + for i in 1 to Count loop + result(i) := Get(i) ; + end loop ; + if EraseList then + erase ; + end if ; + return result ; + end function to_rev_array ; + + end protected body SortListPType ; impure function sort (constant A : in ArrayofElementType) return ArrayofElementType is variable Result : SortListPType ; begin - Result.Add(A) ; + for i in A'range loop + Result.Add(A(i), TRUE) ; + end loop ; return Result.to_array(EraseList => TRUE) ; end function sort ; + impure function revsort (constant A : in ArrayofElementType) return ArrayofElementType is + variable Result : SortListPType ; + begin + for i in A'range loop + Result.Add(A(i), TRUE) ; + end loop ; + return Result.to_rev_array(EraseList => TRUE) ; + end function revsort ; end SortListPkg_int ; diff --git a/doc/CoveragePkg_release_notes.pdf b/doc/CoveragePkg_release_notes.pdf deleted file mode 100644 index 526a5911332e0a01e99a518620097054b558dd17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16962 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
7C$qfvzE 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

q~vkC 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 z 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 z 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 diff --git a/doc/RandomPkg_user_guide.pdf b/doc/RandomPkg_user_guide.pdf deleted file mode 100644 index 5179c88bfa519c570e953adb9d93ecfa3a9ec981..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44611 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 z 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