Tracking changes per date:
- Added so that simulator now tracks what component condition
- Added simulator running state, such as running, halt or error
- Added stepping functionality
- Added functionality to gui to show running state and component condition
- Added un-clock history for set of active components
- Added functionality to determine set of active components
- Simulator run/halt is implemented in
vizia
using a simple eventing mechanism. Later we might want to spawn a simulation thread for faster execution (right now its tied to frame rate).
-
Return type from
clock
(fn clock(&self, _simulator: &mut Simulator) -> Result<(), Condition
). -
RISC-V cross compilation.
-
Signal
type now incorporates formatting. This allows the default formatting to be set on a signal on creation. The data and formatting can be read/written separately by setters/getters. -
Internal component fields are now
pub(crate)
. This allows internal component structure to be hidden outside the crate, thus examples and other users cannot affect the component state, also we are free to change internal repr without affecting examples/users (given that the API can remain stable). -
rc_new
implemented for all components. (Examples updated.) We might want to changenew
to_new
andrc_new
tonew
.
-
Added RISC-V components and model
-
Implemented the
ProbeAssert
component, that assert a set sequence of inputs. Made some updates so reading outside of the assert/stim buffers givesSignal::Unknown
instead of panic (if not in test mode).Asserts are run only in test mode, allowing gui testing to be more robust.
-
Refactored,
clock
ascycle
and put it in theSimulator
(thanks to Fredrik for suggesting this a while back). Now the Simulator holds the complete state, which is better. -
Implemented the
ProbeStim
component, to provide a set sequence of outputs.
- Added rudimentary support for a structured
Signal
type, inspired by HDLs.
-
ProbeEdit
, a component for interactive debugging (and maybe some end usage as well). It allows you to enter a value (dec/hex) for a signal. It acts as a register so its content will be used in the next clock cycle (one could also think of changing this to act directly by triggering some re-evaluation, not sure).ProbeEdit
also implements a proper history buffer so you can reverse the simulation. -
un_clock
method in theComponent
trait. It does not alter the simulation state (for that we already have a history buffer), components with internal state (e.g., theProbeEdit
component) implementsun_clock
and keep a local history. Maybe we will have some helper functions to that end.
-
Panes, right click component to display component interior on left panel. Close left panel view by the X (Close) button.
-
Left panel views can be folded/unfolded
- mips/reg_file update, showcasing interior mutability and gui_vizia poc.
-
fern
based logger. -
Fixed clippy lint for Rust 1.71
-
WIP support for named outputs.
-
Added caching to the Github workflow to improve job times.
- Added bounds checking for
Simulator
(set_id_index
,get_input_val
), panics on out of bounds. - Added re-definition check for
Simulator
, panics on re-definition. - Added units tests to the above.
-
Refactoring of
Component
trait such that logic part is separated from GUI part. -
Test framework added, where integration (simulation tests are found in the
tests
folders.)
-
Webhooks for Discord channel.
-
.gitignore
to exclude.gv
and.json
files. -
SignExtension
component.
Compilation times might be annoying. It seems that under Linux there is a lot more dependencies than under Windows, so building SyncRim
is faster on Win10 than under Linux (stock settings). There are a number of things to try out to reduce compilation times (and in particular hot
iterations).
- Disable generation of debug (DWARF) info.
debug = false
(ordebug = 0
). If stack backtraces are needed usedebug = 1
, which is still faster thandebug = 2
(debug = true
equivalent). - Use
mold
instead oflld
.
Together debug = 0
and mold
linking may yield significant improvements. (On the 7950x3d
, hot
re-compiles improved from around 4 seconds to 0.3 seconds (in the range of measuring errors for vscode interactions etc.) With debug = true
+ mold
0.5 seconds or so, both acceptable, mold
makes the biggest difference to incremental builds.
See Cargo.toml
and .cargo/config.toml
for updated configuration. Notice, you need to install mold
through your package manager for this to work.
path
no longer stored in.json
model.path
passed as&PathBuf
togui
andcomponent_store
.path
stored asPathBuf
in thegui
.
Finally, SyncRim can now open models through Open
(CTRL-O) in gui
(ReOpen
(Ctrl-R) still works to read manually changed .json
).
Notice, if running a simulator compiled from root you cannot load mips models. Instead start from a mips simulator, that can load mips models, e.g., the reg_file
or mips
examples (or the main
in the mips
folder). This is expected and desired behavior, a feature not a bug :)