Circuit simulation enhancements
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
KiCad |
Fix Released
|
Unknown
|
Bug Description
After playing around with the circuit simulator I've culled a list of things that I took for granted in other tools and miss in KiCad. I will attach to this bug a few archived simulation circuits to help illustrate the items below. Hopefully these suggestions would flesh out the simulation capability of KiCad and help many users. Some have been taken from https:/
I realize this is quite a number of items and I can separate them into unique bugs if desired. Since they do form a theme, at least to me, I'm submitting them together.
The circuits attached here (and others I've created, if you're interested), are available if you'd like to include them with KiCad as demos. I'm happy to update the existing simulation demos to use more attractive and standardized symbols (including the sources I submitted at https:/
1. Support more SPICE directives (see http://
.op (displays ".op: no such command available in ngspice" even though it's on page 258)
.control (see page 295 of the manual; seems to have no effect but maybe I'm doing it wrong)
.plot (see manual page 275 but seems to have no effect; maybe I'm doing it wrong)
.print (see manual page 274 but seems to have no effect; maybe I'm doing it wrong)
.probe (see manual page 276 but seems to have no effect; maybe I'm doing it wrong)
2. Allow multiple plots to be shown at once. Often one will want to see sets of waveforms correlated on the X axis but broken up into multiple plots. This avoids blowing out the scale if one waveform is 1V peak and another is 100V peak. Or if there are simply too many waveforms to be easily understood if they're shown at once. Or if it's logical to break up the waveforms into groups. It is not common (in my experience with multiple SPICE simulators) to only allow a single plot to be shown at once for just this reason.
3. Add a measurement pane in the Spice Simulator window near the plot area so measurements can be easily viewed and correlated with waveforms. This is especially important when the simulation is stepped so the measurements can show differences between each step that may be hidden by nearly overlapping waveforms. LTSpice IV places measurements in the SPICE Error Log which is hard to find and must be opened after the simulation completes. Every. Single. Time. Ugh. See included "measurement_
4. Instead of a fixed list of signals that can be plotted, allow signal names to be added by typing them in. This is often faster for users that know the syntax. If I connect a non-polarized component "backwards", like a resistor, plotting "-I(R4)" is easier that editing the schematic to flip R4's pins. It would also allow plotting a differential signal between any two nets, with other simulation tools using "v(<net1>,<net2>)" syntax. Performing simple math functions, such as "v(out)/10" to show the output voltage at 1/10th the real value in amplitude, is another reason (easy scaling/comparison with other signals on the same plot). Having a GUI to create differential signals and scaled signals would work, but typing in signals is quick and easy and doesn't depend on a GUI to be created.
5. Provide other signal types besides just voltage and current. Power ("w(<ref des>)"), logarithm (for example "db(v(<net>))"), etc. are all common and powerful signal types that one may want to plot. This relates to the above item as these signals types are neither listed nor can be manually typed in.
6. Clicking on a signal name (or hovering over it) in the Signals pane and pressing Delete should remove the signal. Similarly, clicking on a cursor and pressing Delete should remove that cursor.
7. The command "Hide Signal" actually deletes a signal. Actually "hiding" a signal would no longer show the signal in a plot (or perhaps dim it) but save the signal so it to be made visible again later. This is a useful feature and I would like to see "Hide Signal" do what it says on the tin and add a true "Delete Signal" command as well. This nomenclature opaqueness also is present with cursors.
8. A huge amount of real estate could be saved if a legend of the plotted signals were shown inside the plot. This would better correlate color with signal name by putting them physically closer together in the window and furthermore eliminate the entire Signals section of the Spice Simulator window. This would be similar to the View > Show Legend feature but make this an integrated part of the plot window instead of a small overlay which consumes some of the plot area and only duplicates information.
9. There is no need for "Voltage" on the top left and "Current" on the top right of every plot if only one unit is being used. This relates with the items above about being able to perform math functions on signals which would result in other units and supporting other signal types (power, dB voltage, etc.).
10. It is not clear what cursor belongs to what signal. Perhaps the cursors could stay with a dashed style but pick up the color of the associated signal?
11. Add seek functions for cursors, finding the nearest peak, nearest valley, max, min, etc. This is common in other SPICE simulators.
12. White is one of the colors for a signal. As the plot grid and labels are white, and also the background of the Signals pane, this is a poor color choice. White signals are still visible in the plot window, at least, but in the Signals pane a white color swatch completely disappears.
13. There is no correlation between plotted signals and the schematic. It would be helpful to indicate plotted nets, perhaps by adding some symbol or icon to the net (or part in the case of power) with the color of the signal in the visible plot.
14. It is common to print DC bias point voltages and currents on the schematic for each net after simulation. This is not possible in KiCad now. Often I see it as floating text box with a line to the net/component, or as a small bubble embedded into the net. This is quite helpful for voltage dividers and other simple circuits where only DC voltages and currents are needed since it allows performing the simulation and seeing the results in one place (not having to go to the Simulation window). A way to re-run the simulation from within Eeschema would be needed to fully realize this item.
15. Save the open plot(s) + signal(s) when the simulator is closed and open the same plot(s) + signal(s) after the next simulation. This would help if the simulator is closed or if the project is sent to someone else so they can jump in right away, seeing the waveforms the previous person had configured. This feature should be an option so viewing the previous plots/signals can be turned on or off with it defaulting to turned on.
16. Allow saving of plot(s) + signal(s) to an external file for recall later. This will allow setting up a series of plots and waveforms and then recalling them in groups as desired. It's often helpful to have some logical groups of plots and signals in those plots. This would also help with the above item as these could be recalled upon launching the simulation, or when sharing data with another person.
17. It does not appear that any possible "<ident>" can be used in a .param statement (see page 54 of the ngspice manual for info about this statement). There is some conflict if a reserved <ident> is used (like "dc" which does not converge; see in my precision_rectifier project where I called one param "vdc" since "dc" didn't work). It would be most helpful if KiCad could address this under-the-hood so the user can choose any <ident> they desire.
18. Combine colors on a plot when waveforms overlap. Currently, if two waveforms lay on top of each other for any distance along the X axis one waveform will be covered up and completely invisible. This is required, of course, if the points are printed to the same pixels on the display and not if the points are exactly identical.
19. Using the .meas SPICE directive requires putting a forward slash ("/") in front of the net name if the net has a label. See the diff_amp simulation I attached. While this is shown in the UI (for example "V(/out)" in the Signals section of the Spice Simulator window), it's not obvious and means the text typed when creating the label doesn't match the text typed when referencing the label in a measurement.
20. Display node voltages in SI units instead of exponential format with three significant digits (such as "5.72449e+005"). Showing "u" (or the actual Greek letter mu), "m", "k", "M"/"Meg", etc. is much more clear if a user really needs to dig into this part of the simulation output, and for a bias point simulation this is the most salient way to understand the desired result.
21. If repeated analysis isn't supported, implement it and add a GUI to configure it. This is a critical part of any simulation tool and is sorely missed. I've often integrated repeated analysis with using measurements as described in item 3 above. Creating steps in ngspice using the .control directive is painful, if it even works (maybe I'm doing it wrong in the precision_rectifier or high_side_
22. The included version of ngspice isn't anywhere I can find. Not printed in the console during a simulation and not in Help > About. As updates are released regularly, knowing the included version with KiCad would be important in some cases. For example, https:/
23. It seems all pieces of text are passed to ngspice as parameters (the precision_rectifier simulation has several instances of "<: no such command available in ngspice" in the output). Only text strings that start with a period, and hopefully any new line even if it's within a block of text, should be recognized as spice directives.
24. The simulation output at the bottom left of the Spice Simulator window has lots and lots of information. Most of it isn't helpfully for a properly configured and working simulation. I would think just putting error messages and actual output (like measurements and bias point info) is best and then hiding the rest of the info. Simulation > Show SPICE netlist takes a similar approach by allowing the user to see what's going on but not inundating them with it each simulation run. Having separate areas for "under the hood" and "the user wants to see this" info may clean things up and would certainly make it easier to find the desired output in all the text displayed.
25. I find it convenient to paste a model or subcircuit as text onto the schematic canvas and then use that for simulation rather than having a separate file with the model/subcircuit. Using text on the schematic also improves portability. While it appears that the SPICE netlist includes a model/subcircuit if I place text on the scheamtic page, I'm not able to make this work. If I leave the Si2304 subcircuit text in the high_side_
Application: kicad
Version: (6.0.0-
Libraries:
wxWidgets 3.0.4
libcurl/7.61.1 OpenSSL/1.1.1 (WinSSL) zlib/1.2.11 brotli/1.0.6 libidn2/2.0.5 libpsl/0.20.2 (+libidn2/2.0.5) nghttp2/1.34.0
Platform: Windows 8 (build 9200), 64-bit edition, 64 bit, Little endian, wxMSW
Build Info:
wxWidgets: 3.0.4 (wchar_t,wx containers,
Boost: 1.68.0
OpenCASCADE Community Edition: 6.9.1
Curl: 7.61.1
Compiler: GCC 8.2.0 with C++ ABI 1013
Build settings:
USE_
USE_
KICAD_
KICAD_
KICAD_
KICAD_
KICAD_
KICAD_
BUILD_
KICAD_
KICAD_
KICAD_SPICE=ON
Changed in kicad: | |
status: | New → Confirmed |
importance: | Undecided → Wishlist |
tags: | added: eeschema ngspice |
Changed in kicad: | |
importance: | Wishlist → Unknown |
status: | Expired → New |
Changed in kicad: | |
status: | New → Fix Released |
I already propose: /bugs.launchpad .net/kicad/ +bug/1740321 /bugs.launchpad .net/kicad/ +bug/1740318
1) Current and power probe measure
https:/
2) In sheet graph
https:/