Differences

This shows you the differences between two versions of the page.

Link to this comparison view

gnucap:projects:nlnet:verilogams [2023/11/03 01:36]
aldavis
gnucap:projects:nlnet:verilogams [2024/05/14 13:00] (current)
felixs link to followup project
Line 2: Line 2:
  
 Each task has 8 milestones. Here we will give details and keep track of our progress. Each task has 8 milestones. Here we will give details and keep track of our progress.
 +
 +(See [[gnucap:projects:nlnet:verilogamscontd|here]] for the follow-up.)
  
 === Task 1. modelgen-verilog: Provide a replacement for ADMS === === Task 1. modelgen-verilog: Provide a replacement for ADMS ===
Line 8: Line 10:
 Branches and Contributions are explained [[gnucap:manual:tech:modelgen#Branches and contributions|here]]. Branches and Contributions are explained [[gnucap:manual:tech:modelgen#Branches and contributions|here]].
 The implementation is part of the develop branch as of [[https://git.savannah.gnu.org/cgit/gnucap/gnucap-modelgen-verilog.git/commit/?h=develop&id=59d115|March 5]]. The implementation is part of the develop branch as of [[https://git.savannah.gnu.org/cgit/gnucap/gnucap-modelgen-verilog.git/commit/?h=develop&id=59d115|March 5]].
 +
 == b) Generate partial derivatives of expressions, needed by Newton's method == == b) Generate partial derivatives of expressions, needed by Newton's method ==
 How to [[gnucap:manual:tech:modelgen#computing partial derivatives|evaluate partial derivatives]]. An implementation is ready [[https://git.savannah.gnu.org/cgit/gnucap/gnucap-modelgen-verilog.git/log/?h=deriv|here]]. This Task is complete. How to [[gnucap:manual:tech:modelgen#computing partial derivatives|evaluate partial derivatives]]. An implementation is ready [[https://git.savannah.gnu.org/cgit/gnucap/gnucap-modelgen-verilog.git/log/?h=deriv|here]]. This Task is complete.
Line 13: Line 16:
 == c) Snapshot release supporting minimalistic devices with test suite. == == c) Snapshot release supporting minimalistic devices with test suite. ==
 It's out and tagged [[https://git.savannah.gnu.org/cgit/gnucap/gnucap-modelgen-verilog.git/commit/?h=20230520-dev|20230520-dev]]. It's out and tagged [[https://git.savannah.gnu.org/cgit/gnucap/gnucap-modelgen-verilog.git/commit/?h=20230520-dev|20230520-dev]].
 +
 == d) Support for loops, conditionals and built-ins as plugins. == == d) Support for loops, conditionals and built-ins as plugins. ==
 The code generation for while/for loops, case/ifthenelse/ternary is ready. Since The code generation for while/for loops, case/ifthenelse/ternary is ready. Since
 [[http://git.savannah.gnu.org/cgit/gnucap/gnucap-modelgen-verilog.git/tag/?h=20230729-dev|20230729-dev]], the code generation for built-in functions, tasks and filters is based on FUNCTION plugins. [[http://git.savannah.gnu.org/cgit/gnucap/gnucap-modelgen-verilog.git/tag/?h=20230729-dev|20230729-dev]], the code generation for built-in functions, tasks and filters is based on FUNCTION plugins.
 +
 == e) Add specific commonly used language features, ddt, idt. == == e) Add specific commonly used language features, ddt, idt. ==
 The ddt and idt [[gnucap:manual:tech:modelgen#Filter operators|operators]] are part of the develop branch as of [[https://git.savannah.gnu.org/cgit/gnucap/gnucap-modelgen-verilog.git/commit/?h=develop&id=e8af01ae9f1a|May 4]]. The ddt and idt [[gnucap:manual:tech:modelgen#Filter operators|operators]] are part of the develop branch as of [[https://git.savannah.gnu.org/cgit/gnucap/gnucap-modelgen-verilog.git/commit/?h=develop&id=e8af01ae9f1a|May 4]].
 +
 == f) Include test cases from the LRM and the Designers Guide. == == f) Include test cases from the LRM and the Designers Guide. ==
 LRM and Designers guide contains copyrighted material. We have our own set of unit tests, growing as we progress. Type "make check". LRM and Designers guide contains copyrighted material. We have our own set of unit tests, growing as we progress. Type "make check".
 +
 == g) Write user documentation and technical notes. == == g) Write user documentation and technical notes. ==
 +
 == h) Set up examples involving common third party compact models. == == h) Set up examples involving common third party compact models. ==
  
