Coverage for hdl_registers/generator/test/test_register_code_generation.py: 100%
60 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 11:11 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 11:11 +0000
1# --------------------------------------------------------------------------------------------------
2# Copyright (c) Lukas Vik. All rights reserved.
3#
4# This file is part of the hdl-registers project, an HDL register generator fast enough to run
5# in real time.
6# https://hdl-registers.com
7# https://github.com/hdl-registers/hdl-registers
8# --------------------------------------------------------------------------------------------------
10"""
11Some happy path tests to show that all register code generation can run without error.
12"""
14import pytest
15import tsfpga
16from tsfpga.examples.example_env import get_default_registers
18from hdl_registers import HDL_REGISTERS_DOC, HDL_REGISTERS_TESTS
19from hdl_registers.generator.c.header import CHeaderGenerator
20from hdl_registers.generator.cpp.header import CppHeaderGenerator
21from hdl_registers.generator.cpp.implementation import CppImplementationGenerator
22from hdl_registers.generator.cpp.interface import CppInterfaceGenerator
23from hdl_registers.generator.html.constant_table import HtmlConstantTableGenerator
24from hdl_registers.generator.html.page import HtmlPageGenerator
25from hdl_registers.generator.html.register_table import HtmlRegisterTableGenerator
26from hdl_registers.generator.python.accessor import PythonAccessorGenerator
27from hdl_registers.generator.python.pickle import PythonPickleGenerator
28from hdl_registers.generator.vhdl.axi_lite.wrapper import VhdlAxiLiteWrapperGenerator
29from hdl_registers.generator.vhdl.record_package import VhdlRecordPackageGenerator
30from hdl_registers.generator.vhdl.register_package import VhdlRegisterPackageGenerator
31from hdl_registers.generator.vhdl.simulation.read_write_package import (
32 VhdlSimulationReadWritePackageGenerator,
33)
34from hdl_registers.generator.vhdl.simulation.wait_until_package import (
35 VhdlSimulationWaitUntilPackageGenerator,
36)
37from hdl_registers.parser.toml import from_toml
39# Test with all the example TOML files that we have available
40REGISTER_LISTS = [
41 from_toml(
42 name="ddr_buffer",
43 toml_file=tsfpga.TSFPGA_EXAMPLE_MODULES / "ddr_buffer" / "regs_ddr_buffer.toml",
44 default_registers=get_default_registers(),
45 ),
46 from_toml(name="caesar", toml_file=HDL_REGISTERS_TESTS / "regs_test.toml"),
47 from_toml(
48 name="example",
49 toml_file=HDL_REGISTERS_DOC / "sphinx" / "rst" / "user_guide" / "toml" / "toml_format.toml",
50 ),
51]
54@pytest.mark.parametrize("register_list", REGISTER_LISTS)
55def test_can_generate_vhdl_without_error(tmp_path, register_list):
56 VhdlRegisterPackageGenerator(register_list, tmp_path).create()
57 assert (tmp_path / f"{register_list.name}_regs_pkg.vhd").exists()
59 VhdlRecordPackageGenerator(register_list, tmp_path).create()
60 assert (tmp_path / f"{register_list.name}_register_record_pkg.vhd").exists()
62 VhdlSimulationReadWritePackageGenerator(register_list, tmp_path).create()
63 assert (tmp_path / f"{register_list.name}_register_read_write_pkg.vhd").exists()
65 VhdlSimulationWaitUntilPackageGenerator(register_list, tmp_path).create()
66 assert (tmp_path / f"{register_list.name}_register_wait_until_pkg.vhd").exists()
68 VhdlAxiLiteWrapperGenerator(register_list, tmp_path).create()
69 assert (tmp_path / f"{register_list.name}_register_file_axi_lite.vhd").exists()
72@pytest.mark.parametrize("register_list", REGISTER_LISTS)
73def test_can_generate_c_without_error(tmp_path, register_list):
74 CHeaderGenerator(register_list, tmp_path).create()
75 assert (tmp_path / f"{register_list.name}_regs.h").exists()
77 CHeaderGenerator(register_list, tmp_path, file_name="apa.h").create()
78 assert (tmp_path / "apa.h").exists()
81@pytest.mark.parametrize("register_list", REGISTER_LISTS)
82def test_can_generate_cpp_without_error(tmp_path, register_list):
83 CppInterfaceGenerator(register_list, tmp_path).create()
84 assert (tmp_path / f"i_{register_list.name}.h").exists()
86 CppHeaderGenerator(register_list, tmp_path).create()
87 assert (tmp_path / f"{register_list.name}.h").exists()
89 CppImplementationGenerator(register_list, tmp_path).create()
90 assert (tmp_path / f"{register_list.name}.cpp").exists()
93@pytest.mark.parametrize("register_list", REGISTER_LISTS)
94def test_can_generate_html_without_error(tmp_path, register_list):
95 HtmlRegisterTableGenerator(register_list, tmp_path).create()
96 assert (tmp_path / f"{register_list.name}_register_table.html").exists()
98 HtmlConstantTableGenerator(register_list, tmp_path).create()
99 assert (tmp_path / f"{register_list.name}_constant_table.html").exists()
101 HtmlPageGenerator(register_list, tmp_path).create()
102 assert (tmp_path / f"{register_list.name}_regs.html").exists()
105@pytest.mark.parametrize("register_list", REGISTER_LISTS)
106def test_can_generate_python_without_error(tmp_path, register_list):
107 PythonPickleGenerator(register_list, tmp_path).create()
108 assert (tmp_path / f"{register_list.name}.py").exists()
110 PythonAccessorGenerator(register_list, tmp_path).create()
111 assert (tmp_path / f"{register_list.name}_accessor.py").exists()