Return to Support Page
 homesearchagentssupportask xilinxmap

Answers Database


M1.5 EPIC: EPIC vs. XDE and other useful EPIC Tidbits


Record #4008

Product Family:  Software

Product Line:  FPGA Implementation

Problem Title:
M1.5 EPIC: EPIC vs. XDE and other useful EPIC Tidbits


Problem Description:
Keywords: EPIC, XDE, manual routing

Urgency: standard


This is a collection of power user tips for EPIC.  It also contains tidbits
on those things that XDE users tend to get tripped up on the most when
first using EPIC.

All of what is stated here is documented in the EPIC users guide in the
Xilinx M1.4 online documentation.  If you need more info on a particular
EPIC topic the docs are a good source of info and examples.  If you plan
on using EPIC a lot I highly encourage you to read the documentation.


Solution 1:



---------------------------------------------------------------
USEFUL EPIC TIDBITS:
---------------------------------------------------------------

Noun-Verb Interface:
--------------------
Epic has a Macintosh style noun-verb interface.  This means you first
need to select one or more objects then you apply an action to these.

Also note that Epic is a mode-less editor.  This means you do not need
to be in 'route-mode' in order to manually route connections.

EPIC vs. XDE Functionality:
---------------------------
A common complaint from first time EPIC users is that they think it has
less functionality than XDE.  EPIC does offer more overall functionality
than XDE.  However, there are a couple of things XDE offered that
are not available in EPIC such as print.  The mechanics of how you do
things in EPIC is different than the comparable function in XDE.  The
actual number of keystrokes to do these, however, is about this same.

Manual Routing differs from XDE:
--------------------------------
In XDE, in order to manually route connections you select the PIPs
to make the routing connections.  You do not do it this way in EPIC.
Instead, select the wires rather than PIPs to make the routes.	Select
the wires in a contiguous fashion and try to select these in the order
the electrons will flow from source to driver.	Press the ROUTE
button to route these connections.  Be careful to press the ROUTE
as opposed to the AUTOROUTE button here.  EPIC will run DRC as each
routing segment is added to ensure you have nets that are correct by
construction.

Adding Blocks (comps) differs from XDE:
---------------------------------------
To program a CLB, select the site (unprogrammed CLB location) and press
the ADD button.  Once you've done this you can then select the blue
comp and press the EDITBLOCK button to program the CLB (or IOB or any
other type block).  This will bring up the Logic Block Editor (LBE)
window.

Other LBE tricks:

You can place the cursor over the comp you'd like to run the logic
block editor (LBE) on and hold down the SHIFT key and click the left
mouse button.  This is the quick way to invoke LBE.

For unplaced comps, you can select the comp name from the List Window and
press the editblock button.  Unlike XDE you can edit the comp even if it
is not placed.

Currently you can only bring up one LBE window at one time.  When you
do this it will disable actions in the main EPIC window until you
close out of LBE.

Highlighting differs from XDE:
------------------------------
Be default, EPIC has a single HILITE button which will highlight the
selected object(s) in yellow.  You can hilite in a variety of colors
but this is not entirely obvious.  Here's how.	Clip the following lines
below and put them into a file called 'epicuser.ini'.  Put this file
either in the same directory where your .ncd lives (UNIX only), or your
$HOME directory (recommended) or in the $XILINX/data directory.
EPIC will search for epicuser.ini in the directory
order specified here.  Note the epicuser.ini can be used for lots more
things than just adding buttons for highlighting.

~~~~~~~~~~~~~~~~~~~~cut here~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# epicuser.ini file
#
# This is an initialization file to customize EPIC.
# Note the pound (#) character is the comment character.  It can be placed
# in any column and will comment to the end of line.  Same style as
# in the Unix C-Shell.
#
# The commands below create user defined buttons, that appear on the
# right hand side of the EPIC window, to hilite selected objects
# in the desired color.

unbutton hilite   # Remove the default hilite button.
button yellow	  'hilite -c yellow'
button red	  'hilite -c red'
button dark_blue  'hilite -c dark_blue'
button dark_green 'hilite -c dark_green'
button olive	  'hilite -c olive'

# Epic has a palette of 15 colors.  You can replace any of the
# above colors with one of these:
#   black
#   blue
#   green
#   red
#   yellow
#   cyan
#   magenta
#   white
#   grey
#   olive
#   dark_blue
#   dark_green
#   dark_cyan
#   dark_red

~~~~~~~~~~~~~~~~~~~~end cut here~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Emulating the XDE 'Parked-Cursor':
----------------------------------
EPIC does not support the parked-cursor in the same manner as XDE where
you could just position the mouse cursor over something and the editor
would give you some info in the status window about the underlying object.

To emulate this in EPIC, move the mouse cursor over the object in question.
Press the 'q' key on the keyboard (q is for query).  In the status window
the object info will be given.	Also if you just click on object to select
them, EPIC will give the same sort of info.

If you do this on a block pin you can quickly get source to load delays
displayed.