Line 28: Line 36:
 Verilog defines "paramset" as a means to replace model cards known from spice, cf. LRM section 6.4. Verilog defines "paramset" as a means to replace model cards known from spice, cf. LRM section 6.4.
 The standard essentially allows multiple prototypes by the same name with mutually different interfaces (see [[gnucap:manual:languages:verilog#paramset|usage]]), allowing things like [[gnucap:manual:examples:paramset_recursive|recursive models]]. This requires changes to the way device instances are [[paramset_implementation|read in and elaborated]]. Preliminary code is available [[http://git.savannah.gnu.org/cgit/gnucap.git/log/?h=paramset-13|here]]. Some of it has been added to [[https://codeberg.org/gnucap/gnucsator/src/branch/develop|Gnucsator]]. The standard essentially allows multiple prototypes by the same name with mutually different interfaces (see [[gnucap:manual:languages:verilog#paramset|usage]]), allowing things like [[gnucap:manual:examples:paramset_recursive|recursive models]]. This requires changes to the way device instances are [[paramset_implementation|read in and elaborated]]. Preliminary code is available [[http://git.savannah.gnu.org/cgit/gnucap.git/log/?h=paramset-13|here]]. Some of it has been added to [[https://codeberg.org/gnucap/gnucsator/src/branch/develop|Gnucsator]].
 +
 == b) Implement preprocessor, support backtick, macros, conditionals. == == b) Implement preprocessor, support backtick, macros, conditionals. ==
 Slightly deviating from the workplan, we have added [[gnucap:manual:tech:modelgen#Preprocessing]] for compiler directives directly to the model compiler. Slightly deviating from the workplan, we have added [[gnucap:manual:tech:modelgen#Preprocessing]] for compiler directives directly to the model compiler.
 The code is available [[http://git.savannah.gnu.org/cgit/gnucap/gnucap-modelgen-verilog.git/commit/?h=pp&id=b264644b653495fc8bdbe1c5402ef2a06fd7e1b8|here]] and combines preprocessing with evaluating derivatives (Task 1b). The code is available [[http://git.savannah.gnu.org/cgit/gnucap/gnucap-modelgen-verilog.git/commit/?h=pp&id=b264644b653495fc8bdbe1c5402ef2a06fd7e1b8|here]] and combines preprocessing with evaluating derivatives (Task 1b).
 +
 == c) Add support for "attribute instance". == == c) Add support for "attribute instance". ==
 Attributes are the little bits of info that are important in a different context, like schematics and PC boards.  Verilog gives us a standard way to do this. It's now implemented in lang_verilog.  It's in the snapshot, and in the "attributes-5" branch.  [[https://git.savannah.gnu.org/cgit/gnucap.git/log/?h=attributes-5|here]].  There is technical documentation [[gnucap:manual:tech:plugins:languages:attributes|here]] and user documentation for its use in Verilog [[gnucap:manual:languages:verilog|here]]. Attributes are the little bits of info that are important in a different context, like schematics and PC boards.  Verilog gives us a standard way to do this. It's now implemented in lang_verilog.  It's in the snapshot, and in the "attributes-5" branch.  [[https://git.savannah.gnu.org/cgit/gnucap.git/log/?h=attributes-5|here]].  There is technical documentation [[gnucap:manual:tech:plugins:languages:attributes|here]] and user documentation for its use in Verilog [[gnucap:manual:languages:verilog|here]].
 +
 == d) Provide logic gates as plug-ins, accessible from Verilog netlists. == == d) Provide logic gates as plug-ins, accessible from Verilog netlists. ==
-== e) Integrate "model cardhierarchy into Verilog language semantics. ==+This is working now.  It's in the snapshot [[https://git.savannah.gnu.org/cgit/gnucap.git/tag/?h=dev-20231130|here]] and in the "logic-4branch [[https://git.savannah.gnu.org/cgit/gnucap.git/log/?h=logic-4|here]].  There is a first cut at user documentation [[gnucap:manual:devices:semi:logic|here]].  This part (2d) is complete, but it will change as task 2e is done, and again when LRM compliant connectmodule insertion (planned for early 2024) is done.
  
 +== e) Integrate "model card" hierarchy into Verilog language semantics. ==
 To be able to use models implemented for Spice in a Verilog environment, we need to be able to reference these models from paramset statements. To be able to use models implemented for Spice in a Verilog environment, we need to be able to reference these models from paramset statements.
 Spice has both component letters and model identifiers, whereas Verilog only uses type names [[gnucap::paramset_spice|etc.]]. Spice hardwires the segmentation into Spice has both component letters and model identifiers, whereas Verilog only uses type names [[gnucap::paramset_spice|etc.]]. Spice hardwires the segmentation into
 shared and individual storage, while Verilog leaves it to the user. We may have to find a way to avoid performance regressions. shared and individual storage, while Verilog leaves it to the user. We may have to find a way to avoid performance regressions.
 +
 == f) Refactor internals; make dc sweep work with parameters. == == f) Refactor internals; make dc sweep work with parameters. ==
 Historically, the dc sweep command only sweeps element values, following other implementations such as Spice 1-3 and Ngspice. We have redefined the data path for parameter values in [[gnucap:manual:tech:plugins:devices:allocation_and_setup|devices]], in particular "precalc_last" and edited simple devices (elements) accordingly. With these changes, we provide parameter sweeps in [[https://codeberg.org/gnucap/gnucsator/src/branch/develop|Gnucsator]], mirroring Qucsator behaviour. We have refactored and adjusted the default [[gnucap:manual:commands:dc|dc]] command plugin and added support for parameter sweeps. Many new tests have been added in the process. This task is completed and part of the [[http://git.savannah.gnu.org/cgit/gnucap.git/tag/?h=dev-20230214|20230214 snapshot]]. Historically, the dc sweep command only sweeps element values, following other implementations such as Spice 1-3 and Ngspice. We have redefined the data path for parameter values in [[gnucap:manual:tech:plugins:devices:allocation_and_setup|devices]], in particular "precalc_last" and edited simple devices (elements) accordingly. With these changes, we provide parameter sweeps in [[https://codeberg.org/gnucap/gnucsator/src/branch/develop|Gnucsator]], mirroring Qucsator behaviour. We have refactored and adjusted the default [[gnucap:manual:commands:dc|dc]] command plugin and added support for parameter sweeps. Many new tests have been added in the process. This task is completed and part of the [[http://git.savannah.gnu.org/cgit/gnucap.git/tag/?h=dev-20230214|20230214 snapshot]].
Line 44: Line 57:
 == g) Revisit build system: Improve model compilation and loading == == g) Revisit build system: Improve model compilation and loading ==
 Currently, Gnucap loads precompiled binary plugins. We will automate the compilation process for a better user experience, especially because Verilog-AMS behavioural code must be compiled prior to loading. Currently, Gnucap loads precompiled binary plugins. We will automate the compilation process for a better user experience, especially because Verilog-AMS behavioural code must be compiled prior to loading.
 +
 == h) Release all of the above == == h) Release all of the above ==
  
