.. _release_notes: Release notes ============= Release history and changelog for the hdl-modules project. We follow the `semantic versioning `__ scheme ``MAJOR.MINOR.PATCH``: * ``MAJOR`` is bumped when incompatible API changes are made. * ``MINOR`` is bumped when functionality is added in a backward-compatible manner. * ``PATCH`` is bumped when backward-compatible bug fixes are made. Unreleased (YYYY-MM-DD) ----------------------- `Changes since previous release `__ Nothing here yet. 6.1.0 (25 march 2025) --------------------- `Changes since previous release `__ Added * Add :ref:`math.truncate_round_signed`. * Add :ref:`common.event_aggregator`. * Add ``write_done`` interrupt aggregation mechanism to :ref:`module_dma_axi_write_simple`. 6.0.0 (18 january 2025) ----------------------- `Changes since previous release `__ Added * Add :ref:`module_dma_axi_write_simple`. * Add :ref:`common.assign_last`. * Add :ref:`resync.resync_rarely_valid` and :ref:`resync.resync_rarely_valid_lutram`. * Add :ref:`resync.resync_sticky_level`. * Add :ref:`resync.resync_twophase_lutram`. Fixed * Fix bug where :ref:`fifo.asynchronous_fifo` constraint would fail on UltraScale+ devices when FIFO mapped to LUTRAM primitives. Breaking changes * Rename ``resync_slv_level_coherent`` to :ref:`resync.resync_twophase`. * Rename ``resync_slv_handshake`` to :ref:`resync.resync_twophase_handshake`. * Rename :ref:`common.common_pkg` function ``ite`` to ``if_then_else``. * Rename old ``reg_file`` module to :ref:`register_file ` and rework it. Note that this change is compatible with `hdl-registers `__ version 7.0.0 and later. If you use hdl-registers, the changes should be transparent. The changes are: * Rename "reg" to "register", "idx" to "index", "reg_type" to "mode" for all files, types, constants. * Add ``utilized_width`` field to register definition type. * Optimize resource utilization of :ref:`register_file.axi_lite_register_file`. * Remove unused functions. 5.0.1 (9 july 2024) ------------------- `Changes since previous release `__ Added * Add ``resync_slv_handshake``. * Add ``enable_iob`` generic to :ref:`common.debounce`. Bug fixes * Respect the ``include_unisim`` flag in ``module_hard_fifo.get_simulation_files`` method. * Ensure deterministic latency of :ref:`resync.resync_pulse`, ``resync_slv_level_coherent``, and :ref:`common.debounce`. Other changes * Waive irrelevant Vivado CDC warnings to make reports more clean. 5.0.0 (8 may 2024) ------------------ `Changes since previous release `__ Added * Add :ref:`module_sine_generator`. * Add :ref:`module_lfsr`. * Add :ref:`math.saturate_signed`. Internal changes * Optimize library and package imports in a way that decreases simulation time by 20-40% for small testbenches using GHDL. Breaking changes * Remove protocol checking from :ref:`bfm.handshake_master` and :ref:`bfm.handshake_slave`. If protocol checking is still wanted in places where these are instantiated, an :ref:`common.axi_stream_protocol_checker` instance alongside is recommended. * Split ``bfm.bfm_pkg`` into * :ref:`bfm.stall_bfm_pkg` * :ref:`bfm.axi_slave_bfm_pkg` * :ref:`bfm.integer_array_bfm_pkg` * :ref:`bfm.queue_bfm_pkg` * :ref:`bfm.memory_bfm_pkg`. * Change ``stall_config`` generic of * :ref:`bfm.handshake_master` * :ref:`bfm.handshake_slave` * :ref:`bfm.axi_stream_master` * :ref:`bfm.axi_stream_slave` * :ref:`bfm.axi_read_master` * :ref:`bfm.axi_write_master` to use type ``stall_configuration_t`` from :ref:`bfm.stall_bfm_pkg`. 4.0.0 (25 january 2024) ----------------------- `Changes since previous release `__ Added * Implement our own lightweight :ref:`common.axi_stream_protocol_checker` that greatly reduces CPU cycles consumed during simulation. * Add :ref:`axi.axi_read_range_checker` and :ref:`axi.axi_write_range_checker`. * Add ``user`` port to :ref:`common.width_conversion`. Fixes * Fix bug in :ref:`register_file.axi_lite_register_file` where a non-zero default value for a register of mode ``wpulse`` or ``r_wpulse`` would only be asserted on ``regs_down`` the very first clock cycle. * Fix bug where :ref:`axi.axi_read_throttle` could lower ``ARVALID`` without an AR transaction having occurred. Breaking changes * Remove unused ``addr_width`` generic from :ref:`bfm.axi_read_master` and :ref:`bfm.axi_write_master`. * Rename :ref:`axi_lite.axi_lite_mux` generic ``slave_addrs`` to ``base_addresses`` and change type to ``addr_vec_t``, i.e. a list of base addresses. Same for :ref:`axi_lite.axi_lite_to_vec` generic ``axi_lite_slaves``. The address mask is now calculated internally. * Rename optional :ref:`bfm.axi_write_master` generic ``set_axi3_w_id`` to ``enable_axi3``. * Remove optional ``rule_4_performance_check_max_waits`` generic from :ref:`bfm.handshake_master` and :ref:`bfm.handshake_slave` which is not needed by new :ref:`common.axi_stream_protocol_checker`. * Break :ref:`axi ` module into :ref:`axi_lite ` and :ref:`axi_stream `. * Move from :ref:`axi ` to :ref:`axi_lite `: * :ref:`axi_lite.axi_lite_cdc`. * :ref:`axi_lite.axi_lite_mux`. * :ref:`axi_lite.axi_lite_pipeline`. * :ref:`axi_lite.axi_lite_pkg`. * :ref:`axi_lite.axi_lite_simple_read_crossbar`. * :ref:`axi_lite.axi_lite_simple_write_crossbar`. * :ref:`axi_lite.axi_lite_to_vec`. * :ref:`axi_lite.axi_to_axi_lite_vec`. * :ref:`axi_lite.axi_to_axi_lite`. * Move from :ref:`axi ` to :ref:`axi_stream `: * :ref:`axi_stream.axi_stream_fifo`. * :ref:`axi_stream.axi_stream_pkg`. 3.0.2 (27 september 2023) ------------------------- `Changes since previous release `__ Added * Add ``num_bits_needed_signed`` to :ref:`math.math_pkg`. 3.0.1 (27 september 2023) ------------------------- `Changes since previous release `__ Added * Add ``stable_rising_edge`` and ``stable_falling_edge`` ports to :ref:`common.debounce`. * Add :ref:`common.handshake_merger`. 3.0.0 (2 march 2023) -------------------- `Changes since previous release `__ Added * Add :ref:`common.handshake_mux`. * Add :ref:`common.clean_packet_dropper`. * Add :ref:`common.time_pkg`. Bug fixes * Fix bug where :ref:`fifo.fifo` in packet mode could propagate erroneous data when a packet of length one was written to an almost empty FIFO. * Fix bug where :ref:`fifo.fifo` and :ref:`fifo.asynchronous_fifo` in packet mode could have bubble cycles in packet readout when output register was enabled. * Fix bug where :ref:`bfm.axi_stream_master`, :ref:`bfm.axi_write_master` and :ref:`bfm.axi_read_master` would not drive bus with ``'X'`` when ``valid`` was low. Breaking changes * Rename :ref:`bfm.axi_stream_slave` port ``num_bursts_checked`` to ``num_packets_checked``. * Rename :ref:`common.width_conversion` generic ``support_unaligned_burst_length`` to ``support_unaligned_packet_length``. * Remove the ``remove_strobed_out_invalid_data`` generic from :ref:`bfm.axi_stream_slave` and :ref:`bfm.axi_write_slave`. This behavior is now always enabled. * Change to use unresolved VHDL types consistently. * ``std_ulogic`` instead of ``std_logic``. * ``std_ulogic_vector`` instead of ``std_logic_vector``. * ``u_signed`` instead of ``signed``. * ``u_unsigned`` instead of ``unsigned``. * Move ``to_period`` and ``to_frequency_hz`` functions from :ref:`common.types_pkg` to :ref:`common.time_pkg`. * Remove erroneous assignment of ``asynchronous_fifo`` port ``read_level`` when packet mode is enabled. * Remove the rarely used ``axi_w_fifo`` port ``read_level`` which does not have valid value in all configurations. * Remove the rarely used ``axi_write_cdc`` port ``output_data_fifo_level`` which does not have valid value in all configurations. 2.0.0 (24 august 2022) ---------------------- `Changes since previous release `__ Added * Add :ref:`common.handshake_pipeline` generic ``pipeline_data_signals`` with default value ``true``, and implement mode that pipelines control signals but not data. * Add :ref:`fifo.fifo` and :ref:`fifo.asynchronous_fifo` generic ``enable_output_register`` with default value ``false``, which adds a pipeline stage for RAM output data. * Add :ref:`bfm.axi_read_master` and :ref:`bfm.axi_write_master` BFMs that create and verify AXI transactions. * Add :ref:`axi.axi_read_pipeline` and :ref:`axi.axi_write_pipeline` blocks that pipeline an AXI bus. Bug fixes * Fix full throughput in :ref:`common.keep_remover` when not all input lanes are strobed. * Fix bug in :ref:`axi.axi_write_throttle` where rogue ``AW`` transactions could occur. * Fix handling of handshake signals in :ref:`common.handshake_splitter` to be AXI-Stream compliant. Breaking changes * Rework :ref:`common.handshake_splitter` to use ``std_logic_vector`` for ``output_ready`` and ``output_valid``. Introduce mandatory generic ``num_interfaces``. * Change :ref:`common.handshake_pipeline` and :ref:`axi_lite.axi_lite_pipeline` generics ``allow_poor_input_ready_timing`` with default value ``false`` to ``pipeline_control_signals`` with default value ``True``. * Rename :ref:`bfm.axi_stream_slave` and :ref:`bfm.handshake_slave` generic ``remove_strobed_out_dont_care`` to ``remove_strobed_out_invalid_data``. * Drive output signals with ``'X'`` per default when ``valid`` is low in :ref:`bfm.axi_stream_master`. * Rename generics ``data_width_bits`` to ``data_width``, ``id_width_bits`` to ``id_width``, and ``strobe_unit_width_bits`` to ``strobe_unit_width_bits`` in :ref:`bfm.axi_stream_master` and :ref:`bfm.axi_stream_slave`. * Remove default value for ``id_width`` generic, which could potentially hide errors, in :ref:`bfm.axi_slave`, :ref:`bfm.axi_read_slave` and :ref:`bfm.axi_write_slave`. Now the user has to set an explicit value for every instance. * Rework :ref:`axi.axi_write_throttle` concept completely, as part of a bug fix. It is simpler and more light weight now. The ``data_fifo_level`` port as well as all generics have been removed. * Rename generic ``pipeline`` to ``pipeline_axi_lite`` in :ref:`axi_lite.axi_to_axi_lite_vec`. 1.0.0 (20 october 2021) ----------------------- `Changes since previous release `__ Use ``get_hdl_modules()`` call in all ``module_*.py``. 0.0.1 (19 october 2021) ----------------------- First release of the standalone ``hdl-modules`` project. ``modules`` folder copied directly from `tsfpga `__ release ``9.0.0``. See `tsfpga release notes `__ for changelog of earlier releases.