Академический Документы
Профессиональный Документы
Культура Документы
Synplify
®
November 2002 Version 1.9
Abstract
Triscend supports the use of the Synplify FPGA Synthesis tool for the creation of designs to place into
the Configurable System Logic (CSL) portion of a Triscend device.
Contents
Introduction................................................................................................................................................ 2
System Requirements............................................................................................................................... 2
Before You Begin ...................................................................................................................................... 2
Getting Started .......................................................................................................................................... 3
Creating an EDIF Netlist in Synplify .......................................................................................................... 3
Instantiating Exported Modules in VHDL and Verilog Designs................................................................. 4
Frequently Asked Questions ..................................................................................................................... 5
1. Unable to Access the Synplify License ............................................................................................. 5
2. Unable to Access Triscend Devices.................................................................................................. 5
3. Triscend Target Device is Not Listed ................................................................................................ 5
4. Instantiation Libraries for Black Boxes .............................................................................................. 5
5. Instantiating Modules With Attributes ................................................................................................ 6
6. Pre-defined Constants....................................................................................................................... 8
7. Why do I get this message - 860 Error: primitive view:PrimLib.z(prim) not handled yet................... 8
8. FastChip Prints an ERROR for LATCHCS, LATCHC, LATCHS, or DFFCSMACRO in a Netlist ..... 9
9. Synplify produces a Dr. Watson exception or "corrupted memory bin" message............................. 9
10. Synplify does not display the design graphically............................................................................. 9
11. ConnectedPinNotInEquation warning printed when importing Synplify EDIF netlists .................... 9
Known Bugs ............................................................................................................................................ 11
1. Synplify 6.x: Missing Clock Inversion .............................................................................................. 11
2. Synplify 6.x: Inferred ROMs............................................................................................................. 12
3. Synplify 7.0.2 and below: Index 0 is OUT of Range........................................................................ 15
System Requirements
In order to synthesize designs, you need the following items:
• Synplify/Synplify Pro version 6.1.3 or later (7.0.2 or higher recommended). This is the version of
the Synplify tool that supports Triscend. An evaluation copy can be downloaded from the Synplicity
web site http://www.synplicity.com/ .
• The Triscend FastChip Development System version 2.1.1 or later:
Designers can import the EDIF files exported by Synplify into FastChip. Once imported, your
designs become Imported types in FastChip and can be instantiated in designs.
You may also need one or more of these optional files:
• [FastChip Dir]/data/libraries/Synthesis/TriscendDefines.v or .vhd
These files contain definitions of constants which may be applied to the ports of primitives
instantiated in your design.
• [FastChip Dir]/data/libraries/Synthesis/TriscendVBB.v or TriscendVBBSynplify.vhd
These are instantiation libraries for Triscend primitives and macros which are not included in the
default libraries shipped with the Synplify product. The default Synplify instantiation libraries
triscend.v and triscend.vhd contain primitives that are inferred, and are found in the directory
[Synplify Dir]/synplify/lib/triscend/triscend.v or triscend.vhd.
2 TCH405-0002-001
Getting Started
Follow these steps to begin using Synplify:
1. Open Synplify or Synplify Pro.
2. Create a new project (if this is the first time you are importing your design).
3. Add your input VHDL or Verilog designs to the project. Verilog source files are found in the “verilog”
folder and VHDL files in the “vhdl” folder. Add instantiation source files containing module
interfaces for black boxes ahead of your source, followed by intermediate level modules, with your
top-level module added last. There is an instantiation library in the Synplify installation under
synplify\lib\triscend for some Triscend primitives, but you may also create your own file.
4. When all the VHDL and Verilog files comprising your design have been read in, select the Project
pull down menu from the main menu bar and choose “Implementation Options.”
5. In the Options for Implementation window, select the Device tab and choose your Triscend device
family as the Technology, as well as the Part, Speed and Package for the device you want to
target. If you do not see the exact combination for your device, select the closest configuration.
There are some options to consider.
• The “Disable I/O Insertion” option must be selected. (In the current version of the tool, this is
checked by default.) Otherwise, the tool inserts pads on all dangling ports. Triscend highly
recommends hand-instantiating I/O primitives on ports instead of allowing the synthesis tool to
perform this function.
• Other implementation options are common to all vendors supported by Synplify; consult the
Synplify User’s Guide for more information.
Click on OK to set the implementation options.
6. Synthesize your design by clicking Run in the main window.
3 TCH405-0002-001
Instantiating Exported Modules in VHDL and Verilog Designs
You can use models exported from FastChip as modules in user HDL designs. A typical candidate is
an imported module in the FastChip library tree (perhaps obtained from another design environment)
that the designer wishes to use as a cell type in HDL designs. By right-clicking one of the modules in
the library tree, any of the modules can be exported to VHDL or Verilog.
Modules exported for use in this manner must be defined for synthesis as block boxes, or undefined
modules, by the appropriate “Don’t touch” statements in HDL code. These statements cause the
synthesizer to halt processing at the surface and not attempt to descend below into the contents.
This is typically done by adding comments with embedded synthesis directives to empty module
definitions in an instantiation library, and including the library as a source file for implementation. For
example, if the module type name is BBOX, the Verilog code is similar to:
module BBOX(I,O) /* synthesis syn_black_box syn_noprune=1 */ ;
input I;
output O;
endmodule
:
more module definitions
:
If an imported module is exported and instantiated in an HDL design, the resulting EDIF netlist from the
synthesized HDL design must be imported into the same FastChip project from which the imported
module was obtained.
When importing a design with instantiated modules, the contents are read from the imported modules
in a project and flattened into the design. Note that this means if you re-import one of these modules,
then other imported designs with instantiated versions of the module must be re-imported as well.
When working with soft modules, the csoc modlib command can be used to create HDL black box and
simulation libraries; see the Triscend technical document titled
Using_Soft_Modules_with_EDA_Tools.pdf for more information.
4 TCH405-0002-001
Frequently Asked Questions
If you have questions about using Synplify to synthesize your design, consult the items below for some
of the more common issues experienced by users. The Triscend technical document titled
Synthesis_Design_Guide.pdf also contains useful design information.
• Example of the same license data without check-out failure (the missing back-slash was added
to the first line):
FEATURE synplify_pc synplctyd 2002.050 14-may-2003 0 \
9CFA39C576076B8D706B \
VENDOR_STRING=fpga,analyst HOSTID=SKEY=0C53 ck=200
5 TCH405-0002-001
Synplify includes instantiation libraries triscend.v and triscend.vhd in the directory
[Synplify_Dir]/synplify/lib/triscend. It contains Triscend primitives which are inferred or instantiated by
the Synplify tool--for example, pad cells. The VHDL package name is component.
Triscend includes instantiation libraries TriscendVBB.v and TriscendVBBSynplify.vhd in the directory
[FastChip_DIR]/data/libraries/Synthesis (Note: TriscendVBB.vhd is for use with FPGA Express and
results in warnings when used with Synplify). These libraries are complementary to those included with
Synplify; the modules in the file do not overlap. The VHDL package name is TCOMPONENTS, which is
the same as the Triscend simulation library.
To use these libraries, simply add them as a source file to be compiled.
• VHDL
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
library synplify;
use synplify.attributes.all;
:
architecture TEST of MyExample is
:
6 TCH405-0002-001
attribute syn_props: string;
attribute syn_props of myPad1: label is "HYSTERESIS=TRUE";
begin
:
myPad1: PAD port map( ... );
:
end TEST;
• Verilog
PAD myPad1( ... ) // synthesis syn_props="HYSTERESIS=TRUE"
Within the syn_props attribute value (which is enclosed in double quotes), separate multiple FastChip
attributes with commas. For example:
• VHDL
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
library synplify;
use synplify.attributes.all;
:
architecture TEST of MyExample is
:
attribute syn_props: string;
attribute syn_props of myPad2: label is "HYSTERESIS=FALSE, BUSMINDER=PULLUP";
begin
:
myPad2: PAD_IN port map( ... );
:
end TEST;
• Verilog
PAD_IN myPad2( ... ) // synthesis syn_props="HYSTERESIS=FALSE, BUSMINDER=PULLUP"
Pad modules instantiated in HDL netlists are likely candidates for specifying FastChip attributes.
Attribute names are not case sensitive. Supported pad attributes include:
Attribute Value
Name <pad_name>
BusMinder NONE, PULLUP, PULLDOWN, FOLLOWER
IsInputLowPower TRUE, FALSE (inputs)
7 TCH405-0002-001
IsClamped TRUE, FALSE (inputs, A7 only)
Hysteresis TRUE, FALSE (inputs)
Drive WEAK, STRONG, PULLDOWN, FOLLOWER (outputs)
SlewRate SLOW, FAST (outputs, A7 only)
IsOutputLowPower TRUE, FALSE (outputs)
6. Pre-defined Constants
When instantiating Triscend primitives, you may save time by using libraries of pre-defined constants
included with FastChip. The files TriscendDefines.v and TriscendDefines.vhd in the directory
[FastChip_Dir]/data/libraries/Synthesis contain useful constants. The VHDL package name is
TRISCEND_DEFINES.
7. Why do I get this message - 860 Error: primitive view:PrimLib.z(prim) not handled yet
When synthesizing a design with Synplify, the last module of the last source file is selected as the top
level module, unless otherwise specified. One way to do this in the Synplify GUI is to click and drag the
top-level source file to move it after the other files (move it vertically on the screen), or make sure that it
is added as the last source file.
For example, if the last file compiled were the instantiation library TriscendVBB.v, you might get the
error below (assuming WAITCTRL is the last module in that file):
$ Start of Compile
#Wed Mar 21 22:28:27 2001
Synplicity Verilog Compiler, version 6.1.3, Build 077R, built Nov 27 2000
Copyright (C) 1994-2000, Synplicity Inc. All Rights Reserved
@I::"c:\my documents\triscend\data\source\top.v"
@I::"c:\my documents\triscend\data\source\TriscendVBB.v"
Verilog syntax check successful!
You should make your top level module the last one compiled. TriscendVBB.v is compiled last, and the
last module in it is being treated as the top level module. If you move TriscendVBB.v ahead of the other
source files, this message should go away (or at least a different message will be observed).
8 TCH405-0002-001
8. FastChip Prints an ERROR for LATCHCS, LATCHC, LATCHS, or DFFCSMACRO in a
Netlist
The Triscend configurable system logic (CSL) does not support latches with asynchronous clear or set
pins, nor does it support a D-type flip-flop with both a clear and a set pin. Synplify assumes these
primitives are available and may infer them in your design:
In "case" statements with "when" statements where signals are not always assigned a value, a latch
may result.
Synplify generates a warning message if unsupported flip-flops or latches are inferred:
@W|Found flip-flop with both clear and set; requires an implementation model for Triscend
place and route.
@W|Found latch with clear and/or set; requires an implementation model for Triscend place
and route.
9 TCH405-0002-001
WARNING: Import Command: ConnectedPinNotInEquation: The pin
'fifo_ctrl_N_216_i.i[3]' of item 'fifo_ctrl_N_216_i' is
connected but is not a parameter of its equation:
'( 2)|( 0)|(~ 1)'.
This message is displayed if an input of a look-up table (LUT) cell is connected, but the input is not
used in the equation that defines the functionality of the LUT. In the example above, input 3 is
connected but not used.
Synplify will connected unused inputs in the synthesized netlist to a net. LUT inputs that are connected
but not used are flagged during import. If you examine the netlist and determine this is the case, the
warning can be safely ignored.
This issue will be addressed in future releases of FastChip (enable the user to control the display of
messages) and Synplify (LUT inputs connected to ground but not specified in a LUT equation are
ignored by FastChip).
10 TCH405-0002-001
Known Bugs
If you experience problems using Synplify to synthesize your design or in importing designs into
FastChip, consult the list of known bugs below.
Synplify’s Technology Viewer shows a clock bubble into the clock on ‘q_falling’ flip-flop, which is the
expected behavior.
However, the EDIF netlist file created by Synplify version 6.3 or earlier does not include the inverted
clock in the resulting netlist. Consequently, the design fails to operate as expected when imported into
FastChip and implemented on a Triscend Configurable System-on-Chip (CSoC) device.
Fortunately, there is a simple work-around using a Synplicity synthesis attribute called ‘syn_keep’. To
use this attribute, add the Synplicity library to the top your VHDL source file.
library synplify;
use synplify.attributes.all;
Then, create a new signal for the inverted clock, called ‘clk_inv’ in this example. Placing a ‘syn_keep’
attribute on this signal prevents the Synplify optimizer from attempting to merge the inverted clock into
the flip-flop.
Finally, instead of clocking the ‘q_falling’ flip-flop on the falling edge of ‘clk’, clock the flip-flop on the
rising edge of the inverted clock ‘clk_inv’.
architecture fixed_example of clk_inversion_example is
11 TCH405-0002-001
-- signal created to explicitly invert 'clk' input
signal clk_inv : std_logic;
-- this special Synplicty attribute prevents 'clk_inv' from
-- being optimized away
attribute syn_keep of clk_inv : signal is true;
begin
-- invert 'clk'
clk_inv <= not(clk);
process(clk, clk_inv)
begin
if (rising_edge(clk)) then
q_rising <= d;
end if;
-- instead of clocking on the falling edge
-- of 'clk', clock on the rising edge of the
-- inverted 'clk' signal
if (rising_edge(clk_inv)) then
q_falling <= d;
end if;
end process;
end fixed_example;
Viewing the synthesized design, note the explicit inverter on the ‘clk’ signal entering the clock input on
the ‘q_falling’ flip-flop. This inverter correctly appears in the EDIF file created by Synplify and works
correctly when the logic is implemented on a Triscend CSoC device.
During Bind, FastChip is smart enough to merge the inverter into the Configurable System Logic (CSL)
flip-flop using the optional clock inversion allowed on each cell, resulting in optimal timing and routing.
12 TCH405-0002-001
Alternatively, the following manual work-arounds may be used.
1. In the EDIF netlist, if the INITV property for inferred ROMs is missing the prefix "#B", for example
(instance U0 (viewRef prim (cellRef ROM32X1 (libraryRef Triscend)))
(property INITV (string "00001000010000000001001111110000"))
)
correct this by inserting "#B" in the binary string using a text editor:
(instance U0 (viewRef prim (cellRef ROM32X1 (libraryRef Triscend)))
(property INITV (string "#B00001000010000000001001111110000"))
)
2. Default values for inferred ROMs which are specified as 'X' are not mapped to a known logic value of
0 or 1. For example, a "default" clause of 'X' in a Verilog "case" statement inferred as a ROM results in
INITV properties in the EDIF netlist with 'X' logic values, for example
(instance U0 (viewRef prim (cellRef ROM32X1 (libraryRef Triscend)))
(property INITV (string "X0001000010000000001001111110000"))
)
To correct this, change the default in your HDL source code for ROMs to logic '0' (or change 'X' to '0' in
the ROM INITV property in the resulting EDIF netlist). Remember to insert "#B" in the binary string
using a text editor to correct the ROM INITV property in the EDIF netlist.
(instance U0 (viewRef prim (cellRef ROM32X1 (libraryRef Triscend)))
(property INITV (string "#B00001000010000000001001111110000"))
)
An example of Verilog code inferred as a ROM is included below:
module myrom(z, a) ;
output [3:0] z;
input [6:0] a;
reg [3:0] z ;
always @(a) begin
case (a[6:0])
7'b0000000: z = 4'ha;
7'b0000010: z = 4'b0011;
7'b0000100: z = 4'b1110;
7'b0000101: z = 4'b0111;
7'b0000110: z = 4'b0101;
7'b0000111: z = 4'b0100;
7'b0001000: z = 4'b0111;
7'b0001001: z = 4'b1101;
7'b0001010: z = 4'b1011;
7'b0001011: z = 4'b1010;
7'b0001100: z = 4'b1100;
7'b0010101: z = 4'b1011;
7'b0010110: z = 4'b1111;
7'b0010111: z = 4'b1001;
7'b0011000: z = 4'b1011;
13 TCH405-0002-001
7'b0011001: z = 4'b1001;
7'b0011010: z = 4'b1011;
7'b0011011: z = 4'b1101;
7'b0011100: z = 4'b1011;
7'b0011101: z = 4'b1011;
7'b0011110: z = 4'b1010;
7'b0011111: z = 4'b1011;
7'b0100000: z = 4'b0010;
7'b0100001: z = 4'b1001;
7'b0100010: z = 4'b0101;
7'b0100011: z = 4'b0100;
7'b1001000: z = 4'b1110;
7'b1001001: z = 4'b0100;
7'b1001010: z = 4'b1001;
7'b1001011: z = 4'b0101;
7'b1001100: z = 4'b0000;
7'b1001101: z = 4'b1001;
7'b1001110: z = 4'b0110;
7'b1001111: z = 4'b1001;
7'b1010000: z = 4'b1011;
7'b1010001: z = 4'b1010;
7'b1010010: z = 4'b1000;
7'b1010011: z = 4'b1010;
7'b1010100: z = 4'b0101;
7'b1010101: z = 4'b1001;
7'b1010110: z = 4'b0100;
7'b1010111: z = 4'b1101;
7'b1011000: z = 4'b1110;
7'b1011001: z = 4'b1101;
7'b1011010: z = 4'b0101;
7'b1011011: z = 4'b0110;
7'b1011100: z = 4'b1011;
default : z = 4’b0000; // default to logic 0
// original default clause which is not handled properly
// default: z = 4'bxxxx;
endcase
end
endmodule
14 TCH405-0002-001
3. Synplify 7.0.2 and below: Index 0 is OUT of Range
When inferring ROMs with Synplify version 7.0.2 and earlier, an "index 0 is out of range" error message
is printed if the word data at address 0 is not defined (Synplify bug #43808).
To work around this problem, explicitly define the word data for ROM address 0. You may also contact
the Triscend Support Center to obtain a patch. The problem is corrected in later versions of Synplify.
®
Triscend Corporation
301 North Whisman Road Mountain View, CA 94043-3969 USA
Tel: 1-650-968-8668 Fax: 1-650-934-9393 Web: www.triscend.com
15 TCH405-0002-001