What you need to start development
The IEEE 1666 and IEEE 1666.1 standards and reference implementations are free, even for commercial use.
But this is not enough, you also need some compiler environment to generate the SystemC/SystemC-AMS executable models and something to post-process the simulation results - like a waveform viewer.
All this should be embedded in an IDE (integrated development environment) to allow efficient development. Ideally, you can also use some meta-modelling tools to allow entry on a higher level, like schematics, instead of hacking C++ code completely by hand.
You have several options to start development. Here are some listed, let's start with one example, which is fully free to use.
100% free environment
This environment allows you to compile the libraries and examples and implement some basic projects. This is quite ok to learn AMS modelling.
- You can download the SystemC/SystemC-AMS libraries and examples from the Accellera web page (external link).
- As compiler, I propose GCC, to be accurate Mingw64, from the Msys2 environment (external link).
- In Msys2, you can also install a text editor, make environment and GTKwave as waveform viewer for digital simulations (using VCD files).
- If you want to do use a proper IDE, I'd reccommend the Eclipse IDE for C/C++ development (external link). It will detect the Mingw64 setup automatically.
- For further post-processing and to view analog waveforms of SystemC-AMS simulations, you can use Python, which is also part of the Msys2 installation. Just install the SciPy or NumPy packages in this environment.
- You can also use Octave instead of Python, I may add some examples here in future as well...
→ I have a separate page describing in detail all steps to set up this environment- just click here...
- Furthermore, you may install a full Python environment with "Pweave" for documentation generation and "Spyder" as IDE. Using the module "lcapy" you can also create nice schematics which also work for your Pweave reports. See here for an example.
Free for non-commercial use
- Many people also use Microsoft Visual Studio (VS) for development. Besides it is not really free to use, I don't see any real advantage in comparison to the Eclipse IDE (which can be also used for commercial purposes, if you decide to continue using it). Please be aware: I am talking here about writing models, not to extensively debug C++ code. So advanced features of C++ development - above features like syntax highlighting and auto-extension of methods from classes and so on - are not too helpful for that.
- More important are features like viewing waveforms, which VS can not offer. So you need anyhow to use additional, external tools.
- Talking about waveform viewing, there is a nice plugin for Eclipse. It handles analog wave files (took me a while until I figured that they must have the extension "TAB" - a bot strange, though...) as well as digital wave files (VCD) - and all within the Eclipse IDE. The add-on is called Impulse, it is from a company called TOEM (external link). You need the basic backage and the VP (virtual prototype) package - these work (at least for now, 2/2021) with a non-commercial license for free.
- This Impulse waveform viewer is not really great, unfortunately. There is no clear Y-axis marking shown, so you newer know the value range you see. It may be just some numeric noise or some large signal. This is really a basic feature I also couln't find any way to configure properly. So you need always to use some measure function to check what max/min values you see, which is really annoying at some point, especially if you just want to get an overview. Took me also a while to notice it only worked if I named my files "<file>.tab".
It also always automatically updates when it detects a file change, which is as well very annoing when generating very long simulations with a lot of data produced, as it does this reload over and over again. Try it, you will see what I mean...
This plugin (download from around Feb./2021) was for me not good enough even for fun use, so I kept using Python for post processing. It takes a bit to set up wave forms, but when you have it, you can simulate and post process directly from Python - and immediately get a nice report. But I am happy I could test the plugin without any fuzz, I'd hope it improves to a level where it is really usable (or easier to configure - in case I just couldn't do a proper setup), at least to a level of gtkwave for VCD files.
- Thus, I don't show the VS setup here, as my opinion is: for paid tools you should also get support from there. That's what you pay for. But, there are some web pages showing how to use VS with SystemC/SystemC-AMS - just use your favourite web search tool...
Commercial environment
For high productivity, you need someting better. I would not even recommend to pay for professional IDEs like VS, as they lack the productivity tools supporting you in modelling.
You really need an environment which generates code from meta models with e.g. graphical support for schematics and state machines. In most cases, there is no need to write C++ code at all, but you still get the performance of a compiled C++ model!
- For this workflow I propose COSIDE® from Coseda Technologies (external link). You don't need any of the previous step, because you get a complete turnkey solution in your hand, you don't even need to bother with compiling the open-source libraries (but get many more proprietary productivity libraries as well).
- This package also supports coupling of SystemC/SystemC-AMS to many other tools, like Mathworks Matlab®/Simulink®, Mentor Questa®/Modelsim®, Cadence Invisive®, Synopsys Saber® and so on. Newer versions also support HLS (high-level synthesis) of models to e.g. the Xilinx Zynq platform.
- I also use this environment with the students in my lectures at CUAS. An example of a model created with this environment is shown here.
Outlook
There is more to come: for example
I watched this SystemC FIKA on 17th of March 2021. Here a (proper) approach of combining SystemC with Python was shown as well as a Compiler to generate SystemVerilog out of SystemC code.