# libvhdl A LGPLv3 licensed library of reusable components for VHDL designs and testbenches ##sim (Non) synthesible components for testbenches ##### AssertP Package with various assertion procedures. * `assert_true(x[, str, level])` checks if boolean x = false * `assert_false(x[, str, level])` checks if boolean x = false * `assert_equal(x, y[, str, level])` checks if x = y * `assert_unequal(x, y[, str, level])` checks if x /= y All of the assert_* procedures have following optional parameters: * `str` print string str to console instead implemented one * `level` severity level (note, warning, error, failure) ##### SimP Package with various components general useful for simulation * `wait_cycles(x, n)` waits for n rising edges on std_logic signal x * `spi_master()` configurable master for SPI protocol, supports all cpol/cpha modes * `spi_slave()` configurable slave for SPI protocol, supports all cpol/cpha modes ##### StringP Package with various functions to convert to string * `to_char(x)` returns string with binary value of std_logic x * `to_string(x)` returns string with binary value of std_logic_vector x ##### QueueP Package with various implementations of queue types: * `t_simple_queue` simple array based FIFO queue * `t_list_queue` linked list FIFO queue using access types ## syn Synthesizable components for implementing in FPGA ##### SpiSlaveE Configurable SPI slave with support modes 0-3 and simple VAI local backend. Implementation results: * Microsemi SmartFusion2 (speed grade std): 49 logic elements, 397 MHz on * Xilinx Kintex7 (speed grade -3): 24 slices, 649 MHz on ##test Unit tests for each component ##### QueueT Unit tests for components of QueueP package ##### SimT Unit tests for components of SimP package ##### SpiT Unit tests for SpiSlave component ##### StringT Unit tests for components of SimP package ## Dependencies To run the tests, you have to install GHDL. You can get it from [http://sourceforge.net/projects/ghdl-updates/](http://sourceforge.net/projects/ghdl-updates/). ## Building Type `make` and you should see the successfully running tests ``` $ make ghdl -a --std=02 ../sim/QueueP.vhd QueueT.vhd ghdl -e --std=02 QueueT ghdl -r --std=02 QueueT QueueT.vhd:52:5:@0ms:(report note): INFO: t_simple_queue test finished successfully QueueT.vhd:87:5:@0ms:(report note): INFO: t_list_queue test finished successfully ```