The following is a list of changes since the initial Simics 7.0.0 release. The described changes are the changes done to the package Simics Base (package number 1000). Changes to other packages are described in the release notes accompanying a particular package.
bank_instrumentation_subscribe interface was restricted to
disallow calls to remove_connection_callbacks, and bp.bank.break -once
was updated to respect this restriction. This helps resolving some
use-after-free violations detected by address sanitizers.simics_start.py was loaded for a different module than the one that was ultimately loaded.
Fixes part of SIMICS-23143.list-low-level-breakpoints unsupported under internals.transaction-tracer tool is now officially released. Do
help new-transaction-tracer for more information.pcie_register_write_action template now invokes the
pcie_write_action() method before the field writing dispatching has taken
place. A new template, pcie_register_write_action_post has been introduced
which has the previous behavior of the pcie_register_write_action template.
The method name in that template has a new name.provides can now be set to NIL by
the providing script, even if not declared with allow_empty.list-low-level-breakpoints which lists some of
the available breakpoints not directly handled by the <bp-manager>.
Notice that of some <bp-manager> breakpoint types are implemented using
the breakpoints listed by list-low-level-breakpoints, so the set of
breakpoints <bp-manager>.list and list-low-level-breakpoints could
overlap.memory-map command now clearly displays if an address range has multiple conflicting mappings,
referred to as ambiguous mappings in Simics. Previously the memory-map command just displayed those ranges as
empty.html-report and
html-diff-report commands:
vmp.html page has been removed. Its graphs are now
in the VMP and VMP Details groups on the main page.Probe_Key_Histogram_Options property for configuring
histogram presentation, including displaying values without percentages or
aggregation of omitted values.enable-probes command has been run, directly or
implicitly by another command.virtual_data_breakpoint and virtual_instruction_breakpoint
interfaces have a new optional method, list, which lists the breakpoints
added through the interface. It is only present in modules with build-id 7204
or later.addon-manager always created a virtual environment in the project,
even when project-setup was run with --no-venv.lcov-output command will now count call sites as executable
lines in a similar way as html-report does. Pass the
-call-sites-not-as-executable-lines flag for previous behavior.lcov-output command will now include inlined functions
in the reports. Inlined functions can optionally be excluded with the
-no-inlined-functions flag.-functions-from-symbol-table flag was provided (fixes HSD-16031744858).html-report output where functions obtained from
the symbol table were not counted in the main page summary..md and .html.pcie_device_id atom based on the incoming address. This behavior is already
present for Downstream PCIe message transactions.--python parameter, and not only the SIMICS_PYTHON
environment variable, can now be used to choose the Python that
project-setup itself is run with.print-target-info and list-target-info commands now
only show blueprint-namespace objects that have machine information
set, and omit properties with zero-like values (no disks, no memory,
no storage, and so on), since this data cannot yet be reliably
extracted for blueprints. A new -include-empty-info-blueprints flag
restores the previous behavior of showing all blueprint-namespace
objects and properties.system-perfmeter and system-perfmeter-summary commands are now deprecated in favor of new-system-perfmeter, which is built on the probes framework. A warning is printed when system-perfmeter is activated.simics_generate_cc_interface CMake helper to generate a C++ wrapper from a C interface header. The generated header is placed under c++/ in the build directory, automatically wired as a dependency of the module target, and exposed via the ::headers interface target.api-help has been updated.
The document has also changed name and structure so old links to it will be broken.os-awareness-interfaces module and headers were removed. The
os-awareness headers under simics/simulator-iface should be used.pcie-downstream-port class now performs type1-to-type0 configuration and
message conversions when the request’s bus and device numbers match those of the directly
connected PCIe device below. This is more in line with the PCIe specification and the
Flattening Portal Bridge capability.
Previously all type1 requests were converted to type0 if the bus number
matches the secondary bus number of the pcie-downstream-port.html-report and html-diff-report commands. A new vmp.html page
contains all VMP graphs for advanced analysis.sys.stdout with a non-standard
Python object (fixes SIMICS-23542).setup-venv script.[[nodiscard]] to let the compiler diagnose callers that accidentally ignore failures or validation results. Callers that intentionally discard a result can explicitly cast it to void.html-report and html-diff-report commands:
sym-from-address command that allows you too look which symbol (function or global variable) a given address is part of.
Fixes SIMICS-12149.gfx_break interface now uses uint32 instead of
int where appropriate.gfx_break interface now includes two new methods:
match_bytes and store_bytes, for facilitating having in-memory
breakpoint data.store and remove methods in the gfx_break
interface now log error messages on failure as well as returning
false.match in
the gfx_break interface has been relaxed to Cell Context.method add_map() and in template pcie_upstream_ingress_handling which now requires a device id to additionally
be passed.update_link_blocking(). This is now fixed.get_target_link_speed() a default implementation to allow for
overrides.SIMICS_CC_API_ENABLE_BANK_MODELING to OFF.finalize and objects_finalized methods to protected scope in ConfObject class.html-report updates.arm_axi_id for the AXI transaction identifier (AXI ID).Param now accepts an integer type constructor argument advanced which defines the advanced setting for the given parameter (SIMICS-23128).project-setup when no Python
installation can be found.status command. They are also
available via the osc_parameters attribute.doc or short when searching for commands with help-search (fixes HSD-21044785734).map_target template from utility.dml now frees the internally
created map target upon device deletion.max_clients attribute, as well as the max-clients
argument to the start-simicsfs-server command, now has default
value 32 (fixes HSD-14028263990).confclass. See Model Builder User's Guide in the Modelling with Python (confclass) section (fixes SIMICS-22831).SANITIZE_ALL_MODULES option to build all modules
with ASAN and UBSAN regardless of simics_add_sanitizers
annotations. Useful for CI-level sanitizer validation.arm_smmu_qtw_access_type atom have been added. See the header file simics/arch/arm.h.ai-mode, ? and list-ai-sessions, that allow interaction with a GitHub Copilot AI agent from the Simics CLI. To launch Simics with CLI in ai-mode, use the --ai-mode flag.New function power state: %s”) and hot reset (“Hot reset triggered on %s”), and rephrased the former log statement slightly.html-report, all overlapping "info"
entries are now properly removed.html_report.py for compatibility reasons when generating
reports directly from Python. Scripts that use the .py file should be adapted
to use html_report package instead.html-report when mappings for sections are
used.html-report could fail if there were overlapping
mappings and conditions.SIMICS_PYTHON is now set to the
path of the Python binary in the generated virtual environment.project-setup will no longer
override the PyPI server used to install pip packages from. The
user/system default will be used instead.-call-sites-not-as-executable-lines flag.-exclude-conditions flag.max_clients used to configure the
maximum number of connected SimicsFS clients.hotplug_event(int type) that generates an MSI if the
hot plug event conditions are met. The method is overridable to allow users
to provide an alternative event mechanism.pcie-memory-read, pcie-memory-write, pcie-io-read,
pcie-io-write, pcie-config-read, and pcie-config-write now have a new
argument pcie-downstream-port which can point to any object of class
pcie-downstream-port or pcie-downstream-port-legacy. The access will then
be issued to this downstream port. This argument is mutually exclusive with
hierarchy. Refer to the respective command’s help for details.confclass library, it is no longer allowed to use a container type instance (for example []) as attribute default value. The reason this is not allowed is that the default value would otherwise be shared between all instances of this class. For example, if an attribute abc is declared with cls.attr.abc("[i*]", default=[]), update by changing the default value from [], to either list, or lambda: []. That is, a callable that takes no argument and returns a new instance of the default value. The callable will be called each time the class is instantiated (fixes SIMICS-23520).libgcc_s library have been updated to match gcc 16.1.list-objects max-depth=N command now works without -tree; the depth limit is applied to the flat object list as well as the tree view.pcie_config bank now has attributes pcie_gen_speed and pcie_link_width to configure the maximum link speed (based on the supplied PCIe generation number) and maximum width for the port. Refer to the help text of these attributes for details.-functions-from-symbol-table flag to <code-coverage>.html-report or
similar flag for other command.egress_control is now an array
of 32-bit registers that can be of size 0 up to 8, parameter egress_vector_size controls
the vector size. Previously the egress_control register was always a single 32-bit register.clean-<module> target, now using Ninja’s built-in clean tool.objects_finalized template, which is in the vein of
init and post_init, representing the stage after the device has been
created. Once Simics has successfully configured both the device and any
other configuration objects created at the same time, it will then ensure
that the objects_finalized() method is called of every DML object that
instantiates the objects_finalized template.
The device object always instantiates this template.info command for i2c-link-endpoint objects when a slave device’s addresses() method returns Nil (meaning the device may respond to unspecified addresses). The address is now displayed as Some other addresses (fixes SIMICS-22297).lower(uint8 i) in the MSI capability.pm_enter_d0() and pm_enter_d3() in the PM capability which are called on device power state transitions.bin/create-modcache script now correctly runs Simics
from the project and not from the Simics-Base installation.html-report and html-diff-report commands now include a new
Analysis section: automated rule-based findings that score and highlight
potential performance concerns (execution engine mix, VMP usage/blocking
reasons, interpreter hotspots, and more). Detects performance phases via
region detection and runs analysis per phase, showing where in the workload
problems occur. Findings are scored and filterable by severity.from_obj method now throws std::runtime_error for null pointers instead of relying on debug-only assertions.simics::InterfaceLookup that can be used to improve the performance of interface method calls. This, however, impacts binary compatibility and needs an opt-in via the CMake variable SIMICS_CC_API_ENABLE_INTERFACE_LOOKUP. It also requires compilation with the C++ 17 standard.Core_Log_Message_Always hap for all modules. Previously,
it was only available manually by defining
SIMICS_API_USE_LOG_ALWAYS_HAP when compiling the module.list-pcie-hierarchies added support for devices with multiple
pcie-downstream-ports as subobjects.snapshotsChanged event from the Simulation service (now only in SimUtils service).SimUtils with commands for controlling simulation (fixes SIMICS-23451, HSD-18044235798, HSD-18044025540 and DEBGGR-24566).info os processes format is now more aligned with
how gdbserver formats it, this allows tools such as cppdbg to parse the
output.Configuration RRS Software Visibility
feature. This enables software to determine when a PCIe Function is ready for configuration
requests after Hot/Cold/FLR reset.send_frs_msg in template exp_dev to send
VDM Function Readiness Status messages.pcie_gen_speed and pcie_link_width attributes now properly
work.os_awareness type breakpoint no longer require an object if there
is only a single object of os_awareness class in the target system.-only-connects to command list-attributes to
only show attributes that correspond to what was defined as a connect
in DML. This employs a simple heuristic so it might misinterpret some
attributes as connects or miss connects if they are defined in very
peculiar ways.x (examine-memory), disassemble, and
address-profile-data commands can now be gracefully interrupted by
pressing Ctrl-C once. The partial output produced so far is kept and a
message is printed to indicate that the command was interrupted.-r to the devs command that will make
devs recurse over all children of the object passed to devs.wait-for-read/write can now also operate on objects
implementing the transaction_translator interface. With this change
the commands now use SIM_issue_transaction to send the transaction
and no longer use a fixed interface. The interface used by the commands
is selected by the rules defined by SIM_new_map_target.
Fixes SIMICS-23458.is that looks
like it was instead intended for an object declared immediately before it,
such as the following:
// Stray semicolons cause each 'is' to be standalone, affecting the
// containing register rather than the fields
field f1 @ [15:0]; is read_only;
field f2 @ [31:16];
is write_only;
get() and set() of banks will now log an
error and do nothing if passed an invalid access size. This may impact poorly
made inquiry reads and writes to banks.connect objects now lists the set of
optional interfaces, in addition to the set of required interfaces.video-export which enables commands
video-export-start and video-export-stop, for exporting the
console contents to a video file, using ffmpeg as encoder.-print-engine argument to pc-tracer-tool which displays
the execution engine for each traced instruction.root_error_status, previously the whole register was marked
as RW1C. Now only the applicable fields are marked as RW1C.
Previously the AER interrupt MSI number could be unexpectedly cleared.rbar_capabilities and vf_rbar_capabilities
Sizing capabilities can be directly set through field init_val instead.upstream_ingress_blocker in a subgroup. It can for instance be used to model error injection,
link down or power states. The blocking can be fine-tuned
to only trigger on specific PCIe TLP patterns.trigger function in the pcie_link_training
interface since it takes an obsolete device_id parameter. The new function
invoke should be used instead.reset.dml with templates for conditional reset.status command to “look through” downstream ingress handlers and show
the mapped resources instead of only the ingress handlers.project-packager script now uses /bin/bash on Linux.SIMICS_PYTHON environment variable; they always use
the Python selected when the project was set up (fixes HSD-14027625285).SIM_load_target API function now accepts preset names
(as returned by list-presets) in the presets argument, in addition
to file paths (fixes SIMICS-23468).asciicast-export which enables commands
asciicast-export-start and asciicast-export-stop, for exporting the
console contents in asciicast format.print-device-regs, when issued on a device with multiple banks, showed registers
of a previously printed bank again in the next bank (SIMICS-23265).cmake-wrapper.mk to match GNU Make’s D=0 build.write-device-reg command, will no longer cause constant memory growth.
Fixes SIMICS-23455.pcie-memory-probe command to all banks which are PCIe
functions implemented with the new PCIe library. This command probes an
upstream PCIe memory transaction.pcie-memory-read,
pcie-memory-write, pcie-io-read, and pcie-io-write for
performing PCIe memory and I/O space accesses through the PCIe
hierarchy.Addressed an issue stemming from an upstream bug that would commonly cause the reported column number in warning and error messages to be incorrect (fixes SIMICS-23466). This issue also affected the reported line number in rare situations.
This issue had always been present in DML, and most notably affected error messages surrounding methods, as well as object declarations since Simics Base version 7.78.
vf_base_address for SR-IOV BARs now expose method increment_map_info.
By default, it increments the base address by the VF BAR length and keeps the start address at 0.
With this change the PCIe device model can customize the base and start address per VF
to handle custom address translations for SR-IOV BARs.get_virtual_functions in template
sriov_capability shared.project-setup will now install
all requirements.txt files in Simics add-on packages together, to
facilitate pip resolving intra-package dependencies.<uefi_fw_tracker_comp>.detect-parameters -load will be performed automatically before enabling, which means that the tracker will get the default parameters before enabling.get-memory, set-memory on processor
objects, as well as the global commands get and set now
automatically appends the processor architectural atoms with the
values representing the processor internal state, to the
transaction, before forwarding the transaction to physical memory.pcie_msg_vdm_frs_reason for VDM message
Function Readiness Status message.param pcie_obj in template config_bank is now used
when mapping and demapping functions over the pcie_map interface.
Previously it was hard coded to bank.obj.
Default behavior has not changed, param pcie_obj defaults to
bank.obj.project-setup failed to update the virtual environment.libfuse3 instead of libfuse2.run-until and wait-for commands are interrupted,
the corresponding breakpoint ID is now displayed.max=1)
appeared earlier on the command line.get-memory, set-memory on processor objects.offset argument to the print-device-reg-info
command, and offset and size arguments to the print-device-regs
command, allowing print-device-regs to display information about an
arbitrary address range in a device.list-packages command now uses the same column order
as the version command.version command now by default displays the same data
as the --version command line argument.log-filter command now allows adding regular
expression filters via the -regexp flag.pcie_commands.pylist-preferences command now also lists and returns
module-local preferences.help command now shows information also for not yet
loaded modules.pci_access.py to work with PCIe devices that use the newly added upstream_ingress port.top-level '#if' body with unsupported statements. These warnings were
often triggered in common code, causing excessive polution in build logs unless --no-warn=WEXPERIMENTAL was passed to DMLC.
The same rules as before apply to #if statements: Statements such as
param and template are forbidden inside #if, but a special exception
allows forbidden statements to appear specifically inside an #if (dml_1_2)
block. The warning message was meant to highlight this irregularity, but
caused more harm than good; error messages surrounding the special case have been improved instead.io_apic interface headers into Simics Base package (SIMICS-23443).pc-tracer-tool, is now available for
recording executed program counter (PC) values. The tool supports
both virtual and physical addresses, an optional cyclic trace buffer,
and per-processor name output. Recorded PCs can be printed, saved to
a file, or disassembled. This tool is significantly faster than the
instrumentation-tracer-tool when only PC tracing is needed. See
the new-pc-tracer-tool command for details.pcie_upstream_ingress_handling that creates
a port upstream_ingress implementing the transaction_translator interface.
This template is used by template pcie_device (which is also used by
template pcie_port) and hence almost all elements of a PCIe hierarchy
will now have such an upstream ingress port. All transactions (memory, io,
config, and message) coming from upstream into a device will pass through it.
This allows for centralized handling of all incoming traffic before and after
they take effect in the device. The template pcie_downstream_translators,
which only existed in type 1 devices has hence been removed and
is replaced by the more general template pcie_upstream_ingress_handling.New html-diff-report command added, which produces one report comparing two runs.
Features:
The html-report command has been improved:
The html-report command and its generated graphs now includes new features:
print-image-memory-stats command now displays the
sizes of the image objects. When used in an expression, the returned
table now includes an additional column with the image size.set-time-quantum command now shows which cell each
clock belongs to.root_of_search of the list-device-regs
command has been renamed to root-of-search.sim object will now trigger notifiers with names
swap-read-start/swap-read-stop or
swap-write-start/swap-write-stop when the swap is read or
written, respectively.max-regions argument.
Previously the contiguous regions were counted as a single region and could unexpectedly
make the command very slow.SimicsExecTraces) execution trace files (fixes HSD-18044167557).#if now has full support for in each declarations
(fixes SIMICS-23427.)
Previously, any in each declaration appearing directly within an #if would
be rejected by the compiler unless leveraging the experimental and heavily
limited feature of top-level #ifs containing unsupported declarations.show_zero_entries
attribute and a corresponding -show-zero-entries flag on the
histogram command. When enabled, histogram entries with a count
of zero are included in the output. This is useful for views that
have a fixed set of categories, such as size and the xed-based
views. The feature is not supported for the mnemonic and
x86-normalized views, which only track instructions that have
been observed during execution. Fixes HSD-18044263119sim->env, and replacements (fixes SIMINT-1704)pcie_lib_simics_main_version to the PCIe library to
identify the main Simics version that the library was shipped with.device_id argument from the do_link_training() method.
Link training is only applicable for links, and it doesn’t make sense to select
a certain device on a link when doing link training since there should only be
one device anyway. This is a breaking change for anyone that may be calling this
method or overriding it.html-report command now produces an improved performance report:
flamegraph.pl tool. The new
flame graphs support zooming into sub-trees, regex search with
hit-count highlighting, an inverted (bottom-up) view, a minimap for
navigation, and an adjustable depth slider with a smart default
based on sample distribution. The new flame graphs also adjust the
width corresponding to the width of the web browser.processor_memory_inspection which
contains methods logical_inspection_port and physical_inspection_port.
The methods return a port that can be used to access
the physical memory attached to the processor. Transactions through
these ports will have the same access rights as the processor
in its current state.flamegraph.pl Perl script which produced static SVG files.
This is an internal package; the Python API and generated HTML format may change without backward compatibility guarantees. Used by other Simics modules such as vtune-measurement.
Key features:
<vtune_measurement>.flamegraph command now generates an
interactive HTML5 Canvas flamegraph instead of requiring the external
flamegraph.pl tool and producing a static SVG file. The new
flamegraph supports zooming into sub-trees, regex search with
hit-count highlighting, an inverted (bottom-up) view, a minimap for
navigation, and an adjustable depth slider with a smart default based
on sample distribution.
The old SVG output can still be generated with the -svg switch, but
still depends on having flamegraph.pl in the path.find_file usage to properly handle absolute and relative SIMICS_PROJECT_DIR paths.branches sections in raw reports will now include branch
instructions that have not been executed, the data is added when disassembly
is added.explicit_method_decls, which can be
enabled per file by a statement provisional explicit_method_decls;.
This feature adds a syntax method m() :{ ... }, which signifies that the method
is not intended as an override. The existing syntax method m() { ... }
is re-purposed to signify that the method is intended as an override,
Inconsistent usage will trigger compile errors. This is useful to
catch misspelled overrides.shared abstract method declarations, e.g.
method m(uint8 a) -> (int);
Similarly to untyped abstract parameter declarations, an abstract method
declaration may be specified regardless of whether it’s in the context of a
template definition, and regardless of what other declarations of the same
method exists (except that all declarations must share the same signature.)pcie_version >= 2.1 as per the specification. Previously they
were defined if pcie_version >= 2.0.pcie_version 1.0 devices that have
the AER capability. The tlp_prefix_log_or_header_log_ctd_len param,
controlling whether the AER TLP Prefix Log registers are defined, now
defaults to 0 if pcie_version < 2.1 as these registers don’t exist in older
PCIe versions.pcie_version is 1.0 and
has_links is true.sim.interface.lookup* probes to correctly include
interface lookups that were previously omitted.original_linear_address to the x86_memory_transaction_t.telnet-frontend object has active connections could not be loaded.dodoc handle indented simics test blocks (fixes SIMICS-23364).--python parameter is used.project-setup could crash
when using a host Python.snapshot-created and snapshot-deleted.snapshotsChanged event to the Simulation service which will be sent when a snapshot is created or deleted (fixes HSD-18044025540).<vtune_measurement>.save_folded_stack and <vtune_measurement>.flamegraph commands now handle VTune™ Profiler errors more gracefully.SIMICS_BUILD_ID validation logicstart-playback would crash when used with forward slashes (fixes HSD 18044179024).transaction interface.transaction interface.obsolete/6.h header so end-users can migrate models from 6 to 7.list-pcie-memory-hierarchies to list
PCIe memory hierarchies in platforms (fixes SIMICS-23352).memory-map now merges continuous regions into one block.memory-map now correctly treats a region with ambiguous mapping
as an unmapped region. Ambiguous mappings happens when two or more objects overlap
within the same memory-space and share the same mapping priority.trigger_system_error() method in the handling_error_message template.memory_base_address_split_low and memory_base_address_split_high
to support BARs split into two 32-bit registers where access control is individual per register.LogStream class from SystemC Library to C++ API. The class is now available in simics/log.h.EventInfo struct.CallbackType into simics::BankIssueCallbacksInterface to narrow its scope.systemc.cmake to the 1013 add-on package, reducing the amount of SystemC exposure in the Base package.<code-coverage>.html-report command when using
–tree-summary, paths in the middle of the tree could get excluded even
though there were source files at that location.Map generation is now updated when a memory-space breakpoint is planted or removed. This is needed in order for cpus to handle page-crossing breakpoints (fixes HSD-15017812702).
Added type hints and reference documentation for simics.confclass (fixes SIMICS-20150).
Added a function SIM_call_python_module_function to call a Python function
from C. It obsoletes the functions SIM_call_python_function and SIM_eval_python,
by providing an easier way to pass arguments and simpler error handling.
The SIM_call_python_module_function function requires Global Context. Also added three additional functions, SIM_pyfunref_import, SIM_pyfunref_call, and SIM_pyfunref_free, which allow Python functions to be called from other execution contexts.
This fixes SIMICS-22852.
Added hooks to the pyobj library for the objects_finalized object initialization phase. All Python classes of pyobj now have an _objects_finalized method.
Added two methods get_state and set_state to the
break_strings_v2 interface. These are used to support
serialization of console breakpoints.
Any objects that currently implement this interface need to also implement these methods henceforth. This is however expected to have limited impact since all known implementations of this interface reside within the Simics Base package.
new-gdb-remote with the cpus argument. Then on the client side use
target extended-remote <ip>:<port> followed by adding new inferiors for
processors and then attach a process id for the cpu to that inferior.
The process ID for each cpu can be found using info os processes in the
client or by running the info command of the gdb-remote object.stop command now freezes any delta or session values
until the start command is issued. The probe increments
while the sampler is stopped, is now discarded in
the samples and the summary (fixes SIMICS-23258).plot command now emits JSON compatible with Plotly 3.x,
where the titles are defined inside dicts, and not
directly as strings.modules has now been moved to
a sub-module simics._modules (fixes HSD-18044053367).AfterCallInterface’s methods get_value and make_copy as const.AfterEvent::destroy which now frees event data when an after event is cancelled before invocation.doc_ to doc- to match other prefixes.debug_symbol interface. This also affects the sym-list command and the
code coverage tool (fixes HSD-14026068255).cmake-wrapper.mk file is only created in hybrid projects with both GNU Make and CMake enabledaddon-manager, does not create GNU Makefiles in CMake-only projects anymore (fixes SIMICS-23343).Simics::C++ target to Simics::Simics needed in some build setups.project-setup --sc-device. The generated config file for the skeleton device contained invalid syntax.new-tcf-exec-tracer) for managing tracing with the TCF service SimicsExecTraces (fixes HSD-18043615514).--breaking-change which replaces the
--no-compat flag. This flag is easier to understand, and aligns better with
terminology used by Simics. Existing --no-compat flags continue to work
like before.simics_add_systemc_module function and two new variables; SIMICS_1013_ADDON_DIR and SIMICS_7213_ADDON_DIR.SIM_new_map_target API function.SME_DISABLE_UNIMPLEMENTED_LOGGING compiler directive to turn off unimplemented write messagessimics.SIM_init_command_line(); simics.SIM_main_loop() after importing simics into a plain Python session Simics now attempts to detect if the Python session was interactive and if so, initialize the CLI for interactive mode (fixes SIMICS-23230).intel-io-apic has been added, which is a DML 1.4 rewrite of the original io-apic class and at the same time it merges all features of various other io-apic model variants into one place.Connecting external Simulators, Emulators or Hardware in the PCIe modeling library
documentation.set.std_to_attr to catch exceptions during C++ type to Simics attribute conversion. When failed to convert, it reports a Simics attribute error, and return an Invalid attribute.hostfs functionality is now deprecated. Use SimicsFS
or the Simics Agent instead.spec-viol.targets/common/benchmark/system_perfmeter.probe_collection.json
This file defines collections that can be used directly
when creating the tool. The add-probe command can now
also accept a probe-collection argument. Users can create
similar JSON files and load them using the
load-probe-collection command. Loaded probe-collections
can be inspected with the list-probe-collection command.pcie_gen_speed and pcie_link_width to the
creating commands of the NVMe component. The first parameter sets the link
speed to the highest supported link speed given a PCIe generation of the I/O
controller. The second parameter sets the maximum link speed that will be
supported by the I/O controller.nvm_subsystem_comp which has support for
multiple controllers and multiple PCIe connectors. The number of (I/O)
controllers that will be present in the NVM subsystem is controlled by the
n_io_controllers parameter when creating the NVM subsystem using
new/create-nvm-subsystem-comp. They will have controller IDS values in the
range 0…63. All controllers will have the same NVM Subsystem Qualified Name,
but their serial number will be the provided SN parameter appended with
-<controlled-id>.add-namespace command now also works after the NVMe components
have been instantiated.list-allocated-namespace-images which lists all
the allocated namespaces, their UUID, which controllers they are active in as
well as the namespace size and the image object which represents the
namespace.hostfs has been removed.name argument to the bp_legacy_comp decorator optional. If not provided, the component name will be the same as the decorated function name._class_desc) on blueprint adapter classes by passing the class_attributes argument to the bp_legacy_comp decorator. Each key-value pair in the dictionary will be set verbatim on the generated class.read_field, write_field, read, or write templates have all been made
overridable. See the documentation of these templates for more details.ram class objects in Simics to use
shared memory as backing storage. For simulation scenarios where Simics
co-exists with an external simulator direct access to the other side’s
memory can greatly improve performance.screen_data attribute.“_” can no longer be used as the name for arbitrary declarations.
Instead, it is now only permitted in particular contexts, and in these
contexts, _ will affect the declaration in a way suitable for when the
declaration is unused in some particular way. This feature is referred to
as the discard identifier, and the contexts where it may be used are:
Method-local bindings (e.g. variables and input parameters.)
When a method-local binding is given the name “_”, it will not be added
to scope. This is useful for e.g. unused method parameters.
Index variables for object arrays
When _ is specified as an index variable, a parameter will not be
created for it, meaning it cannot conflict with any other definition, and
it cannot be referenced in the code in order to get the value of the index
in question. It also isn’t considered to conflict with any other
definition that gives the index variable a different name. This is useful
when defining an object array specification which does not depend on the
index.
Layout member names
When a layout member is given the name “_”, that member will not be
referencable within DML code, but will still affect the memory
representation of the layout. This is useful to represent e.g. reserved
or padding bytes.
Note that as a consequence of these semantics, any reference to _ in code
will always resolve to the discard reference.
Added the discard reference “_” — a non-value expression
which may be used as an assign target in order to explictly discard the result
of an evaluated expression or return value of a method call (fixes
SIMICS-21584.)
Example usage:
_ = any_expression;
_ = throwing_method();
(_, x, _) = method_with_multiple_return_values();
html-report.create_default_register to the Bank class, allowing customization of the default register type created during bank initialization.SimicsCpuBuild CMake package. Depends on Simics add-on package 7201.CMakeLists.txt template now shows how to configure a CMake project without having a Simics project in the same root, by providing the SIMICS_PROJECT_DIR cache variable.VT_thread_cell_association_begin and VT_thread_cell_association_end functions.instruction-count, exception-histogram, tracer-tool,
instruction-histogram, memory-profiler, x86-mode-histogram,
x86-branch-profiler, simple-cache-tool, event-histogram,
ram-tracer, and the more internal sr-histogram and sr-tick.
The documentation of the new fast_delete argument in the
instrumentation.make_tool_commands() method explains more details.
Additionally, minor memory leaks observed during tool deletion have
been resolved (fixes bug HSD-14026138730).PCIE_Msg_Route_Terminate
can now be forwarded downstream. This is to comply with messages
such as PCIE_PM_Active_State_Nak and PCIE_Optimized_Buffer_Flush_Fill.project-setup could not find the
Python package and no explicit host Python was specified.^ prefix.MissPatternBank template (fixes HSD-22021721281).Bank::transaction_access method now returns Sim_PE_Inquiry_Outside_Memory for inquiry mode accesses to unmapped memory, instead of Sim_PE_No_Exception (fixes HSD-22021701887).after_read callbacks were not invoked if a before_read callback converted the access into an inquiry access. Now, after_read is always called in this case as documented in bank_before_read interface.libstdc++ library shipped with Simics has been
updated to match gcc 15.2.log-setup command) to preferences (fixes SIMICS-17177).libgcc_s library have been updated to match gcc 15.2.-no-gui (fixes SIMINT-1686).SIM_new_map_target() now becomes
translator, transaction_translator or transaction map targets (in that
order) if they are implemented on an object that also implements the
io_memory interface, rather than becoming io_memory map targets.
This can lead to a change in observed behavior, for example when being
mapped into a memory space, such objects will no longer see the io_memory interface calls.tcf-serial-tee will now be created as child
objects of the npk trace object.shared and non-shared method overrides together would lead to an internal compiler error (fixes SIMICS-23289).write method now has a similar semantics as the
read method if the blocking flag to accept is set to
false. In that case it may return -2 instead of blocking.__entry_task symbol, which
is normally included in kallsyms when it contains per-cpu data or in
vmlinux symbols.soft_reset and hard_reset in template hwinit
are now declared shared.NEEDS_C23 to modules that needs C23 and at least GCC 13 to build correctly.telnet-frontend object.sanitize_op_time_s attribute (fixes HSD-14026112783).nqn_uuid attribute that controls the uuid used in the
reported SUBNQN. This is to support cases where multiple instances of an NVMe
device of the same class can be connected to the same system.SN to the component creation commands which sets
the serial number of the NVMe device. The SN is also used to generate a UUID
that will be set as the SUBNQN UUID in the NVMe device.iface argument to the print-blueprint-state command
was renamed to state.DataAttr has been added that can be used to wrap a tuple of integers. When wrapped this way it will be passed as an attribute of type “d” to objects. Otherwise it would be converted into a list of integers.bp.list with action or provider the returned
value will now also be filtered.bp.memory commands to be stricter when handling address prefixes to better report combinations that make no sense. It is now an error to plant a breakpoint with a linear address prefix (l:) if the current processor does not support it. It is also an error to use the virtual (v:) or linear (l:) address prefixes if the object argument is a memory-space object.ObjectFactoryWithArg template is now fully determined by the user-supplied template parameter, allowing both value and pointer types. Users who previously used simics::RegisterClassWithSimics with the second template argument as a type (e.g., MyType) and expected pointer semantics must now explicitly specify a pointer type (e.g., MyType*) to retain the same behavior.cli_mode() function to exit
Python mode in CLI.list-notifier-subscribers to allow filtering on notifier name and subscriber object (fixes SIMICS-17640).echo device is now included in the Simics-Base
package, as an example of how to use the external-connection
module.info and status CLI commands were improved.emit_errors group which now exists for
every function (pcie_config bank).usb_hs_keyboard_blueprint has been added to create an USB connectable instance of a USB HS keyboard. Hot-plug connectors are created as well.simics_nvme_blueprint has been added to create an instance of a PCIe connectable Simics NVMe controller with multiple namespaces. Hot-plug connectors are created as well.virtio_pcie_net_blueprint and virtio_pcie_blk_blueprint have been added. The former creates a PCIe connectable VirtIO NIC while the latter creates a PCIe connectable VirtIO block device (disk). Both contain their associated hot-plug connectors.Register::NO_OFFSET, to represent invalid return value of the Register::offset method. This constant is also used as the offset of unmapped registers instead of the hard-coded std::numeric_limits<std::size_t>::max() value. The value remains the same.UnmappedRegister class is now zero-initialized by default (fixes SIMICS-23269).__init__ of the transaction_t class as well as
class member that are always part of a transaction_t instantiation.enum.Enum.provider and action to bp.list to allow filtering on breakpoint provider and action of the break command (fixes SIMICS-17585).bp.list and bp.show, and also hide/empty Oneshot and Hit count for wait-for breakpoints (fixes SIMICS-23241).nocopy class. It still exists in the C++ API v1 sources if needed, but please use the =delete construct instead.logs subdir of the test sandbox.CMAKE_CXX_STANDARD and CMAKE_C_STANDARD variables if they are undefined. If already defined, they will keep their defined values; giving the user more control of the project setup without modifying the template.benchmark-monitor has
been added. This introduces a new framework for running and measuring
benchmarks. The framework is implemented as a singleton object
named sim.benchmark. This object will be further improved in
future updates.SIM_set_thread_name and SIM_get_thread_name Simics API function were added. They can be used to set/get the name of a thread to facilitate debugging when multiple threads are used for simulation.html-report command now emits Java-script code that makes
use of Plotly version 3.0.1, (previously version 2.25.2 was used).html-report command is also quieter by default. Information
about why certain graphs were not produced can now be seen by
increasing the log-level on the system-perfmeter object to 2 or
higher.add-probe command is now quieter by default. The new -verbose
flag can be used to get more information about which probes were
added.virtio_fs_fuse as a
subobject, ridding the need to manually connect an instance of it to the chan
connect. This also means that there are new pseudo attributes added to the
Virtio FS device (set in the virtio_fs_fuse subobject), with share being
mandatory to set during instantiation.virtio_fs_fuse class as this is no longer needed when using the
virtio_pcie_fs class.' and " to proper quotation marks and apostrophes,
... to an ellipsis (…), -- to –, and --- to —.
You can avoid smart punctuation by escaping the punctuation.
This implements SIMICS-23250.explore probe-collection now captures console output. When this
feature is enabled, the html-report command will display a graph
showing the volume of console output (in bytes) over time. Each data
point on the graph is annotated with the corresponding console
content at the time of sampling, offering deeper insight into workload
progression and helping in bottleneck analysis.info and status commands.sudo in scripts. This fixes HSD-18042884016.EventInfo now enforces that get_value and set_value must be NULL when Sim_EC_Notsaved flag is set.cli_table_maximum_width that can be used to limit the width of CLI tables in batch mode and independent of terminal width in interactive CLI. A value of 0 means that table width is unlimited in batch mode and set to the terminal width in interactive CLI.project-setup with host Python,
where the project ended up using the wrong Python path.desc argument of blueprint Param instances would not appear in the table printed by params.help.Field class where the by data approach caused the parent() method to return nullptr for user-defined fields.Path objects are accepted in
function arguments of char * or const char *.Path and bytes objects are
accepted in function arguments of attr_value_t type. They are interpreted as
attributes of types string and data, respectively.textcon: dev.console.content
provides the console content as a string, dev.console.output_bytes
counts the number of bytes written to the console, and
dev.console.input_bytes counts the number of user input bytes.Ctrl+g. To
use this, the tech preview console-switch must be enabled. The
serial console being switched to can be selected using the command
set-console-switch.Register and Field classes by not using the constructors that accepted BankInterface* and RegisterInterface* pointers, respectively. The BankRegister class now uses only the Register(MappableConfObject*, std::string_view) constructor, and the RegisterField class uses only the Field(RegisterInterface*, std::string_view) constructor. This change eliminates the need for separate constructors for “by data” and “by code” approaches, reducing template complexity and improving maintainability.Description type instead of std::string_view for all parameters and members representing register and field descriptions.simics::MapNameToInterface::get_iface to accept a std::string_view instead of a const std::string& for the name parameter. This change improves performance and flexibility by allowing callers to pass string literals, substrings, or other string-like objects without requiring conversion to std::string. Existing code passing a std::string will continue to work without modification.instantiate command to improve performance when executed repeatedly during virtual platform creation (fixes SIMICS-23237).link,
see interfaces i3c_hdr_master and i3c_hdr_slave.simics::Name. Creating an object name with an empty string is now disallowed. All Name instances must be explicitly constructed with a valid, non-empty name.ConfClass method ConfClass *add(const iface::InterfaceInfo &iface). Instead of performing the registration immediately, this method now stores the provided InterfaceInfo for deferred registration at a later stage. This allows the user to replace the default InterfaceInfo for BankPort objects.uefi-module-added notifier will now only be sent out when a
new module is added, previously it could be sent out even without any new
module being added (fixes SIMICS-21367).register_view interface to get/set register value.ParentType to the Port template class which refers to the parent type.host_pools attribute to
an empty list.pcie-downstream-port-legacy.SIM_init_command_line function was fixed not to throw an exception when a simics Python module is executed not from the main thread of a Python interpreter (which may happen when embedding Simics into a Python application). The change fixes HSD-14024457770.pcie-config-probe did not find anything.event_cls is no longer required for user event classes, and the event name can now be passed as a constructor parameter instead.Register_Read_Exception and Register_Write_Exception, have been added to the BankPort class. These log groups can be used to manage log output when exceptions occur during transaction read/write access.qsp-x86/firststeps target and in the Getting Started manual to the 2025.5 release.connect phy is renamed to eth_phy to avoid a name collision with the port phy in the new PCIe library referring to the PCIe PHY. e1000 can still use the legacy PCI library for transitional purposes by setting the parameter e1000_use_legacy_pci_library in the device file.project-setup where it failed to
detect a host Python.confclass to define a Simics class that has a port class, where the port class lacks a Python class, an exception will be raised if attributes with the same name exist both in the parent and in the port class. This change prevents situations where the value for conflicting attributes is silently overwritten (fixes SIMICS-23132).SimicsExecTraces service, "ReadContinuously" and "TracesCountLimit".
If "ReadContinuously" is set to false (which is the default), only the latest "TracesCountLimit" traces are sent when the simulation stops.
When stopping, the client is expected to read all available traces including the final TRACE_LINE_STOP.
If "ReadContinuously" is set to true, the service works as before (fixes HSD-18042581630)._warning statement has been deprecated, through
the introduction of a new compatibility feature warning_statement.
Warning statements will be illegal when Simics API 8 or newer is used.simics_util_vect_without_provisional has been
created. In files without a provisional simics_util_vect; declaration, the vect
syntax is only permitted when this feature is enabled. This feature will be
disabled in Simics API versions > 7, where all uses of vect instead require
explicit provisional declarations.simics_util_vect has been added. When
provisional simics_util_vect; appears in the top of a DML file, DMLC will
no longer print warnings when the vect syntax is used in that file.confclass (related to SIMICS-23132).cls being a pre-defined property of the Python class when using confclass.sloop is used with Python 3.11 or newer, sloop.TaskGroup
now redirects to asyncio.TaskGroup. When older Python versions are used,
the class remains as a local best-effort implementation. The implementation
is necessarily incomplete because of inherent limitations in the Python 3.10
API, although these limitations should rarely show up in normal usage.asyncio. This does not affect the
API, but the integration with asyncio is now tighter which allows native
coroutines like asyncio.delay to be used directly in sloop coroutines.
The tighter integration improves asyncio ability to detect uncaught exceptions
in orphaned tasks, which can uncover previously hidden errors in existing code.
There is still a possibility that exceptions in orphaned tasks are delayed or even
suppressed; the best is generally to rewrite them using a TaskGroup.
For instance, consider the following:
async def reset_value_guard():
while True:
await wait_reset()
assert dev.some_state == expected_reset_value
async def smoke_test()
t = sloop.create_task(reset_value_guard())
await sloop.wait(snoop.Seconds(cpu, 10))
sloop.run_until_complete(smoke_test())
Before this change, an assertion failure in the reset_value_guard coroutine
would remain unnoticed. After this change, the error will be detected and captured
as an exception, but not until the task object is garbage collected, which will
happen after the delay. The proper solution is to use a TaskGroup in
the smoke_test function, which ensures all exceptions are immediately
propagated:
async def smoke_test()
async with TaskGroup() as tg:
tg.create_task(reset_value_guard())
await sloop.wait(snoop.Seconds(cpu, 10))
dynamic_size that allows the disk to grow with every added namespace.image where an out of bounds access would cause an Abort (fixes HSD-14025235661).check-overlaps for finding overlaps in memory-spaces (fixes SIMINT-1474).--stop-on-error and batch mode (fixes SIMICS-22686).sim.status command now reports the maximum number of simulation threads that can be used by the simulator. This number is determined by the loaded configuration and multicore- and multimachine-accelerator settings. The number of threads that are actually used for simulation may be less than this maximum. The number of threads that are used for simulation is also reported by the sim.status command.cap_version was set to 1 in
exp_capability.tlp_prefix_log_or_header_log_ctd_len in
aer_capability to allow removal of the TLP Prefix Log registers. This is
needed for some devices where the next capability starts immediately after the
AER capability and would otherwise alias with the nonexistent TLP Prefix Log.do_link_training method of the exp_link template if that has been
overridden. The link training implementation is now more intuitive to extend,
and includes native support for Flit Mode negotiation.project-packager script now accepts all valid
semantic version strings as package versions.clean-<module> target for cleaning build files and forcing a rebuild of the given module.SIM_break_message was fixed where the same dynamically allocated memory could in rare cases be freed multiple times.SIM_transaction_wait is executed while the callback passed to VT_cross_cell_call is in progress are handled correctly now. Previously, the simulation could hang in such cases.libgcc_s library have been updated to match gcc 15.1.Sim_EC_No_Serialize event flag as been added.
See the documentation for the SIM_register_event function for more information, bug SIMICS-21783.pcie-downstream-port-legacy when
the invoker of the io_memory or the pci_upstream interfaces is not a PCI
device.Param and ParamGroup now accept : characters in their names.
If a : is used, the parts between two colons (or start of name and the first colon) will be used as layers in the parameter hierarchy.ParamGroup can now also be created with only a name and a list of Param or ParamGroup elements. The name will become a layer in the hierarchy of parameters, and all elements of the list will be grouped underneath this layer.AFTER_CALL macro that caused a memory leak when the passed arguments included a string.USING_SANITIZED_SIMICS_MODULES is set, which is done when starting
Simics using the simics-asan build target added in Simics cmake projects.pcie-dma-read and
pcie-dma-write that are added to all PCIe functions (configuration banks)
implemented with the newer PCIe library pcie/common.dml". These commands
issues upstream PCIe memory requests.pcie-config-read, pcie-config-write,
pcie-config-probe that can read/write/probe PCIe hierarchies by passing a
BDF."AddressPreferences" to "AddressTypes" and changed the value type to a number with specific bits for different address types. Also provided the supported "AddressTypes" in the tracer status reply.pcie-downstream-port and pcie-downstream-port-legacy are deleted.pcie-downstream-port-legacy now correctly adds a requester id
for generic_transaction_t mem-ops that are issued by legacy PCIe functions
to the io_memory and pci_upstream interfaces of its pci-bus.sloop.TaskGroup: When a subtask raised an exception
immediately, this would sometimes be propagated as a CancelledError
exception (fixes HSD-15016545944)RegisterValue snooper when waiting
for a long time on a register in a bank implemented using the C++ API v2.trace-history-size
to allow a cyclic buffer in memory to be recorded instead of printing
to the console or write to a file. This can speed up situations when
only the last instructions in a run should be traced. The buffer can
be written to file with the <tracer_tool>.save-trace-buffer command,
or printed to the console with <tracer_tool>.print-trace-buffer
command.generate_dml_compile_commands_json() function now instead adds
a build target for generating the dml_compile_commands.json file rather than
doing it during configuration. This is necessary in order to capture transitive
dependencies of the Simics modules. When using the Simics Modeling VS Code
extension,
the extension will automatically build this target if CMake configuration has
been done within VS Code using the CMake Tools extension. It also no longer
needs to be called at the end of configuration as that is handled internally in
the function.list-pcie-hierarchies now shows if a PCIe function has
been disabled which makes it inaccessible.get-connector-list (fixes SIMINT-1674).SimicsExecTraces which collects execution traces and sends the traces to a TCF virtual stream, and optionally saves it to a file. The traces contains data similar to the output of the new-tracer-tool command (fixes HSD-18040970198).osa_machine_query interface
will now use the x86_msr interface to access registers instead of the
int_register interface (fixes SIMICS-23113). As a fallback if this
would break something a user can set the enforce_int_register_use
attribute to enforce the earlier behavior.requirements.txt in the project is now only used
to add extra Python packages by the user.--no-venv is not used,
project-setup will now automatically install Python packages
defined by any requirements.txt file that is located in the root
of any Simics package added to the project.project-setup will now
automatically create a Python virtual environment and install the
Simics Python distribution package and all its dependencies into it,
unless the --no-venv command line parameter is used.--python to project-setup which can
be used to specify the host Python to use when launching Simics from
the project. The system PATH is used to resolve the specified
path.regex parameter to expect_exception_mgr() to set an
expected pattern in the string representation of the expected raised
exception.Added porting rules to automatically convert event objects in DML 1.2 into simple_cycle_event or simple_time_event when applicable.
Added support for the templates simple_cycle_event, simple_time_event, uint64_cycle_event and uint64_time_event in the forward compatibility layer provided by dml12-compatibility.dml.
With this change, DML 1.4 code for events will normally work out of the box also from DML 1.2 devices.
If you have previously worked around the 1.2/1.4 discrepancy with code like #if (dml_1_2) { template simple_time_event { ... } }, then this change will give name clashes and you may need to remove all such workarounds from your code.
It seems fairly common that this change causes compile errors for event code that is branched on #if (dml_1_2), where branches differ only on method signatures.
In such cases, it is usually safe to remove the #if and only keep the 1.4 branch unmodified. For instance:
#if (dml_1_2) {
post(t, NULL);
} #else {
post(t);
}
can be collapsed into post(t);, and likewise:
#if (dml_1_2) {
method event(void *null_data) {
do_stuff();
}
} #else {
method event() {
do_stuff();
}
}
can be collapsed into:
method event() {
do_stuff();
}
Fixed a regression where e.g. cast(0x400000000, uint64) would not
be considered a constant value (fixes SIMINT-1675).
transaction_translator implemented within PCIe root and switch
ports. This simplifies adding atoms to downstream transactions, applying
access restrictions from a PCIe port and re-direct the transaction to a
different target dynamically.RecursionError being raised.interrupt-script-branch and break-script-branch will now terminate immediately even those script branches that use try/except commands for exceptions handling. Previously, except handler was mistakenly invoked when a Simics script branch was interrupted with the interrupt-script-branch or break-script-branch command (fixes SIMICS-16499).print-device-regs command prints the output in table format (fixes SIMICS-22430).read_custom() and write_custom methods to the memory
group of configuration banks to streamline adding additional atoms to upstream
memory requests. Also added memory_read_custom(), memory_write_custom()
and translation_request_custom() to the ats_capability template for the
same reasons.print-blueprint-state now has a flag -show-unbound which shows unbound states in the output.uart, sata, usb, and eth in std-bp/state.py have been renamed to uart_connection, sata_connection, usb_connection, and eth_connection, respectively. The original names have been kept as aliases for backwards compatibility.GFXConnectionState state was split into two separate states: GFXInputConnectionState and GFXConsoleConnectionState because it turned out to be simpler to model if the input and output directions are handled separately. This change breaks backwards compatibility.pcie-downstream-port-legacy connections to the pcie_slot and pcie_device_slot blueprints. Now, by default the pcie_slot blueprint assumes that it connects to a pcie-downstream-port-legacy. If this is not the case (when connecting to a legacy pcie-bus or a new pcie-downstream-port) set the is_downstream_port_legacy argument of the blueprint to False. The pcie_device_slot blueprint now has an optional is_new argument (defaults to False). If this is True a pcie-downstream-port-legacy will connect this device as a new-style end point. If it is False it will be connected as a legacy end point. Since all other buses (pcie-bus or pcie-downstream-port) can only handle one kind of connection anyway, they will ignore this.id was added to list-script-branches command. The parameter can be used to show information only about script branches with specified IDs (fixes HSD-14016166353).impl.cfg_to_conf bridges are mapped in cfg_space due to
mappings that have been placed in conf_space, they are now mapped with the
same priority as the corresponding mapping in conf_space.explore probe-collection now include additional probes, and
there are graph-specification generating additional graphs for these
probes.html-report command now includes
filters to show or hide plots dedicated to a specific objects,
classes or modules.html-report command can now distribute graphs across multiple
html-files. Each graph can specify an alternate file location;
currently cpu.html and cell.html are used. The command now has a
one-page switch to consolidate all contents into a single file, as
before.SIM_event_class_flags to get the registered event flags for an event class.SIM_get_event_class to get hold of the event class registered on a configuration class.summary command has a new argument, histogram_max_lines, where the maximum
lines in a histogram can be set, otherwise the max number of lines are taken from the
table settings as given by the table-setting command in the monitor.set_bank_as_initialized in MappableConfObject has been renamed and its functionality updated to write_protect_iface_maps. This change is designed to offer a clearer and more intuitive approach to managing the write protection status of iface_maps.cli.sb_create Python function sometimes failed to start a script branch.set-min-latency and set-time-quantum commands now
have the same count and unit arguments as the run command.SIMICS_PYTHON environment variable that was set when
project-setup was run.output-radix command.SimpleBankPort class to make it easier to register a bank port.sync-info command has been renamed to print-sync-info.set-time-quantum command is used for inspection,
i.e. without any arguments, it will now print its output also when
run from a script.list-modules handle paths with embedded .. better.help command can now show information about
interfaces defined on loaded classes.module, -show-port-classes and substr arguments of the
list-classes command now work correctly when used together.list-failed-modules where some failed
modules were not included.tcf object is now marked as permanent and cannot be deleted
once it has been created (fixes SIMICS-23082).print-device-regs command, where certain strings were not matched
correctly.html-report now emits tooltips that appear when hovering over
graphs with a defined description property, describing what the
graph(s) show.new-system-perfmeter explore probe-collection now includes
the new cpu.vmp.disabled_reason probe, along with a graph in the
html-report command..status now includes more information
on how each probe has been added.new-system-perfmeter is run;
added probes are no longer printed.python -m runsimics ....
This only works in a Python virtual environment set up with the Simics-Base distribution package and its dependencies.new-tracer-tool flags -print-opcode, -print-memory-type and
-print-access-type will now work properly after being mixed up.RegisterField class that prevented fields from being registered in an array with names like f[0].RegisterClassWithSimics class where an unspecified dependency existed between its static constructor and the static variable cached_group_id. This dependency could lead to initialization order problems.--verbose, the message about
reading module capabilities is now printed on both Linux and Windows
host.set-prioritized-packages, which caused the command to not affect the Simics module load order.SIM_process_work without a callback is no longer allowed.pip install to install the Simics Python
distribution package, e.g. in a Python virtual environment,
intermediate build directories are now created in a temporary
directory, given by Python’s tempfile.gettempdir(), instead of in
the directory where the Simics-Base package was installed.dev in the Connect class. This function returns the Simics device object that contains the Connect class instance (fixes HSD-14024355119).<host>/bin/py3 to <host>.set-threading-mode, now print an error message and do no changes if they are called while there are uncompleted calls to the SIM_transaction_wait function. Unfortunately, the simulator cannot update threading mode while there are ongoing calls to SIM_transaction_wait function (fixes HSD-18040613289).list-pcie-hierarchies now shows if a PCIe function has
been disabled which makes it inaccessible.api-help command now pulls in reference documentation from add-on packages that include such documentation.print-image-memory-stats command no longer truncates output after 40 rows.substr = <substring> that can be used to filter the output from the command (fixes HSD-22020823986).VMClear
(fixes HSD-13012732428).I3C interfaces: i3c_hdr_master and i3c_hdr_slave.
This is to support modelling of the HDR transfers modes in I3C (fixes HSD-22020865351).alg,
arm_cpu_group_event,
arm_cpu_group_exclusive,
arm_cpu_group_tlb,
bank_after_read,
bank_after_write,
bank_before_read,
bank_before_write,
class_disassembly,
dist_control_node,
dummy_memory_page,
gbic_transceiver,
icode,
instrum_registration,
mips_exception_query,
nios_cache,
nios_custom,
pcie_link_training,
pool_protect,
sparc_v8,
tcp_connection_info,
vga_update,
x86_exception,
x86_memory_access,
x86_pkg_cstate,
x86_smm,
x86_tlb_v2print-device-reg-info will no longer truncate output after 40 lines (fixes HSD-22020938608).arm-v8 cpu models.disable_function and enable_function to template config_bank
to temporarily make a function and its resources inaccessible over PCIe (fixes HSD-22020936945).pci_express is now treated as a warning instead of an error.
It is allowed in Simics to directly connect PCI endpoints to PCIe hierarchies,
so these scenarios will happen by design.html-report command has been slightly improved. Values are not truncated
as much (which we do to reduce the size of the html). Generated class probes
are now displayed in its own section.\xNN,
unless they are part of well-formed UTF-8 characters.risc-v-simple-bp module.qsp-x86-bp module.std-bp module.get and set in sme::field.Bank, Field, HierarchicalObject and Register.release-notes command to print the right version for each package release it lists.SIM_transaction_wait function. Previously, no errors were reported and an invalid snapshot was created. Unfortunately, the simulator cannot save simulation state in such cases so an error is now reported.transaction-wait-all-completed notifier was added to Simics. It helps with saving simulation state when SIM_transaction_wait is used. One can advance simulation - e.g., with the bp.notifier run-until name = transaction-wait-all-completed command - to the point where it is allowed to save simulation state with the write-configuration command.list-transactions command now accepts new flag -show-only-waited. See list-transactions’s documentation for the description of the new flag.sim->batch_mode is now TRUE.no_xml_registers attribute to TRUE.i3c_link_endpoint where checkpointing would
fail if done while the delivery of any I3C message is still pending (fixes
SIMICS-23031).project-setup detects a location of Simics package 1033,
it will now automatically create a package list file in the new
project with the path to that package.ram image sizes, unless the target hierarchy top object has
memory_megs or memory_size attributes.generic-flash-memory (fixes SIMINT-1644).dynamic_size that allows the disk to grow with every added namespace.Event methods to event.cc to adhere to the Simics C++ Style Guide.simics::get_interface template function in favor of simics::detail::get_interface.simics::iface namespace to the simics namespace. For backward compatibility, the files in simics/iface/ still include the corresponding headers in simics/.simics::AttrValue for automatic memory management of attr_value_t.crc.dml for DML 1.4 to Simics-Base. The file existed previously but was not packaged (fixes HSD-16023042081).Connecting External Simulators, Emulators and Hardware and corresponding sample code.json-merge command now gives an error if the number of samples
for the probes differ. The new -truncate-samples flag can
circumvent the error and truncate the sample lists to the lowest
number. Previously, an inconsistent number of samples caused Python
errors when later generating a html-report on the merged run.from_obj function. In the
from_obj utility function, the direct cast from void* to T* could lead to incorrect behavior when T is derived from ConfObject but ConfObject is not the first base class. This could result in incorrect pointer arithmetic and potentially undefined behavior.group_id of the ConfObjectRef class. If there is a need to get the id of a log group, use the macro GROUP_ID(NAME) or ConfClass::getGroupId instead.Allow nesting SIM_process_work calls that have done callbacks (fixes SIMICS-16444).
Fixed a problem with Python wrapping of negative enumeration values (fixes SIMICS-22917)
Simics will now issue a warning if two modules with the same name are detected in the same directory. It is undefined which module will take precedence over the other.
The search order for Simics modules has been changed: If
multiple modules with the same name are available on the search
path, then Simics will select one based only on which directory it
resides in. Most properties of the module search order remain the
same as before; in particular, modules built in the project or added
with add-module-directory still have higher priority than modules
from any package, and modules from prioritized packages still have
higher priority than modules from non-prioritized packages.
However, when choosing among conflicting modules e.g. among
non-prioritized packages, Simics previously preferred the module
with the newest build date; this property is no longer significant.
Technically, the new search order is based on Python’s sys.path:
Simics adds entries in sys.path for all module directories, and
then searches for modules based on the order they appear there. If
the Simics-managed sys.path entries are tampered with, some
commands (set-prioritized-package, add-module-directory) will
report an error and refuse to work. A new CLI command
reset-sys-path has also been added to restore these sys.path
entries to a consistent state.
extern typedef referenced a non-existing type. E.g., the following would not give an error if never_used_t was never used:
extern typedef struct {
undefined_type_t member;
} never_used_t;
The bugfix is opt-in, because an immediate bugfix would risk breaking existing builds; the error will only be reported when the flag --no-compat=broken_unused_types is passed to DMLC. This flag will be automatically enabled in Simics 8.generic_transaction_t in the case where it is included as a value
in another struct in a Simics module..name members to the hierarchy of registers and fields
returned by dev_util.bank_regs (fixes HSD-13012531007).SIM_LOG_XXX_STR macros. User should add the semicolon to complete the statement.SIM_LOG_WARNING_STR macro.ConfObjectRef to non-member functions to maintain the symmetry of the operators.ConfObjectRef object returned an incorrect name after being moved. Due to the change in the function signature of the name method inside the ConfObjectRef class, all dependent code needs to be rebuilt.array_index and expand_names functions to utility.h.ConfObjectRef objects.unknown_branches in the raw report.sim.status command now reports the total wall-clock time when the simulation was running.write-configuration -independent-checkpoint (fixes SIMICS-22928).check-cell-partitioning now ignores the sim.transactions object.
With this change deferred transactions from different cells will no longer tie the cells together (fixes HSD-18040888679).confclass (fixes SIMICS-22924). Example of usage is in the Model Builder User's Guide.check-cell-partitioning changed to also check that ports are in the same cell as their parent (fixes SIMICS-10221).pyobj classes to confclass in the Model Builder User's Guide manual (fixes SIMICS-20255).containerSuspended events was better
selected under some circumstances when stepping.COVERITY pragma, which allows for the manual suppression
of defects reported by Synopsys® Coverity® for particular DML lines, as long
as Coverity support is enabled by passing --coverity to DMLC.1 for log statements of kind warning, error, or critical; and reject
the use of any subsequent log level for these logging kinds but 1 or 5
(fixes SIMICS-22401). For compatibility reasons, these checks are not
performed with Simics API version 7 or below unless
--no-compat=meaningless_log_levels is passed to DMLC.warning, error, or criticial now
support the use of 5 as a subsequent log level, meaning the log will only
happen once. Any other value of the subsequent log level but 1 will be
treated as 5 for these logging kinds.enums) associated symbols by default, addressing the issue where
several useful types provided by the Simics API were not made available
(fixes SIMICS-19133).local variable via a method
call was not properly type-checked, which could result in invalid code being
accepted, as well as incorrect semantics, invalid generated C, or undefined
behaviour (fixes SIMICS-22874).html-report command output has been slightly optimized, to reduce the size of
the generated HTML code. For very big reports with many samples and graphs, the
browser can still become sluggish.list-port-forward-setup command to silently return a list that contain incoming port forwarding data (fixes SIMICS-22913)list-thread-domains command now always reports cell thread domains. Previously,
cell thread domains could be omitted if there were no CPU or clock objects in them. This could be confusing (fixes SIMICS-22384).RegisterViewCatalog interface in the C++ BankPort class.sim->cell_list attribute has been converted to a pseudo attribute (fixes SIMICS-21638).
With this change the value is always the list of active cells.
The attribute is now read-only.transaction interface.<module>, only in a
Python module named simmod.<module>. The latter is the
official and documented name since Simics 5.expand().bp.wait-for-breakpoint (fixes SIMICS-22869).RegisterClassWithSimics class to help register a class with Simics.confclass attribute getters and setters the same way as classes created with pyobj (fixes SIMICS-22081).html-report command now takes an optional graph specification file, in json format.
This new specification file describes what graphs that should be generated in the report,
if the required probe data is available.
If the json file is not specified, a default json file will be used, producing graphs
suitable for internal Simics performance analyses.
The json key/value parameters defining the graphs, are described in the help text of the
html-report command. These are preliminary and might change in future versions of Simics.MapTargetConnect class to help connect an object as a map target.Functions (fixes HSD-18039603755).
Function coverage output in a HTML report can be turned off using the
-no-function-coverage flag of the <code-coverage>.html-report command.wait-for-read, wait-for-write, wait-for-get, and wait-for-set were updated. Previously, the commands raised an exception when the transactions issued by the commands were deferred and SIM_transaction_wait was used by device models to wait for their completion (fixes HSD-22014315925).-show-description flag to list-attributes command (fixes SIMICS-22095).list-pcie-hierarchies command.transaction_t were fixed not to crash when ‘del’ is used: an exception is thrown instead (fixes SIMICS-22278).collect marker to tests embedded in documentation that will set a collect flag for the given session in the generated json file. This is meant be used to control if a test framework shall run the test in a “stop at first failure” mode or in a “run and collect all failures” mode.dev_util.Dev with confclass in tests.io_memory removed from the apic_bus_v2 class as this is no longer used for MSI.wait-for commands now respect breakpoint enable and
ignore count status (fixes SIMICS-22838).bp.cycle_event one-shot breakpoints
could lead to a crash (fixes SIMICS-22648).bp.wait-for-breakpoint now works correctly when used
multiple times on the same breakpoint (fixes SIMICS-22828).ATTR_CLS_VAR, can be used on a C++ set now..xt.prop section to determine what is instructions and what is data (fixes SIMICS-21954). Removed data that is intermixed with instructions is also presented in a better way in the html report.SIM_make_attr_data and SIM_make_attr_data_adopt functions now report an error if the value of the size parameter is too large (i.e. larger than UINT_MAX). Previously, large values of the size parameter were handled incorrectly and no error was reported (fixes SIMICS-22766).read_only and write_only to attribute creation in confclass.py (fixes SIMICS-22853).api-help command now shows which c++ header includes the input interface.read-device-reg command (fixes SIMICS-22783).-only-outbound flag to list-object-references command. With that option then only outbound references is shown (fixes SIMICS-21358).-hide-queue flag to list-object-references command, so that references through queue attributes can be omitted (fixes SIMICS-22673).sim->sigtrap_on_error_log
attribute.io-stats command and dev.io_access_count probe should now
report correct values for devices that use the transaction
interface. Previously, only objects implementing the io_memory interface was
supported. The internal access_count attribute has been removed for all
objects that does not implement the io_memory or transaction
interfaces. Adding objects that implements the transaction interface may
also count accesses passing through memory spaces (previously only unmapped
accesses were counted for memory spaces). In Simics 7, DMLC generates
transaction endpoints instead of io_memory, consequently, this fix impacts
Simics 7 more (fixes SIMICS-19493).register_view_catalog interface to all banks. This speeds up
various operations that rely on the register_view interface, such as the
dev_util.bank_regs function and the write-device-reg and probe-address
CLI commands.<link>.start-link-monitor, <link>.view-link-monitor and <link>.stop-link-monitor are new commands to monitor and view ethernet traffic over a link.confclass. To create an empty Python device, use project-setup with the --py-device-confclass argument, or --copy-module sample-device-python-confclass to copy the module sample-device-python-confclass to the project.mem field in
the command register is set to a new valuebank_regs function, by creating the register
structure lazily to some extent (fixes HSD-22016635716).fwd_apic_bus added to the apic_bus_v2 class. Intended to be used for systems where there are separate local apic bus instances and routing between them is needed.expand() and instantiate() functions no require a
top level namespace name.after which is a lightweight event mechanism that schedules a specified method call (the callback) to be executed at a future point.-tree-summary flag with <code_coverage>.html-report (fixes HSD-13012302936).list-processors command sorts processors in numeric order (fixes SIMICS-22695).libexpat library has been upgraded to version 2.6.3.index-map child objects were encountered (fixes SIMICS-22694).version command, the sim.info command and when getting version information by running the simulator with the “–version” command line option (fixes SIMICS-22554).Simics Model Development Checklist app-note since this information is already available in the Model Builder User's Guide (fixes SIMICS-19509).ATOM_LIST_END macro has been made referencable in DML
(equivalent to ATOM_list_end(0)) (fixes SIMICS-22363).group “port”
or “bank”. Any group may now be named “port” or “bank” regardless of
context, but ports, banks, or subdevices may not be declared underneath
any group named “port” or “bank”. (For DML 1.2 devices, this change only
applies to naming a group “port”, as naming any object “bank” in 1.2 devices
is impossible due to every object of a 1.2 device having the bank
parameter.)read-device-reg or
write-device-reg commands, and byte swapping is requested, then Simics will
now report an error if the field is not aligned to byte boundaries.read-device-reg and write-device-reg to read or write values
in little-endian byte order also on banks using big-endian byte order (fixes SIMICS-22697).--title flag to set a custom title.
This fixes SIMICS-22765..d-file generation to only list each dependency once.probes.new-aggregate-probe, probes.new-attribute-probe, and
probes.new-percent-probe commands.probes.new-attribute-probe, probes.new-percent-probe,
probes.new-fraction-probe, probes.new-sum-probe,
and probes.new-aggregate-probe now print the probe-kind
created, and return this name for scripting,
(fixes SIMICS-22706).SIMICS_PYTHON environment variable.--list-targets or --list-presets command line
arguments.SIMICS_PYTHON environment variable.memory-map now has the additional arguments start and end. These can be used to inspect a subrange of the address space [start, end). For platforms with large regions of interleaved RAM memory the memory-map command will take a very long time to execute even if one has excluded the ram objects from the output through the exclude argument. In such scenarios it is better to execute the memory-map command twice. The first time with end set at the beginning of the address range of interleaved RAM region and the second time with the start argument set right after the interleaved RAM region.target_info (fixes SIMICS-22699).SIM_current_processor could previously return wrong value when executed after the call to SIM_transaction_wait. This issue was fixed (fixes SIMICS-21676).<cmd iface="the_iface"> (fixes SIMICS-22684).destroy template, the device deletion equivalent of the
init and post_init templates. When the device is being deleted,
destroy() will be called of every object that instantiates the destroy
template. The device object always instantiates this template..bat files generated in the project no
longer leaks environment variables to the calling shell.run command of the UEFI Simics Agent now supports passing arguments and redirections.ATTR_CLS_VAR, can be used on a C++ tuple now.list-target-info which provides the same information as print-target-info but also returns a value (fixes SIMICS-22653).cli.register_command_category function to be used for
non-standard category names (fixes SIMICS-14765). It is optional to add a
custom category and adding commands. Loading modules that add CLI commands
will emit a warning message on log-level 2 and the developer should remove the type
argument from those commands, or register a custom category.open_symbol_file in the debug_symbol_file interface, but not when added with add-symbol-file (fixes HSD-16025356102).continue can now be used within foreach loops (use within
#foreach loops remains unsupported)shared methods were not properly checked, leading to
invalid generated C.shared method with another could
cause an internal compiler error if the method signature involves a template
type.after statements now support picoseconds (ps) as a unit of time (fixes SIMICS-16019).explicit_param_decls provisional feature is now considered stable. Its use will be kept supported in the same way as any standard DML feature.dodoc handles <cmd class=...> markup in documentation strings it gets from Simics.
It now correctly includes the class name in the output.vf14btrs.new-tracer-tool command could in certain cases produce no output at all when none of -trace-* flags were provided. This behavior was changed. The tools will now always trace all events - as if all -trace-* flags were provided - when no -trace-* flags are provided to the new-tracer-tool command. As before, to limit output from the tool one can trace only selected events by passing individual -trace-* options or a combination of them. The change fixes SIMICS-21724 bug report.Version register MaxLvtField value when type is apic_x2 to return 6 instead of 5.list-blueprints.simics_add_documentation.CMAKE_EXPORT_COMPILE_COMMANDS cache variable set.restart-simics command has been fixed. On
Windows, the command now opens a new console window for the Simics
command line.list-objects unless -class-desc was specified (fixes SIMICS-22173).--package argument.pcie-downstream-port now correctly broadcasts the downstream
messages to all devices mapped through the pcie_map.add_map(..., PCIE_Type_Msg) interface. Previously the attributes devices and functions
were used which did not necessarily represent the targets mapped into PCIe
message space (fixes SIMICS-22337)bin/aescrypt is no longer distributed in the
Simics-Base package..eml files has been removed.allow_empty, which
defaults to false. If set to true, the value NIL/None/null
is a valid value of the parameter.comps.std.state have been
renamed to not use the word “connector”.comps.std.connectors Python module has been renamed
to comps.std.state.cpuid_value_t can now be instantiated from Python
(fixes HSD-14023038935).max_scrollback_size (fixes HSD-14022995461).SIM_picosecond_clock function was used inside the class_info_t’s objects_finalized function was fixed (fixes SIMICS-21927).--soname argument to make “external” library better relocatable on disk.sloop.TaskGroup: When awaiting multiple subtasks
upon fall-through, after one of the tasks finished, the task group would
sometimes cancel remaining tasks.addon-manager directly from a Simics-Base installation (fixes SIMINT-1634).rw-state.yml.telnet_port attribute on the txt_console_comp component (fixes HSD-14022755342).DBG_mm_get_sites, which sometimes would return
multiple entries for the same allocation site (fixes SIMICS-22536).x command when auto repeating by simply pressing return, (fixes SIMICS-22391).SIMICS_API_USE_LOG_ALWAYS_HAP defined before including the simics/base/log.h. This will be default in future versions of Simics.log-setup command. This is now fixed, (fixes SIMICS-22326).-block-only was added to the ram tracer tool, which switches off tracing, but blocks caching of ram/rom pages by the direct_memory_lookup.list-processors command now accepts any object as parent, not only components.help command have been updated and class-related entries have been removed or relocated (fixes SIMICS-14765).trace-io to trace in the output from the trace-io and break-io commands.mm-list- commands for memory debugging has been renamed to -human-readable.extern declarations for the same identifier are now allowed as long as they all declare the same type for the identifier (fixes SIMICS-22472).--no-compat=no_method_index_asserts is passed to DMLC.clear-history command to the probe-monitors (new-probe-monitor and new-system-perfmeter objects).force-sample command to the probe-monitors (new-probe-monitor, new-probe-streamer and and new-system-perfmeter objects).reset-session command to the probe-monitors (new-probe-monitor, new-probe-streamer and new-system-perfmeter objects).sloop.TaskGroup: If one of the tasks in a task group raised an exception, then the task group would in some cases not cancel its remaining tasks (fixes SIMICS-22449).<tracer_tool>.add-log-message <tracer_tool>.remove-log-message commands. This requires that the module has been compiled with SIMICS_API_USE_LOG_ALWAYS_HAP defined, this will be default in future versions of Simics.set-table-border-style which is the same as table-border-style but fits better with the set/get naming scheme used for other commands (fixes SIMICS-21735).--no-compat=lenient_typechecking to DMLC.legacy_attributes. This feature can be disabled by passing --no-compat=legacy_attributes to DMLC, in which case the modern API will be used instead, which does not support the use of dictionary attribute values (fixes SIMICS-22406). legacy_attributes will always be disabled with Simics API version 8 or above.sim.time.schedule, cpu.time.schedule, and cpu.schedule_percent probes. Previously, when using defered transaction the measurements were incorrect.memory-map now has the additional argument exclude. The argument is a list containing classes or objects or a mix. It allows the user to filter out classes and/or objects that are not of interest. An example would be to filter out interleaved ram objects that would otherwise occupy most of the output (fixes SIMICS-22369).memory-map now has the additional argument max-regions. Argument max-regions is used to increase the maximum number of rows outputted.generic_transaction_t documentation to the documentation for its accessor functions (fixes SIMICS-20340).arm_device_id atom have been added. See the header file simics/arch/arm.h.dead_dml_methods library, which caused it to never detect methods as dead if they occur directly after a footer block.SIM_process_pending_work(). Immediate after callbacks posted during deletion (e.g. by destroy()) will still be executed at the end of device deletion, as before.objects_finalized of the device.p declarations within the t template:
template t {
param p default 1;
param p default 1;
}
group g is t {
param p = 2;
}
Previously, DMLC would only report an error on t if the parameter was not overridden. If this is the desired behaviour, then the idiomatic construct is:
template t {
param p;
}
#if block. E.g., the following does not give an error:
#if (true) { group g { is nonexisting_template; }}
The bugfix is opt-in, because an immediate bugfix would risk breaking existing builds; the error will only be reported when the flag --no-compat=broken_conditional_is is passed to DMLC. This flag will be automatically enabled in Simics 8 (fixes SIMICS-22403).explicit_param_decls, which can be enabled per file by a statement provisional explicit_param_decls;. This feature adds a syntax param NAME := VALUE;, which signifies that the parameter is not intended as an override. The existing syntax param NAME = VALUE; is re-purposed to signify that the parameter is intended as an override. Inconsistent usage will trigger compile errors. This is useful to catch misspelled overrides (fixes SIMICS-21451).foo_bar in a DML file, write provisional foo_bar; in the top of the file, right after dml 1.4;.SIM_set_mem_op_user_data()/SIM_get_mem_op_user_data() into using transaction atoms (fixes SIMICS-22359).libsimics-common import library must now be used.recorder stops the simulation at the end of the recording so events it replays are handled first (fixes SIMICS-21893).Ui_Record_State_Changed and REC_State_Changed haps were removed.c++-api-doc-code module into sample-device-c++ modulesample-device.cc file into several smaller files. This makes the code easiser to read (fixes SIMICS-22418).ConnectToDescendant (fixes HSD-22019020374).simics_add_test now accepts an argument LABELS to assign labels to Simics tests.Core_Disable_Breakpoints and Core_Time_Transition haps were removed as they would never trigger.sync_domains to their cells (fixes SIMICS-22049).simics_session module that caused a Python exception when closing a socket (fixes HSD-14022420341).probe-address does an unmapped access into a memory-space where either attribute ignore_unmapped_writes or unmapped_read_value is set is considered a hit. The CLI output now marks these scenarios to make it more understandable for the user (fixes SIMICS-22300).SIM_add_notifier and SIM_delete_notifier done from notification callbacks was fixed (fixes SIMICS-21502).function_io_memory now searches for the bank in the same subdevice/device scope as the implement.templates member for all objects and values of template types, which allows for making calls to any particular implementation of a method as provided by a specified template (fixes SIMICS-22264). Example syntax:
// Call the `write_register()` implementation as provided by the
// `register` template on the `r` register of the bank `b`.
b.r.templates.register.write_register(...);
Calls of this form are called Template-Qualified Method Implementation Calls, and are primarily meant to make it easier to resolve conflicts in multiple inheritance: it allows any method that overrides multiple implementations from unrelated templates to individually reference and call the implementations it overrides.shared implementations of the same method, as long as that method is declared in a common ancestor template, and the conflict is resolved through an implementation that overrides all the unrelated implementations (fixes SIMICS-20431). This mirrors the pre-existing semantics for non-shared methods.NDEBUG preprocessor directive is now set in non-debug builds.memory-map and probe-address now require flag -add-atoms in order to set atoms for platform inspection (fixes SIMICS-22314).memory-map now supports setting simple integer atoms from CLI. One use case for atoms is routing and access restrictions, with this change the memory-map can be used to verify how atoms affect the memory view (fixes SIMICS-22313).SIM_log_message is a valid type.list-attributes returns a list of attribute-name/value pairs when run in expressions (fixes SIMICS-19252).log-setup, is now used without any additional separation characters. The performance of the log system has been improved (fixes SIMICS-22161).context-query-for-object-list command that allows getting a context query that matches a list of simulation objects. The listed objects must have a backing debug context.SIM_object_iterator_for_class and SIM_object_iterator_for_interface have been added.pcie_ide_secured and pcie_segment_requester_id to support secure IDE streams (fixes HSD-18037764154).str_vec_len, get_interval_vector, get_interval_vector_and_range, prof_data_granularity_log2, _vcontainsp.Role-Based Error Reporting in the PCIe Device Capability register now by default is set. The field must be set for functions conforming to PCIe 1.1 or later revisions (fixes SIMICS-22344).Layout.write and Layout.read, avoid implicit use of deprecated functions like value_to_tuple_be. This avoids deprecation warnings (fixes SIMICS-22319)Connect objects (fixes SIMICS-22156).SIMICS_DMLC_DIR variable. It is also possible to change the Python interpreter using the SIMICS_DMLC_PYTHON variable (fixes SIMICS-22272).probe-address where non-pywrapped ATOMs are registered (fixes SIMICS-22260).AttributeError instead of SystemError. This fixes a previous regression (fixes SIMICS-22259).enable-writable-persistent-state command will now fail nicely when attempting to enable writable state for a configuration that contains an image that lacks backing files (fixes SIMICS-17144).qsp-x86/firststeps target (fixes SIMICS-20852).probe-address now outputs information about atom accesses when the transaction passes through a transaction_translator object.memory-map now sees a translation with size set to zero as a translation that spans the entire 64-bit address range (fixes HSD-22019889874).memory-map now by default does an inquiry look up to not affect the state of the system (fixes SIMICS-22171).context-query-for-object command can now be used with debug context objects.Added PCIe atoms for Page Request Service: pcie_prs_page_request, pcie_prs_page_response and pcie_prs_stop_marker. Page request and page response atoms contains the new data types: pcie_prs_page_request_t and pcie_prs_page_response_t (fixes HSD-18037764161) and (fixes HSD-18037764159).
Added data type pcie_pasid_info_t to model PCIe PASID information.
SIM_issue_read_transaction and SIM_issue_write_transaction API functions were added. The functions can be used instead of the SIM_issue_transaction function when a model doesn’t need to provide any additional atoms in transaction_t transactions (fixes HSD-14021652621).
The SIM_add_notifier function, when called from Python, no longer leaks references to the callback function or its auxiliary data.
Added PCIe ATS Atoms pcie_ats_invalidate_completion_count and pcie_ats_invalidate_completion_itag_vector
to modell PCIe ATS Invalidation Completion Messages (fixes HSD-18037764165).
Added PCIe ATS data type pcie_ats_invalidate_request_payload_t and atom pcie_ats_invalidate_request_itag to model PCIe ATS Invalidation Request Messages (fixes HSD-18037764162).
Added data type pcie_ats_translation_completion_entry_t for modelling PCIe ATS Translation Completion Responses (fixes HSD-18037764155).
Added atoms pcie_ats_translation_request_cxl_src and pcie_ats_translation_request_no_write for PCIe Address Translation Request (fixes HSD-18037764158).
Fixed a bug where the callback provided in SIM_register_tracked_notifier was not called correctly when the deletion of a subscriber object triggers an implicit notifier deletion.
function_in_extern_struct. The syntax void m(conf_object_t) for function pointers is only permitted when this feature is enabled. The feature will be disabled in Simics API versions > 7.log warning statement.miss_pattern_bank template now allows for its implementations of unmapped_read, unmapped_write, and unmapped_get to be overridden.uint64_t and int64_t types from C. These types are needed for C interoperability, e.g., calling a function that takes an argument of type uint64_t *.status command would crash when a VM guest node was present (fixes SIMICS-22296).msix_table now sets param use_io_memory to false making it use the transaction interface instead of io_memory. It also now accepts transactions greater than 8 bytes and allows unaligned accessing (fixes SIMICS-22293).PASID capability. Now the library verifies the PASID capability configuration against the outgoing pcie_pasid atom to check for invalid usage. Methods translation_request, memory_read_buf and memory_write_bytes in the ats_capability template now includes a pcie_pasid_info_t *pasid argument. Method ats_invalidate in template ats_upstream_translator requires the pasid argument to be of type pcie_pasid_info_t * instead of type uint32. The library now correctly treats a PASID of value 0 as a valid PASID entry (fixes SIMICS-22269).ATS capable endpoint and a sample Translation Agent root complex (fixes HSD-18037764155).ATS capability template now provide methods: translation_request, translation_size_to_entries, decode_translation, decode_invalidate and invalidate_complete to enhance the ATS support in the library (fixes HSD-18037764155).Page Aligned Request to 1 in ATS capability structure since the PCIe specification strongly recommends this bit to be set.pasid_permitted() now allows PASID for all messages routed by address as is the case in FLIT mode.pasid_permitted() now correctly allows PASID for all ATS memory requests.ats_upstream_translator now enforces ATS requests to be of type read transactions.DeviceAttribute that caused errors when monitoring an attribute of data ("d") type.>- block scalars, and not | (fixes SIMICS-21587).virtio-mmio-entropy. It now uses the configuration attribute seed (fixes SIMICS-22306).insert-floppy command would crash when the image had an incorrect size.accel-vga now supports inquiry reads for no side effect inspection (fixes HSD-14021984472).offset in Register class which returns the offset of the register passed as input.AddOffsetTrait which adds offset function to a register class.conf_object_t type, i.e. Simics objects, to Simics API functions taking parameters of the map_target_t type. The conversion of the conf_object_t arguments to the map_target_t values is done automatically.list-pcie-hierarchies now produce output to simics console when executed from script (fixes SIMICS-22136).stdout wrapper in Python now implements all relevant methods (fixes HSD-14021907263).transaction_t (fixes HSD-14020916214).log-setup which makes it possible to specify a custom log format (fixes SIMICS-21966).print-target-info now also lists the simics namespace for each machine in the system (fixes SIMICS-18474).accel-vga framebuffers, should now get restored correctly (fixes SIMICS-21961).probe-address now supports setting simple atoms in CLI. Simple atoms are the ones that can be expressed as integers. Atoms defined as boolean will use the integer values 0 and 1 when set on command-line (fixes SIMICS-22114).probe-address (fixes SIMICS-20700).command-history, which could give invalid results when using the substr argument (fixes SIMICS-22058).{{var}} variable replacement command in the documentation tool. With it you can declare variables on the command line or in a JSON-file and use them in your documentation text (fixes SIMICS-21818)..cxx file extension when including snippets with the include command.doe_capability ensuring that the response of consecutive data objects is handled properly. This breaks the current API for implementing the handle_request method of a doe_protocol.simics_add_documentation function as a wrapper around the Simics dodoc documentation builder (fixes SIMICS-21501).-non-blocking flag to the run command. This allows starting the simulation from the end of a script and getting an interactive prompt (fixes SIMICS-22051).PCIE_ATS_Invalidate_Completion to pcie_message_type_t (fixes HSD-18037411929).warning log type, together with the SIM_LOG_WARNING macro, from Simics 7Root ports, upstream ports and downstream port now propagate received Hot Reset downstream by default.Hap and Log snoopers. The bug could sometimes trigger a segmentation fault (fixes HSD-18036787623 and HSD-18036861798.bin/vmp-kernel-load script preventing the driver from loading.<probe-monitor>.html-report command has been fixed so it works again after the recent probe-changes.sim->deprecations_as_errors attribute is set.sim->stop_on_error attribute is set. Previously some errors would not cause Simics to return an error code when running in batch mode. There would also be unexpected messages and stack traces for errors output by Python wrapped functions (fixes SIMICS-21945).--deprecations-as-errors flag.mini-python.bat is now used by the test system, so characters in command line arguments are restricted to what is CMD compatible.ATTR_GETTER on the C-style array.riscv_device_id and riscv_process_id atoms have been added. See the header file simics/arch/riscv.h.typeof within a method signature would lead to incorrect compile-time errors when the method is overridden.{{include-md}}. This lets you include one markdown file in another.list-pcie-hierarchies now supports listing entire hierarchies based on the legacy Simics PCIe library. Such hierarchies are based on the pcie-bus class to build the topology (fixes SIMICS-22030).-include-bus to command list-pcie-hierarchies. It will add another table column showing which PCIe bus object the PCIe device is mapped to.-indicate-legacy-pcie to command list-pcie-hierarchies. It will add another table column indicating if PCIe device is modelled with the legacy or the new Simics PCIe library (fixes SIMICS-22031).list-pcie-hierarchies now prints out device type for classic PCI bridges and endpoints (fixes SIMICS-22032).SIM_delete_object.deprecation level context manager named deprecation_level.simics::nocopy utility class. Please use the standard way of deleting the copy-CTOR instead.Simics.cmake is picked up from the Simics Base associated with the Simics project.gmake-to-cmake converter.IFACE_FILES argument to simics_add_module() function. Use the SOURCES argument or the new PYWRAP argument instead.@, or while in python-mode, are now printed using sys.displayhook. This makes it possible to customize the print format of Python expressions by setting sys.displayhook to a custom printing function (fixes HSD-14021583366).expect command shows a stack trace on failures when possible (fixes SIMICS-22026).simics_7_api was added for import in Python (fixes SIMICS-22037).SIM_printf_warning_vararg to the API. It can be called from variadic functions to print warnings.SIM_printf_warning and pr_warn will now output proper warning prefix +++.Added SIM_printf_error_vararg to the API. This is a variable argument version of SIM_printf_error and replaces pr_err_vararg which is now removed.sim object if it was set to None earlier. This avoids a python stack-trace when enabling probes.history to command-history and also substr.io_memory devices to transaction. The chapter includes DML code examples.sample_device_cpp.sample to avoid confusion with port namespace.tcf-agent module until it’s actually used (fixes SIMICS-21609).overlap_range which overflows with large offsets (fixes HSD-22019456414).module_id.c now depends on the CMakeLists.txt so that any changes made to the configuration is reflected in the module metadata and forces an automatic rebuild.SOURCES parameter of simics_add_module(). This moves the DMLC error up from build phase into the configuration phase where it belongs and can be corrected.The probes feature is now officially supported. With this, some commands have been slightly changed, and the probe-related interfaces have been cleaned up.
probe definition has been improved, specifying the point in the target-system where a user can read out the value. What data is returned is defined by the probe-kind which is just a string as before. For example “cpu.cycles” is the probe-kind found on processors, while “cpu0:cpu.cycles” defines the actual instance of the probe.sim or host."internals" unsupported feature is enabled.<probes>.list command has been renamed to <probes>.list-kinds to make it more clear what is being shown. The command also takes more arguments to print more data or zoom in on certain objects or probe-kinds.<probes>.list-details command has been removed but the functionality has been merged with the <probes>.read command, which now supports reading out one probe or listing multiple probes.<probes>.print-properties command is now an internal command only.list-kinds, subscribe, unsubscribe and read commands are now much more aligned, working more the same way.<probes>.info, <probes>.status <host>.info and <host>.status commands.probe_monitor, probe_streamer and probe_system_perfmeter have been updated to reflect the changes in the definition. The -objects switches, used when adding or removing probes, have been removed. Instead the commands take both a probe, specifying a probe with its object, and probe-kind specifying to add/remove probes from all objects, with the specified probe-kind.probe-cache was removed.(fixes SIMICS-19232, SIMICS-19233, SIMICS-19234, SIMICS-19264, and SIMICS-19265).
CLI command clear-io-stats now have an alias as clear-device-access-stats (fixes SIMICS-19222).
CLI command list-pcie-hierarchies now uses the global simics table border style.
Ensure that the connector PciBusDownConnector only sets the devices/pci_devices attributes in the PCIe bus once.
Snapshots now save and restore the files attribute and image pages saved in snapshots are de-duplicated based on content. This removes the special casing of zero pages and the zero_pages field in SIM_get_snapshot_info is no longer there.
new-tcf-agent (fixes SIMICS-21610).force_stack_crawl attribute will now enable stack crawling even when no symbol files have been added.ibi_start call shall only be propagated to targets that have issued ibi_request to the controller over interface i3c_master (fixes HSD-14021502240).hpie and ccie to be set as well to trigger an Hot-Plug event.pcie-downstream-port-legacy.--with-cmake is now enabled by default when invoking project-setup (fixes SIMICS-21810). Use --without-cmake to skip the generation of CMake files in the project root.NAMESPACE parameter to simics_add_test function.gmake-to-cmake converter (fixes SIMICS-21798).CMAKE_OBJECT_PATH_MAX to 1000 by default in the project top-level config. This suppresses the warning CMake emits on Windows if paths are too long.--log-level argument to change default log-level..bat) files in the bin folder so that they do not leak environment variables to the current cmd.exe command shell on Windows (fixes SIMICS-21906).PciBusDownConnector only sets the devices/pci_devices attributes in the PCIe bus once.SIM_transaction_wait was fixed.sb_wait_for_sloop_awaitable and sb_wait_for_snooper (fixes SIMICS-21932).check_script_branch_command or sb_wait with reverse or always set to a boolean value (fixes SIMICS-21932).list-pcie-hierarchies to list PCIe hierarchies in platforms.sb_wait_for_hap, sb_wait_for_notifier, sb_wait_for_log, sb_wait_for_breakpoint, sb_wait_for_step, sb_wait_for_cycle, sb_wait_for_time, sb_wait_for_global_time, sb_wait_for_global_sync, sb_wait_for_register_read, sb_wait_for_register_write, sb_wait_for_simulation_started, sb_wait_for_simulation_stopped, sb_wait_for_exception. For replacement functions, see Simics Migration Guide.temporal_state interface is deprecated. It was used to by reverse execution to support models with special needs with regards to state and reverse execution has been removed from version 7. There is still limited support for the interface from the new snapshots system, but that should not be relied upon in new code.sym- commands and debugger API (fixes SIMINT-1608).WLOGMIXUP by default below Simics API version 7 is now controlled by the compatibility feature suppress_WLOGMIXUP. This is in order to increase visibility of the API-dependent behaviour, and to provide migration documentation about it. As a consequence, WLOGMIXUP can be enabled below Simics API version 7 by passing either --warn=WLOGMIXUP (as before) or --no-compat=suppress_WLOGMIXUP to DMLC.pcie_link_training and pcie_phy templates to the library. Endpoints and upstream ports instantiate pcie_phy, while Downstream and Root Ports instantiate pcie_link_training. pcie_link_training provides the object with the capabilities to initiate link training. pcie_phyAdds a port phy to a device which by default handles transactions with the atom pcie_link_negotiation. The transaction handler can be expanded to handle custom atoms that are related to the physical layer.PCIE_DP_Type_RP used for param dp_type in the PCI Express capability template exp_capability.pcie_root_port template into separate template for each PCIe Port type (pcie_root_port, pcie_downstream_port and pcie_upstream_port). The pcie_root_port can still be used as before.pcie-downstream-port-legacy to correctly map in legacy bridges and switches into PCIe configuration space. previously only endpoints were correctly mapped into PCIe configuration space (fixes HSD-22019241133).access function is concerned (fixes SIMICS-21922).load-target or run-script commands (fixes HSD-22019380014).load-target command when given a invalid target and argument now reports a missing target error rather than invalid argument (fixes SIMICS-21333).<script-params>.list and <script-params>.help, the substring matching is performed on the flattened hierarchical parameter name (fixes SIMICS-21690).params.save and parameter references (fixes SIMICS-21733).sim->automatic_cell_partition=FALSE would lead to an assertion on instantiation of an x2apic object (fixes HSD-18036198888).$HOME/.simics-5.sh (fixes SIMICS-21148)SIM_printf_error no longer make Simics quit, but only stop the simulation.current-processor since this command will be removed and should not be used. The object alias cpu should be used instead (fixes SIMICS-20641).Simics service, this service should no longer be used. The actual service is still included as a provided service for compatibility reasons (fixes SIMICS-21515).SimicsCapabilities property that was sent at connect time has been removed.i2c_device, i2c_link, i2c_bus, i2c_slave, i2c_master and i2c_bridge have all been deprecated in Simics 7. Migration to interfaces i2c_master_v2, i2c_slave_v2 and to module i2c-link-v2 is strongly recommended (fixes SIMICS-21732).pci_express, pci_express_hotplug and pcie_adapter_compat_interface interfaces have been deprecated in Simics 7. Migration to the new PCIe library is strongly recommended.notify_control_reg_read in osa_machine_notification interface.This section highlights the main new functionality in Intel® Simics® Simulator 7 compared to the current version. Most new features in Intel® Simics® Simulator are introduced in minor versions, while major versions are used to remove deprecated functionality since breaking compatibility is not allowed in a minor version. Still, the first release of Intel® Simics® Simulator 7 has a number of new features and many more are planned to be introduced during the product’s lifetime.
With this feature a user can take a snapshot of the state of the complete simulated system in run-time and revert back to this state at any point in time later in the simulation. While the mechanism for taking snapshots already exists in Intel® Simics® Simulator as part of the reverse execution feature, it has never been an accessible feature by itself. In Intel® Simics® Simulator 7, in-memory snapshots will replace the reverse execution functionality.
Intel® Simics® Simulator 7 can be run with any modern Python that the user has installed. Currently Python 3.10, 3.11, 3.12 and 3.13 are supported by Intel® Simics® Simulator 7, but the list of Python versions supported may change by the time of release. Python is still bundled with the product by default in the initial release of Intel® Simics® Simulator 7, but this is planned to change (see below). With this change, users have more control over when they change the major version of Python used in the simulator.
Intel® Simics® Simulator will include a “simics” Python module that users can add to their existing Python installations using the standard pip tool. Using the simulator as a Python module greatly simplifies integrating Intel® Simics® Simulator in existing test environments for example.
In Intel® Simics® Simulator it has been possible to build modules using CMake as the build tool for some time. Starting with version 7, CMake will become the default build tool. GNU Make will remain supported as a legacy feature.
The Intel® Simics® Simulator package versioning has been updated to comply with the industry standard semantic versioning scheme. The previous versioning scheme used by Intel® Simics® Simulator was very similar to semantic versioning, so it is initially a small change. The biggest difference is that the minor version is now represented by the second digit group in the version number. I.e., the minor releases after Intel® Simics® Simulator 7.0.0 will be 7.1.0, 7.2.0, etc. The patch version will not be used initially.
The Windows version of Intel® Simics® Simulator now requires Windows 10.
API and script compatibility with Intel® Simics® Simulator 4.8 and older has been dropped. Refer to the Simics 7 Migration Guide for a complete list.
This section provides a list of minor changes since the Intel® Simics® Simulator 6 version that was current at the time of the initial Intel® Simics® Simulator 7 release.
-reverse and -always flags for wait-for commands.config_bank template: added function message.send_custom in order for devices to append custom atoms to the PCIe messages sent upstream.