mirror of https://github.com/YosysHQ/yosys.git
f6e36f0e54
This commit adds a reader/writer implementation for a file format optimized for fast, single-pass storage and retrieval of design state changes, as well as a recorder/replayer that integrate with the eval and commit simulation steps to create replay logs and reproduce them later. This feature makes it possible to run a simulation once, recording the stimulus as well as changes to the registers, and navigate to a past time point in the simulation later without rerunning it. Both the changes in inputs (stimulus) and changes in state are saved so that navigation does not require calling `eval()` or `commit()`; only a series of memory copy operations. On a representative example of a SoC netlist, saving the replay log while simulating it takes 150% of the time it would take to simulate the same design without logging, which is a much lower overhead than writing an equivalent full view (including memories) VCD waveform dump. The replay log is also several times smaller than the VCD dump, and more space savings are available as low hanging fruit. Replaying the log has not been optimized and currently takes about the same time as running the simulation in first place. However, it is still useful since it provides fast navigation to an arbitrary time point, something that rerunning the simulation does not allow for. The current file format should be considered preliminary. It is not very space-efficient, and my testing shows that a lot of time is spent in the write() syscall in the kernel. Most likely, compression and/or writing in another thread could improve performance by 10-20%. This may be done at a later time. |
||
---|---|---|
.. | ||
cxxrtl | ||
README.txt |
README.txt
This directory contains the runtime components of CXXRTL and should be placed on the include path when building the simulation using the `-I${YOSYS}/backends/cxxrtl/runtime` option. These components are not used in the Yosys binary; they are only built as a part of the simulation binary. The interfaces declared in `cxxrtl_capi*.h` contain the stable C API. These interfaces will not be changed in backward-incompatible ways unless no other option is available, and any breaking changes will be made in a way that causes the downstream code to fail in a visible way. The ABI of these interfaces is considered stable as well, and it will not use features complicating its use via libraries such as libffi or ctypes. The implementations in `cxxrtl_capi*.cc` are considered private; they are still placed in the include path to enable build-system-less builds (where the CXXRTL runtime component is included in the C++ file of the simulation toplevel). The interfaces declared in `cxxrtl*.h` (without `capi`) are unstable and may change without notice. For clarity, all of the files in this directory and its subdirectories have unique names regardless of the directory where they are placed.