Getting Delays for Nets:
------------------------
In addition to the 'q' hotkey mentioned above, you can also select a
net, press the ATTRIB button and then click on the 'Show Pin List'.  This
will give source to load delays for all routed load pins on that net.

Selecting Entire Nets with the Mouse:
-------------------------------------
To select an entire net rather than just a routed segment of a net, hold
down the SHIFT key and click the left mouse button.  You can also select
the net name from the List window to do the same thing.

Feed-Throughs (a.k.a. route-throughs):
--------------------------------------
EPIC and M1 do not have the concept of split nets that Xact had.  In order
to perform a feed-through in Xact you needed to have 2 different nets that
had the same root name but differed in their suffix such as mynet_1 and
mynet_2.

In M1 these 2 nets are represented as a single net whose name would be
mynet.

EPIC will display feed-throughs as a routed connection that lies on
top of a block (a comp or a site).

To see the possible feed-through paths through a block position the
cursor over the pin and press SHIFT+LEFT_MOUSE_CLICK.  Available feed-through
paths will be highlighted.

Making the Status/History Window Bigger:
----------------------------------------
By default, EPIC shows about 3 lines of text at the bottom of the main
display.  To enlarge this region on a PC, put the cursor over the thick
line that divides the status window from the edit window.  You will see
the cursor change to a double arrow.  Hold down the LEFT mouse button and
drag upwards.  This will show more lines of text.  Under UNIX, the operation
is about the same but you need to position the cursor over the small
rectangle in the border above the scroll bar which is next to the status
window on the right hand side.

EPIC Command Line:
------------------
EPIC has a command line which can be made visible by clicking on 'Post Cmd...'
from the 'View' pulldown menu.	See the online manual or online help on
what commands are available.

Note there is a UNIX style command line history substitution.  Enter '!?' at
the command line for help on this.  Just remember that '!!' repeats the
last command.  Unlike the DOS prompt window you cannot use the up and
down arrow keys to select and edit a previous command.	We'll be adding
this in the M1.6 version of EPIC.

