Release notes
Release history and changelog for the hdl-registers project.
We follow the semantic versioning scheme MAJOR.MINOR.PATCH:
MAJORis bumped when incompatible API changes are made.MINORis bumped when functionality is added in a backward-compatible manner.PATCHis bumped when backward-compatible bug fixes are made.
Unreleased (YYYY-MM-DD)
Changes since previous release
Nothing here yet.
8.1.0 (22 october 2025)
Changes since previous release
Added
Add numerical interpretation for bit vector fields to data file parser (to support signed, unsigned fixed-point and signed fixed-point).
Fixes
Add a few missing range checks in generated C++ code.
Remove a few moot range checks in generated C++ code.
8.0.1 (17 may 2025)
Changes since previous release
Fixes
Add missing reserved keyword check.
8.0.0 (29 april 2025)
Changes since previous release
Breaking changes
Rework generated C++ API to use C++
structwith field values instead of rawuint32_t. See C++ generator for usage details.get/set_<register>methods now return/take astructwith field values.New alternative methods
get/set_<register>_rawreturn/take a rawuint32_tregister value instead of the casted structure.
get/set_<field>methods work just as before.get_<field>_from_valuemethods are removed.
Represent
Bitfield values asboolin generated C++ API.Represent
BitVectorfield values with numerical interpretationSignedasint32_tin generated C++ API. AlsoUnsignedFixedPointandSignedFixedPointasfloat/double.
Breaking internal API changes
Move
Registerpropertiesutilized_widthanddefault_valuetoRegisterCodeGeneratorHelpers.register_utilized_width()andRegisterCodeGeneratorHelpers.register_default_value_uint().
7.3.0 (1 april 2025)
Changes since previous release
Added
Add support for specifying a numeric value as the default value for Bit vector fields.
Add synchronous reset support to generated VHDL AXI-Lite register file.
Internal updates
Simplify dependencies of generated VHDL code.
7.2.0 (14 march 2025)
Changes since previous release
Added
Add SystemVerilog generator. The generator is in a beta state and is subject to API changes.
7.1.1 (11 march 2025)
Changes since previous release
Fixed
Bump pegged tsfpga version.
7.1.0 (28 february 2025)
Changes since previous release
Added
Add full RST and LaTeX math support in HTML generator by using
docutilsrenderer.
Fixes
Fix compiler warning due to redundant assertion in C++ code.
7.0.4 (19 february 2025)
Changes since previous release
Fixes
Print only file name (not full path) in C++ assertion macros.
7.0.3 (11 february 2025)
Changes since previous release
Fixes
Performance improvements, typing fixes, and internal refactoring as suggested by
rufflinter.
7.0.2 (28 january 2025)
Changes since previous release
Fixed
Fix bug in VHDL register package generator where some float constants would yield a compilation error related to E notation.
7.0.1 (18 january 2025)
Changes since previous release
Fixed
Remove old
VhdlAxiLiteWrapperGeneratorartifacts from file system if they exist, to avoid confusion and compilation errors.
7.0.0 (18 january 2025)
Changes since previous release
Added
Add custom assertion macro call for C++ runtime checks. Adds the possibility of user-defined handling of errors. See Assertion macros.
Add
Register.utilized_widthproperty.
Breaking changes
Generated VHDL code now requires hdl-modules version 6.0.0 or greater.
The user must now implement an
assertion_handlerfunction and pass it as a constructor argument to the generated C++ class. See Assertion macros.Change type of C++ constructor
base_addressargument to beuintptr_t.Rename
VhdlAxiLiteWrapperGeneratoroutput file and entity name from<name>_reg_fileto<name>_register_file_axi_lite.
Changes
Significant resource optimizations of generated VHDL code.
The
RegisterCodeGenerator.create()method now includes the header lines in the generated code on its own. No need to callRegisterCodeGenerator.header()inRegisterCodeGenerator.get_code()in custom generators anymore.
6.2.0 (5 december 2024)
Changes since previous release
Added
Add runtime check that provided C++ bit field setter value is in range.
Fixes
Fix error when converting small negative values (sfixed) to binary in
numerical_interpretation.to_unsigned_binary().
6.1.0 (13 november 2024)
Changes since previous release
Added
Add simulation read/write functions for register values as
integerandregister_ttoVhdlSimulationReadWritePackageGenerator.Add simulation check functions for register values as
integer,register_tand native VHDL record toVhdlSimulationCheckPackageGenerator.
6.0.1 (27 august 2024)
Changes since previous release
Fixes
Fix PyPI release version requirement conflict related to tsfpga.
6.0.0 (25 august 2024)
Changes since previous release
Breaking changes
Update data file (TOML, JSON, etc) format in a way that is not compatible with old files. See New data file format in version 6.0.0. Note that old files are automatically updated. This change enables:
Fully user-configurable ordering and grouping of registers and register arrays.
Fully user-configurable ordering and grouping of fields in a register.
Rename
RegisterList.get_register()argumentnametoregister_name.
Breaking internal API changes
Remove
RegisterFieldattributesrange_stranddefault_value_str. This information is now calculated internally in the HTML generator class.Rename
Enumeration.set_default_value()argumentvalueto the more correctname.Rework register mode handling to use objects with properties instead of magic strings.
Change
Register.__init__(),RegisterList.append_register(), andRegisterArray.append_register()argumentsmodeto be of typeRegisterModeinstead ofstr.Move
RegisterModetoregister_modeandREGISTER_MODEStoregister_modes.Rename
RegisterModepropertymode_readabletoname.Remove
Registerpropertiesis_bus_readableandis_bus_writeablein favor ofRegister.mode.Use
Register.modeinstead of generator-specific properties/checkers inVhdlGeneratorCommon.
Rework the system for numerical interpretation of bit vector field values.
Remove
field_typemember fromBit,Enumeration, andInteger.Rename
FieldTypeclass toNumericalInterpretation.Rename
field_typemember ofBitVectortoBitVector.numerical_interpretation.Rename
field_typeargument ofBitVector.__init__()andRegister.append_bit_vector()tonumerical_interpretation.Remove
min_valueandmax_valueproperties fromBitVector. UseBitVector.numerical_interpretationinstead.Remove
bit_widthargument fromNumericalInterpretation.min_value(),NumericalInterpretation.max_value,NumericalInterpretation.convert_from_unsigned_binary(), andNumericalInterpretation.convert_to_unsigned_binary(). Addbit_widthargument toUnsigned.__init__()andSigned.__init__().Remove
is_signedandmax_binary_valueproperties ofRegisterField.is_signedis still present forInteger. Bit vectors should useBitVector.numerical_interpretation.
5.2.0 (7 may 2024)
Changes since previous release
Added
Add Python generator to read/write/print register and field values on a target device. See usage instructions here.
Requires tsfpga version 12.3.2 or later.
5.1.3 (3 april 2024)
Changes since previous release
Fixes
Peg
rtomldependency package to 0.9.X so that pip install works on 64-bit Windows.
5.1.2 (11 march 2024)
Changes since previous release
Fixes
Use consistent number formatting of fixed-point field values in
VhdlSimulationCheckPackageGeneratorerror messages.
5.1.1 (8 march 2024)
Changes since previous release
Changes
Improve timeout error message from
VhdlSimulationWaitUntilPackageGenerator.Print relative file path when generating artifacts.
Requires tsfpga version 12.3.1 or later.
5.1.0 (5 february 2024)
Changes since previous release
Added
Add generation of simulation support package that checks field values to
VhdlSimulationCheckPackageGenerator.Uses VUnit Verification Components for bus operations.
Generates a
check_equalprocedure for each field in each readable register.Use native VHDL type for value representation.
5.0.0 (25 january 2024)
Changes since previous release
Fixes
Fix bug where
RegisterField.get_value()andRegisterField.set_value()would crash for negative-range integer fields.Fix “multiple definition” bug in generated C header for a string constant.
Fix C++ field setters on registers of mode
w,wpulseandr_wpulsenot taking into account non-zero default values of other fields.Decrease
RegisterList.object_hash()calculation time by 40%. Improves performance ofRegisterCodeGenerator.should_create().Improve TOML parsing performance by a factor of ~8 by switching to
rtomlinstead oftomlipackage.
Added
Add support for parsing JSON and YAML data files, see here.
Add generation of register records with natively-typed members for each register field to
VhdlRecordPackageGenerator.Add generation of simulation support package to
VhdlSimulationReadWritePackageGenerator.Uses VUnit Verification Components for bus operations.
Uses the natively typed records from
VhdlRecordPackageGeneratorfor values.Generates the following procedures:
Read/write for each register.
Read/write for each field.
Add generation of simulation support package to
VhdlSimulationWaitUntilPackageGenerator.Uses VUnit Verification Components for bus operations.
Uses the natively typed records from
VhdlRecordPackageGeneratorfor values.Generates the following procedures:
Wait until register equals for each register.
Wait until field equals for each register.
Add generation of a wrapper around axi_lite_register_file.vhd to
VhdlAxiLiteWrapperGenerator.Sets correct generics and uses the natively typed records from
VhdlRecordPackageGeneratorfor its up/down register values.
Add checks to
Integer.get_value()andInteger.set_value()that values are within the configured range of the field.
Breaking changes
Move
RegisterParserto sub-packagehdl_registers.parser. Break outfrom_toml()to separate Python modulehdl_registers.parser.toml.Rename
module_nameargument ofRegisterParserandfrom_toml()toname.Rename VHDL field conversion function for enumerations from
to_<field name>_slvtoto_slv.Remove C++ interface header constant
<register array name>_array_length. Information is instead available as an attributefpga_regs::<module name>::<register array name>::array_length.Rework code generator API for better performance and scalability.
Remove public members
copy_source_definition,generated_info,generated_source_infofromRegisterList.Remove
create_vhdl_packagemethod fromRegisterList. Movehdl_registers.register_vhdl_generator.RegisterVhdlGeneratorclass toVhdlRegisterPackageGeneratorand update API. See VHDL generator for usage details.Remove
create_c_headermethod fromRegisterList. Movehdl_registers.register_c_generator.RegisterCGeneratorclass toCHeaderGeneratorand update API. See C generator for usage details.Remove
create_cpp_interface,create_cpp_headerandcreate_cpp_implementationmethods fromRegisterList. Movehdl_registers.register_cpp_generator.RegisterCppGeneratorclass toCppInterfaceGenerator,CppHeaderGenerator, andCppImplementationGenerator, and update API. See C++ generator for usage details.Remove
create_html_page,create_html_register_tableandcreate_html_constant_tablemethods fromRegisterList. Movehdl_registers.register_html_generator.RegisterHtmlGeneratorclass toHtmlPageGenerator,HtmlRegisterTableGenerator, andHtmlConstantTableGenerator, and update API. See HTML generator for usage details.Remove
create_python_classmethod fromRegisterList. Movehdl_registers.register_python_generator.RegisterPythonGeneratorclass toPythonPickleGeneratorand update API. See Python generator for usage details.
4.1.0 (2 november 2023)
Changes since previous release
Added
Add support for negative-range integer fields.
4.0.2 (18 october 2023)
Changes since previous release
Fix required Python version in PyPI package.
4.0.1 (11 october 2023)
Changes since previous release
Fix PyPI link to release notes.
4.0.0 (11 october 2023)
Changes since previous release
Fixes
Use
doubledata type for generated C/C++ header floating-point constants. Matches the precision in the generated VHDL code.
Breaking changes
Break up
hdl_registers.Constantclass intoBooleanConstant,FloatConstant,IntegerConstantandStringConstantthat are placed in newconstantsub-package.Move
BitVector,BitandRegisterFieldclasses andregister_field_typemodule from top-level tofieldsub-package.Move
HtmlTranslator,RegisterCGenerator,RegisterCodeGenerator,RegisterCppGenerator,RegisterHtmlGenerator,RegisterPythonGeneratorandRegisterVhdlGeneratorclasses from top-level togeneratorsub-package.Rename
RegisterField.rangetoRegisterField.range_str().Remove default value
description=Nonefor argument toRegisterList.add_constant().Remove public method
vhdl_typedeffromFieldTypeclass. This logic is instead moved toRegisterVhdlGenerator.Remove the largely unused “Value (hexadecimal)” constant information column from HTML generator.
Remove textual descriptions of registers/arrays/fields/constants from generated C header.
Added
Add support for unsigned bit vector constants via the
UnsignedVectorConstantclass.Add support for ranged integer register fields via the
Integerclass.Add support for enumeration register fields via the
Enumerationclass.
3.1.0 (25 april 2023)
Changes since previous release
Added
Add support for register constants of type string.
3.0.2 (4 march 2023)
Changes since previous release
Added
Add more comments to generated VHDL.
3.0.1 (3 march 2023)
Changes since previous release
Update project slogan on PyPI to fit within 98 characters.
3.0.0 (3 march 2023)
Changes since previous release
Added
Add field setters and getters to
RegisterCppGenerator.Add
*_MASK_INVERSEdefines for fields toRegisterCGenerator.Add support for register constants of boolean and floating point type.
Breaking changes
Remove the field
_maskand_shiftpublic constants from the generated C++ interface header. These are not needed now that setters and getters are available.Change to use unresolved VHDL types in
RegisterVhdlGeneratorclass.std_ulogic_vectorinstead ofstd_logic_vector.u_signedinstead ofsigned.u_unsignedinstead ofunsigned.
Changes
Increase TOML parsing performance by using
tomliPython package instead oftomlkit.
2.1.0 (1 april 2022)
Changes since previous release
Added
Add
.RegisterList.create_python_classmethod to create a Python pickle file. Read more here.Add optional
field_typeargument toRegisterList.append_register()andRegister.Add support for generating
ieee.fixed_pkgtypes inRegisterVhdlGeneratorclass based on the registerfield_type.
Fixed
Fix bug where setting default value for bit 31 in a register could fail.
2.0.1 (22 october 2021)
Changes since previous release
Second release to test PyPI deploy. Functionality is identical to tsfpga version 9.0.0.
2.0.0 (22 october 2021)
Initial release to test PyPI deploy. Functionality is identical to tsfpga version 9.0.0.