labview-fpga-hdl-tools 2.0.0.dev6__tar.gz → 2.0.0.dev7__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/PKG-INFO +1 -1
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/create_modelsim_project.py +62 -46
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/launch_modelsim.py +10 -9
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/sim_modelsim.py +10 -9
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/pyproject.toml +1 -1
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/LICENSE +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/README.md +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/.gitignore +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/__init__.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/__main__.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/check_syntax.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/command_config.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/command_hooks.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/common.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/compile_modelsim_lib.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/compile_project.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/create_lvbitx.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/create_vivado_project.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/gen_labview_target_plugin.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/generate_vhdl.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/get_window_netlist.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/install_dependencies.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/install_labview_target_plugin.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/launch_vivado.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/migrate_clip.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/nihdlsettings_default.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/process_constraints.py +0 -0
- {labview_fpga_hdl_tools-2.0.0.dev6 → labview_fpga_hdl_tools-2.0.0.dev7}/labview_fpga_hdl_tools/reporting.py +0 -0
|
@@ -472,51 +472,23 @@ def create_modelsim_project(overwrite=False, config=None):
|
|
|
472
472
|
|
|
473
473
|
if config.skip_modelsim:
|
|
474
474
|
reporter.detail(
|
|
475
|
-
"\nSKIP MODELSIM:
|
|
475
|
+
"\nSKIP MODELSIM: skipping ModelSim compilation "
|
|
476
|
+
"(will still validate sources and generate scripts)"
|
|
476
477
|
)
|
|
477
|
-
return 0
|
|
478
478
|
|
|
479
|
-
# Step
|
|
479
|
+
# Step 1: Generate all configured VHDL from Mako templates (the
|
|
480
480
|
# PkgNiHdlSettings single-source-of-truth package and any other generated
|
|
481
|
-
# design sources).
|
|
482
|
-
#
|
|
483
|
-
reporter.detail("\nStep
|
|
481
|
+
# design sources). These appear in the source lists validated below and need
|
|
482
|
+
# no ModelSim tools, so this runs in skip_modelsim (validation-only) mode too.
|
|
483
|
+
reporter.detail("\nStep 1: Generating VHDL from templates...")
|
|
484
484
|
if generate_vhdl.gen_generated_vhdl(config=config) != 0:
|
|
485
485
|
return 1
|
|
486
486
|
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
reporter.detail("\nStep 1: Creating modelsim.ini...")
|
|
493
|
-
ini_path = _create_modelsim_ini(modelsim_install, project_dir)
|
|
494
|
-
|
|
495
|
-
# Step 2: Add Xilinx simulation library mappings
|
|
496
|
-
xilinx_sim_lib = config.xilinx_sim_lib_folder
|
|
497
|
-
if xilinx_sim_lib:
|
|
498
|
-
reporter.detail("\nStep 2: Adding Xilinx simulation library mappings...")
|
|
499
|
-
# Ensure the Xilinx libraries exist before mapping them into the .ini.
|
|
500
|
-
# This is idempotent: once compiled it is a cheap no-op (and does not
|
|
501
|
-
# even require Vivado). Imported locally to avoid a circular import,
|
|
502
|
-
# since compile_modelsim_lib imports helpers from this module.
|
|
503
|
-
from labview_fpga_hdl_tools import compile_modelsim_lib
|
|
504
|
-
|
|
505
|
-
if compile_modelsim_lib.compile_modelsim_lib(config=config) != 0:
|
|
506
|
-
return 1
|
|
507
|
-
_add_xilinx_library_mappings(ini_path, xilinx_sim_lib)
|
|
508
|
-
else:
|
|
509
|
-
reporter.detail(
|
|
510
|
-
"\nStep 2: Skipping Xilinx library mappings (XilinxSimLibFolder not configured)"
|
|
511
|
-
)
|
|
512
|
-
|
|
513
|
-
# Step 3: Create work library
|
|
514
|
-
reporter.detail("\nStep 3: Creating work library...")
|
|
515
|
-
_run_modelsim_tool(vlib_path, ["work"], cwd=project_dir)
|
|
516
|
-
reporter.detail(" Created work library")
|
|
517
|
-
|
|
518
|
-
# Step 4: Gather VHDL source files
|
|
519
|
-
reporter.detail("\nStep 4: Gathering VHDL source files...")
|
|
487
|
+
# Step 2: Gather VHDL source files and validate that every listed file
|
|
488
|
+
# exists. Tool-independent, so this is the core project-integrity check that
|
|
489
|
+
# runs in skip_modelsim mode as well (it catches broken file lists / missing
|
|
490
|
+
# sources on a runner without ModelSim installed).
|
|
491
|
+
reporter.detail("\nStep 2: Gathering VHDL source files...")
|
|
520
492
|
|
|
521
493
|
# ModelSim compiles its own file lists only (no fallback to the Vivado lists).
|
|
522
494
|
file_lists = config.modelsim_file_lists
|
|
@@ -545,19 +517,63 @@ def create_modelsim_project(overwrite=False, config=None):
|
|
|
545
517
|
reporter.detail(f" Found {len(std_files)} standard VHDL files")
|
|
546
518
|
reporter.detail(f" Found {len(vhdl2008_files)} VHDL-2008 files")
|
|
547
519
|
|
|
548
|
-
# Step
|
|
549
|
-
|
|
520
|
+
# Step 3: Generate the load/sim .do scripts. These are static text scripts,
|
|
521
|
+
# so they are produced in skip_modelsim mode too. This is what lets a
|
|
522
|
+
# validation-only sim-modelsim confirm the project without ModelSim.
|
|
523
|
+
reporter.detail("\nStep 3: Generating simulation scripts...")
|
|
524
|
+
_generate_load_do_file(project_dir, entity_name)
|
|
525
|
+
_generate_sim_do_file(project_dir, entity_name)
|
|
526
|
+
|
|
527
|
+
# Everything below requires the ModelSim tools (vlib/vcom) and compiles the
|
|
528
|
+
# design. In skip_modelsim (validation-only) mode we stop here: settings,
|
|
529
|
+
# generated VHDL, source files, and .do scripts have all been validated or
|
|
530
|
+
# generated without needing ModelSim installed.
|
|
531
|
+
if config.skip_modelsim:
|
|
532
|
+
reporter.success(
|
|
533
|
+
"\nSKIP MODELSIM: Validation successful "
|
|
534
|
+
"(sources found, simulation scripts generated); skipping ModelSim compilation."
|
|
535
|
+
)
|
|
536
|
+
return 0
|
|
537
|
+
|
|
538
|
+
modelsim_install = config.modelsim_tools_folder
|
|
539
|
+
vlib_path = _get_modelsim_tool(modelsim_install, "vlib")
|
|
540
|
+
vcom_path = _get_modelsim_tool(modelsim_install, "vcom")
|
|
541
|
+
|
|
542
|
+
# Step 4: Create modelsim.ini
|
|
543
|
+
reporter.detail("\nStep 4: Creating modelsim.ini...")
|
|
544
|
+
ini_path = _create_modelsim_ini(modelsim_install, project_dir)
|
|
545
|
+
|
|
546
|
+
# Step 5: Add Xilinx simulation library mappings
|
|
547
|
+
xilinx_sim_lib = config.xilinx_sim_lib_folder
|
|
548
|
+
if xilinx_sim_lib:
|
|
549
|
+
reporter.detail("\nStep 5: Adding Xilinx simulation library mappings...")
|
|
550
|
+
# Ensure the Xilinx libraries exist before mapping them into the .ini.
|
|
551
|
+
# This is idempotent: once compiled it is a cheap no-op (and does not
|
|
552
|
+
# even require Vivado). Imported locally to avoid a circular import,
|
|
553
|
+
# since compile_modelsim_lib imports helpers from this module.
|
|
554
|
+
from labview_fpga_hdl_tools import compile_modelsim_lib
|
|
555
|
+
|
|
556
|
+
if compile_modelsim_lib.compile_modelsim_lib(config=config) != 0:
|
|
557
|
+
return 1
|
|
558
|
+
_add_xilinx_library_mappings(ini_path, xilinx_sim_lib)
|
|
559
|
+
else:
|
|
560
|
+
reporter.detail(
|
|
561
|
+
"\nStep 5: Skipping Xilinx library mappings (XilinxSimLibFolder not configured)"
|
|
562
|
+
)
|
|
563
|
+
|
|
564
|
+
# Step 6: Create work library
|
|
565
|
+
reporter.detail("\nStep 6: Creating work library...")
|
|
566
|
+
_run_modelsim_tool(vlib_path, ["work"], cwd=project_dir)
|
|
567
|
+
reporter.detail(" Created work library")
|
|
568
|
+
|
|
569
|
+
# Step 7: Compile with vcom -autoorder (automatic dependency resolution)
|
|
570
|
+
reporter.detail("\nStep 7: Compiling VHDL files...")
|
|
550
571
|
try:
|
|
551
572
|
_compile_vhdl_files(vcom_path, project_dir, std_files, vhdl2008_files, ini_path)
|
|
552
573
|
except RuntimeError as e:
|
|
553
574
|
reporter.error(f"\nCompilation failed: {e}")
|
|
554
575
|
return 1
|
|
555
576
|
|
|
556
|
-
# Step 6: Generate .do files
|
|
557
|
-
reporter.detail("\nStep 6: Generating simulation scripts...")
|
|
558
|
-
_generate_load_do_file(project_dir, entity_name)
|
|
559
|
-
_generate_sim_do_file(project_dir, entity_name)
|
|
560
|
-
|
|
561
577
|
total_files = len(std_files) + len(vhdl2008_files)
|
|
562
578
|
reporter.success(f"\nModelSim project created successfully!")
|
|
563
579
|
reporter.detail(f" Directory: {project_dir}")
|
|
@@ -20,15 +20,16 @@ def _validate_ini(config):
|
|
|
20
20
|
missing_settings = []
|
|
21
21
|
invalid_paths = []
|
|
22
22
|
|
|
23
|
-
if not config.
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
if not config.skip_modelsim:
|
|
24
|
+
if not config.modelsim_tools_folder:
|
|
25
|
+
missing_settings.append("ModelSimSettings.ModelSimToolsFolder")
|
|
26
|
+
else:
|
|
27
|
+
vsim_exe = _get_vsim_executable(config.modelsim_tools_folder)
|
|
28
|
+
if not vsim_exe or not os.path.exists(vsim_exe):
|
|
29
|
+
invalid_paths.append(
|
|
30
|
+
f"ModelSimSettings.ModelSimToolsFolder - vsim not found under: "
|
|
31
|
+
f"{config.modelsim_tools_folder}"
|
|
32
|
+
)
|
|
32
33
|
|
|
33
34
|
if not common.get_modelsim_entity(config):
|
|
34
35
|
missing_settings.append("ModelSimSettings.ModelSimEntity (set via set_modelsim_top_entity)")
|
|
@@ -21,15 +21,16 @@ def _validate_ini(config):
|
|
|
21
21
|
missing_settings = []
|
|
22
22
|
invalid_paths = []
|
|
23
23
|
|
|
24
|
-
if not config.
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
if not config.skip_modelsim:
|
|
25
|
+
if not config.modelsim_tools_folder:
|
|
26
|
+
missing_settings.append("ModelSimSettings.ModelSimToolsFolder")
|
|
27
|
+
else:
|
|
28
|
+
vsim_exe = _get_vsim_executable(config.modelsim_tools_folder)
|
|
29
|
+
if not vsim_exe or not os.path.exists(vsim_exe):
|
|
30
|
+
invalid_paths.append(
|
|
31
|
+
f"ModelSimSettings.ModelSimToolsFolder - vsim not found under: "
|
|
32
|
+
f"{config.modelsim_tools_folder}"
|
|
33
|
+
)
|
|
33
34
|
|
|
34
35
|
if not common.get_modelsim_entity(config):
|
|
35
36
|
missing_settings.append("ModelSimSettings.ModelSimEntity (set via set_modelsim_top_entity)")
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|