Command Line Tricks with Wildcards:
-----------------------------------
The command line is not normally needed.  There are some things you can
do, however, that are real convenient and only possible from the command
line.  Say, for instance, you want to select all comps (blocks) that have
the root name of $I879/ADDER/* and you'd like to hilite these in red.
>From the command line enter:

   select comp $I879/ADDER/*

This will select all the comps in this group.  You can now press the
hilite or red button or from the command line enter:

   hilite -c red


EPIC .epl File:
---------------
EPIC records every action you do with the mouse, menu, or command line into
a <your_design_name>.epl file where <your_design_name> matches that of the
.ncd file.  This file lives in the same directory where the associated .ncd
file lives.

If EPIC terminates successfully then this .EPL file is removed.  If EPIC
should crash or you turn off the power to your system the .EPL file is
not removed.  When you run EPIC on your .NCD again and if it finds a
matching .EPL file, then EPIC will ask you if you want to recover.  It
basically plays back the actions recorded in the .EPL.

EPIC .scr Script Files:
-----------------------
If you ever want to figure out what command an action in EPIC maps to
just click on 'Record' in the 'Scripts' pulldown menu.	Once you are
done recording your actions you can click on 'End Record' in the
Scripts pulldown menu and look in the resultant .scr file to see what
actions map onto which EPIC commands.

Using Script Files to Execute Batch Style Changes:
--------------------------------------------------
You can emulate a batch mode of EPIC where you control all EPIC actions
through a script and you do not have to interact with the GUI part of
the editor.  You can put your EPIC commands into an epicuser.ini file.	In the
epicuser.ini snippet below there are 3 sections: section-1 to turn off
most of the graphics to speed up processing, section-2 is where you enter
the commands you'd like to execute and section-3 is the 'save' and 'quit!'
commands to force the editor to save the changes and exit.  Remember to
put the epicuser.ini file in either $cwd (UNIX only), $HOME (recommended), or
$XILINX/data.

~~~~~~~~~~~~~~~~~~~~~~~~~cut here~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Batch EPIC scripter.

#Turn off all layers.  This will speed the draws up.
setattr layer sites		 view OFF
setattr layer components	 view OFF
setattr layer routes		 view OFF
setattr layer ratsnests 	 view OFF
setattr layer macros		 view OFF
setattr layer pips		 view OFF
setattr layer pinwires		 view OFF
setattr layer long_lines	 view OFF
setattr layer local_lines	 view OFF
setattr layer switch_boxes	 view OFF
setattr main disable_draw TRUE
setattr main edit_mode read-write

#Do whatever EPIC commands you want to do here.
....your_command1....
....your_command2....
....your_command3....
....your_commandN....

#Exit EPIC
save
quit!
~~~~~~~~~~~~~~~~~~~~~~~~~end cut here~~~~~~~~~~~~~~~~~~~~

To run the above script, from a DOS prompt window or a Unix shell enter:

   epic <name_of_your_design>.ncd

Dumping Your Design in Terms of EPIC Commands:
----------------------------------------------
>From the EPIC command line you can enter:

   record -c -r

This will create a file (<design>.scr) that contains a list of EPIC
commands that when played back in EPIC will recreate your design.
For a large 4085 design, it only takes about 10 seconds to create this
script file.

There are a few gotchas if you playback this script:

  - macros and rpms get flattened
  - tspecs can get lost
  - playback of this script can be really slow (multiple hours for large
    designs due to routing taking a long time)

If you are not concerned about routing you can speed things up on playback
by entering:

   record -c

rather than 'record -c -r'.  This tells EPIC not to record any routing info.
EPIC will still record CLB programming, placement and what pins are on what
nets.

In the resulting .scr file you will see info on the programming of all
CLBs and other blocks, placement info, and routing info.  You will also
note that EPIC writes out a backslash character '\' to escape certain
things such as white space within config strings and other special
characters.  This is similar to what is done in Unix C-shells and other
type shells.

So what the heck is this useful for?

  - it gives you an ASCII dump of your design
  - it allows you to inspect and modify certain aspects of your design

Panning in EPIC:
----------------
EPIC has lots of different means of navigation.  You can simply use
the arrow keys on the keyboard to pan left or right, up or down.  You
can use the SHIFT+arrow_key to pan to the edge of the device.  Most
people hold down the middle (UNIX) or right (PC) mouse key and drag
to pan the display.

Most people are not aware you can also grab the small rectangle in the
locator area (that world view thingy in the upper right corner of the
EPIC window)  When zoomed in you can position the mouse cursor over
the smaller of these 2 rectangles and hold down the middle (UNIX) or
right (PC) mouse button to drag the locator box to the desired location.
This will pan the main display.  Since selected objects are shown in the
locator window you can simply drag the locator box over the selected object
to pan to where this lives in the main display.

What are those funny things on top of routed pins?:
---------------------------------------------------
Pins on routed VCC and GND nets have special symbols.  For VCC, a plus sign is
placed on top of the pin on the comp.  For GND, a standard type ground
symbol with 3 dashed line of descending width are used.  This is done to
make these pins stand out.

UNDO Is Glacially Slooooooow:
-----------------------------
EPIC has N levels of undo capability.  The way it does this is to reload
the .ncd and play back all of the commands in the .epl file except for the
last one.  As you can imagine, the larger the design and the more commands
that need to be played back this can take a while.

One of the tricks you can do to speed this up is to periodically do a Save
of the design.	Especially after doing autoplace and autoroute commands.
EPIC will only playback commands which occurred after the last save.

In the M1.6 version of EPIC we hope to make undo much quicker.






Solution 2:

------------------------------------------------------------
BUGS To Be Weary Of:
------------------------------------------------------------

LBE/Route Bug:
--------------
In version M1.4.12 of EPIC there is a bug where if you use the Logic
Block Editor in conjunction with manual or automatic routing then
EPIC will sometimes crash.  This seems to happen a lot more on PC rather
than UNIX.  There is a memory corruption problem which we are trying to
track down.  Once found and fixed we will be making an M1.4 patch
available for this.

Until this becomes available I have the following recommendations.
Turn off the auto-router option.  You can still autoroute nets but
this option applies to when you add a net, do a block swap, add pins
to a net, etc where EPIC will autoroute those changed or new connections.
To disable this select 'Post Main Attrs...' in the Misc pulldown menu
then click on 'Automatic Routing' to disable this.

To always disable this you can put the following command in your
epicuser.ini file:

   setattr main auto_route false

Some people have also had success by clicking on the 'Save' entry in
the 'File' pulldown menu between LBE and routing operations.  This seems
to clean up memory and get things back in sync.

TSPEC/LBE Bug:
--------------
There is another phenomenon to be leery of.  If you use the logic block
editor (LBE) to reprogram a block (CLB, IOB, etc) and there are tspecs on
BELs (LUTs or Flops) within this block, the tspecs will be lost.  Unfortunately
this probably cannot be fixed with a patch to M1.4.  We do have this fixed in M1
.5.  If you use LBE to just inspect the contents of a block,
make sure you press the CANCEL button to get out of LBE rather than the OK or
APPLY buttons otherwise tspecs can be lost.

The Shrinking LBE Window Bug: (PC only)
-----------------------------
For some PC users, there are certain graphics cards where resizing the LBE
window will cause it to completely disappear.  Sometimes you don't even
have to resize for this to occur.

Sometimes you can use LBE until you open another design without
leaving EPIC.  Then the LBE window will disappear when viewing the next
design.  Try exiting EPIC and then bring it up on the design in question.
This sometimes fixes the problem.

Other people have resorted to installing a different brand of graphics
card.  One we've had great success with is the Matrox Millennium II
graphics card.



End of Record #4008

For the latest news, design tips, and patch information on the Xilinx design environment, check out the Xilinx Expert Journals!

© 1998 Xilinx, Inc. All rights reserved
Trademarks and Patents