Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
intro_example:gates [2020/04/30 09:29]
rajit [Simulation with irsim]
intro_example:gates [2020/12/02 01:00]
127.0.0.1 external edit
Line 39: Line 39:
 </code> </code>
  
-This would be accepted by ACT, and the production rule simulator [[tools:prsim|prsim]] can simulate such rules without difficulty. However, +This would be accepted by ACT, and the production rule simulator [[tools:prsim|prsim]] can simulate such rules without difficulty. However, a CMOS circuit designer would observe that one cannot implement this directly using a single pull-up and pull-down network in static CMOS. Instead, someone used to circuit design would write:
-a circuit designer would look at this and point out that we cannot implement this directly using a single pull-up and pull-down network in +
-static CMOS. Instead, someone used to circuit design would write:+
  
 <code> <code>
Line 54: Line 52:
 </code> </code>
  
-In this example, we have introduced a local variable ''_c''. This variable is only visible within the process in the ACT language((Simulators typically give you access to any signal you wish to see to simplify debugging)).  ''_c'' is the output of a nand operation, and then it is inverted to generate the output ''c''.+In this example, we have introduced a local variable ''_c''. This variable is only visible within the process in the ACT language((Simulators typically give you access to any signal you wish to see to simplify debugging)).  This scoping rule is useful because it narrows down the section of the ACT file that can influence the particular variable/signal. ''_c'' is the output of a nand operation, and then it is inverted to generate the output ''c''.
  
 Since we already have defined ''nand2'' as well as ''inverter'', an alternative approach would be to re-use those circuits as follows: Since we already have defined ''nand2'' as well as ''inverter'', an alternative approach would be to re-use those circuits as follows:
Line 71: Line 69:
 In terms of naming, the ports of ''n'' are ''n.a'', ''n.b'', and ''n.c''; similarly the ports for ''i'' are ''i.i'' and ''i.o''. ACT uses the dot as a hierarchy separator. This version of an ''and2'' contains one level of hierarchy. In terms of naming, the ports of ''n'' are ''n.a'', ''n.b'', and ''n.c''; similarly the ports for ''i'' are ''i.i'' and ''i.o''. ACT uses the dot as a hierarchy separator. This version of an ''and2'' contains one level of hierarchy.
  
-ACT provides a very flexible mechanism for connecting signals. The following variants that correspond to the same connections.+ACT provides a very flexible mechanism for connecting signals. The following are variants that correspond to the same connections.
  
 <code> <code>
Line 123: Line 121:
 { {
   nand2 n(.a=a, .b=b);   nand2 n(.a=a, .b=b);
-  inverter i(.i=n.c, .o=c);  // note that we don't need the intermediate _c+  inverter i(.i=n.c, .o=c);  // note that we don't need the intermediate name _c
 } }
  
Line 135: Line 133:
 </code> </code>
  
 +Note that ''irsim'' uses ''/'' as a hierarchy separator. So the signals in the design are ''a/a'', ''a/b'', ''a/n/c'', etc. You can now simulate this in the standard way using ''irsim''
  
 +A simple ''irsim'' simulation would look like this (assuming an scmos30 technology).
  
 +<code>
 +% irsim scmos30 test.sim test.al
 +</code>
 +
 +(Note that you can run irsim from the terminal window as well as from the magic window. Please run irsim from the terminal window.) This starts the simulation environment, uses simulation parameters from the file ''scmos30.prm'' (stored in a standard location), and reads in the ''.sim''/''.al'' file just created.
 +
 +There are irsim tutorials online. For the and gate, you can run a simple simulation by the following sequence of irsim commands:
 +
 +<code>
 +% ana a/a
 +% ana a/b
 +% ana a/c
 +</code>
 +
 +This opens a waveform window, and displays the signals ''a/a'', ''a/b'', and ''a/c''. ''ana'' is short for analyzer.
 +
 +<code>
 +% h Vdd!
 +% l GND!
 +</code>
 +
 +This says that Vdd! is high, and GND! is low. You need these commands to setup the power supplies.
 +
 +<code>
 +% s
 +</code>
 +
 +''s'' runs the simulation for one step (you can set the step size with the stepsize command). Now you can use ''h''/''l'' to set the input and watch the output change, for example, as follows:
 +
 +<code>
 +% h a/a
 +% h a/b
 +% s
 +% l a/a
 +% s
 +</code>
 +
 +You can also create a text file of irsim commands (highly recommended as a general practice), and then read it in to irsim with the ''@'' command.