A new stack implementation is added. It's a protected type t_stack,
included in the StackP package. It has the same methods like the
t_queue types but implements a stack logic instead of a queue one.
The t_stack type is tested in the StackT testbench.
There is a new procedure merge() to merge the content of 2 diicts into
a third one. This procedure is defined outside of the t_dict protected
type.
Also a new get() function returning the data as std_logic_vector.
is added. It is needed to save the data in a unconstrained access type
which is used inside the merge() procedure. This get() function is
public. It can be used when no error return value is needed as you
get with the get() procedure. Instead an assertion is triggered when
the given key isn't found.
Three new methods to support iteration over the keys stored in the
dictionary:
* setFirst: set start of iterator to begin og dictionary
* setLast: set start of iterator to end of dictionary
* iter(dir): iterate over keys in dictionary in dir direction
The key pointer type t_dict_key_ptr is now moved to the public part
of the DictP package to support using in testbench code when saving the
keys with different lengths from iter() function.
Error return values are now of type t_dict_error with 3 possible values:
(NO_ERROR, KEY_INVALID, KEY_NOT_FOUND)
The new checker monitor WishBoneBusMonitorP checks that address & data
on the WishBone bus are equal to the ones wihich were given at the local
port of the WishBoneMasterE unit to initiate the transfer.
New testcases for checking correctness of removing and overwriting
entries in dictionary. Furthermore the hasKey() method is tested and
the clearing of the dictionary with the clear() method
A new packae DictP.vhd is added which contains a simple implementation
of a dictionary type. It consists of a protected type t_dict which
contains procedures & functions which serve as methods to interact with
the protected type. The t_dict type is realised by a (double)
linked-list using access types.
The key type is string of arbitrary size, the data type is
std_logic_vector of arbitrary size. The t_dict type provides following
interface methods:
* set: set a key/value pair
* get: get a key/value pair
* del: remove a key/value pair
* init: initialise the dictionary
* clear: remove all key/value pairs
* hasKey: check if a key exists in the dictionary
* size: get number of key/value pairs
By using an actual version of GHDL, we don't need the VHDL-08
proposal libraries anymore. Enough features of VHDL-08 are integrated
in GHDL to compile OSVVM and our testbenches
By using an std_logic_vector access type for the data field in the
queue record, we cann now push data with any arbitrary length in the
t_queue object. Mixed lengths are also possible now :)