Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
intro_example:inverter [2022/05/13 13:15] rajitintro_example:inverter [2025/05/01 13:32] (current) – [Simulating with prsim] rajit
Line 108: Line 108:
  
 After this command, all delays are randomized. This is a useful test to see if your production rules are stable and non-interfering. If ''prsim'' finds that a production rule is unstable, it sets its output to ''X'' (for undefined). These ''X''s can propagate through the circuit. After this command, all delays are randomized. This is a useful test to see if your production rules are stable and non-interfering. If ''prsim'' finds that a production rule is unstable, it sets its output to ''X'' (for undefined). These ''X''s can propagate through the circuit.
 +
 +===== Simulating with actsim =====
 +
 +ACTSIM is setup to simulate processes by default. We recommend having a top-level process that is used for testing purposes. In this setup, the complete example is:
 +
 +<code act>
 +defproc inverter (bool? i; bool! o)
 +
 +  prs {
 +    i => o-
 +  }
 +
 +
 +defproc test()
 +{
 +  inverter inv;
 +}
 +</code>
 +
 +If the file above is called ''test_inv.act'', we can start the simulation using:
 +
 +<code>
 +% actsim -p test  test_inv.act
 +</code>
 +
 +Note that we don't need to generate the flattened production rule file, which could be quite large. We can simulate this as follows:
 +
 +<code>
 +actsim> watch inv.i
 +actsim> watch inv.o
 +actsim> status X
 +inv { o }
 +actsim> set inv.i 0
 +[                   0] <[env]> inv.i := 0
 +actsim> cycle
 +[                  10] <inv>  inv.o := 1
 +actsim> set inv.i 1
 +[                  10] <[env]> inv.i := 1
 +actsim> cycle
 +[                  20] <inv>  inv.o := 0
 +</code>
 +
 +''actsim'' will check if the production rules being run are stable (i.e. hazard/glitch-free) and non-interfering (i.e. that pull-up and pull-down networks are not on simultaneously). It doesn't check all possible delay configurations, but just reports errors if it observes unstable or interfering production rules while the simulation is running. Try ''help'' as a ''actsim'' command to see the range of commands supported by ''actsim''.
 +
 +One of the useful features of ''actsim'' is that it can automatically randomize the delays of production rule firings. To do this, use
 +
 +<code>
 +actsim> random
 +</code>
 +
 +After this command, all delays are randomized. This is a useful test to see if your production rules are stable and non-interfering. If ''actsim'' finds that a production rule is unstable, it sets its output to ''X'' (for undefined). These ''X''s can propagate through the circuit.