SSHAFT Macro Design Tutorial
last modified 10/17/00
This brief tutorial describes the steps needed to create and
test a SSHAFT ICMacro using Module Compiler. The files relevant to this
tutorial can be found in /tools/sshaft/design/macrotut.
- Set up your environment to use Exceed, copy the dot-files to your home
directory, and source the setup-script as described in the SSHAFT
Setup page.
- Create a directory in which you will run the flow. The ICMake tools
which implement much of the design flow assume that this directory contains
a certain tree-structure which will be described during this tutorial.
In general, you will see two directories in the root directory:
- run - Run directories for various tools
- data - Automatically generated design data files
- cd to the directory you just created.
- Create a library with the following command:
createLib.pl mylib
Note that the subdirectory run/cds was created for running Cadence
Design Framework II tools, and the data/dfII/mylib directory was
created to collect the data files. This command can take multiple
library names as arguments.
- cd to run/cds.
- Start the Cadence Design Framework II by typing "icfb &"
- We will now create a counter macro using Module Compiler. First,
create a cell called countmc in the mylib library. As a
convention, you can set the view name to "raw" and open with
Virtuoso, but any view name and type will do. This cell will contain
the design data generated in this tutorial.
- Copy the file count.mcl to the root of your design flow
directory-tree.
- Open the mylib countmc raw cell for editing and click somewhere
inside the window to make it your "current edit cell view".
- Hit Shift-Q to edit the cell-view properties. Add a string
property called "bjcView_Scan" and set the value to "1"
(don't include the quotes in the string value). This will cause the
scan-chain to be inserted when the macro is elaborated. Omit this
property to omit the scan chain.
- Enter the following command in the CIW:
bjcMCSynth( "../../count.mcl"
"COUNT" ?clk "CLK" )
This will launch Module Compiler to synthesize the counter, launch Design
Compiler to insert the scan chain, and import the edif file into a view
named "elaborated". Note that the run/mc and run/dc
directores are created for this purpose. You can invoke these tools
from their respective run-directories manually, if you wish. The
options for bjcMCSynth are as follows:
- first argument - must be the path to the source file, relative
to the run/cds directory.
- second argument - must be the name of the module
- ?clk argument - must specify the name of the clock port in the
final design. Module compiler uses the name "CLK" by
default for this node (this parameter may be eliminated if we never find
a way to change this name). If this argument is not specified, the
macro is assumed to contain combinational logic only (no sequential
logic).
- ?par argument - should be set to a string containing a
comma-separated list of parameters to be used when synthesizing the
macro. If this argument is not specified, then all parameters are
set to defaults.
- ?tech argument - should be a string containing the desired
technology. If omitted, the technology HCMOS7_wc_1.60V_85C is
used. The other available technologies are
- HCMOS7_wc_2.00V_85C
- HCMOS7_wc_2.20V_85C
- HCMOS7_nom_1.80V_25C
- HCMOS7_nom_2.50V_25C
- HCMOS7_bc_2.70V_0C
- ?opc argument - should be a string containing the desired
operating condition. If omitted, this parameter is set to
"wc_1.60V_85C". This argument must be set to either
"synlibcond" or the name of a named operating condition in the
Synopsys tech-file. Module Compiler will not complete successfully
otherwise. Our tech-files have only one named operating condition
each. These other possible names are listed here in order of the
tech-files above.
- wc_2.00V_85C
- wc_2.20V_85C
- nom_1.80V_25C
- nom_2.50V_25C
- bc_2.70V_0C
- ?wlm argument - should be set to a string containing the
desired wire-load model. If omitted, the wire-load model "37to75K"
will be used. For the most accurate results, the wire-load model
should be chosen according to the total cell-area (in square microns) of
the macro after synthesis:
| Area greater than |
area less than |
model name |
| 0 |
1500 |
0to1500 |
| 1500 |
3000 |
1500to3K |
| 3000 |
6000 |
3to6K |
| 6000 |
9000 |
6to9K |
| 9000 |
12000 |
9to12K |
| 12000 |
15000 |
12to15K |
| 15000 |
22000 |
15to22K |
| 22000 |
37000 |
22to37K |
| 37000 |
75000 |
37to75K |
| 75000 |
150000 |
75to150K |
| 150000 |
300000 |
150to300K |
| 300000 |
750000 |
300to750K |
| 750000 |
900000 |
750to900K |
| 900000 |
1050000 |
900to1050K |
| 1050000 |
1200000 |
1050to1200K |
| 1200000 |
1350000 |
1200to1350K |
| 1350000 |
1500000 |
1350to1500K |
| 1500000 |
2250000 |
1500to2250K |
| 2250000 |
3000000 |
2250to3000K |
| 3000000 |
3750000 |
3000to3750K |
| 3750000 |
4500000 |
3750to4500K |
- Note that the following files have been created in the directory
data/other/mylib/countmc:
- mc.log - Module Compiler log file
- mc.report - Module Compiler synthesis report
- mc.vhd - Module Compiler VHDL netlist output
- mc.bvhd - Module Compiler Behavioral VHDL output
- mc.db - Module Compiler DB output for Synopsys tools
- synth.log - Design Compiler log file
- synth.db - Design Compiler DB output (containing scan chain)
- synth.edif - Design Compiler EDIF output
- synth.edif.f - EDIF file filtered for input into Cadence DFII
- Note also that a new view called "elaborated" has been created
for mylib countmc. Close the "raw" view and open the
"elaborated" view.
- Type the following commands:
listinst
listterm
listnet
These commands simply list the instances, terminals, and nets of the
currently opened cell view. They can be helpful when debugging to see
if your macro was synthesized correctly.
- Enter the following command in the CIW:
bjcStitch
This command is generally used for stitching the raw and elaborated views
together into a format more easily used by the flow. In this case, it
simply produces a new view called "stitched".
- Exit icfb and cd back to the root of your design flow
directory tree.
- Enter the following command:
epicSim.pl -src mylib countmc
stitched -clk CLK
This command generated an hspice netlist for the cell you just created and
puts it in the file data/other/mylib/countmc/netlist.sp. It also
copies the netlist into the run/epic directory and filters it for use with
epic (eliminates diodes, etc.). Lastly, it invokes the m2epic_vec.pl
script to create EPIC run decks and convert Simulink test-vectors to EPIC
test-vectors. Other possible arguments to epicSim.pl include
- -vd [path]
path to a directory containing Simulink test-vectors (for use with
m2epic_vec.pl). Default is /dev/null.
- -T [period]
Clock period in nanoseconds. Default is 40.
- -V [voltage]
Supply voltage. Default is 1.0
Routing the Macro
- cd back to the run/cds directory and run icfb again.
- Type the following commands, one after the other. This advances the
design flow through the logic_ctgen, skel_ctgen, and skel_fpgen steps.
- bjcTempLogicCTGen(?src list("mylib" "countmc"
"stitched"))
- bjcGenPhysicalHier(?src list("mylib" "countmc"
"logical"))
- Exit icfb and go back to the root of your design flow directory tree.
- Enter the following command:
skelFPGen.pl -lib mylib -cell
countmc
This will generate the autoLayout hierarchy and convert the view to the
Pillar database
- cd to the run/dp directory and run Design Planner with the
command areaPdp &
- Open the the autoLayout view of cell countmc in library mylib.
- Type the follwing commands in the Design Planner command window:
(listinst)
(listterm)
(listnet)
These commands are identical to their SKILL equivalents. Note
however, that supply and ground nets and terminals (vdd! and gnd!) have been
added to the view.
- Type the following command in the Design Planner command window:
(bjcDrawRows ?density 0.9
?aspect 4.0)
This draws standard cell rows with a target row utilization of 90% and
an aspect ratio of 4.0. The procedure will attempt to draw rows which
meet your specifications as closely as possible. Check the log window
for the resuling density and aspect ratio.
- Position the cursor in the edit window and hit the "B"
key. This will compact the PRBoundary shape around the rows you have
just drawn.
- Type the following command in the Design Planner command window:
(bjcQP ?pinopt t)
This invokes the QPlace placement tool and instructs it to optimize the
pin positions while it places cells.
- Design Planner will print many messages to the log window and
eventually return unsuccessfully. If you scroll up in the
window, you will eventually find a message like the following:
The site utilization is = 279.3 is too high!
*ERROR* Impossible to place without overlaps!
This error occurs because the floorplan is too dense. The
bjcDrawRows function takes into account cell area but not pin area when
determining density. The ratio of pin area to total area is related to
the ratio of perimeter to area, so this ratio is higher for smaller
cells. While 90% densities are reasonable for large cells, we should
probably use 50% or lower for a cell this size.
- Choose BWRC -> FP Init. This will re-initialize the cell-view and
erase the rows you just drew. This command also closes the cell-view,
so you will have to re-open it.
- Draw rows with a density of 0.4 and compact the PR Boundary as in steps 7
and 8.
- Run QPlace again as in step 9. The Cells should be placed
successfully.
- Choose BWRC -> FP Save to save your floorplan.
- Exit Design Planner and go back to the root of your design flow directory
tree.
- Type the following command:
routeSingle.pl -lib mylib
-cell countmc
This will add filler cells to your design, invoke IC Craftsman to route,
and convert the result to a DFII layout view.
NOTE: If IC Craftsman runs unsuccessfully for any reason, you will see
the following error message in the areaPdp.log file:
ERROR -*- Invalid Command, sh -c "'cd ../icc ;
ic_craft.exec'"
One common problem is that the DISPLAY environment variable is set at login
time with the parenthost command. Since routeSingle.pl invokes IC
Craftsman through a remote procedure call, the DISPLAY variable will be set
incorrectly, causing IC Craftsman to crash. To circumvent this
problem, either remove the DISPLAY settings from your .cshrc or .login file
or invoke routeSingle.pl with the -nogr option to turn off graphics
while routing.
- Type the following command:
verifyLayout.pl -lib mylib
-cell countmc
This invokes Calibre DRC and LVS on the cell you just routed. You
should see the following log messages:
DRC Completed with 96 error(s)
LVS Reports that the netlists match
The first message is bad news, but the second is pretty good. Since the
cell passes LVS, however, we can proceed with parasitic extraction in
Arcadia.
- Type the following command:
extractLayout -lib mylib -cell
countmc
This invokes Arcadia extraction and produces a flat netlist called
extracted.sp in the directory data/other/mylib/countmc.
- Coming soon... EPIC simulations with the extracted netlist...
maintained by Rhett Davis
wrdavis@eecs.berkeley.edu