labview-fpga-hdl-tools 2.0.0.dev8__tar.gz → 2.0.0.dev9__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.
Files changed (28) hide show
  1. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/PKG-INFO +14 -3
  2. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/README.md +13 -2
  3. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/gen_labview_target_plugin.py +43 -4
  4. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/pyproject.toml +1 -1
  5. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/LICENSE +0 -0
  6. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/.gitignore +0 -0
  7. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/__init__.py +0 -0
  8. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/__main__.py +0 -0
  9. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/check_syntax.py +0 -0
  10. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/command_config.py +0 -0
  11. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/command_hooks.py +0 -0
  12. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/common.py +0 -0
  13. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/compile_modelsim_lib.py +0 -0
  14. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/compile_project.py +0 -0
  15. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/create_lvbitx.py +0 -0
  16. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/create_modelsim_project.py +0 -0
  17. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/create_vivado_project.py +0 -0
  18. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/generate_vhdl.py +0 -0
  19. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/get_window_netlist.py +0 -0
  20. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/install_dependencies.py +0 -0
  21. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/install_labview_target_plugin.py +0 -0
  22. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/launch_modelsim.py +0 -0
  23. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/launch_vivado.py +0 -0
  24. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/migrate_clip.py +0 -0
  25. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/nihdlsettings_default.py +0 -0
  26. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/process_constraints.py +0 -0
  27. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/reporting.py +0 -0
  28. {labview_fpga_hdl_tools-2.0.0.dev8 → labview_fpga_hdl_tools-2.0.0.dev9}/labview_fpga_hdl_tools/sim_modelsim.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: labview-fpga-hdl-tools
3
- Version: 2.0.0.dev8
3
+ Version: 2.0.0.dev9
4
4
  Summary: LabVIEW FPGA HDL Tools
5
5
  License: MIT
6
6
  Author: Salvador Santolucito
@@ -21,11 +21,17 @@ Description-Content-Type: text/markdown
21
21
 
22
22
  # LabVIEW FPGA HDL Tools
23
23
 
24
- Pre-release command-line tools (`nihdl`) for building customized FPGA designs
24
+ Command-line tools (`nihdl`) for building customized FPGA designs
25
25
  for use with the ni/flexrio repository. They move, generate, and process the
26
26
  files needed to take a top-level HDL design to a LabVIEW FPGA bitfile through
27
27
  either of two compile flows (see below).
28
28
 
