- Jul 26, 2022
- Jul 22, 2022
-
-
DSPOM authored
-
- Jul 21, 2022
- Jul 20, 2022
-
-
DSPOM authored
Previously analysis always returned true because the appropriate information was not available with OSDI. With the latest additions to the interface the ANALYSIS_<..> flags are set by the simulator to communicate the return value of this function. This commit implements analysis so that is returns true for the analysis modes listed in the language standard when the appropriate flags are set.
-
DSPOM authored
-
- Jul 19, 2022
- Jul 11, 2022
-
- Jul 05, 2022
-
-
DSPOM authored
-
DSPOM authored
-
DSPOM authored
-
DSPOM authored
-
DSPOM authored
The Verilog-AMS LRM specifies fmt literals that are slightly different to those support by the libc implementation. This commit implements a parser for these supported format arguments to ensure any used format literals is valid and all arguments have the correct type. During hir lowering and codegen the format literals are converted to C compatible format literals. Some extra functions are used for this where conversion is non trivial.
-
- Jul 01, 2022
-
-
DSPOM authored
Previously using $limit would cause a panic during type check. Now OpenVAF tests that $limit is used correctly. This is only possible because it assumes that built-in function only have real arguments. For now $limit(x,..) is lower the same as x in hir_lower. However, all type checking logic is implemented so the foundations to fully support $limit in OSDI are now available.
-
DSPOM authored
A common pattern in compact models is that equations are formulated in terms of some variables that then depend on multiple biases (unkowns). Handwritten models often perform better than Verilog-A compiled models because humans recognize this pattern and only derivative by the intermediate variable and then apply the chainrule to get all required derivatives. This commit implements an SSA graph based algorithm that finds subgraphs of the SSA where such an optimization can be applied. Finding a perfect solution is probably an NP-Hard problem. Instead a conservative heuristic is used. The reults are very promising. All tested models show instructions counts decrease of at least 22%. Most models even show an increase above 30%. In some extreme cases like BSIMSOI, the instruction count is even reduced by 60%. These instruction reductions are often clustered and therefore decrease register/cache pressure. Furthermore, these decreases also often happen in "hot" parts of the model. So overall significant performance increases are achieved. This change is a big step towards closing the gap between handwritten C code and Verilog-A compiled models.
-
- Jun 27, 2022
-
-
DSPOM authored
-
DSPOM authored
The changes in the previous commits changed $temperature so that it was read from memory instead of being treated as an SSA value during the eval function. However, the wrong GEP indices ([6] instead of [0, 6]) were used. This commit fixes that and introduces a function that automatically generates these struct_gep indices to avoid similar bugs in the future.
-
- Jun 26, 2022
-
-
DSPOM authored
Previously, $bound_step was always called during the eval function. However, most $bound_step calls are constant and can be fully handled during device setup. This save a bit of performance as it repeated stores during the newton analysis. Most models do actually not use $bound_step at all so in those cases OpenVAF now also does not allocate any space for the time step in the instance data. This can save some memory for very large netlists.
-
DSPOM authored
-
DSPOM authored
-
- Jun 24, 2022
- Jun 23, 2022
- Jun 22, 2022
-
-
DSPOM authored
-
DSPOM authored
Previously OpenVAF decided whether a separate unknown is required for a call to ddt during hir lowering. To that end OpenVAF tracked whether values are op dependent during HIt lowering. This algorithm didn't work well, because some values are still sentinel values that are only replaced by their true value later. This commit removes most of that logic. Now all ddt calls generate an implicit unkown. That unkown is then removed during residual generation if that is possible. During residual construction, the MIR is fully constructed and which values are operating point dependent is also known (determined by an robust analysis). In practice that means that OpenVAF will no longer emit unneeded implicit unknowns for ddt in some edge cases.
-
DSPOM authored
-
- Jun 21, 2022