Answers Database


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


Record #4008

Product Family: Software

Product Line: FPGA Implementation

Product Part: Epic

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


Problem Description:
Urgency: standard

General Description:

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 we 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 ere~~~~~~~~~~~~~~~~~~~~~~~

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 - Last Modified: 06/29/99 14:56

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