29
+ > **Customizing a FlexRIO board? Start at [flexrio-custom](https://github.com/ni/flexrio-custom), not here.**
30
+ > That repo is the front door — supported devices, machine setup, and the step-by-step
31
+ > exercises. **This page is the tool reference** for the `nihdl` toolchain (commands,
32
+ > settings, and the concepts behind them); use it to look things up while following the
33
+ > flexrio-custom workflows.
34
+
29
35
  ## The two compile flows
30
36
 
31
37
  `nihdl` supports two ways to turn a top-level HDL design into a LabVIEW FPGA
@@ -128,7 +134,12 @@ step-by-step status with warnings and errors also shown inline; the end summary
128
134
  still appears, so verbose is additive to the default. See the
129
135
  [Command Reference](docs/CommandReference.md#output-and-verbosity) for details.
130
136
 
131
- ## Quickstart: the Vivado compile flow
137
+ ## Quickstart: the Vivado compile flow (tool-only)
138
+
139
+ > **Using `flexrio-custom`?** Follow its
140
+ > [Getting Started exercises](https://github.com/ni/flexrio-custom/blob/main/docs/GettingStarted.md)
141
+ > instead — they are the canonical command sequence for that repo. This quickstart is for
142
+ > driving `nihdl` standalone (installed via `pip`, outside a flexrio-custom checkout).
132
143
 
133
144
  Run these from your target folder (the one with `nihdlsettings.py`), with the
134
145
  Python environment active (run `nisetup` once per terminal — see
@@ -1,10 +1,16 @@
1
1
  # LabVIEW FPGA HDL Tools
2
2
 
3
- Pre-release command-line tools (`nihdl`) for building customized FPGA designs
3
+ Command-line tools (`nihdl`) for building customized FPGA designs
4
4
  for use with the ni/flexrio repository. They move, generate, and process the
5
5
  files needed to take a top-level HDL design to a LabVIEW FPGA bitfile through
6
6
  either of two compile flows (see below).
7
7
 
8
+ > **Customizing a FlexRIO board? Start at [flexrio-custom](https://github.com/ni/flexrio-custom), not here.**
9
+ > That repo is the front door — supported devices, machine setup, and the step-by-step
10
+ > exercises. **This page is the tool reference** for the `nihdl` toolchain (commands,
11
+ > settings, and the concepts behind them); use it to look things up while following the
12
+ > flexrio-custom workflows.
13
+
8
14
  ## The two compile flows
9
15
 
10
16
  `nihdl` supports two ways to turn a top-level HDL design into a LabVIEW FPGA
@@ -107,7 +113,12 @@ step-by-step status with warnings and errors also shown inline; the end summary
107
113
  still appears, so verbose is additive to the default. See the
108
114
  [Command Reference](docs/CommandReference.md#output-and-verbosity) for details.
109
115
 
110
- ## Quickstart: the Vivado compile flow
116
+ ## Quickstart: the Vivado compile flow (tool-only)
117
+
118
+ > **Using `flexrio-custom`?** Follow its
119
+ > [Getting Started exercises](https://github.com/ni/flexrio-custom/blob/main/docs/GettingStarted.md)
120
+ > instead — they are the canonical command sequence for that repo. This quickstart is for
121
+ > driving `nihdl` standalone (installed via `pip`, outside a flexrio-custom checkout).
111
122
 
112
123
  Run these from your target folder (the one with `nihdlsettings.py`), with the
113
124
  Python environment active (run `nisetup` once per terminal — see
@@ -227,6 +227,26 @@ def _create_clocklist_structure():
227
227
  return clock_list_top
228
228
 
229
229
 
230
+ def _normalize_clock_domain_name(clock_domain_name):
231
+ """Return the canonical LabVIEW clock-domain name used in generated XML.
232
+
233
+ LabVIEW FPGA resource and clock names use dot-separated paths. CSV LVName
234
+ values use backslashes for hierarchy, so any hierarchical clock-domain
235
+ reference must be normalized before it is written to XML or compared to a
236
+ clock row defined elsewhere in the CSV.
237
+ """
238
+ return clock_domain_name.strip().replace("\\", ".")
239
+
240
+
241
+ def _collect_defined_input_clock_domains(rows):
242
+ """Collect canonical clock-domain names defined by input clock rows."""
243
+ return {
244
+ _normalize_clock_domain_name(row["LVName"])
245
+ for row in rows
246
+ if row["SignalType"].lower() == "clock" and row["Direction"].lower() == "input"
247
+ }
248
+
249
+
230
250
  def _generate_xml_from_csv(csv_path, boardio_output_path, clock_output_path):
231
251
  """Generate boardio XML and clock XML files from CSV data.
232
252
 
@@ -254,9 +274,10 @@ def _generate_xml_from_csv(csv_path, boardio_output_path, clock_output_path):
254
274
 
255
275
  with open(csv_path, "r", newline="", encoding="utf-8") as csvfile:
256
276
  reader = csv.DictReader(csvfile)
277
+ rows = list(reader)
278
+ defined_input_clock_domains = _collect_defined_input_clock_domains(rows)
257
279
 
258
- for row in reader:
259
- row_count += 1
280
+ for row_count, row in enumerate(rows, start=1):
260
281
  lv_name = row["LVName"]
261
282
  hdl_name = row["HDLName"]
262
283
  direction = row["Direction"]
@@ -266,6 +287,11 @@ def _generate_xml_from_csv(csv_path, boardio_output_path, clock_output_path):
266
287
  zero_sync_regs = row["ZeroSyncRegs"]
267
288
  output_readback = row["OutputReadback"]
268
289
  required_clock_domain = row["RequiredClockDomain"]
290
+ normalized_required_clock_domain = (
291
+ _normalize_clock_domain_name(required_clock_domain)
292
+ if required_clock_domain
293
+ else ""
294
+ )
269
295
 
270
296
  # Replace the '\' in the names with '.' to create a dot-separated hierarchy
271
297
  # that is used to make a resource folder hierarchy in the BoardIO XML. The
@@ -317,9 +343,22 @@ def _generate_xml_from_csv(csv_path, boardio_output_path, clock_output_path):
317
343
  )
318
344
  ET.SubElement(io_resource, "VHDLName").text = hdl_name
319
345
 
320
- if required_clock_domain:
346
+ if normalized_required_clock_domain:
347
+ if (
348
+ normalized_required_clock_domain not in defined_input_clock_domains
349
+ and ("." in required_clock_domain or "\\" in required_clock_domain)
350
+ ):
351
+ valid_clock_domains = ", ".join(sorted(defined_input_clock_domains))
352
+ error = (
353
+ f"Row {row_count}: RequiredClockDomain='"
354
+ f"{required_clock_domain}' for signal '{lv_name}' does not match "
355
+ f"any input clock LVName defined in this CSV after the '\\' to '.' "
356
+ f"name conversion. Use one of: {valid_clock_domains}"
357
+ )
358
+ validation_errors.append(error)
359
+
321
360
  ET.SubElement(io_resource, "RequiredClockDomain").text = (
322
- required_clock_domain
361
+ normalized_required_clock_domain
323
362
  )
324
363
 
325
364
  if use_in_scl:
@@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "labview-fpga-hdl-tools"
7
- version = "2.0.0.dev8"
7
+ version = "2.0.0.dev9"
8
8
  description = "LabVIEW FPGA HDL Tools"
9
9
  authors = [
10
10
  "Salvador Santolucito <salvador.santolucito@gmail.com>"