%---------------------------------------------------------------------------- % Magic tutorial number 11 %---------------------------------------------------------------------------- \NeedsTeXFormat{LaTeX2e}[1994/12/01] \documentclass[letterpaper,twoside,12pt]{article} \usepackage{epsfig,times} \setlength{\textwidth}{8.5in} \addtolength{\textwidth}{-2.0in} \setlength{\textheight}{11.0in} \addtolength{\textheight}{-2.0in} \setlength{\oddsidemargin}{0in} \setlength{\evensidemargin}{0pt} \setlength{\topmargin}{-0.5in} \setlength{\headheight}{0.2in} \setlength{\headsep}{0.3in} \setlength{\topskip}{0pt} \def\hinch{\hspace*{0.5in}} \def\starti{\begin{center}\begin{tabbing}\hinch\=\hinch\=\hinch\=hinch\hinch\=\kill} \def\endi{\end{tabbing}\end{center}} \def\ii{\>\>\>} \def\mytitle{Magic Tutorial \#11: Using IRSIM and RSIM with Magic} \def\_{\rule{0.6em}{0.5pt}} %---------------------------------------------------------------------------- \begin{document} \makeatletter \newcommand{\ps@magic}{% \renewcommand{\@oddhead}{\mytitle\hfil\today}% \renewcommand{\@evenhead}{\today\hfil\mytitle}% \renewcommand{\@evenfoot}{\hfil\textrm{--{\thepage}--}\hfil}% \renewcommand{\@oddfoot}{\@evenfoot}} \newcommand{\ps@mplain}{% \renewcommand{\@oddhead}{}% \renewcommand{\@evenhead}{}% \renewcommand{\@evenfoot}{\hfil\textrm{--{\thepage}--}\hfil}% \renewcommand{\@oddfoot}{\@evenfoot}} \makeatother \pagestyle{magic} \thispagestyle{mplain} \begin{center} {\bfseries \Large \mytitle} \\ \vspace*{0.5in} {\itshape Michael Chow} \\ {\itshape Mark Horowitz} \\ \vspace*{0.5in} Computer Systems Laboratory \\ Center for Integrated Systems \\ Stanford University \\ Stanford, CA 94305 \\ \vspace*{0.25in} This tutorial corresponds to Magic version 7. \\ \end{center} \vspace*{0.5in} {\noindent\bfseries\large Tutorials to read first:} \starti \> Magic Tutorial \#1: Getting Started \\ \> Magic Tutorial \#2: Basic Painting and Selection \\ \> Magic Tutorial \#4: Cell Hierarchies \\ \> Magic Tutorial \#8: Circuit Extraction \endi {\noindent\bfseries\large Commands introduced in this tutorial:} \starti \> :getnode, :rsim, :simcmd, :startrsim \endi {\noindent\bfseries\large Macros introduced in this tutorial:} \starti \> {\itshape (None)} \endi \vspace*{0.25in} \section{Introduction} This tutorial explains how to use Magic's interface to the switch-level circuit simulators, RSIM and IRSIM. The interface is the same for both these simulators and, except where noted, RSIM refers to IRSIM as well. This interface eliminates the tedium of mapping node names to objects in the layout and typing node names as RSIM input. It allows the user to select nodes using the mouse and apply RSIM commands to them or to display the node values determined by RSIM in the layout itself. You should already be familiar with using both RSIM and Magic's circuit extractor. Section 2 describes how to prepare the files necessary to simulate a circuit. Section 3 describes how to run RSIM interactively under Magic. Section 4 explains how to determine the node names that RSIM uses. Lastly, section 5 explains how to use the RSIM tool in Magic to simulate a circuit. \section{Preparations for Simulation} Magic uses the RSIM input file when it simulates the circuit. Before proceeding any further, make sure you have the correct versions of the programs {\bfseries ext2sim} and {\bfseries rsim} installed on your system. Important changes have been made to these programs to support simulation within Magic. To try out this tool on an example, copy all the {\bfseries tut11{\itshape x}} cells to your current directory with the following command: \starti \ii {\bfseries cp \~{}cad/lib/magic/tutorial/tut11* .} \endi The {\bfseries tut11a} cell is a simple 4-bit counter using the Magic scmos technology file. Start Magic on the cell {\bfseries tut11a}, and extract the entire cell using the command: \starti \ii {\bfseries :extract all} \endi When this command completes, several {\bfseries .ext} files will be created in your current directory by the extractor. The next step is to flatten the hierarchy into a single representation. Return to the Unix c-shell by quitting Magic. The program {\bfseries ext2sim} is used to flatten the hierarchy. Run this program from the C-shell by typing: \starti \ii {\bfseries ext2sim -L -R -c 20 tut11a} \endi This program will create the file {\bfseries tut11a.sim} in your current directory. If you are running IRSIM, the {\bfseries tut11a.sim} can be used directly as input to the simulator and you should skip the next step. Instead, if you will be using RSIM, the last step is to create the binary representation of the flattened hierarchy by using the program {\bfseries presim}. To do this, type: \starti \ii {\bfseries presim tut11a.sim tut11a.rsm \~{}cad/lib/scmos100.prm -nostack -nodrops} \endi The third file is the parameter file used by presim for this circuit. The convention at Stanford is to use the suffix {\itshape .rsm} when naming the RSIM input file. The file {\bfseries tut11a.rsm} can also be used as input for running RSIM alone. \section{Using RSIM} Re-run Magic again to edit the cell {\bfseries tut11a}. We'll first learn how to run RSIM in interactive mode under Magic. To simulate the circuit of tut11a, using IRSIM type the command: \starti \ii {\bfseries :rsim scmos100.prm tut11a.sim} \endi To simulate the circuit of tut11a, using RSIM type the command: \starti \ii {\bfseries :rsim tut11a.rsm} \endi You should see the RSIM header displayed, followed by the standard RSIM prompt ({\bfseries rsim$>$} or {\bfseries irsim$>$}, depending on the simulator) in place of the usual Magic prompt; this means keyboard input is now directed to RSIM. This mode is very similar to running RSIM alone; one difference is that the user can escape RSIM and then return to Magic. Also, the mouse has no effect when RSIM is run interactively under Magic. Only one instance of RSIM may be running at any time under Magic. The simulation running need not correspond to the Magic layout; however, as we shall see later, they must correspond for the RSIM tool to work. All commands typed to the RSIM prompt should be RSIM commands. We'll first run RSIM, then escape to Magic, and then return back to RSIM. Type the RSIM command \starti \ii {\bfseries @ tut11a.cmd} \endi to initialize the simulation. (Note there is a `` '' after the @.) Now type {\bfseries c} to clock the circuit. You should see some information about some nodes displayed, followed by the time. Set two of the nodes to a logic ``1'' by typing {\bfseries h RESET{\_}B hold}. Step the clock again by typing {\bfseries c}, and RSIM should show that these two nodes now have the value ``1''. You can return to Magic without quitting RSIM and then later return to RSIM in the same state in which it was left. Escape to Magic by typing: \starti \ii {\bfseries . } \endi (a single period) to the RSIM prompt. Next, type a few Magic commands to show you're really back in Magic (signified by the Magic prompt). You can return to RSIM by typing the Magic command {\bfseries rsim} without any arguments. Type: \starti \ii {\bfseries :rsim} \endi The RSIM prompt will be displayed again, and you are now back in RSIM in the state you left it in. Experiment with RSIM by typing some commands. To quit RSIM and return to Magic, type: \starti \ii {\bfseries q} \endi in response to the RSIM prompt. You'll know you're back in Magic when the Magic prompt is redisplayed. If you should interrupt RSIM (typing a control-C), you'll probably kill it and then have to restart it. RSIM running standalone will also be killed if you interrupt it. If you interrupt IRSIM (typing a control-C), the simulator will abort whatever it's doing (a long simulation run, for example) and return to the command interpreter by prompting again with {\bfseries irsim$>$}. \section{Node Names} It's easy to determine node names under Magic. First, locate the red square region in the middle right side of the circuit. Move the cursor over this region and select it by typing {\bfseries s}. To find out the name for this node, type: \starti \ii {\bfseries :getnode} \endi Magic should print that the node name is {\itshape RESET{\_}B}. The command {\bfseries getnode} prints the names of all nodes in the current selection. Move the cursor over the square blue region in the upper right corner and add this node to the current selection by typing {\bfseries S}. Type {\bfseries :getnode} again, and Magic should print the names of two nodes; the blue node is named {\itshape hold}. You can also print aliases for the selected nodes. Turn on name-aliasing by typing: \starti \ii {\bfseries :getnode alias on} \endi Select the red node again, and type {\bfseries :getnode}. Several names will be printed; the last name printed is the one RSIM uses, so you should use this name for RSIM. Note that {\bfseries getnode} is not guaranteed to print all aliases for a node. Only those alises generated when the RSIM node name is computed are printed. However, most of the alaiases will usually be printed. Printing aliases is also useful to monitor the name search, since {\bfseries getnode} can take several seconds on large nodes. Turn off aliasing by typing: \starti \ii {\bfseries :getnode alias off} \endi {\bfseries getnode} works by extracting a single node. Consequently, it can take a long time to compute the name for large nodes, such as {\itshape Vdd} or {\itshape GND}. Select the horizontal blue strip on top of the circuit and run {\bfseries :getnode} on this. You'll find that this will take about six seconds for {\bfseries getnode} to figure out that this is {\itshape Vdd}. You can interrupt {\bfseries getnode} by typing {\bfseries \^{}C} (control-C), and {\bfseries getnode} will return the ``best'' name found so far. There is no way to tell if this is an alias or the name RSIM expects unless {\bfseries getnode} is allowed to complete. To prevent these long name searches, you can tell {\bfseries getnode} to quit its search when certain names are encountered. Type: \starti \ii {\bfseries :getnode abort Vdd} \endi Select the blue strip on top of the circuit and type {\bfseries :getnode}. You'll notice that the name was found very quickly this time, and {\bfseries getnode} tells you it aborted the search of {\itshape Vdd}. The name returned may be an alias instead of the the one RSIM expects. In this example, the abort option to {\bfseries getnode} will abort the name search on any name found where the last component of the node name is {\itshape Vdd}. That is, {\bfseries getnode} will stop if a name such as ``miasma/crock/{\itshape Vdd}'' or ``hooha/{\itshape Vdd}'' is found. You can abort the search on more than one name; now type {\bfseries :getnode abort GND}. Select the bottom horizontal blue strip in the layout, and type {\bfseries :getnode}. The search will end almost immediately, since this node is {\itshape GND}. {\bfseries getnode} will now abort any node name search when either {\itshape Vdd} or {\itshape GND} is found. The search can be aborted on any name; just supply the name as an argument to {\bfseries getnode abort}. Remember that only the last part of the name counts when aborting the name search. To cancel all name aborts and resume normal name searches, type: \starti \ii {\bfseries :getnode abort} \endi {\bfseries getnode} will no longer abort the search on any names, and it will churn away unless interrupted by the user. \section{RSIM Tool} You can also use the mouse to help you run RSIM under Magic. Instead of typing node names, you can just select nodes with the mouse, tell RSIM what to do with these nodes, and let Magic do the rest. Change tools by typing: \starti \ii {\bfseries :tool rsim} \endi or hit the space bar until the cursor changes to a pointing hand. The RSIM tool is active when the cursor is this hand. The left and right mouse buttons have the same have the same function as the box tool. You use these buttons along with the select command to select the nodes. The middle button is different from the box tool. Clicking the middle button will cause all nodes in the selection to have their logical values displayed in the layout and printed in the text window. We need to have RSIM running in order to use this tool. Start RSIM by typing: \starti \ii {\bfseries :startrsim tut11a.rsm} \endi The {\bfseries .rsm} file you simulate must correspond to the root cell of the layout. If not, Magic will generate node names that RSIM will not understand and things won't work properly. If any paint is changed in the circuit, the circuit must be re-extracted and a new {\bfseries .rsm} file must be created to reflect the changes in the circuit. Magic will print the RSIM header, but you return to Magic instead of remaining in RSIM. This is an alternate way of starting up RSIM, and it is equivalent to the command {\bfseries rsim tut11a.rsm} and typing a period ({\bfseries .}) to the RSIM prompt, escaping to Magic. We need to initialize RSIM, so get to RSIM by typing {\bfseries :rsim} and you'll see the RSIM prompt again. As before, type {\bfseries @ tut11a.cmd} to the RSIM prompt to initialize everything. Type a period ({\bfseries .}) to return to Magic. We are now ready to use the RSIM tool. As mentioned earlier, {\bfseries tut11a} is a 4-bit counter. We'll reset the counter and then step it using the RSIM tool. Locate the square blue area on the top right corner of the circuit. Place the cursor over this region and select it. Now click the middle button, and the RSIM value for this node will be printed in both the text window and in the layout. Magic/RSIM will report that the node is named {\itshape hold} and that its current value is {\itshape X}. You may not be able to see the node value in the layout if you are zoomed out too far. Zoom in closer about this node if necessary. Try selecting other nodes, singly or in groups and click the middle button to display their values. This is an easy way to probe nodes when debugging a circuit. Select {\itshape hold} again (the blue square). This node must be a ``1'' before resetting the circuit. Make sure this is the only node in the current selection. Type: \starti \ii {\bfseries :simcmd h} \endi to set it to a ``1''. Step the clock by typing: \starti \ii {\bfseries :simcmd c} \endi Click the middle button and you will see that the node has been set to a ``1.'' The Magic command {\bfseries simcmd} will take the selected nodes and use them as RSIM input. These uses of {\bfseries simcmd} are like typing the RSIM commands {\itshape h hold} followed by {\itshape c}. The arguments given to {\bfseries simcmd} are normal RSIM commands, and {\bfseries simcmd} will apply the specified RSIM command to each node in the current selection. Try RSIM commands on this node (such as {\itshape ?} or {\itshape d}) by using the command as an argument to {\bfseries simcmd}. You can enter RSIM interactively at any time by simply typing {\bfseries :rsim}. To continue using the RSIM tool, escape to Magic by typing a period ({\bfseries .}) to the RSIM prompt. The node {\itshape RESET{\_}B} must be set to a ``0''. This node is the red square area at the middle right of the circuit. Place the cursor over this node and select it. Type the Magic commands {\bfseries :simcmd l} followed by {\bfseries :simcmd c} to set the selected node to a ``0''. Click the middle mouse button to check that this node is now ``0''. Step the clock once more to ensure the counter is reset. Do this using the {\bfseries :simcmd c} command. The outputs of this counter are the four vertical purple strips at the bottom of the circuit. Zoom in if necessary, select each of these nodes, and click the middle button to check that all are ``0''. Each of these four nodes is labeled {\itshape bit{\_}x}. If they are all not ``0'', check the circuit to make sure {\itshape hold=1} and {\itshape RESET{\_}B=0}. Assuming these nodes are at their correct value, you can now simulate the counter. Set {\itshape RESET{\_}B} to a ``1'' by selecting it (the red square) and then typing {\bfseries :simcmd h}. Step the clock by typing {\bfseries :simcmd c}. Using the same procedure, set the node {\itshape hold} (the blue square) to a ``0''. We'll watch the output bits of this counter as it runs. Place the box around all four outputs (purple strips at the bottom) and zoom in so their labels are visible. Select one of the outputs by placing the cursor over it and typing {\bfseries s}. Add the other three outputs to the selection by placing the cursor over each and typing {\bfseries S}. These four nodes should be the only ones in the selection. Click the middle mouse button to display the node values. Step the clock by typing {\bfseries :simcmd c}. Click the middle button again to check the nodes. Repeat stepping the clock and displaying the outputs several times, and you'll see the outputs sequence as a counter. If you also follow the text on the screen, you'll also see that the outputs are also being watched. You may have noticed that the results are printed very quickly if the middle button is clicked a second time without changing the selection. This is because the node names do not have to be recomputed if the selection remains unchanged. Thus, you can increase the performance of this tool by minimizing selection changes. This can be accomplished by adding other nodes to the current selection that you are intending to check. To erase all the RSIM value labels from the layout, clear the selection by typing: \starti \ii {\bfseries :select clear} \endi and then click the middle mouse button. The RSIM labels do not affect the cell modified flag, nor will they be written in the {\bfseries .mag} file. When you're finished using RSIM, resume RSIM by typing {\bfseries :rsim} and then quit it by typing a {\bfseries q} to the RSIM prompt. Quitting Magic before quitting RSIM will also quit RSIM. We've used a few macros to lessen the typing necessary for the RSIM tool. The ones commonly used are: \starti \ii {\bfseries :macro h ``simcmd h''} \\ \ii {\bfseries :macro l ``simcmd l''} \\ \ii {\bfseries :macro k ``simcmd c''} \endi \end{document}