Line 53: Line 67:
 compute the partial derivatives accordingly. We also need to keep track of compute the partial derivatives accordingly. We also need to keep track of
 whether a derivative is constant. This task adds the required propagation whether a derivative is constant. This task adds the required propagation
-rules and bookkeeping. These are included with the 20231031 snapshot alongside +rules and bookkeeping. 
-constant folding.+ 
 +These are included with the 20231031 snapshot alongside constant folding.
  
 == b) constant sources == == b) constant sources ==
Line 61: Line 76:
 not need re-evaluation, and is always converged by definition. In this task, not need re-evaluation, and is always converged by definition. In this task,
 these optimisations will be implemented for resistors and other linear devices. these optimisations will be implemented for resistors and other linear devices.
 +
 +This task is closed to finished with the November snapshot. Paramset has taken
 +priority over this one.
  
 == c) internal node collapse == == c) internal node collapse ==
Line 67: Line 85:
 condition can be identified. In this task, the elaboration will be extended to condition can be identified. In this task, the elaboration will be extended to
 avoid additional nodes. avoid additional nodes.
 +
 +Since November, the optional internal nodes ("V<+0.") are collapsed into ports, and also nodes
 +in ddt/idt filters are optimised out, where they are not needed.
  
 == d) redundant contributions == == d) redundant contributions ==
Line 73: Line 94:
 In this task the inferred source type will depend on the desired role, and In this task the inferred source type will depend on the desired role, and
 unused sources will be optimised out. Constant folding from 1a predetermines unused sources will be optimised out. Constant folding from 1a predetermines
-reachability in conditional blocks. Since 20231031 unreachable contributions are eliminated+reachability in conditional blocks. 
 + 
 +Since 20231031 unreachable contributions are eliminated
 before any code is generated. before any code is generated.
gnucap/projects/nlnet/verilogams.1698993415.txt.gz · Last modified: 2023/11/03 01:36 by aldavis
 
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Run by Debian Driven by DokuWiki