Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Simulation backend #18

Open
7 of 9 tasks
hacst opened this issue Oct 31, 2014 · 1 comment
Open
7 of 9 tasks

Simulation backend #18

hacst opened this issue Oct 31, 2014 · 1 comment
Assignees

Comments

@hacst
Copy link
Member

hacst commented Oct 31, 2014

This issue is more of a collection and ongoing discussion about the design of the backend. Separate issues should be created for the different concrete implementation aspects before tackling them.

@chris- I would propose implementing a prototype for a simulation backend matching the following criteria as I remember them from our discussion:

  • Cleanly separated from the GUI
  • Simulation driven by a time indexed priority queue of line events
  • Gives GUI enough information to render pulses moving on the wire
  • Allows storing and loading of simulation models
  • Allows the GUI to store data blobs into the model that are opaque for the backend. This would for example be used for x,y positions of element instances.
  • GUID based identity model for circuit components so clean interaction between user created components can be possible later on
  • Must only use basic python OO constructs to simplify later optimization and porting of the backend which is likely required for large scale simulations.
  • Allow GUI to turn circuit on or off. Nice to have: Allow GUI to edit the circuit while running simulations.
  • Nice to have: Separate backend into separate python process.
  • ...

Open for discussion & ideas down the road:

  • Should the user be able to store all logic states of the circuit. This is useful for complex circuits with a lot of storage capabilities (shift registers, flip flops, rams).
  • After some performance analysis, we might consider using a different language for modeling update functions for logic elements like e.g. LUA.
@hacst
Copy link
Member Author

hacst commented Jan 7, 2015

Missing now are store and load of simulations - groundwork for this is in the serialization/deserialization function - as well as the strict process separation. Interface and datastructure wise we pretty much should be able to perform the split. Remaining is figuring out how to perform the startup and pass the queues to the main-application without making the classes depend on the multiprocessing module.

I think completing the "nice to have" separation is worth it as it will automatically prevent us from accidentally coupling frontend and backend in ways we later regret.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant