sphinx-verilog-domain
sphinx-verilog-domain copied to clipboard
Add a "currentmodule" directive to avoid nesting
I want to document a module (in this case, https://github.com/lowRISC/ibex/blob/master/rtl/ibex_core.sv). This module has a fair amount of ports and parameters, the current documentation can be found at https://ibex-core.readthedocs.io/en/latest/integration.html.
When trying sphinx-verilog-domain, I found a couple issues:
-
Nesting parameters and ports under the
:verilog:moduledirective doesn't allow for sections and other content in between ports and parameters, e.g. to group parameters into logical groups. For example, that's how a section of documentation could look:ecurity-related signals ~~~~~~~~~~~~~~~~~~~~~~~ bex' security features can detect various security-related problems and produce alerts. efer to the :ref:`security` section for details. . verilog:port:: output logic alert_minor_o Core has detected a fault which it can safely recover from. Can be used by a system to log errors over time and detect tampering / attack. This signal is a pulse, one cycle per alert. . verilog:port:: output logic alert_major_o Core has detected a fault which cannot be recovered from. Can be used by a system to reset the core and possibly take other remedial action. This signal is a pulse, but might be set for multiple cycles per alert.I see the similarity of parameters/ports in Verilog to function arguments in other languages, but it's not quite the same: a typical function in C or Python has perhaps a handful of arguments, while a Verilog module can easily have dozens of parameters and ports. So a solution which deviates from the way functions/methods are described in other languages seems reasonable.
-
:verilog:modulerequires the whole module signature. Providing this signature duplicates the information that is available further down in the port and parameter directives (that's the same for other Sphinx domains normally), but in contrast to other languages, the module parameter/port list is rather long (easily 100s of lines).
I'm not sure what the right solution in line with other Sphinx domains would be. I can see two options:
- Either, go for something like
:py:module, which makes all subsequent directives be in that module. - Or, provide a way to give a "fully qualified" name as port name, which is then stripped out; e.g.
:verilog:port:: ibex_core.alert_minor_oto describe the portalert_minor_oof the moduleibex_core.
Not strictly related, but kind of related: specifying the :verilog:module directive without parameters/ports would be very helpful.
See also https://github.com/lowRISC/ibex/pull/1120 for an attempt to use verilog-domain in Ibex. Of course, there's a lot of flexibility, I'm not wedded to any way of documenting it, as long as it is manageable.