0% found this document useful (0 votes)
23 views536 pages

Synplify Pro Me j2015.03msp1-2 User Guide

Uploaded by

bbhudream
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views536 pages

Synplify Pro Me j2015.03msp1-2 User Guide

Uploaded by

bbhudream
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 536

Synopsys FPGA Synthesis

Synplify Pro for Microsemi


Edition
User Guide
December 2015
:

Copyright Notice and Proprietary Information


Copyright © 2015 Synopsys, Inc. All rights reserved. This software and
documentation contain confidential and proprietary information that is the
property of Synopsys, Inc. The software and documentation are furnished
under a license agreement and may be used or copied only in accordance
with the terms of the license agreement. No part of the software and
documentation may be reproduced, transmitted, or translated, in any form or
by any means, electronic, mechanical, manual, optical, or otherwise, without
prior written permission of Synopsys, Inc., or as expressly provided by the
license agreement.

Right to Copy Documentation


The license agreement with Synopsys permits licensee to make copies of the
documentation for its internal use only.

Each copy shall include all copyrights, trademarks, service marks, and
proprietary rights notices, if any. Licensee must assign sequential numbers
to all copies. These copies shall contain the following legend on the cover
page:

“This document is duplicated with the permission of Synopsys, Inc., for the
exclusive use of __________________________________________ and its
employees. This is copy number __________.”

Destination Control Statement


All technical data contained in this publication is subject to the export
control laws of the United States of America. Disclosure to nationals of other
countries contrary to United States law is prohibited. It is the reader’s
responsibility to determine the applicable regulations and to comply with
them.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
2 December 2015
:

Disclaimer
SYNOPSYS, INC., AND ITS LICENSORS MAKE NO WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, WITH REGARD TO THIS MATERIAL, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE.

Registered Trademarks (®)


Synopsys, AEON, AMPS, Astro, Behavior Extracting Synthesis Technology,
Cadabra, CATS, Certify, CHIPit, CoMET, CODE V, Design Compiler,
DesignWare, EMBED-IT!, Formality, Galaxy Custom Designer, Global
Synthesis, HAPS, HapsTrak, HDL Analyst, HSIM, HSPICE, Identify, Leda,
LightTools, MAST, METeor, ModelTools, NanoSim, NOVeA, OpenVera, ORA,
PathMill, Physical Compiler, PrimeTime, SCOPE, Simply Better Results, SiVL,
SNUG, SolvNet, Sonic Focus, STAR Memory System, Syndicated, Synplicity,
the Synplicity logo, Synplify, Synplify Pro, Synthesis Constraints Optimization
Environment, TetraMAX, UMRBus, VCS, Vera, and YIELDirector are regis-
tered trademarks of Synopsys, Inc.

Trademarks (™)
AFGen, Apollo, ARC, ASAP, Astro-Rail, Astro-Xtalk, Aurora, AvanWaves,
BEST, Columbia, Columbia-CE, Cosmos, CosmosLE, CosmosScope, CRITIC,
CustomExplorer, CustomSim, DC Expert, DC Professional, DC Ultra, Design
Analyzer, Design Vision, DesignerHDL, DesignPower, DFTMAX, Direct Silicon
Access, Discovery, Eclypse, Encore, EPIC, Galaxy, HANEX, HDL Compiler,
Hercules, Hierarchical Optimization Technology, High-performance ASIC
Prototyping System, HSIMplus, i-Virtual Stepper, IICE, in-Sync, iN-Tandem,
Intelli, Jupiter, Jupiter-DP, JupiterXT, JupiterXT-ASIC, Liberty,
Libra-Passport, Library Compiler, Macro-PLUS, Magellan, Mars, Mars-Rail,
Mars-Xtalk, Milkyway, ModelSource, Module Compiler, MultiPoint, ORAengi-
neering, Physical Analyst, Planet, Planet-PL, Polaris, Power Compiler,
Raphael, RippledMixer, Saturn, Scirocco, Scirocco-i, SiWare, Star-RCXT,
Star-SimXT, StarRC, System Compiler, System Designer, Taurus, Total-
Recall, TSUPREM-4, VCSi, VHDL Compiler, VMC, and Worksheet Buffer are
trademarks of Synopsys, Inc.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 3
:

Service Marks (sm)


MAP-in, SVP Café, and TAP-in are service marks of Synopsys, Inc.

SystemC is a trademark of the Open SystemC Initiative and is used under


license.

ARM and AMBA are registered trademarks of ARM Limited.

Saber is a registered trademark of SabreMark Limited Partnership and is


used under license.

All other product or company names may be trademarks of their respective


owners.

Printed in the U.S.A


December 2015

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
4 December 2015
Contents

Chapter 1: Introduction
Synopsys FPGA and Prototyping Products . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
FPGA Implementation Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Synopsys FPGA Tool Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Scope of the Document . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
The Document Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Audience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Starting the Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
Getting Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
User Interface Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Chapter 2: FPGA Synthesis Design Flows


Logic Synthesis Design Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

Chapter 3: Preparing the Input


Setting Up HDL Source Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Creating HDL Source Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
Using the Context Help Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
Checking HDL Source Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Editing HDL Source Files with the Built-in Text Editor . . . . . . . . . . . . . . . . . . . . 34
Setting Editing Window Preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
Using an External Text Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Using Library Extensions for Verilog Library Files . . . . . . . . . . . . . . . . . . . . . . . 40
Using Mixed Language Source Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Using the Incremental Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Using the Structural Verilog Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Limitations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 5
Contents

Working with Constraint Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52


When to Use Constraint Files over Source Code . . . . . . . . . . . . . . . . . . . . . . . . 52
Tcl Syntax Guidelines for Constraint Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
Checking Constraint Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Using a Text Editor for Constraint Files (Legacy) . . . . . . . . . . . . . . . . . . . . . . . . 54

Chapter 4: Setting up a Logic Synthesis Project


Setting Up Project Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Creating a Project File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Opening an Existing Project File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
Making Changes to a Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Setting Project View Display Preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Updating Verilog Include Paths in Older Project Files . . . . . . . . . . . . . . . . . . . . 65
Managing Project File Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Creating Custom Folders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
Manipulating Custom Project Folders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
Manipulating Custom Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
Setting Up Implementations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
Setting Logic Synthesis Implementation Options . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Setting Device Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Setting Optimization Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Specifying Global Frequency and Constraint Files . . . . . . . . . . . . . . . . . . . . . . 79
Specifying Result Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
Specifying Timing Report Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Setting Verilog and VHDL Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Specifying Attributes and Directives . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Specifying Attributes and Directives in VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Specifying Attributes and Directives in Verilog . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Specifying Attributes Using the SCOPE Editor . . . . . . . . . . . . . . . . . . . . . . . . . 92
Specifying Attributes in the Constraints File . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Searching Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Identifying the Files to Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Filtering the Files to Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
Initiating the Search . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Search Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
Archiving Files and Projects . . .LO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Archive a Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
Un-Archive a Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Copy a Project . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
6 December 2015
Contents

Support for Hierarchical Include Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

Chapter 5: Specifying Constraints


Using the SCOPE Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Creating Constraints in the SCOPE Editor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Creating Constraints With the FDC Template Command . . . . . . . . . . . . . . . . 119
Specifying SCOPE Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Entering and Editing SCOPE Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Setting Clock and Path Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Defining Input and Output Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Specifying Standard I/O Pad Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126
Using the TCL View of SCOPE GUI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Guidelines for Entering and Editing Constraints . . . . . . . . . . . . . . . . . . . . . . . . 129
Specifying Timing Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Defining From/To/Through Points for Timing Exceptions . . . . . . . . . . . . . . . . . 132
Defining Multicycle Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Defining False Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
Finding Objects with Tcl find and expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Specifying Search Patterns for Tcl find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
Refining Tcl Find Results with -filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Using the Tcl Find Command to Define Collections . . . . . . . . . . . . . . . . . . . . . 141
Using the Tcl expand Command to Define Collections . . . . . . . . . . . . . . . . . . 143
Checking Tcl find and expand Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Using Tcl find and expand in Batch Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Using Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Creating and Using SCOPE Collections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Creating Collections using Tcl Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
Viewing and Manipulating Collections with Tcl Commands . . . . . . . . . . . . . . . 153
Converting SDC to FDC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Using the SCOPE Editor (Legacy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Entering and Editing SCOPE Constraints (Legacy) . . . . . . . . . . . . . . . . . . . . . 161
Specifying SCOPE Timing Constraints (Legacy) . . . . . . . . . . . . . . . . . . . . . . . 162
Defining Input and Output Constraints (Legacy) . . . . . . . . . . . . . . . . . . . . . . . 172
Defining False Paths (Legacy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174

Chapter 6: Synthesizing and Analyzing the Results


Synthesizing Your Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Running Logic Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Using Up-to-date Checking for Job Management . . . . . . . . . . . . . . . . . . . . . . 178

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 7
Contents

Checking Log File Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183


Viewing and Working with the Log File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
Accessing Specific Reports Quickly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Accessing Results Remotely . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Analyzing Results Using the Log File Reports . . . . . . . . . . . . . . . . . . . . . . . . . 193
Using the Watch Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
Checking Resource Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Handling Messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Checking Results in the Message Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Filtering Messages in the Message Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Filtering Messages from the Command Line . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Automating Message Filtering with a Tcl Script . . . . . . . . . . . . . . . . . . . . . . . . 202
Log File Message Controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Handling Warnings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Using Continue on Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Using Continue on Error for Compile Point Synthesis . . . . . . . . . . . . . . . . . . . 207

Chapter 7: Analyzing with HDL Analyst and FSM Viewer


Working in the Schematic Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Differentiating Between the HDL Analyst Views . . . . . . . . . . . . . . . . . . . . . . . . 213
Opening the Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Viewing Object Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Selecting Objects in the RTL/Technology Views . . . . . . . . . . . . . . . . . . . . . . . 220
Working with Multisheet Schematics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Moving Between Views in a Schematic Window . . . . . . . . . . . . . . . . . . . . . . . 222
Setting Schematic View Preferences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
Managing Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Exploring Design Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Traversing Design Hierarchy with the Hierarchy Browser . . . . . . . . . . . . . . . . 226
Exploring Object Hierarchy by Pushing/Popping . . . . . . . . . . . . . . . . . . . . . . . 227
Exploring Object Hierarchy of Transparent Instances . . . . . . . . . . . . . . . . . . . 233
Finding Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Browsing to Find Objects in HDL Analyst Views . . . . . . . . . . . . . . . . . . . . . . . 234
Using Find for Hierarchical and Restricted Searches . . . . . . . . . . . . . . . . . . . . 236
Using Wildcards with the Find Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Combining Find with Filtering to Refine Searches . . . . . . . . . . . . . . . . . . . . . . 243
Using Find to Search the Output LO Netlist . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
Crossprobing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247
Crossprobing within an RTL/Technology View . . . . . . . . . . . . . . . . . . . . . . . . . 247
Crossprobing from the RTL/Technology View . . . . . . . . . . . . . . . . . . . . . . . . . 248

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
8 December 2015
Contents

Crossprobing from the Text Editor Window . . . . . . . . . . . . . . . . . . . . . . . . . . . 250


Crossprobing from the Tcl Script Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Crossprobing from the FSM Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
Analyzing With the HDL Analyst Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
Viewing Design Hierarchy and Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
Filtering Schematics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
Expanding Pin and Net Logic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
Expanding and Viewing Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Flattening Schematic Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Minimizing Memory Usage While Analyzing Designs . . . . . . . . . . . . . . . . . . . 271
Using the FSM Viewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272

Chapter 8: Analyzing Timing


Analyzing Timing in Schematic Views . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Viewing Timing Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
Annotating Timing Information in the Schematic Views . . . . . . . . . . . . . . . . . . 279
Analyzing Clock Trees in the RTL View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Viewing Critical Paths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
Handling Negative Slack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Generating Custom Timing Reports with STA . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Using Analysis Design Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
Scenarios for Using Analysis Design Constraints . . . . . . . . . . . . . . . . . . . . . . 289
Creating an ADC File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
Using Object Names Correctly in the adc File . . . . . . . . . . . . . . . . . . . . . . . . . 294
Using Auto Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
Results of Auto Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

Chapter 9: Inferring High-Level Objects


Defining Black Boxes for Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Instantiating Black Boxes and I/Os in Verilog . . . . . . . . . . . . . . . . . . . . . . . . . . 302
Instantiating Black Boxes and I/Os in VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Adding Black Box Timing Constraints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306
Adding Other Black Box Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Defining State Machines for Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Defining State Machines in Verilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Defining State Machines in VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Specifying FSMs with Attributes and Directives . . . . . . . . . . . . . . . . . . . . . . . . 313
Specifying Safe FSMs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 9
Contents

Implementing Safe Case FSMs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316


Error Monitoring Example with FSM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Automatic RAM Inference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Block RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
RAM Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
Inferring Block RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
Initializing RAMs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Initializing RAMs in Verilog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
Initializing RAMs in VHDL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

Chapter 10: Specifying Design-Level Optimizations


Tips for Optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
General Optimization Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Optimizing for Area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
Optimizing for Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Retiming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Controlling Retiming . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
Retiming Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342
Retiming Report . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
How Retiming Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
Preserving Objects from Being Optimized Away . . . . . . . . . . . . . . . . . . . . . . . . . . 347
Using syn_keep for Preservation or Replication . . . . . . . . . . . . . . . . . . . . . . . 348
Controlling Hierarchy Flattening . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Preserving Hierarchy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
Optimizing Fanout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Setting Fanout Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
Controlling Buffering and Replication . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
Sharing Resources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
Inserting I/Os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Optimizing State Machines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Deciding when to Optimize State Machines . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
Running the FSM Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
Running the FSM Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
Inserting Probes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Specifying Probes in the Source LO Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
Adding Probe Attributes Interactively . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
10 December 2015
Contents

Chapter 11: Working with Compile Points


Compile Point Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Advantages of Compile Point Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
Manual Compile Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
Nested Compile Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Compile Point Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
Compile Point Synthesis Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Compile Point Constraint Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Interface Logic Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Interface Timing for Compile Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Compile Point Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
Incremental Compile Point Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
Forward-annotation of Compile Point Timing Constraints . . . . . . . . . . . . . . . . 386
Synthesizing Compile Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
The Manual Compile Point Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Creating a Top-Level Constraints File for Compile Points . . . . . . . . . . . . . . . . 390
Defining Manual Compile Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Setting Constraints at the Compile Point Level . . . . . . . . . . . . . . . . . . . . . . . . 394
Analyzing Compile Point Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
Using Compile Points with Other Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
Combining Compile Points with Multiprocessing . . . . . . . . . . . . . . . . . . . . . . . 399
Resynthesizing Incrementally . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
Resynthesizing Compile Points Incrementally . . . . . . . . . . . . . . . . . . . . . . . . . 400

Chapter 12: Working with IP Input


Generating IP with SYNCore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Specifying FIFOs with SYNCore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
Specifying RAMs with SYNCore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
Specifying Byte-Enable RAMs with SYNCore . . . . . . . . . . . . . . . . . . . . . . . . . 416
Specifying ROMs with SYNCore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
Specifying Adder/Subtractors with SYNCore . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Specifying Counters with SYNCore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
The Synopsys FPGA IP Encryption Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Overview of the Synopsys FPGA IP Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
Encryption and Decryption . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
Working with Encrypted IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Encrypting Your IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
Encrypting IP with the encryptP1735.pl Script . . . . . . . . . . . . . . . . . . . . . . . . . 446

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 11
Contents

Encrypting IP with the encryptIP Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452


Specifying the Script Output Method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
Preparing the IP Package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
Working with Synenc-encrypted IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
Using Hyper Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Using Hyper Source for Prototyping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Using Hyper Source for IP Designs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
Threading Signals Through the Design Hierarchy of an IP . . . . . . . . . . . . . . . 463

Chapter 13: Optimizing Processes for Productivity


Using Batch Mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Running Batch Mode on a Project File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
Running Batch Mode with a Tcl Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
Queuing Licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Working with Tcl Scripts and Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Using Tcl Commands and Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474
Generating a Job Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
Setting Number of Parallel Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475
Creating a Tcl Synthesis Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476
Using Tcl Variables to Try Different Clock Frequencies . . . . . . . . . . . . . . . . . . 478
Using Tcl Variables to Try Several Target Technologies . . . . . . . . . . . . . . . . . 479
Running Bottom-up Synthesis with a Script . . . . . . . . . . . . . . . . . . . . . . . . . . . 480
Automating Flows with synhooks.tcl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481

Chapter 14: Improving Runtime


Multiprocessing With Compile Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Setting Maximum Parallel Jobs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486
Specifying Licenses for Multiprocessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488

Chapter 15: Optimizing for Microsemi Designs


Optimizing Microsemi Designs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Using Predefined Microsemi Black Boxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492
Using Smartgen Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Working with Radhard Designs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493
Specifying syn_radhardlevel in the Source Code . . . . . . . . . . . . . . . . . . . . . . . 494

Chapter 16: Working withLO


Synthesis Output
Passing Information to the P&R Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498
Specifying Pin Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
12 December 2015
Contents

Specifying Locations for Microsemi Bus Ports . . . . . . . . . . . . . . . . . . . . . . . . . 499


Specifying Macro and Register Placement . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
Generating Vendor-Specific Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Targeting Output to Your Vendor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500
Customizing Netlist Formats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500

Chapter 17: Running Post-Synthesis Operations


Running P&R Automatically after Synthesis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502
Integrating Synthesis and Place-and-Route in One Run . . . . . . . . . . . . . . . . . 502
Releasing the Synthesis License During Place and Route . . . . . . . . . . . . . . . 502
Working with the Identify Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Launching from the Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504
Handling Problems with Launching Identify . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
Using the Identify Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
Using Compile Points with the Identify Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
Simulating with the VCS Tool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 13
Contents

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
14 December 2015
CHAPTER 1

Introduction

This introduction to the Synopsys® Synplify Pro® tool describes the following:
• Synopsys FPGA and Prototyping Products, on page 16
• Scope of the Document, on page 21
• Getting Started, on page 22
• User Interface Overview, on page 24

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 15
Chapter 1: Introduction Synopsys FPGA and Prototyping Products

Synopsys FPGA and Prototyping Products


The following figure displays the Synopsys FPGA and Prototyping family of
products.

FPGA Implementation Tools


The Synplify Pro and Synplify Premier products are RTL synthesis tools
especially designed for FPGAs (field programmable gate arrays) and CPLDs
(complex programmable logic devices).

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
16 December 2015
Synopsys FPGA and Prototyping Products Chapter 1: Introduction

Synplify Pro Synthesis Software


The Synplify Pro FPGA synthesis software is the de facto industry standard
for producing high-performance, cost-effective FPGA designs. Its unique
Behavior Extracting Synthesis Technology® (B.E.S.T.) algorithms, perform
high-level optimizations before synthesizing the RTL code into specific FPGA
logic. This approach allows for superior optimizations across the FPGA, fast
runtimes, and the ability to handle very large designs. The Synplify Pro
software supports the latest VHDL and Verilog language constructs,
including SystemVerilog and VHDL 2008. The tool is technology independent
allowing quick and easy retargeting between FPGA devices and vendors from
a single design project.

Synplify Premier Synthesis Software


The Synplify Premier functionality is a superset of the Synplify Pro tool,
providing the ultimate FPGA implementation and debug environment. It
includes a comprehensive suite of tools and technologies for advanced FPGA
designers, and also serves as the synthesis engine for ASIC prototypers
targeting single FPGA-based prototypes.

The Synplify Premier product offers both FPGA designers and ASIC proto-
typers targeting single FPGAs with the most efficient method of design imple-
mentation and debug. On the design implementation side, it includes
functionality for timing closure, logic verification, IP usage, ASIC compati-
bility, and DSP implementation, as well as a tight integration with FPGA
vendor back-end tools. On the debug side, it provides for in-system verifi-
cation of FPGAs which dramatically accelerates the debug process, and also
includes a rapid and incremental method for finding elusive design problems.

Synopsys FPGA Tool Features


This table distinguishes between major functionality in the Synplify Pro,
Synplify, Synplify Premier, and Synplify Premier with Design Planner
products.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 17
Chapter 1: Introduction Synopsys FPGA and Prototyping Products

Synplify Synplify Synplify Synplify


Pro Premier Premier DP
Performance
Behavior Extracting Synthesis x x x x
Technology® (BEST™)
Vendor-Generated Core/IP x x x
Support (certain technologies)
FSM Compiler x x x x
FSM Explorer x x x
Gated Clock Conversion x x x
Register Pipelining x x x
Register Retiming x x x
SCOPE® Constraint Entry x x x x
High Reliability Features x x x
Integrated Place-and-Route x x x x
Analysis
HDL Analyst® Option x x x
Timing Analyzer – x x x
Point-to-point
Timing Report View x x
FSM Viewer x x x
Crossprobing x x x
Probe Point Creation x x x
Identify® Instrumentor x x x
Identify Debugger x x
Power analysis (SAIF) x x
Physical Design LO
Design Plan File x

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
18 December 2015
Synopsys FPGA and Prototyping Products Chapter 1: Introduction

Synplify Synplify Synplify Synplify


Pro Premier Premier DP
Logic Assignment to Regions x
Area Estimation and Region x
Capacity
Pin Assignment x
Physical Optimizations x
Physical Analyst x x
Synopsys DesignWare® x x
Foundation Library
Runtime
Hierarchical Design x x x
Advanced Synthesis x x
Fast Synthesis x x
Multiprocessing x x
Compile on Error x x
Team Design
Mixed Language Design x x x
Compile Points x x x
Hierarchical Design x x x
True Batch Mode (Floating x x x
licenses only)
GUI Batch Mode (Floating x x x x
licenses)
Batch Mode P&R - x x x
Back-annotation of P&R Data - - x x
Formal Verification x Logic Logic synthesis
synthesis mode
mode
Identify Integration Limited x x x

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 19
Chapter 1: Introduction Synopsys FPGA and Prototyping Products

Synplify Synplify Synplify Synplify


Pro Premier Premier DP
Design Environment
Text Editor View x x x x
Watch Window x x x
Message Window x x x
Tcl Window x x x
Multiple Implementations x x x
Vendor Technology Support x x Selected Selected
Prototyping Features
Runtime Features x x
Compile Points x x x
Gated Clock Conversion x x
Compile on Error x x

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
20 December 2015
Scope of the Document Chapter 1: Introduction

Scope of the Document


The following explain the scope of this document and the intended audience.

The Document Set


This user guide is part of a document set that includes reference manuals. It
is intended for use with the other documents in the set. It concentrates on
describing how to use the Synopsys FPGA software to accomplish typical
tasks. This implies the following:
• The user guide only explains the options needed to do the typical tasks
described in the manual. It does not describe every available command
and option. For complete descriptions of all the command options and
syntax, refer to the Tcl Commands chapter in the Synopsys FPGA
Synthesis Command Reference Manual.
• The user guide contains task-based information. For a breakdown of
how information is organized, see Getting Help, on page 23.

Audience
The Synplify Pro software tool is targeted towards the FPGA system developer.
It is assumed that you are knowledgeable about the following:
• Design synthesis
• RTL
• FPGAs
• Verilog/VHDL

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 21
Chapter 1: Introduction Getting Started

Getting Started
This section shows you how to get started with the Synopsys FPGA synthesis
software. It describes the following topics, but does not supersede the infor-
mation in the installation instructions about licensing and installation:
• Starting the Software, on page 22
• Getting Help, on page 23

Starting the Software


1. If you have not already done so, install the Synopsys FPGA synthesis
software according to the installation instructions.

2. Start the software.


– If you are working on a Windows platform, select
Programs->Synopsys->product version from the Start button.
– If you are working on a UNIX platform, type the appropriate
command at the command line:

synplify_pro
The command starts the synthesis tool, and opens the Project window. If
you have run the software before, the window displays the previous
project. For more information about the interface, see the User Interface
Overview chapter of the Reference Manual.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
22 December 2015
Getting Started Chapter 1: Introduction

Getting Help
Before you call Synopsys Support, look through the documented information.
You can access the information online from the Help menu, or refer to the PDF
version. The following table shows you how the information is organized.

For help with... Refer to the...


Using software features Synopsys FPGA Synthesis User Guide
How to... Synopsys FPGA Synthesis User Guide,
application notes on the support web site
Flow information Synopsys FPGA Synthesis User Guide,
application notes on the support web site
Error messages Online help (select Help->Error Messages)
Licensing Synopsys SolvNet Website
Attributes and directives Synopsys FPGA Synthesis Attribute Reference
Manual
Synthesis features Synopsys FPGA Synthesis Reference Manual
Language and syntax Synopsys FPGA Synthesis Reference Manual
Tcl syntax Online help (select Help->Tcl Help)
Tcl synthesis commands Synopsys FPGA Synthesis Command
Reference Manual
Product updates Synopsys FPGA Synthesis Reference Manual
(Web menu commands)

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 23
Chapter 1: Introduction User Interface Overview

User Interface Overview


The user interface (UI) consists of a main window, called the Project view, and
specialized windows or views for different tasks. For details about each of the
features, see Chapter 2, User Interface Overview of the Synopsys FPGA
Synthesis Reference Manual.

Synplify Pro Interface


Button Panel Toolbars Project view Status Implementation Results view

Tcl Script/Messages Window Watch Window


Tabs to access
views

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
24 December 2015
CHAPTER 2

FPGA Synthesis Design Flows

This describes the Logic Synthesis Design Flow, on page 26.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 25
Chapter 2: FPGA Synthesis Design Flows Logic Synthesis Design Flow

Logic Synthesis Design Flow


The Synopsys FPGA tools synthesize logic by first compiling the RTL source
into technology-independent logic structures, and then optimizing and
mapping the logic to technology-specific resources. After logic synthesis, the
tool generates a vendor-specific netlist and constraint file that you can use as
inputs to the place-and-route (P&R) tool.

The following figure shows the phases and the tools used for logic synthesis
and some of the major inputs and outputs. The interactive timing analysis is
optional. Although the flow shows the vendor constraint files as direct inputs
to the P&R tool, you should add these files to the synthesis project for timing
black boxes.

Synopsys FPGA Tool

RTL RTL Compilation

FDC Logic Synthesis

Synthesized netlist
Synthesis constraints
Vendor constraints
Vendor Tool

Place & Route

Logic Synthesis Procedure


The following steps summarize the procedure for synthesizing the design,
which is also illustrated in the figure that follows.

1. Create a project.

2. Add the source files to the


LO project.

3. Set attributes and constraints for the design.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
26 December 2015
Logic Synthesis Design Flow Chapter 2: FPGA Synthesis Design Flows

4. Set options for the implementation in the Implementation Options dialog


box.

5. Click Run to run logic synthesis.

6. Analyze the results, using tools like the log file, the HDL Analyst
schematic views, the Message window and the Watch Window.

After you have completed the design, you can use the output files to run
place-and-route with the vendor tool and implement the FPGA.

The following figure lists the main steps in the flow:

Create Project

Add Source Files

Set Constraints

Set Options

Run the Software

Analyze Results
No

Goals Met?
Yes

Place and Route

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 27
Chapter 2: FPGA Synthesis Design Flows Logic Synthesis Design Flow

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
28 December 2015
CHAPTER 3

Preparing the Input

When you synthesize a design, you need to set up two kinds of files: HDL files
that describe your design, and project files to manage the design. This
chapter describes the procedures to set up these files and the project. It
covers the following:
• Setting Up HDL Source Files, on page 30
• Using Mixed Language Source Files, on page 43
• Using the Incremental Compiler, on page 48
• Using the Structural Verilog Flow, on page 50
• Working with Constraint Files, on page 52

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 29
Chapter 3: Preparing the Input Setting Up HDL Source Files

Setting Up HDL Source Files


This section describes how to set up your source files; project file setup is
described in Setting Up Project Files, on page 58. Source files can be in
Verilog or VHDL. For information about structuring the files for synthesis,
refer to the Reference Manual. This section discusses the following topics:
• Creating HDL Source Files, on page 30
• Using the Context Help Editor, on page 32
• Checking HDL Source Files, on page 33
• Editing HDL Source Files with the Built-in Text Editor, on page 34
• Setting Editing Window Preferences, on page 37
• Using an External Text Editor, on page 39
• Using Library Extensions for Verilog Library Files, on page 40

Creating HDL Source Files


This section describes how to use the built-in text editor to create source
files, but does not go into details of what the files contain. For details of what
you can and cannot include, as well as vendor-specific information, see the
Reference Manual. If you already have source files, you can use the text editor
to check the syntax or edit the file (see Checking HDL Source Files, on
page 33 and Editing HDL Source Files with the Built-in Text Editor, on
page 34).

You can use Verilog or VHDL for your source files. The files have v (Verilog) or
vhd (VHDL) file extensions, respectively. You can use Verilog and VHDL files
in the same design. For information about using a mixture of Verilog and
VHDL input files, see Using Mixed Language Source Files, on page 43.

1. To create a new source file either click the HDL file icon ( ) or do the
following:
– Select File->New or press Ctrl-n.
– In the New dialog box, select the kind of source file you want to create,
LOthat you can use the Context Help Editor for
Verilog or VHDL. Note
designs that contain Verilog, SystemVerilog, or VHDL constructs in

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
30 December 2015
Setting Up HDL Source Files Chapter 3: Preparing the Input

the source file. For more information, see Using the Context Help
Editor, on page 32.
If you are using Verilog 2001 format or SystemVerilog, make sure to
enable the Verilog 2001 or System Verilog option before you run synthesis
(Project->Implementation Options->Verilog tab). The default Verilog file
format for new projects is SystemVerilog.

– Type a name and location for the file and Click OK. A blank editing
window opens with line numbers on the left.

2. Type the source information in the window, or cut and paste it. See
Editing HDL Source Files with the Built-in Text Editor, on page 34 for
more information on working in the Editing window.

For the best synthesis results, check the Reference and Attributes Refer-
ence manuals and ensure that you are using the available constructs
and vendor-specific attributes and directives effectively.

3. Save the file by selecting File->Save or the Save icon ( ).

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 31
Chapter 3: Preparing the Input Setting Up HDL Source Files

Once you have created a source file, you can check that you have the right
syntax, as described in Checking HDL Source Files, on page 33.

Using the Context Help Editor


When you create or open a design file, use the Context Help button displayed at
the bottom of the window to help you code with Verilog/SystemVerilog/VHDL
constructs in the source file or Tcl constraint commands into your Tcl file.

To use the Context Help Editor:

1. Click on the Context Help button to display this text editor.

2. When you select a construct


LO in the left-side of the window, the online
help description for the construct is displayed. If the selected construct
has this feature enabled, the online help topic is displayed on the top of

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
32 December 2015
Setting Up HDL Source Files Chapter 3: Preparing the Input

the window and a generic code or command template for that construct
is displayed at the bottom.

3. The Insert Template button is also enabled. When you click the Insert
Template button, the code or command shown in the template window is
inserted into your file at the location of the cursor. This allows you to
easily insert the code or command and modify it for the design that you
are going to synthesize.

4. If you want to copy only parts of the template, select the code or
command you want to insert and click Copy. You can then paste it into
your file.

Checking HDL Source Files


The software automatically checks your HDL source files when it compiles
them, but if you want to check your source code before synthesis, use the
following procedure. There are two kinds of checks you do in the synthesis
software: syntax and synthesis.

1. Select the source files you want to check.


– To check all the source files in a project, deselect all files in the
project list, and make sure that none of the files are open in an active
window. If you have an active source file, the software only checks the
active file.
– To check a single file, open the file with File->Open or double-click the
file in the Project window. If you have more than one file open and
want to check only one of them, put your cursor in the appropriate
file window to make sure that it is the active window.

2. To check the syntax, select Run->Syntax Check or press Shift+F7.

The software detects syntax errors such as incorrect keywords and


punctuation and reports any errors in a separate log file (syntax.log). If
no errors are detected, a successful syntax check is reported at the
bottom of this file.

3. To run a synthesis check, select Run->Synthesis Check or press Shift+F8.


The software detects hardware-related errors such as incorrectly coded
flip-flops and reports any errors in a separate log file (syntax.log). If there
are no errors, a successful syntax check is reported at the bottom of this
file.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 33
Chapter 3: Preparing the Input Setting Up HDL Source Files

4. Review the errors by opening the syntax.log file when prompted and use
Find to locate the error message (search for @E). Double-click on the 5-
character error code or click on the message text and push F1 to display
online error message help.

5. Locate the portion of code responsible for the error by double-clicking on


the message text in the syntax.log file. The Text Editor window opens the
appropriate source file and highlights the code that caused the error.

6. Repeat steps 4 and 5 until all syntax and synthesis errors are corrected.

Messages can be categorized as errors, warnings, or notes. Review all


messages and resolve any errors. Warnings are less serious than errors, but
you must read through and understand them even if you do not resolve all of
them. Notes are informative and do not need to be resolved.

Editing HDL Source Files with the Built-in Text Editor


The built-in text editor makes it easy to create your HDL source code, view it,
or edit it when you need to fix errors. If you want to use an external text
editor, see Using an External Text Editor, on page 39.

1. Do one of the following to open a source file for viewing or editing:


– To automatically open the first file in the list with errors, press F5.
– To open a specific file, double-click the file in the Project window or
use File->Open (Ctrl-o) and specify the source file.

The Text Editor window opens and displays the source file. Lines are
numbered. Keywords are in blue, and comments in green. String values
are in red. If you want to change these colors, see Setting Editing
Window Preferences, on page 37.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
34 December 2015
Setting Up HDL Source Files Chapter 3: Preparing the Input

2. To edit a file, type directly in the window.

This table summarizes common editing operations you might use. You
can also use the keyboard shortcuts instead of the commands.

To ... Do ...
Cut, copy, and paste; Select the command from the popup (hold down
undo, or redo an action the right mouse button) or Edit menu.
Go to a specific line Press Ctrl-g or select Edit->Go To, type the line
number, and click OK.
Find text Press Ctrl-f or select Edit ->Find. Type the text you
want to find, and click OK.
Replace text Press Ctrl-h or select Edit->Replace. Type the text you
want to find, and the text you want to replace it
with. Click OK.
Complete a keyword Type enough characters to uniquely identify the
keyword, and press Esc.
Indent text to the right Select the block, and press Tab.
Indent text to the left Select the block, and press Shift-Tab.
Change to upper case Select the text, and then select Edit->Advanced
->Uppercase or press Ctrl-Shift-u.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 35
Chapter 3: Preparing the Input Setting Up HDL Source Files

To ... Do ...
Change to lower case Select the text, and then select Edit->Advanced
->Lowercase or press Ctrl-u.

Add block comments Put the cursor at the beginning of the comment
text, and select Edit->Advanced->Comment Code or
press Alt-c.
Edit columns Press Alt, and use the left mouse button to select
the column. On some platforms, you have to use
the key to which the Alt functionality is mapped,
like the Meta or diamond key.

3. To cut and paste a section of a PDF document, select the T-shaped Text
Select icon, highlight the text you need and copy and paste it into your
file. The Text Select icon lets you select parts of the document.

4. To create and work with bookmarks in your file, see the following table.

Bookmarks are a convenient way to navigate long files or to jump to


points in the code that you refer to often. You can use the icons in the
Edit toolbar for these operations. If you cannot see the Edit toolbar on the
far right of your window, resize some of the other toolbars.

To ... Do ...
Insert a Click anywhere in the line you want to bookmark.
bookmark Select Edit->Toggle Bookmarks, press Ctrl-F2, or select the
first icon in the Edit toolbar.
The line number is highlighted to indicate that there is a
bookmark at the beginning of that line.
Delete a Click anywhere in the line with the bookmark.
bookmark Select Edit->Toggle Bookmarks, press Ctrl-F2, or select the
first icon in the Edit toolbar.
The line number is no longer highlighted after the
bookmark is deleted.
Delete all Select Edit->Delete all Bookmarks, press Ctrl-Shift-F2, or select
bookmarks the last icon in the Edit toolbar.
The line numbers are no longer highlighted after the
LO are deleted.
bookmarks

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
36 December 2015
Setting Up HDL Source Files Chapter 3: Preparing the Input

To ... Do ...
Navigate a file Use the Next Bookmark (F2) and Previous Bookmark (Shift-F2)
using commands from the Edit menu or the corresponding icons
bookmarks from the Edit toolbar to navigate to the bookmark
you want.

5. To fix errors or review warnings in the source code, do the following:


– Open the HDL file with the error or warning by double-clicking the file
in the project list.
– Press F5 to go to the first error, warning, or note in the file. At the
bottom of the Editing window, you see the message text.
– To go to the next error, warning, or note, select Run->Next Error/Warning
or press F5. If there are no more messages in the file, you see the
message “No More Errors/Warnings/Notes” at the bottom of the
Editing window. Select Run->Next Error/Warning or press F5 to go to the
the error, warning, or note in the next file.
– To navigate back to a previous error, warning, or note, select
Run->Previous Error/Warning or press Shift-F5.

6. To bring up error message help for a full description of the error,


warning, or note:
– Open the text-format log file (click View Log) and either double click on
the 5-character error code or click on the message text and press F1.
– Open the HTML log file and click on the 5-character error code.
– In the Tcl window, click the Messages tab and click on the 5-character
error code in the ID column.

7. To cross probe from the source code window to other views, open the
view and select the piece of code. See Crossprobing from the Text Editor
Window, on page 250 for details.

8. When you have fixed all the errors, select File->Save or click the Save icon
to save the file.

Setting Editing Window Preferences


You can customize the fonts and colors used in a Text Editing window.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 37
Chapter 3: Preparing the Input Setting Up HDL Source Files

1. Select Options->Editor Options and either Synopsys Editor or External Editor. For
more information about the external editor, see Using an External Text
Editor, on page 39.

2. Then depending on the type of file you open, you can to set the
background, syntax coloring, and font preferences to use with the text
editor.

Note: Thereafter, text editing preferences you set for this file will apply
to all files of this file type.

The Text Editing window can be used to set preferences for project files,
source files (Verilog/VHDL), log files, Tcl files, constraint files, or other
default files from the Editor Options dialog box.

3. You can set syntax colors for some common syntax options, such as
keywords, strings, and comments. For example in the log file, warnings
and errors can be color-coded for easy recognition.

Click in the Foreground or Background field for the corresponding object in


the Syntax Coloring field to display the color palette.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
38 December 2015
Setting Up HDL Source Files Chapter 3: Preparing the Input

You can select basic colors or define custom colors and add them to
your custom color palette. To select your desired color click OK.

4. To set font and font size for the text editor, use the pull-down menus.

5. Check Keep Tabs to enable tab settings, then set the tab spacing using
the up or down arrow for Tab Size.

6. Click OK on the Editor Options form.

Using an External Text Editor


You can use an external text editor like vi or emacs instead of the built-in text
editor. Do the following to enable an external text editor. For information
about using the built-in text editor, see Editing HDL Source Files with the
Built-in Text Editor, on page 34.

1. Select Options->Editor Options and turn on the External Editor option.

2. Select the external editor, using the method appropriate to your


operating system.
– If you are working on a Windows platform, click the ... (Browse)
button and select the external text editor executable.
– From a UNIX or Linux platform for a text editor that creates its own
window, click the ... Browse button and select the external text editor
executable.
– From a UNIX platform for a text editor that does not create its own
window, do not use the ... Browse button. Instead type xterm -e editor.
The following figure shows VI specified as the external editor.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 39
Chapter 3: Preparing the Input Setting Up HDL Source Files

– From a Linux platform, for a text editor that does not create its own
window, do not use the ... Browse button. Instead, type gnome-terminal
-x editor. To use emacs for example, type gnome-terminal -x emacs.

The software has been tested with the emacs and vi text editors.

3. Click OK.

Using Library Extensions for Verilog Library Files


Library extensions can be added to Verilog library files included in your
design for the project. When you provide search paths to the directories that
contain the Verilog library files, you can specify these new library extensions
as well as the Verilog and SystemVerilog (.v and .sv) file extensions.

To do this: LO

1. Select the Verilog tab of the Implementation Options panel.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
40 December 2015
Setting Up HDL Source Files Chapter 3: Preparing the Input

2. Specify the locations of the Library Directories for the Verilog library files to
be included in your design for the project.

3. Specify the Library Extensions.

Any library extensions can be specified, such as .av, .bv, .cv, .xxx, .va,
.vas (separate library extensions with a space).

The following figure shows you where to enter the library extensions on
the dialog box.

The Tcl equivalent for this example is the following command:

set_option -libext .av .bv .cv .dv .ev


For details, see libext, on page 60 in the Command Reference.

4. After you compile the design, you can verify in the log file that the library
files with these extensions were loaded and read. For example:

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 41
Chapter 3: Preparing the Input Setting Up HDL Source Files

@N: Running Verilog Compiler in SystemVerilog mode


@I::”C:\dir\top.v"
@N: CG1180 :"C:\dir\top.v":8:0:8:3|Loading file
C:\dir\lib1\sub1.av from specified library directory
C:\dir\lib1
@I::"C:\dir\lib1\sub1.av"
@N: CG1180 :"C:\dir\top.v":10:0:10:3|Loading file
C:\dir\lib2\sub2.bv from specified library directory
C:\dir\lib2
@I::"C:\dir\lib2\sub2.bv"
@N: CG1180 :"C:\dir\top.v":12:0:12:3|Loading file
C:\dir\lib3\sub3.cv from specified library directory
C:\dir\lib3
@I::"C:\dir\lib3\sub3.cv"
@N: CG1180 :"C:\dir\top.v":14:0:14:3|Loading file
C:\dir\lib4\sub4.dv from specified library directory
C:\dir\lib4
@I::"C:\dir\lib4\sub4.dv"
@N: CG1180 :"C:\dir\top.v":16:0:16:3|Loading file
C:\dir\lib5\sub5.ev from specified library directory
C:\dir\lib5
@I::"C:\dir\lib5\sub5.ev"
Verilog syntax check successful!

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
42 December 2015
Using Mixed Language Source Files Chapter 3: Preparing the Input

Using Mixed Language Source Files


With the synthesis software, you can use a mixture of VHDL and Verilog
input files in your project. For examples of the VHDL and Verilog files, see the
Reference Manual. You cannot use Verilog and VHDL files together in the
same design with the Synplify tool.

1. Remember that Verilog does not support unconstrained VHDL ports and
set up the mixed language design files accordingly.

2. If you want to organize the Verilog and VHDL files in different folders,
select Options->Project View Options and toggle on the View Project Files in
Folders option.

When you add the files to the project, the Verilog and VHDL files are in
separate folders in the Project view.

3. When you open a project or create a new one, add the Verilog and VHDL
files as follows:
– Select the Project->Add Source File command or click the Add File button.
– On the form, set Files of Type to HDL Files (*.vhd, *.vhdl, *.v).
– Select the Verilog and VHDL files you want and add them to your
project. Click OK. For details about adding files to a project, see
Making Changes to a Project, on page 62.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 43
Chapter 3: Preparing the Input Using Mixed Language Source Files

The files you added are displayed in the Project view. This figure shows
the files arranged in separate folders.

4. When you set device options (Implementation Options button), specify the
top-level module. For more information about setting device options, see
Setting Logic Synthesis Implementation Options, on page 74.
– If the top-level module is Verilog, click the Verilog tab and type the
name of the top-level module.
– If the top-level module is VHDL, click the VHDL tab and type the name
of the top-level entity. If the top-level module is not located in the
default work library, you must specify the library where the compiler
can find the module. For information on how to do this, see VHDL
Panel, on page 204.
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
44 December 2015
Using Mixed Language Source Files Chapter 3: Preparing the Input

You must explicitly specify the top-level module, because it is the


starting point from which the mapper generates a merged netlist.

5. Select the Implementation Results tab on the same form and select one
output HDL format for the output files generated by the software. For
more information about setting device options, see Setting Logic
Synthesis Implementation Options, on page 74.
– For a Verilog output netlist, select Write Verilog Netlist.
– For a VHDL output netlist, select Write VHDL Netlist.
– Set any other device options and click OK.
You can now synthesize your design. The software reads in the mixed
formats of the source files and generates a single srs file that is used for
synthesis.

6. If you run into problems, see Troubleshooting Mixed Language Designs,


on page 46 for additional information and tips.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 45
Chapter 3: Preparing the Input Using Mixed Language Source Files

Troubleshooting Mixed Language Designs


This section provides tips on handling specific situations that might come up
with mixed language designs.

VHDL File Order


For VHDL-only designs or mixed designs where the top level is not specified,
the FPGA synthesis tools automatically re-arrange the VHDL files so that the
VHDL packages are compiled in the correct order.

However, if you have a mixed-language design where you have specified the
top level, you must specify the VHDL file order for the tool. You only need to
do this once, by selecting the Run->Arrange VHDL files command. If you do not
do this, you get an error message

VHDL Global Signals


Currently, you cannot have VHDL global signals in mixed language designs,
because the tool only implements these signals in VHDL-only designs.

Passing VHDL Boolean Generics to Verilog Parameters


The tool infers a black box for a VHDL component with Boolean generics, if
that component is instantiated in a Verilog design. This is because Verilog
does not recognize Boolean data types, so the Boolean value must be repre-
sented correctly. If the value of the VHDL Boolean generic is TRUE and the
Verilog literal is represented by a 1, the Verilog compiler interprets this as a
black box.

To avoid inferring a black box, the Verilog literal for the VHDL Boolean
generic set to TRUE must be 1’b1, not 1. Similarly, if the VHDL Boolean generic
is FALSE, the corresponding Verilog literal must be 1’b0, not 0. The following
example shows how to represent Boolean generics so that they correctly pass
the VHDL-Verilog boundary, without inferring a black box.

VHDL Entity Declaration Verilog Instantiation


Entity abc is abc #(
Generic .Number_Bits (16),
( LO .Divide_Bit (1'b0)
Number_Bits : integer := 0; )
Divide_Bit : boolean := False;
);

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
46 December 2015
Using Mixed Language Source Files Chapter 3: Preparing the Input

Passing VHDL Generics Without Inferring a Black Box


In the case where a Verilog component parameter, (for example [0:0] RSR =
1'b0) does not match the size of the corresponding VHDL component generic
(RSR : integer := 0), the tool infers a black box.

You can work around this by removing the bus width notation of [0:0] in the
Verilog files. You must use a VHDL generic of type integer because the other
types do not allow for the proper binding of the Verilog component.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 47
Chapter 3: Preparing the Input Using the Incremental Compiler

Using the Incremental Compiler


Use the Incremental Compiler flow to significantly reduce compiler runtime
for large designs. The software recompiles only relevant files when a design
change is made and reuses the compiler database. The compiler regenerates
the SRS file only for the affected module and immediate parent module.

To run this flow, perform the following:

1. Add the Verilog or VHDL files for the design.

2. Enable the Incremental Compile option from the Verilog or VHDL tab of the
Implementation Options panel.

An SRS file is created for each design module in the synwork directory.

3. Run the compiler for the first time.

4. If a design change was made, rerun the compiler.

The compiler analyzes the database and determines whether the SRS
files are up-to-date, then only modules that have changed and the
immediate parent modules are regenerated. This can help improve the
LO
runtime for the design, compared with recompiling the database for the
entire design.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
48 December 2015
Using the Incremental Compiler Chapter 3: Preparing the Input

Limitations
The incremental compiler does not support:
• Configuration files included in either the Verilog or VHDL flow
• Mixed HDL flows
• Designs with cross module referencing (XMR)

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 49
Chapter 3: Preparing the Input Using the Structural Verilog Flow

Using the Structural Verilog Flow


The synthesis tool accepts structural Verilog files as input for your design
project. The structural Verilog compiler performs syntax semantic checks
using its light-weight parser to improve runtime. This compiler does not
perform complex hardware extractions or RTL optimization operations,
therefore, the software runs fast compilation of the structural Verilog files.
The software can read these generated structural Verilog files, if they contain:
• Instantiations of technology primitives
• Simple assign statements
• Attributes specified in Verilog 2001 and older formats
• All constructs, except attributes must be specified in Verilog 95 format
To use structural Verilog input files:

1. You must specify the structural Verilog files to include in your design.
To do this, add the file to the project using one of the following methods:
– Project->Add Source File or the Add File button in the Project view
– Tcl command: add_file -structver fileName
This flow can contain only structural Verilog files or mixed HDL files
(Verilog/VHDL/EDF/SRS) along with structural Verilog netlist files.
However, Verilog/VHDL/EDF/SRS instances are not supported within a
structural Verilog module.

2. The structural Verilog files are added to the Structural Verilog folder in the
Project view. You can also add files to this directory, when you perform
the following:
– Select the structural Verilog file.
– Right-click and select File Options.
– Choose Structural Verilog from the File Type drop-down menu.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
50 December 2015
Using the Structural Verilog Flow Chapter 3: Preparing the Input

3. Run synthesis.

The synthesis tool generates a vm or edf netlist file depending on the


technology specified. This process is similar to the default synthesis
flow.

Limitations
The structural Verilog flow does not support the following:
• RTL instances for any other file types
• Hierarchical project management (HPM) flows
• Complex assignments
• Compiler-specific modes and switches

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 51
Chapter 3: Preparing the Input Working with Constraint Files

Working with Constraint Files


Constraint files are text files that are automatically generated by the SCOPE
interface (see Specifying SCOPE Constraints, on page 121), or which you
create manually with a text editor. They contain Tcl commands or attributes
that constrain the synthesis run. Alternatively, you can set constraints in the
source code, but this is not the preferred method.

This section contains information about


• When to Use Constraint Files over Source Code, on page 52
• Tcl Syntax Guidelines for Constraint Files, on page 52
• Checking Constraint Files, on page 54
• Using a Text Editor for Constraint Files (Legacy), on page 54

When to Use Constraint Files over Source Code


You can add constraints in constraint files (generated by SCOPE interface or
entered in a text editor) or in the source code. In general, it is better to use
constraint files, because you do not have to recompile for the constraints to
take effect. It also makes your source code more portable. See Using the
SCOPE Editor, on page 114 for more information.

However, if you have black box timing constraints like syn_tco, syn_tpd, and
syn_tsu, you must enter them as directives in the source code. Unlike attri-
butes, directives can only be added to the source code, not to constraint files.
See Specifying Attributes and Directives, on page 89 for more information on
adding directives to source code.

Tcl Syntax Guidelines for Constraint Files


This section covers general guidelines for using Tcl for constraint files:
• Tcl is case-sensitive.
• For naming objects:
– The object name mustLOmatch the name in the HDL code.
– Enclose instance and port names within curly braces { }.
– Do not use spaces in names.
© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
52 December 2015
Working with Constraint Files Chapter 3: Preparing the Input

– Use the dot (.) to separate hierarchical names.


– In Verilog modules, use the following syntax for instance, port, and
net names:

v:cell [prefix:]objectName
Where cell is the name of the design entity, prefix is a prefix to identify
objects with the same name, objectName is an instance path with the
dot (.) separator. The prefix can be any of the following:

Prefix (Lower-case) Object


i: Instance names

p: Port names (entire port)

b: Bit slice of a port

n: Net names

– In VHDL modules, use the following syntax for instance, port, and net
names in VHDL modules:

v:cell [.view] [prefix:]objectName


Where v: identifies it as a view object, lib is the name of the library,
cell is the name of the design entity, view is a name for the
architecture, prefix is a prefix to identify objects with the same name,
and objectName is an instance path with the dot (.) separator. View is
only needed if there is more than one architecture for the design. See
the table above for the prefixes of objects.
• Name matching wildcards are * (asterisk matches any number of
characters) and ? (question mark matches a single character). These
characters do not match dots used as hierarchy separators. For
example, the following string identifies all bits of the statereg instance in
the statemod module:

i:statemod.statereg[*]

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 53
Chapter 3: Preparing the Input Working with Constraint Files

Checking Constraint Files


You can check syntax and other pertinent information on your constraint
files using the Constraint Check command. To generate a constraint report, do
the following:

1. Create a constraint file and add it to your project.

2. Select Run->Constraint Check.

This command generates a report that checks the syntax and applica-
bility of the timing constraints in the FPGA synthesis constraint files for
your project. The report is written to the projectName_cck.rpt file and lists
the following information:
– Constraints that are not applied
– Constraints that are valid and applicable to the design
– Wildcard expansion on the constraints
– Constraints on objects that do not exist

For details on this report, see Constraint Checking Report, on page 275
of the Reference Manual.

Using a Text Editor for Constraint Files (Legacy)


You can use the Legacy SCOPE editor for the SDC constraint files created
before release version G-2012.09. However, it is recommended that you
translate your SDC files to FDC files to enable the latest version of the SCOPE
editor and to utilize the enhanced timing constraint handling in the tool.

If you choose to use the legacy SCOPE editor, this section shows you how to
manually create a Tcl constraint file. The software automatically creates this
file if you use the legacy SCOPE editor to enter the constraints. The Tcl
constraint file only contains general timing constraints. Black box
constraints must be entered in the source code. For additional information,
see When to Use Constraint Files over Source Code, on page 52.

1. Open a file for editing.


– Make sure you have LO
closed the SCOPE window, or you could
overwrite previous constraints.
– To create a new file, select File->New, and select the Constraints File
(SCOPE) option. Type a name for the file and click OK.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
54 December 2015
Working with Constraint Files Chapter 3: Preparing the Input

– To edit an existing file, select File->Open, set the Files of Type filter to
Constraint Files (sdc) and open the file you want.

2. Follow the syntax guidelines in Tcl Syntax Guidelines for Constraint


Files, on page 52.

3. Enter the timing constraints you need. For the syntax, see the Reference
Manual. If you have black box timing constraints, you must enter them
in the source code.

4. You can also add vendor-specific attributes in the constraint file using
define_attribute. See Specifying Attributes in the Constraints File, on
page 95 for more information.

5. Save the file.

6. Add the file to the project as described in Making Changes to a Project,


on page 62, and run synthesis.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 55
Chapter 3: Preparing the Input Working with Constraint Files

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
56 December 2015
CHAPTER 4

Setting up a Logic Synthesis Project

When you synthesize a design with the Synopsys FPGA synthesis tools, you
must set up a project for your design. The following describe the procedures
for setting up a project for logic synthesis:
• Setting Up Project Files, on page 58
• Managing Project File Hierarchy, on page 66
• Setting Up Implementations, on page 72
• Setting Logic Synthesis Implementation Options, on page 74
• Specifying Attributes and Directives, on page 89
• Searching Files, on page 96
• Archiving Files and Projects, on page 99

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 57
Chapter 4: Setting up a Logic Synthesis Project Setting Up Project Files

Setting Up Project Files


This section describes the basics of how to set up and manage a project file
for your design, including the following information:
• Creating a Project File, on page 58
• Opening an Existing Project File, on page 61
• Making Changes to a Project, on page 62
• Setting Project View Display Preferences, on page 63
• Updating Verilog Include Paths in Older Project Files, on page 65
For a specific example on setting up a project file, refer to the tutorial for the
tool you are using.

Creating a Project File


You must set up a project file for each project. A project contains the data
needed for a particular design: the list of source files, the synthesis results
file, and your device option settings. The following procedure shows you how
to set up a project file using individual commands.

1. Start by selecting one of the following: File->Build Project, File->Open Project,


or the P icon. Click New Project.

The Project window shows a new project. Click the Add File button, press
F4, or select the Project->Add Source File command. The Add Files to Project
dialog box opens.

2. Add the source files to the project.


– Make sure the Look in field at the top of the form points to the right
directory. The files are listed in the box. If you do not see the files,
check that the Files of Type field is set to display the correct file type. If
you have mixed input files, follow the procedure described in Using
Mixed Language Source Files, on page 43.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
58 December 2015
Setting Up Project Files Chapter 4: Setting up a Logic Synthesis Project

– To add all the files in the directory at once, click the Add All button on
the right side of the form. To add files individually, click on the file in
the list and then click the Add button, or double-click the file name.
You can add all the files in the directory and then remove the ones
you do not need with the Remove button.
If you are adding VHDL files, select the appropriate library from the
VHDL Library popup menu. The library you select is applied to all VHDL
files when you click OK in the dialog box.

Your project window displays a new project file. If you click on the plus
sign next to the project and expand it, you see the following:
– A folder (two folders for mixed language designs) with the source files.
If your files are not in a folder under the project directory, you can set
this preference by selecting Options->Project View Options and checking
the View project files in folders box. This separates one kind of file from
another in the Project view by putting them in separate folders.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 59
Chapter 4: Setting up a Logic Synthesis Project Setting Up Project Files

– The implementation, named rev_1 by default. Implementations are


revisions of your design within the context of the synthesis software,
and do not replace external source code control software and
processes. Multiple implementations let you modify device and
synthesis options to explore design options. You can have multiple
implementations in the Synplify Pro tool. Each implementation has
its own synthesis and device options and its own project-related files.

3. Add any libraries you need, using the method described in the previous
step to add the Verilog or VHDL library file.
– For vendor-specific libraries, add the appropriate library file to the
project. Note that for some families, the libraries are loaded
automatically and you do not need to explicitly add them to the
project file.
To add a third-party VHDL package library, add the appropriate vhd
file to the design, as described in step 2. Right click the file in the
Project view and select File Options, or select Project-> Set VHDL library.
Specify a library name that is compatible with the simulators. For
example, MYLIB. Make sure that this package library is before the top-
level design in the list of files in the Project view.
For information about setting Verilog and VHDL file options, see
Setting Verilog and VHDL Options, on page 83. You can also set these
file options later, before running synthesis.
For additional vendor-specific information about using vendor macro
libraries and black boxes,
LO see Optimizing Microsemi Designs, on
page 492.
– For generic technology components, you can either add the
technology-independent Verilog library supplied with the software

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
60 December 2015
Setting Up Project Files Chapter 4: Setting up a Logic Synthesis Project

(install_dir/lib/generic_ technology/gtech.v) to your design, or add your


own generic component library. Do not use both together as there
may be conflicts.

4. Check file order in the Project view. File order is especially important for
VHDL files.
– For VHDL files, you can automatically order the files by selecting Run-
>Arrange VHDL Files. Alternatively, manually move the files in the
Project view. Package files must be first on the list because they are
compiled before they are used. If you have design blocks spread over
many files, make sure you have the following file order: the file
containing the entity must be first, followed by the architecture file, and
finally the file with the configuration.
– In the Project view, check that the last file in the Project view is the
top-level source file. Alternatively, you can specify the top-level file
when you set the device options.

5. Select File->Save, type a name for the project, and click Save. The Project
window reflects your changes.

6. To close a project file, select the Close Project button or File->Close Project.

Opening an Existing Project File


There are two ways to open a project file: the Open Project and the generic File
->Open command.

1. If the project you want to open is one you worked on recently, you can
select it directly: File->Recent Projects-> projectName.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 61
Chapter 4: Setting up a Logic Synthesis Project Setting Up Project Files

2. Use one of the following methods to open any project file:

Open Project Command File->Open Command


Select File->Open Project, click the Select File->Open.
Open Project button on the left side of Specify the correct directory in the Look
the Project window, or click the In: field.
P icon.
Set File of Type to Project Files (*.prj). The
To open a recent project, double- box lists the project files.
click it from the list of recent
projects. Double-click on the project you want
to open.
Otherwise, click the Existing Project
button to open the Open dialog box
and select the project.

The project opens in the Project window.

Making Changes to a Project


Typically, you add, delete, or replace files.

1. To add source or constraint files to a project, select the Add Files button
or Project->Add Source File to open the Select Files to Add to Project dialog box.
See Creating a Project File, on page 58 for details.

2. To delete a file from a project, click the file in the Project window, and
press the Delete key.

3. To replace a file in a project,


– Select the file you want to change in the Project window.
– Click the Change File button, or select Project->Change File.
– In the Source File dialog box that opens, set Look In to the directory
where the new file is located. The new file must be of the same type as
the file you want to replace.
– If you do not see your file listed, select the type of file you need from
the Files of Type field.
– Double-click the file. The new file replaces the old one in the project
list. LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
62 December 2015
Setting Up Project Files Chapter 4: Setting up a Logic Synthesis Project

4. To specify how project files are saved in the project, right click on a file
in the Project view and select File Options. Set the Save File option to either
Relative to Project or Absolute Path.

5. To check the time stamp on a file, right click on a file in the Project view
and select File Options. Check the time that the file was last modified.
Click OK.

Setting Project View Display Preferences


You can customize the organization and display of project files.

1. Select Options->Project View Options.

The Project View Options form opens.

2. To organize different kinds of input files in separate folders, check View


Project Files in Folders.

Checking this option creates separate folders in the Project view for
constraint files and source files.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 63
Chapter 4: Setting up a Logic Synthesis Project Setting Up Project Files

3. Control file display with the following:


– Automatically display all the files, by checking Show Project Library. If
this is unchecked, the Project view does not display files until you
click on the plus symbol and expand the files in a folder.
– Check one of the boxes in the Project File Name Display section of the
form to determine how filenames are displayed. You can display just
the filename, the relative path, or the absolute path.

4. To view project files in customized custom folders, check View Project Files
in Custom Folders. For more information, see Creating Custom Folders, on
page 66. Type folders are only displayed if there are multiple types in a
custom folder.

Custom
Folders

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
64 December 2015
Setting Up Project Files Chapter 4: Setting up a Logic Synthesis Project

5. To open more than one implementation in the same Project view, check
Allow Multiple Projects to be Opened.

Project 1

Project 2

6. Control the output file display with the following:


– Check the Show all Files in Results Directory box to display all the output
files generated after synthesis.
– Change output file organization by clicking in one of the header bars
in the Implementation Results view. You can group the files by type
or sort them according to the date they were last modified.

7. To view file information, select the file in the Project view, right-click,
and select File Options. For example, you can check the date a file was
modified.

Updating Verilog Include Paths in Older Project Files


If you have a project file created with an older version of the software (prior to
8.1), the Verilog include paths in this file are relative to the results directory or
the source file with the `include statements. In releases after 8.1, the project
file `include paths are relative to the project file only. The GUI in the more
recent releases does not automatically upgrade the older prj files to conform
to the newer rules. To upgrade and use the old project file, do one of the
following:
• Manually edit the prj file in a text editor and add the following on the
line before each set_option -include_path:

set_option -project_relative_includes 1
• Start a new project with a newer version of the software and delete the
old project. This will make the new prj file obey the new rule where
includes are relative to the prj file.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 65
Chapter 4: Setting up a Logic Synthesis Project Managing Project File Hierarchy

Managing Project File Hierarchy


The following sections describe how you can create and manage customized
folders and files in the Project view:
• Creating Custom Folders
• Manipulating Custom Project Folders
• Manipulating Custom Files

Creating Custom Folders


You can create logical folders and customize files in various hierarchy group-
ings within your Project view. These folders can be specified with any name or
hierarchy level. For example, you can arbitrarily match your operating
system file structure or HDL logic hierarchy. Custom folders are distin-
guished by their blue color.

There are several ways to create custom folders and then add files to them in
a project. Use one of the following methods:

1. Right-click on a project file or another custom folder and select Add Folder
from the popup menu. Then perform any of the following file operations:
– Right-click on a file or files and select Place in Folder. A sub-menu
displays so that you can either select an existing folder or create a
new folder.
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
66 December 2015
Managing Project File Hierarchy Chapter 4: Setting up a Logic Synthesis Project

Note that you can arbitrarily name the folder, however do not use the
character (/) because this is a hierarchy separator symbol.
– To rename a folder, right-click on the folder and select Rename from
the popup menu. The Rename Folder dialog box appears; specify a new
name.

2. Use the Add Files to Project dialog box to add the entire contents of a folder
hierarchy, and optionally place files into custom folders corresponding
to the OS folder hierarchies listed in the dialog box display.

– To do this, select the Add File button in the Project view.


– Select any requested folders such as dsp from the dialog box, then
click the Add button. This places all the files from the dsp hierarchy
into the custom folder you just created.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 67
Chapter 4: Setting up a Logic Synthesis Project Managing Project File Hierarchy

– To automatically place the files into custom folders corresponding to


the OS folder hierarchy, check the option called Add Files to Custom
Folders on the dialog box.
– By default, the custom folder name is the same name as the folder
containing files or folder to be added to the project. However, you can
modify how folders are named, by clicking on the Folders Option
button. The following dialog box is displayed.

To use:
– Only the folder containing files for the folder name, click on Use OS
Folder Name.
– The path name to the selected folder to determine the level of
hierarchy reflected for the custom folder path.

3. You can drag and drop files and folders from an OS Explorer application
into the Project view. This feature is available on Windows and Linux
desktops running KDE.
– When you drag and drop a file, it is immediately added to the project.
If no project is open, the software creates a project.
– When you drag and drop
LO a file over a folder, it will be placed in that
folder. Initially, the Add Files to Project dialog box is displayed asking
you to confirm the files to be added to the project. You can click OK to

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
68 December 2015
Managing Project File Hierarchy Chapter 4: Setting up a Logic Synthesis Project

accept the files. If you want to make changes, you can click the
Remove All button and specify a new filter or option.

Note: To display custom folders in the Project view, select the


Options->Project View Options menu, then enable/disable the check
box for View Project Files in Custom Folders on the dialog box.

Manipulating Custom Project Folders


The following procedure describes how you can remove files from folders,
delete folders, and change the folder hierarchy.

1. To remove a file from a custom folder, either:


– Drag and drop it into another folder or onto the project.
– Highlight the file, right-click and select Remove from Folder from the
popup menu.
Do not use the Delete (DEL) key, as this removes the file from the
project.

2. To delete a custom folder, highlight it then right-click and select Delete


from the popup menu or press the DEL key. When you delete a folder,
make one of the following choices:
– Click Yes to delete the folder and the files contained in the folder from
the project.
– Click No to just delete the folder.
3. To change the hierarchy of the custom folder:
– Drag and drop the folder within another folder so that it is a sub-
folder or over the project to move it to the top-level.
– To remove the top-level hierarchy of a custom folder, drag and drop
the desired sub-level of hierarchy over the project. Then delete the
empty root directory for the folder.
For example, if the existing custom folder directory is:
/Examples/Verilog/RTL

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 69
Chapter 4: Setting up a Logic Synthesis Project Managing Project File Hierarchy

Suppose you want a single-level RTL hierarchy only, then drag and
drop RTL over the project. Thereafter, you can delete the
/Examples/Verilog directory.

Manipulating Custom Files


Additionally, you can perform the following types of custom file operations:

1. To suppress the display of files in the Type folders, right-click in the


Project view and select Project View Options or select Options->Project View
Options. Disable the option View Project Files in Type Folders on the dialog
box.

2. To display files in alphabetical order instead of project order, check the


Sort Files button in the Project view control panel. Click the down arrow
key in the bottom-left corner of the panel to toggle the control panel on
and off.

LO

Control Panel Toggle

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
70 December 2015
Managing Project File Hierarchy Chapter 4: Setting up a Logic Synthesis Project

3. To change the order of files in the project:


– Make sure to disable custom folders and sorting files.
– Drag and drop a file to the desired position in the list of files.
4. To change the file type, drag and drop it to the new type folder. The
software will prompt you for verification.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 71
Chapter 4: Setting up a Logic Synthesis Project Setting Up Implementations

Setting Up Implementations
An implementation is a version of a project, implemented with a specific set of
constraints and other settings. A project can contain multiple implementa-
tions, each one with its own settings.

Working with Multiple Implementations


The synthesis tools let you create multiple implementations of the same
design and then compare results. This lets you experiment with different
settings for the same design. Implementations are revisions of your design
within the context of the synthesis software, and do not replace external
source code control software and processes.

1. Click the Add Implementation button or select Project->New Implementation


and set new device options (Device tab), new options (Options tab), or a
new constraint file (Constraints tab).

The software creates another implementation in the project view. The


new implementation has the same name as the previous one, but with a
different number suffix. The following figure shows two implementa-
tions, rev1 and rev2, with the current (active) implementation highlighted.

The new implementation uses the same source code files, but different
device options and constraints. It copies some files from the previous
implementation: the tlg log file, the srs RTL netlist file, and the
design_fsm.sdc file generated by FSM Explorer. The software keeps a
repeatable history of the synthesis runs.

2. Run synthesis again with the new settings.


– To run the current implementation only, click Run.
– To run all the implementations in a project, select Run->Run All
Implementations.
LO
You can use multiple implementations to try a different part or experi-
ment with a different frequency. See Setting Logic Synthesis Implemen-
tation Options, on page 74 for information about setting options.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
72 December 2015
Setting Up Implementations Chapter 4: Setting up a Logic Synthesis Project

The Project view shows all implementations with the active implementa-
tion highlighted and the corresponding output files generated for the
active implementation displayed in the Implementation Results view on
the right; changing the active implementation changes the output file
display. The Watch window monitors the active implementation. If you
configure this window to watch all implementations, the new implemen-
tation is automatically updated in the window.

3. Compare the results.


– Use the Watch window to compare selected criteria. Make sure to set
the implementations you want to compare with the Configure Watch
command. See Using the Watch Window, on page 193 for details.

– To compare details, compare the log file results.


4. To rename an implementation, click the right mouse button on the
implementation name in the project view, select Change Implementation
Name from the popup menu, and type a new name.

Note that the current UI overwrites the implementation; releases prior to


9.0 preserve the implementation to be renamed.

5. To copy an implementation, click the right mouse button on the


implementation name in the project view, select Copy Implementation from
the popup menu, and type a new name for the copy.

6. To delete an implementation, click the right mouse button on the


implementation name in the project view, and select Remove
Implementation from the popup menu.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 73
Chapter 4: Setting up a Logic Synthesis Project Setting Logic Synthesis Implementation Options

Setting Logic Synthesis Implementation Options


You can set global options for your synthesis implementations, some of them
technology-specific. This section describes how to set global options like
device, optimization, and file options with the Implementation Options command.
For information about setting constraints for the implementation, see Speci-
fying SCOPE Constraints, on page 121. For information about overriding
global settings with individual attributes or directives, see Specifying Attri-
butes and Directives, on page 89.

This section discusses the following topics:


• Setting Device Options, on page 74
• Setting Optimization Options, on page 77
• Specifying Global Frequency and Constraint Files, on page 79
• Specifying Result Options, on page 81
• Specifying Timing Report Output, on page 83
• Setting Verilog and VHDL Options, on page 83

Setting Device Options


Device options are part of the global options you can set for the synthesis
run. They include the part selection (technology, part and speed grade) and
implementation options (I/O insertion and fanouts). The options and the
implementation of these options can vary from technology to technology, so
check the vendor chapters of the Reference Manual for information about
your vendor options.

1. Open the Implementation Options form by clicking the Implementation Options


button or selecting Project->Implementation Options, and click the Device tab
at the top if it is not already selected.

2. Select the technology, part, package, and speed. Available options vary,
depending on the technology you choose.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
74 December 2015
Setting Logic Synthesis Implementation Options Chapter 4: Setting up a Logic Synthesis Project

3. Set the device mapping options. The options vary, depending on the
technology you choose.
– If you are unsure of what an option means, click on the option to see
a description in the box below. For full descriptions of the options,
click F1 or refer to the appropriate vendor chapter in the Reference
Manual.
– To set an option, type in the value or check the box to enable it.
For more information about setting fanout limits, pipelining, and
retiming, see Setting Fanout Limits, on page 352 and Retiming, on
page 340, respectively. For details about other vendor-specific options,
refer to the appropriate vendor chapter and technology family in the
Reference Manual.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 75
Chapter 4: Setting up a Logic Synthesis Project Setting Logic Synthesis Implementation Options

4. Set other implementation options as needed (see Setting Logic Synthesis


Implementation Options, on page 74 for a list of choices). Click OK.

5. Click the Run button to synthesize the design. The software compiles
and maps the design using the options you set.

6. To set device options with a script, use the set_option Tcl command. The
following table contains an alphabetical list of the device options on the
Device tab mapped to the equivalent Tcl commands. Because the options
are technology- and family-based, all of the options listed in the table
may not be available in the selected technology. All commands begin
with set_option, followed by the syntax in the column as shown. Check
the Reference Manual for the most comprehensive list of options for your
vendor.

The following table shows a majority of the device options.

Option Tcl Command (set_option...)


Annotated Properties for Analyst -run_prop_extract {1|0}
LO
Disable I/O Insertion -disable_io_insertion {1|0}
Fanout Guide -fanout_limit fanout_value

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
76 December 2015
Setting Logic Synthesis Implementation Options Chapter 4: Setting up a Logic Synthesis Project

Option Tcl Command (set_option...)


Package -package pkg_name
Part -part part_name
Resolve Mixed Drivers -resolve_multiple_driver {1|0}
Speed -speed_grade speed_grade
Technology -technology keyword
Update Compile Point Timing Data -update_models_cp {0|1}

Setting Optimization Options


Optimization options are part of the global options you can set for the imple-
mentation. This section tells you how to set options like frequency and global
optimization options like resource sharing. You can also set some of these
options with the appropriate buttons on the UI.

1. Open the Implementation Options form by clicking the Implementation


Options button or selecting Project->Implementation Options, and click the
Options tab at the top.

2. Click the optimization options you want, either on the form or in the
Project view. Your choices vary, depending on the technology. If an
option is not available for your technology, it is greyed out. Setting the
option in one place automatically updates it in the other.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 77
Chapter 4: Setting up a Logic Synthesis Project Setting Logic Synthesis Implementation Options

Optimization Options
Project View

Implementation Options->Options

For details about using these optimizations refer to the following


sections:

Continue on Error Continue on Error, on page 79

FSM Compiler Optimizing State Machines, on page 358

FSM Explorer Running the FSM Explorer, on page 363


Note: Only a subset of the Microsemi technologies
support the FSM Explorer option. Use the
Project->Implementation Options->Options panel to determine
if this option is supported for the device you specify in
your tool.
Resource Sharing Sharing Resources, on page 356

Retiming Retiming, on page 340

The equivalent Tcl set_option command options are as follows:

Option set_option Tcl Command Option


Continue on Error -continue_on_error {1|0}
LO
FSM Compiler -symbolic_fsm_compiler {1|0}

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
78 December 2015
Setting Logic Synthesis Implementation Options Chapter 4: Setting up a Logic Synthesis Project

Option set_option Tcl Command Option


FSM Explorer -use_fsm_explorer {1|0}
Resource Sharing -resource_sharing {1|0}
Retiming -retiming {1|0}

3. Set other implementation options as needed (see Setting Logic Synthesis


Implementation Options, on page 74 for a list of choices). Click OK.

4. Click the Run button to run synthesis.

The software compiles and maps the design using the options you set.

Continue on Error
The “continue-on-error” feature allows the compilation process to continue
for certain, non-syntax-related compiler errors. For more information, see
Using Continue on Error, on page 207.

Specifying Global Frequency and Constraint Files


This procedure tells you how to set the global frequency and specify the
constraint files for the implementation.

1. To set a global frequency, do one of the following:


– Type a global frequency in the Project view.
– Open the Implementation Options form by clicking the Implementation
Options button or selecting Project->Implementation Options, and click the
Constraints tab.

The equivalent Tcl set_option command is -frequency frequencyValue.

You can override the global frequency with local constraints, as


described in Specifying SCOPE Constraints, on page 121. In the Synplify
Pro tool, you can automatically generate clock constraints for your
design instead of setting a global frequency. See Using Auto Constraints,
on page 295 for details.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 79
Chapter 4: Setting up a Logic Synthesis Project Setting Logic Synthesis Implementation Options

Global Frequency and Constraints

Project View

Implementation Options->Constraints

2. To specify constraint files for an implementation, do one of the following:


– Select Project->Implementation Options->Constraints. Check the constraint
files you want to use in the project.
– From the Implementation Options->Constraints panel, you can also click to
add a constraint file.
– With the implementation you want to use selected, click Add File in the
Project view, and add the constraint files you need.

To create constraint files,


LO see Specifying SCOPE Constraints, on
page 121.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
80 December 2015
Setting Logic Synthesis Implementation Options Chapter 4: Setting up a Logic Synthesis Project

3. To remove constraint files from an implementation, do one of the


following:
– Select Project->Implementation Options->Constraints. Click off the checkbox
next to the file name.
– In the Project view, right-click the constraint file to be removed and
select Remove from Project.

This removes the constraint file from the implementation, but does not
delete it.

4. Set other implementation options as needed (see Setting Logic Synthesis


Implementation Options, on page 74 for a list of choices). Click OK.

When you synthesize the design, the software compiles and maps the
design using the options you set.

Specifying Result Options


This section shows you how to specify criteria for the output of the synthesis
run.

1. Open the Implementation Options form by clicking the Implementation Options


button or selecting Project->Implementation Options, and click the
Implementation Results tab at the top.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 81
Chapter 4: Setting up a Logic Synthesis Project Setting Logic Synthesis Implementation Options

2. Specify the output files you want to generate.


– To generate mapped netlist files, click Write Mapped Verilog Netlist or Write
Mapped VHDL Netlist.
– To generate a vendor-specific constraint file for forward annotation,
click Write Vendor Constraint File.

3. Set the directory to which you want to write the results.

4. Set the format for the output file. The equivalent Tcl command for
scripting is project -result_format format.

You might also want to set attributes to control name-mapping. For


details, refer to the appropriate vendor chapter in the Reference Manual.

5. Set other implementation options as needed (see Setting Logic Synthesis


Implementation Options, on page 74 for a list of choices). Click OK.

When you synthesize the design, the software compiles and maps the
design using the options you set.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
82 December 2015
Setting Logic Synthesis Implementation Options Chapter 4: Setting up a Logic Synthesis Project

Specifying Timing Report Output


You can determine how much is reported in the timing report by setting the
following options.

1. Selecting Project->Implementation Options, and click the Timing Report tab.

2. Set the number of critical paths you want the software to report.

3. Specify the number of start and end points you want to see reported in
the critical path sections.

4. Set other implementation options as needed (see Setting Logic Synthesis


Implementation Options, on page 74 for a list of choices). Click OK.

When you synthesize the design, the software compiles and maps the
design using the options you set.

Setting Verilog and VHDL Options


When you set up the Verilog and VHDL source files in your project, you can
also specify certain compiler options.

Setting Verilog File Options


You set Verilog file options by selecting either Project->Implementation Options->
Verilog, or Options->Configure Verilog Compiler.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 83
Chapter 4: Setting up a Logic Synthesis Project Setting Logic Synthesis Implementation Options

1. Specify the Verilog format to use.


– To set the compiler globally for all the files in the project, select
Project->Implementation Options->Verilog. If you are using Verilog 2001 or
SystemVerilog, check the Reference Manual for supported constructs.
– To specify the Verilog compiler on a per file basis, select the file in the
Project view. Right-click and select File Options. Select the appropriate
compiler. The default Verilog file format for new projects is
SystemVerilog.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
84 December 2015
Setting Logic Synthesis Implementation Options Chapter 4: Setting up a Logic Synthesis Project

2. Specify the top-level module if you did not already do this in the Project
view.

3. To extract parameters from the source code, do the following:


– Click Extract Parameters.
– To override the default, enter a new value for a parameter.
The software uses the new value for the current implementation only.
Note that parameter extraction is not supported for mixed designs.

4. Type in the directive in Compiler Directives, using spaces to separate the


statements.

You can type in directives you would normally enter with 'ifdef and ‘define
statements in the code. For example, ABC=30 results in the software
writing the following statements to the project file:

set_option -hdl_define -set "ABC=30"

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 85
Chapter 4: Setting up a Logic Synthesis Project Setting Logic Synthesis Implementation Options

5. In the Include Path Order, specify the search paths for the include
commands for the Verilog files that are in your project. Use the buttons
in the upper right corner of the box to add, delete, or reorder the paths.

6. In the Library Directories, specify the path to the directory which


contains the library files for your project. Use the buttons in the upper
right corner of the box to add, delete, or reorder the paths.

7. Set other implementation options as needed (see Setting Logic Synthesis


Implementation Options, on page 74 for a list of choices). Click OK.

When you synthesize the design, the software compiles and maps the
design using the options you set.

Setting VHDL File Options


You set VHDL file options by selecting either Project->Implementation
Options->VHDL, or Options->Configure VHDL Compiler.

For VHDL source, you can specify the options described below.

1. Specify the top-level module if you did not already do this in the Project
view. If the top-level module is not located in the default work library, you
must specify the library where the compiler can find the module. For
information on how to do this, see VHDL Panel, on page 204.

You can also use this option for mixed language designs or when you
want to specify a module that is not the actual top-level entity for HDL
Analyst displaying and LO
debugging in the schematic views.

2. For user-defined state machine encoding, do the following:


– Specify the kind of encoding you want to use.
© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
86 December 2015
Setting Logic Synthesis Implementation Options Chapter 4: Setting up a Logic Synthesis Project

– Disable the FSM compiler.


When you synthesize the design, the software uses the compiler direc-
tives you set here to encode the state machines and does not run the
FSM compiler, which would override the compiler directives. Alterna-
tively, you can define state machines with the syn_encoding attribute, as
described in Defining State Machines in VHDL, on page 312.

3. To extract generics from the source code, do this:


– Click Extract Generic Constants.
– To override the default, enter a new value for a generic.
The software uses the new value for the current implementation only.
Note that you cannot extract generics if you have a mixed language
design.

4. To push tristates across process/block boundaries, check that Push


Tristates is enabled. For details, see Push Tristates Option, on page 216in
the Reference Manual.

5. Determine the interpretation of the synthesis_on and synthesis_off


directives:
– To make the compiler interpret synthesis_on and synthesis_off directives
like translate_on/translate_off, enable the Synthesis On/Off Implemented as
Translate On/Off option.
– To ignore the synthesis_on and synthesis_off directives, make sure that
this option is not checked. See translate_off/translate_on, on
page 232 in the Reference Manual for more information.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 87
Chapter 4: Setting up a Logic Synthesis Project Setting Logic Synthesis Implementation Options

6. Set other implementation options as needed (see Setting Logic Synthesis


Implementation Options, on page 74 for a list of choices). Click OK.

When you synthesize the design, the software compiles and maps the
design using the options you set.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
88 December 2015
Specifying Attributes and Directives Chapter 4: Setting up a Logic Synthesis Project

Specifying Attributes and Directives


Attributes and directives are specifications that you assign to design objects
to control the way your design is analyzed, optimized, and mapped.

Attributes control mapping optimizations and directives control compiler


optimizations. Because of this difference, you must specify directives in the
source code. This table describes the methods that are available to create
attribute and directives specifications:

Attributes Directives
VHDL Yes Yes

Verilog Yes Yes

SCOPE Editor Yes No

Constraints File Yes No

It is better to specify attributes in the SCOPE editor or the constraints file,


because you do not have to recompile the design first. For directives, you
must compile the design for them to take effect.

If SCOPE/constraints file and the HDL source code are specified for a design,
the constraints has the highest priority when there are conflicts.

For further details, refer to the following:


• Specifying Attributes and Directives in VHDL, on page 89
• Specifying Attributes and Directives in Verilog, on page 91
• Specifying Attributes Using the SCOPE Editor, on page 92
• Specifying Attributes in the Constraints File, on page 95

Specifying Attributes and Directives in VHDL


You can use other methods to add attributes to objects, as listed in Specifying
Attributes and Directives, on page 89. However, you can specify directives only
in the source code. There are two ways of defining attributes and directives in
VHDL:
• Using the predefined attributes package

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 89
Chapter 4: Setting up a Logic Synthesis Project Specifying Attributes and Directives

• Declaring the attribute each time it is used


For details of VHDL attribute syntax, see VHDL Attribute and Directive
Syntax, on page 574in the Reference Manual.

Using the Predefined VHDL Attributes Package


The advantage to using the predefined package is that you avoid redefining
the attributes and directives each time you include them in source code. The
disadvantage is that your source code is less portable. The attributes package
is located in installDirectory/lib/vhd/synattr.vhd.

1. To use the predefined attributes package included in the software


library, add these lines to the syntax:

library synplify;
use synplify.attributes.all;

2. Add the attribute or directive you want after the design unit declaration.

declarations;
attribute attribute_name of objectName : objectType is value;
For example:

entity simpledff is
port (q: out bit_vector(7 downto 0);
d : in bit_vector(7 downto 0);
clk : in bit);
attribute syn_noclockbuf of clk : signal is true;
For details of the syntax conventions, see VHDL Attribute and Directive
Syntax, on page 574 in the Reference Manual.

3. Add the source file to the project.

Declaring VHDL Attributes and Directives


If you do not use the attributes package, you must redefine the attributes
each time you include them in source code.

1. Every time you use an attribute or directive, define it immediately after


the design unit declarations
LO using the following syntax:

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
90 December 2015
Specifying Attributes and Directives Chapter 4: Setting up a Logic Synthesis Project

design_unit_declaration;
attribute attributeName : dataType;
attribute attributeName of objectName : objectType is value;

For example:

entity simpledff is
port (q: out bit_vector(7 downto 0);
d : in bit_vector(7 downto 0);
clk : in bit);
attribute syn_noclockbuf : boolean;
attribute syn_noclockbuf of clk :signal is true;

2. Add the source file to the project.

Specifying Attributes and Directives in Verilog


You can use other methods to add attributes to objects, as described in Speci-
fying Attributes and Directives, on page 89. However, you can specify direc-
tives only in the source code.

Verilog does not have predefined synthesis attributes and directives, so you
must add them as comments. The attribute or directive name is preceded by
the keyword synthesis. Verilog files are case sensitive, so attributes and direc-
tives must be specified exactly as presented in their syntax descriptions. For
syntax details, see Verilog Attribute and Directive Syntax, on page 377in the
Reference Manual.

1. To add an attribute or directive in Verilog, use Verilog line or block


comment (C-style) syntax directly following the design object. Block
comments must precede the semicolon, if there is one.

Verilog Block Comment Syntax Verilog Line Comment Syntax


/* synthesis attributeName = value */ // synthesis attributeName = value
/* synthesis directoryName = value */ // synthesis directoryName = value

For details of the syntax rules, see Verilog Attribute and Directive
Syntax, on page 377 in the Reference Manual. The following are
examples:

module fifo(out, in) /* synthesis syn_hier = "hard“ */;


module b_box(out, in); // synthesis syn_black_box

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 91
Chapter 4: Setting up a Logic Synthesis Project Specifying Attributes and Directives

2. To attach multiple attributes or directives to the same object, separate


the attributes with white spaces, but do not repeat the synthesis keyword.
Do not use commas. For example:

case state /* synthesis full_case parallel_case */;

3. If multiple registers are defined using a single Verilog reg statement and
an attribute is applied to them, then the synthesis software only applies
the last declared register in the reg statement. For example:

reg [5:0] q, q_a, q_b, q_c, q_d /* synthesis syn_preserve=1 */;


The syn_preserve attribute is only applied to q_d. This is the expected
behavior for the synthesis tools. To apply this attribute to all registers,
you must use a separate Verilog reg statement for each register and
apply the attribute.

Specifying Attributes Using the SCOPE Editor


The SCOPE window provides an easy-to-use interface to add any attribute.
You cannot use it for adding directives, because they must be added to the
source files. (See Specifying Attributes and Directives in VHDL, on page 89 or
Specifying Attributes and Directives in Verilog, on page 91). The following
procedure shows how to add an attribute directly in the SCOPE window.

1. Start with a compiled design and open the SCOPE window. To add the
attributes to an existing constraint file, open the SCOPE window by
clicking on the existing file in the Project view. To add the attributes to a
new file, click the SCOPE icon and click Initialize to open the SCOPE
window.

2. Click the Attributes tab at the bottom of the SCOPE window.

You can either select the object first (step 3) or the attribute first (step 4).

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
92 December 2015
Specifying Attributes and Directives Chapter 4: Setting up a Logic Synthesis Project

3. To specify the object, do one of the following in the Object column. If you
already specified the attribute, the Object column lists only valid object
choices for that attribute.
– Select the type of object in the Object Filter column, and then select an
object from the list of choices in the Object column. This is the best
way to ensure that you are specifying an object that is appropriate,
with the correct syntax.
– Drag the object to which you want to attach the attribute from the
RTL or Technology views to the Object column in the SCOPE window.
For some attributes, dragging and dropping may not select the right
object. For example, if you want to set syn_hier on a module or entity
like an and gate, you must set it on the view for that module. The
object would have this syntax: v:moduleName in Verilog, or
v:library.moduleName in VHDL, where you can have multiple libraries.
– Type the name of the object in the Object column. If you do not know
the name, use the Find command or the Object Filter column. Make
sure to type the appropriate prefix for the object where it is needed.
For example, to set an attribute on a view, you must add the v: prefix
to the module or entity name. For VHDL, you might have to specify
the library as well as the module name.

4. If you specified the object first, you can now specify the attribute. The
list shows only the valid attributes for the type of object you selected.
Specify the attribute by holding down the mouse button in the Attribute
column and selecting an attribute from the list.

If you selected the object first, the choices available are determined by
the selected object and the technology you are using. If you selected the
attribute first, the available choices are determined by the technology.

When you select an attribute, the SCOPE window tells you the kind of
value you must enter for that attribute and provides a brief description
of the attribute. If you selected the attribute first, make sure to go back
and specify the object.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 93
Chapter 4: Setting up a Logic Synthesis Project Specifying Attributes and Directives

5. Fill out the value. Hold down the mouse button in the Value column, and
select from the list. You can also type in a value.

6. Save the file.

The software creates a Tcl constraint file composed of define_attribute


statements for the attributes you specified. See How Attributes and
Directives are Specified, on page 8 of the Reference Manual for the
syntax description.

7. Add it to the project, if it is not already in the project.


– Choose Project -> Implementation Options.
– Go to the Constraints panel and check that the file is selected. If you
have more than one constraint file, select all those that apply to the
implementation.

The software saves the SCOPE information in a Tcl constraint file, using
define_attribute statements. When you synthesize the design, the software
reads the constraint file and applies the attributes.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
94 December 2015
Specifying Attributes and Directives Chapter 4: Setting up a Logic Synthesis Project

Specifying Attributes in the Constraints File


When you use the SCOPE window (Specifying Attributes Using the SCOPE
Editor, on page 92), the attributes are automatically written to a constraint
file using the Tcl define_attribute syntax. This is the preferred method for
defining constraints as the syntax is determined for you.

However, the following procedure explains how you can specify attributes
directly in the constraint file.

1. Open a file in a text editor.

2. Enter the desired attributes. For example,

define_attribute {objectName} attributeName value

For commands and syntax, see Summary of Attributes and Directives,


on page 11 in the Attribute Reference Manual.

3. Save the constraints in a file using the FDC file extension.

# Use a regular buffer instead of a clock buffer for clock "clk_slow".


define_attribute {clk_slow} syn_noclockbuf 1
# Relax timing by not buffering "clk_slow", because it is the slow clock
# Set the maximum fanout to 10000.
define_attribute {clk_slow} syn_maxfan 10000

For information about editing constraints, see Using a Text Editor for
Constraint Files (Legacy), on page 54.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 95
Chapter 4: Setting up a Logic Synthesis Project Searching Files

Searching Files
A find-in-files feature is available to perform string searches within a speci-
fied set of files. Advantages to using this feature include:
• Ability to restrict the set of files to be searched to a project or implemen-
tation.
• Ability to cross probe the search results.
The find-in-files feature uses a dialog box to specify the search pattern, the
criteria for selecting the files to be searched, and any search options such as
match case or whole word. The files that meet the criteria are searched for the
pattern, and a list of the files containing the search pattern are displayed at
the bottom of the dialog box.

To use the find-in-files feature, open the Find in Files dialog box by selecting
Edit->Find in Files and enter the search pattern in the Find what field at the top of
the dialog box.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
96 December 2015
Searching Files Chapter 4: Setting up a Logic Synthesis Project

Identifying the Files to Search


The Find In section at the top of the dialog box identifies the files to be
searched:
• Project Files – searches the files included in the selected project (use the
drop-down menu to select the project). By default, the files in the active
project are searched. The files can reside anywhere on the disk; any
project ‘include files are also searched.
• Implementation Directory – searches all files in the specified implemen-
tation directory (use the drop-down menu to select the implementation).
By default, the files in the active implementation are searched. You can
search all implementations by selecting <All Implementations> from the
drop-down menu. If Include sub-folders for directory searches is also selected,
all files in the implementation directory hierarchy are searched.
• Directory – searches all files in the specified directory (use the browser
button to select the directory). If Include sub-folders for directory searches is
also selected, all files in the directory hierarchy are searched.

All of the above selection methods can be applied concurrently when


searching for a specified pattern.

The Result Window selection is used after any of the above selection methods to
search the resulting list of files for a subsequent sub-pattern.

Filtering the Files to Search


A file filter allows the file set to be searched to be further restricted based on
the matching of patterns entered into the File filter field.
• A pattern without a wildcard or a “.” (period) is interpreted as a filename
extension. For example, fdc restricts the search to only constraint files.
• Multiple patterns can be specified using a semicolon delimiter. For
example, v;vhd restricts the files searched to only Verilog and VHDL files.
• Wildcard characters can be used in the pattern to match file names. For
example, a*.vhd restricts the files searched to VHDL files that begin with
an “a” character.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 97
Chapter 4: Setting up a Logic Synthesis Project Searching Files

• Leaving the File filter field empty searches all files that meet the Find In
criteria.
• The Match Case, Whole Word, and Regular Expressions search options can be
used to further restrict searches.

Initiating the Search


After entering the search criteria, click the Find button to initiate the search.
All matches found are listed in the results area at the bottom of the dialog
box; the status line just below the Find button reports the number of matches
found in the indicated number of files and the total number of files searched.

While the find operation is running, the status line is continually updated
with how many matches are found in how many files and how many files are
being searched.

Search Results
The search results are displayed in the results window at the bottom of the
dialog box. For each match found, the entire line of the file is the displayed in
the following format:

fullpath_to_file(lineNumber): matching_line_text

For example, the entry

C:\Designs\leon\dcache.vhd(487): wdata := r.wb.data1;

indicates that the search pattern (data1) was found on line 487 of the
dcache.vhd file.

To open the target file at the specified line, double-click on the line in the
results window.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
98 December 2015
Archiving Files and Projects Chapter 4: Setting up a Logic Synthesis Project

Archiving Files and Projects


Use the archive utility to archive, extract (unarchive), or copy design projects.
Archived files are in a proprietary format and saved to a file name using the
sar extension. The archive utility is available through the Project menu in the
GUI or using the project command in the Tcl window.

This document provides a description of how to use the utility.


• Archive a Project
• Un-Archive a Project
• Copy a Project
• Support for Hierarchical Include Paths

Archive a Project
Use the archive utility to store the files for a design project into a single
archive file in a proprietary format (sar). You can archive an entire project or
selected files from a project. If you want to create a copy of a project without
archiving the files, see Copy a Project, on page 106.

Here are the steps to create an archive:

1. In the Project view, select Project->Archive Project to bring up the wizard.

The Tcl command equivalent is project -archive. For a complete description


of the project Tcl command options for archiving, see project, on page 46
of the Reference Manual.

The archive utility automatically runs a syntax check on the active


project (Run->Syntax Check command) to ensure that a complete list of
project files is generated. If you have Verilog 'include files in your project,
the utility includes the complete list of Verilog files. It also checks the
syntax automatically for each implementation in the project to ensure
that the file list is complete for each implementation as well. The wizard
displays the name of the project to archive, the top-level directory where
the project file is located (root directory), and other information.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 99
Chapter 4: Setting up a Logic Synthesis Project Archiving Files and Projects

2. Do the following on the first page of the wizard:


– Fill in Destination File with a location for the archive file.
– Set Archive Style. You can archive all the project files with all the
implementations or selectively archive files and implementations
– To archive only the active implementation, enable Active Implementation.
– To selectively archive files, enable Customized file list, click Next, and use
the check boxes to include files in or exclude files from the archive.
Use the Add Extra Files button on the this page to include additional
files in the project.

3. Click Next.

If you did not select Customized file list, the tool summary displays all the
files in the archive and shows the full uncompressed file size as shown
in step 5 (the actual size is smaller after the archiving operation as there
is no duplication of files). When you select Customized file list, the following
interim menu is displayed to allow you to exclude specific file from the
archive.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
100 December 2015
Archiving Files and Projects Chapter 4: Setting up a Logic Synthesis Project

4. Click next to advance to the next screen (step 3).

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 101
Chapter 4: Setting up a Logic Synthesis Project Archiving Files and Projects

5. Verify that the current archive contains the files that you want, then
click Archive which creates the project archive sar file. If the list of files is
incorrect, click Back and include/exclude any desired files.

6. Click Archive if you are finished. The synthesis tool reports the archive
success and the path location of the archive file.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
102 December 2015
Archiving Files and Projects Chapter 4: Setting up a Logic Synthesis Project

Un-Archive a Project
Uses this procedure to extract design project files from an archive file (sar).

1. In the Project view, select Project->Un-Archive Project to display the wizard

The Tcl command equivalent is project -unarchive. For a complete descrip-


tion of the project Tcl command options for archiving, see project, on
page 46 of the Reference Manual.

2. In the wizard, enter the following:


– Name of the sar file containing the project files.
– Name of project to extract (un-archive). This field is automatically
extracted from the sar file and cannot be changed.
– Pathname of directory in which to write the project files (destination).
– Click Next.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 103
Chapter 4: Setting up a Logic Synthesis Project Archiving Files and Projects

3. Make sure all the files that you want to extract are checked and
references to these files are resolved.
– If there are files in the list that you do not want to include when the
project is un-archived, uncheck the box next to the file. The un-
checked files will be commented out in the project file (prj) when
project files are extracted.
– If you need to resolve a file in the project before un-archiving, click
the Resolve button and fill out the dialog box.
– If you want to replace a file in the project, click the Change button and
fill out the dialog box. Put the replacement files in the directory you
specify in Replace directory. You can replace a single file, any
unresolved files, or all the files. You can also undo the replace
operation.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
104 December 2015
Archiving Files and Projects Chapter 4: Setting up a Logic Synthesis Project

4. Click Next and verify that the project files you want are displayed in the
Un-Archive Summary.

5. If you want to load this project in the UI after files have been extracted,
enable the Load project into Synplify Pro after un-archiving option.

6. When the Add extra input path to project file option is enabled, the archive
utility finds all include files and copies them into a directory called
extra_input. This directory is added to the unarchived project file.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 105
Chapter 4: Setting up a Logic Synthesis Project Archiving Files and Projects

The Tcl command equivalent is set_option -include_path "./extra_input/".

If the archive files contain relative or absolute include paths, the


_SEARCHFILENAMEONLY_ directive can have the compiler remove the
relative/absolute paths from the 'include and search only for the file
names. To use the _SEARCHFILENAMEONLY_ directive, all include files
must have unique names. For details, see __SEARCHFILENAMEONLY__
Directive, on page 213.

7. Click Un-Archive.

A message dialog box is displayed while the files are being extracted.

8. If the destination directory already contains project files with the same
name as the files you are extracting, you are prompted so that the
existing files can be overwritten by the extracted files.

Copy a Project
Use this utility to create an unarchived copy of a design project. You can copy
an entire project or just selected files from the project. However, if you want
to create an archive of the project, where the entire project is stored as a
single file, see Archive a Project, on page 99.

Here are the steps to create a copy of a design project:

1. From the Project view, select Project->Copy Project.

The Tcl command equivalent is project -copy. For a complete description of


the project Tcl command options for archiving, see project, on page 46 of
the Reference Manual.

This command automaticallyLO runs a syntax check on the active project


(Run->Syntax Check command) to ensure that a complete list of project
files is generated. If you have Verilog include files in your project, they
are included. The utility runs this check for each implementation in the

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
106 December 2015
Archiving Files and Projects Chapter 4: Setting up a Logic Synthesis Project

project to ensure that the file list is complete for each implementation
and then displays the wizard, which contains the name of the project
and other information.

2. Do the following in the wizard:


– Specify the destination directory where you want to copy the files.
– Select the files to copy. You can choose to copy all the project files;
one or more individual files, input files only, or customize the list to
be copied.
– To specify a custom list of files, enable Customized file list. Use the check
boxes to include or exclude files from the copy. Enable SRS if you
want to copy all srs files (RTL schematics). You cannot enable the
Source Files option if you select this. Use the Add Extra Files button to
include additional files in the project.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 107
Chapter 4: Setting up a Logic Synthesis Project Archiving Files and Projects

– Click Next.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
108 December 2015
Archiving Files and Projects Chapter 4: Setting up a Logic Synthesis Project

3. Do the following:
– Verify the copy information.
– Enter a destination directory. If the directory does not exist it will be
created.
– Click Copy.
This creates the project copy.

Support for Hierarchical Include Paths


The archive utility can support various forms of include path hierarchies to
locate files for a project. For example:
• The include path can be relative to the location of the source file.
block_a/
block_a.v -> `include "block_a.h"

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 109
Chapter 4: Setting up a Logic Synthesis Project Archiving Files and Projects

• The include path can be a relative path outside of the project.


block_b.v -> `include "../../block_b.h"
The archive utility can determine the absolute path for the file from the
relative path as shown below:

remote/sbg_pe/tests/feature_flow/include/block_b.h
After unarchiving the project, you can see the directory structure for the
equivalent absolute path relative to the project.

"./remote/sbg_pe/tests/feature_flow/include/block_b.h"
• The file location can be specified by include_path in the project file.
block_c/
block_c.v -> `include "block_c.h"

Where this file is located in the directory /include1/.


• The include path can be an absolute path outside of the project.
block_d/
block_d.v -> `include "/slowfs/sbg/tests/include2/block_d.h"
When you archive the project, the absolute path becomes a relative
path. After unarchiving the project, you can see the directory structure
for the relative path to the project.

"./slowfs/sbg/tests/include2/block_d.h"
• The file location can be specified by include_path in the project file.
top_block/
top_block.v -> `include "top_block.h"

Where the top_block.v file is located in the directory /include2/.


• Any additional search paths specified in the project file are copied and
included as relative paths to the project.

After you archive and unarchive the project, the relative paths in the original
project become absolute paths in the new unarchived project. In the project
file, the set_option -include_path preserves the original search order for the files.
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
110 December 2015
Archiving Files and Projects Chapter 4: Setting up a Logic Synthesis Project

Using the __SEARCHFILENAMEONLY__ Compiler Directive


Whenever you have a sar file that contains relative or absolute include paths
for the files in the project, you can also use the _SEARCHFILENAMEONLY_
directive to have the compiler remove the relative/absolute paths from the
'include and search only for the file names. Otherwise, you may have problems
using the archive utility. For details, see __SEARCHFILENAMEONLY__ Direc-
tive, on page 213.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 111
Chapter 4: Setting up a Logic Synthesis Project Archiving Files and Projects

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
112 December 2015
CHAPTER 5

Specifying Constraints

This chapter describes how to specify constraints for your design. It covers
the following:
• Using the SCOPE Editor, on page 114
• Specifying SCOPE Constraints, on page 121
• Specifying Timing Exceptions, on page 132
• Finding Objects with Tcl find and expand, on page 138
• Using Collections, on page 147
• Converting SDC to FDC, on page 157
• Using the SCOPE Editor (Legacy), on page 159
The following chapters discuss related information:
• Chapter 4, Constraints (Reference Manual) for an overview of constraints
• Chapter 5, SCOPE Constraints Editor (Reference Manual) for a descrip-
tion of the SCOPE editor

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 113
Chapter 5: Specifying Constraints Using the SCOPE Editor

Using the SCOPE Editor


The SCOPE (Synthesis Constraints OPtimization Environment®) presents a
spreadsheet-like editor with a number of panels for entering and managing
timing constraints and synthesis attributes. The SCOPE GUI is good for
editing most constraints, but there are some constraints (like black box
constraints) which can only be entered as directives in the source files. The
SCOPE GUI also includes an advanced text editor that can help you edit
constraints easily.

These constraints are saved to the FPGA Design Constraint (FDC) file. The
FDC file contains Synopsys SDC Standard timing constraints (for example,
create_clock, set_input_delay, and set_false_path), along with the non-timing
constraints (design constraints) (for example, define_attribute, define_scope_col-
lection, and define_io_standard). When working with these constraints, use the
following processes:
• For existing designs, run the sdc2fdc script to translate legacy SDC
constraints and create a constraint file that contains Synopsys SDC
standard timing constraints and design constraints. For details about
this script, see Converting SDC to FDC, on page 157.
• For new designs, use the SCOPE editor. See Creating Constraints in the
SCOPE Editor, on page 114 for more information.
• For new designs, use the create_fdc_template Tcl command. See Creating
Constraints With the FDC Template Command, on page 119 for details.

Creating Constraints in the SCOPE Editor


The following procedure shows you how to use the SCOPE editor to create
constraints for the FDC constraint file.

1. To create a new constraint file, follow these steps:


– Compile the design (F7).
– Open the SCOPE window by:
Clicking the SCOPE icon in the toolbar ( ).
This brings up the New
LO Constraint File dialog box).

OR

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
114 December 2015
Using the SCOPE Editor Chapter 5: Specifying Constraints

Pressing Ctrl-n or selecting File -> New. This brings up the New dialog
box.

Both of these methods open the SCOPE editor GUI.

2. To open an existing file, do one of the following:


– Double-click the file from the Project view.
– Press Ctrl-o or select File->Open. In the dialog box, set the kind of file
you want to open to Constraint Files (SCOPE) (fdc), and double-click to
select the file from the list.

An empty SCOPE spreadsheet window opens. The tabs along the bottom of
the SCOPE window list the different kinds of constraints you can add. For
each kind of constraint, the columns contain specific data.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 115
Chapter 5: Specifying Constraints Using the SCOPE Editor

3. Select if you want to apply the constraint to the top-level or for modules
from the Current Design option drop-down menu located at the top of the
SCOPE editor.

4. You can enter or edit the following types of constraints:


– Timing constraints – on the Clocks, Generated Clocks, Inputs/Outputs,
Registers, or Delay Paths tab.
– Design constraints – on the Collections, Attributes, I/O Standards, or
Compile Points tab.

For details about these constraints, see Specifying SCOPE Constraints,


on page 121.

For information about ways to enter constraints within the SCOPE


editor, see Guidelines for Entering and Editing Constraints, on
LO
page 129.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
116 December 2015
Using the SCOPE Editor Chapter 5: Specifying Constraints

5. The free form constraint editor is located in the TCL View tab, which is
the last tab in SCOPE. The text editor has a help window on the right-
hand side. For more information about this text editor, see Using the
TCL View of SCOPE GUI, on page 127.

6. Click on the Check Constraints button to run the constraint checker. The
output provides information on how the constraints are interpreted by
the tool.

All constraint information is saved in the same FPGA Design Constraint file
(FDC) with clearly marked beginning and ending for each section. Do not
manually modify these pre-defined SCOPE sections.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 117
Chapter 5: Specifying Constraints Using the SCOPE Editor

The following example shows the contents of an FDC file.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
118 December 2015
Using the SCOPE Editor Chapter 5: Specifying Constraints

Creating Constraints With the FDC Template Command


Use the Tcl command create_fdc_template to create an initial constraint file (fdc)
for your specific design. This command lets you specify port clocks, I/O
delays, and initial set_clock_groups for the clocks for which text headers are
generated that can help guide you when creating this constraint.

The following procedure shows you how to create constraints in the FDC
constraints file with the create_fdc_template command:

1. Create a project for your design.

2. Compile the design.

3. At the command line, for example, you can specify the following:

create_fdc_template -period 10 -out_delay 1.5


The command automatically updates your project to reflect the new
constraint file(s). Do Ctrl+s to save the new settings.

Constraint File Added to the Project

4. If you open the SCOPE editor, you can check that the clock period and
output delay values were added to the constraint file as shown in the
following figure.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 119
Chapter 5: Specifying Constraints Using the SCOPE Editor

5. Each port clock includes a set_clock_groups header with details displayed


in the TCL View, which can help you determine whether clocks have been
optimized away or if there are any derived clocks.

However, if there is only one clock port and no derived clocks, no explicit
clock groups are created since they are not needed, as shown below.

For details about the command syntax, see create_fdc_template, on


page 26.

6. You can continue using the SCOPE editor to create other constraints.

7. Save the constraint file.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
120 December 2015
Specifying SCOPE Constraints Chapter 5: Specifying Constraints

Specifying SCOPE Constraints


Timing constraints define the performance goals for a design. The FPGA
synthesis tool supports a subset of the Synopsys SDC Standard timing
constraints (for example, create_clock, set_input_delay, and set_false_path). For
additional support, see Synopsys Standard Timing Constraints, on page 122.

Design constraints let you add attributes, define collections and specify
constraints for them, and select specific I/O standard pad types for your
design.

You can define both timing and design constraints in the SCOPE editor. For
the different types of constraints, see the following topics:
• Entering and Editing SCOPE Constraints
• Setting Clock and Path Constraints
• Defining Input and Output Constraints
• Specifying Standard I/O Pad Types
To set constraints for timing exceptions like false paths and multicycle paths,
see Specifying Timing Exceptions, on page 132.

For information about collections, see Using Collections, on page 147.

Entering and Editing SCOPE Constraints


This section contains a description of the timing and design constraints you
can enter in the SCOPE GUI that are saved to an FDC file. The SCOPE timing
constraint panels include:

SCOPE Panel See ... Tcl Commands


Clocks Clocks create_clock
set_clock_groups
set_clock_latency
set_clock_uncertainty
Generated Clocks Generated Clocks create_generated_clock

Collections Collections define_scope_collection

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 121
Chapter 5: Specifying Constraints Specifying SCOPE Constraints

SCOPE Panel See ... Tcl Commands


Inputs/Outputs Inputs/Outputs set_input_delay
set_output_delay
Registers Registers set_reg_input_delay
set_reg_output_delay
Delay Paths Delay Paths set_false_path
set_max_delay
set_multicycle_path
Attributes Attributes define_attribute
define_global_attribute
I/O Standards I/O Standards define_io_standard

Compile Points Compile Points define_compile_point


define_current_design
TCL View TCL View --

Synopsys Standard Timing Constraints


The FPGA synthesis tools support Synopsys standard timing constraints for a
subset of the clock definition (Clocks and Generated Clocks), I/O delay
(Inputs/Outputs), and timing exception constraints (Delay Paths).

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
122 December 2015
Specifying SCOPE Constraints Chapter 5: Specifying Constraints

Setting Clock and Path Constraints


The following table summarizes how to set different clock and path
constraints from the SCOPE window.

To define ... Pane Do this to set the constraint ...


Clocks Clock Select the clock object (Clock).
Specify a clock name (Clock Alias), if required.
Type a period (Period).
Change the rise and fall edge times for the clock.
waveforms of the clock in nanoseconds, if needed.
Change the default clock group, if needed.
Check the Enabled box.
See Defining Clocks, on page 165 for information
about clock attributes.
Generated Generated Select the generated clock object.
Clocks Clocks Specify the master clock source (a clock source pin in
the design).
Specify whether to use invert for the generated clock
signal.
Specify whether to use: edges, divide_by, or multiply_by.
Check the Enabled box.
Input/output Inputs/ See Defining Input and Output Constraints (Legacy),
delays Outputs on page 172 for information about setting I/O
constraints.
Maximum Delay Paths Select the Delay Type path of Max Delay.
path delay Select the start/from point for either a port or register
(From/Through). See Defining From/To/Through Points
for Timing Exceptions, on page 132 for more
information.
Select the end/to point for either an output port or
register. Specify a through point for a net or
hierarchical port/pin (To/Through).
Set the delay value (Max Delay).
Check the Enabled box.
Multicycle Delay Paths See Defining Multicycle Paths, on page 136.
paths

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 123
Chapter 5: Specifying Constraints Specifying SCOPE Constraints

To define ... Pane Do this to set the constraint ...


False paths Delay Paths See Defining False Paths, on page 137 for details.

Global Attributes Set Object Type to <global>.


attributes Select the object (Object).
Set the attribute (Attribute) and its value (Value).
Check the Enabled box.
Attributes Attributes Do either of the following:
• Select the type of object (Object Type).
Select the object (Object).
Set the attribute (Attribute) and its value (Value).
Check the Enabled box.
• Set the attribute (Attribute) and its value (Value).
Select the object (Object).
Check the Enabled box.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
124 December 2015
Specifying SCOPE Constraints Chapter 5: Specifying Constraints

Defining Input and Output Constraints


In addition to setting I/O delays in the SCOPE window as described in Setting
Clock and Path Constraints, on page 163, you can also set the Use clock period
for unconstrained IO option.
• Open the SCOPE window, click Inputs/Outputs, and select the port (Port).
You can set the constraint for
– All inputs and outputs (globally in the top-level netlist)
– For a whole bus
– For single bits
You can specify multiple constraints for the same port. The software
applies all the constraints; the tightest constraint determines the worst
slack. If there are multiple constraints from different levels, the most
specific overrides the more global. For example, if there are two bit
constraints and two port constraints, the two bit constraints override
the two port constraints for that bit. The other bits get the two port
constraints.
• Specify the constraint value in the SCOPE window:
– Select the type of delay: input or output (Type).
– Type a delay value (Value).
– Check the Enabled box, and save the constraint file in the project.
Make sure to specify explicit constraints for each I/O path you want to
constrain.
• To determine how the I/O constraints are used during synthesis, do the
following:
– Select Project->Implementation Options, and click Constraints.
– To use only the explicitly defined constraints disable Use clock period for
unconstrained IO.
– To synthesize with all the constraints, using the clock period for all
I/O paths that do not have an explicit constraint enable Use clock
period for unconstrained IO.
– Synthesize the design. When you forward-annotate the constraints,
the constraints used for synthesis are forward-annotated for place-
and-route.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 125
Chapter 5: Specifying Constraints Specifying SCOPE Constraints

• Input or output ports with explicitly defined constraints, but without a


reference clock (-ref option) are included in the System clock domain and
are considered to belong to every defined or inferred clock group.
• If you do not meet timing goals after place-and-route and you need to
adjust the input constraints; do the following:
– Open the SCOPE window with the input constraint.
– Use the set_clock_route_delay command to translates the -route option
for the constraint, so that you can specify the actual route delay in
nanoseconds, as obtained from the place-and-route results. Adding
this constraint is equivalent to putting a register delay on the input
register.
– Resynthesize your design.

Specifying Standard I/O Pad Types


You can specify a standard I/O pad type to use in the design. The equivalent
Tcl command is define_io_standard.

1. Open the SCOPE window and go to the I/O Standard tab.

2. In the Port column, select the port. This determines the port type in the
Type column.

3. Enter an appropriate I/O pad type in the I/O Standard column. The
Description column shows a description of the I/O standard you selected.

For details of supported I/O standards, see Industry I/O Standards, on


page 186.

4. Where applicable, set other parameters like drive strength, slew rate,
and termination.

You cannot set these parameter values for industry I/O standards
whose parameters are defined by the standard.

The software stores the pad type specification and the parameter values
in the syn_pad_type attribute. When you synthesize the design, the I/O
specifications are mapped to the appropriate I/O pads within the
technology. LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
126 December 2015
Specifying SCOPE Constraints Chapter 5: Specifying Constraints

Using the TCL View of SCOPE GUI


The TCL View of the SCOPE GUI is an advanced text file editor used for FPGA
timing and design constraints. This text editor provides the following capabil-
ities:
• Uses dynamic keyword expansion and tool tips for commands that
– Automatically completes the command from a popup list
– Displays complete command syntax as a tool tip
– Displays parameter options for the command from a popup list
– Includes a keyword command syntax help
• Checks command syntax and uses color indicators that
– Validates commands and command syntax
– Distinguishes between FPGA design constraints and SCOPE legacy
constraints
• Allows for standard editor commands, such as copy, paste,
comment/un-comment a group of lines, and highlighting of keywords

To use the TCL View of the SCOPE GUI:

1. Click on the TCL View of the SCOPE GUI.

2. You can specify FPGA design constraints as follows:


– Type the command; after you type three characters a popup menu
displays the design constraint command list. Select a command.
– When you type a dash (-), the options popup menu list is displayed.
Select an option.
– When you hover over a command, a tool tip is displayed for the
selected commands.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 127
Chapter 5: Specifying Constraints Specifying SCOPE Constraints

Command List Popup Menu

Options List Popup Menu

Command Tool Tip

3. You can also specify a command by using the constraints browser that
displays a constraints command list and associated syntax.
– Double-click on the specified constraint to add the command to the
editor window.
– Then, use the constraint syntax window to help you specify the
options for this command.
– Click on the Hide Syntax Help button at the bottom of the editor window
to close the syntax help
LO browser.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
128 December 2015
Specifying SCOPE Constraints Chapter 5: Specifying Constraints

Click on the Hide Syntax Help button


to close this browser

4. When you save this file, the constraint file is added to your project in the
Constraint directory if the Add to Project option is checked on the New
dialog box. Thereafter, you can double-click on the FDC constraint file to
open it in the text editor.

Guidelines for Entering and Editing Constraints


1. Enter or edit constraints as follows:
– For attribute cells in the spreadsheet, click in the cell and select from
the pull-down list of available choices.
– For object cells in the spreadsheet, click in the cell and select from
the pull-down list. When you select from the list, the objects
automatically have the proper prefixes in the SCOPE window.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 129
Chapter 5: Specifying Constraints Specifying SCOPE Constraints

Alternatively, you can drag and drop an object from an HDL Analyst
view into the cell, or type in a name. If you drag a bus, the software
enters the whole bus (busA). To enter busA[3:0], select the appropriate
bus bits before you drag and drop them. If you drag and drop or type
a name, make sure that the object has the proper prefix identifiers:

Prefix Identifiers Description for ...


v:design_name hierarchies or “views” (modules)

c:clock_name clocks

i:instance_name instances (blocks)

p:port_name ports (off-chip)

t:pin_name hierarchical ports, and pins of instantiated cells

b:name bits of a bus (port)

n:net_name internal nets

– For cells with values, type in the value or select from the pull-down
list.
– Click the check box in the Enabled column to enable the constraint or
attribute.
– Make sure you have entered all the essential information for that
constraint. Scroll horizontally to check. For example, to set a clock
constraint in the Clocks tab, you must fill out Enabled, Clock, Period,
and Clock Group. The other columns are optional. For details about
setting different kinds of constraints, go to the appropriate section
listed in Specifying SCOPE Constraints, on page 121.

2. For common editing operations, refer to this table:

To ... Do ...
Cut, copy, paste, Select the command from the popup (hold down the
undo, or redo right mouse button to get the popup) or from the
Edit menu.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
130 December 2015
Specifying SCOPE Constraints Chapter 5: Specifying Constraints

To ... Do ...
Copy the same value Select Fill Down (Ctrl-d) from the Edit or popup menus.
down a column
Insert or delete rows Select Insert Row or Delete Rows from the Edit or
popup menus.
Find text Select Find from the Edit or popup menus. Type the text
you want to find, and click OK.

3. Edit your constraint file if needed. If your naming conventions do not


match these defaults, add the appropriate command specifying your
naming convention to the beginning of the file, as shown in these
examples:

Default You use Add this to your file


Hierarchy separator A.B Slash: A/B set_hierarchy_separator {/}
Naming bit 5 of bus ABC ABC[5] Underscore bus_naming_style {%s_%d}
Naming row 2 bit 3 of ABC [2] [3] Underscore bus_dimension_separator_style {_}
array ABC [2x16] ABC[2_3]

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 131
Chapter 5: Specifying Constraints Specifying Timing Exceptions

Specifying Timing Exceptions


You can specify the following timing exception constraints, either from the
SCOPE interface or by manually entering the Tcl commands in a file:
• Multicycle Paths – Paths with multiple clock cycles.
• False Paths – Clock paths that you want the synthesis tool to ignore
during timing analysis and assign low (or no) priority during optimiza-
tion.
• Max Delay Paths – Point-to-point delay constraints for paths.
The following shows you how to specify timing exceptions in the SCOPE GUI.
For the equivalent Tcl syntax, see Chapter 2, Tcl Commands in the Reference
Manual.
• Defining From/To/Through Points for Timing Exceptions, on page 132
• Defining Multicycle Paths, on page 136
• Defining False Paths, on page 137
For information about resolving timing exception conflicts, see Conflict
Resolution for Timing Exceptions, on page 203 in the Reference Manual.

Defining From/To/Through Points for Timing Exceptions


For multi-cycle path, false path, and maximum path delay constraints, you
must define paths with a combination of From/To/Through points. Whenever the
tool encounters a conflict in the way timing-exception constraints are written,
see Conflict Resolution for Timing Exceptions, on page 203 to determine how
resolution occurs based on the priorities defined.

The following guidelines provide details for defining these constraints. You
must specify at least one From, To, or Through point.
• In the From field, identify the starting point for the path. The starting
point can be a clock, input or bidirectional port, or register. Only black
box output pins are valid. To specify multiple starting points:
– Such as the bits of aLO
bus, enclose them in square brackets: A[15:0] or
A[*].
– Select the first start point from the HDL Analyst view, then drag and
drop this instance into the From cell in SCOPE. For each subsequent

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
132 December 2015
Specifying Timing Exceptions Chapter 5: Specifying Constraints

instance, press the Shift key as you drag and drop the instance into
the From cell in SCOPE. For example, valid Tcl command format
include:
set_multicycle_path -from {i:aq i:bq} 2
set_multicycle_path -from [i:aq i:bq} -through {n:xor_all} 2
• In the To field, identify the ending point for the path. The ending point
can be a clock, output or bidirectional port, or register. Only black box
input pins are valid. To specify multiple ending points, such as the bits
of a bus, enclose them in square brackets: B[15:0].
• A single through point can be a combinational net, hierarchical port or
instantiated cell pin. To specify a net:
– Click in the Through field and click the arrow. This opens the Product of
Sums (POS) interface.
– Either type the net name with the n: prefix in the first cell or drag the
net from an HDL Analyst view into the cell.
– Click Save.
For example, if you specify n:net1, the constraint applies to any path
passing through net1.
• To specify an OR when constraining a list of through points, you can type
the net names in the Through field or you can use the POS UI. To do this:
– Click in the Through field and click the arrow. This opens the Product of
Sums interface.
– Either type the first net name in a cell in a Prod row or drag the net
from an HDL Analyst view into the cell. Repeat this step along the
same row, adding other nets in the Sum columns. The nets in each
row form an OR list.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 133
Chapter 5: Specifying Constraints Specifying Timing Exceptions

– Alternatively, select Along Row in the SCOPE POS interface. In an HDL


Analyst view, select all the nets you want in the list of through points.
Drag the selected nets and drop them into the POS interface. The tool
fills in the net names along the row. The nets in each row form an OR
list.
– Click Save.
The constraint works as an OR function and applies to any path passing
through any of the specified nets. In the example shown in the previous
figure, the constraint applies to any path that passes through net1 or
net2.
• To specify an AND when constraining a list of through points, type the
names in the Through field or do the following:
– Open the Product of Sums interface as described previously.
– Either type the first net name in the first cell in a Sum column or drag
the net from an HDL Analyst view into the cell. Repeat this step down
the same Sum column.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
134 December 2015
Specifying Timing Exceptions Chapter 5: Specifying Constraints

– Alternatively, select Down Column in the SCOPE POS interface. In an


HDL Analyst view, select all the nets you want in the list of through
points. Drag the selected nets and drop them into the POS interface.
The tool fills in the net names down the column.

The constraint works as an AND function and applies to any path


passing through all the specified nets. In the previous figure, the
constraint applies to any path that passes through net1 and net3.
• To specify an AND/OR constraint for a list of through points, type the
names in the Through field (see the following figure) or do the following:
– Create multiple lists as described previously.
– Click Save.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 135
Chapter 5: Specifying Constraints Specifying Timing Exceptions

In this example, the synthesis tool applies the constraint to the paths
through all points in the lists as follows:

net1 AND net3


OR net1 AND net4
OR net2 AND net3
OR net2 AND net4

Defining Multicycle Paths


To define a multicycle path constraint, use the Tcl set_multicycle_path
command, or select the SCOPE Delay Paths tab and do the following;

1. From the Delay Type pull-down menu, select Multicycle.

2. Select a port or register in the From or To columns, or a net in the Through


column. You must set at least one From, To, or Through point. You can use
a combination of these points. See Defining From/To/Through Points
for Timing Exceptions, on page 132 for more information.

3. Select another port or register if needed (From/To/Through).

4. Type the number of clock cycles or nets (Cycles).

5. Specify the clock period to use for the constraint by going to the Start/End
column and selecting either Start or End.

If you do not explicitly specify a clock period, the software uses the end
clock period. The constraint is now calculated as follows:

multicycle_distance = clock_distance + (cycles -1) * reference_clock_period

In the equation, clock_distance is the shortest distance between the


triggering edges of the start and end clocks, cycles is the number of
clock cycles specified, and reference_clock_period is either the specified
start clock period or the default end clock period.

6. Check the Enabled box.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
136 December 2015
Specifying Timing Exceptions Chapter 5: Specifying Constraints

Defining False Paths


You define false paths by setting constraints explicitly on the Delay Paths tab
or implicitly on the Clock tab. See Defining From/To/Through Points for
Timing Exceptions, on page 132 for object naming and specifying through
points.
• To define a false path between ports or registers, select the SCOPE Delay
Paths tab, and do the following:
– From the Delay Type pull-down menu, select False.
– Use the pull-down to select the port or register from the appropriate
column (From/To/Through).
– Check the Enabled box.
The software treats this as an explicit false constraint and assigns it the
highest priority. Any other constraints on this path are ignored.
• To define a false path between two clocks, select the SCOPE Clocks tab,
and assign the clocks to different clock groups:

The software implicitly assumes a false path between clocks in different


clock groups. This false path constraint can be overridden by a
maximum path delay constraint, or with an explicit constraint.
• To set an implicit false path on a path to/from an I/O port, do the
following:
– Select Project->Implementation Options->Constraints.
– Disable Use clock period for unconstrained IO.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 137
Chapter 5: Specifying Constraints Finding Objects with Tcl find and expand

Finding Objects with Tcl find and expand


The Tcl find and expand commands are powerful search tools that you can use
to quickly identify the objects you want. The following sections describe how
to use these commands effectively:
• Specifying Search Patterns for Tcl find, on page 138
• Refining Tcl Find Results with -filter, on page 140
• Using the Tcl Find Command to Define Collections, on page 141
• Using the Tcl expand Command to Define Collections, on page 143
• Checking Tcl find and expand Results, on page 144
• Using Tcl find and expand in Batch Mode, on page 145
Once you have located objects with the find or expand commands, you can
group them into collections, as described in Using Collections, on page 147,
and apply constraints to all the objects in the collection at the same time.

Specifying Search Patterns for Tcl find


The usage tips in the following table apply for Tcl find search patterns, regard-
less of whether you specify the find command in the SCOPE window or as a
Tcl command. For full details of the command syntax, refer to Tcl Find
Syntax, on page 91 of the Reference Manual.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
138 December 2015
Finding Objects with Tcl find and expand Chapter 5: Specifying Constraints

Case rules Use the case rules for the language from which the object
was generated:
• VHDL: case-insensitive
• Verilog: case-sensitive. Make sure that the object name
you type in the SCOPE window matches the Verilog
name.
For mixed language designs, use the case rules for the
parent module. The top level for this example is VHDL,
so the following command finds any object in the current
view that starts with either a or A:
find {a*} -nocase
Pattern matching You have two pattern-matching choices:
• Specify the -regexp argument, and then use regular
expressions for pattern matching.
• Do not specify -regexp, and use only the * and ?
wildcards for pattern matching.
For hierarchical instance names that use dots as
separators, the dots must be escaped with a backward
slash (\). For example: abc\.d.
Scope of the search The scope of the search varies, depending on where you
enter the command. If you enter it in the SCOPE
environment, the scope of the search is the entire
database, but if it is entered in the Tcl window, the
default scope of the search is the current HDL Analyst
view. See Comparison of Methods for Defining
Collections, on page 147 for a list of the differences.
To set the scope to include the hierarchial levels below
the current view in HDL Analyst, use the -hier argument.
This example finds all objects below the current view that
begin with a:
find {a*} -hier
Restricting search by Use the -object_type argument. The following command
type of object finds all nets that contain syn:
find -net {*syn*}
Restricting search by Use the -filter option, as described in Refining Tcl Find
object property Results with -filter, on page 140.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 139
Chapter 5: Specifying Constraints Finding Objects with Tcl find and expand

Refining Tcl Find Results with -filter


The -filter option of the find command lets you further refine the objects located
by the find command, according to their properties. When used with other
commands, it can be a powerful tool for generating statistics and for evalua-
tion. To filter your find results, follow these steps:

1. Enable property annotation.


– Select Project->Implementation Options. On the Device tab, enable Annotated
Properties for Analyst. Alternatively, use the equivalent Tcl command:
set_option -run_prop_extract 1.

– Compile or synthesize the design. After compilation, the tool


annotates the design with properties that you can specify with the
-filter option, like clock pins.

2. Specify the command using the find pattern as usual, and then specify
the -filter option as the last argument:

find searchPattern -filter expression


find searchPattern -filter !expression

With this command, the tool first finds objects that match the find search-
Pattern, and then further filters the found objects the according to the
property criteria specified in -filter expression. Use the ! character before
expression if you want to select objects that do not match the properties
LO
specified in the filter expression.

expression can be a property name, specified as @propertyName, or a


property name and value pair, specified as @propertyName operator value.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
140 December 2015
Finding Objects with Tcl find and expand Chapter 5: Specifying Constraints

The following example finds registers in the current view that are
clocked by myclk:

find -seq {*} -filter {@clock==myclk}


For further information about the command, see the following:

For ... See


Tips on using find search Specifying Search Patterns for Tcl find, on
patterns page 138
find syntax details find, on page 90 in the Reference Manual
find -filter syntax details find -filter, on page 100in the Reference Manual

Examples of Useful Find -filter Commands


To find ... Use a command like this example ...
Instances by slack value set slack [find –hier –inst {*} –filter @slack <= {-1.000}]
Instances with negative slack set negFF [find –hier –inst {*} –filter @slack <= {0.0}]
Instances within a slack set slackRange [find –hier –inst {*} –filter @slack <=
range {-1.000} && @slack >= {+1.000}]
Pins by fanout value set pinResult [find –pin *.CE –hier –filter {@fanout > 15
&& @slack < 0.0} -print]
Sequential elements within a set clk1FF [find –hier -seq * –filter {@clock==clk1]
clock domain
Sequential components by set fdrse [find –hier –seq {*} –filter @view=={FDRSE}
primitive type

Using the Tcl Find Command to Define Collections


It is recommended that you use the SCOPE window rather than the Tcl
window described here to specify the find command, for the reasons described
in Comparison of Methods for Defining Collections, on page 147.

The Tcl find command returns a collection of objects. If you want to create a
collection of connectivity-based objects, use the Tcl expand command instead
of find (Specifying Search Patterns for Tcl find, on page 138). This section lists
some tips for using the Tcl find command.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 141
Chapter 5: Specifying Constraints Finding Objects with Tcl find and expand

1. Create a collection by typing the set command and assigning the results
to a variable. The following example finds all instances with a primitive
type DFF and assigns the collection to the variable $result:

set result [find -hier -inst {*} -filter @ view == DFF]


The result is a random number like s:49078472, which is the collection of
objects found. The following table lists some usage tips for specifying the
find command. For full details of the syntax, refer to Tcl Find Syntax, on
page 91 of the Reference Manual.

2. Check your find constraints. See Checking Tcl find and expand Results,
on page 144.

3. Once you have defined the collection, you can view the objects in the
collection, using one of the following methods, which are described in
more detail in Viewing and Manipulating Collections with Tcl
Commands, on page 153:
– Print the collection using the -print option to the find command.
– Print the collection without carriage returns or properties, using c_list.
– Print the collection in columns, with optional properties, using c_print.
4. To manipulate the objects in the collection, use the commands
described in Viewing and Manipulating Collections with Tcl Commands,
on page 153.

5. Combine the Tcl find command with other commands:

To ... Combine with ...


Create or copy objects; create collections set
define_collection

Generate reports for evaluation c_list


c_print

Generate statistics c_info

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
142 December 2015
Finding Objects with Tcl find and expand Chapter 5: Specifying Constraints

Using the Tcl expand Command to Define Collections


The Tcl expand command returns a list of objects that are logically connected
between the specified expansion points. This section contains tips on using
the Tcl expand command to generate a collection of objects that are related by
their connectivity. For the syntax details, refer to expand, on page 107 in the
Command Reference Manual.

1. Specify at least one from, to, or thru point as the starting point for the
command. You can use any combination of these points.

The following example expands the cone of logic between reg1 and reg2.

expand -from {i:reg1} -to {i:reg2}


If you only specify a thru point, the expansion stops at sequential
elements. The following example finds all elements in the transitive
fanout and transitive fanin of a clock-enable net:

expand -thru {n:cen}

2. To specify the hierarchical scope of the expansion, use the -hier


argument.

If you do not specify this argument, the command only works on the
current view. The following example expands the cone of logic to reg1,
including instances below the current level:

expand -hier -to {i:reg1}


If you only specify a thru point, you can use the -level argument to specify
the number of levels of expansion. The following example finds all
elements in the transitive fanout and transitive fanin of a clock-enable
net across one level of hierarchy:

expand -thru {n:cen} -level 1

3. To restrict the search by type of object, use the -object_type argument.

The following command finds all pins driven by the specified pin.

expand -pin -from {t:i_and3.z}

4. To print a list of the objects found, either use the -print argument to the
expand command, or use the c_print or c_list commands (see Creating
Collections using Tcl Commands, on page 150).

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 143
Chapter 5: Specifying Constraints Finding Objects with Tcl find and expand

Checking Tcl find and expand Results


You must check the validity of the find constraints you set. Use the methods
described below.

1. Run the Constraints Checker, either from the UI or at the command


line:
– From the UI, select Run->Constraint Check.
– At the command line specify the -run constraint_check option to the
synthesis tool command. For example: synplify_pro -batch design.prj -run
constraint_check.
– If there are issues, the tool reports them in the design_cck.rpt report
file. Check the Summary and Inapplicable Constraints sections in this file.

2. To list objects selected by the find or expand commands, use one of these
methods:
– List the results by specifying the -print option to the command.
– List the results with the c_list command.
– Print out the results one item per line, using the c_print command.
3. To visually validate the objects selected by the find or expand commands,
do the following:
– Run the command and save the results as a collection.
– On the SCOPE Collections tab, select the collection.
– Right-click and choose Select in Analyst. The objects in the collection
are highlighted in the RTL view. The example below shows high
fanout nets that drive more than 20 destinations.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
144 December 2015
Finding Objects with Tcl find and expand Chapter 5: Specifying Constraints

Using Tcl find and expand in Batch Mode


When you use the Tcl find command in batch mode, you must specify the
open_design command before the find or expand commands.

1. Create the Tcl file to be run in batch mode, making sure that the
open_design command precedes the find/expand commands you want.

This batch script uses the find command to find MACC and negative
slack, and then writes out the results to separate text files:

open_design implementation_a/top.srm
set find_MACC [find -hier –inst{*} -filter @view == {MACC*}]
set find_negslack [find -hier –seq –inst {*} -filter @slack
< {-0.0}]

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 145
Chapter 5: Specifying Constraints Finding Objects with Tcl find and expand

c_print $find_MACC -file MACC.txt


c_print -prop slack -prop view $find_negslack -file negslack.txt
You cannot include the Tcl find command in Timing Analyzer scripts.
Instead, run Tcl Find to TXT command and use the results.

2. Run the script at the command line. For example, if the file created in
step 1 was called analysis.tcl, specify it at the command line, as shown
below:

synplify_pro -batch analysis.tcl


The tool generates two text files as specified, with the results of the two
searches. The MACC.txt file lists the MACC, and the negslack.txt file lists
the instances with negative slack.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
146 December 2015
Using Collections Chapter 5: Specifying Constraints

Using Collections
A collection is a defined group of objects. The advantage offered by collections
is that you can operate on all the objects in the collection at the same time. A
collection can consist of a single object, multiple objects, or even other collec-
tions. You can either define collections in the SCOPE window or type the
commands in the Tcl script window.
• Creating and Using SCOPE Collections, on page 148
• Creating Collections using Tcl Commands, on page 150
• Viewing and Manipulating Collections with Tcl Commands, on page 153

Comparison of Methods for Defining Collections


You can enter the find and expand Tcl commands that are used to define
collections in either the Tcl script window or in the SCOPE window. It is
recommended that you use the SCOPE interface for the reasons outlined
below:

SCOPE Window Tcl Window


Database Top level; includes all Current Analyst view, which might be a
used objects. lower-level view. If the current view is the
See the example below. Technology view after mapping, objects
might be renamed, replicated, or removed.
Persistence Collection saved in Collection only valid for the current
project file. session; you must redefine it the next time
you open the project.
Constraints Can apply to collection. Cannot apply to collection.

In the design shown below, if you push down into B, and then type find
-hier a* in the Tcl window, the command finds a3 and a4. However if you cut
and paste the same command into the SCOPE Collections tab, your results
would include a1, a2, a3, and a4, because the SCOPE interface uses the top-
level database and searches the entire hierarchy.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 147
Chapter 5: Specifying Constraints Using Collections

Top
B
a1

a2 a4 a3

Creating and Using SCOPE Collections


The following procedure shows you how to define collections in the SCOPE
window. The SCOPE method is preferred over typing the commands in the Tcl
window (Creating Collections using Tcl Commands, on page 150) for the
reasons described in Comparison of Methods for Defining Collections, on
page 147.

1. Define a collection by doing the following:


– Open the SCOPE window and click the Collections tab.
– In the Name column, type a name for the collection.

– In the Command column, enter the command. See the Command


Reference for complete syntax details. Additional information about
specifying search patterns is described in Specifying Search Patterns
for Tcl find, on page 138.
You can also paste in a command. If you cut and paste a Tcl Find
command from the Tcl window into the SCOPE Collections tab,
remember that the SCOPE interface works on the top-level database,
while the find command
LO in the Tcl window works on the current level
displayed in the Analyst view.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
148 December 2015
Using Collections Chapter 5: Specifying Constraints

Objects in a collection do not have to be of the same type. The


collections shown in the preceding figure do the following:

Collection Finds ...


find_all All components in the module endpMux

find_reg All registers in the module endpMux

find_comb All combinatorial components under endpMux

The collections you define appear in the SCOPE pull-down object


lists, so you can use them to define constraints.
You can crossprobe the objects selected by the find and expand
commands by right-clicking and choosing Select in Analyst column. The
schematic views highlight the objects located by these commands.
For other viewing operations, see Viewing and Manipulating
Collections with Tcl Commands, on page 153.

2. To create a collection that is made up of other collections, do this:


– Define the collections as described in the previous step. These
collections must be defined before you can concatenate them or add
them together in a new collection.
– To concatenate collections or add to collections, type a name for the
new collection in the Name column. Type the appropriate operator
command like c_union or c_diff in the Command column. See Creating
Collections using Tcl Commands, on page 150 for a list of available
commands and the Command Reference for their syntax.

The software saves the collection information in the constraint file for
the project.

3. To apply constraints to a collection do the following:


– Define a collection as described in the previous steps.
– Go to the appropriate SCOPE tab and specify the collection name
where you would normally specify the object name. Collections
defined in the SCOPE interface are available from the pull-down
object lists. The following figure shows the collections defined in step
1 available for setting a false path constraint.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 149
Chapter 5: Specifying Constraints Using Collections

– Specify the rest of the constraint as usual. The software applies the
constraint to all the objects in the collection.

Creating Collections using Tcl Commands


This section describes how to use the Tcl collection commands at the
command line or in a script instead of entering them in the SCOPE window
(Creating and Using SCOPE Collections, on page 148). There are differences
in operation depending on where the collection commands are entered, and it
is recommended that you use the SCOPE window, for the reasons described
in Comparison of Methods for Defining Collections, on page 147.

For details of the syntax for the commands described here, refer to Collec-
tions, on page 169 in the Reference Manual.

1. To create a collection using a Tcl command line command, name it with


the set command and assign it to a variable.

A collection can consist of individual objects, Tcl lists (which can consist
of a single element), or other collections. You can embed the Tcl find and
expand commands in the set command to locate objects for the collection
(see Using the Tcl Find Command to Define Collections, on page 141
and Specifying Search Patterns for Tcl find, on page 138). The following
example creates a collection called my_collection which consists of all the
modules (views) found by the embedded find command:

set my_collection [find -view {*}]

2. To create collections derived from other collections, do the following:


– Define a new variableLOfor the collection.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
150 December 2015
Using Collections Chapter 5: Specifying Constraints

– Create the collection with one of the operator commands from this
table:

To ... Use this command ...


Add objects to a collection c_union. See Examples: c_union
Command, on page 151
Concatenate collections c_union. See Examples: c_union
Command, on page 151.
Isolate differences between c_diff. See Examples: c_diff Command, on
collections page 152.
Find common objects between c_intersect. See Examples: c_intersect
collections Command, on page 152.
Find objects that belong to just c_symdiff. See Examples: c_symdiff
one collection Command, on page 153.

3. If your Tcl collection includes instances that use special characters,


make sure to use extra curly braces or use a backslash to escape the
special character.

Curly Braces{} define_scope_collection GRP_EVENT_PIPE2 {find -seq


{EventMux\[2\].event_inst?_sync[*]} -hier}
define_scope_collection mytn {find -inst {i:count1.co[*]}}

Backslash Escape define_scope_collection mytn {find -inst i:count1.co\[*\]}


Character (\)

Once you have created a collection, you can do various operations on the
objects in the collection (see Viewing and Manipulating Collections with Tcl
Commands, on page 153), but you cannot apply constraints to the collection.

Examples: c_union Command


This example adds the reg3 instance to collection1, which contains reg1 and
reg2 and names the new collection sumCollection.

set sumCollection [c_union $collection1 {i:reg3}]


c_list $sumCollection
{"i:reg1" "i:reg2" "i:reg3"}

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 151
Chapter 5: Specifying Constraints Using Collections

If you added reg2 and reg3 with the c_union command, the command removes
the redundant instances (reg2) so that the new collection would still consist of
reg1, reg2, and reg3.

This example concatenates collection1and collection2 and names the new collec-
tion combined_collection:

set combined_collection [c_union $collection1 $collection2]

Examples: c_diff Command


This example compares a list to a collection (collection1) and creates a new
collection called subCollection from the list of differences:

set collection1 {i:reg1 i:reg2}


set subCollection [c_diff $collection1 {i:reg1}]
c_print $subCollection
"i:reg2"

You can also use the command to compare two collections:

set reducedCollection [c_diff $collection1 $collection2]

Examples: c_intersect Command


This example compares a list to a collection (collection1) and creates a new
collection called interCollection from the objects that are common:

set collection1 {i:reg1 i:reg2}


set interCollection [c_intersect $collection1 {i:reg1 i:reg3}]
c_print $interCollection
"i:reg1"

You can also use the command to compare two collections:

set common_collection [c_intersect $collection1 $collection2]

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
152 December 2015
Using Collections Chapter 5: Specifying Constraints

Examples: c_symdiff Command


This example compares a list to a collection (collection1) and creates a new
collection called diffCollection from the objects that are different. In this case,
reg1 is excluded from the new collection because it is in the list and collection1.

set collection1 {i:reg1 i:reg2}


set diffCollection [c_symdiff $collection1 {i:reg1 i:reg3}]
c_list $diffCollection
{"i:reg2" "i:reg3"}

You can also use the command to compare two collections:

set symdiff_collection [c_symdiff $collection1 $collection2]

Examples: Names with Special Characters


Your instance names might include special characters, as for example when
your HDL code uses a generate statement. If your instance names have special
characters, do the following:

Make sure that you include extra curly braces {}, as shown below:

define_scope_collection GRP_EVENT_PIPE2 {find -seq


{EventMux\[2\].event_inst?_sync[*]} -hier}
define_scope_collection mytn {find -inst {i:count1.co[*]}}

Alternatively, use a backslash to escape the special character:

define_scope_collection mytn {find -inst i:count1.co\[*\]}

Viewing and Manipulating Collections with Tcl Commands


The following section describes various operations you can do on the collec-
tions you defined. For full details of the syntax, see Collections, on page 169
in the Reference Manual.

1. To view the objects in a collection, use one of the methods described in


subsequent steps:
– Select the collection in an HDL Analyst view (step 2).
– Print the collection without carriage returns or properties (step 3).
– Print the collection in columns (step 4).
– Print the collection in columns with properties (step 5).

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 153
Chapter 5: Specifying Constraints Using Collections

2. To select the collection in an HDL Analyst view, type select <collection>.

For example, select $result highlights all the objects in the $result collec-
tion.

3. To print a simple list of the objects in the collection, uses the c_list
command, which prints a list like the following:

{i:EP0RxFifo.u_fifo.dataOut[0]} {i:EP0RxFifo.u_fifo.dataOut[1]}
{i:EP0RxFifo.u_fifo.dataOut[2]} ...
The c_list command prints the collection without carriage returns or
properties. Use this command when you want to perform subsequent
Tcl commands on the list. See Example: c_list Command, on page 156.

4. To print a list of the collection objects in column format, use the c_print
command. For example, c_print $result prints the objects like this:

{i:EP0RxFifo.u_fifo.dataOut[0]}
{i:EP0RxFifo.u_fifo.dataOut[1]}
{i:EP0RxFifo.u_fifo.dataOut[2]}
{i:EP0RxFifo.u_fifo.dataOut[3]}
{i:EP0RxFifo.u_fifo.dataOut[4]}
{i:EP0RxFifo.u_fifo.dataOut[5]}

5. To print a list of the collection objects and their properties in column


format, use the c_print command as follows:
– Annotate the design with a full list of properties by selecting
Project->Implementation Options, going to the Device tab, and enabling
Annotated Properties for Analyst. Synthesize the design. If you do not
enable the annotation option, properties like clock pins will not be
annotated as properties.
– Check the properties available by right-clicking on the object in the
HDL Analyst view and selecting Properties from the popup menu. You
see a window with a list of the properties that can be reported.
– In the Tcl window, type the c_print command with the -prop option. For
example, typing c_print -prop slack -prop view -prop clock $result lists the
objects in the $result collection, and their slack, view and clock
properties.

Object Name slack view clock


LO
{i:EP0RxFifo.u_fifo.dataOut[0]} 0.3223 "FDE" clk
{i:EP0RxFifo.u_fifo.dataOut[1]} 0.3223 "FDE" clk
{i:EP0RxFifo.u_fifo.dataOut[2]} 0.3223 "FDE" clk
{i:EP0RxFifo.u_fifo.dataOut[3]} 0.3223 "FDE" clk

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
154 December 2015
Using Collections Chapter 5: Specifying Constraints

{i:EP0RxFifo.u_fifo.dataOut[4]} 0.3223 "FDE" clk


{i:EP0RxFifo.u_fifo.dataOut[5]} 0.3223 "FDE" clk
{i:EP0RxFifo.u_fifo.dataOut[6]} 0.3223 "FDE" clk
{i:EP0RxFifo.u_fifo.dataOut[7]} 0.3223 "FDE" clk
{i:EP0TxFifo.u_fifo.dataOut[0]} 0.1114 "FDE" clk
{i:EP0TxFifo.u_fifo.dataOut[1]} 0.1114 "FDE" clk
– To print out the results to a file, use the c_print command with the -file
option. For example, c_print -prop slack -prop view -prop clock $result -file
results.txt writes out the objects and properties listed above to a file
called results.txt. When you open this file, you see the information in a
spreadsheet format.

6. You can do a number of operations on a collection, as listed in the


following table. For details of the syntax, see Collections, on page 169 in
the Reference Manual.

To ... Do this ...


Copy a collection Create a new variable for the copy and copy the original
collection to it with the set command. When you make
changes to the original, it does not affect the copy, and
vice versa.
set my_collection_copy $my_collection
List the objects in a Use the c_print command to view the objects in a
collection collection, and optionally their properties, in column
format:
"v:top"
"v:block_a"
"v:block_b"
Alternatively, you can use the -print option to an
operation command to list the objects.
Generate a Tcl list Use the c_list command to view a collection or to convert
of the objects in a a collection into a Tcl list. You can manipulate a Tcl list
collection with standard Tcl commands. In addition, the Tcl
collection commands work on Tcl lists.
This is an example of c_list results:
{"v:top" "v:block_a" "v:block_b"}
Alternatively, you can use the -print option to an
operation command to list the objects.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 155
Chapter 5: Specifying Constraints Using Collections

Example: c_list Command


The following provides a practical example of how to use the c_list command.
This example first finds all the CE pins with a negative slack that is less than
0.5 ns and groups them in a collection:

set get_components_list [c_list [find -hier -pin {*.CE} -filter


@slack < {0.5}]]

The c_list command returns a list:

{t:EP0RxFifo.u_fifo.dataOut[0].CE}
{t:EP0RxFifo.u_fifo.dataOut[1].CE}
{t:EP0RxFifo.u_fifo.dataOut[2].CE} ...

You can use the list to find the terminal (pin) owner:

proc terminal_to_owner_instance {terminal_name terminal_type} {


regsub -all $terminal_type$ $terminal_name {} suffix
regsub -all {^t:} $suffix {i:} prefix
return $prefix
}
foreach get_component $get_components_list {
append owner [terminal_to_owner_instance $get_component {.CE}]
" "
}
puts "terminal owner is $owner"

This returns the following, which shows that the terminal (pin) has been
converted to the owning instance:

terminal owner is i:EP0RxFifo.u_fifo.dataOut[0]


i:EP0RxFifo.u_fifo.dataOut[1] i:EP0RxFifo.u_fifo.dataOut[2]

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
156 December 2015
Converting SDC to FDC Chapter 5: Specifying Constraints

Converting SDC to FDC


The sdc2fdc Tcl shell command translates legacy FPGA timing constraints to
Synopsys FPGA timing constraints. From the Tcl command line in the
synthesis tool, the sdc2fdc command scans the input SDC files and attempts
to convert constraints for the implementation.

To run the sdc2fdc Tcl shell command:

1. Load your Project file.

2. From the Tcl command line, type:

sdc2fdc

3. Check the constraint results directory for details about this translation.

4. The new constraints file is automatically updated for your project. Save
the new settings.

The constraint results directory is created at

projectDir/FDC_constraints/implName
This directory includes the following results files:
– topLevel_translated.fdc – Contains the Synopsys FPGA design
constraints (FPGA design constraints and the Synopsys standard
timing constraints)
– topLevel|compilePoint_translate.log – Contains details about the
translation. Translation error messages explain issues and how to fix
them. Any translation errors not addressed when you run synthesis
appear in the SRR log file, but does not stop synthesis from running.

5. Open the FDC file resulting from translation in the FPGA SCOPE editor
to check these constraints and make any changes to them.

6. Run the constraints checker.

7. Save this version of the FDC to run synthesis.

For information about the FDC file, see FDC Constraints, on page 146.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 157
Chapter 5: Specifying Constraints Converting SDC to FDC

Note: Since the basic Synplify product does not have a Tcl window, you must
run sdc2fdc from a command shell in batch mode. The syntax is:

synplify -batch test.prj -tclcmd "sdc2fdc -batch"

For details about the translated files and troubleshooting guidelines, see
sdc2fdc Conversion, on page 149.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
158 December 2015
Using the SCOPE Editor (Legacy) Chapter 5: Specifying Constraints

Using the SCOPE Editor (Legacy)


You can use the Legacy SCOPE editor for the SDC constraint files created
before release version G-2012.09. However, it is recommended that you
translate your SDC files to FDC files to enable the latest version of the SCOPE
editor and to utilize the enhanced timing constraint handling in the tool. The
latest version of the SCOPE editor automatically formats timing constraints
using Synopsys Standard syntax (such as create_clock, and set_multicyle_path).

To do this, add your SDC constraint files to your project and run the following
at the command line:

% sdc2fdc

This feature translates all SDC files in your project.

If you choose to do so, the following procedure shows you how to use the
legacy SCOPE editor to create constraints for the constraint file (SDC).

1. Open an existing file for editing.


– Make sure you have closed the SCOPE window, or you could
overwrite previous constraints.
– Double-click on an existing constraint file (sdc) in the project.
– Select File->Open, set the Files of Type filter to Constraint Files (sdc) and
open the file you want.

2. Enter the timing or design constraints you need.

Use SCOPE ... To Define ...


Clocks Clock frequencies
define_clock. See Defining Clocks, on page 165
for additional information.
Clock frequency other than the one implied by
the signal on the clock pin
syn_reference_clock (attribute). See Defining
Clocks, on page 165 for additional information
Clock domains with asymmetric duty cycles
define_clock. See Defining Clocks, on page 165
for additional information

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 159
Chapter 5: Specifying Constraints Using the SCOPE Editor (Legacy)

Use SCOPE ... To Define ...


Clock to Clock Edge-to-edge clock delays
define_clock_delay. See Defining Clocks, on
page 165 for additional information
Collections Set constraints for a group of objects you have
defined as a collection with the Tcl command.

Inputs/Outputs Speed up paths feeding into a register


define_reg_input_delay.

Speed up paths coming from a register


define_reg_output_delay.

Registers Input delays from outside the FPGA


define_input_delay. See Defining Input and
Output Constraints (Legacy), on page 172 for
additional information
Output delays from your FPGA
define_output_delay. See Defining Input and
Output Constraints (Legacy), on page 172 for
additional information
Delay Paths Paths with multiple clock cycles
define_multicycle_path. See Defining Multicycle
Paths, on page 136 for additional information
False paths (certain technologies)
define_false_path. See Defining False Paths
(Legacy), on page 174 for additional
information.
Path delays
define_path_delay. See Defining
From/To/Through Points for Timing
Exceptions, on page 132 for additional
information
Attributes Assign attributes for objects specifying their
values

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
160 December 2015
Using the SCOPE Editor (Legacy) Chapter 5: Specifying Constraints

Use SCOPE ... To Define ...


I/O Standards Define an I/O standard for ports
Compile Points Specify compile points for your design
Other Enter newly-supported constraints for advanced
users.

Entering and Editing SCOPE Constraints (Legacy)


Enter constraints directly in the SCOPE window. You can use the Initialize
Constraint panel to enter default constraints, and then use the direct method
to modify, add, or delete constraints.

The tool also lets you add constraints automatically. For information about
auto constraints, see Using Auto Constraints, on page 295.

1. Click the appropriate tab at the bottom of the window to enter the kind
of constraint you want to create:

To define ... Click ...


Clock frequency for a clock signal output of clock divider logic Clocks
A specific clock frequency that overrides the global frequency
Edge-to-edge clock delay that overrides the automatically Clock to
calculated delay. Clock
Constraints for a group of objects you have defined as a Collections
collection with the Tcl command. For details, see Creating and
Using SCOPE Collections, on page 148.
Input/output delays that model your FPGA input/output Inputs/
interface with the outside environment Outputs
Delay constraints for paths feeding into/out of registers Registers
Paths that require multiple clock cycles Delay Paths
Paths to ignore for timing analysis (false paths) Delay Paths
Maximum delay for paths Delay Paths
Attributes, like syn_reference_clock, that were not entered in the Attributes
source files

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 161
Chapter 5: Specifying Constraints Using the SCOPE Editor (Legacy)

To define ... Click ...


I/O standards for any port in the I/O Standard panel of the I/O Standard
SCOPE window.
Compile points in a top-level constraint file. See Synthesizing Compile
Compile Points, on page 387 for more information about Points
compile points.
Place and route tool constraints Other
Other constraints not used for synthesis, but which are passed
to other tools. For example, multiple clock cycles from a
register or input pin to a register or output pin

The SCOPE window displays columns appropriate to the kind of


constraint you picked. You can now enter constraints using the wizard,
or work directly in the SCOPE window.

2. Save the file by clicking the Save icon and naming the file.

The software creates a TCL constraint file (sdc). See Working with
Constraint Files, on page 52 for information about the commands in this
file.

3. To apply the constraints to your design, you must add the file to the
project now or later.
– Add it immediately by clicking Yes in the prompt box that opens after
you save the constraint file.
– Add it later, following the procedure for adding a file described in
Making Changes to a Project, on page 62.

Specifying SCOPE Timing Constraints (Legacy)


You can define timing constraints in the SCOPE GUI, which automatically
generates a Tcl constraints file, or manually with a text editor, as described in
Using a Text Editor for Constraint Files (Legacy), on page 54.

The SCOPE GUI is much easier to use, and you can define various timing
constraints in it. For the equivalent Tcl syntax, see Chapter 2, Tcl Commands
in the Reference Manual. SeeLO the following for different timing constraints:
• Entering Default Constraints, on page 163

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
162 December 2015
Using the SCOPE Editor (Legacy) Chapter 5: Specifying Constraints

• Setting Clock and Path Constraints, on page 163


• Defining Clocks, on page 165
• Defining Input and Output Constraints (Legacy), on page 172
• Specifying Standard I/O Pad Types, on page 126
To set constraints for timing exceptions like false paths and multicycle paths,
see Specifying Timing Exceptions, on page 132.

Entering Default Constraints


To edit or set individual constraints, or to create constraints in the Other tab,
work directly in the SCOPE window (Setting Clock and Path Constraints, on
page 163). For auto constraints in the Synplify Pro tool, see Using Auto
Constraints, on page 295. To apply the constraints, add the file to the project
according to the procedure described in Making Changes to a Project, on
page 62. The constraints file has an sdc extension. See Working with
Constraint Files, on page 52 for more information about constraint files.

Setting Clock and Path Constraints


The following table summarizes how to set different clock and path
constraints from the SCOPE window. For information about setting compile
point constraints or attributes, see Synthesizing Compile Points, on page 387
for more information about compile points and Specifying Attributes Using
the SCOPE Editor, on page 92. For information about setting default
constraints, see Entering Default Constraints, on page 163.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 163
Chapter 5: Specifying Constraints Using the SCOPE Editor (Legacy)

To define ... Pane Do this to set the constraint ...


Clocks Clock Select the clock object (Clock).
Specify a clock name (Clock Alias), if required.
Type a frequency value (Frequency) or a period (Period).
Change the default Duty Cycle or set Rise/Fall At, if
needed.
Change the default clock group, if needed
Check the Enabled box.
See Defining Clocks, on page 165 for information
about clock attributes.
Virtual Clock Set the clock constraints as described for clocks, above.
clocks Check the Virtual Clock box.
Route delay Clock Specify the route delay in nanoseconds. Refer to
Inputs/ Defining Clocks, on page 165, Defining Input and
Outputs Output Constraints (Legacy), on page 172 and the
Register Delays section of this table details.
Registers
Edge-to-edge Clock to Select the starting edge for the delay constraint (From
clock delay Clock Clock Edge).
Select the ending edge for the constraint (To Clock Edge).
Enter a delay value.
Mark the Enabled check box.
Input/output Inputs/ See Defining Input and Output Constraints (Legacy),
delays Outputs on page 172 for information about setting I/O
constraints.
Register Registers Select the register (Register).
delays Select the type of delay, input or output (Type).
Type a delay value (Value).
Check the Enabled box.
If you do not meet timing goals after place-and-route,
adjust the clock constraint as follows:
• In the Route column for the constraint, specify the
actual route delay (in nanoseconds), as obtained from
the place-and-route results. Adding this constraint is
equivalent to putting a register delay on that input
register.
• Resynthesize your design.
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
164 December 2015
Using the SCOPE Editor (Legacy) Chapter 5: Specifying Constraints

To define ... Pane Do this to set the constraint ...


Maximum Delay Path Select the Delay Type path of Max Delay.
path delay Select the port or register (From/Through). See Defining
From/To/Through Points for Timing Exceptions, on
page 132 for more information.
Select another port or register if needed (To/Through).
Set the delay value (Max Delay).
Check the Enabled box.
Multi-cycle Delay Paths See Defining Multicycle Paths, on page 136.
paths
False paths Delay Paths See Defining False Paths (Legacy), on page 174 for
Clock to details.
Clock
Global Attributes Set Object Type to <global>.
attributes Select the object (Object).
Set the attribute (Attribute) and its value (Value).
Check the Enabled box.
Attributes Attributes Do either of the following:
• Select the type of object (Object Type).
Select the object (Object).
Set the attribute (Attribute) and its value (Value).
Check the Enabled box.
• Set the attribute (Attribute) and its value (Value).
Select the object (Object).
Check the Enabled box.
Other Other Type the TCL command for the constraint (Command).
Enter the arguments for the command (Arguments).
Check the Enabled box.

Defining Clocks
Clock frequency is the most important timing constraint, and must be set
accurately. If you are planning to auto constrain your design (Using Auto
Constraints, on page 295), do not define any clocks. The following procedures
show you how to define clocks and set clock groups and other constraints
that affect timing:
• Defining Clock Frequency, on page 166
• Constraining Clock Enable Paths, on page 169

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 165
Chapter 5: Specifying Constraints Using the SCOPE Editor (Legacy)

• Defining Other Clock Requirements, on page 171

Defining Clock Frequency


This section shows you how to define clock frequency either through the GUI
or in a constraint file. See Defining Other Clock Requirements, on page 171
for other clock constraints. If you want to use auto constraints, do not define
your clocks.

1. Define a realistic global frequency for the entire design, either in the
Project view or the Constraints tab of the Implementation Options dialog box.

This target frequency applies to all clocks that do not have specified
clock frequencies. If you do not specify any value, a default value of 1
MHz (or 1000 ns clock period) applies to all timing paths whenever the
clock associated with both start and end points of the path is not speci-
fied. Each clock that uses the global frequency is assigned to its own
clock group. See Defining Other Clock Requirements, on page 171 for
more information about clock group settings.

The global frequency also applies to any purely combinatorial paths. The
following figure shows how the software determines constraints for
specified and unspecified start or end clocks on a path:

A B
Logic
clkA C

clkB

If clkA is ... And clkB is ... The effect for logic C is ...

Undefined Defined The path is unconstrained unless you specify that


clkB be constrained to the inferred clock domain for
clkA

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
166 December 2015
Using the SCOPE Editor (Legacy) Chapter 5: Specifying Constraints

Defined Undefined The path is unconstrained unless you specify that


clkA be constrained to the inferred clock domain for
clkB.

Defined Defined For related clocks in the same clock group, the
relationship between clocks is calculated; all other
paths between the clocks are treated as false paths.
Undefined Undefined The path is unconstrained.

2. Define frequency for individual clocks on the Clocks tab of the SCOPE
window (define_clock constraint).
– Specify the frequency as either a frequency in the Frequency column
(-freq Tcl option) or a time period in the Period column (-period Tcl
option). When you enter a value in one column, the other is
calculated automatically.
– For asymmetrical clocks, specify values in the Rise At (-rise) and Fall At
(-fall) columns. The software automatically calculates and fills out the
Duty Cycle value.

The software infers all clocks, whether declared or undeclared, by


tracing the clock pins of the flip-flops. However, it is recommended that
you specify frequencies for all the clocks in your design. The defined
frequency overrides the global frequency. Any undefined clocks default
to the global frequency.

3. Define internal clock frequencies (clocks generated internally) on the


SCOPE Clocks tab (define_clock constraint). Apply the constraint
according to the source of the internal clock.

Source Add SCOPE constraint/define_clock to ...


Register Register.
Instance, like a PLL Instance. If the instance has more than one clock
or clock DLL output, apply the clock constraints to each of the
output nets, making sure to use the n: prefix (to
signify a net) in the SCOPE table.
Combinatorial logic Net. Make sure to use the n: prefix in the SCOPE
interface.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 167
Chapter 5: Specifying Constraints Using the SCOPE Editor (Legacy)

4. For signals other than clocks, define frequencies with the


syn_reference_clock attribute. You can add this attribute on the SCOPE
Attributes tab, as follows:
– Define a dummy clock on the Clocks tab (define_clock constraint).
– Add the syn_reference_clock attribute (Attributes tab) to the affected
registers to apply the clock. In the constraint file, you can use the Find
command to find all registers enabled by a particular signal and then
apply the attribute:

define_clock -virtual dummy -period 40.0


define_attribute {find –seq * -hier –filter @(enable == en40)}
syn_reference_clock dummy
In earlier releases, limited clocking resources might have forced you to
use an enable signal as a clocking signal, and use the syn_reference_clock
attribute to define an enable frequency. However, because of changes in
the reporting of clock start and end points, it is recommended that you
use a multicycle path constraint instead for designs that use an enable
signal and a global clock, and where paths need to take longer than one
clock cycle. See Constraining Clock Enable Paths, on page 169 for a
detailed explanation.

Note: This method is often used for designs that have an enable signal
and a global clock, and where paths need to take longer than one clock
cycle. The registers in the design are actually connected to the global
clock; however, the tool treats the registers as having a virtual clock at
the frequency of the enable signal.

Using this method to constrain paths for technologies with clock buffer
delays requires careful analysis with the Timing Analysis Reports (STA).
The virtual clock does not include clock buffer delays. However, non-
virtual clocks that pass through clock buffers do include clock buffer
delays. The register that generates the enable signal is on the non-
virtual clock domain, whereas the registers connected to the enable
signal are on the virtual clock domain. Timing analysis shows that the
enable signal is on the path between the non-virtual and virtual clock
domains. For the actual design, the enable signal is on a path in the
non-virtual clock domain. Any paths between virtual and non-virtual
clocks are reported with a clock buffer delay on the non-virtual clock.
This may result in the critical path reporting negative slack.
LO
In the following example, the path comes from a register on a non-
virtual clock and goes to a register on a virtual clock.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
168 December 2015
Using the SCOPE Editor (Legacy) Chapter 5: Specifying Constraints

Path information for path number 1:


Requested Period:3.125
- Setup time: 0.229
= Required time: 2.896

- Propagation time: 1.448


- Clock delay at starting point: 1.857
= Slack (critical: -0.409

Number of logic level(s): 0


Starting point: SourceFlop / Q
Ending point: DestinationFlop / CE
The start point is clocked by Non-VirtualClock [rising] on pin C
The end point is clocked by VirtualClock [rising] on pin C

The path is reported with a negative slack of -0.49.


Timing analysis specifies a Clock delay at starting point that is the delay in
the clock buffers of the non-virtual clock, but not a Clock delay at ending
point. In the actual design, this delay exists at the end point. Since the
clock end point is a virtual clock, the clock buffer delay creates a
negative slack that does not exist in the actual design.

It is recommended that you use a multicycle path constraint instead to


constrain all registers driven by the enable signal in the design.

5. After synthesis, check the Performance Summary section of the log file for a
list of all the defined and inferred clocks in the design.

6. If you do not meet timing goals after place-and-route, adjust the clock
constraint as follows:
– Open the SCOPE window with the clock constraint.
– In the Route column for the constraint, specify the actual route delay
(in nanoseconds), as obtained from the place-and-route results.
Adding this constraint is equivalent to putting a register delay on all
the input registers for that clock.
– Resynthesize your design.

Constraining Clock Enable Paths


You might use an enable signal as a clocking signal if you have limited
clocking resources. If the enable is slower than the clock, you can ensure
more accuracy by defining the enable frequency separately, instead of

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 169
Chapter 5: Specifying Constraints Using the SCOPE Editor (Legacy)

slowing down the clock frequency. If you slow down the clock frequency, it
affects all other registers driven by the clock, and can result in longer run
times as the tool tries to optimize a non-critical path.

There are two ways to define clock enables:


• By setting a multicycle path constraint to constrain all flip-flops driven
by the clock enable signal (see Defining Multicycle Paths, on page 136).
This is the recommended method.
• Using the syn_reference_clock attribute, as described in step 4 of Defining
Clock Frequency, on page 166. Although this method was used in earlier
releases, it is not recommended any more because of changes in the way
the clock start and end points are reported. An explanation of the clock
start and end points reporting follows.

Clock Domains for Clock Enables Defined with syn_reference_clock


When you use the syn_reference_clock attribute to constrain an enable signal,
you are telling the tool to treat the flip-flops as if they had a virtual clock at
the frequency of the enable signal, when the flip-flops are actually connected
to the global clock. This could result in critical paths being reported with
negative slack.

The flip-flop that generates the enable signals is in the non-virtual clock
domain.The flip-flops that are connected to the enable signal are in the
virtual clock domain. The timing analyst considers the enable signal to be on
a path that goes between a non-virtual clock domain and a virtual clock
domain. In the actual circuit, the enable signal is on a path within a non-
virtual clock domain. The timing analyst reports any paths between virtual
and non-virtual clocks with a clock buffer delay on the non-virtual clock. This
is why critical paths might be reported with negative slack.

If you use this method to constrain paths in a technology that includes clock
buffer delays, you must carefully analyze the timing analysis reports. The
virtual clock does not include clock buffer delays, but any non-virtual clock
that passes through clock buffers will include clock buffer delays.

The following is an example report of a path from a clock enable, starting


from a flip-flop on a non-virtual clock to a flip-flop on a virtual clock. The
path is reported with a negative slack of -0.49.
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
170 December 2015
Using the SCOPE Editor (Legacy) Chapter 5: Specifying Constraints

Path information for path number 1:


Requested Period: 3.125
- Setup time: 0.229
= Required time:2.896
- Propagation time: 1.448
- Clock delay at starting point: 1.857
= Slack (critical) : -0.409
Number of logic level(s): 0
Starting point:SourceFlop/ Q
Ending point:DestinationFlop / CE
The start point is clocked by Non-VirtualClock [rising]on pin C
The end point is clocked by VirtualClock [rising] on pin C

This timing analysis report includes a Clock delay at starting point, but does not
include Clock delay at ending point. The clock delay at the starting point is the
delay in the clock buffers of the non-virtual clock. In the actual circuit, this
delay would also be at the ending point and not affect the calculation of slack.
However as the ending clock is a virtual clock, the clock buffer delay ends up
creating a negative slack that does not exist in the actual circuit.

This report is a result of defining the clock enables with the syn_reference_clock
attribute. This is why it is recommended that you use multicycle paths to
constrain all the flip-flops driven by the enable signal.

Defining Other Clock Requirements


Besides clock frequency (described in Defining Clock Frequency, on
page 166), you can also set other clock requirements, as follows:
• If you have limited clock resources, define clocks that do not need a
clock buffer by attaching the syn_noclockbuf attribute to an individual
port, or the entire module/architecture.
• Define the relationship between clocks by setting clock domains. By
default, each clock is in a separate clock group named default_clkgroup<n>
with a sequential number suffix.
– On the SCOPE Clocks tab, group related clocks by putting them into
the same clock group. Use the Clock Group field to assign all related
clocks to the same clock group.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 171
Chapter 5: Specifying Constraints Using the SCOPE Editor (Legacy)

– Make sure that unrelated clocks are in different clock groups. If you
do not, the software calculates timing paths between unrelated clocks
in the same clock group, instead of treating them as false paths.
– Input and output ports that belong to the System clock domain are
considered a part of every clock group and will be timed. See Defining
Input and Output Constraints (Legacy), on page 172 for more
information.

The software does not check design rules, so it is best to define the
relationship between clocks as completely as possible.
• Define all gated clocks with the define_clock constraint.
Avoid using gated clocks to eliminate clock skew. If possible, move the
logic to the data pin instead of using gated clocks. If you do use gated
clocks, you must define them explicitly, because the software does not
propagate the frequency of clock ports to gated clocks.

To define a gated clock, attach the define_clock constraint to the clock


source, as described above for internal clocks. To attach the constraint
to a keepbuf (a keepbuf is a placeholder instance for clocks generated from
combinatorial logic), do the following:
– Attach the syn_keep attribute to the gated clock to ensure that it
retains the same name through changes to the RTL code.
– Attach the define_clock constraint to the net or pin connected to the
keepbuf instance generated for the gated clock.
• Specify edge-to-edge clock delays on the Clock to Clock tab (define_-
clock_delay).
• After synthesis, check the Performance Summary section of the log file for a
list of all the defined and inferred clocks in the design.

Defining Input and Output Constraints (Legacy)


In addition to setting I/O delays in the SCOPE window as described in Setting
Clock and Path Constraints, on page 163, you can also set the Use clock period
for unconstrained IO option.
• Open the SCOPE window,
LO click Inputs/Outputs, and select the port (Port).
You can set the constraint for
– All inputs and outputs (globally in the top-level netlist)

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
172 December 2015
Using the SCOPE Editor (Legacy) Chapter 5: Specifying Constraints

– For a whole bus


– For single bits
You can specify multiple constraints for the same port. The software
applies all the constraints; the tightest constraint determines the worst
slack. If there are multiple constraints from different levels, the most
specific overrides the more global. For example, if there are two bit
constraints and two port constraints, the two bit constraints override
the two port constraints for that bit. The other bits get the two port
constraints.
• Specify the constraint value in the SCOPE window:
– Select the type of delay: input or output (Type).
– Type a delay value (Value).
– Check the Enabled box, and save the constraint file in the project.
Make sure to specify explicit constraints for each I/O path you want to
constrain.
• To determine how the I/O constraints are used during synthesis, do the
following:
– Select Project->Implementation Options, and click Constraints.
– To use only the explicitly defined constraints disable Use clock period for
unconstrained IO.
– To synthesize with all the constraints, using the clock period for all
I/O paths that do not have an explicit constraint enable Use clock
period for unconstrained IO.
– Synthesize the design. When you forward-annotate the constraints,
the constraints used for synthesis are forward-annotated for place-
and-route.
• Input or output ports with explicitly defined constraints, but without a
reference clock (-ref option) are included in the System clock domain and
are considered to belong to every defined or inferred clock group.
• If you do not meet timing goals after place-and-route and you need to
adjust the input constraints; do the following:
– Open the SCOPE window with the input constraint.
– In the Route column for the input constraint, specify the actual route
delay in nanoseconds, as obtained from the place-and-route results.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 173
Chapter 5: Specifying Constraints Using the SCOPE Editor (Legacy)

Adding this constraint is equivalent to putting a register delay on the


input register.
– Resynthesize your design.

Defining False Paths (Legacy)


You define false paths by setting constraints explicitly on the Delay Paths tab
or implicitly on the Clock and Clock to Clock tabs. See Defining
From/To/Through Points for Timing Exceptions, on page 132 for object
naming and specifying through points.
• To define a false path between ports or registers, select the SCOPE Delay
Paths tab, and do the following:
– From the Delay Type pull-down menu, select False.
– Use the pull-down to select the port or register from the appropriate
column (From/To/Through).
– Check the Enabled box.
The software treats this as an explicit false constraint and assigns it the
highest priority. Any other constraints on this path are ignored.
• To define a false path between two clocks, select the SCOPE Clocks tab,
and assign the clocks to different clock groups:

The software implicitly assumes a false path between clocks in different


clock groups. This false path constraint can be overridden by a
maximum path delay constraint, or with an explicit constraint.
• To define a false path between two clock edges, select the SCOPE Clock to
Clock tab, and do the following:
– Specify one clock as the starting clock edge (From Clock Edge).
– Specify the other clock as the ending clock edge (To Clock Edge).
– Click in the Delay column, and select false.
– Mark the Enabled check box.

Use this technique to specify a false path between any two clocks,
regardless of clock groups. This constraint can be overridden by a
maximum delay constraintLO on the same path

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
174 December 2015
Using the SCOPE Editor (Legacy) Chapter 5: Specifying Constraints

• To override an implicit false path between any two clocks described


previously, set an explicit constraint between the clocks by selecting the
SCOPE Clock to Clock tab, and doing the following:
– Specify the starting (From Clock Edge) and ending clock edges (To Clock
Edge).
– Specify a value in the Delay column.
– Mark the Enabled check box.
The software treats this as an explicit constraint. You can use this
method to constrain a path between any two clocks, regardless of
whether they belong to the same clock group.
• To set an implicit false path on a path to/from an I/O port, do the
following:
– Select Project->Implementation Options->Constraints.
– Disable Use clock period for unconstrained IO.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 175
Chapter 5: Specifying Constraints Using the SCOPE Editor (Legacy)

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
176 December 2015
CHAPTER 6

Synthesizing and Analyzing the Results

This chapter describes how to run synthesis, and how to analyze the log file
generated after synthesis. See the following:
• Synthesizing Your Design, on page 178
• Checking Log File Results, on page 183
• Handling Messages, on page 197
• Using Continue on Error, on page 207

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 177
Chapter 6: Synthesizing and Analyzing the Results Synthesizing Your Design

Synthesizing Your Design


Once you have set your constraints, options, and attributes, running
synthesis is a simple one-click operation. See the following:
• Running Logic Synthesis
• Using Up-to-date Checking for Job Management

Running Logic Synthesis


When you run logic synthesis, the tool compiles the design and then maps it
to the technology target you selected.

1. If you want to compile your design without mapping it, select Run->
Compile Only or press F7.

A compiled design has the RTL mapping, and you can view the RTL view.
You might want to just compile the design when you are not ready to
synthesize the design, but when you need to use a tool that requires a
compiled design, like the SCOPE interface.

2. To synthesize the logic, set all the options and attributes you want, and
then click Run.

Using Up-to-date Checking for Job Management


Synthesis is becoming more complex and consists of running many jobs.
Often, part or all of the job flow is already up-to-date and rerunning the job
may not be necessary. For large designs that may take hours to run, up-to-
date checking can reduce the time for rerunning jobs.

Up-to-date checking is run for all synthesis design flows. However, for the
Hierarchical Project Management flows, up-to-date checking is an essential
feature. For example, if a project contains four sub-projects and only one
project is modified, then the other three projects do not need to be rerun. This
saves in overall runtime.

Up-to-date checking includes


LOthe following:
• The GUI launches mapper modules (pre-mapping and technology
mapping) and saves the intermediate netlists and log files in the synwork
and synlog folders, respectively.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
178 December 2015
Synthesizing Your Design Chapter 6: Synthesizing and Analyzing the Results

• After each individual module run completes, the GUI optionally copies
the contents of these intermediate log files from the synlog folder and
adds them to the Project log file (rev_1/projectName.srr). To set this option,
see Copy Individual Job Logs to the SRR Log File, on page 180.
• If you re-synthesize the design and there are no changes to the inputs
(HDL, constraints, and Project options):
– The GUI does not rerun pre-mapping and technology mapping and no
new netlist files are created.
– In the HTML log file, the GUI adds a link that points to the existing
pre-mapping and mapping log files from the previous run. Double-
click on this link (@L: indicates the link) to open the new text file
window.
If you open the text log file, the link is a relative path to the
implementation folder for the pre-mapping and mapping log files from
the previous run.

Note: Also, the GUI adds a note that indicates mapping will not be re-
run and to use the Run->Resynthesize All option in the Project view
to force synthesis to be run again.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 179
Chapter 6: Synthesizing and Analyzing the Results Synthesizing Your Design

As the job is running, you can click in the job status field of the Project view
to bring up the Job Status display. When you rerun synthesis, the job status
identifies which modules (pre-mapping or mapping) are up-to-date.

Job Status for Re-synthesis Run

See also:
• Copy Individual Job Logs to the SRR Log File
• Limitations and Risks

Copy Individual Job Logs to the SRR Log File


By default, up-to-date checking uses links in the log file (srr) to individual job
logs. To change this option so that individual job logs are always appended to
the main log file (srr), do the following:

1. Select Options->Project View Options from the Project menu.

2. On the Project View Options dialog box, scroll down to the Use links in SRR log
file to individual job logs option.

3. Use the pull-down menu, and select off.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
180 December 2015
Synthesizing Your Design Chapter 6: Synthesizing and Analyzing the Results

Limitations and Risks


Up-to-date checking limitations and risks include the following:
• Compiler up-to-date checks are done internally by the compiler and with
no changes to the compiler reporting structure.
• GUI up-to-date checks use timestamp information of its input files to
decide when mapping is re-run. Be aware that:
– The GUI uses netlist files (srs and srd) from the synwork folder for
timestamp checks. If you delete an srs file from the implementation
folder, this does not trigger compiler or mapper re-runs. You must
delete netlist files from the synwork folder instead.
– The copy command behaves differently on Windows and Linux. On
Windows, the timestamp does not change if you copy a file from one

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 181
Chapter 6: Synthesizing and Analyzing the Results Synthesizing Your Design

directory to another. But on Linux (and MKS shell), the timestamp


information gets changed.
• When running a design, the up-to-date checking feature automatically
determines if the design needs to be re-synthesized. However, when you
modify constraints in a Tcl file sourced within the constraints file, the
software is not aware of these changes and does not force the design to
be re-synthesized.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
182 December 2015
Checking Log File Results Chapter 6: Synthesizing and Analyzing the Results

Checking Log File Results


You can check the log file for information about the synthesis run. In
addition, the Synplify Pro interface has a Tcl Script window, that echoes each
command as it is run. The following describe different ways to check the
results of your run:
• Viewing and Working with the Log File, on page 183
• Accessing Specific Reports Quickly, on page 187
• Accessing Results Remotely, on page 189
• Analyzing Results Using the Log File Reports, on page 193
• Using the Watch Window, on page 193
• Checking Resource Usage, on page 195

Viewing and Working with the Log File


The log file contains the most comprehensive results and information about a
synthesis run. The default log file is in HTML format, but there is a text
version available too.

If you only want to check a few critical performance criteria, it is easier to use
the Watch Window (see Using the Watch Window, on page 193) instead of the
log file. For details, read through the log file.

1. To open the log file, use one of these listed methods, according to the
format you want:

HTML • Select View->Log File.


• Click the View Log button in the Project window.
• Double-click the designName.htm file in the Implementation Results
view.
Text Double-click the designName.srr file in the Implementation Results view.
To set the text file version to open by default instead of the HTML
version, select Options->Project View Options, and toggle off the View log
file in HTML option.

The log file lists the compiled files, details of the synthesis run, and
includes color-coded errors, warnings and notes, and a number of

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 183
Chapter 6: Synthesizing and Analyzing the Results Checking Log File Results

reports. For information about the reports, see Analyzing Results Using
the Log File Reports, on page 193.

2. Navigate the log file to view specific pieces of information.

For quicker access to specific log information, use alternative access


methods, described in Accessing Specific Reports Quickly, on page 187
instead of the ones described here.
– Use the panel on the left of the HTML log file to navigate to the section
you want. You can use the Find button and the search field at the
bottom of this panel to search the headings.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
184 December 2015
Checking Log File Results Chapter 6: Synthesizing and Analyzing the Results

– To search the body of the log file, use Control-f or the Edit->Find
command. See Viewing and Working with the Log File, on page 183
for details.
– To add bookmarks or for general information about working in an
editing window, see Editing HDL Source Files with the Built-in
Text Editor, on page 34.

The areas of the log file that are most important are the warning
messages and the timing report. The log file includes a timing report
that lists the most critical paths. The synthesis products also let you
generate a report for a path between any two designated points, see
Generating Custom Timing Reports with STA, on page 285. The
following table lists places in the log file you can use when searching for
information.

To find ... Search for ...


Notes @N or look for blue text
Warnings and errors @W and @E, or look for purple and red
text respectively
Performance summary Performance Summary
The beginning of the timing report START TIMING REPORT

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 185
Chapter 6: Synthesizing and Analyzing the Results Checking Log File Results

To find ... Search for ...


Detailed information about slack Interface Information
times, constraints, arrival times,
etc.
Resource usage Resource Usage Report. See Checking
Resource Usage, on page 195.
Gated clock conversions Gated clock report

3. Resolve any errors and check all warnings.

You must fix errors, because you cannot synthesize a design with errors.
Check the warnings and make sure you understand them. See Checking
Results in the Message Viewer, on page 197 for information. Notes are
informational and usually can be ignored. For details about
crossprobing and fixing errors, see Handling Warnings, on page 207,
Editing HDL Source Files with the Built-in Text Editor, on page 34, and
Crossprobing from the Text Editor Window, on page 250.

If you see Automatic dissolve at startup messages, you can usually ignore
them. They indicate that the mapper has optimized away hierarchy
because there were only a few instances at the lower level.

4. If you are trying to find and resolve warnings, you can bookmark them
as shown in this procedure:
– Select Edit->Find or press Ctrl-f.
– Type @W as the criteria on the Find form and click Mark All. The
software inserts bookmarks at every line with a warning. You can
now page through the file from bookmark to bookmark using the
commands in the Edit menu or the icons in the Edit toolbar. For more
information on using bookmarks, see Editing HDL Source Files with
the Built-in Text Editor, on page 34.

5. To crossprobe from the log file to the source code, click on the file name
in the HTML log file or double-click on the warning text (not the ID code)
in the ASCII text log file.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
186 December 2015
Checking Log File Results Chapter 6: Synthesizing and Analyzing the Results

Accessing Specific Reports Quickly


The log file contains all the results from the synthesis run, but you might
want to hone in on specific information. Instead of browsing the log file to find
the information you need, you can use the techniques described below:

1. To quickly view specific pieces of log information, go to the Project Status


window and click the appropriate links to display the corresponding
reports or specific parts of the log file.

Timing reports Click Detailed Report or Timing Report View in the Timing
Summary panel.

Log at different stages Click Detailed Report in the Run Status panel.
Area reports Click Detailed Report or Hierarchical Area Report in the
Area Summary panel.

High reliability reports Click Detailed Report in the High Reliability Report panel.
Optimizations Click Detailed Report in the Optimizations Summary
panel.

The Detailed Report links display parts of the log file, and the other links
go to special view windows for different kinds of reports. See The Project
Results View, on page 40 for more information about different reports
that can be accessed from the Project Results view.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 187
Chapter 6: Synthesizing and Analyzing the Results Checking Log File Results

2. To view timing information, use one of these methods:


– Set important timing parameters to monitor in the Watch window,
like slack and frequency. See Using the Watch Window, on page 193
for details.
– Click View Log in the Project view and navigate to the appropriate
section in the log file.

3. To view messages, use any of the following methods


– From the Run Status panel in the Project Status window, click the link
that lists the number of errors, warnings, or notes at different design
stages. The Message window opens. Click the message ID to get more
information about the error and how to fix it.
This is the quickest method to narrow down the list of messages and
access the one you want.

The numbers of notes, errors, and warnings reported in the Run Status
panel might not match the numbers displayed in the Messages
window if the design contains compile points. The numbers reported
are for the top level.
– Click the Messages tab at the bottom of the Project view to open a
window with a list of all the notes, errors and warnings. See Checking
Results in the Message Viewer, on page 197 for more information
about using this window.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
188 December 2015
Checking Log File Results Chapter 6: Synthesizing and Analyzing the Results

– Open the log file, locate the message, and click the message ID. The
log file includes all the results from the run, so it could be harder to
locate the message you want.

Accessing Results Remotely


You can access the log file results remotely from various mobile devices. For
example, you can use this feature to run synthesis for jobs with long
runtimes and then check the results of the synthesis run later from
anywhere. The Project Status report files can be accessed from any browser
without bringing up the synthesis tool.

To access the log file remotely, do the following:

1. Select Options->Project Status Page Location from the Project menu and
select the implementation for which you want the reports.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 189
Chapter 6: Synthesizing and Analyzing the Results Checking Log File Results

2. Set the location for storing the project status page, using either of these
methods:
– Enable Save to different location and specify a path for the location of the
status page. This allows you to save the status reports in different
locations.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
190 December 2015
Checking Log File Results Chapter 6: Synthesizing and Analyzing the Results

– Use an environment variable by enabling Use Environment Variable


SYNPLIFY_REMOTE_REPORT_LOCATION.

Windows Enable Use Environment Variable SYNPLIFY_REMOTE_REPORT_LOCATION.


Specify the variable name SYNPLIFY_REMOTE_REPORT_LOCATION
and the location you want from the Control Panel on the Edit User
Variable dialog box.

Linux Specify setenv SYNPLIFY_REMOTE_REPORT_LOCATION pathLocation


in the .cshrc file.
Enable Use Environment Variable SYNPLIFY_REMOTE_REPORT_LOCATION.

If you use this option, you must restart the tool the first time, since
the environment variable is not applied dynamically. This option
always saves the status report to the location indicated by the
variable.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 191
Chapter 6: Synthesizing and Analyzing the Results Checking Log File Results

3. Click OK.

4. Run synthesis.

The status reports are saved to the location you specified for your
project. For example:

C:\synResults\tutorial\rev_1

5. Access the location you set up from any browser on a mobile device (for
example, a smart phone or tablet).
– Access the location you set in the previous steps.
– Open the projectName/implementationName/index.html file with any
browser.
LO
Your company may need to set up a location on its internal internet,
where the status reports can be saved and later accessed with a URL
address.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
192 December 2015
Checking Log File Results Chapter 6: Synthesizing and Analyzing the Results

Analyzing Results Using the Log File Reports


The log file contains technology-appropriate reports like timing reports,
resource usage reports, and net buffering reports, in addition to any notes,
errors, and warning messages.

1. To analyze timing results, do the following:


– View the Timing Report (Performance Summary section of the log file)
and check the slack times. See Handling Negative Slack, on page 284
for details.
– Check the detailed information for the critical paths, including the
setup requirements at the end of the detailed critical path
description. You can crossprobe and view the information graphically
and determine how to improve the timing.
– In the HTML log file, click the link to open up the HDL Analyst view
for the path with the worst slack.

To generate timing information about a path between any two desig-


nated points, see Generating Custom Timing Reports with STA, on
page 285.

2. To check buffers, do the following:


– Check the report by going to the Net Buffering Report section of the log
file.
– Check the number of buffers or registers added or replicated and
determine whether this fits into your design optimization strategy.

3. To check logic resources, check the Resource Usage Report section at the
end of the log file, as described in Checking Resource Usage, on
page 195.

Using the Watch Window


The Watch window provides a more convenient viewing mechanism than the
log file for quickly checking key performance criteria or comparing results
from different runs. Its limitation is that it only displays certain criteria. If you
need details, use the log file, as described in Viewing and Working with the
Log File, on page 183.

1. Open the Watch window, if needed, by checking View->Watch Window.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 193
Chapter 6: Synthesizing and Analyzing the Results Checking Log File Results

If you open an existing project, the Watch window shows the parameters
set the last time you opened the window.

2. If you need a larger window, either resize the window or move the Watch
Window as described below.
– Hold down Ctrl or Shift, click on the window, and move it to a position
you want. This makes the Watch window an independent window,
separate from the Project view.
– To move the window to another position within the Project view, right-
click in the window border and select Float in Main Window. Then move
the window to the position you want, as described above.

See Watch Window, on page 50 in the Reference Manual for information


about the popup menu commands.

3. Select the log parameter you want to monitor by clicking on a line and
selecting a parameter from the resulting popup menu.

The software automatically fills in the appropriate value from the last
synthesis run. You can check the clock requested and estimated
frequencies, the clock requested and estimated periods, the slack, and
some resource usage criteria.

4. To compare the results of two or more synthesis runs, do the following:


– If needed, resize or move the window as described above.
– Click the right mouse button in the window and select Configure Watch
from the popup.
– Click Watch Selected Implementations and either check the
implementations youLO want to compare or click Watch All
Implementations. Click OK. The Watch window now shows a column for
each implementation you selected.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
194 December 2015
Checking Log File Results Chapter 6: Synthesizing and Analyzing the Results

– In the Watch window, set the parameters you want to compare.


The software shows the values for the selected implementations side by
side. For more information about multiple implementations, see Tips for
Optimization, on page 336.

Checking Resource Usage


Each FPGA architecture has a certain number of dedicated FPGA resources.
Use the Resource Usage section of the log file to check whether you are
exceeding the available resources.

1. Go to the Resource Usage report at the end of the log file (srr).

2. Check the number and types of components used to determine if you


have used too much of your resources.

The following is an example:


Resource Usage Report for test
Mapping to part: m2s050tvf400std
Cell usage:
CLKINT 2 uses
CFG1 2 uses
Carry primitives used for arithmetic functions:
ARI1 45 uses
Sequential Cells:
SLE 50 uses
DSP Blocks: 1
MACC: 1 Mult
I/O ports: 112
I/O primitives: 112
INBUF 67 uses
OUTBUF 45 uses

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 195
Chapter 6: Synthesizing and Analyzing the Results Checking Log File Results

Global Clock Buffers: 2


Total LUTs: 47
Extra resources required for RAM and MACC interface logic during P&R:
RAM64x18 Interface Logic : SLEs = 0; LUTs = 0;
RAM1K18 Interface Logic : SLEs = 0; LUTs = 0;
MACC Interface Logic : SLEs = 36; LUTs = 36;
Total number of SLEs after P&R: 50 + 0 + 0 + 36 = 86;
Total number of LUTs after P&R: 47 + 0 + 0 + 36 = 83;

If your design is overutilized, you can manage usage with resource-specific


attributes like syn_ramstyle, syn_dspstyle, and so on. For hierarchical designs
you can set limits with attributes like syn_allowed_resources or the Allocate
Timing and Resource Budgets command.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
196 December 2015
Handling Messages Chapter 6: Synthesizing and Analyzing the Results

Handling Messages
This section describes how to work with the error messages, notes, and
warnings that result after a run. See the following for details:
• Checking Results in the Message Viewer, on page 197
• Filtering Messages in the Message Viewer, on page 199
• Filtering Messages from the Command Line, on page 201
• Automating Message Filtering with a Tcl Script, on page 202
• Log File Message Controls, on page 204
• Handling Warnings, on page 207

Checking Results in the Message Viewer


The Tcl Script window includes a Message Viewer. By default, the Tcl window
is in the lower left corner of the main window. This procedure shows you how
to check results in the message viewer.

1. If you need a larger window, either resize the window or move the Tcl
window. Click in the window border and move it to a position you want.
You can float it outside the main window or move it to another position
within the main window.

2. Click the Messages tab to open the message viewer.

The window lists the errors, warnings, and notes in a spreadsheet


format. See Message Viewer, on page 54 in the Reference Manual for a
full description of the window.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 197
Chapter 6: Synthesizing and Analyzing the Results Handling Messages

3. To reduce the clutter in the window and make messages easier to find
and understand, use the following techniques:
– Use the color cues. For example, when you have multiple synthesis
runs, messages that have not changed from the previous run are in
black; new messages are in red.
– Enable the Group Common IDs option in the upper right. This option
groups all messages with the same ID and puts a plus symbol next to
the ID. You can click the plus sign to expand grouped messages and
see individual messages.
There are two types of message groups:
- The same warning or note ID appears in multiple source files
indicated by a dash in the source files column.
- Multiple warnings or notes in the same line of source code indicated
by a bracketed number.
– Sort the messages. To sort by a column header, click that column
heading. For example, click Type to sort the messages by type. For
example, you can use this to organize the messages and work
through the warnings before you look at the notes.
– To find a particular message, type text in the Find field. The tool finds
the next occurrence. You can also click the F3 key to search forward,
and the Shift-F3 key combination to search backwards.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
198 December 2015
Handling Messages Chapter 6: Synthesizing and Analyzing the Results

4. To filter the messages, use the procedure described in Filtering


Messages in the Message Viewer, on page 199. Crossprobe errors from
the message window:
– If you need more information about how to handle a particular
message, click the message ID in the ID column. This opens the
documentation for that message.
– To open the corresponding source code file, click the link in the Source
Location column. Correct any errors and rerun synthesis. For
warnings, see Handling Warnings, on page 207.
– To view the message in the context of the log file, click the link in the
Log Location column.

Filtering Messages in the Message Viewer


The Message viewer lists all the notes, warnings, and errors. The following
procedure shows you how to filter out the unwanted messages from the
display, instead of just sorting it as described in Checking Results in the
Message Viewer, on page 197. For the command line equivalent of this
procedure, see Filtering Messages from the Command Line, on page 201.

1. Open the message viewer by clicking the Messages tab in the Tcl window
as previously described.

2. Click Filter in the message window.

The Warning Filter spreadsheet opens, where you can set up filtering
expressions. Each line is one filter expression.

3. Set your display preferences.


– To hide your filtered choices from the list of messages, click Hide Filter
Matches in the Warning Filter window.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 199
Chapter 6: Synthesizing and Analyzing the Results Handling Messages

– To display your filtered choices, click Show Filter Matches.


4. Set the filtering criteria.
– Set the columns to reflect the criteria you want to filter. You can
either select from the pull-down menus or type your criteria. If you
have multiple synthesis runs, the pull-down menu might contain
selections that are not relevant to your design.
The first line in the following example sets the criteria to show all
warnings (Type column) with message ID FA188 (ID). The second set of
criteria displays all notes that begin with MF.

– Use multiple fields and operators to refine filtering. You can use
wildcards in the field, as in line 2 of the example. Wildcards are case-
sensitive and space-sensitive. You can also use ! as a negative
operator. For example, if you set the ID in line 2 to !MF*, the message
list would show all notes except those that begin with MF.
– Click Apply when you have finished setting the criteria. This
automatically enables the Apply Filter button in the messages window,
and the list of messages is updated to match the criteria.
The synthesis tool interprets the criteria on each line in the Warning
Filter window as a set of AND operations (Warning and FA188), and the
lines as a set of OR operations (Warning and FA188 or Note and MF*).
– To close the Warning Filter window, click Close.
5. To save your message filters and reuse them, do the following:
– Save the project. The synthesis tool generates a Tcl file called
projectName.pfl (Project Filter Log) in the same location as the main
project file. The following
LO is an example of the information in this file:

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
200 December 2015
Handling Messages Chapter 6: Synthesizing and Analyzing the Results

log_filter -hide_matches
log_filter -field type==Warning
-field message==*Una*
-field source_loc==sendpacket.v
-field log_loc==usbHostSlave.srr
-field report=="Compiler Report"
log_filter -field type==Note
log_filter -field id==BN132
log_filter -field id==CL169
log_filter -field message=="Input *"
log_filter -field report=="Compiler Report"
– When you want to reuse the filters, source the projectName.pfl file.
You can also include this file in a synhooks Tcl script to automate your
process.

Filtering Messages from the Command Line


The following procedure shows you how to use Tcl commands to filter out
unwanted messages. If you want to use the GUI, see Filtering Messages in the
Message Viewer, on page 199.

1. Type your filter expressions in the Tcl window using the log_filter
command. For details of the syntax, see log_filter, on page 39 in the
Command Reference Manual.

For example, to hide all the notes and print only errors and warnings,
type the following:

log_filter –enable
log_filter –hide_matches
log_filter –field type==Note

2. To save and reuse the filter commands, do the following:


– Type the log_filter commands in a Tcl file.
– Source the file when you want to reuse the filters you set up.
3. To print the results of the log_filter commands to a file, add the log_report
command at the end of a list of log_filter commands.

log_report -print filteredMsg.txt

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 201
Chapter 6: Synthesizing and Analyzing the Results Handling Messages

This command prints the results of the preceding log_filter commands to


the specified text file, and puts the file in the same directory as the main
project file. The file contains the filtered messages, for example:

@N MF138 Rom slaveControlSel_1 mapped in logic. Mapper Report


wishbonebi.v (156) usbHostSlave.srr (819) 05:22:06 Mon Oct 18
@N(2) MO106 Found ROM, 'slaveControlSel_1', 15 words by 1 bits
Mapper Report wishbonebi.v (156) usbHostSlave.srr (820)
05:22:06 Mon Oct 18
@N MO106 Found ROM, 'slaveControlSel_1', 15 words by 1 bits Mapper
Report wishbonebi.v (156) usbHostSlave.srr (820) 05:22:06 Mon
Oct 18
@N MF138 Rom hostControlSel_1 mapped in logic. Mapper Report
wishbonebi.v (156) usbHostSlave.srr (821) 05:22:06 Mon Oct 18
@N MO106 Found ROM, 'hostControlSel_1', 15 words by 1 bits Mapper
Report wishbonebi.v (156) usbHostSlave.srr (822) 05:22:06 Mon
Oct 18
@N Synthesizing module writeUSBWireData Compiler Report
writeusbwiredata.v (59) usbHostSlave.srr (704) 05:22:06 Mon Oct 18

Automating Message Filtering with a Tcl Script


The following example shows you how to use a synhooks Tcl script to automat-
ically load a message filter file when a project opens and to send email with
the messages after a run.

1. Create a message filter file like the following. (See Filtering Messages in
the Message Viewer, on page 199 or Filtering Messages from the
Command Line, on page 201 for details about creating this file.)

log_filter -clear
log_filter -hide_matches
log_filter -field report=="ProASIC3E MAPPER"
log_filter -field type==NOTE
log_filter -field message=="Input *"
log_filter -field message=="Pruning *"
puts "DONE!"

2. Copy the synhooks.tcl file and set the environment variable as described
in Automating Flows with synhooks.tcl, on page 481.

3. Edit the synhooks.tcl file LO


so that it reads like the following example. For
syntax details, see synhooks File Syntax, on page 694 in the Reference
Manual.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
202 December 2015
Handling Messages Chapter 6: Synthesizing and Analyzing the Results

– The following loads the message filter file when the project is opened.
Specify the name of the message filter file you created in step 1. Note
that you must source the file.

proc syn_on_open_project {project_path} {


set filter filterFilename
puts "FILTER $filter IS BEING APPLIED"
source d:/tcl/filters/$filterFilename
}
– Add the following to print messages to a file after synthesis is done:
proc syn_on_end_run {runName run_dir implName} {
set warningFileName "messageFilename"
if {$runName == "synthesis"} {
puts "Mapper Done!"
log_report -print $warningFileName
set f [open [lindex $warningFileName] r]
set msg ""
while {[gets $f warningLine]>=0} {
puts $warningLine
append msg $warningLine\n
}
close $f
– Continue by specifying that the messages be sent in email. You can
obtain the smtp email packages off the web.

source "d:/tcl/smtp_setup.tcl"
proc send_simple_message {recipient email_server subject body}{
set token [mime::initialize -canonical text/plain -string
$body]
mime::setheader $token Subject $subject
smtp::sendmessage $token -recipients $recipient -servers
$email_server
mime::finalize $token
}
puts "Sending email..."
send_simple_message {address1,address2}
yourEmailServer subjectText> emailText
}
}
When the script runs, an email with all the warnings from the synthesis
run is automatically sent to the specified email addresses.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 203
Chapter 6: Synthesizing and Analyzing the Results Handling Messages

Log File Message Controls


The log file message control feature allows messages in the current session to
be elevated in severity (for example, promoted to an error from a warning),
lowered in severity (for example, demoting a warning to a note), or suppressed
from the log file after the next run through the Log File Filter dialog box. This
dialog box is displayed by opening the log file in HTML mode and selecting
Log File Message Filter from the popup menu with the right mouse button.

Log File Filter Dialog Box


The Log File Filter dialog box is the primary control for changing a message
priority or suppressing a message. When you initially open the dialog box, all
of the messages from the log (srr) file for the active implementation are
displayed in the upper section and the lower section is empty. To use the dialog
box:

1. Select (highlight) the message


LO to be promoted, demoted, or suppressed
from the messages displayed in the upper section.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
204 December 2015
Handling Messages Chapter 6: Synthesizing and Analyzing the Results

2. Select the Suppress Message, Make Error, Make Warning, or Make Note button
to move the selected message from the upper section to the lower
section. The selected message is repopulated in the lower section with
the Override column reflecting the disposition of the message according
to the button selected.

Allowed Severity Changes


Allowed severity levels and preference settings for warning, note, and
advisory messages are:
• Promote – warning to error, note to warning, note to error
• Demote – warning to note
• Suppress – suppress warning, suppress note, suppress advisory

Note: Normal error messages (messages generated by default) cannot


be suppressed or changed to a lesser severity level.

When using the dialog box:


• Use the control and shift keys to select multiple messages.
• If an srr file is not present (for example, if you are starting a new project)
the table will be empty. Run the design at least once to generate an srr
file.
• Clicking the OK button saves the message status changes to the project-
Name.pfl file in the project directory.

Message Reporting
The compiler and mapper must be rerun before the impact of the message
status changes can be seen in the updated log file.

When a projectName.pfl input file is present at the start of the run, the
message-status changes in the file are forwarded to the mapper and compiler
which generate an updated log file. Depending on the changes specified:
• If an ID is promoted to an error, the mapper/compiler stops execution at
the first occurrence of the message and prints the message in the
@E:msgID :messageText format

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 205
Chapter 6: Synthesizing and Analyzing the Results Handling Messages

• If an ID is promoted to a warning, the mapper/compiler prints the


message in the @W:msgID :messageText format.
• If an ID is demoted to a note, the mapper/compiler prints the message
in the @N:msgID :messageText format.
• If an ID is suppressed, the mapper/compiler excludes the message from
the srr file.

Note: The online, error-message help documentation is unchanged by


any message modification performed by the filtering mechanism.
If a message is initially categorized as a warning in the synthesis
tool, it continues to be reported as a warning in error-message
help irrespective its promotion/demotion status.

Updating the projectName.pfl file


The projectName.pfl file in the top-level project directory stores the user
message filter settings from the Log File Filter dialog box for that project. This
file can be edited with a text editor. The file entry syntax is:

message_override -suppress ID [ID ...] | -error ID [ID ...] | -warning ID [ID ...]
| -note ID [ID ...]

For example, to override the default message definition for note FX702 as a
warning, enter:

message_override -warning FX702

Note: After editing the pfl file, close and reopen the project to update
the overrides.

messagefilter.txt File
A messagefilter.txt file in the implementation/syntmp directory lists any changes
made to message priority or suppression through the Log File Filter dialog box.
This file, which is only generated when changes are made to the default
LO
status of a message, can be accessed outside of the GUI without consuming a
license.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
206 December 2015
Using Continue on Error Chapter 6: Synthesizing and Analyzing the Results

Handling Warnings
If you get warnings (@W prefix) after a synthesis run, do the following:
• Read the warning message and decide if it is something you need to act
on, or whether you can ignore it.
• If the message is not self-explanatory or if you are unsure about how to
handle the error, click the message ID in either the message window or
HTML log file or double click the message ID in the ASCII text log file.
These actions take you to online information about the condition that
generated the warning.

Using Continue on Error


The Continue on Error (CoE) feature significantly reduces the overall synthesis
runtime by reducing the number of synthesis iterations. This can be a signif-
icant advantage in prototyping and the handling of large designs.

Using Continue on Error for Compile Point Synthesis


By default, the tool stops the synthesis process if it encounters an error
within a compile point. If you enable the Continue on Error feature on a compile
point design, the tool black-boxes any compile points with errors and
continues to synthesize the rest of the design without generating an error.

The following procedure describes the details, which varies according to the
synthesis tool used.

1. Enable Continue on Error for compile-point synthesis in one of the following


ways:
– Enable Continue on Error on the Options tab of the Implementation Options
dialog box.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 207
Chapter 6: Synthesizing and Analyzing the Results Using Continue on Error

– Enable Continue on Error on the left side of the Project view.


– Enter a set_option -continue_on_error option with a value of 1 at the Tcl
script prompt.
– Select Options->Configure Compile Point Process from the top menu and
enable the Continue on Error checkbox.

2. Compile the design and ensure it is error-free before continuing.

The Synplify Pro CoE functionality does not extend to ignoring compiler
errors, but only affects technology mapping. You must identify and fix
compiler errors before running synthesis with CoE.

3. Synthesize the design. With Synplify Pro logic synthesis, the CoE
functionality only affects the mapper, not the compiler.

After compilation, the synthesis tools black-box compile points with


errors and continue to synthesize other compile points. The following
figure shows the black_box property attached to a compile point.
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
208 December 2015
Using Continue on Error Chapter 6: Synthesizing and Analyzing the Results

The tool reports warnings like the following in the log file for the
ignored errors:

@W:: m1.v(1) | Mapping of compile point m1 - Unsuccessful


@W:: m1.v(1) | Converting compile point m1 as black_box -
as continue_on_error is set
Information about converted compile points is also reported in the
Compile Points Summary:

4. Identify and fix errors before re-synthesizing the design. Designate the
error modules as compile points and re-run synthesis.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 209
Chapter 6: Synthesizing and Analyzing the Results Using Continue on Error

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
210 December 2015
CHAPTER 7

Analyzing with HDL Analyst and FSM Viewer

This chapter describes how to analyze logic in the HDL Analyst and FSM
Viewer.

See the following for detailed procedures:


• Working in the Schematic Views, on page 212
• Exploring Design Hierarchy, on page 226
• Finding Objects, on page 234
• Crossprobing, on page 247
• Analyzing With the HDL Analyst Tool, on page 255
• Using the FSM Viewer, on page 272
For information about analyzing timing, see Chapter 8, Analyzing Timing.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 211
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Working in the Schematic Views

Working in the Schematic Views


The HDL Analyst includes the RTL and Technology views, which are
schematic views used to graphically analyze your design. The RTL view is
available after a design is compiled; the Technology view is available after a
designed has been synthesized and contains technology-specific primitives.

For detailed descriptions of these views, see the HDL Analyst Tool section of
the Reference Manual. This section describes basic procedures you use in the
RTL and Technology views. The information is organized into these topics:
• Differentiating Between the HDL Analyst Views, on page 213
• Opening the Views, on page 213
• Viewing Object Properties, on page 215
• Selecting Objects in the RTL/Technology Views, on page 220
• Working with Multisheet Schematics, on page 221
• Moving Between Views in a Schematic Window, on page 222
• Setting Schematic View Preferences, on page 223
• Managing Windows, on page 225
For information on specific tasks like analyzing critical paths, see the
following sections:
• Exploring Object Hierarchy by Pushing/Popping, on page 227
• Exploring Object Hierarchy of Transparent Instances, on page 233
• Browsing to Find Objects in HDL Analyst Views, on page 234
• Crossprobing, on page 247
• Analyzing With the HDL Analyst Tool, on page 255

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
212 December 2015
Working in the Schematic Views Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Differentiating Between the HDL Analyst Views


RTL View Technology View
Generated after compilation. Generated after mapping.
Technology-independent components at a Technology-specific primitives like
high level of abstraction, like adders, look-up tables, cascade and carry
registers, large muxes, and state machines. chains, muxes and flip-flops.
srs database (Synopsys proprietary). srm database (Synopsys proprietary).

Opening the Views


The procedure for opening an RTL or Technology view is similar; the main
difference is the design stage at which these views are available.

1. Start at the appropriate design stage:

RTL view Start with a compiled design.


Technology view Start with a mapped (synthesized) design.

2. Open the view as described in this table:

Hierarchical RTL or Use one of these methods:


Technology view • Select HDL Analyst->RTL->Hierarchical View.
• Click the RTL View icon ( ) (a plus sign inside a
circle).
• Double-click the srs file in the Implementation
Results view.
To open a flattened RTL view, select HDL Analyst->RTL-
>Flattened View.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 213
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Working in the Schematic Views

Hierarchical Use one of these methods:


Technology view • Select HDL Analyst ->Technology->Hierarchical View.
• Click the Technology View icon (NAND gate icon ).
• Double-click the srm file in the Implementation
Results view.
Flattened RTL or Select HDL Analyst->RTL->Flattened View or HDL Analyst->
Technology view Technology->Flattened View

Floorplan view Use one of these methods:


• Select HDL Analyst->RTL->Floorplanned View.
• Double-click the partitioned netlist (srp) file from the
Implementation Results view.

All RTL and Technology views have the schematic on the right and a
pane on the left that contains a hierarchical list of the objects in the
design. This pane is called the Hierarchy Browser. The bar at the top of
contains additional information. See Hierarchy Browser, on page 62 in
the Reference Manual for a description of the Hierarchy Browser.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
214 December 2015
Working in the Schematic Views Chapter 7: Analyzing with HDL Analyst and FSM Viewer

RTL View

Technology View

Viewing Object Properties


There are a few ways in which you can view the properties of objects.

1. To temporarily display the properties of a particular object, hold the


cursor over the object. A tooltip temporarily displays the information. at
the cursor and in the status bar at the bottom of the tool window.

2. Select the object, right-click, and select Properties. The properties and
their values are displayed in a table.

If you select an instance, you can view the properties of the associated
pins by selecting the pin from the list. Similarly, if you select a port, you
can view the properties on individual bits.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 215
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Working in the Schematic Views

Set this field to the pin


name to see pin properties

3. To flag objects by property, follow these steps:


– Open an RTL or Technology view.
– Select Options->HDL Analyst Options->Visual Properties, and select the
properties you want to view from the pull-down list. Some properties
are only available in certain views.

LO

– Close the HDL Analyst Options dialog box.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
216 December 2015
Working in the Schematic Views Chapter 7: Analyzing with HDL Analyst and FSM Viewer

– Enable View->Visual Properties. If you do not enable this, the software


does not display the property flags in the schematics. The tool uses a
rectangular flag with the property name and value to annotate all
objects in the current view that have the specified property. Different
properties use different colors, so you can enable and view many
properties at the same time.

Example: Slow and New Properties


The slow property is useful for analyzing your critical path, because it denotes
objects that do not meet the timing criteria. The following figure shows a
filtered view of a critical path, with slow instances flagged in blue.

Slow property

The New property helps with debugging because it quickly identifies objects
that have been added to the current schematic with commands like Expand.
You can step through successive filtered views to determine what was added
at each step.

The next figure expands one of the pins from the previous filtered view. The
new instance added to the view has two flags: new and slow.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 217
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Working in the Schematic Views

Using the orig_inst_of Property for Parameterized Modules


The compiler automatically uniquifies parameterized modules or instances.
Properties are available to identify the RTL names of both uniquified and
original modules or instances.
• inst_of property – identifies module or instance by uniquified name
• orig_inst_of property – identifies module or instance by its original name
before it was uniquified

In the following example, the top-level module (top) instantiates the module
sub multiple times using different parameter values. The compiler uniquifies
the module sub as sub_3s, sub_1s, and sub_4s.

Top.v
module top (input clk, [7:0] din, output [7:0] dout);
sub #(.W(3)) UUT1 (.clk, .din(din[2:0]), .dout(dout[2:0]));
sub #(.W(1)) UUT2 (.clk, .din(din[3]), .dout(dout[3]));
sub #(.W(4)) UUT3 (.clk, .din(din[7:4]), .dout(dout[7:4]));
endmodule
LOW = 0) (
module sub #(parameter
input clk,
input [W-1:0] din,
output logic [W-1:0] dout);

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
218 December 2015
Working in the Schematic Views Chapter 7: Analyzing with HDL Analyst and FSM Viewer

always@(posedge clk)
begin
dout <= din;
end
endmodule

RTL View

TCL Command Example


Use the get_prop command with the orig_inst_of property to identify the
original RTL name for the module:

% get_prop -prop orig_inst_of {v:sub_3s}


sub

% get_prop -prop orig_inst_of {i:UUT3}


sub

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 219
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Working in the Schematic Views

Selecting Objects in the RTL/Technology Views


For mouse selection, standard object selection rules apply: In selection mode,
the pointer is shaped like a crosshair.

To select ... Do this ...


Single objects Click on the object in the RTL or Technology schematic, or click
the object name in the Hierarchy Browser.
Multiple objects Use one of these methods:
• Draw a rectangle around the objects.
• Select an object, press Ctrl, and click other objects you want to
select.
• Select multiple objects in the Hierarchy Browser. See
Browsing With the Hierarchy Browser, on page 234.
• Use Find to select the objects you want. See Using Find for
Hierarchical and Restricted Searches, on page 236.
Objects by type Use Edit->Find to select the objects (see Browsing With the Find
(instances, Command, on page 235), or use the Hierarchy Browser, which
ports, nets) lists objects by type.
All objects of a To select all objects of a certain type, do either of the following:
certain type • Right-click and choose the appropriate command from the
(instances, Select All Schematic/Current Sheet popup menus.
ports, nets)
• Select the objects in the Hierarchy Browser.
No objects Click the left mouse button in a blank area of the schematic or
(deselect all click the right mouse button to bring up the pop-up menu and
currently choose Unselect All. Deselected objects are no longer
selected objects) highlighted.

The HDL Analyst view highlights selected objects in red. If the object you
select is on another sheet of the schematic, the schematic tracks to the
appropriate sheet. If you have other windows open, the selected object is
highlighted in the other windows as well (crossprobing), but the other
windows do not track to the correct sheet. Selected nets that span different
hierarchical levels are highlighted on all the levels. See Crossprobing, on
page 247 for more information about crossprobing.

Some commands affect selection by adding to the selected set of objects: the
LO
Expand commands, the Select All commands, and the Select Net Driver and Select
Net Instances commands.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
220 December 2015
Working in the Schematic Views Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Working with Multisheet Schematics


The title bar of the RTL or Technology view indicates the number of sheets in
that schematic. In a multisheet schematic, nets that span multiple sheets are
indicated by sheet connector symbols, which you can use for navigation.

1. To reduce the number of sheets in a schematic, select Options->HDL


Analyst Options and increase the values set for Sheet Size Options - Instances
and Sheet Size Options - Filtered Instances. To display fewer objects per sheet
(increase the number of sheets), increase the values.

These options set a limit on the number of objects displayed on an unfil-


tered and filtered schematic sheet, respectively. A low Filtered Instances
value can cause lower-level logic inside a transparent instance to be
displayed on a separate sheet. The sheet numbers are indicated inside
the empty transparent instance.

2. To navigate through a multisheet schematic, refer to this table. It


summarizes common operations and ways to navigate.

To view ... Use one of these methods ...


Next sheet or Select View->Next/Previous Sheet.
previous sheet Press the right mouse button and draw a horizontal mouse
stroke (left to right for next sheet, right to left for previous
sheet).
Click the icons: Next Sheet ( ) or Previous Sheet ( )
Press Shift-right arrow (Next Sheet) or Shift-left arrow (Previous sheet).
Navigate with View->Back and View ->Forward if the next/previous
sheets are part of the display history.
A specific sheet Select View->View Sheets and select the sheet.
number Click the right mouse button, select View Sheets from the popup
menu, and then select the sheet you want.
Press Ctrl-g and select the sheet you want.
Lower-level logic Check the sheet numbers indicated inside the empty
of a transparent transparent instance. Use the sheet navigation commands like
instance on Next Sheet or View Sheets to move to the sheet you need.
separate sheets

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 221
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Working in the Schematic Views

To view ... Use one of these methods ...


All objects of a To highlight all the objects of the same type in the schematic,
certain type right-click and select the appropriate command from the Select
All Schematic popup menu.
To highlight all the objects of the same type on the current
sheet, right-click and select the appropriate command from the
Select All Sheet popup menu.

Selected items Filter the schematic as described in Filtering Schematics, on


only page 259.
A net across If there are no sheet numbers displayed in a hexagon at the
sheets end of the sheet connector, select Options ->HDL Analyst Options
and enable Show Sheet Connector Index. Right-click the sheet
connector and select the sheet number from the popup as
shown in the following figure.

Sheet Connector Symbol

Connected sheet numbers Sheet connector with multisheet popup menu

Moving Between Views in a Schematic Window


When you filter or expand your design, you move through a number of
different design views in the same schematic window. For example, you might
start with a view of the entire design, zoom in on an area, then filter an object,
and finally expand a connection in the filtered view, for a total of four views.

1. To move back to the previous view, click the Back icon or draw the
appropriate mouse stroke.

The software displays the last view, including the zoom factor. This does
not work in a newly generated view (for example, after flattening)
because there is no history.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
222 December 2015
Working in the Schematic Views Chapter 7: Analyzing with HDL Analyst and FSM Viewer

2. To move forward again, click the Forward icon or draw the appropriate
mouse stroke.

The software displays the next view in the display history.

Setting Schematic View Preferences


You can set various preferences for the RTL and Technology views from the
user interface.

1. Select Options->HDL Analyst Options. For a description of all the options on


this form, see HDL Analyst Options Command, on page 305 in the
Reference Manual.

2. The following table details some common operations:

To ... Do this ...


Display the Hierarchy Browser Enable Show Hierarchy Browser (General tab).
Control crossprobing from an Enable Enhanced Text Crossprobing. (General
object to a P&R text file tab)
Determine the number of Set the value with Maximum Instances on the
objects displayed on a sheet. Sheet Size tab. Increase the value to display
more objects per sheet.
Determine the number of Set the value with Maximum Filtered Instances
objects displayed on a sheet in on the Sheet Size tab. Increase the number to
a filtered view. display more objects per sheet. You cannot
set this option to a value less than the
Maximum Instances value.

Some of these options do not take effect in the current view, but are
visible in the next schematic view you open.

3. To view hierarchy within a cell, enable the General->Show Cell Interiors


option.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 223
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Working in the Schematic Views

Show Cell Interior off Show Cell Interior on

4. To control the display of labels, first enable the Text->Show Text option,
and then enable the Label Options you want. The following figure
illustrates the label that each option controls.

Show Symbol Name


Show Pin Name
Show Conn Name

Show Port Name

Show Instance Name


For a more detailed information about some of these options, see
Schematic Display, on page 109 in the Reference Manual.

5. Click OK on the HDL Analyst Options form.

The software writes the preferences you set to the ini file, and they
remain in effect until you
LO change them.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
224 December 2015
Working in the Schematic Views Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Managing Windows
As you work on a project, you open different windows. For example, you
might have two Technology views, an RTL view, and a source code window
open. The following guidelines help you manage the different windows you
have open. For information about cycling through the display history in a
single schematic, see Moving Between Views in a Schematic Window, on
page 222.

1. Toggle on View->Workbook Mode.

Below the Project view, you see tabs like the following for each open
view. The tab for the current view is on top. The symbols in front of the
view name on the tab help identify the kind of view.

2. To bring an open view to the front, if the window is not visible, click its
tab. If part of the window is visible, click in any part of the window.

If you previously minimized the view, it will be in minimized form.


Double-click the minimized view to open it.

3. To bring the next view to the front, click Ctrl-F6 in that window.

4. Order the display of open views with the commands from the Window
menu. You can cascade the views (stack them, slightly offset), or tile
them horizontally or vertically.

5. To close a view, press Ctrl-F4 in that window or select File->Close.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 225
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Exploring Design Hierarchy

Exploring Design Hierarchy


Schematics generally have a certain amount of design hierarchy. You can
move between hierarchical levels using the Hierarchy Browser or Push/Pop
mode. For additional information, see Analyzing With the HDL Analyst Tool,
on page 255. The topics include:
• Traversing Design Hierarchy with the Hierarchy Browser, on page 226
• Exploring Object Hierarchy by Pushing/Popping, on page 227
• Exploring Object Hierarchy of Transparent Instances, on page 233

Traversing Design Hierarchy with the Hierarchy Browser


The Hierarchy Browser is the list of objects on the left side of the RTL and
Technology views. It is best used to get an overview, or when you need to
browse and find an object. If you want to move between design levels of a
particular object, Push/Pop mode is more direct. Refer to Exploring Object
Hierarchy by Pushing/Popping, on page 227 for details.

The hierarchy browser allows you to traverse and select the following:
• Instances and submodules
• Ports
• Internal nets
• Clock trees (in an RTL view)
The browser lists the objects by type. A plus sign in a square icon indicates
that there is hierarchy under that object and a minus sign indicates that the
design hierarchy has been expanded. To see lower-level hierarchy, click on
the plus sign for the object. To ascend the hierarchy, click on the minus sign.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
226 December 2015
Exploring Design Hierarchy Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Click to expand and see


lower-level hierarchy

Click to collapse list

Refer to Hierarchy Browser Symbols, on page 63 in the Reference Manual for


an explanation of the symbols.

Exploring Object Hierarchy by Pushing/Popping


To view the internal hierarchy of a specific object, it is best to use Push/Pop
mode or examine transparent instances, instead of using the Hierarchy
Browser described in Traversing Design Hierarchy with the Hierarchy
Browser, on page 226. You can access Push/Pop mode with the Push/Pop
Hierarchy icon, the Push/Pop Hierarchy command, or mouse strokes.

When combined with other commands like filtering and expansion


commands, Push/Pop mode can be a very powerful tool for isolating and
analyzing logic. See Filtering Schematics, on page 259, Expanding Pin and
Net Logic, on page 261, and Expanding and Viewing Connections, on
page 265 for details about filtering and expansion. See the following sections
for information about pushing down and popping up in hierarchical design
objects:
– Pushing into Objects, on page 228, next
– Popping up a Hierarchical Level, on page 231

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 227
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Exploring Design Hierarchy

Pushing into Objects


In the schematic views, you can push into objects and view the lower-level
hierarchy. You can use a mouse stroke, the command, or the icon to push
into objects:

1. To move down a level (push into an object) with a mouse stroke, put
your cursor near the top of the object, hold down the right mouse
button, and draw a vertical stroke from top to bottom. You can push
into the following objects; see step 3 for examples of pushing into
different types of objects.
– Hierarchical instances. They can be displayed as pale yellow boxes
(opaque instances) or hollow boxes with internal logic displayed
(transparent instances). You cannot push into a hierarchical instance
that is hidden with the Hide Instance command (internal logic is
hidden).

Hierarchical object Press right mouse button and draw downward


to push into an object

– Technology-specific primitives. The primitives are listed in the


Hierarchy Browser in the Technology view, under Instances - Primitives.
– Inferred ROMs and state machines.
The remaining steps show you how to use the icon or command to push
into an object.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
228 December 2015
Exploring Design Hierarchy Chapter 7: Analyzing with HDL Analyst and FSM Viewer

2. Enable Push/Pop mode by doing one of the following:


– Select View->Push/Pop Hierarchy.
– Right-click in the Technology view and select Push/Pop Hierarchy from
the popup menu.
– Click the Push/Pop Hierarchy icon ( ) in the toolbar (two arrows
pointing up and down).
– Press F2.
The cursor changes to an arrow. The direction of the arrow indicates the
underlying hierarchy, as shown in the following figure. The status bar at
the bottom of the window reports information about the objects over
which you move your cursor.

3. To push (descend) into an object, click on the hierarchical object. For a


transparent instance, you must click on the pale yellow border. The
following figure shows the result of pushing into a ROM.

When you descend into a ROM, you can push into it one more time to
see the ROM data table. The information is in a view-only text file called
rom.info.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 229
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Exploring Design Hierarchy

Similarly, you can push into a state machine. When you push into an
FSM from the RTL view, you open the FSM viewer where you can graph-
ically view the transitions. For more information, see Using the FSM
Viewer, on page 272. If you push into a state machine from the
Technology view, you see the underlying logic.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
230 December 2015
Exploring Design Hierarchy Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Popping up a Hierarchical Level


1. To move up a level (pop up a level), put your cursor anywhere in the
design, hold down the right mouse button, and draw a vertical mouse
stroke, moving from the bottom upwards.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 231
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Exploring Design Hierarchy

Press the right mouse button


and draw an upward stroke to
pop up a level

The software moves up a level, and displays the next level of hierarchy.

2. To pop (ascend) a level using the commands or icon, do the following:


– Select the command or icon if you are not already in Push/Pop mode.
See Pushing into Objects, on page 228for details.
– Move your cursor to a blank area and click.
3. To exit Push/Pop mode, do one of the following:
– Click the right mouse button in a blank area of the view.
– Deselect View->Push/Pop Hierarchy.
– Deselect the Push/Pop Hierarchy icon.
– Press F2.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
232 December 2015
Exploring Design Hierarchy Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Exploring Object Hierarchy of Transparent Instances


Examining a transparent instance is one way of exploring the design
hierarchy of an object. The following table compares this method with
pushing (described in Exploring Object Hierarchy by Pushing/Popping, on
page 227).

Pushing Transparent Instance


User You initiate the operation You have no direct control; the transparent
control through the command or instance is automatically generated by
icon. some commands that result in a filtered
view.
Design Context lost; the lower- Context maintained; lower-level logic is
context level logic is shown in a displayed inside a hollow yellow box at the
separate view hierarchical level of the parent.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 233
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Finding Objects

Finding Objects
In the schematic views, you can use the Hierarchy Browser or the Find
command to find objects, as explained in these sections:
• Browsing to Find Objects in HDL Analyst Views, on page 234
• Using Find for Hierarchical and Restricted Searches, on page 236
• Using Wildcards with the Find Command, on page 239
• Using Find to Search the Output Netlist, on page 244
For information about the Tcl Find command, which you use to locate objects,
and create collections, see find, on page 90 in the Reference Manual.

Browsing to Find Objects in HDL Analyst Views


You can always zoom in to find an object in the RTL and Technology
schematics. The following procedure shows you how to browse through
design objects and find an object at any level of the design hierarchy. You can
use the Hierarchy Browser or the Find command to do this. If you are familiar
with the design hierarchy, the Hierarchy Browser can be the quickest method
to locate an object. The Find command is best used to graphically browse and
locate the object you want.

Browsing With the Hierarchy Browser


1. In the Hierarchy Browser, click the name of the net, port, or instance
you want to select.

The object is highlighted in the schematic.

2. To select a range of objects, select the first object in the range. Then,
scroll to display the last object in the range. Press and hold the Shift key
while clicking the last object in the range.

The software selects and highlights all the objects in the range.

3. If the object is on a lower hierarchical level, do either of the following:


LO
– Expand the appropriate higher-level object by clicking the plus
symbol next to it, and then select the object you want.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
234 December 2015
Finding Objects Chapter 7: Analyzing with HDL Analyst and FSM Viewer

– Push down into the higher-level object, and then select the object
from the Hierarchy Browser.

The selected object is highlighted in the schematic. The following


example shows how moving down the object hierarchy and selecting an
object causes the schematic to move to the sheet and level that contains
the selected object.

Expand Instances
and select an
object on a lower
hierarchical level.

Schematic pushes
down to the correct
level to show the
selected object.

4. To select all objects of the same type, select them from the Hierarchy
Browser. For example, you can find all the nets in your design.

Browsing With the Find Command


1. In a schematic view, select HDL Analyst->Find or press Ctrl-f to open the
Object Query dialog box.

2. Do the following in the dialog box:


– Select objects in the selection box on the left. You can select all the
objects or a smaller set of objects to browse. If length makes it hard to
read a name, click the name in the list to cause the software to
display the entire name in the field at the bottom of the dialog box.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 235
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Finding Objects

– Click the arrow to move the selected objects over to the box on the
right.

The software highlights the selected objects.

3. In the Object Query dialog box, click on an object in the box on the right.

The software tracks to the schematic page with that object.

Using Find for Hierarchical and Restricted Searches


You can always zoom in to find an object in the RTL and Technology
schematics or use the Hierarchy Browser (see Browsing to Find Objects in
HDL Analyst Views, on page 234). This procedure shows you how to use the
Find command to do hierarchical object searches or restrict the search to the
current level or the current level and its underlying hierarchy.

Note that Find only adds to the current selection; it does not deselect anything
that is already selected. you can use successive searches to build up exactly
the selection you need, before filtering.

1. If needed, restrict the range of the search by filtering the view.

See Viewing Design Hierarchy and Context, on page 256 and Filtering
Schematics, on page 259 for details. With a filtered view, the software
only searches the filtered instances, unless you set the scope of the
search to Entire Design, as described below, in which case Find searches
the entire design.

You can use the filtering technique to restrict your search to just one
schematic sheet. Select all the objects on one sheet and filter the view.
Continue with the procedure.

2. To further restrict the range of the search, hide instances you do not
need.

You can do this in addition to filtering the view, or instead of filtering the
view. Hidden instances and their hierarchy are excluded from the
search. When you have finished the search, use the Unhide Instances
command to make the hierarchy visible again.
LO box.
3. Open the Object Query dialog

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
236 December 2015
Finding Objects Chapter 7: Analyzing with HDL Analyst and FSM Viewer

– Do one of the following: right click in the RTL or Technology view and
select Find from the popup menu, press Ctrl-f, or click the Find icon
( ).
– Reposition the dialog box so you can see both your schematic and the
dialog box.

4. Select the tab for the type of object. The Unhighlighted box on the left lists
all objects of that type (instances, symbols, nets, or ports).

For fastest results, search by Instances rather than Nets. When you select
Nets, the software loads the whole design, which could take some time.

5. Click one of these buttons to set the hierarchical range for the search:
Entire Design, Current Level & Below, or Current Level Only, depending on the
hierarchical level of the design to which you want to restrict your search.

The range setting is especially important when you use wildcards. See
Effect of Hierarchy and Range on Wildcard Searches, on page 239 for
details. Current Level Only or Current Level & Below are useful for searching
filtered schematics or critical path schematics.

The lower-level details of a transparent instance appear at the current


level and are included in the search when you set it to Current Level Only.
To exclude them, temporarily hide the transparent instances, as
described in step 2.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 237
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Finding Objects

Use Entire Design to hierarchically search the whole design. For large
hierarchical designs, reduce the scope of the search by using the
techniques described in the first step.

The Unhighlighted box shows available objects within the scope you set.
Objects are listed in alphabetical order, not hierarchical order.

6. To search for objects in the mapped database or the output netlist, set
the Name Space option.

The name of an object might be changed because of synthesis optimiza-


tions or to match the place-and-route tool conventions, so that the
object name may no longer match the name in the original netlist.
Setting the Name Space option ensures that the Find command searches
the correct database for the object. For example, if you set this option to
Tech View, the tool searches the mapped database (srm) for the object
name you specify. For information about using this feature to find
objects from an output netlist, see Using Find to Search the Output
Netlist, on page 244.

7. Do the following to select objects from the list. To use wildcards in the
selection, see the next step.
– Click on the objects you want from the list. If length makes it hard to
read a name, click the name in the list to cause the software to
display the entire name in the field at the bottom of the dialog box.
– Click Find 200 or Find All. The former finds the first 200 matches, and
then you can click the button again to find the next 200.
– Click the right arrow to move the objects into the box on the right, or
double-click individual names.

The schematic displays highlighted objects in red.

8. Do the following to select objects using patterns or wildcards.


– Type a pattern in the Highlight Wildcard field. See Using Wildcards with
the Find Command, on page 239 for a detailed discussion of
wildcards.
The Unhighlighted list shows the objects that match the wildcard
criteria. If length makes it hard to read a name, click the name in the
list to cause the software
LO to display the entire name in the field at the
bottom of the form.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
238 December 2015
Finding Objects Chapter 7: Analyzing with HDL Analyst and FSM Viewer

– Click the right arrow to move the selections to the box on the right, or
double-click individual names. The schematic displays highlighted
objects in red.

You can use wildcards to avoid typing long pathnames. Start with a
general pattern, and then make it more specific. The following example
browses and uses wildcards successively to narrow the search.

Find all instances three levels down *.*.*


Narrow search to find instances that begin with i_ i_*.*.*
Narrow search to find instances that begin with un2 after the i_*.*.un2*
second hierarchy separator

Note that there are some differences when you specify the find command
in the RTL view, Technology view, or the constraint file.

9. You can leave the dialog box open to do successive Find operations. Click
OK or Cancel to close the dialog box when you are done.

For detailed information about the Find command and the Object Query
dialog box, see Find Command (HDL Analyst), on page 164 of the Reference
Manual.

Using Wildcards with the Find Command


Use the following wildcards when you search the schematics:

* The asterisk matches any sequence of characters.


? The question mark matches any single character.
. The dot explicitly matches a hierarchy separator, so type one dot for each level
of hierarchy. To use the dot as a pattern and not a hierarchy separator, type a
backslash before the dot: \.

Effect of Hierarchy and Range on Wildcard Searches


The asterisk and question mark wildcards do not cross hierarchical bound-
aries, but search each level of hierarchy individually with the search pattern.
This default is affected by the following:
• Hierarchical separators

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 239
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Finding Objects

Dots match hierarchy separators, unless you use the backslash escape
character in front of the dot (\.). Hierarchical search patterns with a dot
(l*.*) are repeated at each level included in the scope. If you use the *.*
pattern with Current Level, the software matches non-hierarchical names
at the current level that include a dot.
• Search range
The scope of the search determines the starting point for the searches.
Some times the starting point might make it appear as if the wildcards
cross hierarchical boundaries. If you are at 2A in the following figure
and the scope of the search is set to Current Level and Below, separate
searches start at 2A, 3A1, and 3A2. Each search does not cross hierar-
chical boundaries. If the scope of the search is Entire Design, the wildcard
searches run from each hierarchical point (1, 2A, 2B, 3A1, 3A2, 3B1,
3B2, and 3B3). The result of an asterisk search (*) with Entire Design is a
list of all matches in the design, regardless of the current level.

1 Entire Design

Current Current
2A 2B
Level and Level
Below

3A1 3A2 3B1 3B2 3B3

See Wildcard Search Examples, on page 241 for examples.

How a Wildcard Search Works


1. The starting point of a wildcard search depends on the range set for the
search.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
240 December 2015
Finding Objects Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Entire Design Starts at top level and uses the pattern to search from that
level. It then moves to any child levels below the top level and
searches them. The software repeats the search pattern at
each hierarchical point in the design until it searches the
entire design.
Current Level Starts at the current hierarchical level and searches that level
only. A search started at 2A only covers 2A.
Current Level Starts at the current hierarchical level and searches that level.
and Below It then moves to any child levels below the starting point and
conducts separate searches from each of these starting points.

2. The software applies the wildcard pattern to all applicable objects within
the range. For Current Level and Current Level and Below, the current level
determines the starting point.

Dots match hierarchy separators, unless you use the backslash escape
character in front of the dot (\.). Hierarchical search patterns with a dot
(l*.*) are repeated at each level included in the scope. See Effect of
Hierarchy and Range on Wildcard Searches, on page 239 and Wildcard
Search Examples, on page 241 for details and examples, respectively. If
you use the *.* pattern with Current Level, the software matches non-
hierarchical names at the current level that include a dot.

Wildcard Search Examples


The figure shows a design with three hierarchical levels, and the table shows
the results of some searches on this design.

2A 2B

3A1 3A2 3B1 3B2 3B3

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 241
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Finding Objects

Scope Pattern Starting Finds Matches in ...


Point
Entire * 3A1 1, 2A, 2B, 3A1, 3A2, 3B1, 3B2, and 3B3 (* at all
Design levels)
*.* 2B 2A and 2B (*.* from 1)
3A1, 3A2, 3B1, 3B2, and 3B3 (*.* from 2A and
2B)
No matches in 1 (because of the hierarchical dot),
unless a name includes a non-hierarchical dot.
Current * 1 1 only (no hierarchical boundary crossing)
Level
*.* 2B 2B only. No search of lower levels even though
the dot is specified, because the scope is Current
Level. No matches, unless a 2B name includes a
non-hierarchical dot.
Current * 2A 2A only (no hierarchical boundary crossing)
Level and
Below *.* 1 2A and 2B (*.* from 1)
3A1, 3A2, 3B1, 3B2, and 3B3 (*.* from 2A and
2B)
No matches from 1, because the dot is specified.
*.* 2B 3B1, 3B2, and 3B3 (*.* from 2B)
*.* 3A2 No matches (no hierarchy below 3A2)
*.*.* 1 3A1, 3A2, 3B1, 3B2, and 3B3 (*.*.* from 1)
Search ends because there is no hierarchy two
levels below 2A and 2B.

Difference from Tcl Search


In a simple Tcl search, no character (except the backslash, \) has special
meaning. This means that the asterisk matches everything in a string. The
FPGA synthesis tools and Synopsys TimeQuest and Design Compiler
products confine the simple search to within one level of hierarchy. The
following command searches each level of hierarchy individually for the speci-
fied pattern:
LO
find –hier *abc*addr_reg[*]

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
242 December 2015
Finding Objects Chapter 7: Analyzing with HDL Analyst and FSM Viewer

If you want to go through the hierarchy, you must add the hierarchy separa-
tors to the search pattern:

find {*.*.abc.*.*.addr_reg[*]}

Find Command Differences in HDL Analyst Views and Constraint File


There are some slight differences when you use the Find command in the RTL
view, Technology view, and the constraint files:
• You cannot use find to search for bit registers of a bit array in the RTL or
Technology views, but you can specify it in a constraint file, where the
following command will work:

find –seq {i:modulex_inst.qb[7]}


In a HDL Analyst view, you cannot find {i:modulex_inst.qb[7]}, but you can
specify and find {i:modulex_inst.qb[7:0]}.
• By default, the following Tcl command does not find objects in the RTL
view, although it does find objects in the Technology view:

–hier –seq * -filter @clock == clk75


To make this work in an RTL view, you must turn on Annotated Properties
for Analyst in the Device tab of the Implementation Options dialog box, recom-
pile the design, and then open a new RTL view.

Combining Find with Filtering to Refine Searches


You can combine the Find command with the filtering commands to better
effect. Depending on what you want to do, use the Find command first, or a
filtering command.

1. To limit the range of a search, do the following:


– Filter the design.
– Use the Find command on the filtered view, but set the search range
to Current Level Only.

2. Select objects for a filtered view.


– Use the Find command to browse and select objects.
– Filter the objects to display them.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 243
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Finding Objects

Using Find to Search the Output Netlist


When the synthesis tool creates an output netlist like an edf file, some names
are optimized for use in the P&R tool. When you debug your design for place
and route looking for a particular object, use the Name Space option in the
Object Query dialog box to locate the optimized names in the output netlist.
The following procedure shows you how to locate an object, highlight and
filter it in the Technology view, and crossprobe to the source code for editing.

1. Select the output netlist file option in the Implementations Results tab of the
Implementation Options dialog box.

2. After you synthesize your design, open your output netlist file and select
the name of the object you want to find.

Copy Name

3. Copy the name and open a Technology view.

4. In the Technology view, press Ctrl-f or select Edit->Find to open the Object
Query dialog box and do the following:
– Paste the object name you copied into the Highlight Search field.
– Set the Name Space option to Netlist and click Find All.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
244 December 2015
Finding Objects Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Search by Tech View Search by Netlist

If you leave the Name Space option set to the default of Tech View, the
tool does not find the name because it is searching the mapped
database instead of the output netlist.
– Double click the name to move it into the Highlighted field and close the
dialog box.

In the Technology view, the name is highlighted in the schematic.

5. Select HDL Analyst->Filter Schematic to view only the highlighted portion of


the schematic.

compare_output_NE0(C_0)
slow
Alias: compare_output_NE0_cZ

Filtered View

The tooltip shows the equivalent name in the Technology view.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 245
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Finding Objects

6. Double click on the filtered schematic to crossprobe to the


corresponding code in the HDL file.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
246 December 2015
Crossprobing Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Crossprobing
Crossprobing is the process of selecting an object in one view and having the
object or the corresponding logic automatically highlighted in other views.
Highlighting a line of text, for example, highlights the corresponding logic in
the schematic views. Crossprobing helps you visualize where coding changes
or timing constraints might help to reduce area or improve performance.

You can crossprobe between the RTL view, Technology view, the FSM Viewer,
the log file, the source files, and some external text files from place-and-route
tools. However, not all objects or source code crossprobe to other views,
because some source code and RTL view logic is optimized away during the
compilation or mapping processes.

This section describes how to crossprobe from different views. It includes the
following:
• Crossprobing within an RTL/Technology View, on page 247
• Crossprobing from the RTL/Technology View, on page 248
• Crossprobing from the Text Editor Window, on page 250
• Crossprobing from the Tcl Script Window, on page 253
• Crossprobing from the FSM Viewer, on page 253

Crossprobing within an RTL/Technology View


Selecting an object name in the Hierarchy Browser highlights the object in
the schematic, and vice versa.

Selected Object Highlighted Object


Instance in schematic (single-click) Module icon in Hierarchy Browser
Net in schematic Net icon in Hierarchy Browser
Port in schematic Port icon in Hierarchy Browser
Logic icon in Hierarchy Browser Instance in schematic
Net icon in Hierarchy Browser Net in schematic
Port icon in Hierarchy Browser Port in schematic

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 247
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Crossprobing

In this example, when you select the DECODE module in the Hierarchy
Browser, the DECODE module is automatically selected in the RTL view.

Crossprobing from the RTL/Technology View


1. To crossprobe from an RTL or Technology views to other open views,
select the object by clicking on it.

The software automatically highlights the object in all open views. If the
open view is a schematic, the software highlights the object in the
Hierarchy Browser on the left as well as in the schematic. If the
highlighted object is on another sheet of a multi-sheet schematic, the
view does not automatically track to the page. If the crossprobed object
is inside a hidden instance, the hidden instance is highlighted in the
schematic.

If the open view is a source file, the software tracks to the appropriate
code and highlights it. The following figure shows crossprobing between
the RTL, Technology, and Text Editor (source code) views.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
248 December 2015
Crossprobing Chapter 7: Analyzing with HDL Analyst and FSM Viewer

RTL View

Text Editor

Technology View

2. To crossprobe from the RTL or Technology view to the source file when
the source file is not open, double-click on the object in the RTL or
Technology view.

Double-clicking automatically opens the appropriate source code file


and highlights the appropriate code. For example, if you double-click an
object in a Technology view, the HDL Analyst tool automatically opens
an editor window with the source code and highlights the code that
contains the selected register.

The following table summarizes the crossprobing capability from the RTL or
Technology view.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 249
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Crossprobing

From To Procedure
RTL Source code Double-click an object. If the source code file is not
open, the software opens the Text Editor window to
the appropriate section of code. If the source file is
already open, the software scrolls to the correct
section of the code and highlights it.
RTL Technology The Technology view must be open. Click the object
to highlight and crossprobe.
RTL FSM Viewer The FSM view must be open. The state machine
must be coded with a onehot encoding style. Click
the FSM to highlight and crossprobe.
Technology Source code If the source code file is already, open, the software
scrolls to the correct section of the code and
highlights it.
If the source code file is not open, double-click an
object in the Technology view to open the source
code file.
Technology RTL The RTL view must be open. Click the object to
highlight and crossprobe.

Crossprobing from the Text Editor Window


To crossprobe from a source code window or from the log file to an RTL,
Technology, or FSM view, use this procedure. You can use this method to
crossprobe from any text file with objects that have the same instance names
as in the synthesis software. For example, you can crossprobe from place-
and-route files. See Example of Crossprobing a Path from a Text File, on
page 251 for a practical example of how to use crossprobing.

1. Open the RTL, FSM, or Technology view to which you want to


crossprobe.

2. To crossprobe from an error, warning, or note in the html log file, click
on the file name to open the corresponding source code in another Text
Editor window; to crossprobe from a text log file, double-click on the text
of the error, warning, or note.
LO
3. To crossprobe from a third-party text file (not source code or a log file),
select Options->HDL Analyst Options->General, and enable Enhanced text
crossprobing.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
250 December 2015
Crossprobing Chapter 7: Analyzing with HDL Analyst and FSM Viewer

4. Select the appropriate portion of text in the Text Editor window. In some
cases, it may be necessary to select an entire block of text to crossprobe.

The software highlights the objects corresponding to the selected code in


all the open windows. For example, if you select a state name in the
code, it highlights the state in the FSM viewer. If an object is on another
schematic sheet or on another hierarchical level, the highlighting might
not be obvious. If you filter the RTL or schematic view (right-click in the
source code window with the selected text and select Filter Schematic from
the popup menu), you can isolate the highlighted objects for easy
viewing.

Example of Crossprobing a Path from a Text File


This example selects a path in a log file and crossprobes it in the Technology
view. You can use the same technique to crossprobe from other text files like
place-and-route files, as long as the instance names in the text file match the
instance names in the synthesis tool.

1. Open the log file, the RTL, and Technology views.

2. Select the path objects in the log file.


– Select the column by pressing Alt and dragging the cursor to the end
of the column. On the Linux platform, use the key to which the Alt
function is mapped; this is usually the Ctrl-Alt key combination.
– To select all the objects in the path, right-click and choose Select in
Analyst from the popup menu. Alternatively, you can select certain
objects only, as described next.

The software selects the objects in the column, and highlights the path
in the open RTL and Technology views.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 251
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Crossprobing

Text Editor

Technology View

– To further filter the objects in the path, right-click and choose Select
From from the popup menu. On the form, check the objects you want,
and click OK. Only the corresponding objects are highlighted.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
252 December 2015
Crossprobing Chapter 7: Analyzing with HDL Analyst and FSM Viewer

3. To isolate and view only the selected objects, do this in the Technology
view: press F12, or right-click and select the Filter Schematic command
from the popup menu.

You see just the selected objects.

Crossprobing from the Tcl Script Window


Crossprobing from the Tcl script window is useful for debugging error
messages.

To crossprobe from the Tcl Script window to the source code, double-click a
line in the Tcl window. To crossprobe a warning or error, first click the
Messages tab and then double-click the warning or error. The software opens
the relevant source code file and highlights the corresponding code.

Crossprobing from the FSM Viewer


You can crossprobe to the FSM Viewer if you have the FSM view open. You
can crossprobe from an RTL, Technology, or source code window.

To crossprobe from the FSM Viewer, do the following:

1. Open the view to which you want to crossprobe: RTL/Technology view,


or the source code file.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 253
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Crossprobing

2. Do the following in the open FSM view:


– For FSMs with a onehot encoding style, click the state bubbles in the
bubble diagram or the states in the FSM transition table.
– For all other FSMs, click the states in the bubble diagram. You
cannot use the transition table because with these encoding styles,
the number of registers in the RTL or Technology views do not match
the number of registers in the FSM Viewer.

The software highlights the corresponding code or object in the open


views. You can only crossprobe from a state in the FSM table if you used
a onehot encoding style.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
254 December 2015
Analyzing With the HDL Analyst Tool Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Analyzing With the HDL Analyst Tool


The HDL Analyst tool is a graphical productivity tool that helps you visualize
your synthesis results. It consists of RTL-level and technology-primitive level
schematics that let you graphically view and analyze your design.
• RTL View
Using BEST® (Behavior Extracting Synthesis Technology) in the RTL
view, the software keeps a high-level of abstraction and makes the RTL
view easy to view and debug. High-level structures like RAMs, ROMs,
operators, and FSMs are kept as abstractions in this view instead of
being converted to gates. You can examine the high-level structure, or
push into a component and view the gate-level structure.
• Technology View
The software uses module generators to implement the high-level struc-
tures from the RTL view, and maps them to technology-specific
resources.

To analyze information, compare the current view with the information in the
RTL/Technology view, the log file, the FSM view, and the source code, you
can use techniques like crossprobing, flattening, and filtering. See the
following for more information about analysis techniques.
• Viewing Design Hierarchy and Context, on page 256
• Filtering Schematics, on page 259
• Expanding Pin and Net Logic, on page 261
• Expanding and Viewing Connections, on page 265
• Flattening Schematic Hierarchy, on page 266
• Minimizing Memory Usage While Analyzing Designs, on page 271
For additional information about navigating the HDL Analyst views or using
other techniques like crossprobing, see the following:
• Working in the Schematic Views, on page 212
• Exploring Design Hierarchy, on page 226
• Finding Objects, on page 234
• Crossprobing, on page 247

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 255
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Analyzing With the HDL Analyst Tool

Viewing Design Hierarchy and Context


Most large designs are hierarchical, so the synthesis software provides tools
that help you view hierarchy details or put the details in context. Alterna-
tively, you can browse and navigate hierarchy with Push/Pop mode, or flatten
the design to view internal hierarchy.

This section describes how to use interactive hierarchical viewing operations


to better analyze your design. Automatic hierarchy viewing operations that
are built into other commands are described in the context in which they
appear. For example, Viewing Critical Paths, on page 281 describes how the
software automatically traces a critical path through different hierarchical
levels using hollow boxes with nested internal logic (transparent instances) to
indicate levels in hierarchical instances.

1. To view the internal logic of primitives in your design, do either of the


following:
– To view the logic of an individual primitive, push into it. This
generates a new schematic view with the internal details. Click the
Back icon to return to the previous view.
– To view the logic of all primitives in the design, select Options->HDL
Analyst Options->General, and enable Show Cell Interior. This command
lets you see internal logic in context, by adding the internal details to
the current schematic view and all subsequent views. If the view is
too cluttered with this option on, filter the view (see Filtering
Schematics, on page 259) or push into the primitive. Click the Back
icon to return to the previous view after filtering or pushing into the
object.

The following figure compares these two methods:

Result of pushing into a primitive (new view


of lower-level logic) Result of enabling Show Cell Interior
option (same view with internal logic)
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
256 December 2015
Analyzing With the HDL Analyst Tool Chapter 7: Analyzing with HDL Analyst and FSM Viewer

2. To hide selected hierarchy, select the instance whose hierarchy you


want to exclude, and then select Hide Instances from the HDL Analyst menu
or the right-click popup menu in the schematic view.

You can hide opaque (solid yellow) or transparent (hollow) instances.


The software marks hidden instances with an H in the lower left. Hidden
instances are like black boxes; their hierarchy is excluded from filtering,
expanding, dissolving, or searching in the current window, although
they can be crossprobed. An instance is only hidden in the current view
window; other view windows are not affected. Temporarily hiding unnec-
essary hierarchy focuses analysis and saves time in large designs.

‘H’ indicates a
hidden instance

Before you save a design with hidden instances, select Unhide Instances
from the HDL Analyst menu or the right-click popup menu and make the
hidden internal hierarchy accessible again. Otherwise, the hidden
instances are saved as black boxes, without their internal logic.
Conversely, you can use this feature to reduce the scope of analysis in a
large design by hiding instances you do not need, saving the reduced
design to a new name, and then analyzing it.

3. To view the internal logic of a hierarchical instance, you can push into
the instance, dissolve the selected instance with the Dissolve Instances
command, or flatten the design. You cannot use these methods to view
the internal logic of a hidden instance.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 257
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Analyzing With the HDL Analyst Tool

Pushing into Generates a view that shows only the internal logic. You do not
an instance see the internal hierarchy in context. To return to the previous
view, click Back. See Exploring Object Hierarchy by
Pushing/Popping, on page 227 for details.
Flattening Opens a new view where the entire design is flattened, except
the entire for hidden hierarchy. Large flattened designs can be
design overwhelming. See Flattening Schematic Hierarchy, on
page 266 for details about flattening designs.
Because this is a new view, you cannot use Back to return to
the previous view. To return to the top-level unflattened
schematic, right-click in the view and select Unflatten Schematic.
Flattening Generates a view where the hierarchy of the selected instances
an instance is flattened, but the rest of the design is unaffected. This
by dissolving provides context. See Flattening Schematic Hierarchy, on
page 266 for details about dissolving instances.

4. If the result of filtering or dissolving is a hollow box with no internal


logic, try either of the following, as appropriate, to view the internal
hierarchy:
– Select Options->HDL Analyst Options->Sheet Size and increase the value of
Maximum Filtered Instances. Use this option if the view is not too
cluttered.
– Use the sheet navigation commands to go to the sheets indicated in
the hollow box.

If there is too much internal logic to display in the current view, the
software puts the internal hierarchy on separate schematic sheets. It
displays a hollow box with no internal logic and indicates the schematic
sheets that contain the internal logic.

5. To view the design context of an instance in a filtered view, select the


instance, right-click, and select Show Context from the popup menu.

The software displays an unfiltered view of the hierarchical level that


contains the selected object, with the instance highlighted. This is useful
when you have to go back and forth between different views during
analysis. The context differs from the Expand commands, which show
connections. To return to the original filtered view, click Back.
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
258 December 2015
Analyzing With the HDL Analyst Tool Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Filtering Schematics
Filtering is a useful first step in analysis, because it focuses analysis on the
relevant parts of the design. Some commands, like the Expand commands,
automatically generate filtered views; this procedure only discusses manual
filtering, where you use the Filter Schematic command to isolate selected
objects. See Chapter 3 of the Reference Manual for details about these
commands.

This table lists the advantages of using filtering over flattening:

Filter Schematic Command Flatten Commands


Loads part of the design; better Loads entire design
memory usage
Combine filtering with Push/Pop Must use Unflatten Schematic to return to top
mode, and history buttons (Back level, and flatten the design again to see lower
and Forward) to move freely levels. Cannot return to previous view if the
between hierarchical levels previous view is not the top-level view.

1. Select the objects that you want to isolate. For example, you can select
two connected objects.

If you filter a hidden instance, the software does not display its internal
hierarchy when you filter the design. The following example illustrates
this.

2. Select the Filter Schematic command, using one of these methods:


– Select Filter Schematic from the HDL Analyst menu or the right-click
popup menu.
– Click the Filter Schematic icon (buffer gate) ( ).

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 259
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Analyzing With the HDL Analyst Tool

– Press F12.
– Press the right mouse button and draw a narrow V-shaped mouse
stroke in the schematic window. See Help->Mouse Stroke Tutor for
details.

The software filters the design and displays the selected objects in a
filtered view. The title bar indicates that it is a filtered view. Hidden
instances have an H in the lower left. The view displays other hierar-
chical instances as hollow boxes with nested internal logic (transparent
instances). For descriptions of filtered views and transparent instances,
see Filtered and Unfiltered Schematic Views, on page 102 and Trans-
parent and Opaque Display of Hierarchical Instances, on page 107in the
Reference Manual. If the transparent instance does not display internal
logic, use one of the alternatives described in Viewing Design Hierarchy
and Context, on page 256, step 4.

Filtered view

3. If the filtered view does not display the pin names of technology
primitives and transparent instances that you want to see, do the
following:
– Select Options->HDL Analyst Options->Text and enable Show Pin Name.
– To temporarily display a pin name, move the cursor over the pin. The
name is displayed asLO long as the cursor remains over the pin.
Alternatively, select a pin. The software displays the pin name until
you make another selection. Either of these options can be applied to

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
260 December 2015
Analyzing With the HDL Analyst Tool Chapter 7: Analyzing with HDL Analyst and FSM Viewer

individual pins. Use them to view just the pin names you need and
keep design clutter to a minimum.
– To see all the hierarchical pins, select the instance, right-click, and
select Show All Hier Pins.

You can now analyze the problem, and do operations like the following:

Trace paths, build up logic See Expanding Pin and Net Logic, on page 261
and Expanding and Viewing Connections, on
page 265
Filter further Select objects and filter again
Find objects See Finding Objects, on page 234
Flatten, or hide and flatten See Flattening Schematic Hierarchy, on
page 266. You can hide transparent or opaque
instances.
Crossprobe from filtered See Crossprobing from the RTL/Technology
view View, on page 248

4. To return to the previous schematic view, click the Back icon. If you
flattened the hierarchy, right-click and select Unflatten Schematic to return
to the top-level unflattened view.

For additional information about filtering schematics, see Filtering


Schematics, on page 259 and Flattening Schematic Hierarchy, on page 266.

Expanding Pin and Net Logic


When you are working in a filtered view, you might need to include more logic
in your selected set to debug your design. This section describes commands
that expand logic fanning out from pins or nets; to expand paths, see
Expanding and Viewing Connections, on page 265.

Use the Expand commands with the Filter Schematic, Hide Instances, and Flatten
commands to isolate just the logic that you want to examine. Filtering
isolates logic, flattening removes hierarchy, and hiding instances prevents
their internal hierarchy from being expanded. See Filtering Schematics, on
page 259 and Flattening Schematic Hierarchy, on page 266 for details.

1. To expand logic from a pin hierarchically across boundaries, use the


following commands.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 261
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Analyzing With the HDL Analyst Tool

To ... Do this (HDL Analyst->Hierarchical/Popup menu) ...


See all cells connected Select a pin and select Expand. See Expanding
to a pin Filtered Logic Example, on page 263.
See all cells that are Select a pin and select Expand to Register/Port. See
connected to a pin, Expanding Filtered Logic to Register/Port
up to the next register Example, on page 264.
See internal cells Select a pin and select Expand Inwards. The software
connected to a pin filters the schematic and displays the internal cells
closest to the port. See Expanding Inwards
Example, on page 264.

The software expands the logic as specified, working on the current level
and below or working up the hierarchy, crossing hierarchical bound-
aries as needed. Hierarchical levels are shown nested in hollow
bounding boxes. The internal hierarchy of hidden instances is not
displayed.

For descriptions of the Expand commands, see HDL Analyst Menu, on


page 279 of the Reference Manual.

2. To expand logic from a pin at the current level only, do the following:
– Select a pin, and go to the HDL Analyst->Current Level menu or the right-
click popup menu->Current Level.
– Select Expand or Expand to Register/Ports. The commands work as
described in the previous step, but they do not cross hierarchical
boundaries.

3. To expand logic from a net, use the commands shown in the following
table.
– To expand at the current level and below, select the commands from
the HDL Analyst->Hierarchical menu or the right-click popup menu.
– To expand at the current level only, select the commands from the
HDL Analyst->Current Level menu or the right-click popup menu->Current
Level.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
262 December 2015
Analyzing With the HDL Analyst Tool Chapter 7: Analyzing with HDL Analyst and FSM Viewer

To ... Do this ...


Select the driver of Select a net and select Select Net Driver. The result is a
a net filtered view with the net driver selected (Selecting the Net
Driver Example, on page 265).
Trace the driver, across Select a net and select Go to Net Driver. The software shows
sheets if needed a view that includes the net driver.
Select all instances on Select a net and select Select Net Instances. You see a filtered
a net view of all instances connected to the selected net.

Expanding Filtered Logic Example

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 263
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Analyzing With the HDL Analyst Tool

Expanding Filtered Logic to Register/Port Example

Expanding Inwards Example

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
264 December 2015
Analyzing With the HDL Analyst Tool Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Selecting the Net Driver Example

Expanding and Viewing Connections


This section describes commands that expand logic between two or more
objects; to expand logic out from a net or pin, see Expanding Pin and Net
Logic, on page 261. You can also isolate the critical path or use the Timing
Analyst to generate a schematic for a path between objects, as described in
Analyzing Timing in Schematic Views, on page 278.

Use the following path commands with the Filter Schematic and Hide Instances
commands to isolate just the logic that you want to examine. The two
techniques described here differ: Expand Paths expands connections between
selected objects, while Isolate Paths pares down the current view to only
display connections to and from the selected instance.

For detailed descriptions of the commands mentioned here, see Commands


That Result in Filtered Schematics, on page 128 in the Reference Manual.

1. To expand and view connections between selected objects, do the


following:
– Select two or more points.
– To expand the logic at the current level only, select HDL Analyst->
Current Level->Expand Paths or popup menu->Current Level Expand Paths.
– To expand the logic at the current level and below, select HDL Analyst->
Hierarchical->Expand Paths or popup menu->Expand Paths.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 265
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Analyzing With the HDL Analyst Tool

2. To view connections from all pins of a selected instance, right-click and


select Isolate Paths from the popup menu.

Starting Point The Filtered View Traces Paths (Forward and Back) From All
Pins of the Selected Instance...
Filtered view Traces through all sheets of the filtered view, up to the next
port, register, hierarchical instance, or black box.
Unfiltered view Traces paths on the current schematic sheet only, up to the
next port, register, hierarchical instance, or black box.

Unlike the Expand Paths command, the connections are based on the
schematic used as the starting point; the software does not add any
objects that were not in the starting schematic.

Flattening Schematic Hierarchy


Flattening removes hierarchy LOso you can view the logic without hierarchical
levels. In most cases, you do not have to flatten your hierarchical schematic
to debug and analyze your design, because you can use a combination of

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
266 December 2015
Analyzing With the HDL Analyst Tool Chapter 7: Analyzing with HDL Analyst and FSM Viewer

filtering, Push/Pop mode, and expanding to view logic at different levels.


However, if you must flatten the design, use the following techniques, which
include flattening, dissolving, and hiding instances.

1. To flatten an entire design down to logic cells, use one of the following
commands:
– For an RTL view, select HDL Analyst->RTL->Flattened View. This flattens
the design to generic logic cells.
– For a Technology view, select Flattened View or Flattened to Gates View
from the HDL Analyst->Technology menu. Use the former command to
flatten the design to the technology primitive level, and the latter
command to flatten it further to the equivalent Boolean logic.

The software flattens the top-level design and displays it in a new


window. To return to the top-level design, right-click and select Unflatten
Schematic.

Unless you really require the entire design to be flattened, use Push/Pop
mode and the filtering commands (Filtering Schematics, on page 259) to
view the hierarchy. Alternatively, you can use one of the selective
flattening techniques described in subsequent steps.

2. To selectively flatten transparent instances when you analyze critical


paths or use the Expand commands, select Flatten Current Schematic from
the HDL Analyst menu, or select Flatten Schematic from the right-click
popup menu.

The software generates a new view of the current schematic in the same
window, with all transparent instances at the current level and below
flattened. RTL schematics are flattened down to generic logic cells and
Technology views down to technology primitives. To control the number
of hierarchical levels that are flattened, use the Dissolve Instances
command described in step 4.

If your view only contains hidden hierarchical instances or pale yellow


(opaque) hierarchical instances, nothing is flattened. If you flatten an
unfiltered (usually the top-level design) view, the software flattens all
hierarchical instances (transparent and opaque) at the current level and
below. The following figure shows flattened transparent instances.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 267
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Analyzing With the HDL Analyst Tool

Opaque hierarchical
instance is unaffected.

Flatten
Schematic
flattens

Hidden transparent
instance is not
flattened.

Because the flattened view is a new view, you cannot use Back to return
to the unflattened view or the views before it. Use Unflatten Schematic to
return to the unflattened top-level view.

3. To selectively flatten the design by hiding instances, select hierarchical


instances whose hierarchy you do not want to flatten, right-click, and
select Hide Instances. Then flatten the hierarchy using one of the Flatten
commands described above.

Use this technique if you want to flatten most of your design. If you want
to flatten only part of your design, use the approach described in the
next step.

When you hide instances, the software generates a new view where the
hidden instances are not flattened, but marked with an H in the lower
LO design is flattened. If unhidden hierarchical
left corner. The rest of the
instances are not flattened by this procedure, use the Flattened View or
Flattened to Gates View commands described in step 1 instead of the Flatten

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
268 December 2015
Analyzing With the HDL Analyst Tool Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Current Schematic command described in step 2, which only flattens trans-


parent instances in filtered views.

You can select the hidden instances, right-click, and select Unhide
Instances to make their hierarchy accessible again. To return to the
unflattened top-level view, right-click in the schematic and select
Unflatten Schematic.

4. To selectively flatten some hierarchical instances in your design by


dissolving them, do the following:
– If you want to flatten more than one level, select Options->HDL Analyst
Options and change the value of Dissolve Levels. If you want to flatten
just one level, leave the default setting.
– Select the instances to be flattened.
– Right-click and select Dissolve Instances.
The results differ slightly, depending on the kind of view from which you
dissolve instances.

Starting View Software Generates a ...


Filtered Filtered view with the internal logic of dissolved instances
displayed within hollow bounding boxes (transparent
instances), and the hierarchy of the rest of the design
unchanged. If the transparent instance does not display
internal logic, use one of the alternatives described in step 4
of Viewing Design Hierarchy and Context, on page 256. Use
the Back button to return to the undissolved view.
Unfiltered New, flattened view with the dissolved instances flattened in
place (no nesting) to Boolean logic, and the hierarchy of the
rest of the design unchanged. Select Unflatten Schematic to
return to the top-level unflattened view. You cannot use the
Back button to return to previous views because this is a new
view.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 269
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Analyzing With the HDL Analyst Tool

The following figure illustrates this.

Dissolved logic for prgmcntr shown nested when started from filtered view

Dissolve

Use this technique if you only want to flatten part of your design while
retaining the hierarchical context. If you want to flatten most of the
design, use the technique described in the previous step. Instead of
dissolving instances, you can use a combination of the filtering
commands and Push/Pop mode.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
270 December 2015
Analyzing With the HDL Analyst Tool Chapter 7: Analyzing with HDL Analyst and FSM Viewer

Minimizing Memory Usage While Analyzing Designs


When working with large hierarchical designs, use the following techniques
to use memory resources efficiently.
• Before you do any analysis operations such as searching, flattening,
expanding, or pushing/popping, hide (HDL Analyst->Hide Instances) the
hierarchical instances you do not need. This saves memory resources,
because the software does not load the hierarchy of the hidden
instances.
• Temporarily divide your design into smaller working files. Before you do
any analysis, hide the instances you do not need. Save the design. The
srs and srm files generated are smaller because the software does not
save the hidden hierarchy. Close any open HDL Analyst windows to free
all memory from the large design. In the Implementation Results view,
double-click one of the smaller files to open the RTL or Technology
schematic. Analyze the design using the smaller, working schematics.
• Filter your design instead of flattening it. If you must flatten your design,
hide the instances whose hierarchy you do not need before flattening, or
use the Dissolve Instances command. See Flattening Schematic Hierarchy,
on page 266 for details. For more information on the Expand Paths and
Isolate Paths commands, see RTL and Technology Views Popup Menus, on
page 347 of the Reference Manual.
• When searching your design, search by instance rather than by net.
Searching by net loads the entire design, which uses memory.
• Limit the scope of a search by hiding instances you do not need to
analyze. You can limit the scope further by filtering the schematic in
addition to hiding the instances you do not want to search.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 271
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Using the FSM Viewer

Using the FSM Viewer


The FSM viewer displays state transition bubble diagrams for
FSMs in the design, along with additional information about the FSM. You
can use this viewer to view state machines implemented by either the FSM
Compiler or the FSM Explorer. For more information, see Running the FSM
Compiler, on page 359 and Running the FSM Explorer, on page 363, respec-
tively.

1. To start the FSM viewer, open the RTL view and either
– Select the FSM instance, click the right mouse button and select View
FSM from the popup menu.
– Push down into the FSM instance (Push/Pop icon).
The FSM viewer opens. The viewer consists of a transition bubble
diagram and a table for the encodings and transitions. If you used
Verilog to define the FSMs, the viewer displays binary values for the
state machines if you defined them with the ‘define keyword, and actual
names if you used the parameter keyword.

LO

2. The following table summarizes basic viewing operations.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
272 December 2015
Using the FSM Viewer Chapter 7: Analyzing with HDL Analyst and FSM Viewer

To view ... Do ...


from and to states, and conditions Click the Transitions tab at the
for each transition bottom of the table.
the correspondence between the Click the RTL Encoding tab.
states and the FSM registers in the
RTL view
the correspondence between the Click the Mapped Encodings tab
states and the registers in the (available after synthesis).
Technology View
only the transition diagram without Select View->FSM table or click the
the table FSM Table icon. You might have to
scroll to the right to see it.

This figure shows you the mapping information for a state machine. The
Transitions tab shows you simple equations for conditions for each state.
The RTL Encodings tab has a State column that shows the state names in
the source code, and a Registers column for the corresponding RTL
encoding. The Mapped Encoding tab shows the state names in the code
mapped to actual values.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 273
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Using the FSM Viewer

States and Conditions

Mapped Encoding RTL Encoding

3. To view just one selected state,


– Select the state by clicking on its bubble. The state is highlighted.
– Click the right mouse button and select the filtering criteria from the
popup menu: output, input, or any transition.

The transition diagram now shows only the filtered states you set. The
following figure shows filtered views for output and input transitions for
one state.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
274 December 2015
Using the FSM Viewer Chapter 7: Analyzing with HDL Analyst and FSM Viewer

CountCont state filtered by input transitions

CountCont state filtered by output transitions

Similarly, you can check the relationship between two or more states by
selecting the states, filtering them, and checking their properties.

4. To view the properties for a state,


– Select the state.
– Click the right mouse button and select Properties from the popup
menu. A form shows you the properties for that state.

To view the properties for the entire state machine like encoding style,
number of states, and total number of transitions between states,
deselect any selected states, click the right mouse button outside the
diagram area, and select Properties from the popup menu.

5. To view the FSM description in text format, select the state machine in
the RTL view and View FSM Info File from the right mouse popup. This is
an example of the FSM Info File, statemachine.info.

State Machine: work.Control(verilog)-cur_state[6:0]


No selected encoding - Synplify will choose
Number of states: 7
Number of inputs: 4
Inputs:
0: Laplevel
1: Lap
2: Start
3: Reset
Clock: Clk

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 275
Chapter 7: Analyzing with HDL Analyst and FSM Viewer Using the FSM Viewer

Transitions: (input, start state, destination state)


-100 S0 S6
--10 S0 S2
---1 S0 S0
-00- S0 S0
--10 S1 S3
-100 S1 S2
-000 S1 S1
---1 S1 S0
--10 S2 S5
-000 S2 S2
-100 S2 S1
---1 S2 S0
-100 S3 S5
-000 S3 S3
--10 S3 S1
---1 S3 S0
-000 S4 S4
--1- S4 S0
-1-- S4 S0
---1 S4 S0
-000 S5 S5
-100 S5 S4
--10 S5 S2
---1 S5 S0
1--0 S6 S6
---1 S6 S0
0--- S6 S0

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
276 December 2015
CHAPTER 8

Analyzing Timing

This chapter describes typical analysis tasks. It describes graphical analysis


with the HDL Analyst tool as well as interpretation of the text log file. It covers
the following:
• Analyzing Timing in Schematic Views, on page 278
• Generating Custom Timing Reports with STA, on page 285
• Using Analysis Design Constraints, on page 288
• Using Auto Constraints, on page 295

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 277
Chapter 8: Analyzing Timing Analyzing Timing in Schematic Views

Analyzing Timing in Schematic Views


You can use the HDL Analyst and Timing Analyst functionality to analyze
timing. This section describes the following:
• Viewing Timing Information, on page 278
• Annotating Timing Information in the Schematic Views, on page 279
• Analyzing Clock Trees in the RTL View, on page 281
• Viewing Critical Paths, on page 281
• Handling Negative Slack, on page 284
• Generating Custom Timing Reports with STA, on page 285

Viewing Timing Information


Some commands, like Show Critical Path, Hierarchical Critical Path, Flattened Critical
Path, automatically enable Show Timing Information and display the timing infor-
mation. The following procedure shows you how to do so manually.

1. To analyze timing, enable HDL Analyst->Show Timing Information.

This displays the timing numbers for all instances in a Technology view.
It shows the following:

Delay This is the first number displayed.


• Combinational logic
This first number is the cumulative path delay to the output of
the instance, which includes the net delay of the output.
• Flip-flops
This first number is the path delay attributed to the flip-flop. The
delay can be associated with either the input or output path,
whichever is worse, because the flip-flop is the end of one path
and the start of another.
Slack This is the second number, and it is the slack time of the worst
Time path that goes through the instance. A negative value indicates
that timing constraints can not be met.
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
278 December 2015
Analyzing Timing in Schematic Views Chapter 8: Analyzing Timing

Annotating Timing Information in the Schematic Views


You can annotate the schematic views with timing information for the compo-
nents in the design. Once the design is annotated, you can search for these
properties and their associated instances.

1. On the Device tab of the Implementation Options dialog box, enable Annotated
Properties for Analyst.

For each synthesis implementation and each place-and-route imple-


mentation, the tool generates properties and stores them in two files
located in the project folder:

.sap Synplify Annotated Properties


Contains the annotated design properties generated after compilation,
like clock pins.
.tap Timing Annotated Properties
Contains the annotated timing properties generated after compilation.

2. To view the annotated timing, open an RTL or Technology view.

3. To view the timing information from another associated implementation,


do the following:
– Open an RTL or Technology view. It displays the timing information
for that implementation.
– Select HDL Analyst->Select Timing, and select another implementation
from the list. The list contains the main implementation and all

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 279
Chapter 8: Analyzing Timing Analyzing Timing in Schematic Views

associated place-and-route implementations. The timing numbers in


the current Analyst view change to reflect the numbers from the
selected implementation.
In the following example, an RTL View shows timing data from the test
implementation and the test/pr_1 (place and route) implementation.

4. Once you have annotated your design, you can filter searches using
these properties with the find command.
– Use the find -filter {@propName>=propValue} command for the searches.
See Find Filter Properties, on page 101 in the Command Reference
Manual for a list of properties. For information about the find
command, see find, on page 90 in the Command Reference Manual.
– Precede the property name with the @ symbol.
For example to find fanouts larger than 60, specify find -filter {@fanout>=60}.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
280 December 2015
Analyzing Timing in Schematic Views Chapter 8: Analyzing Timing

Analyzing Clock Trees in the RTL View


To analyze clock trees in the RTL view, do the following:

1. In the Hierarchy Browser, expand Clock Tree, select all the clocks, and
filter the design.

The Hierarchy Browser lists all clocks and the instances that drive them
under Clock Tree. The filtered view shows the selected objects.

2. If necessary, use the filter and expand commands to trace clock


connections back to the ports and check them.

For details about the commands for filtering and expanding paths, see
Filtering Schematics, on page 259, Expanding Pin and Net Logic, on
page 261 and Expanding and Viewing Connections, on page 265.

3. Check that your defined clock constraints cover the objects in the
design.

If you do not define your clock constraints accurately, you might not get
the best possible synthesis optimizations.

Viewing Critical Paths


The HDL Analyst tool makes it simple to find and examine critical paths and
the relevant source code. The following procedure shows you how to filter and
analyze a critical path. You can also use the procedure described in Gener-
ating Custom Timing Reports with STA, on page 285 to view this and other
paths.

1. If needed, set the slack time for your design.


– Select HDL Analyst->Set Slack Margin.
– To view only instances with the worst-case slack time, enter a zero.
– To set a slack margin range, type a value for the slack margin, and
click OK. The software gets a range by subtracting this number from
the slack time, and the Technology view displays instances within
this range. For example, if your slack time is -10 ns, and you set a
slack margin of 4 ns, the command displays all instances with slack
times between -6 ns and -10 ns. If your slack margin is 6 ns, you see
all instances with slack times between -4 ns and -10 ns.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 281
Chapter 8: Analyzing Timing Analyzing Timing in Schematic Views

2. Display the critical path using one of the following methods. The
Technology view displays a hierarchical view that highlights the
instances and nets in the most critical path of your design.
– To generate a hierarchical view of the critical path, click the Show
Critical Path icon (stopwatch icon ( ), select HDL Analyst->Technology-
>Hierarchical Critical Path, or select the command from the popup menu.
This is a filtered view in the same window, with hierarchical logic
shown in transparent instances. History commands apply, so you
can return to the previous view by clicking Back.
– To flatten the hierarchical critical path described above, right-click
and select Flatten Schematic. The software generates a new view in the
current window, and flattens only the transparent instances needed
to show the critical path; the rest of the design remains hierarchical.
Click Back to go the top-level design.
– To generate a flattened critical path in a new window, select HDL
Analyst->Technology->Flattened Critical Path. This command uses more
memory because it flattens the entire design and generates a new
view for the flattened critical path in a new window. Click Back in this
window to go to the flattened top-level design or to return to the
previous window.

Flattened Critical Path

Hierarchical Critical Path

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
282 December 2015
Analyzing Timing in Schematic Views Chapter 8: Analyzing Timing

3. Use the timing numbers displayed above each instance to analyze the
path. If no numbers are displayed, enable HDL Analyst->Show Timing
Information. Interpret the numbers as follows:

Delay Slack time


For combinational logic, it is the cumulative delay to Slack of the worst path that
the output of the instance, including the net delay of goes through the instance. A
the output. For flip-flops, it is the portion of the path negative value indicates that
delay attributed to the flip-flop. The delay can be timing has not been met.
associated with either the input path or output path,
whichever is worse, because the flip-flop is the end of
one path and the start of another.
8.8, 1.2

4. View instances in the critical path that have less than the worst-case
slack time. For additional information on handling slack times, see
Handling Negative Slack, on page 284.

If necessary change the slack margin and regenerate the critical path.

5. Crossprobe and check the RTL view and source code. Analyze the code
and the schematic to determine how to address the problem. You can
add more constraints or make code changes.

6. Click the Back icon to return to the previous view. If you flattened your
design during analysis, select Unflatten Schematic to return to the top-level
design.

There is no need to regenerate the critical path, unless you flattened


your design during analysis or changed the slack margin. When you
flatten your design, the view is regenerated so the history commands do
not apply and you must click the Critical Path icon again to see the critical
path view.

7. Rerun synthesis, and check your results.

If you have fixed the path, the window displays the next most critical
path when you click the icon.

Repeat this procedure and fix the design for the remaining critical paths.
When you are within 5-10 percent of your desired results, place and
route your design to see if you meet your goal. If so, you are done. If your
vendor provides timing-driven place and route, you might improve your
results further by adding timing constraints to place and route.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 283
Chapter 8: Analyzing Timing Analyzing Timing in Schematic Views

Handling Negative Slack


Positive slack time values (greater than or equal to 0 ns) are good, while
negative slack time values (less than 0 ns) indicate the design has not met
timing requirements. The negative slack value indicates the amount by which
the timing is off because of delays in the critical paths of your design.

The following procedure shows you how to add constraints to correct negative
slack values. Timing constraints can improve your design by 10 to 20
percent.

1. Display the critical path in a filtered Technology view.


– For a hierarchical critical path, either click the Critical Path icon, select
HDL Analyst->Show Critical Path, or select HDL Analyst->Technology->
Hierarchical Critical Path.
– For a flat path, select HDL Analyst->Technology->Flattened Critical Path.
2. Analyze the critical path.
– Check the end points of the path. The start point can be a primary
input or a flip-flop. The end point can be a primary output or a
flip-flop.
– Examine the instances. Use the commands described in Expanding
Pin and Net Logic, on page 261 and Expanding and Viewing
Connections, on page 265. For more information on filtering
schematics, see Filtering Schematics, on page 259.

3. Determine whether there is a timing exception, like a false or multicycle


path. If this is the cause of the negative slack, set the appropriate timing
constraint.

If there are fewer start points, pick a start point to add the constraint. If
there are fewer end points, add the constraint to an end point.

4. If your design does not meet timing by 20 percent or more, you may
need to make structural changes. You could do this by doing either of
the following:
– Enabling options like retiming (Retiming, on page 340), or resource
sharing (Sharing Resources, on page 356).
– Modifying the sourceLO
code.

5. Rerun synthesis and check your results.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
284 December 2015
Generating Custom Timing Reports with STA Chapter 8: Analyzing Timing

Generating Custom Timing Reports with STA


The log file generated after synthesis includes a timing report and default
timing information. Use the stand-alone timing analyst (STA) when you need
to generate a customized timing report (ta) for the following situations:
• You need more details about a specific path
• You want results for paths other than the top five timing paths (log file
default)
• You want to modify constraints and analyze, without resynthesizing. See
Using Analysis Design Constraints, on page 288 for details.

The following procedure shows you how to generate a custom report:

1. Select Analysis->Timing Analyst or click on the Timing Analyst icon( ).

2. Fill in the parameters.


– You can type in the from/to or through points, or you can cut and paste
or drag and drop valid objects from the Technology view (not the RTL
view) into the fields. See Timing Report Generation Parameters, on
page 268 in the Command Reference Manual for details on timing
analysis parameters and how they can be filtered.
– Set options for clock reports as needed.
– Specify a name for the output timing report (ta).

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 285
Chapter 8: Analyzing Timing Generating Custom Timing Reports with STA

3. Click Generate to run the report.

The software generates a custom report file called projectName.ta, located


in the implementation directory (the directory you specified for synthesis
results). The software also generates a corresponding output netlist file,
with an srm extension.

4. Analyze results.
– View the report (Open Report) in the Text Editor. The following figure is
a sample report showing analysis results based on maximum delay
for the worst paths.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
286 December 2015
Generating Custom Timing Reports with STA Chapter 8: Analyzing Timing

– View the netlist (View Critical Path) in a Technology view. This


Technology view, labeled Timing View in the title bar, shows only the
paths you specified in the Timing Analyst dialog box. Note that the
Timing Analyst and Show Critical Path commands (and equivalent icons
and shortcuts) are disabled whenever the Timing View is active.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 287
Chapter 8: Analyzing Timing Using Analysis Design Constraints

Using Analysis Design Constraints


Besides generating custom timing reports (see Generating Custom Timing
Reports with STA, on page 285), you can also use the Stand-alone Timing
Analyst to create constraints in an adc file. You can use these constraints to
experiment with different timing values, or to add or modify timing
constraints.

The advantage to using analysis design constraints (ADC) is that you do not
have to resynthesize the whole design. This reduces debugging time because
you can get a quick estimate, or try out different values. The Standalone
Timing Analyst (STA) puts these constraints in an Analysis Design
Constraints file (adc). The process for using this file is summarized in the
following flow diagram:

See the following for details:


• Scenarios for Using Analysis Design Constraints, on page 289
• Creating an ADC File, on page 290
• Using Object Names Correctly in the adc File, on page 294
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
288 December 2015
Using Analysis Design Constraints Chapter 8: Analyzing Timing

Scenarios for Using Analysis Design Constraints


The following describe situations where you can effectively use adc
constraints to debug, explore options or modify constraints. For details about
creating these constraints, see Creating an ADC File, on page 290.
• What-if analysis of design performance
If your design meets the target frequency, you can use adc constraints to
analyze higher target frequencies, or analyze performance of a module in
a different design/technology/target device.
• Constraints on enable registers
Similarly, you can apply syn_reference_clock on enable registers to analyze
if the enables have a regular pattern like clock, or if they operate on a
frequency other than clock. For example:

FDC create_clock {clk} –name {clk} –freq 100 –clockgroup


clk_grp_0
ADC define_attribute {n:en} syn_reference_clock {clk2}
create_clock {clk2} –name {clk2} –freq 50 –clockgroup
clk_grp_1

• Adding additional timing exceptions


When you analyze the results of the first synthesis run, you often find
functional or clock-to-clock timing exceptions, and you can handle these
with adc constraints. For example:
– Applying false paths on synchronization circuitry
– Adding false paths between clocks belonging to different clock groups
You must add these constraints to see more critical paths in the design.
The adc constraints let you add these constraints on the fly, and helps
you debug designs faster.
• Modifying timing exceptions that were previously applied
For example you might want to set a multicycle path constraint for a
path that was defined as a false path in the constraint file or vice versa.
To modify the timing exception, you must first ignore or reset the timing
exception that was set in the constraint file, as described in Using
Analysis Design Constraints, on page 288, step 3.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 289
Chapter 8: Analyzing Timing Using Analysis Design Constraints

Creating an ADC File


The following procedure explains how to create an adc file.

1. Select File->New.

2. Do the following in the dialog box that opens:


– Select Analysis Constraint File.

– Type a name and location for the file. The tool automatically assigns
the adc extension to the filename.
– Enable Add to Project, and click OK. This opens the text editor where
you can specify the new constraints.
LO
3. Type in the constraints you want and save the file. Remember the
following when you enter the constraints:

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
290 December 2015
Using Analysis Design Constraints Chapter 8: Analyzing Timing

– Keep in mind that the original fdc file has already been applied to the
design. Any timing exception constraints in this file must not conflict
with constraints that are already in effect. For example, if there is a
conflict when multiple timing exceptions (false path, path delay, and
multicycle timing constraints) are applied to the same path, the tool
uses this order to resolve conflicts: false path, multicycle path, max
delay. See Conflict Resolution for Timing Exceptions, on page 203 for
details about how the tool prioritizes timing exceptions.

– The object names must be mapped object names, so use names from
the Technology view, not names from the RTL view. Unlike the
constraint file (RTL view), the adc constraints apply to the mapped
database because the database is not remapped with this flow. For
more information, see Using Object Names Correctly in the adc File,
on page 294.
– If you want to modify an existing constraint for a timing exception,
you must first reset the original fdc constraint, and then apply the
new constraint. In the following example the multicycle path
constraint was changed to 3:

Original FDC set_multicycle_path –to [get_cells{a_reg*}] 2


ADC reset_path –to {get_cells{a_reg*}]
set_multicycle_path –to [get_cells{a_reg*}] 3

– When you are done, save and close the file. This adds the file to your
project.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 291
Chapter 8: Analyzing Timing Using Analysis Design Constraints

– You can create multiple adc files for different purposes. For example,
you might want to keep timing exception constraints, I/0 constraints,
and clock constraints in separate files. If you have an existing adc file,
use the Add File command to add this file to your project. Select
Analysis Design Constraint Files (*.adc) as the file type.

4. Run timing analysis.


– Select Analysis->Timing Analyst or click the Timing Analyst icon ( ).
The Timing Analyst window will look like the example below, with
pointers to the srm file, the original fdc and the new adc files you
created.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
292 December 2015
Using Analysis Design Constraints Chapter 8: Analyzing Timing

– If you have multiple adc files, enable the ones you want.
– If you have a previous run and want to save that report, type a new
name for the output ta file. If you do not specify a name, the tool
overwrites the previous report.
– Fill in other parameters as appropriate, and click Generate.
The tool runs static timing analysis in the same implementation direc-
tory as the original implementation. The tool applies the adc constraints
on top of the fdc constraints. Therefore, adc constraints affect timing
results only if there are no conflicts with fdc constraints.

The tool generates a timing report called *_adc.ta and an *_adc.srm file by
default. It does not change any synthesis outputs, like the output netlist
or timing constraints for place and route.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 293
Chapter 8: Analyzing Timing Using Analysis Design Constraints

5. Analyze the results in the timing report and *_adc.srm file.

6. If you need to resynthesize after analysis, add the adc constraints as an


fdc file to the project and rerun synthesis.

Using Object Names Correctly in the adc File


Constraints and collections applied in the constraint file reference the
RTL-level database. Synthesis optimizations such as retiming and replication
can change object names during mapping because objects may be merged.

The standalone timing analyst does not map objects. It just reads the
gate-level object names from the post-mapping database; this is reflected in
the Technology view. Therefore, you must define objects either explicitly or
with collections from the Technology view when you enter constraints into the
adc file. Do not use RTL names when you create these constraints (see
Creating an ADC File, on page 290 for details of that process).

Example
Assume that register en_reg is replicated during mapping to reduce fanout.
Further, registers en_reg and en_reg_rep2 connect to register dataout[31:0]. In
this case, if you define the following false path constraint in the adc file, then
the standalone timing analyzer does not automatically treat paths from the
replicated register en_reg_rep2 as false paths.

set_false_path -from {{i:en_reg}} -to {{i:dataout[31:0]}}

Unlike constraints in the fdc file, you must specify this replicated register
explicitly or as a collection. Only then are all paths properly treated as false
paths. So in this example, you must define the following constraints in the
adc file:

set_false_path -from {{i:en_reg}} -to {{i:dataout[31:0]}}


set_false_path -from {{i:en_reg_rep2}}
-to {{i:dataout[31:0]}}
or

define_scope_collection
LO en_regs {find -seq {i:en_reg*}
-filter (@name == en_reg || @name == en_reg_rep2)}
set_false_path -from {{$en_regs}} -to {{i:dataout[31:0]}}

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
294 December 2015
Using Auto Constraints Chapter 8: Analyzing Timing

Using Auto Constraints


Auto constraining lets you synthesize with automatic constraints as a first
step to get an idea of what you can achieve. Automatic constraints generate
the fastest design implementation, so they force the timing engine to work
harder. Based on the results from auto-constraining, you can refine the
constraints manually later. For an explanation of how auto constraints work,
see Results of Auto Constraints, on page 297

1. To automatically constrain your design, first do the following:


– Set your device to a technology that supports auto-constraining. With
supported technologies, the Auto Constrain button under Frequency in
the Project view is available.

– Do not define any clocks. If you define clocks using the SCOPE
window or a constraint file, or set the frequency in the Project view,
the software uses the user-defined create_clock constraints instead of
auto constraints.
– Make sure any multi-cycle or false path constraints are specified on
registers.

2. Enable the Auto Constrain button on the left side of the Project view.
Alternatively, select Project->Implementation Options->Constraints, and enable
the Auto Constrain option there.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 295
Chapter 8: Analyzing Timing Using Auto Constraints

3. If you want to auto constrain I/O paths, select Project->Implementation


Options->Constraints and enable Use Clock Period for Unconstrained IO.

If you do not enable this option, the software only auto constrains flop-
to-flop paths. Even when the software auto constrains the I/O paths, it
does not generate these constraints for forward-annotation.

4. Synthesize the design.

The software puts each clock in a separate clock group and adjusts the
timing of each clock individually. At different points during synthesis it
adjusts the clock period of each clock to be a target percentage of the
current clock period, usually 15% - 25%.

After the clocks, the timing engine constrains I/O paths by setting the
default combinational path delay for each I/O path to be one clock
period.

The software writes out the generated constraints in a file called AutoCon-
straint_designName.sdc in the run directory. It also forward-annotates
these constraints to the place-and-route tools.

5. Check the results in AutoConstraint_designName.sdc and the log file. To


open the constraint fileLO
as a text file, right-click on the file in the
Implementation Results view and select Open as Text.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
296 December 2015
Using Auto Constraints Chapter 8: Analyzing Timing

The flop-to-flop constraints use syntax like the following:

create_clock -name {c:leon|clk} -period 13.327 -clockgroup


Autoconstr_clkgroup_0 -rise 0.000 -fall 6.664 -route 0.000

6. You can now add this generated constraint file to the project and rerun
synthesis with these constraints.

Results of Auto Constraints


This section contains information about the following:
• Stages of the Auto Constrain Algorithm, on page 297
• I/O Constraints, Timing Exceptions, DLLs, DCMs, and PLLs, on
page 298
• Reports and Forward-annotation, on page 298
• Repeatability of Results, on page 299

Stages of the Auto Constrain Algorithm


To auto constrain, do not define any clocks. When you enable the Auto
Constrain option, the synthesis software goes through these stages:

1. It infers every clock in the design.

2. It puts each clock in its own clock group.

3. It invokes mapper optimizations in stages and generates the best


possible synthesis results.
– Clocks derived from DCM/PLLs will be in the clock group of the
parent clock (DCM/PLL input clock).
– You should only use Auto Constrain early in the synthesis process to get
a general idea of how fast your design runs. This option is not meant
to be a substitute for declaring clocks.

4. For each clock, including the system clock, the software maintains a
negative slack of between 15 and 25 percent of the requested frequency.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 297
Chapter 8: Analyzing Timing Using Auto Constraints

I/O Constraints, Timing Exceptions, DLLs, DCMs, and PLLs


The auto constrain algorithm infers all the clocks, because none are defined.
It handles the following timing situations as described below:
• I/O constraints
You can auto constrain I/O paths as well as flop-to-flop paths by
selecting Project->Implementation Options->Constraints and enabling Use Clock
Period for Unconstrained IO. The software does not write out these I/O
constraints.
• Timing exceptions like multicycle and false paths
The auto constraint algorithm honors SCOPE multicycle and false path
constraints that are specified as constraints on registers.

Auto Constrain Limitations


The Auto Constrain feature has the following limitations:
• Does not respect the vendor-provided maximum frequency constraints
for clock generators (DCMs and DLLs).
• Over constrains designs with output critical paths.

Reports and Forward-annotation


In the log file, the software reports the Requested and Estimated Frequency or
Requested and Estimated Period and the negative slack for each clock it infers.
The log file contains all the details.

The software also generates a constraint file in the run directory called
AutoConstraint_designName.sdc, which contains the auto constraints generated.
The following is an example of an auto constraint file:

#Begin clock constraint


create_clock -name {c:leon|clk} -period 13.327 -rise 0.000 -fall
6.664
#End clock constraint

The software forward-annotatesLO the create_clock constraints, writing out the


appropriate file for the place-and-route tool.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
298 December 2015
Using Auto Constraints Chapter 8: Analyzing Timing

Repeatability of Results
If you use the requested frequency resulting from the Auto constrain option as
the requested frequency for a regular synthesis run, you might not get the
same results as you did with auto constraints. This is because the software
invokes the mapper optimizations in stages when it auto constrains. The
results from a previous stage are used to drive the next stage. As the interim
optimization results vary, there is no guarantee that the final results will stay
the same.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 299
Chapter 8: Analyzing Timing Using Auto Constraints

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
300 December 2015
CHAPTER 9

Inferring High-Level Objects

This chapter contains guidelines on how to structure your code or attach


attributes so that the synthesis tools can automatically infer high-level
objects like RAMs. See the following for more information:
• Defining Black Boxes for Synthesis, on page 302
• Defining State Machines for Synthesis, on page 311
• Specifying Safe FSMs, on page 316
• Automatic RAM Inference, on page 320
• Initializing RAMs, on page 329

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 301
Chapter 9: Inferring High-Level Objects Defining Black Boxes for Synthesis

Defining Black Boxes for Synthesis


Black boxes are predefined components for which the interface is specified,
but whose internal architectural statements are ignored. They are used as
place holders for IP blocks, legacy designs, or a design under development.

This section discusses the following topics:


• Instantiating Black Boxes and I/Os in Verilog, on page 302
• Instantiating Black Boxes and I/Os in VHDL, on page 304
• Adding Black Box Timing Constraints, on page 306
• Adding Other Black Box Attributes, on page 310

Instantiating Black Boxes and I/Os in Verilog


Verilog black boxes for macros and I/Os come from two sources: commonly-
used or vendor-specific components that are predefined in Verilog macro
libraries, or black boxes that are defined in another input source like a
schematic. For information about instantiating black boxes in VHDL, see
Instantiating Black Boxes and I/Os in VHDL, on page 304.

The following process shows you how to instantiate both types as black
boxes. Refer to the installDirectory/examples directory for examples of instantia-
tions of low-level resources.

1. To instantiate a predefined Verilog module as a black box:


– Select the library file with the macro you need from the
installDirectory/lib/technology directory. Files are named technology.v.
Most vendor architectures provide macro libraries that predefine the
black boxes for primitives and macros.
– Make sure the library macro file is the first file in the source file list
for your project.

2. To instantiate a module that has been defined in another input source


as a black box:
– Create an empty macro that only contains ports and port directions.
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
302 December 2015
Defining Black Boxes for Synthesis Chapter 9: Inferring High-Level Objects

– Put the syn_black_box synthesis directive just before the semicolon in


the module declaration.

module myram (out, in, addr, we) /* synthesis syn_black_box */;


output [15:0] out;
input [15:0] in;
input [4:0] addr;
input we;
endmodule
– Make an instance of the stub in your design.
– Compile the stub along with the module containing the instantiation
of the stub.
– To simulate with a Verilog simulator, you must have a functional
description of the black box. To make sure the synthesis software
ignores the functional description and treats it as a black box, use
the translate_off and translate_on constructs. For example:

module adder8(cout, sum, a, b, cin);


// Code that you want to synthesize
/* synthesis translate_off */
// Functional description.
/* synthesis translate_on */
// Other code that you want to synthesize.
endmodule

3. To instantiate a vendor-specific (black box) I/O that has been defined in


another input source:
– Create an empty macro that only contains ports and port directions.
– Put the syn_black_box synthesis directive just before the semicolon in
the module declaration.
– Specify the external pad pin with the black_box_pad_pin directive, as in
this example:

module BBDLHS(D,E,GIN,GOUT,PAD,Q)
/* synthesis syn_black_box black_box_pad_pin="PAD"
– Make an instance of the stub in your design.
– Compile the stub along with the module containing the instantiation
of the stub.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 303
Chapter 9: Inferring High-Level Objects Defining Black Boxes for Synthesis

4. Add timing constraints and attributes as needed. See Adding Black Box
Timing Constraints, on page 306 and Adding Other Black Box
Attributes, on page 310.

5. After synthesis, merge the black box netlist and the synthesis results file
using the method specified by your vendor.

Instantiating Black Boxes and I/Os in VHDL


VHDL black boxes for macros and I/Os come from two sources: commonly-
used or vendor-specific components that are predefined in VHDL macro
libraries, or black boxes that are defined in another input source like a
schematic. For information about instantiating black boxes in VHDL, see
Instantiating Black Boxes and I/Os in Verilog, on page 302.

The following process shows you how to instantiate both types as black
boxes. Refer to the installDirectory/examples directory for examples of instantia-
tions of low-level resources.

1. To instantiate a predefined VHDL macro (for a component or an I/O),


– Select the library file with the macro you need from the
installDirectory/lib/vendor directory. Files are named family.vhd. Most
vendor architectures provide macro libraries that predefine the black
boxes for primitives and macros.
– Add the appropriate library and use clauses to the beginning of your
design units that instantiate the macros.

library family;
use family.components.all;

2. To create a black box for a component from another input source:


– Create a component declaration for the black box.
– Declare the syn_black_box attribute as a boolean attribute.
– Set the attribute to true.
library synplify;
use synplify.attributes.all;
entity top is
LO
port (clk, rst, en, data: in bit; q: out bit);
end top;

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
304 December 2015
Defining Black Boxes for Synthesis Chapter 9: Inferring High-Level Objects

architecture structural of top is


component bbox
port(Q: out bit; D, C, CLR: in bit);
end component;
attribute syn_black_box of bbox: component is true;
...
– Instantiate the black box and connect the ports.
begin
my_bbox: bbox port map (
Q => q,
D => data,
C => clk,
CLR => rst);
– To simulate with a VHDL simulator, you must have the functional
description of a black box. To make sure the synthesis software
ignores the functional description and treats it as a black box, use
the translate_off and translate_on constructs. For example:

architecture behave of ram4 is


begin
-- synthesis translate_off
stimulus: process (clk, a, b)
-- Functional description
end process;
-- synthesis translate_on
-- Other source code you WANT synthesized

3. To create a vendor-specific (black box) I/O for an I/O defined in another


input source:
– Create a component declaration for the I/O.
– Declare the black_box_pad_pin attribute as a string attribute.
– Set the attribute value on the component to be the external pin name
for the pad.

library synplify;
use synplify.attributes.all;
...

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 305
Chapter 9: Inferring High-Level Objects Defining Black Boxes for Synthesis

component mybuf
port(O: out bit; I: in bit);
end component;
attribute black_box_pad_pin of mybuf: component is "I";
– Instantiate the pad and connect the signals.
begin
data_pad: mybuf port map (
O => data_core,
I => data);

4. Add timing constraints and attributes. See Adding Black Box Timing
Constraints, on page 306 and Adding Other Black Box Attributes, on
page 310.

Adding Black Box Timing Constraints


A black box does not provide the software with any information about
internal timing characteristics. You must characterize black box timing
accurately, because it can critically affect the overall timing of the design. To
do this, you add constraints in the source code or in the SCOPE interface.

You attach black box timing constraints to instances that have been defined
as black boxes. There are three black box timing constraints, syn_tpd, syn_tsu,
and syn_tco.

1. Define the instance as a black box, as described in Instantiating Black


Boxes and I/Os in Verilog, on page 302 or Instantiating Black Boxes and
I/Os in VHDL, on page 304.

2. Determine the kind of constraint for the information you want to specify:

To define ... Use ...


Propagation delay through the black box syn_tpd
Setup delay (relative to the clock) for input pins syn_tsu
Clock-to-output delay through the black box syn_tco

LO syntax for the constraints.


3. In VHDL, use the following
– Use the predefined attributes package by adding this syntax

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
306 December 2015
Defining Black Boxes for Synthesis Chapter 9: Inferring High-Level Objects

library synplify;
use synplify.attributes.all;
In VHDL, you must use the predefined attributes package. For each
directive, there are ten predeclared constraints in the attributes
package, from directive_name1 to directive_name10. If you need more
constraints, declare the additional constraints using integers greater
than 10. For example:
attribute syn_tco11 : string;
attribute syn_tco12 : string;
– Define the constraints in either of these ways:
VHDL attribute attributeName<n> : "att_value"
syntax
Verilog-style attribute attributeName<n> of bbox_name :
notation component is "att_value"

The following table shows the appropriate syntax for att_value. See the
Attribute Reference Manual for complete syntax information.

Attribute Value Syntax


syn_tsu<n> bundle -> [!]clock = value
syn_tco<n> [!]clock -> bundle = value

syn_tpd<n> bundle -> bundle = value


• <n> is a numerical suffix.
• bundle is a comma-separated list of buses and scalar signals, with no
intervening spaces. For example, A,B,C.
• ! indicates (optionally) a negative edge for a clock.
• value is in ns.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 307
Chapter 9: Inferring High-Level Objects Defining Black Boxes for Synthesis

The following is an example of black box attributes, using VHDL


signal notation:

architecture top of top is


component rcf16x4z port(
ad0, ad1, ad2, ad3 : in std_logic;
di0, di1, di2, di3 : in std_logic;
wren, wpe : in std_logic;
tri : in std_logic;
do0, do1, do2 do3 : out std_logic;
end component
attribute syn_tpd1 of rcf16x4z : component is
"ad0,ad1,ad2,ad3 -> do0,do1,do2,do3 = 2.1";
attribute syn_tpd2 of rcf16x4z : component is
"tri -> do0,do1,do2,do3 = 2.0";
attribute syn_tsu1 of rcf16x4z : component is
"ad0,ad1,ad2,ad3 -> ck = 1.2";
attribute syn_tsu2 of rcf16x4z : component is
"wren,wpe,do0,do1,do2,do3 -> ck = 0.0";

4. In Verilog, add the directives as comments, as shown in the following


example. For explanations about the syntax, see the table in the
previous step or the Attribute Reference Manual.

module ram32x4 (z, d, addr, we, clk)


/* synthesis syn_black_box
syn_tpd1="addr[3:0]->z[3:0]=8.0"
syn_tsu1="addr[3:0]->clk=2.0"
syn_tsu2="we->clk=3.0" */;
output [3:0] z;
input [3:0] d;
input [3:0] addr;
input we;
input clk;
endmodule

5. To add black box attributes through the SCOPE interface, do the


following:
– Open the SCOPE spreadsheet and select the Attributes panel.
– In the Object column, select the name of the black-box module or
component declaration from the pull-down list. Manually prefix the
black box name withLO
v: to apply the constraint to the view.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
308 December 2015
Defining Black Boxes for Synthesis Chapter 9: Inferring High-Level Objects

– In the Attribute column, type the name of the timing attribute, followed
by the numerical suffix, as shown in the following table. You cannot
select timing attributes from the pull-down list.
– In the Value column, type the appropriate value syntax, as shown in
the table in step 3.
– Save the constraint file, and add it to the project.
The resulting constraint file contains syntax like this:

define_attribute v:{blackboxModule} attribute<n> {attributeValue}

6. Synthesize the design, and check black box timing.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 309
Chapter 9: Inferring High-Level Objects Defining Black Boxes for Synthesis

Adding Other Black Box Attributes


Besides black box timing constraints, you can also add other attributes to
define pin types on the black box or define gated clocks. You cannot use the
attributes for all technologies. Check the Attribute Reference Manual for
details about which technologies are supported.

Black Box

Clk

Clk buffer black_box_tri_pins

Pad
syn_isclock black_box_pad_pin

1. To specify that a clock pin on the black box has access to global clock
routing resources, use syn_isclock.

Depending on the technology, different clock resources are inserted. For


Microsemi it inserts CLKBUF.

2. To specify that the software need not insert a pad for a black box pin,
use black_box_pad_pin. Use this for technologies that automatically insert
pad buffers for the I/Os.

3. To define a tristate pin so that you do not get a mixed driver error when
there is another tristate buffer driving the same net, use
black_box_tri_pins.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
310 December 2015
Defining State Machines for Synthesis Chapter 9: Inferring High-Level Objects

Defining State Machines for Synthesis


A finite state machine (FSM) is a piece of hardware that advances from state
to state at a clock edge. The synthesis software recognizes and extracts the
state machines from the HDL source code. For guidelines on setting up the
source code, see the following:
• Defining State Machines in Verilog, on page 311
• Defining State Machines in VHDL, on page 312
• Specifying FSMs with Attributes and Directives, on page 313
For information about the attributes used to define state machines, see
Running the FSM Compiler, on page 359. For information about imple-
menting safe FSMs, see Specifying Safe FSMs, on page 316.

Defining State Machines in Verilog


The synthesis software recognizes and automatically extracts state machines
from the Verilog source code if you follow the coding guidelines listed below.
The software attaches the syn_state_machine attribute to each extracted FSM.

For alternative ways to define state machines, see Defining State Machines
for Synthesis, on page 311.

Follow these Verilog coding guidelines:


• In Verilog, model the state machine with case, casex, or casez statements
in always blocks. Check the current state to advance to the next state
and then set output values. Do not use if statements.
• Always use a default assignment as the last assignment in the case
statement, and set the state variable to ‘bx. This is a “don’t care” state-
ment and ensures that the software can remove unnecessary decoding
and gates.
• Make sure the state machines have a synchronous or asynchronous
reset to set the hardware to a valid state after power-up, or to reset the
hardware when you are operating.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 311
Chapter 9: Inferring High-Level Objects Defining State Machines for Synthesis

• Specify explicit state values for states with parameter or ‘define state-
ments. This is an example of a parameter statement that sets the current
state to 2’h2:

parameter state1 = 2’h1, state2 = 2’h2;


...
current_state = state2;
This example shows how to set the current state value with `define state-
ments:

‘define state1 2’h1


‘define state2 2’h2
...
current_state = ‘state2;
• Make state assignments using parameter with symbolic state names.Use
parameter over `define, because `define is applied globally while parameter
definitions are local. Local definitions make it easier to reuse common
state names in multiple FSM designs, like RESET, IDLE, READY, READ,
WRITE, ERROR, and DONE.

If you use `define to assign the names, you cannot reuse a state name
because it has already been used in the global name space. To reuse the
same names in this scenario, you have to use `undef and `define state-
ments between modules to redefine the names. This method makes it
difficult to probe the internal values of FSM state buses from a
testbench and compare them to the state names.

Defining State Machines in VHDL


The synthesis software recognizes and automatically extracts state machines
from the VHDL source code if you follow the coding guidelines below. For
alternative ways to define state machines, see Defining State Machines for
Synthesis, on page 311.

The following are VHDL guidelines for coding. The software attaches the
syn_state_machine attribute to each extracted FSM.
• Use case statements to check the current state at the clock edge,
advance to the next state, and set output values. You can also use if-then-
LOstatements are preferable.
else statements, but case

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
312 December 2015
Defining State Machines for Synthesis Chapter 9: Inferring High-Level Objects

• If you do not cover all possible cases explicitly, include a when others
assignment as the last assignment of the case statement, and set the
state vector to some valid state.
• If you create implicit state machines with multiple WAIT statements, the
software does not recognize them as state machines.
• Make sure the state machines have a synchronous or asynchronous
reset to set the hardware to a valid state after power-up, or to reset the
hardware when you are operating.
• To choose an encoding style, attach the syn_encoding attribute to the
enumerated type. The software automatically encodes your state
machine with the style you specified.

Specifying FSMs with Attributes and Directives


If your design has state machines, the software can extract them automati-
cally with the FSM Compiler, or you can manually attach attributes to state
registers to define them as state machines. See Optimizing State Machines,
on page 358 for information about automatic FSM extraction, and Defining
State Machines for Synthesis, on page 311 for other ways to specify FSMs.

The following steps show you how to manually attach attributes to define
FSMs for extraction.

1. To determine how state machines are extracted, set attributes in the


source code as shown in the following table:

To ... Attribute
Specify a state machine for extraction and syn_state_machine=1
optimization
Prevent state machines from being extracted syn_state_machine=0
and optimized
Prevent the state machine from being syn_preserve=1
optimized away

For information about how to add attributes, see Specifying Attributes


and Directives, on page 89.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 313
Chapter 9: Inferring High-Level Objects Defining State Machines for Synthesis

2. To determine the encoding style for the state machine, set the
syn_encoding attribute in the source code or in the SCOPE window. For
VHDL users there are alternative methods, described in the next step.

The FSM Compiler and the FSM Explorer honor the syn_encoding setting.
The different values for this attribute are briefly described here; refer to
the Attributes Reference manual for complete details.

Situation: If ... syn_encoding Value Explanation


Area is important sequential One of the smallest encoding
styles.
Speed is onehot Usually the fastest style and
important suited to most FPGA styles.
Recovery from an safe, with another Forces the state machine to
invalid state is style. For example: reset in certain situations. For
important /* synthesis example, if an alpha particle hit
syn_encoding = in a hostile operating
"safe, onehot" */ environment causes a
spontaneous register change,
you can use safe to reset the
state machine. For further
information, see Specifying Safe
FSMs, on page 316.
There are sequential Default encoding.
<5 states
A large output sequential | gray Could be faster than onehot,
decoder follows even though the value must be
the FSM decoded to determine the state.
For sequential, more than one bit
can change at a time; for gray,
only one bit changes at a time,
but more than one bit can be
hot.
There are a large onehot Fastest style, because each state
number of flip- variable has one bit set, and
flops only one bit of the state register
changes at a time.

3. If you are using VHDL, LO


you have two choices for defining encoding:
– Use syn_encoding as described above, and enable the FSM compiler.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
314 December 2015
Defining State Machines for Synthesis Chapter 9: Inferring High-Level Objects

– Use syn_enum_encoding to define the states (sequential, onehot, gray, and


safe) and disable the FSM compiler. If you do not disable the FSM
compiler, the syn_enum_encoding values are not implemented. This is
because the FSM compiler, a mapper operation, overrides
syn_enum_encoding, which is a compiler directive. Use the
syn_enum_encoding method for user-defined FSM encoding. For
example:
attribute syn_enum_encoding of state_type : type is "001 010 101";

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 315
Chapter 9: Inferring High-Level Objects Specifying Safe FSMs

Specifying Safe FSMs


Typically, unspecified or unreachable FSM states are optimized away during
synthesis, so if an SEU causes a bit to be inverted, the FSM can be put into
an undefined, invalid state, and lock up the circuit. An SEU fault is a change
of state caused by ions or electro-magnetic radiation that affects sequential
elements. The basic principle of a safe FSM is to prevent the state machine
from getting stuck in an unknown state because of an SEU.

Safe FSMs are primarily required by commercial or military-aerospace users,


especially those who want to ensure that their FSMs are tolerant of single
event upset (SEU) faults and continue to function correctly.

The following procedures describe ways to ensure high reliability and fault
tolerance for FSMs:
• Implementing Safe Case FSMs, on page 316

Vendor Support for Safe FSMs


The following technology families support the specification of safe case for
FSMs:

Microsemi SmartFusion/2, RT ProASIC3, ProASIC3/3E/3L, IGLOO/+/E/2,

Implementing Safe Case FSMs


To implement safe case FSMs, follow this procedure:

1. Select a supported device in the Synplify Pro synthesis tools.

See Vendor Support for Safe FSMs, on page 316 for a list.

2. To globally implement safe case FSMs, go to the Implementation Options->


High Reliability tab, and enable the Preserve and Decode Unreachable States
(FSM, Counters, Sequential Logic) option.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
316 December 2015
Specifying Safe FSMs Chapter 9: Inferring High-Level Objects

The high reliability safe case option turns off sequential optimizations
that would otherwise optimize away some FSM states.

3. To apply safe case on an individual module or architecture, set the


syn_safe_case directive on a module.

This is a Verilog example: module /* syn_safe_case =1*/

For details about this directive, see syn_safe_case, on page 195 in the
Attribute Reference Manual.

4. To choose an encoding style that can be implemented when building the


recovery logic for the FSM, use the syn_encoding attribute. The software
honors the values you specify for the encoding style. You can apply the
attribute globally on a module or architecture in the Verilog/VHDL
source code, as well as, the FDC constraint file. For example:

module /*synthesis syn_encoding="encodingStyles";*/


attribute syn_encoding of architecture : signal is
"encodingStyles";
You can also define a SCOPE collection in the constraint file, then apply
the attribute to the collection:

define_scope_collection sm {find -hier -inst * -filter


inst_of==statemachine}
define_attribute {$sm} {syn_encoding} {encodingStyles}
For details about this attribute, see syn_encoding, on page 55.

You must enable the FSM Compiler option to ensure that the syn_encoding
attribute takes affect. This overrides the default FSM compiler encoding
for the state machine.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 317
Chapter 9: Inferring High-Level Objects Specifying Safe FSMs

5. Provide error monitoring.

See Error Monitoring Example with FSM, on page 318 for details.

Note: You can optionally specify the error monitoring Tcl commands for
safe FSM.

Error Monitoring Example with FSM


Error monitoring is applied to an instance. You can have a 1-bit error port for
each instance. To do this, use the following Tcl commands:
• syn_create_err_net – Creates logic (XOR/OR) that compares the outputs
for the selected module and connects it to the source of the new net that
you specified. You can also specify pipeline registers along with clock
and other control signals to improve timing through the comparator
circuitry.
• syn_connect – Connects the new net that you specified to an existing net,
top-level port, or input port of the instantiated Error Monitoring IP
(EMIP).

See Example 4: Error Monitoring with FSM, on page 318.

Example 4: Error Monitoring with FSM


To set up the error monitoring for an FSM and provide access to error bits,
specify the following:

1. Enable Preserve and Decode Unreachable States on the High Reliability tab of
the Implementation Options panel for the state machine.

2. On the instance:
– syn_create_err_net {–name {error_flag} –inst {i:state[1:3]}}
– syn_connect -from {{n:error_flag} -to {t:EMIP.err_port}}
In this example, the Preserve and Decode Unreachable States option is enabled on
the High Reliability tab of the Implementation Options panel for the compiler to
implement recovery logic by inferring the stateerrordetect IP. The Tcl commands
connect the output of this IP to the EMP port for error monitoring of the FSM
LO
to occur.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
318 December 2015
Specifying Safe FSMs Chapter 9: Inferring High-Level Objects

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 319
Chapter 9: Inferring High-Level Objects Automatic RAM Inference

Automatic RAM Inference


Instead of instantiating synchronous RAMs, you can let the synthesis tools
automatically infer them directly from the HDL source code and map them to
the appropriate technology-specific RAM resources on the FPGA. This
approach lets you maintain portability.

Here are some of the advantages offered by the inference approach:


• The tool automatically infers the RAMs from the HDL code, which is
technology-independent. This means that the design is portable from
one technology to another without rework.
• RAM inference is the best method for prototyping.
• The tool automatically adds the extra glue logic needed to ensure that
the logic is correct.
• The software automatically runs timing-driven synthesis for inferred
RAMs.

For further details about RAM inference, see Inferring Block RAM, on
page 323.

Block RAM
The synthesis software can implement the block RAM it infers using different
types of block RAM and different block RAM modes.

Types of Block RAM


The synthesis software can infer different kinds of block RAM, according to
how the code is set up. For details about block RAM inference, see Inferring
Block RAM, on page 323 and RAM Attributes, on page 321. For inference
examples, and see Block RAM Examples, on page 603.

The synthesis tool can infer the following kinds of block RAM:
• Single-port RAM
• Dual-port RAM LO
Based on how the read and write ports are used, dual-port RAM can be
further classified as follows:

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
320 December 2015
Automatic RAM Inference Chapter 9: Inferring High-Level Objects

– Simple dual-port
– Dual-port
– True dual-port

Supported Block RAM Modes


Block RAM supports three operating modes, which determine the output of
the RAM when write enable is active. The synthesis tools infer the mode from
the RTL you provide. It is best to explicitly describe the RAM behavior in the
code, so as to correctly infer the operating mode you want. Refer to the
examples for recommended coding styles.

The block RAM operating modes are described in the following table:

Mode When write enable (WE) is active ...


WRITE_FIRST This is a transparent mode, and the input data is simultaneously
written into memory and stored in the RAM data output (DO). DO
uses the value of the RAM data input (DI). See WRITE_FIRST Mode
Example, on page 603 for an example.
READ_FIRST This mode is read before write. The data previously stored at the
write address appears at the RAM data output (DO) first, and then
the RAM input data is stored in memory. DO uses the value of the
memory content. See READ_FIRST Mode Example, on page 605 for
an example.
NO_CHANGE RAM data output (DO) remains the same during a write operation,
with DO containing the last read data. See NO_CHANGE Mode
Example, on page 606 for an example.

RAM Attributes
In addition to the automatic inference by the tool, you can specify RAM infer-
ence with the syn_ramstyle and syn_rw_conflict_logic attributes. The syn_ramstyle
attribute explicitly specifies the kind of RAM you want, while the syn_rw_con-
flict_logic attribute specifies that you want to infer a RAM, but leave it to the
synthesis tools to select the kind of RAM, as appropriate.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 321
Chapter 9: Inferring High-Level Objects Automatic RAM Inference

Attribute-Based Inference of Block RAM


For block RAM, the syn_ramstyle attribute has a number of valid values, all of
which are extensively described in the documentation. This section confines
itself to the following values, which are most relevant to the discussion:

syn_ramstyle Value Description


block_ram Enforces the inference and implementation of a technology-
specific RAM.
registers Prevents inference of a RAM, and maps the RAM to flip-flops
and logic.
no_rw_check Does not create overhead logic to account for read-write
conflicts.

If you specify the syn_rw_conflict_logic attribute, the synthesis tools can infer
block RAM, depending on the design. If the tool does infer block RAM, it does
not insert bypass logic around the block RAM to account for read-write
conflicts and prevent simulation mismatches. In this way its functionality is
the same as syn_ramstyle with no_rw_check, which does not insert bypass logic
either.

Specifying the Attributes


You set the attribute in the HDL source code, through the SCOPE interface or
in an FPGA constraint file.

HDL Source Code


Set the attribute on the Verilog register or VHDL signal that holds the output
values of the RAM. The following syntax shows how to specify the attribute in
Verilog and VHDL code:

Verilog reg [7:0] ram_dout [127:0]


/*synthesis syn_ramstyle = "block_ram"*/;
reg [d_width-1:0] mem [mem_depth-1:0]
/*synthesis syn_rw_conflict_logic = 0*/;
VHDL attribute syn_ramstyle
LO of ram_dout : signal is "block_ram";

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
322 December 2015
Automatic RAM Inference Chapter 9: Inferring High-Level Objects

SCOPE
For the syn_ramstyle attribute, set the attribute on the RAM register memory
signal, mem, as shown below. For the syn_rw_conflict_logic attribute, set it on
the instance or set it globally. The attributes are written out to a constraints
file using the syntax described in the next section.

Constraints File
In the fdc Tcl constraints file written out from the SCOPE interface, the
syn_ramstyle attribute is attached to the register mem signal of the RAM, and
the syn_rw_conflict_logic attribute is attached to the view, as shown below:

define_attribute {i:mem[7:0]} {syn_ramstyle} {block_ram}


define_attribute {v:mem[0:7]} syn_rw_conflict_logic {0}

For the syn_rw_conflict_logic attribute, you can also specify it globally, as well as
on individual modules and instances:

define_global_attribute syn_rw_conflict_logic {0}

Inferring Block RAM


Based on the design and how you code it, the tool can infer the following
kinds of block RAM: single-port, simple dual-port, dual-port, and true dual-
port. The details about RAM inference and setup guidelines are described
here:
• Setting up the RTL and Inferring Block RAM, on page 323
• Simple Dual-Port Block RAM Inference, on page 325
• Dual-Port RAM Inference, on page 327
• True Dual-Port RAM Inference, on page 327

Setting up the RTL and Inferring Block RAM


To ensure that the tool infers the kind of block RAM you want, do the
following:

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 323
Chapter 9: Inferring High-Level Objects Automatic RAM Inference

1. Set up the RAM HDL code in accordance with the following guidelines:
– The RAM must be synchronous. It must not have any asynchronous
control signals connected. The synthesis tools do not infer
asynchronous block RAM.
– You must register either the read address or the output.
– The RAMs must not be too small, as the tool does not infer block RAM
for small-sized RAMs. The size threshold varies with the target
technology.

2. Set up the clocks and read and write ports to infer the kind of RAM you
want. The following table summarizes how to set up the RAM in the RTL:

RAM Clock Read Ports Write Ports


Single-port Single clock One; same as write One; same as read
Simple dual- Single or dual One dedicated read One dedicated write
port clock
Dual-port Single or dual Two independent One dedicated write
clock reads
True dual-port Single or dual Two independent Two independent
clock reads writes
See Dual-Port RAM Inference, on page 327 and True Dual-Port RAM
Inference, on page 327 for additional information.

For illustrative code examples, see the single-port and dual-port


examples listed in Block RAM Examples, on page 603.

3. If needed, guide automatic inference with the syn_ramstyle attribute:


– To force the inference of block RAM, specify syn_ramstyle=blockram.
– To prevent a block RAM from being inferred or if your resources are
limited, use syn_ramstyle=registers.
– If you know your design does not read and write to the same address
simultaneously, specify syn_ramstyle=no_rw_check to ensure that the
synthesis tool does not unnecessarily create bypass logic for resolving
conflicts.
LO
4. Synthesize the design.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
324 December 2015
Automatic RAM Inference Chapter 9: Inferring High-Level Objects

The tool first compiles the design and infers the RAMs, which it
represents as abstract technology-independent primitives like RAM1 and
RAM2. You can view these RAMs in the RTL view, which is a graphic,
technology-independent representation of your design after compilation:

It is important that the compiler first infers the RAM, because the tool
only maps the inferred RAM primitives to technology-specific block RAM.
Any RAM that is not inferred is mapped to registers. You can view the
mapped RAMs in the Technology view, which is a graphic representation
of your design after synthesis, and shows the design mapped to
technology-specific resources.

Simple Dual-Port Block RAM Inference


Simple dual-port RAMs (SDP) are block RAMs with one port dedicated to read
operations and one port dedicated to write operations. SDP RAMs offer the
unique advantage of combining ports and using them to pack double the data
width and address width.

The synthesis tools map SDP RAMs to RAM primitives in the architecture. A
unique set of addresses, clocks, and enable signals are used for each port.
The synthesis tool might also set the RAM_MODE property on the RAM to
indicate the RAM mode.

The inference of simple dual-port RAM is dependent on the size of the


address and data. The RAM must follow the coding guidelines listed below to
be inferred.
• The read and write addresses must be different
• The read and write clocks can be different
• The enable signals can be different

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 325
Chapter 9: Inferring High-Level Objects Automatic RAM Inference

Here is an example where the tool infers SDP RAM:

module Read_First_RAM (
read_clk,
read_address,
data_in,
write_clk,
rd_en,
wr_en,
reg_en,
write_address,
data_out);
parameter address_width = 8;
parameter data_width = 32;
parameter depth = 256;
input read_clk, write_clk;
input rd_en;
input wr_en;
input reg_en;
input [address_width-1:0] read_address, write_address;
input [data_width-1:0] data_in;
output [data_width-1:0] data_out;
//wire [data_width-1:0] data_out;
reg [data_width-1:0] mem [depth -1 : 0]/* synthesis
syn_ramstyle="no_rw_check"
*/;
reg [data_width-1:0] data_out;
always @(posedge write_clk)
if(wr_en)
mem[write_address] <= data_in;
always @(posedge read_clk)
if(rd_en)
data_out <= mem[read_address];
endmodule

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
326 December 2015
Automatic RAM Inference Chapter 9: Inferring High-Level Objects

Dual-Port RAM Inference


Dual-port RAM is configured to have read and/or write operations from both
ports of the RAM. One such configuration is a RAM with one port for both
read and write operations and another dedicated read-only port. A unique set
of addresses, clocks, and enable signals are used for each port. The synthesis
tool sets properties on the RAM to indicate the RAM mode.

To infer dual-port block RAM, the RAM must follow the coding rules
described below.
• The read and write addresses must be different
• The read and write clocks can be different
• The enable signals can be different

True Dual-Port RAM Inference


True dual-port RAMs (TDP) are block RAMs with two write ports and two read
ports. The compiler extracts a RAM2 primitive for RAMs with two write ports
or two read ports and the tool maps this primitive to TDP RAM. The ports
operate independently, with different clocks, addresses and enables.

The synthesis tool also sets the RAM_MODE property on the RAM to indicate
the RAM mode.

The compiler infers TDP block RAM based on the write processes. The imple-
mentation depends on whether the write enables use one process or multiple
processes:
• When all the writes are made in one process, there are no address
conflicts, and the compiler generates an nram that is later mapped to
either true dual-port block RAM. The following coding results in an nram

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 327
Chapter 9: Inferring High-Level Objects Automatic RAM Inference

with two write ports, one with write address waddr0 and the other with
write address waddr1:

always @(posedge clk)


begin
if(we1) mem[waddr0] <= data1;
if(we2) mem[waddr1] <= data2;
end
• When the writes are made in multiple processes, the software does not
infer a multiport RAM unless you explicitly specify the syn_ramstyle attri-
bute with a value that indicates the kind of RAM to implement, or with
the no_rw_check value. If the attribute is not specified as such, the
software does not infer an nram, but infers a RAM with multiple write
ports. You get a warning about simulation mismatches when the two
addresses are the same.

In the following case, the compiler infers an nram with two write ports
because the syn_ramstyle attribute is specified. The writes associated with
waddr0 and waddr1 are we1 and we2, respectively.

reg [1:0] mem [7:0] /* synthesis syn_ramstyle="no_rw_check" */;


always @(posedge clk1)
begin
if(we1) mem[waddr0] <= data1;
end
always @(posedge clk2)
begin
if(we2) mem[waddr1] <= data2;
end

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
328 December 2015
Initializing RAMs Chapter 9: Inferring High-Level Objects

Initializing RAMs
You can specify startup values for RAMs and pass them on to the place-and-
route tools. See the following topics for ways to set the initial values:
• Initializing RAMs in Verilog, on page 329
• Initializing RAMs in VHDL, on page 330
• Initializing RAMs with $readmemb and $readmemh, on page 333

Initializing RAMs in Verilog


In Verilog, you specify startup values using initial statements, which are
procedural assign statements guaranteed by the language to be executed by
the simulator at the start of simulation. This means that any assignment to a
variable within the body of the initial statement is treated as if the variable
was initialized with the corresponding LHS value. You can initialize memories
using the built-in load memory system tasks $readmemb (binary) and
$readmemh (hex).

The following procedure is the recommended method for specifying initial


values:

1. Create a data file with an initial value for every address in the memory
array. This file can be a binary file or a hex file. See Initialization Data
File, on page 618in the Reference Manual for details of the formats for
these files.

2. Do the following in the Verilog file to define the module:


– Include the appropriate task enable statement, $readmemb or
$readmemh, in the initial statement for the module:

$readmemb ("fileName", memoryName [, startAddress [, stopAddress]]);

$readmemh ("fileName", memoryName [, startAddress [, stopAddress]]);


Use $readmemb for a binary file and use $readmemh for a hex file. For
descriptions of the syntax, see Initial Values for RAMs, on page 615in
the Reference Manual.
– Make sure the array declaration matches the order in the initial value
data file you specified. As the file is read, each number encountered is
assigned to a successive word element of the memory. The software

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 329
Chapter 9: Inferring High-Level Objects Initializing RAMs

starts with the left-hand address in the memory declaration, and


loads consecutive words until the memory is full or the data file has
been completely read. The loading order is the order in the
declaration. For example, with the following memory definition, the
first line in the data file corresponds to address 0:

reg [7:0] mem_up [0:63]


With this next definition, the first line in the data file applies to
address 63:

reg [7:0] mem_down [63:0]

3. To forward-annotate initial values, use the $readmemb or $readmemh


statements, as described in Initializing RAMs with $readmemb and
$readmemh, on page 333.

See Example 1: RAM Initialization, on page 616 in the Reference Manual


for an example of a Verilog single-port RAM.

Initializing RAMs in VHDL


There are two ways to initialize the RAM in the VHDL code: with signal decla-
rations or with variable declarations.

Initializing VHDL Rams with Signal Declarations


The following example shows a single-port RAM that is initialized with signal
initialization statements. For alternative methods, see Initializing VHDL
Rams with Variable Declarations, on page 332.

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity w_r2048x28 is
port (
clk : in std_logic;
adr : in std_logic_vector(10 downto 0);
di : in std_logic_vector(26 downto 0);
we : in std_logic;
LO
dout : out std_logic_vector(26 downto 0));
end;

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
330 December 2015
Initializing RAMs Chapter 9: Inferring High-Level Objects

architecture arch of w_r2048x28 is


-- Signal Declaration --
type MEM is array(0 to 2047) of std_logic_vector (26 downto 0);
signal memory : MEM := (
"111111111111111000000000000"
,"111110011011101010011110001"
,"111001111000111100101100111"
,"110010110011101110011110001"
,"101001111000111111100110111"
,"100000000000001111111111111"
,"010110000111001111100110111"
,"001101001100011110011110001"
,"000110000111001100101100111"
,"000001100100011010011110001"
,"000000000000001000000000000"
,"000001100100010101100001110"
,"000110000111000011010011000"
,"001101001100010001100001110"
,"010110000111000000011001000"
,"011111111111110000000000000"
,"101001111000110000011001000"
,"110010110011100001100001110"
,"111001111000110011010011000"
,"111110011011100101100001110"
,"111111111111110111111111111"
,"111110011011101010011110001"
,"111001111000111100101100111"
,"110010110011101110011110001"
,"101001111000111111100110111"
,"100000000000001111111111111"
,others => (others => '0'));
begin
process(clk)
begin
if rising_edge(clk) then
if (we = '1') then
memory(conv_integer(adr)) <= di;
end if;
dout <= memory(conv_integer(adr));
end if;
end process;
end arch;

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 331
Chapter 9: Inferring High-Level Objects Initializing RAMs

Initializing VHDL Rams with Variable Declarations


The following example shows a RAM that is initialized with variable declara-
tions. For alternative methods, see Initializing VHDL Rams with Signal Decla-
rations, on page 330 and Initializing RAMs with $readmemb and
$readmemh, on page 333.

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity one is
generic (data_width : integer := 6;
address_width :integer := 3
);
port (data_a :in std_logic_vector(data_width-1 downto 0);
raddr1 :in unsigned(address_width-2 downto 0);
waddr1 :in unsigned(address_width-1 downto 0);
we1 :in std_logic;
clk :in std_logic;
out1 :out std_logic_vector(data_width-1 downto 0));
end;
architecture rtl of one is
type mem_array is array(0 to 2**(address_width) -1) of
std_logic_vector(data_width-1 downto 0);
begin
WRITE1_RAM : process (clk)
variable mem : mem_array := (1 => "111101", others => (1=>'1',
others => '0'));
begin
if rising_edge(clk) then
out1 <= mem(to_integer(raddr1));
if (we1 = '1') then
mem(to_integer(waddr1)) := data_a;
end if;
end if;
end process WRITE1_RAM;
end rtl;

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
332 December 2015
Initializing RAMs Chapter 9: Inferring High-Level Objects

Initializing RAMs with $readmemb and $readmemh


1. Create a data file with an initial value for every address in the memory
array. This file can be a binary file or a hex file. See Initialization Data
File, on page 618 in the Reference Manual for details.

2. Include one of the task enable statements, $readmemb or $readmemh, in


the initial statement for the module:

$readmemb ("fileName", memoryName [, startAddress [, stopAddress]]);


$readmemh ("fileName", memoryName [, startAddress [, stopAddress]]);

Use $readmemb for a binary file and $readmemh for a hex file. For details
about the syntax, see Initial Values for RAMs, on page 615 in the Refer-
ence Manual.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 333
Chapter 9: Inferring High-Level Objects Initializing RAMs

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
334 December 2015
CHAPTER 10

Specifying Design-Level Optimizations

This chapter covers techniques for optimizing your design using built-in tools
or attributes. For vendor-specific optimizations, see Chapter 15, Optimizing
for Microsemi Designs. It describes the following:
• Tips for Optimization, on page 336
• Retiming, on page 340
• Preserving Objects from Being Optimized Away, on page 347
• Optimizing Fanout, on page 352
• Sharing Resources, on page 356
• Inserting I/Os, on page 357
• Optimizing State Machines, on page 358
• Inserting Probes, on page 366

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 335
Chapter 10: Specifying Design-Level Optimizations Tips for Optimization

Tips for Optimization


The software automatically makes efficient trade-offs to achieve the best
results. However, you can optimize your results by using the appropriate
control parameters. This section describes general design guidelines for
optimization. The topics have been categorized as follows:
• General Optimization Tips, on page 336
• Optimizing for Area, on page 337
• Optimizing for Timing, on page 338

General Optimization Tips


This section contains general optimization tips that are not directly area or
timing-related. For area optimization tips, see Optimizing for Area, on
page 337. For timing optimization, see Optimizing for Timing, on page 338.
• In your source code, remove any unnecessary priority structures in
timing-critical designs. For example, use CASE statements instead of
nested IF-THEN-ELSE statements for priority-independent logic.
• If your design includes safe state machines, use the syn_encoding attri-
bute with a value of safe. This ensures that the synthesized state
machines never lock in an illegal state.
• For FSMs coded in VHDL using enumerated types, use the same
encoding style (syn_enum_encoding attribute value) on both the state
machine enumerated type and the state signal. This ensures that there
are no discrepancies in the type of encoding to negatively affect the final
circuit.
• Make sure that the source code supports inferencing or instantiation by
using architecture-specific resources like memory blocks.
• Some designs benefit from hierarchical optimization techniques. To
enable hierarchical optimization on your design, set the syn_hier attri-
bute to firm.
• For accurate results with timing-driven synthesis, explicitly define clock
frequencies with a constraint,
LO instead of using a global clock frequency.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
336 December 2015
Tips for Optimization Chapter 10: Specifying Design-Level Optimizations

Optimizing for Area


This section contains information on optimizing to reduce area. Optimizing
for area often means larger delays, and you will have to weigh your perfor-
mance needs against your area needs to determine what works best for your
design. For tips on optimizing for performance, see Optimizing for Timing, on
page 338. General optimization tips are in General Optimization Tips, on
page 336.
• Increase the fanout limit when you set the implementation options. A
higher limit means less replicated logic and fewer buffers inserted
during synthesis, and a consequently smaller area. In addition, as P&R
tools typically buffer high fanout nets, there is no need for excessive
buffering during synthesis. See Setting Fanout Limits, on page 352 for
more information.
• Enable the Resource Sharing option when you set implementation options.
With this option checked, the software shares hardware resources like
adders, multipliers, and counters wherever possible, and minimizes
area. This is a global setting, but you can also specify resource sharing
on an individual basis for lower-level modules. See Sharing Resources,
on page 356 for details.
• For designs with large FSMs, use the gray or sequential encoding styles,
because they typically use the least area. For details, see Specifying
FSMs with Attributes and Directives, on page 313.
• If you are mapping into a CPLD and do not meet area requirements, set
the default encoding style for FSMs to sequential instead of onehot. For
details, see Specifying FSMs with Attributes and Directives, on
page 313.
• For small CPLD designs (less than 20K gates), you might improve area
by using the syn_hier attribute with a value of flatten. When specified, the
software optimizes across hierarchical boundaries and creates smaller
designs.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 337
Chapter 10: Specifying Design-Level Optimizations Tips for Optimization

Optimizing for Timing


This section contains information on optimizing to meet timing requirements.
Optimizing for timing is often at the expense of area, and you will have to
balance the two to determine what works best for your design. For tips on
optimizing for area, see Optimizing for Area, on page 337. General optimiza-
tion tips are in General Optimization Tips, on page 336.
• Use realistic design constraints, about 10 to 15 percent of the real goal.
Over-constraining your design can be counter-productive because you
can get poor implementations. Typically, you set timing constraints like
clock frequency, clock-to-clock delay paths, I/O delays, register I/O
delays and other miscellaneous path delays. Use clock, false path, and
multi-cycle path constraints to make the constraints realistic.
• Enable the Retiming option. This optimization moves registers into I/O
buffers if this is permitted by the technology and the design. However, it
may add extra registers when clouds of logic are balanced across more
than one register-to-register timing path. Extra registers are only added
in parallel within the timing path and only if no extra latency is added by
the additional registers. For example, if registers are moved across a 2x1
multiplexer, the tool adds two new registers to accommodate the select
and data paths.

You can set this option globally or on specific registers. When it is


enabled, it automatically enables pipelining as well. See Retiming, on
page 340 for details.
• Select a balanced fanout constraint. A large constraint creates nets with
large fanouts, and a low fanout constraint results in replicated logic. See
Setting Fanout Limits, on page 352 for information about setting limits
and using the syn_maxfan attribute. You can use this in conjunction with
the syn_replicate attribute that controls register duplication and buffering.
• Control register duplication and buffering criteria with the syn_replicate
attribute. The tool automatically replicates registers during optimization,
and you can use this attribute globally or locally on a specific register to
turn off register duplication. See Controlling Buffering and Replication,
on page 354 for a description. Use syn_replicate in conjunction with the
syn_maxfan attribute that controls fanout.
• If the critical path goes LO
through arithmetic components, try disabling
Resource Sharing. You can get faster times at the expense of increased
area, but use this technique carefully. Adding too many resources can
cause longer delays and defeat your purpose.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
338 December 2015
Tips for Optimization Chapter 10: Specifying Design-Level Optimizations

• If the P&R and synthesis tools report different critical paths, use a
timing constraint with the -route option. With this option, the software
adds route delay to its calculations when trying to meet the clock
frequency goal. Use realistic values for the constraints.
• For FSMs, use the onehot encoding style, because it is often the fastest
implementation. If a large output decoder follows an FSM, gray or
sequential encoding could be faster.
• For designs with black boxes, characterize the timing models accurately,
using the syn_tpd, syn_tco, and syn_tso directives.
• If you see warnings about feedback muxes being created for signals
when you compile your source code, make sure to assign set/resets for
the signals. This improves performance by eliminating the extra mux
delay on the input of the register.
• Make sure that you pass your timing constraints to the place-and-route
tools, so that they can use the constraints to optimize timing.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 339
Chapter 10: Specifying Design-Level Optimizations Retiming

Retiming
Retiming improves the timing performance of sequential circuits without
modifying the source code. It automatically moves registers (register
balancing) across combinatorial gates or LUTs to improve timing while
maintaining the original behavior as seen from the primary inputs and
outputs of the design. Retiming moves registers across gates or LUTs, but
does not change the number of registers in a cycle or path from a primary
input to a primary output. However, it can change the total number of regis-
ters in a design.

The retiming algorithm retimes only edge-triggered registers. It does not


retime level-sensitive latches. Note that registers associated with RAMS,
DSPs, and the mapping for generated clocks may be moved, regardless of the
Retiming option setting. The Retiming option is not available if it does not apply
to the family you are using.

These sections contain details about using retiming.


• Controlling Retiming, on page 340
• Retiming Example, on page 342
• Retiming Report, on page 343
• How Retiming Works, on page 344

Controlling Retiming
The following procedure shows you how to use retiming.

1. To enable retiming for the whole design, check the Retiming check box.

You can set the Retiming option from the button panel in the Project
window, or with the Project->Implementation Options command (Options tab).
The option is only available in certain technologies.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
340 December 2015
Retiming Chapter 10: Specifying Design-Level Optimizations

Set the retiming option in either place.

Retiming works globally on the design, and moves edge-triggered regis-


ters as needed to balance timing.

2. To enable retiming on selected registers, use either of the following


techniques:
– Check the Retiming checkbox and attach the syn_allow_retiming attribute
with a value of 0 or false to any registers you do not want the software
to move. This attribute specifies that the register cannot be moved for
retiming. Refer to How Retiming Works, on page 344 for a list of the
components the retiming algorithm will move.
– Do not check the Retiming checkbox. Attach the syn_allow_retiming
attribute with a value of 1 or true to any registers you want the
software to consider for retiming. You can do this in the SCOPE
interface or in the source code. This attribute marks the register as
one that can be moved during retiming, but does not necessarily force
it to be moved during retiming. If you apply the attribute to an FSM,
RAM or SRL that is decomposed into flip-flops and logic, the software
applies the attribute to all the resulting flip-flops

3. You can also fine-tune retiming using attributes:


– To preserve the power-on state of flip-flops without sets or resets (FD
or FDE) during retiming, set syn_preserve=1 or syn_allow_retiming=0 on
these flip-flops.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 341
Chapter 10: Specifying Design-Level Optimizations Retiming

– To force flip-flops to be packed in I/O pads, set syn_useioff=1 as a


global attribute. This will prevent the flip-flops from being moved
during retiming.

4. Set other options for the run. Retiming might affect some constraints
and attributes. See How Retiming Works, on page 344 for details.

5. Click Run to start synthesis.

After the LUTs are mapped, the software moves registers to optimize
timing. See Retiming Example, on page 342 for an example. The
software honors other attributes you set, like syn_preserve, syn_useioff,
and syn_ramstyle. See How Retiming Works, on page 344 for details.

Note that the tool might retime registers associated with RAMs, DSPs,
and generated clocks, regardless of whether the Retiming option is on or
off.

The log file includes a retiming report that you can analyze to under-
stand the retiming changes. It contains a list of all the registers added or
removed because of retiming. Retimed registers have a _ret suffix added
to their names. See Retiming Report, on page 343 for more information
about the report.

Retiming Example
The following example shows a design with retiming disabled and enabled.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
342 December 2015
Retiming Chapter 10: Specifying Design-Level Optimizations

The top figure shows two levels of logic between the registers and the output,
and no levels of logic between the inputs and the registers.

The bottom figure shows the results of retiming the three registers at the
input of the OR gate. The levels of logic from the register to the output are
reduced from two to one. The retimed circuit has better performance than the
original circuit. Timing is improved by transferring one level of logic from the
critical part of the path (register to output) to the non-critical part (input to
register).

Retiming Report
The retiming report is part of the log file, and includes the following:
• The number of registers added, removed, or untouched by retiming.
• Names of the original registers that were moved by retiming and which
no longer exist in the Technology view.
• Names of the registers created as a result of retiming, and which did not
exist in the RTL view. The added registers have a _ret suffix.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 343
Chapter 10: Specifying Design-Level Optimizations Retiming

How Retiming Works


This section describes how retiming works when it moves sequential compo-
nents (flip-flops). Registers associated with RAMs, DSPs, and the mapping for
fixing generated clocks might be moved, whether Retiming is enabled or not.
Here are some implications and results of retiming:
• Flip-flops with no control signals (resets, presets, and clock enables) are
moved. Flip-flops with minimal control logic can also be retimed.
Multiple flip-flops with reset, set or enable signals that need to be
retimed together are only retimed if they have exactly the same control
logic.
• The software does not retime the following combinatorial sequential
elements: flip-flops with both set and reset, flip-flops with attributes like
syn_preserve, flip-flops packed in I/O pads, level-sensitive latches, regis-
ters that are instantiated in the code, SRLs, and RAMs. If a RAM with
combinatorial logic has syn_ramstyle set to registers, the registers can be
retimed into the combinatorial logic.
• Retimed flip-flops are only moved through combinatorial logic. The
software does not move flip-flops across the following objects: black
boxes, sequential components, tristates, I/O pads, instantiated compo-
nents, carry and cascade chains, and keepbufs.
• You might not be able to crossprobe retimed registers between the RTL
and the Technology view, because there may not be a one-to-one corre-
spondence between the registers in these two views after retiming. A
single register in the RTL view might now correspond to multiple regis-
ters in the Technology view.
• Retiming affects or is affected by, these attributes and constraints:

Attribute/Constraint Effect
False path constraint Does not retime flip-flops with different false path
constraints. Retimed registers affect timing
constraints.
Multicycle constraint Does not retime flip-flops with different multicycle
constraints. Retimed registers affect timing
constraints.
Register constraint LO
Does not maintain set_reg_input_delay and
set_reg_output_delay constraints. Retimed registers
affect timing constraints.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
344 December 2015
Retiming Chapter 10: Specifying Design-Level Optimizations

Attribute/Constraint Effect
from/to timing If you set a timing constraint using a from/to
exceptions specification on a register, it is not retimed. The
exception is when using a max_delay constraint. In
this case, retiming is performed but the constraint is
not forward annotated. (The max_delay value would
no longer be valid.)
syn_hier=macro Does not retime registers in a macro with this
attribute.
syn_keep Does not retime across keepbufs generated because
of this attribute.
syn_hier=macro Does not retime registers in a macro with this
attribute.
syn_pipeline Automatically enabled if retiming is enabled.

syn_preserve Does not retime flip-flops with this attribute set.

syn_probe Does not retime net drivers with this attribute. If the
net driver is a LUT or gate, no flip-flops are retimed
across it.
syn_reference_clock On a critical path, does not retime registers with
different syn_reference_clock values together, because
the path effectively has two different clock domains.
syn_useioff Does not override attribute-specified packing of
registers in I/O pads. If the attribute value is false,
the registers can be retimed. If the attribute is not
specified, the timing engine determines whether the
register is packed into the I/O block.
syn_allow_retiming Registers are not retimed if the value is 0.

• Retiming does not change the simulation behavior (as observed from
primary inputs and outputs) of your design, However if you are
monitoring (probing) values on individual registers inside the design,
you might need to modify your test bench if the probe registers are
retimed.
• Beginning with the C-2009.09-SP1 release, the behavior for retiming
unconstrained I/O pads has changed. If retiming is enabled, registers
connected to unconstrained I/O pins are not retimed by default. If you

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 345
Chapter 10: Specifying Design-Level Optimizations Retiming

want to revert back to how retiming I/O paths was previously imple-
mented, you can:
– Globally turn on the Use clock period for unconstrained IO switch from the
Constraints tab of the Implementation Options panel.
– Add constraints to all input/output ports.
– Separately constrain each I/O pin as required.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
346 December 2015
Preserving Objects from Being Optimized Away Chapter 10: Specifying Design-Level Optimizations

Preserving Objects from Being Optimized Away


Synthesis can collapse or remove nets during optimization. If you want to
retain a net for simulation, probing, or for a different synthesis implementa-
tion, you must specify this with an attribute. Similarly, the software removes
duplicate registers or instances with unused output. If you want to preserve
this logic for simulation or analysis, you must use an attribute. The following
table lists the attributes to use in each situation. For details about the attri-
butes and their syntax, see the Attributes Reference Manual.

To Preserve ... Use ... Result


Nets syn_keep on wire or reg (Verilog), Keeps net for simulation, a
or signal (VHDL). different synthesis
For Microsemi designs, use implementation, or for passing to
alspreserve as well as syn_keep. the place-and-route tool.

Nets for syn_probe on wire or reg Preserves internal net for


probing (Verilog), or signal (VHDL) probing.
Shared syn_keep on input wire or signal Preserves duplicate driver cells,
registers of shared registers prevents sharing. See Using
syn_keep for Preservation or
Replication, on page 348 for
details on the effects of applying
syn_keep to different objects.

Sequential syn_preserve on reg or module Preserves logic of constant-


components (Verilog), signal or architecture driven registers, keeps registers
(VHDL) for simulation, prevents sharing
FSMs syn_preserve on reg or module Prevents the output port or
(Verilog), signal (VHDL) internal signal that holds the
value of the state register from
being optimized
Instantiated syn_noprune on module or Keeps instance for analysis,
components component (Verilog), preserves instances with unused
architecture or instance (VHDL) outputs

See the following for more information:


• Using syn_keep for Preservation or Replication, on page 348
• Controlling Hierarchy Flattening, on page 350
• Preserving Hierarchy, on page 351

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 347
Chapter 10: Specifying Design-Level Optimizations Preserving Objects from Being Optimized Away

Using syn_keep for Preservation or Replication


By default the tool considers replicated logic redundant, and optimizes it
away. If you want to maintain the redundant logic, use syn_keep to preserve
the logic that would otherwise be optimized away.

The following Verilog code specifies a replicated AND gate:

module redundant1(ina,inb,out1);
input ina,inb;
output out1,out2;
wire out1;
wire out2;
assign out1 = ina & inb;
assign out2 = ina & inb;
endmodule

The compiler implements the AND function by replicating the outputs out1
and out2, but optimizes away the second AND gate because it is redundant.

To replicate the AND gate in the previous example, apply syn_keep to the input
wires, as shown below:

module redundant1d(ina,inb,out1,out2);
input ina,inb;
output out1,out2;
wire out1;
wire out2;
wire in1a /*synthesisLO
syn_keep = 1*/;
wire in1b /*synthesis syn_keep = 1*/;
wire in2a /*synthesis syn_keep = 1*/;
wire in2b /*synthesis syn_keep = 1 */;

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
348 December 2015
Preserving Objects from Being Optimized Away Chapter 10: Specifying Design-Level Optimizations

assign in1a = ina;


assign in1b = inb;
assign in2a = ina;
assign in2b = inb;
assign out1 = in1a & in1b;
assign out2 = in2a & in2b;
endmodule

Setting syn_keep on the input wires ensures that the second AND gate is
preserved:

You must set syn_keep on the input wires of an instance if you want to
preserve the logic, as in the replication of this AND gate. If you set it on the
outputs, the instance is not replicated, because syn_keep preserves the nets
but not the function driving the net. If you set syn_keep on the outputs in the
example, you get only one AND gate, as shown in the next figure.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 349
Chapter 10: Specifying Design-Level Optimizations Preserving Objects from Being Optimized Away

Controlling Hierarchy Flattening


Optimization flattens hierarchy. To control the flattening, use the syn_hier
attribute as described here. You can also use the attribute to prevent
flattening, as described in Preserving Hierarchy, on page 351.

1. Attach the syn_hier attribute with the value you want to the module or
architecture you want to preserve.

To ... Value ...


Flatten all levels below, but not the current level flatten
Remove the current level of hierarchy without affecting remove
the lower levels
Remove the current level of hierarchy and the lower levels flatten, remove
Flatten the current level (if needed for optimization) soft

You can also add the attribute in SCOPE instead of the HDL code. If you
use SCOPE to enter the attribute, make sure to use the v: syntax. For
details, see syn_hier, on page 78 in the Attribute Reference Manual.

The software flattens the design as directed. If there is a lower-level


syn_hier attribute, it takes precedence over a higher-level one.

2. If you want to flatten theLOentire design, use the syn_netlist_hierarchy


attribute set to false, instead of the syn_hier attribute.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
350 December 2015
Preserving Objects from Being Optimized Away Chapter 10: Specifying Design-Level Optimizations

This flattens the entire netlist and does not preserve any hierarchical
boundaries. See syn_netlist_hierarchy, on page 132 in the Attribute
Reference Manual for the syntax.

Preserving Hierarchy
The synthesis process includes cross-boundary optimizations that can flatten
hierarchy. To override these optimizations, use the syn_hier attribute as
described here. You can also use this attribute to direct the flattening process
as described in Controlling Hierarchy Flattening, on page 350.

1. Attach the syn_hier attribute to the module or architecture you want to


preserve. You can also add the attribute in SCOPE. If you use SCOPE to
enter the attribute, make sure to use the v: syntax.

2. Set the attribute value:

To ... Value ...


Preserve the interface but allow cell packing across the firm
boundary
Preserve the interface with no exceptions hard
Preserve the interface and contents with no exceptions macro
(except ProASIC3 families)
Flatten lower levels but preserve the interface of the specified flatten, firm
design unit

The software flattens the design as directed. If there is a lower-level


syn_hier attribute, it takes precedence over a higher-level one.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 351
Chapter 10: Specifying Design-Level Optimizations Optimizing Fanout

Optimizing Fanout
You can optimize your results with attributes and directives, some of which
are specific to the technology you are using. Similarly, you can use specify
objects or hierarchy that you want to preserve during synthesis. For a
complete list of all the directives and attributes, see the Attribute Reference
Manual. This section describes the following:
• Setting Fanout Limits, on page 352
• Controlling Buffering and Replication, on page 354

Setting Fanout Limits


Optimization affects net fanout. If your design has critical nets with high
fanout, you can set fanout limits. You can only do this in certain technolo-
gies. For details specific to individual technologies, see the Reference Manual.

1. To set a global fanout limit for the whole design, do either of the
following:
– Select Project-> Implementation Options->Device and type a value for the
Fanout Guide option.
– Apply the syn_maxfan attribute to the top-level view or module.
The value sets the number of fanouts for a given driver, and affects all
the nets in the design. The defaults vary, depending on the technology.
Select a balanced fanout value. A large constraint creates nets with large
fanouts, and a low fanout constraint results in replicated or buffered
logic. Both extremes affect routing and design performance. The right
value depends on your design. The same value of 32 might result in
fanouts of 11 or 12 and large delays on the critical path in one design or
in excessive replication in another design.

The software uses the value as a soft limit, or a guide. It traverses the
inverters and buffers to identify the fanout, and tries to ensure that all
fanouts are under the limit by replicating or buffering where needed (see
Controlling Buffering and Replication, on page 354 for details). However,
the synthesis tool does not respect the fanout limit absolutely; it ignores
the limit if the limit imposes
LO constraints that interfere with optimization.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
352 December 2015
Optimizing Fanout Chapter 10: Specifying Design-Level Optimizations

2. For certain Microsemi technologies, you can set a global hard fanout
limit by doing the following:
– Select Project-> Implementation Options->Device and type a value for the
Fanout Guide option, as described in the previous step.
– On the same tab, check the Hard Fanout Limit option.
This makes the specified value a global hard fanout limit for the design.

3. To override the global fanout guideline and set a soft fanout limit at a
lower level, set the syn_maxfan attribute on modules, views, or non-
primitive instances.

These limits override the more global limits for that object (including a
global hard limit in Microsemi technologies). However, these limits still
function as soft limits, and are replicated or buffered, as described in
Controlling Buffering and Replication, on page 354.

Attribute specified on ... Effect


Module or view Soft limit for the module; overrides the global setting.
Non-primitive instance Soft limit; overrides global and module settings
Clock nets or Soft limit.
asynchronous control nets

4. To set a hard or absolute limit, set the syn_maxfan attribute on a port,


net, register, or primitive instance.

Fanouts that exceed the hard limit are buffered or replicated, as


described in Controlling Buffering and Replication, on page 354.

5. To preserve net drivers from being optimized, attach the syn_keep or


syn_preserve attributes.

For example, the software does not traverse a syn_keep buffer (inserted
as a result of the attribute), and does not optimize it. However, the
software can optimize implicit buffers created as a result of other opera-
tions; for example, it does not respect an implicit buffer created as a
result of syn_direct_enable.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 353
Chapter 10: Specifying Design-Level Optimizations Optimizing Fanout

6. Check the results of buffering and replication in the following:


– The log file (click View Log). The log file reports the number of buffered
and replicated objects and the number of segments created for the
net.
– The HDL Analyst views. The software might not follow DRC rules
when buffering or replicating objects, or when obeying hard fanout
limits.

Controlling Buffering and Replication


To honor fanout limits (see Setting Fanout Limits, on page 352) and reduce
fanout, the software either replicates components or adds buffers. The tool
uses buffering to reduce fanout on input ports, and uses replication to reduce
fanout on nets driven by registers or combinatorial logic. The software first
tries replication, replicating the net driver and splitting the net into segments.
This increases the number of register bits in the design. When replication is
not possible, the software buffers the signals. Buffering is more expensive in
terms of intrinsic delay and resource consumption. The following table
summarizes the behavior.

Replicates When ... Creates Buffers When ...


syn_maxfan is set on a syn_maxfan is set on input ports in Microsemi
register output ProASIC3 families.
syn_replicate is 1 syn_replicate is 0.
Note that the syn_replicate attribute must be used in
conjunction with the syn_maxfan attribute for
Microsemi families. The syn_replicate attribute is
used only to turn off the replication.
syn_maxfan is set on a port/net that is driven by a
port or I/O pad
The net driver has a syn_keep or syn_preserve
attribute
The net driver is not a primitive gate or register

You can control whether high fanout nets are buffered or replicated, using
LO
the techniques described here:
• To use buffering instead of replication, set syn_replicate with a value of 0
globally, or on modules or registers. The syn_replicate attribute prevents

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
354 December 2015
Optimizing Fanout Chapter 10: Specifying Design-Level Optimizations

replication, so that the software uses buffering to satisfy the fanout


limit. For example, you can prevent replication between clock bound-
aries for a register that is clocked by clk1 but whose fanin cone is driven
by clk2, even though clk2 is an unrelated clock in another clock group.
• To specify that high-fanout clock ports should not be buffered, set
syn_noclockbuf globally, or on individual input ports. Use this if you want
to save clock buffer resources for nets with lower fanouts but tighter
constraints.
• Inverters merged with fanout loads increase fanout on the driver during
placement and routing. A distinction is made between a keep buffer
created as the result of the syn_keep attribute being applied by the user
(explicit keep buffer) and a keep buffer that exists as the result of
another attribute (implicit keep buffer). For example, the syn_direct_enable
attribute inserts a keep buffer. When a syn_maxfan attribute is applied to
the output of an explicit keep buffer, the signal is buffered (the keep
buffer is not traversed so that the driver is not replicated). When the
syn_maxfan attribute is applied to the output of an implicit keep buffer,
the keep buffer is traversed and the driver is replicated.
• Turn off buffering and replication entirely, by setting syn_maxfan to a very
high number, like 1000.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 355
Chapter 10: Specifying Design-Level Optimizations Sharing Resources

Sharing Resources
One of the ways to optimize area is to use resource sharing in the compiler.
With resource sharing, the software uses the same arithmetic operators for
mutually exclusive statements; for example, with the branches of a case
statement. Conversely, you can improve timing by disabling resource
sharing, but at the expense of increased area.

Compiler resource sharing is on by default. You can set it globally and then
override the global setting on individual modules

1. To disable resource sharing globally for the whole design, use one of the
methods below.

Leave the default setting to improve area; disable the option to improve
timing.
– Select Project->Implementation Options->Options, disable Resource Sharing.
Alternatively, disable the Resource Sharing button on the left side of the
Project view.
– Apply the syn_sharing directive to the top-level module or architecture
in the source code. See syn_sharing, on page 197 of the Attribute
Reference Manual for syntax and examples.

Verilog module top(out, in, clk_in) /* synthesis syn_sharing = "off" */;

VHDL architecture rtl of top is


attribute syn_sharing : string;
attribute syn_sharing of rtl : architecture is "false";

– Edit your project file and include the following command: set_option
-resource_sharing 0

When you save the project file, it includes the Tcl set_option
-resource_sharing command.

You cannot specify syn_sharing from the SCOPE interface, because it is a


compiler directive, and works during the compilation stage of synthesis.
The resource sharing setting does not affect the mapper, so even if
resource sharing is disabled, the tool can share resources during the
mapping phase to optimize
LO the design and improve results.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
356 December 2015
Inserting I/Os Chapter 10: Specifying Design-Level Optimizations

2. To specify resource sharing on an individual basis or override the global


setting, specify the syn_sharing attribute for the lower-level
module/architecture.

Inserting I/Os
You can control I/O insertion globally, or on a port-by-port basis.

1. To control the insertion of I/O pads at the top level of the design, use the
Disable I/O Insertion option as follows:
– Select Project->Implementation Options and click the Device panel.
– Enable the option (checkbox on) if you want to do a preliminary run
and check the area taken up by logic blocks, before synthesizing the
entire design.
Do this if you want to check the area your blocks of logic take up,
before you synthesize an entire FPGA. If you disable automatic I/O
insertion, you do not get any I/O pads in your design, unless you
manually instantiate them.
– Leave the Disable I/O Insertion checkbox empty (disabled) if you want to
automatically insert I/O pads for all the inputs, outputs and
bidirectionals.
When this option is set, the software inserts I/O pads for inputs,
outputs, and bidirectionals in the output netlist. Once inserted, you
can override the I/O pad inserted by directly instantiating another
I/O pad.
– For the most control, enable the option and then manually
instantiate the I/O pads for specific pins, as needed.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 357
Chapter 10: Specifying Design-Level Optimizations Optimizing State Machines

Optimizing State Machines


You can optimize state machines with the symbolic FSM Compiler and the
FSM Explorer tools.
• The Symbolic FSM Compiler
An advanced state machine optimizer, it automatically recognizes state
machines in your design and optimizes them. Unlike other synthesis
tools that treat state machines as regular logic, the FSM Compiler
extracts the state machines as symbolic graphs, and then optimizes
them by re-encoding the state representations and generating a better
logic optimization starting point for the state machines.
• The FSM Explorer
A specialized state machine optimizer that explores different encoding
styles before selecting the best style. It uses the FSM Compiler to extract
state machines, and runs the FSM Compiler automatically if it has not
been run.

For more information, see the following:


• Deciding when to Optimize State Machines, on page 358
• Running the FSM Compiler, on page 359
• Running the FSM Explorer, on page 363

Deciding when to Optimize State Machines


The FSM Explorer and the FSM Compiler are automatic tools for encoding
state machines, but you can also specify FSMs manually with attributes. For
more information about using attributes, see Specifying FSMs with Attributes
and Directives, on page 313.

Here are the main reasons to use the FSM Compiler:


• To generate better results for your state machines
The software uses optimization techniques that are specifically tuned for
FSMs, like reachability analysis for example. The FSM Compiler also lets
you convert an encoded state machine to another encoding style (to
LO
improve speed and area utilization) without changing the source. For
example, you can use a onehot style to improve results.
• To debug the state machines
© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
358 December 2015
Optimizing State Machines Chapter 10: Specifying Design-Level Optimizations

State machine description errors result in unreachable states, so if you


have errors, you will have fewer states. You can check whether your
source code describes your state machines correctly. You can also use
the FSM Viewer to see a high-level bubble diagram and crossprobe from
there. For information about the FSM Viewer, see Using the FSM Viewer,
on page 272.
• To run the FSM Explorer
The FSM Explorer is a tool that examines all the encoding styles before
selecting the best option, based on the state machine extraction done by
the FSM Compiler. If the FSM Compiler has not been run previously, the
Explorer automatically runs it. For more information about using the
FSM Explorer, see Running the FSM Explorer, on page 363.

If you are trying to decide whether to use the FSM Compiler or the FSM
Explorer to optimize your state machines, remember these points:
• The FSM Explorer runs the FSM Compiler if it has not already been run,
because it picks encoding styles based on the state machines that the
FSM Compiler extracts.
• Like the FSM Compiler, you use the FSM Explorer to generate better
results for your state machines. Unlike the FSM Compiler, which picks
an encoding style based on the number of states, the FSM Explorer tries
out different encoding styles and picks the best style for the state
machine based on overall design constraints.
• The trade-off is that the FSM Explorer takes longer to run than the FSM
Compiler.

Running the FSM Compiler


You can run the FSM Compiler tool on the whole design or on individual
FSMs. See the following:
• Running the FSM Compiler on the Whole Design, on page 359
• Running the FSM Compiler on Individual FSMs, on page 361

Running the FSM Compiler on the Whole Design


1. Enable the compiler by checking the Symbolic FSM Compiler box in one of
these places:

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 359
Chapter 10: Specifying Design-Level Optimizations Optimizing State Machines

– The main panel on the left side of the project window


– The Options tab of the dialog box that comes up when you click the
Add Implementation/New Impl or Implementation Options buttons

2. To set a specific encoding style for a state machine, define the style with
the syn_encoding attribute, as described in Specifying FSMs with
Attributes and Directives, on page 313.

If you do not specify a style, the FSM Compiler picks an encoding style
based on the number of states.

3. Click Run to run synthesis.

The software automatically recognizes and extracts the state machines


in your design, and instantiates a state machine primitive in the netlist
for each FSM it extracts. It then optimizes all the state machines in the
design, using techniques like reachability analysis, next state logic
optimization, state machine re-encoding and proprietary optimization
algorithms. Unless you specified an encoding style, the tool automati-
cally selects the encoding style. If you did specify a style, the tool uses
that style.

In the log file, the FSM Compiler writes a report that includes a descrip-
tion of each state machine extracted and the set of reachable states for
each state machine.

4. Select View->View Log File and check the log file for descriptions of the
state machines and the set of reachable states for each one. You see text
like the following:

Extracted state machine for register cur_state


State machine has 7 reachable states with original encodings of:
0000001
0000010
0000100
0001000
0010000
0100000
1000000
....
original code -> new code
0000001 -> 0000001LO
0000010 -> 0000010

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
360 December 2015
Optimizing State Machines Chapter 10: Specifying Design-Level Optimizations

0000100 -> 0000100


0001000 -> 0001000
0010000 -> 0010000
0100000 -> 0100000
1000000 -> 1000000

5. Check the state machine implementation in the RTL and Technology


views and in the FSM viewer.
– In the RTL view you see the FSM primitive with one output for each
state.
– In the Technology view, you see a level of hierarchy that contains the
FSM, with the registers and logic that implement the final encoding.
– In the FSM viewer you see a bubble diagram and mapping
information. For information about the FSM viewer, see Using the
FSM Viewer, on page 272.
– In the statemachine.info text file, you see the state transition
information.

Running the FSM Compiler on Individual FSMs


If you have state machines that you do not want automatically optimized by
the FSM Compiler, you can use one of these techniques, depending on the
number of FSMs to be optimized. You might want to exclude state machines
from automatic optimization because you want them implemented with a
specific encoding or because you do not want them extracted as state
machines. The following procedure shows you how to work with both cases.

1. If you have just a few state machines you do not want to optimize, do the
following:
– Enable the FSM Compiler by checking the box in the button panel of
the Project window.
– If you do not want to optimize the state machine, add the
syn_state_machine directive to the registers in the Verilog or VHDL
code. Set the value to 0. When synthesized, these registers are not
extracted as state machines.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 361
Chapter 10: Specifying Design-Level Optimizations Optimizing State Machines

Verilog reg [3:0] curstate /* synthesis syn_state_machine=0 */;


VHDL signal curstate : state_type;
attribute syn_state_machine : boolean;
attribute syn_state_machine of curstate : signal is
false;v

– If you want to specify a particular encoding style for a state machine,


use the syn_encoding attribute, as described in Specifying FSMs with
Attributes and Directives, on page 313. When synthesized, these
registers have the specified encoding style.
– Run synthesis.
The software automatically recognizes and extracts all the state
machines, except the ones you marked. It optimizes the FSMs it
extracted from the design, honoring the syn_encoding attribute. It writes
out a log file that contains a description of each state machine extracted,
and the set of reachable states for each FSM.

2. If you have many state machines you do not want optimized, do this:
– Disable the compiler by disabling the Symbolic FSM Compiler box in one
of these places: the main panel on the left side of the project window
or the Options tab of the dialog box that comes up when you click the
Add Implementation or Implementation Options buttons. This disables the
compiler from optimizing any state machine in the design. You can
now selectively turn on the FSM compiler for individual FSMs.
– For state machines you want the FSM Compiler to optimize
automatically, add the syn_state_machine directive to the individual
state registers in the VHDL or Verilog code. Set the value to 1. When
synthesized, the FSM Compiler extracts these registers with the
default encoding styles according to the number of states.

Verilog reg [3:0] curstate /* synthesis syn_state_machine=1 */;


VHDL signal curstate : state_type;
attribute syn_state_machine : boolean;
attribute syn_state_machine of curstate : signal is true;
LO
– For state machines with specific encoding styles, set the encoding
style with the syn_encoding attribute, as described in Specifying FSMs

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
362 December 2015
Optimizing State Machines Chapter 10: Specifying Design-Level Optimizations

with Attributes and Directives, on page 313. When synthesized, these


registers have the specified encoding style.
– Run synthesis.
The software automatically recognizes and extracts only the state
machines you marked. It automatically assigns encoding styles to the
state machines with the syn_state_machine attribute, and honors the
encoding styles set with the syn_encoding attribute. It writes out a log file
that contains a description of each state machine extracted, and the set
of reachable states for each state machine.

3. Check the state machine in the log file, the RTL and technology views,
and the FSM viewer, which is not available to Synplify users. For
information about the FSM viewer, see Using the FSM Viewer, on
page 272.

Running the FSM Explorer


1. If you need to customize the extraction process, set attributes.
– Use syn_state_machine=0 to specify state machines you do not want to
extract and optimize.

Verilog reg [3:0] curstate /* synthesis state_machine */;


VHDL signal curstate : state_type;
attribute syn_state_machine : boolean;
attribute syn_state_machine of curstate : signal is true;

– Use syn_encoding if you want to set a specific encoding style.


Verilog reg [3:0] curstate /* synthesis syn_encoding="gray"*/;
VHDL signal curstate : state_type;
attribute syn_encoding : string;
attribute syn_encoding of curstate : signal is "gray";

The FSM Compiler honors the syn_state_machine attribute when it


extracts state machines, and the FSM Explorer honors the syn_encoding
attribute when it sets encoding styles. See Specifying FSMs with Attri-
butes and Directives, on page 313 for details.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 363
Chapter 10: Specifying Design-Level Optimizations Optimizing State Machines

2. Enable the FSM Explorer by checking the FSM Explorer box in one of
these places:
– The main panel on the left side of the project window
– The Options tab of the dialog box that comes up when you click the
Add Implementation or Implementation Options buttons.

If you have not checked the FSM Compiler option, checking the FSM
Explorer option automatically selects the FSM Compiler option.

3. Click Run to run synthesis.

The FSM Explorer uses the state machines extracted by the FSM
Compiler. If you have not run the FSM Compiler, the FSM Explorer
invokes the compiler automatically to extract the state machines,
instantiate state machine primitives, and optimize them. Then, the FSM
Explorer runs through each encoding style for each state machine that
does not have a syn_encoding attribute and picks the best style. If you
have defined an encoding style with syn_encoding, it uses that style.

The FSM Compiler writes a description of each state machine extracted


and the set of reachable states for each state machine in the log file. The
FSM Explorer adds the selected encoding styles. The FSM Explorer also
generates a <design>_fsm.sdc file that contains the encodings and
which is used for mapping.

4. Select View->View Log File and check the log file for the descriptions. The
following extract shows the state machine and the reachable states as
well as the encoding style, gray, set by FSM Explorer.

Extracted state machine for register cur_state


State machine has 7 reachable states with original encodings of:
0000001
0000010
0000100
0001000
0010000
0100000
1000000
....
Adding property syn_encoding, value "gray", to instance
cur_state[6:0]
List of partitions toLO
map:
view:work.Control(verilog)

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
364 December 2015
Optimizing State Machines Chapter 10: Specifying Design-Level Optimizations

Encoding state machine work.Control(verilog)-


cur_state_h.cur_state[6:0]
original code -> new code
0000001 -> 000
0000010 -> 001
0000100 -> 011
0001000 -> 010
0010000 -> 110
0100000 -> 111
1000000 -> 101

5. Check the state machine implementation in the RTL and Technology


views and in the FSM viewer.

For information about the FSM viewer, see Using the FSM Viewer, on
page 272.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 365
Chapter 10: Specifying Design-Level Optimizations Inserting Probes

Inserting Probes
Probes are extra wires that you insert into the design for debugging. When
you insert a probe, the signal is represented as an output port at the top
level. You can specify probes in the source code or by interactively attaching
an attribute.

Specifying Probes in the Source Code


To specify probes in the source code, you must add the syn_probe attribute to
the net. You can also add probes interactively, using the procedure described
in Adding Probe Attributes Interactively, on page 367.

1. Open the source code file.

2. For Verilog source code, attach the syn_probe attribute as a comment on


any internal signal declaration:

module alu(out, opcode, a, b, sel);


output [7:0] out;
input [2:0] opcode;
input [7:0 a, b;
input sel;
reg [7:0] alu_tmp /* synthesis syn_probe=1 */;
reg [7:0] out;
//Other code
The value 1 indicates that probe insertion is turned on. For detailed
information about Verilog attributes and examples of the files, see the
Attribute Reference Manual.

To define probes for part of a bus, specify where you want to attach the
probes; for example, if you specify reg [1:0] in the previous code, the
software only inserts two probes.

3. For VHDL source code, add the syn_probe attribute as follows:

architecture rtl of alu is


signal alu_tmp : std_logic_vector(7 downto 0);
attribute syn_probe : boolean;
attribute syn_probe
LOof alu_tmp : signal is true;
--other code;

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
366 December 2015
Inserting Probes Chapter 10: Specifying Design-Level Optimizations

For detailed information about VHDL attributes and sample files, see the
Attribute Reference Manual.

4. Run synthesis.

The software looks for nets with the syn_probe attribute and creates
probes and I/O pads for them.

5. Check the probes in the log file (*.srr) and the Technology view.

This figure shows some probes and probe entries in the log file.

Adding property syn_probe, value 1, to net pc[0]


Adding property syn_probe, value 1, to net pc[1]
Adding property syn_probe, value 1, to net pc[2]
Adding property syn_probe, value 1, to net pc[3]
....
@N|Added probe pc_keep_probe_1[0] on pc_keep[0] in
eight_bit_uc
@N|Also padding probe pc_keep_probe_1[0]
@N|Added probe pc_keep_probe_2[1] on pc_keep[1] in
eight_bit_uc
@N|Also padding probe pc_keep_probe_2[1]
@N|Added probe pc_keep_probe_3[2] on pc_keep[2] in
eight_bit_uc

Adding Probe Attributes Interactively


The following procedure shows you how to insert probes by adding the
syn_probe attribute through the SCOPE interface. Alternatively, you can add
the attribute in the source code, as described in Specifying Probes in the
Source Code, on page 366.

1. Open the SCOPE window and click Attributes.

2. Push down as necessary in an RTL view, and select the net for which
you want to insert a probe point.

Do not insert probes for output or bidirectional signals. If you do, you
see warning messages in the log file.

3. Do the following to add the attribute:


– Drag the net into a SCOPE cell.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 367
Chapter 10: Specifying Design-Level Optimizations Inserting Probes

– Add the prefix n: to the net name in the SCOPE window. If you are
adding a probe to a lower-level module, the name is created by
concatenating the names of the hierarchical instances.
– If you want to attach probes to part but not all of a bus, make the
change in the Object column. For example, if you enter
n:UC_ALU.longq[4:0] instead of n:UC_ALU.longq[8:0], the software only
inserts probes where specified.
– Select syn_probe in the Attribute column, and type 1 in the Value
column.
– Add the constraint file to the project list.
4. Rerun synthesis.

5. Open a Technology view and check the probe wires that have been
inserted. You can use the Ports tab of the Find form to locate the probes.

The software adds I/O pads for the probes. The following figure shows
some of the pads in the Technology view and the log file entries.

Adding property syn_probe, value 1, to net pc[0]


Adding property syn_probe, value 1, to net pc[1]
Adding property syn_probe, value 1, to net pc[2]
Adding property syn_probe, value 1, to net pc[3]
....
@N|Added probe pc_keep_probe_1[0] on pc_keep[0] in
eight_bit_uc
@N|Also padding probe pc_keep_probe_1[0]
@N|Added probe pc_keep_probe_2[1] on pc_keep[1] in
eight_bit_uc
@N|Also padding probe pc_keep_probe_2[1]
@N|Added probe pc_keep_probe_3[2] on pc_keep[2] in
eight_bit_uc

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
368 December 2015
C H A P T E R 11

Working with Compile Points

The following sections describe compile points and how to use them in logic
synthesis iterative flows:
• Compile Point Basics, on page 370
• Compile Point Synthesis Basics, on page 378
• Synthesizing Compile Points, on page 387
• Using Compile Points with Other Features, on page 399
• Resynthesizing Incrementally, on page 400

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 369
Chapter 11: Working with Compile Points Compile Point Basics

Compile Point Basics


Compile points are RTL partitions of the design that you define before synthe-
sizing the design. Compile points can be defined manually, or the tool can
generate them automatically. The software treats each compile point as a
block, and can synthesize, optimize, place, and route the compile points
independently. Compile points can be nested.

See the following topics for some details about compile points:
• Advantages of Compile Point Design, on page 370
• Manual Compile Points, on page 372
• Nested Compile Points, on page 373
• Compile Point Types, on page 373

Advantages of Compile Point Design


Designing with compile points makes it more efficient to work with the
increasingly larger designs of today and the corresponding team approach to
design. They offer several advantages, which are described here:
• Compile Points and Design Flows, next
• Runtime Savings, on page 371
• Design Preservation, on page 371

Compile Points and Design Flows


Compile points improve the efficacy of both top-down and bottom-up design
flows:
• In a traditional bottom-up design flow, compile points make it possible
to easily divide up the design effort between designers or design teams.
The compile points can be worked on separately and individually. The
compile point synthesis flow eliminates the need to maintain the
complex error-prone scripts for stitching, modeling, and ordering
required by the traditional bottom-up design flow.
LO
• From a top-down design flow perspective, compile points make it easier
to work on the top-level design. You can mark compile points that are
still being developed as black boxes, and synthesize the top level with

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
370 December 2015
Compile Point Basics Chapter 11: Working with Compile Points

what you have. You can also customize the compile point type settings
for individual compile points to take advantage of cross-boundary
optimizations.

You can also synthesize incrementally, because the tool does not resyn-
thesize compile points that are unchanged when you resynthesize the
design. This saves runtime and also preserves parts of the design that
are done while the rest of the design is completed.

See Compile Point Synthesis, on page 384 for a description of the synthesis
process with compile points.

Runtime Savings
Compile points are the required foundation for multiprocessing and incre-
mental synthesis, both of which translate directly to runtime savings:
• Multiprocessing runs synthesis as multiple parallel processes, using the
compile points as the partitions that are synthesized in parallel on
different processors. See Combining Compile Points with Multipro-
cessing, on page 399.
• Incremental synthesis uses compile points to determine which portions
of the design to resynthesize, only resynthesizing the compile points that
have been modified. See Resynthesizing Compile Points Incrementally,
on page 400.

Design Preservation
Using compile points addresses the need to maintain the overall stability of a
design while portions of the design evolve. When you use compile points to
partition the design, you can isolate one part from another. This lets you
preserve some compile points, and only resynthesize those that need to be
rerun. These scenarios describe some design situations where compile points
can be used to isolate parts of the design and run incremental synthesis:
• During the initial design phase, design modules are still being designed.
Use compile points to preserve unchanged design modules and evaluate
the effects of modifications to parts of the design that are still changing.
• During design integration, use compile points to preserve the main
design modules and only allow the glue logic to be remapped.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 371
Chapter 11: Working with Compile Points Compile Point Basics

• If your design contains IP, synthesize the IP, and use compile points to
preserve them while you run incremental synthesis on the rest of the
design.
• In the final stages of the design, use compile points to preserve design
modules that do not need to be updated while you work through minor
RTL changes in some other part of the design.

Manual Compile Points


You can create compile points manuallly. Manual compile points provide
more control. You can specify boundary constraints for each compile point
individually. You can separate completed parts of the design from parts that
are still being designed, or fine-tune the compile points to take advantage of
as many cross-boundary optimizations as possible. For example, you can
ensure that a critical path does not cross a compile point boundary, thus
ensuring synthesis results with optimal performance.

Guidelines for Using Manual Compile Points


Determine the kind of compile point to use based on what the design
requires. The table lists some guidelines:

Use Manual Compile Points ...


When you know the design in detail.
Create manual compile points to get better QoR. Good candidates for manual
compile points include the following:
• Completed modules with registered interfaces, where you want to preserve the
design
• Modules created to include an entire critical path, so as to get the best
performance.
• Modules that are less likely to be affected by cross boundary optimizations like
constant propagation and register absorption.
When you do not want further optimizations to a completed compile point.
When you want more control to determine cross-boundary optimizations on an
individual basis.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
372 December 2015
Compile Point Basics Chapter 11: Working with Compile Points

Nested Compile Points


A design can have any number of compile points, and compile points can be
nested inside other compile points. In the following figure, compile point CP6
is nested inside compile point CP5, which is nested inside compile point CP4.

To simplify things, the term child is used to refer to a compile point that is
contained inside another compile point; the term parent is used to refer to a
container compile point that contains a child. These terms are not used in
their strict sense of direct, immediate containment: If a compile point A is
nested in B, which is nested in C, then A and B are both considered children
of C, and C is a parent of both A and B. The top level is considered the parent
of all compile points. In the figure above, both CP5 and CP6 are children of
CP4; both CP4 and CP5 are parents of CP6; CP5 is an immediate child of CP4
and an immediate parent of CP6.

Top Level The top level is a parent of all compile points.


It is an immediate parent of CP1, CP2, CP3,
CP1 CP4 and CP4, and parent to all other compile points.

CP5 is nested inside CP4.


CP5
CP5 is an immediate child of CP4.
CP4 is the immediate parent of CP5.
CP2 CP4 is also the parent of CP6 and CP7.
CP6 CP6 & CP7 are nested inside CP5.
CP5 is the immediate parent of CP6 & CP7.
CP6 & CP7 are immediate children of CP5.
CP6 & CP7 are children of both CP4 & CP5.
CP3 CP7
CP4 & CP5 are parents of CP6 & CP7.

Compile Point Types


Compile point designs do not have as good QoR as designs without them
because the boundaries limit optimizations. Cross-boundary optimizations
typically improve area and timing, at the expense of runtime. The compile
point type determines whether boundary optimizations are allowed. The tool

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 373
Chapter 11: Working with Compile Points Compile Point Basics

marks automatic compile points as hard by default. For manual compile


points, you define the type. See Defining the Compile Point Type, on page 393
for details.

These are descriptions of the soft, hard, locked, locked,partition, and black_box
compile types:
• Soft
Compile point boundaries can be reoptimized during top-level mapping.
Timing optimizations like sizing, buffering, and DRC logic optimizations
can modify boundary instances of the compile point and combine them
with functions from the next higher level of the design. The compile
point interface can also be modified. Multiple instances are uniquified.
Any optimization changes can propagate both ways: into the compile
point and from the compile point to its parent.

Using soft mode usually yields the best quality of results, because the
software can utilize boundary optimizations. On the other hand, soft
compile points can take a longer time to run than the same design with
hard or locked compile points. Unless they are at the leaf level, soft compile
points are not processed in parallel. Upper levels that contain soft
compile points cannot be processed until the lower level has been
mapped, with the top level processed last.

The following figure shows the soft compile point with a dotted boundary
to show that logic can be moved in or out of the compile point.

TOP

compile_point = soft

Optimization of entire logic cone across boundary

• Hard
For hard compile points,LO
the compile point boundary can be reoptimized
during top-level mapping and instances on both sides of the boundary
can be modified by timing and DRC optimizations using top-level
constraints. However, the boundary is not modified. Any changes can

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
374 December 2015
Compile Point Basics Chapter 11: Working with Compile Points

propagate in either direction while the compile point boundary


(port/interface) remains unchanged. Multiple instances are uniquified.
For performance improvements, constant propagation and removal of
unused logic optimizations are performed across hard compile points.

In the following figure, the solid boundary on the hard compile point
indicates that no logic can be moved in or out of the compile point.

TOP

compile_point = hard

Optimization on both sides

The hard compile point type allows for optimizations on both sides of the
boundary without changing the boundary. There is a trade-off in quality
of results to keep the boundaries. Using hard also allows for hierarchical
equivalence checking for the compile point module.
• Locked
This is the default compile point type for manual compile points. With a
locked compile point, the tool does not make any interface changes or
reoptimize the compile point during top-level mapping. An interface logic
model (ILM) of the compile point is created (see Interface Logic Models,
on page 380) and included for the top-level mapping. The ILM remains
unchanged during top-level mapping.

The locked value indicates that all instances of the same compile point
are identical and unaffected by top-level constraints or critical paths. As
a result, multiple instances of the compile point module remain identical
even though the compile point is uniquified. The Technology view (srm
file) shows unique names for the multiple instances, but in the final
Verilog netlist (vma file) the original module names for the multiple
instances are restored.

Timing optimization can only modify instances outside the compile


point. Although the compile point is used to time the top-level netlist,

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 375
Chapter 11: Working with Compile Points Compile Point Basics

changes do not propagate into or out of a locked compile point. The


following figure shows a solid boundary for the locked compile point to
indicate that no logic is moved in or out of the compile point during top-
level mapping.

TOP

compile_point = locked

No optimization inside compile point

This mode has the largest trade-off in terms of QoR, because there are
no boundary optimizations. So, it is very important to provide accurate
constraints for locked compile points. The following table lists some
advantages and limitations with the locked compile point:

Advantages Limitations

Consumes smallest amount of memory. Interface timing


Used for large designs because of this
memory advantage.
Provides most runtime advantage Constant propagation
compared to other compile point types.
Allows for obtaining stable results for a BUFG insertion
completed part of the design.
Allows for hierarchical place and route with GSR hookup
multiple output netlists for each compile
point and the top-level output netlist.
Allows for hierarchical simulation. IO pads, like IBUFs and OBUFs,
should not be instantiated
within compile points
LO
• Locked, partition

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
376 December 2015
Compile Point Basics Chapter 11: Working with Compile Points

You can also specify a compile point type to be locked, partition. With this
setting and depending on the technology specified, the tool creates the
following:

Microsemi – A designName_partition.tcl file that contains timestamps for


each compile point. The contents of this file is used in the incremental
synthesis flow.

This mode offers place-and-route runtime advantages and lets you


converge on stable results for a completed design. However, this mode
has the largest trade-off of quality of results because boundary optimiza-
tions are not allowed.

Compile Point Type Summary


The following table summarizes how the tool handles different compile points
during synthesis:

Features Compile Point Type


Soft Hard Locked

Boundary optimizations Yes Limited No

Uniquification of multiple instance Yes Yes Limited


modules
Compile point interface (port definitions) Modified Not modified Not modified

Hierarchical simulation No Yes Yes

Hierarchical equivalence checking No Yes Yes

Interface Logic Model (created/used) No Yes Yes


* If you replace the black box with the original RTL, you can run hierarchical simulation or hierarchical
equivalence checking on the rest of the design.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 377
Chapter 11: Working with Compile Points Compile Point Synthesis Basics

Compile Point Synthesis Basics


This section describes the compile point constraint files and timing models,
and describes the steps the tool goes through to synthesize compile points.
See the following for details:
• Compile Point Constraint Files, on page 378
• Interface Logic Models, on page 380
• Interface Timing for Compile Points, on page 381
• Compile Point Synthesis, on page 384
• Incremental Compile Point Synthesis, on page 385
• Forward-annotation of Compile Point Timing Constraints, on page 386
For step-by-step information about how to use compile points, see Synthe-
sizing Compile Points, on page 387.

Compile Point Constraint Files


A compile point design can contain two levels of constraint files, as described
below:
• The constraint file at the top level
This is a required file, and contains constraints that apply to the entire
design. This file also contains the definitions of the compile points in the
design. The define_compile_point command is automatically written to the
top-level constraint file for each compile point you define.

The following figure shows that this design has one locked compile
point, pgrm_cntr. It uses the following syntax to define the compile point:

define_compile_point {v:work.prgm_cntr} -type {locked}

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
378 December 2015
Compile Point Synthesis Basics Chapter 11: Working with Compile Points

• Constraints files at the compile point level


These constraint files are optional, and are used for better control over
manual compile points.

The compile point constraints are specific to the compile point and only
apply within it. If your design has manual compile points, you can
define corresponding compile point constraint files for them. See Setting
Constraints at the Compile Point Level, on page 394 for a step-by-step
procedure.

When compile point constraints are defined, the tool uses them to
synthesize the compile point, not automatic interface timing. Note that
depending on the compile point type, the tool might further optimize the
compile points during top-down synthesis of the top level to improve
timing performance and overall design results, but the compile point
itself is synthesized with the defined compile point constraints.

The first command in a compile point constraint file is define_current_de-


sign, and it specifies the compile point module for the contained
constraints. This command sets the context for the constraint file. The

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 379
Chapter 11: Working with Compile Points Compile Point Synthesis Basics

remainder of the file is similar to the top-level constraint file. For


example:

define_current_design {work.pgrm_cntr}

If your design has some compile points with their own constraint files and
others without them, the tool uses the defined compile point constraints
when it synthesizes those compile points. For the other compile points
without defined constraints, it uses automatic interface timing, as described
in Interface Timing for Compile Points, on page 381.

Interface Logic Models


The interface logic model (ILM) of a locked or hard compile point is a timing
model that contains only the interface logic necessary for accurate timing. An
ILM is a partial gate-level netlist that represents the original design
accurately while requiring less memory during mapping. Using ILMs
LO
improves the runtime for static timing analysis without compromising timing
accuracy.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
380 December 2015
Compile Point Synthesis Basics Chapter 11: Working with Compile Points

The tool does not do any timing optimizations on an ILM. The interface logic
is preserved with no modifications. All logic required to recreate timing at the
top level is included in the ILM. ILM logic includes any paths from an
input/inout port to an internal register, an internal register to an
output/inout port, and an input/inout port to an output/inout port.

The tool removes internal register-to-register paths, as shown in this


example. In this design, and_a is not included in the ILM because the timing
path that goes through and_a is an internal register-to-register path.

CP 1
Gates included in ILM

and_a and_b

and_c or_a

Gate not included


in ILM

Interface Timing for Compile Points


By default, the synthesis tool automatically infers timing constraints for all
compile points from the top-level constraints. However, if a compile point has
its own constraint file, the tool applies those compile point-specific
constraints to synthesize the compile point.
• For automatic interface timing, the tool derives constraints from the top
level and uses them to synthesize the compile point. The top level is
synthesized at the same time as the other compile points.
• When there are compile point constraint files, the tool first synthesizes
the compile point using the constraints in the compile point constraints
file and then synthesizes the top level using the top-level constraints.

When it synthesizes a compile point, the tool considers all other compile
points as black boxes and only uses their interface timing information. In the
following figure, when the tool is synthesizing compile point A, it applies
relevant timing information to the boundary registers of B and C, because it
treats them as black boxes.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 381
Chapter 11: Working with Compile Points Compile Point Synthesis Basics

Interface Timing Example


The design below shows how the interface timing works on compile points.

Contents of level1 Module

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
382 December 2015
Compile Point Synthesis Basics Chapter 11: Working with Compile Points

Interface Timing Off


Interface timing is off for a compile point when you define constraints for it in
a compile point constraints file. In this example, the following frequencies are
defined for the level1 compile point shown above:

Clock Period Constraints File


Top-level clock 10 ns Top-level constraint file
Compile point-level clock 20 ns Compile point constraint file

When interface timing is off, the compile point log file (srr) reports the clock
period for the compile point as 20 ns, which is the compile point period.

Interface Timing On
For automatic interface timing to run on a compile point (interface timing on),
there must not be a compile-point level constraints file. When interface
timing is on, the compile point log file (srr) reports the clock period for the
top-level design, which is 10 ns:

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 383
Chapter 11: Working with Compile Points Compile Point Synthesis Basics

Compile Point Synthesis


During synthesis, the tool first synthesizes the compile points and then maps
the top level. The rest of this section describes the process that the tool goes
through to synthesize compile points; for step-by-step information about
what you need to do to use compile points, see Synthesizing Compile Points,
on page 387.

Manual Compile Point Synthesis


The tool synthesizes compile points individually from the bottom up. If you
have enabled multiprocessing, it synthesizes the compile points in parallel
using multiple processing jobs. For nested compile points, it starts with the
compile point at the lowest level of hierarchy and works up the hierarchy.

A compile point stands on its own, and is optimized separately from its parent
environment (the compile point container or the top level). This means that
critical paths from a higher level do not propagate downwards, and they are
unaffected by them.

If you have specified compile point-level constraints, the tool uses them to
synthesize the compile point; if not, it uses automatic interface timing propa-
gated from the top level. For compile point synthesis, the tool assumes that
all other compile points are black boxes, and only uses the interface informa-
tion.
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
384 December 2015
Compile Point Synthesis Basics Chapter 11: Working with Compile Points

When defined, compile point constraints apply within the compile point. For
manual compile points, it is recommended that you set constraints on locked
compile points, but setting constraints is optional for soft and hard compile
points.

By default, synthesis stops if the tool encounters an error while synthesizing


a compile point. You can specify that the tool ignore the error and continue
synthesizing other compile points with the Continue on Error option. See Using
Continue on Error for Compile Point Synthesis, on page 207 for details.

Stage 2: Top-Level Synthesis


Once all the compile points have been synthesized, the tool synthesizes the
entire design from the top down, using the model information generated for
each compile point and constraints defined in the top-level constraints file.
You do not need to duplicate compile point constraints at a higher level,
because the tool takes the compile point timing models into account when it
synthesizes a higher level. Note that if you run standalone timing analysis on
a compile point, the timing report reflects the top-level constraints and not
the compile point constraints, although the tool used compile point level
constraints to synthesize the compile point.

The software writes out a single output netlist and one constraint file for the
entire design. See Forward-annotation of Compile Point Timing Constraints,
on page 386 for a description of the constraints that are forward-annotated.

Incremental Compile Point Synthesis


The tool treats compile points as blocks for incremental synthesis. On subse-
quent synthesis runs, the tool runs incrementally and only resynthesizes
those compile points that have changed, and the top level. The synthesis tool
automatically detects design changes and resynthesizes compile points only if
necessary. For example, it does not resynthesize a compile point if you only
add or change a source code comment, because this change does not really
affect the design functionality.

The tool resynthesizes a compile point that has already been synthesized, in
any of these cases:
• The HDL source code defining the compile point is changed in such a
way that the design logic is changed.
• The constraints applied to the compile point are changed.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 385
Chapter 11: Working with Compile Points Compile Point Synthesis Basics

• Any of the options on the Device panel of the Implementation Options dialog
box, except Update Compile Point Timing Data, are changed. In this case the
entire design is resynthesized, including all compile points.
• You intentionally force the resynthesis of your entire design, including
all compile points, with the Run -> Resynthesize All command.
• The Update Compile Point Timing Data device mapping option is enabled and
at least one child of the compile point (at any level) has been remapped.
The option requires that the parent compile point be resynthesized using
the updated timing model of the child. This includes the possibility that
the child was remapped earlier, while the option was disabled. The
newly enabled option requires that the updated timing model of the
child be taken into account, by resynthesizing the parent.

For each compile point, the software creates a subdirectory named for the
compile point, in which it stores intermediate files that contain hierarchical
interface timing and resource information that is used to synthesize the next
level. Once generated, the model file is not updated unless there is an inter-
face design change or you explicitly specify it. If you happen to delete these
files, the associated compile point will be resynthesized and the files regener-
ated.

Forward-annotation of Compile Point Timing Constraints


In addition to a top-level constraint file, each compile point can have its own
constraint file. Constraints are forward-annotated to placement and routing
from the top-level as well as the compile point-level files. However, not all
compile point constraints are forward-annotated, as explained below. For
example, constraints on top-level ports are always forward annotated, but
compile point port constraints are not forward annotated.
• Top-level constraints are forward-annotated.
• Constraints applied to the interface (ports and bit ports) of the compile
point are not forward-annotated.
These include input_delays, output_delays, and clock definitions on the
ports. Such constraints are only used to map the compile point itself,
not its parents. They are not used in the final timing report, and they are
not forward-annotated.
LO
• Constraints applied to instances inside the compile point are forward-
annotated
Constraints like timing exceptions and internal clocks are used to map

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
386 December 2015
Synthesizing Compile Points Chapter 11: Working with Compile Points

the compile point and its parents. They are used in the final timing
report, and they are forward-annotated.

Synthesizing Compile Points


This section describes the synthesis process with manual compile points in
your design:
• The Manual Compile Point Flow, on page 388
• Creating a Top-Level Constraints File for Compile Points, on page 390
• Defining Manual Compile Points, on page 391
• Setting Constraints at the Compile Point Level, on page 394
• Analyzing Compile Point Results, on page 396

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 387
Chapter 11: Working with Compile Points Synthesizing Compile Points

The Manual Compile Point Flow


Using manual compile points is most advantageous in the following situa-
tions, where you
• Have to work with a large design
• Experience long runtimes, or need to reduce synthesis runtime
• Require the maximum QoR from logic synthesis
• Can adjust design methodology to get the best results from the tools
The following figure summarizes the process for using manual compile points
in your design.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
388 December 2015
Synthesizing Compile Points Chapter 11: Working with Compile Points

This procedure describes the steps in more detail:

1. Set up the project.


– Create the project and add RTL and IP files to the project, as usual.
– Target a device and technology for which compile points are
supported. This includes most of the newer Microsemi device
families.
– Set other options as usual.
2. Compile the design (F7) to initialize the constraints file.

3. Do the following in the top-level constraint file:


– Define compile points in the top-level constraint file. See Creating a
Top-Level Constraints File for Compile Points, on page 390. Note that
by default, the tool automatically calculates the interface timing for
all compile points.
– Set timing constraints and attributes in the top-level constraint file:

Constraint Apply to ... Example


Clock All clocks in the design. create_clock {p:clk} -name clk -period
100 -clockgroup cg1

I/O All top-level port constraints. set_input_delay {p:a} {1} -clock {clk:r}
constraints Register the compile point I/O
boundaries to improve timing.
Timing All timing exceptions that are set_false_path -from {i:reg1} -to
exceptions outside the compile point {i:reg2}
module, or that might be
partially in the compile point
modules.
Attributes All attributes that are define_attribute {i:statemachine_1}
applicable to the rest of the syn_encoding {sequential}
design, not within the compile
points.

4. Set compile point-specific constraints as needed in a separate, compile


point-level constraint file.

See Setting Constraints at the Compile Point Level, on page 394 for a
step-by-step procedure. After setting the compile point constraints, add
the compile point constraint file to the project.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 389
Chapter 11: Working with Compile Points Synthesizing Compile Points

5. If you do not want to interrupt synthesis for compiler errors, select


Options->Configure Compile Point Process and enable the Continue on Error
option.

With this option enabled, the tool black boxes any compile points that
have mapper errors and continues to synthesize the rest of the design.
See Combining Compile Points with Multiprocessing, on page 399 for
more information about this mode.

6. Synthesize the design.

The tool synthesizes the compile points separately and then synthesizes
the top level. See Compile Point Synthesis, on page 384 for details about
the process.
– The first time it runs synthesis, the tool maps the entire design.
– For subsequent synthesis runs, the tool only maps compile points
that were modified since the last run. It preserves unchanged compile
points.

You can also run synthesis on individual compile points, without


synthesizing the whole design.

7. Analyze the synthesis results using the top-level srr log file.

See Analyzing Compile Point Results, on page 396 for details.

8. If you do not meet your design goals, make necessary changes to the
RTL, constraints, or synthesis controls, and re-synthesize the design.

The tool runs incremental synthesis on the modified parts of the design,
as described in Incremental Compile Point Synthesis, on page 385. See
Resynthesizing Compile Points Incrementally, on page 400 for a detailed
procedure.

Creating a Top-Level Constraints File for Compile Points


All compile points require a top-level constraints file. If you have manual
compile points, define them in this file. The top-level file also contains design-
level constraints. The following procedure describes how to create a top-level
constraints file for a compileLO
point design.

1. Create the top-level constraints file.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
390 December 2015
Synthesizing Compile Points Chapter 11: Working with Compile Points

– To define compile points in an existing top-level constraint file, open a


SCOPE window by double-clicking the file in the Project view.
– To define compile points in a new top-level constraint file, click the
SCOPE icon. Click on the FPGA Constraints (SCOPE) button.

The SCOPE window opens. It includes a Current Design field, where you
can specify constraints for the top-level design from the drop-down
menu and define manual compile points.

2. Set top-level constraints like input/output delays, clock frequencies or


multicycle paths.

You do not have to redefine compile point constraints at the top level as
the tool uses them to synthesize the compile points.

3. Define manual compile points if needed.

See Defining Manual Compile Points, on page 391 for details.

4. Save the top-level constraints file and add it to the project.

Defining Manual Compile Points


Compile points and constraints are both saved in a constraint file, so this
step can be combined with the setting of constraints, as convenient. This
procedure only describes how to define compile points. You define compile
points in a top-level constraint file. You can add the compile point definitions
to an existing top-level constraint file or create a new file.

1. From the Current Design field, select the module for which you want to
create the compile point.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 391
Chapter 11: Working with Compile Points Synthesizing Compile Points

2. Click the Compile Points tab in the top-level constraints file.

See Creating a Top-Level Constraints File for Compile Points, on


page 390 if you need information about creating this file.

3. Set the module you want as a compile point.

Do this by either selecting a module from the drop-down list in the View
column, or dragging the instance from the HDL Analyst RTL view to the
View column. The equivalent Tcl command is define_compile_point, as
shown in this example:

define_compile_point {v:work.m3} -type {soft}

You can get a list of all the modules from which you can select and
designate compile points with the Tcl find command, as shown here:

c_print [find -hier -view {*} -filter ((!@is_black_box) && (@is_verilog == 1 ||


@is_vhdl == 1))] -file view.txt

4. Set the Type to locked, locked,partition, hard, or soft, according to your design
goals. See Defining the Compile Point Type, on page 393 for details.

This tags the module as a compile point. The following figure shows the
prgm_cntr module set as a locked compile point:

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
392 December 2015
Synthesizing Compile Points Chapter 11: Working with Compile Points

5. Save the top-level constraint file.

You can now open the compile point constraint file and define constraints for
the compile point, as needed for manual compile points. See Setting
Constraints at the Compile Point Level, on page 394 for details.

Defining the Compile Point Type


The compile point type you select depends on your design goals. For descrip-
tions of the various compile point types, see Compile Point Types, on
page 373. This procedure shows you how to set the compile point type in the
top-level constraint file when you define the compile points:

1. When runtime is the main objective and QoR is not a primary concern,
set the compile point type as follows on the SCOPE Compile Points tab:

Situation Compile Point Type


RTL is almost ready locked

The following example shows the Tcl command and the equivalent
version in the in the SCOPE GUI:

define_compile_point {v:work.user_top} -type {locked}

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 393
Chapter 11: Working with Compile Points Synthesizing Compile Points

2. When runtime and QoR are both important, do the following to ensure
the best performance while still saving runtime:
– Register the I/O boundaries for the compile points.
– As far as possible, put the entire critical path into the same compile
point.
– Set each compile point type individually, using these compile point
types:

Situation Compile Point Type


Need boundary optimizations soft

Do not need boundary optimizations locked

3. If your goal is design preservation, set the compile point you want to
preserve to locked.

Setting Constraints at the Compile Point Level


You can specify constraints for each compile point in individual constraint
files. (See Compile Point Constraint Files, on page 378 for a description of the
files.) It is recommended that you specify constraints for each locked manual
compile point, but you do not need to set them for soft and hard compile
points.

When you specify compile point constraints, the tool synthesizes the compile
point using the compile point timing models instead of automatic interface
timing from the top level. This procedure explains how to create a (compile
point constraint file, and set constraints for the compile point:

1. In an open project, click the SCOPE icon ( ). Click on the FPGA


Constraints (SCOPE) button. The New Constraints File dialog box opens.

2. From the Current Design field, select the module for which you want to
create the compile point.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
394 December 2015
Synthesizing Compile Points Chapter 11: Working with Compile Points

3. Check that you are in the right file.

A default name for the compile point file appears in the banner of the
SCOPE window. Unlike the top-level constraint file, the Compile Point tab
in the SCOPE UI is greyed out when the constraint file is for a compile
point.

4. Set constraints for the compile point. In particular, do the following:


– Define clocks for the compile point.
– Specify I/O delay constraints for non-registered I/O paths that may
be critical or near critical.
– Set port constraints for the compile point that are needed for top-level
mapping.

The tool uses the compile point constraints you define to synthesize the
compile point. Compile point port constraints are not used at the parent
level, because compile point ports do not exist at that level.

You can specify SCOPE attributes for the compile point as usual. See
Using Attributes with Compile Points, on page 396 for some exceptions.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 395
Chapter 11: Working with Compile Points Synthesizing Compile Points

5. Save the file and add it to the project. When prompted, click Yes to add
the constraint file to the top-level design project.

Otherwise, use Save As to write a file such as, moduleName.fdc to the


current directory. The hierarchical paths for compile point modules in
the constraint file are specified at the compile point level; not the top-
level design.

Using Attributes with Compile Points


You can use attributes as usual when you set constraints for compile points.
The following sections describe some caveats and exceptions:
• syn_hier
When you use syn_hier on a compile point, the only valid value is flatten.
All other values of this attribute are ignored for compile points. The
syn_hier attribute behaves normally for all other module boundaries that
are not defined as compile points.
• syn_allowed_resources
Apply the syn_allowed_resources attribute globally or to a compile point to
specify its allowed resources. When a compile point is synthesized, the
resources of its siblings and parents cannot be taken into account
because it stands alone as an independent synthesis unit. This attribute
limits dedicated resources such as block RAMs or DSPs that the compile
point can use, so that there are adequate resources available during the
top-down flow.

Analyzing Compile Point Results


The software writes all timing and area results to a single log file in the imple-
mentation directory. You can check this file and the RTL and Technology
views to determine if your design has met the goals for area and performance.
You can also view and isolate the critical paths, search for and highlight
design objects and crossprobe between the schematics and source files.

1. Check that the design meets the target frequency for the design. Use the
Watch window or check the log file.
LO
2. Open the log file and check the following:

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
396 December 2015
Synthesizing Compile Points Chapter 11: Working with Compile Points

– Check top-level and compile point boundary timing. You can also
check this visually using the RTL and Technology view schematics. If
you find negative slack, check the critical path. If the critical path
crosses the compile point boundary, you might need to improve the
compile point constraints.
– If the design was resynthesized, check the Summary of Compile Points
section to see if compile points were preserved or remapped.

– Review all warnings and determine which should be addressed and


which can be ignored.
– Review the area report in the log file and determine if the cell usage is
acceptable for your design.
– Check all DRC information.
3. Check other files:
– Check the individual compile point module log files. The tool creates a
separate directory for each compile point module under the
implementation directory. Check the compile point log file in this
directory for synthesis information about the compile point synthesis
run.
– Check the compile point timing report. This report is located in the
compile point results directory of the implementation directory for
each compile point.

4. Check the RTL and Technology view schematics for a graphic view of the
design logic. Even though instantiations of compile points do not have
unique names in the output netlist, they have unique names in the
Technology view. This is to facilitate timing analysis and the viewing of
critical paths.

Note: Compile points of type {hard} and {locked, partition} are easily located
in the Technology view with the color green.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 397
Chapter 11: Working with Compile Points Synthesizing Compile Points

5. Fix any errors.

Remember that the mapper reports an error if synthesis at a parent level


requires that interface changes be made to a locked compile point. The
software does not change the compile point interface, even if changes
are required to fix DRC violations.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
398 December 2015
Using Compile Points with Other Features Chapter 11: Working with Compile Points

Using Compile Points with Other Features


You can effectively combine compile points with other synthesis features for
better runtime. The following sections describe how you can use compile
points with multiprocessing and Continue on Error. See Combining Compile
Points with Multiprocessing, on page 399 and Using Continue on Error for
Compile Point Synthesis, on page 207.

Combining Compile Points with Multiprocessing


To use compile points with multiprocessing, specify the number of parallel
jobs to run with the Options->Configure Compile Point Process command. For a
step-by-step procedure, see Multiprocessing With Compile Points, on
page 486.

To use compile points with multiprocessing, do the following.

1. Set up the project with compile points.

2. Specify the number of parallel jobs to run with the Options->Configure


Compile Point Process command.

Alternatively, you can set this with the set_option -max_parallel_jobs


Tcl command, or in the ini file.

3. Run synthesis.

The software synthesizes the compile points as separate processor jobs.


Parallel processing reduces runtime.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 399
Chapter 11: Working with Compile Points Resynthesizing Incrementally

Resynthesizing Incrementally
Incremental synthesis can significantly reduce runtime on subsequent runs.
It can also help with design stabilization and preservation. The following
describe the incremental synthesis process, and how compile points are used
in incremental synthesis within the tool and with other tools:
• Incremental Compile Point Synthesis, on page 385
• Resynthesizing Compile Points Incrementally, on page 400

Resynthesizing Compile Points Incrementally


The following figure illustrates how compile points (CP) are used in incre-
mental synthesis.

LO

1. To synthesize a design incrementally, make the changes you need to fix


errors or improve your design.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
400 December 2015
Resynthesizing Incrementally Chapter 11: Working with Compile Points

– Define new compile point constraints or modify existing constraints


in the existing constraint file or in a new constraint file for the
compile point. Save the file.
– If necessary, reset implementation options. Click Implementation Options
and modify the settings (operating conditions, optimization switches,
and global frequency).

To obtain the best results, define any required constraints and set the
proper implementation options for the compile point before resynthe-
sizing.

2. Click Run to resynthesize the design.

When a design is resynthesized, compile points are not resynthesized


unless source code logic, implementation options, or constraints have
been modified. If there are no compile point interface changes, the
software synthesizes the immediate parent using the previously gener-
ated model file for the compile point. See Incremental Compile Point
Synthesis, on page 385 for details.

3. Check the log file for changes.

The following figure illustrates incremental synthesis by comparing


compile point summaries. After the first run, a syntax change was made
in the mult module, and a logic change in the comb_logic module. The
figure shows that incremental synthesis resynthesizes comb_logic (logic
change), but does not resynthesize mult because the logic did not change
even though there was a syntax change. Incremental synthesis re-uses
the mapped file generated from the previous run to incrementally
synthesize the top level.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 401
Chapter 11: Working with Compile Points Resynthesizing Incrementally

First Run Log Summary

Incremental Run Log Summary

Syntax changes only; not resynthesized

Logic changes; compile


point resynthesized

4. To force the software to generate a new model file for the compile point,
click Implementation Options on the Device tab and enable Update Compile
Point Timing Data. Click Run.

The software regenerates the model file for each compile point when it
synthesizes the compile points. The new model file is used to synthesize
the parent. The option remains in effect until you disable it.

5. To override incremental synthesis and force the software to resynthesize


all compile points whether or not there have been changes made, use
the Run->Resynthesize All command.

You might want to force resynthesis to propagate changes from a locked


compile point to its environment, or resynthesize compile points one last
time before tape out. When you use this option, incremental synthesis is
disabled for the current run only. The Resynthesize All command does not
regenerate model files for the compile points unless there are interface
changes. If you enable Update Compile Point Timing Data and select Resynthe-
size All, you can resynthesize the entire design and regenerate the
compile point model files, but synthesis will take longer than an incre-
mental synthesis run.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
402 December 2015
CHAPTER 12

Working with IP Input

This chapter describes how to work with IP from different sources. It


describes the following:
• Generating IP with SYNCore, on page 404
• The Synopsys FPGA IP Encryption Flow, on page 440
• Working with Encrypted IP, on page 445
• Working with Synenc-encrypted IP, on page 460
• Using Hyper Source, on page 462

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 403
Chapter 12: Working with IP Input Generating IP with SYNCore

Generating IP with SYNCore


You can use the SYNCore IP wizard to generate FIFO, RAM, ROM,
adder/subtractor, and counter implementations. See the following for more
information.
• Specifying FIFOs with SYNCore, on page 404
• Specifying RAMs with SYNCore, on page 409
• Specifying Byte-Enable RAMs with SYNCore, on page 416
• Specifying ROMs with SYNCore, on page 422
• Specifying Adder/Subtractors with SYNCore, on page 427
• Specifying Counters with SYNCore, on page 434

Specifying FIFOs with SYNCore


The SYNCore IP Wizard helps you generate Verilog code for your FIFO imple-
mentations. The following procedure shows you how to generate Verilog code
for a FIFO using the SYNCore IP wizard.

Note: The SYNCore FIFO model uses Verilog 2001. When adding a FIFO
model to a Verilog-95 design, be sure to enable the Verilog 2001 check
box on the Verilog tab of the Implementation Options dialog box or include
a set_option -vlog_std v2001 statement in your project file to prevent a
syntax error.

1. Start the wizard.


– From the synthesis tool GUI, select Run->Launch SYNCore or click the
Launch SYNCore icon to start the SYNCore IP wizard.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
404 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

– In the window that opens, select sfifo_model and click Ok. This opens
the first screen of the wizard.

2. Specify the parameters you need in the five pages of the wizard. For
details, refer to Specifying SYNCore FIFO Parameters, on page 407.

The FIFO symbol on the left reflects the parameters you set.

3. After you have specified all the parameters you need, click the Generate
button (lower left).

The tool displays a confirmation message (TCL execution successful!) and


writes the required files to the directory you specified in the parameters.
The HDL code is in Verilog.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 405
Chapter 12: Working with IP Input Generating IP with SYNCore

The FIFO generated is a synchronous FIFO with symmetric ports and


with the same clock controlling both the read and write operations. Data
is written or read on the rising edge of the clock. All resets are synchro-
nous with the clock. All edges (clock, enable, and reset) are considered
positive.

SYNCore also generates a testbench for the FIFO that you can use for
simulation. The testbench covers a limited set of vectors for testing.

You can now close the SYNCore wizard.

4. Add the FIFO you generated to your design.


– Use the Add File command to add the Verilog design file that was
generated and the syncore_sfifo.v file to your project. These files are in
the directory for output files that you specified on page 1 of the
wizard.
– Use a text editor to open the instantiation_file.vin template file, which is
located in the same directory. Copy the lines that define the memory,
and paste them into your top-level module. The following shows a
template file (in red text) inserted into a top-level module.

module top (
input Clk,
input [15:0] DataIn,
input WrEn,
input RdEn,
output Full,
output Empty,
output [15:0] DataOut
);

fifo_a32 <instanceName>(
.Clock(Clock)
,.Din(Din)
,.Write_enable(Write_enable)
,.Read_enable(Read_enable) template
,.Dout(Dout)
,.Full(Full)
,.Empty(Empty)
) LO

endmodule

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
406 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

– Edit the template port connections so that they agree with the port
definitions in the top-level module as shown in the example below.
You can also assign a unique name to each instantiation.

module top (
input Clk,
input [15:0] DataIn,
input WrEn,
input RdEn,
output Full,
output Empty,
output [15:0] DataOut
);

fifo_a32 busfifo(
.Clock(Clk)
,.Din(DataIn)
,.Write_enable(WrEn)
,.Read_enable(RdEn)
,.Dout(DataOut)
,.Full(Full)
,.Empty(Empty)
)
endmodule

Note that currently the FIFO models will not be implemented with the
dedicated FIFO blocks available in certain technologies.

Specifying SYNCore FIFO Parameters


The following elaborates on the parameter settings for SYNCore FIFOs. The
status, handshaking, and programmable flags are optional. For descriptions
of the parameters, see SYNCore FIFO Wizard, on page 230 in the Reference
Manual. For timing diagrams, see SYNCore FIFO Compiler, on page 628in the
Reference Manual.

1. Start the SYNCore wizard, as described in Specifying FIFOs with


SYNCore, on page 404.

2. Do the following on page 1 of the FIFO wizard:


– In Component Name, specify a name for the FIFO. Do not use spaces.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 407
Chapter 12: Working with IP Input Generating IP with SYNCore

– In Directory, specify a directory where you want the output files to be


written. Do not use spaces.
– In Filename, specify a name for the Verilog output file with the FIFO
specifications. Do not use spaces.
– Click Next. The wizard opens another page where you can set
parameters.

3. For a FIFO with no status, handshaking, or programmable flags, use the


default settings. You can generate the FIFO, as described in Specifying
FIFOs with SYNCore, on page 404.

4. To set an almost full status flag, do the following on page 2 of the FIFO
wizard:
– Enable Almost Full.
– Set associated handshaking flags for the signal as desired, with the
Overflow Flag and Write Acknowledge options.
– Click Next when you are done.
5. To set an almost empty status flag, do the following on page 3:
– Enable Almost Empty.
– Set associated handshaking flags for the signal as desired, with the
Underflow Flag and Read Acknowledge options.
– Click Next when you are done.
6. To set a programmable full flag, do the following:
– Make sure you have enabled Full on page 2 of the wizard and set any
handshaking flags you require.
– Go to page 4 and enable Programmable Full.
– Select one of the four mutually exclusive configurations for
Programmable Full on page 4. See Programmable Full, on page 639
in the Reference Manual for details.
– Click Next when you are done.
7. To set a programmable empty flag, do the following:
– Make sure you have enabled Empty on page 3 of the wizard and set
LO
any handshaking flags you require.
– Go to page 5 and enable Programmable Empty.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
408 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

– Select one of the four mutually exclusive configurations for


Programmable Empty on page 5. See Programmable Empty, on
page 641 in the Reference Manual for details.

You can now generate the FIFO and add it to the design, as described in
Specifying FIFOs with SYNCore, on page 404.

Specifying RAMs with SYNCore


The SYNCore IP wizard helps you generate Verilog code for your RAM imple-
mentation requirements. The following procedure shows you how to generate
Verilog code for a RAM using the SYNCore IP wizard.

Note: The SYNCore RAM model uses Verilog 2001. When adding a RAM
model to a Verilog-95 design, be sure to enable the Verilog 2001 check
box on the Verilog tab of the Implementation Options dialog box or include
a set_option -vlog_std v2001 statement in your project file to prevent a
syntax error.

1. Start the wizard.


– From the synthesis tool GUI, select Run->Launch SYNCore or click the
Launch SYNCore icon to start the SYNCore IP wizard.

– In the window that opens, select ram_model and click Ok. This opens
the first screen of the wizard.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 409
Chapter 12: Working with IP Input Generating IP with SYNCore

2. Specify the parameters you need in the wizard.


– For details about the parameters for a single-port RAM, see
Specifying Parameters for Single-Port RAM, on page 412.
– For details about the parameters for a dual-port RAM, see Specifying
Parameters for Dual-Port RAM, on page 413. Note that dual-port
implementations are only supported for some technologies.

The RAM symbol on the left reflects the parameters you set.

The default settings for the tool implement a block RAM with synchro-
nous resets, and where all edges (clock, enable, and reset) are considered
positive.

3. After you have specified all the parameters you need, click the Generate
button in the lower left corner.

The tool displays a confirmation message is displayed (TCL execution


successful!) and writes the required files to the directory you specified in
the parameters. The HDL LO code is in Verilog.
SYNCore also generates a testbench for the RAM. The testbench covers a
limited set of vectors.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
410 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

You can now close the SYNCore Memory Compiler.

4. Edit the RAM files if necessary.


– The default RAM has a no_rw_check attribute enabled. If you do not
want this, edit syncore_ram.v and comment out the `define
SYN_MULTI_PORT_RAM statement, or use `undef
SYN_MULTI_PORT_RAM.
– If you want to use the synchronous RAMs available in the target
technology, make sure to register either the read address or the
outputs.

5. Add the RAM you generated to your design.


– Use the Add File command to add the Verilog design file that was
generated and the syncore_ram.v file to your project. These files are in
the directory for output files that you specified on page 1 of the
wizard.
– Use a text editor to open the instantiation_file.vin template file, which is
located in the same directory. Copy the lines that define the memory,
and paste them into your top-level module. The following figure
shows a template file (in red text) inserted into a top-level module.

module top (

input ClkA,
input [7:0] AddrA,
input [15:0] DataInA,
input WrEnA,

output [15:0] DataOutA

);

myram2 <InstanceName> (
.PortAClk(PortAClk)
, .PortAAddr(PortAAddr)
, .PortADataIn(PortADataIn) template
, .PortAWriteEnable(PortAWriteEnable)
, .PortADataOut(PortADataOut)
);

endmodule

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 411
Chapter 12: Working with IP Input Generating IP with SYNCore

– Edit the template port connections so that they agree with the port
definitions in the top-level module as shown in the example below.
You can also assign a unique name to each instantiation.

module top (

input ClkA,
input [7:0] AddrA,
input [15:0] DataInA,
input WrEnA,

output [15:0] DataOutA

);

myram2 decoderram(
.PortAClk(ClkA)
, .PortAAddr(AddrA)
, .PortADataIn(DataInA)
, .PortAWriteEnable(WrEnA)
, .PortADataOut(DataOutA)
);

endmodule

Specifying Parameters for Single-Port RAM


To create a single-port RAM with the SYNCore Memory Compiler, you need to
specify a single read/write address (single port) and a single clock. You only
need to configure Port A. The following procedure lists what you need to
specify. For descriptions of each parameter, refer to SYNCore RAM Wizard, on
page 240 in the Reference Manual.

1. Start the SYNCore RAM wizard, as described in Specifying RAMs with


SYNCore, on page 409.

2. Do the following on page 1 of the RAM wizard:


– In Component Name, specify a name for the memory. Do not use
LO
spaces.
– In Directory, specify a directory where you want the output files to be
written. Do not use spaces.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
412 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

– In Filename, specify a name for the Verilog file that will be generated
with the RAM specifications. Do not use spaces.
– Enter data and address widths.
– Enable Single Port, to specify that you want to generate a single-port
RAM. This automatically enables Single Clock.
– Click Next. The wizard opens another page where you can set
parameters for Port A.

The RAM symbol dynamically updates to reflect the parameters you set.

3. Do the following on page 2 of the RAM wizard:


– Set Use Write Enable to the setting you want.
– Set Register Read Address to the setting you want.
– Set Synchronous Reset to the setting you want. Register Outputs is
always enabled
– Specify the read access you require for the RAM.
You can now generate the RAM by clicking Generate, as described in
Specifying RAMs with SYNCore, on page 409. You do not need to specify
any parameters on page 3, as this is a single-port RAM and you do not
need to specify Port B. All output files are in the directory you specified
on the first page of the wizard.

For details about setting dual-port RAM parameters, see Specifying


Parameters for Dual-Port RAM, on page 413. For read/write timing
diagrams, see Read/Write Timing Sequences, on page 652 of the Refer-
ence Manual.

Specifying Parameters for Dual-Port RAM


The following procedure shows you how to set parameters for dual-port
memory in the SYNCore wizard. Dual-port RAMs are only supported for some
technologies. For information about generating single-port RAMs, see Speci-
fying Parameters for Single-Port RAM, on page 412. It shows you how to
generate these common RAM configurations:
• One read access and one write access
• Two read accesses and one write access
• Two read accesses and two write accesses

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 413
Chapter 12: Working with IP Input Generating IP with SYNCore

For the corresponding read/write timing diagrams, see Read/Write Timing


Sequences, on page 652 of the Reference Manual.

1. Start the SYNCore RAM wizard, as described in Generating IP with


SYNCore, on page 404.

2. Do the following on page 1 of the RAM wizard:


– In Component Name, specify a name for the memory. Do not use
spaces.
– In Directory, specify a directory where you want the output files to be
written. Do not use spaces.
– In Filename, specify a name for the Verilog file that will be generated
with the RAM specifications. Do not use spaces.
– Enter data and address widths.
– Enable Dual Port, to specify that you want to generate a dual-port
RAM.
– Specify the clocks.
For a single clock ... Enable Single Clock.
For separate clocks for Enable Separate Clocks For Each Port.
each of the ports ...

– Click Next. The wizard opens another page where you can set
parameters for Port A.

3. Do the following on page 2 of the RAM wizard to specify settings for Port
A:
– Set parameters according to the kind of memory you want to
generate:

One read & one write Enable Read Only Access.


Two reads & one write Enable Read and Write Access.
Specify a setting for Use Write Enable.
Two reads & two writes Enable Read and Write Access.
Specify a setting for Use Write Enable.
LO Specify a read access option for Port A.

– Specify a setting for Register Read Address.


© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
414 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

– Set Synchronous Reset to the setting you want. Register Outputs is


always enabled.
– Click Next. The wizard opens another page where you can set
parameters for Port B. The page and the parameters are identical to
the previous page, except that the settings are for Port B instead of
Port A.

4. Specify the settings for Port B on page 3 of the wizard according to the
kind of memory you want to generate:

One read & one write Enable Write Only Access.


Set Use Write Enable to the setting you want.

Two reads & one write Enable Read Only Access.


Specify a setting for Register Read Address.
Two reads & two writes Enable Read and Write Access.
Specify a setting for Use Write Enable.
Specify a setting for Register Read Address.
Set Synchronous Reset to the setting you want.
Note that Register Outputs is always enabled.
Select a read access option for Port B.

The RAM symbol on the left reflects the parameters you set. All output
files are written to the directory you specified on the first page of the
wizard.

You can now generate the RAM by clicking Generate, as described in


Generating IP with SYNCore, on page 404, and add it to your design.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 415
Chapter 12: Working with IP Input Generating IP with SYNCore

Specifying Byte-Enable RAMs with SYNCore


The SYNCore IP wizard helps you generate SystemVerilog code for your byte-
enable RAM implementation requirements. The following procedure shows
you how to generate SystemVerilog code for a byte-enable RAM using the
SYNCore IP wizard.

Note: The SYNCore byte-enable RAM model uses SystemVerilog. When


adding a byte-enable RAM to your design, be sure to enable the
System Verilog check box on the Verilog tab of the Implementation Options
dialog box or include a set_option -vlog_std sysv statement in your
project file to prevent a syntax error.

1. Start the wizard.


– From the FPGA synthesis tool GUI, select Run->Launch SYNCore or
click the Launch SYNCore icon to start the SYNCore IP wizard.

– In the window that opens, select byte_en_ram_model and click Ok to


open the first page (page1) of the wizard.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
416 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

2. Specify the parameters you need in the wizard. For details about the
parameters, see Specifying Byte-Enable RAM Parameters, on page 420.
The BYTE ENABLE RAM symbol on the left reflects any parameters you
set.

3. After you have specified all the parameters you need, click the Generate
button in the lower left corner. The tool displays a confirmation message
(TCL execution successful!) and writes the required files to the directory you
specified on page 1 of the wizard. The HDL code is in SystemVerilog.

SYNCore also generates a test bench for the byte-enable RAM compo-
nent. The test bench covers a limited set of vectors. You can now close
the SYNCore byte-enable RAM compiler.

4. Edit the generated files for the byte-enable RAM component if necessary.

5. Add the byte-enable RAM that you generated to your design.


– On the Verilog tab of the Implementation Options dialog box, make
sure that SystemVerilog is enabled.
– Use the Add File command to add the Verilog design file that was
generated (the filename entered on page 1 of the wizard) and the

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 417
Chapter 12: Working with IP Input Generating IP with SYNCore

syncore_*.v file to your project. These files are in the directory for
output files that you specified on page 1 of the wizard.
– Use a text editor to open the instantiation_file.vin template file. This file is
located in the same output files directory. Copy the lines that define
the byte-enable RAM and paste them into your top-level module.
– Edit the template port connections so that they agree with the port
definitions in the top-level module; also change the instantiation
name to agree with the component name entered on page 1. The
following figure shows a template file inserted into a top-level module
with the updated component name and port connections in red.

module top
(input ClockA,
input [3:0] AddA
input [31:0] DataIn
input WrEnA,
input Reset
output [31:0] DataOut
)
INST_TAG
SP_RAM #
(.ADD_WIDTH(4),
.WE_WIDTH(2),
.RADDR_LTNCY_A(1), // 0 - No Latency, 1 - 1 Cycle Latency
.RDATA_LTNCY_A(1), // 0 - No Latency, 1 - 1 Cycle Latency
.RST_TYPE_A(1), // 0 - No Reset, 1 synchronous
.RST_RDATA_A({32{1’b1}}),
.DATA_WIDTH(32)
)
4x32spram
(// Output Ports
.RdDataA(DataIn),
// Input Ports
.WrDataA(DataOut),
.WenA(WeEnA),
.AddrA(AddA),
.ResetA(Reset),
.ClkA(ClockA)
);
LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
418 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

Port List
Port A interface signals are applicable for both single-port and dual-port
configurations; Port B signals are applicable for dual-port configuration only.

Name Type Description


ClkA Input Clock input for Port A

WenA Input Write enable for Port A; present when Port


A is in write mode
AddrA Input Memory access address for Port A

ResetA Input Reset for memory and all registers in core;


present with registered read data when
Reset is enabled; active low (cannot be
changed)
WrDataA Input Write data to memory for Port A; present
when Port A is in write mode
RdDataA Output Read data output for Port A; present when
Port A is in read or read/write mode
ClkB Input Clock input for Port B; present in dual-
port mode
WenB Input Write enable for Port B; present in dual-
port mode when Port B is in write mode
AddrB Input Memory access address for Port B; present
in dual-port mode
ResetB Input Reset for memory and all registers in core;
present in dual-port mode when read data
is registered and Reset is enabled; active
low (cannot be changed)
WrDataB Input Write data to memory for Port B; present
in dual-port mode when Port B is in write
mode
RdDataB Output Read data output for Port B; present in
dual-port mode when Port B is in read or
read/write mode

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 419
Chapter 12: Working with IP Input Generating IP with SYNCore

Specifying Byte-Enable RAM Parameters


When creating a single-port, byte-enable RAM with the SYNCore IP wizard,
you must specify a single read address and a single clock; you only need to
configure the Port A parameters on page 2 of the wizard.

When creating a dual-port, byte-enable RAM, you must additionally configure


the Port B parameters on page 3 of the wizard.

The following procedure lists the parameters you need to specify. For descrip-
tions of each parameter, refer to Parameter List, on page 659 in the Reference
Manual.

1. Start the SYNCore byte-enable RAM wizard as described in Specifying


Byte-Enable RAMs with SYNCore, on page 416.

2. Do the following on page 1 of the byte-enable RAM wizard:


– Specify a name for the memory in the Component Name field; do not
use spaces.
– Specify a directory name in the Directory field where you want the
output files to be written; do not use spaces.
– Specify a name in the File Name field for the SystemVerilog file to be
generated with the byte-enable RAM specifications; do not use
spaces.
– Enter a value for the address width of the byte-enable RAM; the
maximum depth of memory is limited to 2^256.
– Enter a value for the data width for the byte-enable RAM; data width
values range from 2 to 256.
– Enter a value for the write enable width; write-enable width values
range from 1 to 4.
– Select Single Port to generate a single-port, byte-enable RAM or select
Dual Port to generate a dual-port, byte-enable RAM.
– Click Next to open page 2 of the wizard.
The Byte Enable RAM symbol dynamically updates to reflect the param-
eters that you set.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
420 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

3. Do the following on page 2 (configuring Port A) of the wizard:


– Select the Port A configuration. Only Read and Write Access mode is
valid for single-port configurations; this mode is selected by default.
– Set Pipelining Address Bus and Output Data according to your
application. By default, read data is registered; you can register both
the address and data registers.
– Set the Configure Reset Options. Enabling the checkbox enables the
synchronous reset for read data. This option is enabled only when the
read data is registered. Reset is active low and cannot be changed.
– Configure output reset data value options under Specify output data
on reset; reset data can be set to default value of all '1' s or to a user-
defined decimal value. Reset data value options are disabled when
the reset is not enabled for Port A.
– Set Write Enable for Port A value; default for the write-enable level is
active high.

4. If you are generating a dual-port, byte-enable RAM, set the Port B


parameters on page 3 (note that the Port B parameters are only enabled
when Dual Port is selected on page 1).

The Port B parameters are identical to the Port A parameters on page 2.


When using the dual-port configuration, when one port is configured for
read access, the other port can only be configured for read/write access
or write access.

5. Generate the byte-enable RAM by clicking Generate. Add the file to your
project and edit the template file as described in Specifying Byte-Enable
RAMs with SYNCore, on page 416. For read/write timing diagrams, see
Read/Write Timing Sequences, on page 656 of the Reference Manual.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 421
Chapter 12: Working with IP Input Generating IP with SYNCore

Specifying ROMs with SYNCore


The SYNCore IP wizard helps you generate Verilog code for your ROM imple-
mentation requirements. The following procedure shows you how to generate
Verilog code for a ROM using the SYNCore IP wizard.

Note: The SYNCore ROM model uses Verilog 2001. When adding a ROM
model to a Verilog-95 design, be sure to enable the Verilog 2001 check
box on the Verilog tab of the Implementation Options dialog box or include
a set_option -vlog_std v2001 statement in your project file to prevent a
syntax error.

1. Start the wizard.


– From the FPGA synthesis tool GUI, select Run->Launch SYNCore or
click the Launch SYNCore icon to start the SYNCore IP wizard.

– In the window that opens, select rom_model and click Ok to open page
1 of the wizard.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
422 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

2. Specify the parameters you need in the wizard. For details about the
parameters, see Specifying ROM Parameters, on page 426. The ROM
symbol on the left reflects any parameters you set.

3. After you have specified all the parameters you need, click the Generate
button in the lower left corner. The tool displays a confirmation message
(TCL execution successful!) and writes the required files to the directory you
specified on page 1 of the wizard. The HDL code is in Verilog.

SYNCore also generates a testbench for the ROM. The testbench covers
a limited set of vectors.

You can now close the SYNCore ROM Compiler.

4. Edit the ROM files if necessary. If you want to use the synchronous
ROMs available in the target technology, make sure to register either the
read address or the outputs.

5. Add the ROM you generated to your design.


– Use the Add File command to add the Verilog design file that was
generated and the syncore_rom.v file to your project. These files are in

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 423
Chapter 12: Working with IP Input Generating IP with SYNCore

the directory for output files that you specified on page 1 of the
wizard.
– Use a text editor to open the instantiation_file.vin template file. This file
is located in the same output files directory. Copy the lines that
define the ROM, and paste them into your top-level module. The
following figure shows a template file (in red text) inserted into a top-
level module.

module test_rom_style(z,a,clk,en,rst);
input clk,en,rst;
output reg [3:0] z;
input [6:0] a;

my1stROM <InstanceName> (
// Output Ports
.DataA(DataA),

// Input Ports template


.ClkA(ClkA),
.EnA(EnA),
.ResetA(ResetA),
.AddrA(AddrA)
);

– Edit the template port connections so that they agree with the port
definitions in the top-level module as shown in the example below.
You can also assign a unique name to each instantiation.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
424 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

module test_rom_style(z,a,clk,en,rst);
input clk,en,rst;
output reg [3:0] z;
input [6:0] a;

my1stROM decode_rom(
// Output Ports
.DataA(z),

// Input Ports
.ClkA(clk),
.EnA(en),
.ResetA(rst),
.AddrA(a)
);

Port List
PortA interface signals are applicable for both single-port and dual-port
configurations; PortB signals are applicable for dual-port configuration only.

Name Type Description


ClkA Input Clock input for Port A

EnA Input Enable input for Port A

AddrA Input Read address for Port A

ResetA Input Reset or interface disable pin for Port A

DataA Output Read data output for Port A

ClkB Input Clock input for Port B

EnB Input Enable input for Port B

AddrB Input Read address for Port B

ResetB Input Reset or interface disable pin for Port B

DataB Output Read data output for Port B

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 425
Chapter 12: Working with IP Input Generating IP with SYNCore

Specifying ROM Parameters


If you are creating a single-port ROM with the SYNCore IP wizard, you need to
specify a single read address and a single clock, and you only need to
configure the Port A parameters on page 2. If you are creating a dual-port
ROM, you must additionally configure the Port B parameters on page 3. The
following procedure lists what you need to specify. For descriptions of each
parameter, refer to SYNCore RAM Wizard, on page 240 in the Reference
Manual.

1. Start the SYNCore ROM wizard, as described in Specifying ROMs with


SYNCore, on page 422.

2. Do the following on page 1 of the ROM wizard:


– In Component Name, specify a name for the memory. Do not use
spaces.
– In Directory, specify a directory where you want the output files to be
written. Do not use spaces.
– In Filename, specify a name for the Verilog file that will be generated
with the ROM specifications. Do not use spaces.
– Enter values for Read Data width and ROM address width (minimum depth
value is 2; maximum depth of the memory is limited to 2^256).
– Select Single Port Rom to indicate that you want to generate a single-
port ROM or select Dual Port Rom to generate a dual-port ROM.
– Click Next. The wizard opens page 2 where you set parameters for Port
A.

The ROM symbol dynamically updates to reflect any parameters you set.

3. Do the following on page 2 (Configuring Port A) of the RAM wizard:


– For synchronous ROMs, select Register address bus AddrA and/or
Register output data bus DataA to register the read address and/or the
outputs. Selecting either checkbox enables the Enable for Port A
checkbox which is used to select the Enable level.
– Set the Configure Reset Options. Enabling the checkbox enables the type
of reset (asynchronous or synchronous) and allows an output data
pattern (all 1’s or a specified pattern) to be defined on page 4.
LO
4. If you are generating a dual-port ROM, set the port B parameters on
page 3 (the page 3 parameters are only enabled when Dual Port Rom is
selected on page 1).

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
426 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

5. On page 4, specify the location of the ROM initialization file and the data
format (Hexadecimal or Binary). ROM initialization is supported using
memory-coefficient files. The data format is either binary or hexadecimal
with each data entry on a new line in the memory-coefficient file
(specified by parameter INIT_FILE). Supported file types are txt, mem, dat,
and init (recommended).

6. Generate the ROM by clicking Generate, as described in Specifying ROMs


with SYNCore, on page 422 and add it to your design. All output files are
in the directory you specified on page 1 of the wizard.

For read/write timing diagrams, see Read/Write Timing Sequences, on


page 652 of the Reference Manual.

Specifying Adder/Subtractors with SYNCore


The SYNCore IP wizard helps you generate Verilog code for your
adder/subtractor implementation requirements. The following procedure
shows you how to generate Verilog code for an adder/subtractor using the
SYNCore IP wizard.

Note: The SYNCore adder/subtractor models use Verilog 2001. When


adding an adder/subtractor model to a Verilog-95 design, be sure to
enable the Verilog 2001 check box on the Verilog tab of the Implementation
Options dialog box or include a set_option -vlog_std v2001 statement in
your project file to prevent a syntax error.

1. Start the wizard.


– From the FPGA synthesis tool GUI, select Run->Launch SYNCore or
click the Launch SYNCore icon to start the SYNCore IP wizard.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 427
Chapter 12: Working with IP Input Generating IP with SYNCore

– Ιn the window that opens, select addnsub_model and click Ok to open


page1 of the wizard.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
428 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

2. Specify the parameters you need in the wizard. For details about the
parameters, see Specifying Adder/Subtractor Parameters, on page 432.
The ADDnSUB symbol on the left reflects any parameters you set.

3. After you have specified all the parameters you need, click the Generate
button in the lower left corner.

The tool displays a confirmation message (TCL execution successful!)


and writes the required files to the directory you specified on page 1 of
the wizard. The HDL code is in Verilog.

The SYNCore wizard also generates a testbench for your


adder/subtractor. The testbench covers a limited set of vectors. You can
now close the wizard.

4. Add the adder/subtractor you generated to your design.


– Edit the adder/subtractor files if necessary.
– Use the Add File command to add the Verilog design file that was
generated and the syncore_addnsub.v file to your project. These files are
in the directory for output files that you specified on page 1 of the
wizard.
– Use a text editor to open the instantiation_file.v template file. This file is
located in the same output files directory. Copy the lines that define
the adder/subtractor and paste them into your top-level module. The
following figure shows a template file (in red text) inserted into a top-
level module.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 429
Chapter 12: Working with IP Input Generating IP with SYNCore

template

– Edit the template port connections so that they agree with the port
definitions in the top-level module as shown in the example below.
You can also assign a unique name to each instantiation.

module top (
output [15 : 0] Out,
input Clk,
input [15 : 0] A,
input CEA,
input RSTA, LO
input [15 : 0] B,
input CEB,

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
430 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

input RSTB,
input CEOut,
input RSTOut,
input ADDnSUB,
input CarryIn);
My_ADDnSUB ADDnSUB_inst(
// Output Ports
.PortOut(Out),
// Input Ports
.PortClk(Clk),
.PortA(A),
.PortCEA(CEA),
.PortRSTA(RSTA),
.PortB(B),
.PortCEB(CEB),
.PortRSTB(RSTB),
.PortCEOut(CEOut),
.PortRSTOut(RSTOut),
.PortADDnSUB(ADDnSUB),
.PortCarryIn(CarryIn));
endmodule

Port List
The following table lists the port assignments for all possible configurations;
the third column specifies the conditions under which the port is available.

Port Name Description Required/Optional


PortA Data input for Always present
adder/subtractor
Parameterized width and
pipeline stages
PortB Data input for Not present if
adder/subtractor adder/subtractor is
Parameterized width and configured as a constant
pipeline stages adder/subtractor

PortClk Primary clock input; clocks all Always present


registers in the unit
PortRstA Reset input for port A pipeline Not present if pipeline stage
registers (active high) for port A is 0

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 431
Chapter 12: Working with IP Input Generating IP with SYNCore

Port Name Description Required/Optional


PortRstB Reset input for port B pipeline Not present if pipeline stage
registers (active high) for port B is 0 or for constant
adder/subtractor
PortADDnSUB Selection port for dynamic Not present if
operation adder/subtractor configured
as standalone adder or
subtractor
PortRstOut Reset input for output register Not present if output pipeline
(active high) stage is 0
PortCEA Clock enable for port A Not present if pipeline stage
pipeline registers (active high) for port A is 0
PortCEB Clock enable for port B Not present if pipeline stage
pipeline registers (active high) for port B is 0 or for constant
adder/subtractor
PortCarryIn Carry input for Always present
adder/subtractor
PortCEOut Clock enable for output Not present if output pipeline
register (active high) stage is 0
PortOut Data output Always present

Specifying Adder/Subtractor Parameters


The SYNCore adder/subtractor can be configured as any of the following:
• Adder
• Subtractor
• Dynamic Adder/Subtractor
If you are creating a constant input adder, subtractor, or a dynamic
adder/subtractor with the SYNCore IP wizard, you must select Constant Value
Input and specify a value for port B in the Constant Value/Port B Width field on
page 2 of the parameters. The following procedure lists the parameters you
need to define when generating an adder/subtractor. For descriptions of each
parameter, see SYNCore Adder/Subtractor
LO Wizard, on page 251 in the Refer-
ence Manual.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
432 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

1. Start the SYNCore adder/subtractor wizard as described in Specifying


Adder/Subtractors with SYNCore, on page 427.

2. Enter the following on page 1 of the wizard:


– Ιn the Component Name field, specify a name for your
adder/subtractor. Do not use spaces.
– In the Directory field, specify a directory where you want the output
files to be written. Do not use spaces.
– Ιn the Filename field, specify a name for the Verilog file that will be
generated with the adder/subtractor definitions. Do not use spaces.
– Select the appropriate configuration in Configure the Mode of Operation.
3. Click Next. The wizard opens page 2 where you set parameters for port A
and port B.

4. Configure Port A and B.


– In the Configure Port A section, enter a value in the Port A Width field.
– If you are defining a synchronous adder/subtractor, check Register
Input A and then check Clock Enable for Register A and/or Reset for Register
A.
– To configure port B as a constant port, go to the Configure Port B
section and check Constant Value Input. Enter the constant value in the
Constant Value/Port B Width field.
– To configure port B as a dynamic port, go to the Configure Port B
section and check Enable Port B and enter the port width in the
Constant Value/Port B Width field.
– To define a synchronous adder/subtractor, check Register Input B and
then check Clock Enable for Register B and/or Reset for Register B.

5. In the Configure Output Port section:


– Enter a value in the Output port Width field.
– If you are registering the output port, check Register output Port.
– If you are defining a synchronous adder/subtractor check Clock Enable
for Register PortOut and/or Reset for Register PortOut.

6. In the Configure Reset type for all Reset Signal section, click Synchronous Reset
or Asynchronous Reset as appropriate.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 433
Chapter 12: Working with IP Input Generating IP with SYNCore

As you enter the page 2 parameters, the ADDnSUB symbol dynamically


updates to reflect the parameters you set.

7. Generate the adder/subtractor by clicking the Generate button as


described in Specifying Adder/Subtractors with SYNCore, on page 427
and add it to your design. All output files are in the directory you
specified on page 1 of the wizard.

Specifying Counters with SYNCore


The SYNCore IP wizard helps you generate Verilog code for your counter
implementation requirements. The following procedure shows you how to
generate Verilog code for a counter using the SYNCore IP wizard.

Note: The SYNCore counter model uses Verilog 2001. When adding a
counter model to a Verilog-95 design, be sure to enable the Verilog
2001 check box on the Verilog tab of the Implementation Options dialog box
or include a set_option -vlog_std v2001 statement in your project file to
prevent a syntax error.

1. Start the wizard.


– From the FPGA synthesis tool GUI, select Run->Launch SYNCore or
click the Launch SYNCore icon to start the SYNCore IP wizard.

LO
– Ιn the window that opens, select counter_model and click Ok to open
page1 of the wizard.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
434 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

2. Specify the parameters you need in the wizard. For details about the
parameters, see Specifying Counter Parameters, on page 438. The
COUNTER symbol on the left reflects any parameters you set.

3. After you have specified all the parameters you need, click the Generate
button in the lower left corner.

The tool displays a confirmation message (TCL execution successful!)


and writes the required files to the directory you specified on page 1 of
the wizard. The HDL code is in Verilog.

The SYNCore wizard also generates a testbench for your counter. The
testbench covers a limited set of vectors. You can now close the wizard.

4. Add the counter you generated to your design.


– Edit the counter files if necessary.
– Use the Add File command to add the Verilog design file that was
generated and the syncore_addnsub.v file to your project. These files are
in the directory for output files that you specified on page 1 of the
wizard.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 435
Chapter 12: Working with IP Input Generating IP with SYNCore

– Use a text editor to open the instantiation_file.v template file. This file is
located in the same output files directory. Copy the lines that define
the counter and paste them into your top-level module. The following
figure shows a template file (in red text) inserted into a top-level
module.

template

Edit the template port connections so that they agree with the port
definitions in the top-level module as shown in the example below.
LO
You can also assign a unique name to each instantiation.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
436 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

module counter #(
parameter COUNT_WIDTH = 5,
parameter STEP = 2,
parameter RESET_TYPE = 0,
parameter LOAD = 2,
parameter MODE = "Dynamic")
(
// Output Ports
output wire [WIDTH-1:0] Count,
// Input Ports
input wire Clock,
input wire Reset,
input wire Up_Down,
input wire Load,
input wire [WIDTH-1:0] LoadValue,
input wire Enable);
SynCoreCounter #(
.COUNT_WIDTH(COUNT_WIDTH),
.STEP(STEP),
.RESET_TYPE(RESET_TYPE),
.LOAD(LOAD),
.MODE(MODE))
SynCoreCounter_ins1 (
.PortCount(PortCount),
.PortClk(Clock),
.PortRST(Reset),
.PortUp_nDown(Up_Down),
.PortLoad(Load),
.PortLoadValue(LoadValue),
.PortCE(Enable));
endmodule

Port List
The following table lists the port assignments for all possible configurations;
the third column specifies the conditions under which the port is available.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 437
Chapter 12: Working with IP Input Generating IP with SYNCore

Port Name Description Required/Optional


PortCE Count Enable input pin with Always present
size one (active high)
PortClk Primary clock input Always present

PortLoad Load Enable input which Not present for parameter


loads the counter (active high). LOAD=0

PortLoadValue Load value primary input Not present for parameter


(active high) LOAD=0 and LOAD=1

PortRST Reset input which resets the Always present


counter (active high)
PortUp_nDown Primary input which Present only for
determines the counter mode. MODE=”Dynamic”
0 = Up counter
1 = Down counter
PortCount Counter primary output Always present

Specifying Counter Parameters


The SYNCore counter can be configured for any of the following functions:
• Up Counter
• Down Counter
• Dynamic Up/Down Counter
The counter core can have a constant or variable input load or no load value.
If you are creating a constant-load counter, you will need to select Enable Load
and Load Constant Value on page 2 of the wizard. If you are creating a variable-
load counter, you will need to select Enable Load and Use Variable Port Load on
page 2. The following procedure lists the parameters you need to define when
generating a counter. For descriptions of each parameter, see SYNCore
Counter Wizard, on page 255 of the Reference Manual.

1. Start the SYNCore counter


LO wizard, as described in Specifying Counters
with SYNCore, on page 434.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
438 December 2015
Generating IP with SYNCore Chapter 12: Working with IP Input

2. Enter the following on page 1 of the wizard:


– Ιn the Component Name field, specify a name for your counter. Do not
use spaces.
– In the Directory field, specify a directory where you want the output
files to be written. Do not use spaces.
– Ιn the Filename field, specify a name for the Verilog file that will be
generated with the counter definitions. Do not use spaces.
– Enter the width and depth of the counter in the Configure the Counter
Parameters section.
– Select the appropriate configuration in the Configure the Mode of Counter
section.

3. Click Next. The wizard opens page 2 where you set parameters for
PortLoad and PortLoadValue.
– Select Enable Load option and the required load option in Configure Load
Value section.
– Select the required reset type in the Configure Reset type section.
The COUNTER symbol dynamically updates to reflect the parameters you
set.

4. Generate the counter core by clicking Generate button. All output files
are written to the directory you specified on page1 of the wizard.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 439
Chapter 12: Working with IP Input The Synopsys FPGA IP Encryption Flow

The Synopsys FPGA IP Encryption Flow


The Synopsys FPGA IP encryption flow is a design flow that encourages
interoperability while protecting IP implementations using encryp-
tion/decryption technologies. This flow offers the following advantages:
interoperability, protection of IP, reuse of IP, and a standard flow for IP
encryption. Currently, Synopsys FPGA synthesis products support the
following encryption technologies:
• IEEE 1735-2014 with key-block (Version 1)
• OpenIP
• Synenc-encrypted IP
See the following encryption technologies:
• Encrypting IP with the encryptP1735.pl Script, on page 446
• Encrypting IP with the encryptIP Script, on page 452
• Working with Synenc-encrypted IP, on page 460

Overview of the Synopsys FPGA IP Flow


The complete flow for protecting IP requires a partnership between the IP
vendor, Synopsys, and the silicon vendor as illustrated in the following figure.
However, depending on the level of agreement between Synopsys and the
silicon vendor downstream, the re-encryption of IP following synthesis can
vary from the ideal flow shown in the figure.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
440 December 2015
The Synopsys FPGA IP Encryption Flow Chapter 12: Working with IP Input

For further details of the hand-offs between vendors and how encryption and
decryption are handled, see Encryption and Decryption, on page 441.

Encryption and Decryption


There are two major classes of encryption/decryption algorithms: symmetric,
and asymmetric (see Encryption and Decryption Methodologies, on page 683
in the Reference Manual for details). Each has its own advantages and disad-
vantages. The approach for the Synopsys FPGA IP flow is a hybrid scheme
that uses both asymmetric and symmetric encryption to leverage the
strengths of each scheme. The methodology described here can also be used
for other design hand-offs. For example, for a handoff from synthesis to
place-and-route, the synthesis tool would be in the upstream position
occupied by the IP vendor in this flow, and the FPGA vendor would be in the
downstream position occupied by the synthesis tool.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 441
Chapter 12: Working with IP Input The Synopsys FPGA IP Encryption Flow

The following figure illustrates the steps in this encryption/decryption


methodology, showing the handoff from an IP vendor to a Synopsys FPGA
synthesis tool.

Unencrypted IP VENDOR
source data
Synopsys FPGA
S
Bundled file
S with data block Private
Public and key block
1. Encrypt with IP vendor’s
symmetric data key
4. Decode data key with
Synopsys private key
2. Encrypt data key with
Synopsys public key
Symmetrically
encrypted
Symmetrically Asymmetrically data block
encrypted encrypted key
data block block
5. Decode data block with
decrypted data key

3. Bundle data block and


key block in one file

Unencrypted
source data

The following describes each of the phases shown in the figure. Note that
Synopsys provides the following scripts to simplify and automate the process
of encrypting data for the IP vendor.
• IEEE 1735-2014
• OpenIP

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
442 December 2015
The Synopsys FPGA IP Encryption Flow Chapter 12: Working with IP Input

Data Encryption - Step 1


The IP vendor encrypts the IP data using their own symmetric key. This key is
called the data key. The result of encoding is a data block. Using symmetric
encryption offers two advantages to the IP vendor: fast data encryption
because it is symmetric encryption, and freedom to use any symmetric
scheme they choose.

Symmetric Encryption/Decryption with One Key

Source data Encrypted data

Data Key Encryption - Step 2


Next, the IP vendor encrypts the data key used to encode the IP block, and
generates a key block. For this operation, the vendor uses RSA asymmetric
encryption and the public key provided by Synopsys.

Asymmetric Encryption/Decryption with Public and Private Keys

Public key

Source data Encrypted data

Private key

Asymmetric encryption offers the following advantages:


• Although asymmetric encryption is compute-intensive, the data key
itself is small, so this is not time-intensive.
• The IP vendor can use public keys from different vendors to encrypt the
same block for different EDA vendors. This capability ensures that IP
consistency is maintained, because there is no need for multiple copies.
• Only the public key from the downstream vendor needs to be passed to
the IP vendor.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 443
Chapter 12: Working with IP Input The Synopsys FPGA IP Encryption Flow

Bundling of Encrypted Data Block and Data Key - Step 3


The IP vendor bundles the encrypted data block with the key block into one
file for handoff to the EDA vendor. Note that this methodology allows the IP
vendor to create just one version of the IP which includes the key blocks for
all the downstream vendors it supports; for example, a synthesis tool and a
simulation tool. Also, this approach eliminates the need to securely transmit
the symmetric key, because this is included in the file. Security is maintained
because both the key and the data are encrypted.

In the figure, this is the point at which the IP vendor hands off the IP to the
synthesis tool.

Data Key Decryption - Step 4


Decryption is a two-stage process. The first step is to decrypt the symmetric
data key from the IP vendor, which was encrypted using the asymmetric
public key provided. To decode this key, use the private key counterpart to
the public key and extract the data key.

Data Decryption - Step 5


The second step is to use the extracted data key to access the IP data. As the
data key is the original symmetric key used to encode the IP, the process is
quick. The synthesis tools can now synthesize the unencrypted IP.

After synthesis, the IP can be re-encrypted if the vendor has adopted one of
the Synopsys methodologies. See Output Methods for encryptIP, on page 29
in the Reference Manual for a description of the choices available.

Re-Encryption in the Synopsys FPGA IP Flow


Re-encryption of the synthesized IP for FPGA vendors downstream requires
that the FPGA vendor supply Synopsys with a public key. When the input file
includes a downstream key block, the re-encrypted data is accessible to the
downstream tool. If such an agreement is not in place, the IP is treated as a
black box. Accordingly, you can have an IP flow that outputs black boxes in
the netlists, plaintext netlists, or encrypted netlists.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
444 December 2015
Working with Encrypted IP Chapter 12: Working with IP Input

Working with Encrypted IP


The Synopsys FPGA IP encryption schemes available include:
• IEEE 1735-2014
• OpenIP
With either of these approaches, the IP vendor can encrypt and control distri-
bution of the IP from their own website. The synthesis user will have access
from the synthesis tool to the IP that the vendor makes available for
download and evaluation within a synthesis design.

The following sections describe how to encrypt and package your IP for evalu-
ation if you are an IP vendor, and how to access and evaluate available IP, if
you are an end-user.
• Encrypting Your IP, on page 445
• Preparing the IP Package, on page 455

Encrypting Your IP
IP vendors can use either of the supported Synopsys FPGA IP schemes to
provide IP for synthesis users to evaluate and use. Both schemes uses a two-
stage encryption process:
• First, encrypt your IP files using a symmetric encryption algorithm and
your own session or data key to create an encrypted data block.
• Next, encrypt the session key for the encrypted data block using an
asymmetric algorithm and the Synopsys public key. All of the Synopsys
encryption methodologies support RSA encryption.

Synopsys provides scripts to simplify this process. See the following proce-
dures for details on script usage.

Preparing and Encrypting Your IP


To prepare and encrypt your IP, do the following:

1. Gather your RTL files.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 445
Chapter 12: Working with IP Input Working with Encrypted IP

You only encrypt the RTL. You can encrypt any number of Verilog and
VHDL (or mixed) RTL files to form your encrypted IP, and each file can
be encrypted in its entirety.

2. Determine your file setup for each IP.


– Create a single set of files for the IP (for use with all supported FPGAs)
if your IP has no vendor-specific or vendor-optimized content and if
the output method is supported by all intended consumers (blackbox
or plaintext).
– Create multiple versions of your protected IP if you have specific
FPGA vendors or specific FPGA vendor families, if you are using FPGA
device-family specific RTL like architecture-specific instantiations, or
if you optimized your RTL or constraints for use with a specific FPGA
vendor device family or FPGA vendor.
– Encrypt the files with the appropriate encryption script as described
in one of the following subsections:Encrypting IP with the
encryptP1735.pl Script, on page 446
– Encrypting IP with the encryptIP Script, on page 452.
3. Package your IP, as described in Preparing the IP Package, on page 455.

4. Verify that your IP works with the synthesis tools by going through the
procedure that the user would use.
– Start the synthesis tool and load the IP with the Import IP->Import IP
Package command. You can load your IP into an existing Synplify
project.
– For system-level IP, run it through the System Designer™ tool and
ensure bus-model compatibility between your IP and any other IP to
which it interfaces. See the System Designer documentation for
details on using this tool.
– Run synthesis.

Encrypting IP with the encryptP1735.pl Script


The encryptP1735.pl script supports the IEEE 1735-2014 standard with limited
interoperability. The encryptP1735.pl script accepts inputs from three sources:
command line arguments, the LORTL input file, and a file containing the public
keys. The RTL input file, depending on the use model, may contain encryp-
tion attributes.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
446 December 2015
Working with Encrypted IP Chapter 12: Working with IP Input

A keys.txt file, which contains the public key for consumption by Synopsys
FPGA tools, is included with the script. Add other public keys to this file
when the IP is to be consumed by additional EDA tools.

The following procedure shows you how to encrypt your data with the
encryptP1735.pl script. This script automates the two-stage encryption process
described in the Synopsys FPGA IP scheme (The Synopsys FPGA IP Encryp-
tion Flow, on page 440). The encryptP1735.pl script:
• First encrypts your IP files using a symmetric encryption algorithm and
your own session or data key to create an encrypted data block.
• Next encrypts the session key for the encrypted data block using an
asymmetric algorithm and the Synopsys public key.

The encryptP1735.pl script is located in the installDir/lib directory and requires


the installation of Perl on your machine. The following examples show typical
script applications. For more information on the script and the command line
arguments, see encryptP1735, on page 32 in the Command Reference
Manual. The encryptP1735 encryption script supports the following three use
models for encrypting RTL files:
• Full-File Use Model
• Partial File with All Pragmas Use Model
• Partial File with Minimal Pragmas Use Model

Full-File Use Model


With a full-file use model, the RTL contains no encryption-related pragmas,
and the entire RTL file is encrypted by encryptP1735.pl to create the decryption
envelope. This use model is intended to be used with complete RTL files that
do not require the addition of encryption attributes; the encryptP1735.pl
script automatically adds these attributes to create the decryption envelope.

To illustrate the full-file use model, consider a single, Verilog file (tb_encrypt.v)
to be encrypted without pragmas. This file contains a single module named
secret.

module secret (a, b, clk);


input a, clk;
output b;
reg b=0;

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 447
Chapter 12: Working with IP Input Working with Encrypted IP

always @(posedge clk) begin


b = a;
end
endmodule

With no encryption-related pragmas in the RTL file, a decryption envelope is


created with the command:

perl encryptP1735.pl -list mylist -log encryptP1735.log

In the above command, the list file (mylist) contains the single Verilog file tb_en-
crypt.v. The command uses the default keys.txt file from the directory installLoca-
tion/lib as the public keys file to create the decryption envelope file tb_en-
crypt.vp. The resulting messages are written in the encryptP1735.log file.

Partial File with All Pragmas Use Model


With the partial file with all pragmas use model, the RTL contains all of the
encryption-related pragmas which are used by the encryptP1735.pl script with
the default keys.txt file to create the decryption envelope.

When there are overlapping pragmas in the RTL and the keys.txt file, the RTL
pragma takes precedence over the corresponding pragma in the keys.txt file.
For example, if the data_method pragma contains des-cbc in the RTL and
aes128-cbc in the keys.txt file, the following pragma is copied to the decryption
envelope:

data_method="des-cbc"

Verilog Example
To illustrate the partial file with all pragmas use model, consider a single,
Verilog file (tb_encrypt.v) to be encrypted. This file contains a module named
secret and all the encryption-related pragmas with the exception of the
key_public_key in the RTL itself.
module secret (a, b, clk);
input a, clk;
output b;
`pragma protect version=1
`pragma protect encoding=(enctype="base64")
`pragma protect author="author-a", author_info="author-a-details"
`pragma protect encrypt_agent="encryptP1735.pl", encrypt_agent_info="Synplify encryption scripts"
`pragma protect key_keyowner="Synopsys",key_keyname="SYNP05_001", key_method="rsa", key_block
`pragma protect LO
data_keyowner="ip-vendor-a",data_keyname="fpga-ip", data_method="des-cbc"
`pragma protect begin
reg b=0;

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
448 December 2015
Working with Encrypted IP Chapter 12: Working with IP Input

always @(posedge clk) begin


b = a;
end
`pragma protect end
endmodule

With the encryption-related pragmas in the RTL file, a decryption envelope is


created with the command:

perl encryptP1735.pl -list mylist

In the above command, the list file (mylist) contains the single Verilog file tb_en-
crypt.v. The command uses the default keys.txt file from the directory installLoca-
tion/lib as the public keys file to create the decryption envelope file tb_en-
crypt.vp. Any messages from the run are not output to a log file.

VHDL Example
To encrypt a partial VHDL file with an all pragmas use model, consider the
single, VHDL file (tb_encrypt.vhd). The file contains a single entity/architecture
pair named secret with all the encryption-related pragmas with the exception
of the key_public_key in the RTL itself.

Note: VHDL formatted pragmas do not include a “pragma” string


preceding the keyword “protect.”

library IEEE;
use IEEE.std_logic_1164.all;
entity secret is
port (clk : in std_logic;
a : in std_logic;
b : out std_logic);
end entity;
architecture rtl of secret is
`protect version=1
`protect author="author-a", author_info="author-a-details"
`protect encrypt_agent="encryptP1735.pl", encrypt_agent_info="Synplify encryption scripts"
`protect encoding=(enctype="base64")
`protect key_keyowner="Synopsys", key_keyname="SYNP05_001", key_method="rsa", key_block
`protect data_keyowner="ip-vendor-a", data_keyname="fpga-ip", data_method="des-cbc"
`protect begin
signal b_reg: std_logic;
begin
process (clk) is
begin
if rising_edge(clk) then
b_reg <= a;
end if;
end process;
b <= b_reg;
`protect end

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 449
Chapter 12: Working with IP Input Working with Encrypted IP

end architecture;

With the encryption-related pragmas in the RTL file, a decryption envelope is


created with the command:

perl encryptP1735.pl -list mylist

In the above command, the list file (mylist) contains the single VHDL file tb_en-
crypt.vhd. The command uses the default keys.txt file from the directory installLo-
cation/lib as the public keys file to create the decryption envelope file tb_en-
crypt.vhdp. Any messages from the run are not output to a log file.

Partial File with Minimal Pragmas Use Model


With the partial file with minimal pragmas use model, the RTL contains only
the begin and end encryption-related pragmas to indicate the start and end
points of the encryption. This use model is helpful when automatic insertion
is used to reduce the amount of manually inserted pragmas. After defining
the start- and end-point pragmas, the encryptP1735.pl script, using the default
keys.txt file, creates the decryption envelope. To illustrate this use model,
consider a single, Verilog file (tb_encrypt.v) to be encrypted with only begin and
end pragmas. This file contains a single module named secret.

module secret (a, b, clk);


input a, clk;
output b;
`pragma protect begin
reg b=0;
always @(posedge clk) begin
b = a;
end
`pragma protect end
endmodule

With the start and end pragmas in the RTL file, a decryption envelope is
created with the command:

perl encryptP1735.pl -list mylist

In the above command, the list file (mylist) contains the single Verilog file tb_en-
crypt.v. The command uses the default keys.txt file from the directory installLoca-
tion/lib as the public keys fileLO
to create the decryption envelope file tb_en-
crypt.vp. The absence of a specified log file (-log option) results in no messages
being written to the log file.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
450 December 2015
Working with Encrypted IP Chapter 12: Working with IP Input

Encrypting Multiple RTL Files


The examples in the previous sections included a single Verilog or VHDL file.
Multiple files can be similarly encrypted by adding their file names to the
specified list file. Running the script produces encryption envelopes for each
listed file. To create a list file for multiple files, add the name of each file to be
encrypted on a separate line.

Public Keys Repository File


The encryptP1735.pl encryption script requires public keys from the file speci-
fied by the -public_keys (or -pk) option. This file includes public keys for each of
the tools that require a key block in the encrypted file.
// Use verilog pragma syntax in this file
`pragma protect version=1
`pragma protect author="default"
`pragma protect author_info="default"
`pragma protect key_keyowner="Synopsys", key_keyname="SYNP05_001", key_method="rsa"
`pragma protect key_public_key
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAybsQaMidiCHZyh14wbXn
UpP8lK+jJY5oLpGqDfSW5PMXBVp0WFd1d32onXEpRkwxEJLlK4RgS43d0FG2ZQ1l
irdimRKNnUtPxsrJzbMr74MQkwmG/X7SEe/lEqwK9Uk77cMEncLycI5yX4f/K9Q9
WS5nLD+Nh6BL7kwR0vSevfePC1fkOa1uC7b7Mwb1mcqCLBBRP9/eF0wUIoxVRzjA
+pJvORwhYtZEhnwvTblBJsnyneT1LfDi/D5WZoikTP/0KBiP87QHMSuVBydMA7J7
g6sxKB92hx2Dpv1ojds1Y5ywjxFxOAA93nFjmLsJq3i/P0lv5TmtnCYX3Wkryw4B
eQIDAQAB
// Add additional public keys below this line
// Add additional public keys above this line
`pragma protect data_keyowner="default-ip-vendor"
`pragma protect data_keyname="default-ip-key"
`pragma protect data_method="aes128-cbc"
// End of file

For the partial file with all pragmas use model, the following pragma attribute
values must match the corresponding values in the key-block section of the
encryption envelope:
`pragma protect key_keyowner="Synopsys", key_keyname="SYNP05_001", key_method="rsa"

Note: This encryptP1735.pl script is compatible only with versions


I-2013.09 and later of the Synopsys FPGA synthesis tool.

For information on the pragmas supported by the encryptP1735.pl script, see


Pragmas Used in the encryptIP Script, on page 690 of the Reference Manual.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 451
Chapter 12: Working with IP Input Working with Encrypted IP

Encrypting IP with the encryptIP Script


The following procedure shows you how to encrypt your data with the
encryptIP (OpenIP) script. The encryptIP script automates the two-stage encryp-
tion process proposed in the Synopsys FPGA IP scheme (The Synopsys FPGA
IP Encryption Flow, on page 440).
• First, it encrypts your IP files using a symmetric encryption algorithm
and your own session or data key. This creates an encrypted data block.
• Next, it encrypts the session key for the encrypted data block using an
asymmetric algorithm and the Synopsys public key.

1. Install the encryptIP Perl script.


– You can download the encryptIP Perl script from SolvNet. See the
article published at:
https://solvnet.synopsys.com/retrieve/032343.html
– Install Perl on your machine. You cannot run the script if you do not
have Perl installed.

2. Make sure that the encryptIP script specifies the decryption key and the
matching key length:
– Specify the symmetric data decryption key with the -k option.
Optionally, you can also specify a symmetric encryption key in
hexadecimal format with the -kx option.
– Make sure you specify the right key length for the encryption
algorithm with the -c option. For example, TEST1234 becomes a 64-bit
key, so you specify the des-cbc algorithm.

See Syntax, on page 28 in the Reference Manual for full details of the
encryptip syntax.

3. Make sure you specify the appropriate output method (-om) when you
run the script.

This is important because the output method (-om) determines what is


encrypted to the user. When the example above is synthesized, the user
can view the output netlist because the output method specified is plain-
text, which means that the synthesis output netlist includes the IP
LO and readable form. See Specifying the Script
netlist in an unencrypted
Output Method, on page 453 for more information.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
452 December 2015
Working with Encrypted IP Chapter 12: Working with IP Input

The script encrypts the IP with the standard symmetric encryption


algorithm you specified, and produces a data_block. The data key used for
encrypting the HDL is then encrypted with an asymmetric algorithm and
the Synopsys public key, and produces a key_block. The data_block and
the key_block are combined with the appropriate pragmas for the flow
being used, and the script creates an encrypted HDL file. For a detailed
figure, see Encryption and Decryption, on page 441.

All other output files from synthesis, including srm and srs files, are
encrypted using the same encryption method specified for the input to
synthesis. Output constraints are not encrypted.

4. Run the encryptIP script on each RTL file you want to encrypt.

The following example encrypts the Verilog plain_ip.v file into an


encrypted file called protected_ip.v, using AES128-cbc encryption. The
session key is MY_AES_SAMPLEKEY. See Syntax, on page 28 in the Refer-
ence Manual for details about the syntax and required parameters.

perl encryptIP -in plain_ip.v -out protected_ip.v -c aes128-cbc


-k MY_AES_SAMPLEKEY –bd 16OCT2007 -om plaintext -v

5. Check the encrypted RTL file to make sure that there is only one key
block present.

Specifying the Script Output Method


You can control access to the IP by setting the appropriate output method.
You specify the output method using the -om parameter, as described in
Syntax, on page 28 or Syntax, on page 33in the Reference Manual.

The output method mainly affects the output netlist. The following are guide-
lines for setting the output method for the encryptIP script, and detail the
effects of different settings:

1. When using the encrypyIP script, set -om to persistent_key if you have an
agreement in place with Synopsys and want the output netlist to be
encrypted

2. Set -om to plaintext in the following cases:


– If you want to allow the IP to be incorporated in a ogic synthesis
design

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 453
Chapter 12: Working with IP Input Working with Encrypted IP

Setting the output method to plaintext allows the tool to synthesize,


run gate-level simulations, place and route, and implement an FPGA
(that includes the IP) on a board.
– If you want the IP to be freely optimized by the synthesis tools
Although IP cores are already optimized, the synthesis tools can effect
additional optimizations based on the design context in which it will
be used. When the synthesis tool is allowed to optimize the IP, it can
prune away IP logic that is unused or unnecessary in the current
design context. Or take the case where the output of an instantiated
IP core is timing-critical because it drives hundreds of user loads. If
the synthesis tool can freely optimize, it can replicate sources within
the core and fix the problem.

3. To let the IP be incorporated in a logic synthesis design, set -om to


plaintext or blackbox.

Setting the output method to plaintext allows the tool to synthesize, run
gate-level simulations, place and route, and implement an FPGA (that
includes the IP) on a board. Setting the output method to blackbox does
not allow the tool to run gate-level simulations or place and route the IP,
because it only uses the port and connectivity information.

4. If you have set -om to plaintext and you want to specify individual cores as
white boxes, set the syn_macro directive to 1 on the view for the IP.

Note that you must set this on the view, not the instance. When this is
set, the tool treats the IP as a white box and only uses the timing and
connection information from the IP. The synthesis tool maintains the IP
boundary and only trims unused logic inside the IP.

5. During synthesis, the IP contents appear as a black box in the RTL view,
irrespective of the output method selected. When the output method is
set to plaintext, you can push down into the IP from the Technology view.

6. After synthesis, the output method affects the results in the following
ways:
– Output constraints for an IP are in the standard Synopsys format and
are not encrypted.
– The output method affects the contents of the output netlist and its
LO
format. This table summarizes the encryptIP or encryptP1735 behavior
with different output methods.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
454 December 2015
Working with Encrypted IP Chapter 12: Working with IP Input

Method (-om) Output Netlist After Synthesis


blackbox The output netlist contains the IP interface only, and no IP
contents. It only includes IP ports and connections. The IPs are
treated as black boxes, and there are no nets or instances shown
inside the IP. This applies to all the netlist formats generated for
different vendors, whether it is HDL (vm or vhm), EDIF (edf or
edn).
plaintext The output netlist contains your unencrypted synthesized IP,
which is completely readable (nothing is encrypted).
persistent_key The output netlist includes encrypted versions of the IP.
(encryptIP only)

Preparing the IP Package


Do the following to package your IP and make it accessible from the synthesis
tools:

1. Collect the files for the package.


– Encrypt the files you need, as described in Encrypting Your IP, on
page 445.
– Make sure your package includes the files listed in IP Package File
List, on page 457.
– Structure the files as described in Suggested Directory Structure, on
page 456.

2. If your IP package is intended for synthesis only, without subsystem


assembly, create a compressed package for download, using one of these
methods:
– Create a compressed tarball (.tar.gz), which is a tar archive
compressed with the gzip utility, using one of these commands:

tar cf -fileList | gzip -c > compressed-tarball


gtar -cf compressed-tarball fileList
Preserve the directory structure when you run gzip.
– Create a zip file (zip) by running WinZip. WinZip archives and
preserves your directory hierarchy.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 455
Chapter 12: Working with IP Input Working with Encrypted IP

3. Post the packaged IP on your website for downloading.

The user generally untars or unzips the IP package into a top-level direc-
tory after downloading it. The synthesis tools can then read the contents
of the directory.

4. Supply Synopsys with the following:


– The URL for the download package.
– Vendor and advertising information you wish to display on the
Synopsys website. See Supplying Vendor Information, on page 458
for details.

Suggested Directory Structure


Follow these recommendations when you structure the IP package:
• Always use relative paths to reference a file.
• Always preserve directory structure when you run gzip.
The following example shows the structure of a Leon2 processor. Note that
although components are placed deep in the hierarchy, they are all at the
same depth. Common files are in the common subdirectory, at the same level
as the components. Bus definitions are at the same depth, in a parallel direc-
tory.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
456 December 2015
Working with Encrypted IP Chapter 12: Working with IP Input

IP Package File List


Your IP package should contain the following files:

Files Description
ipinfo.txt Text file that lists the name of the IP, the version, restrictions
for use, support contact information, and an email alias to
request a licence for the full RTL for your IP.
Documentation, Documents the IP, and includes detailed information about
preferably a PDF usage restrictions like vendor, device family, etc.
Readme An optional text file that contains instructions on use of the IP
for assembly and/or synthesis, and hints on how to use it
correctly.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 457
Chapter 12: Working with IP Input Working with Encrypted IP

Files Description
Encrypted HDL or Protected RTL for the IP, created using the Synopsys encryptIP
EDIF script. See the documentation for details.
SDC constraints Unencrypted design constraints for the IP.
SPIRIT IP-XACT System-level models for your IP. This allows the synthesis
v1.4 models tools to include your IP in a system-level design by stitching
the IP together using bus architectures.

Supplying Vendor Information


To make your IP accessible for downloads and evaluation from the Synopsys
synthesis tools, you must supply Synopsys with some vendor information as
well as information for each of the cores or IPs to be used.

1. Supply Synopsys with the following general information to advertise


your company and IP on the Synopsys website:

IP vendor name and logo Your vendor name and logo for display.
Optional IP description Short paragraph describing the IP and key
features.
Email alias Synopsys sends leads to this alias when evaluation
cores are requested on the Synopsys IP website.
Website URL Unique URL for accessing IP. After the user has
filled out lead information on the website, the
Synopsys tool directs the user to this URL to
download the IP. The lead form on your website can
be pre-filled by prior arrangement with Synopsys
Marketing.

2. Supply Synopsys with the following information about each core or IP to


be used:

IP name Name of the IP.


IP short Sentence describing the IP, which is displayed in the
description summary view on the Synopsys website.
LO
IP paragraph More detailed description of the IP, covering functional
description description and compatibility with other cores or
peripherals.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
458 December 2015
Working with Encrypted IP Chapter 12: Working with IP Input

Notes about usage Any other information, like licensing requirements


Core datasheet Information about the characteristics, features,
(HTML or PDF) functions, and interfaces.
Supported FPGA List of the targeted vendors and devices that the core
vendors and supports.
devices
IP-XACT List of the IP-XACT version number supported, the IP-
compatibility XACT VLNV, and the IP-XACT VLNVs of all the bus
information definitions required for the core, along with a link to
download each of these bus definitions.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 459
Chapter 12: Working with IP Input Working with Synenc-encrypted IP

Working with Synenc-encrypted IP


When running on Linux, the software can read Synenc-encrypted IP as input.
Synenc-encrypted IP refers to Synopsys-encrypted RTL cores, which are
configured and generated using the Synopsys coreTools. You can read them
in and synthesize them in the FPGA synthesis tool. The synenc encryption
data cannot include any licensed components, but the tool can accept as
input DesignWare library macrocells and proprietary RTL cores encrypted
using Synopsys coreTools.

The following steps describe how to use these encrypted cores:

1. For cores created with coreConsultant, follow these steps:


– Create a synthesis project file in coreConsultant. This file includes
the synenc-encrypted DesignWare core files in the correct order.
– Add this project file to the synthesis project as a subproject, using the
project -insert command.

2. For existing synenc-encoded source files where you cannot go back to


coreConsultant and create a project file, add the core files manually to
the synthesis project.

File order is critical, because incorrect order causes the compiler to error
out with a message about unknown macros. Ensure correct file order by
doing one of the following:
– Use the original lst file from coreConsultant to set up your project.
The lst file gives the proper order of files. This is the typical path to
the lst file:

ip_core_name/src/ip_core_name.lst
– If the lst file is unavailable, make sure that the params and constants
files for each core are listed first, and make sure that the undef file for
the core is listed last.

Make sure that encrypted IP generated from coreConsultant are specified


with the correct file types and Verilog standards to avoid a compiler error.
Use one of the following methods:
• Open the project file in LO
the synthesis tool and highlight IP files. Right
click and select File Options, then specify the applicable File Type and
Verilog Standard on the dialog box.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
460 December 2015
Working with Synenc-encrypted IP Chapter 12: Working with IP Input

All files are automatically updated in the project.


• Also, you can manually open the project file and edit the encrypted file
with the proper file type and Verilog standard. For example, if the top.v
file uses the Verilog 2001 standard specify the following:

add_file -vlog_std v2001 "./top.v"

Similarly, specify the following for an encrypted SystemVerilog top.sv file:

add_file -verilog -vlog_std sysv "./top.sv"

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 461
Chapter 12: Working with IP Input Using Hyper Source

Using Hyper Source


Hyper source is a useful feature that lets you prototype ASIC designs that use
one or more FPGAs. You can also use it to validate and debug the RTL for IP
designs. See the following for details:
• Using Hyper Source for Prototyping, on page 462
• Using Hyper Source for IP Designs, on page 462
• Threading Signals Through the Design Hierarchy of an IP, on page 463

Using Hyper Source for Prototyping


For prototyping, use Hyper Source to efficiently thread nets across multiple
modules to the top-level design to support Time Domain Multiplexing (TDM).

You can also use it to easily replace an ASIC RAM with an FPGA RAM. Follow
these guidelines to replace an ASIC RAM with an FPGA RAM:

1. Change the RTL for the RAM instantiation.

2. Add an extra clock signal to all the module interfaces.

Hyper source reduces the number of modified RTL modules to two, one
for the RAM and one for the top level.

Using Hyper Source for IP Designs


For IP designs, Hyper Source is useful for validating and debugging the RTL
without directly modifying it. After the RTL has been fully tested with
complete QoR results, use Hyper Source to debug, as described in the
following cases:
• Add some instrumentation logic that is not part of the original design,
such as a cache profiler that counts cache misses or bus monitor that
might count statistics about bus contention. The cache or bus might be
buried deep inside the RTL; accessing the cache or the bus means ports
might need to be added through several levels of hierarchy in the RTL.
The instrumentation logic
LO can be included anywhere in the design, so
you can use hyper source and hyper connect to easily thread the neces-
sary connections during synthesis.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
462 December 2015
Using Hyper Source Chapter 12: Working with IP Input

• Insert other hyper sourcing inside the IP to probe, monitor, and verify
correct operation of known signals within the IP.

Threading Signals Through the Design Hierarchy of an IP


Use this mechanism to thread a signal through the design hierarchy of a user
IP. This signal can be threaded to a top-level port or signal. This works even if
the Verilog or VHDL is compiled separately. The tool automatically adds ports
and signals between the source and the connection. Otherwise, these connec-
tions must be manually added to the RTL code.

The following procedure describes a method for using hyper source, using the
example HDL shown in Hyper Source Example, on page 464.

1. Define how to connect to the signal source. The following apply to this
example:
– Signal syn_hyper_source (in1) module defines the source, with a width of
1.
– The tag name "tag_name" is the global name for the hyper source.
2. Define how to access the hyper source which drives the local signal or
port. The following apply to this example:
– Signal syn_hyper_connect (out1) module defines the connection. The
signal width of 1 matches the source.
– Tag name can be the global name or the instance path to the hyper
source.

3. In this hierarchical design, note the following about hyper source:


– Applies to the module lower_module.
– Signal syn_hyper_source my_source(din) module is defined for the source
with a width of 8.
– The tag name of "probe_sig" must match the name used in the hyper
connect block to thread the signal properly.

4. In this hierarchical design, note the following about the hyper connect:
– Applies to the top-level module top, but can be any level of hierarchy.
– Signal syn_hyper_connect connect_block (probe) module is defined for the
connection with a width of 8.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 463
Chapter 12: Working with IP Input Using Hyper Source

– Tag name of "probe_sig" must match the name used in the hyper
source block to thread the signal properly.

5. After you run synthesis, the following message appears in the log file:

Hyper Source Example


/* Connect to a signal you want to export example : in1*/
module syn_hyper_source(in1) /*synthesis syn_black_box=1 syn_noprune=1 */;
parameter w = 1;
parameter tag = "tag_name"; /* global name of hyper_source */
input [w-1:0] in1;
endmodule

/* Use to access hyper_source and drive a local signal or port example


:out1 */
module syn_hyper_connect(out1) /* synthesis syn_black_box=1 syn_noprune=1
*/;
parameter w = 1; /* width must match source */
parameter tag = "tag_name"; /* global name or instance path to hyper_source
*/
parameter dflt = 0;
parameter mustconnect = 1'b1;
output [w-1:0] out1;
endmodule

/* Example hierarchical design which uses hyper_source */


module lower_module (clk, dout, din1, din2, we);
output reg [7:0] dout;
input clk, we;
input [7:0] din1, din2;
wire [7:0] din;

syn_hyper_source my_source(din);
LO
defparam my_source.tag = "probe_sig"; /* to thread the signal this
tag_name must match to name used in the hyper connect block */
defparam my_source.w = 8;

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
464 December 2015
Using Hyper Source Chapter 12: Working with IP Input

always @(posedge clk)


if (we)
dout <= din;
assign din = din1 & din2;
endmodule

module sub1_module (clk, dout, din1, din2, we);


output[7:0] dout;
input clk, we;
input [7:0] din1, din2;
lower_module lower_module (clk, dout, din1, din2, we);
endmodule

module sub2_module (clk, dout, din1, din2, we);


output [7:0] dout;
input clk, we;
input [7:0] din1, din2;
sub1_module sub1_module (clk, dout, din1, din2, we);
endmodule

module top (clk, dout, din1, din2, we, probe);


output[7:0] dout;
output [7:0] probe;
input clk, we;
input [7:0] din1, din2;

syn_hyper_connect connect_block(probe);
defparam connect_block.tag = "probe_sig"; /* to thread the signal this
tag_name must match to name used in the hyper connect block */
defparam connect_block.w = 8;

sub2_module sub2_module (clk, dout, din1, din2, we);

endmodule

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 465
Chapter 12: Working with IP Input Using Hyper Source

The following figures show how the hyper source signal automatically gets
connected through the hierarchy of the IP in the HDL Analyst views.

RTL View

Technology View

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
466 December 2015
CHAPTER 13

Optimizing Processes for Productivity

This chapter covers topics that can help the advanced user improve produc-
tivity and inter operability with other tools. It includes the following:
• Using Batch Mode, on page 468
• Working with Tcl Scripts and Commands, on page 474
• Automating Flows with synhooks.tcl, on page 481

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 467
Chapter 13: Optimizing Processes for Productivity Using Batch Mode

Using Batch Mode


Batch mode is a command-line mode in which you run scripts from the
command line. You might want to set up multiple synthesis runs with a
batch script. You can run in batch mode if you have a floating license, but
not with a node-locked license.

Batch scripts are in Tcl format. For more information about Tcl syntax and
commands, see Working with Tcl Scripts and Commands, on page 474.

This section describes the following operations:


• Running Batch Mode on a Project File, on page 468
• Running Batch Mode with a Tcl Script, on page 469
• Queuing Licenses, on page 470

Running Batch Mode on a Project File


Use this procedure to run batch mode if you already have a project file set up.
You can also run batch mode from a Tcl script, as described in Running
Batch Mode with a Tcl Script, on page 469.

1. Make sure you have a project file (prj) set up with the implementation
options. For more information about creating this Tcl file, see Creating a
Tcl Synthesis Script, on page 476.

2. From a command prompt, go to the directory where the project files are
located, and type the following:

synplify_pro -batch project_file_name.prj


The software runs synthesis in batch mode. Use absolute path names or
a variable instead of a relative path name.

If the -tclcmd switch is used, synthesis will not automatically run. To


make synthesis run, project -run must be added:

synplify_pro -batch myproj.prj -tclcmd "project -run"

The -tclcmd switch specifies


LO the tcl commands to be executed before the
synthesis starts. To run a constraint check before synthesis:

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
468 December 2015
Using Batch Mode Chapter 13: Optimizing Processes for Productivity

synplify_pro -batch myproj.prj -tclcmd "project -run constraint_-


check"

The -tclcmd switch also allows the synthesis results path to be changed.

synplify_pro -batch "D:/tests/myproj.prj" -tclcmd "set_option


-result_file \"./impl1/test.edf\"; project -run"

The software returns the following codes after the batch run:
0 - OK
2 - logical error
3 - startup failure
4 - licensing failure
5 - batch not available
6 - duplicate-user error
7 - project-load error
8 - command-line error
9 - Tcl-script error
20 - graphic-resource error
21 - Tcl-initialization error
22 - job-configuration error
23 - parts error
24 - product-configuration error
25 - multiple top levels

3. If there are errors in the source files, check the standard output for
messages. On Linux systems, this is generally the monitor; on Windows
systems, it is the stdout.log file.

4. After synthesis, check the resultFile.srr log file for error messages about
the run.

Running Batch Mode with a Tcl Script


The following procedure shows you how to create a Tcl batch script for
running synthesis. If you already have a project file set up, use the procedure
described in Running Batch Mode on a Project File, on page 468.

1. Create a Tcl batch script. See Creating a Tcl Synthesis Script, on


page 476 for details.

2. Save the file with a tcl extension to the directory that contains your
source files and other project files.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 469
Chapter 13: Optimizing Processes for Productivity Using Batch Mode

3. From a command prompt, go to the directory with the files and type one
of the following as appropriate:

synplify_pro -batch Tcl_script.tcl


The software runs synthesis in batch mode. The synthesis (compilation
and mapping) status results and errors are written to the log file result-
File.srr for each implementation. The synthesis tool also reports success
and failure return codes.

4. Check for errors.


– For source file or Tcl script errors, check the standard output for
messages. On Linux systems, this is generally the monitor in addition
to the stdout.log file; on Windows systems, it is the stdout.log file.
– For synthesis run errors, check the resultFile.srr log file. The software
uses the following error codes:
0 - OK
2 - logical error
3 - startup failure
4 - licensing failure
5 - batch not available
6 - duplicate-user error
7 - project-load error
8 - command-line error
9 - Tcl-script error
20 - graphic-resource error
21 - Tcl-initialization error
22 - job-configuration error
23 - parts error
24 - product-configuration error
25 - multiple top levels

Queuing Licenses
A common problem when running in batch mode is that the run fails because
all of the available licenses are in use. License queuing allows a batch run to
wait for the next available license when a license is on the server but not
immediately available. LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
470 December 2015
Using Batch Mode Chapter 13: Optimizing Processes for Productivity

You can specify either blocking or non-blocking queuing. With blocking-style


queuing, the tool waits until a license becomes available; with non-blocking-
style queuing, the tool waits the specified length of time for a license to
become available.

You can also queue DesignWare IP licenses, so that they can be used as they
become available.

For details, see the following:


• Queuing Considerations, on page 471
• Queuing Licenses, on page 471

Queuing Considerations
Consider these points when using queuing:
• A blocking-style queuing is used; license checkout does not exit until a
license becomes available.
• There is no maximum wait time; once initiated, the tool can wait indefi-
nitely for a license.
• If the server shuts down while the tool is waiting, a checkout failure is
reported.
• When two licenses are required, queuing waits only until the first license
becomes available (and not the second) to avoid holding a license unnec-
essarily.

Queuing Licenses
The following procedure describes how to specify blocking-style or non-
blocking style queuing for synthesis licenses. You can specify the licensed
features for queuing in an environment variable or directly in batch mode.

1. Specify the list of licensed features you want to queue, using either of
the following methods:
– Set the toolName_LICENSE_TYPE environment variable to the features
you want. For example:

SYNPLIFYPRO_LICENSE_TYPE=synplifypro:synplifypro_microsemi
– Specify a list of features to wait for using the -batch, -licensetype and -
license_wait options. For example:

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 471
Chapter 13: Optimizing Processes for Productivity Using Batch Mode

synplify_pro -batch -license_wait -licensetype


synplifypro:synplifypro_microsemi myProject.prj
See synplify_pro, on page 85 in the Command Reference for syntax
details.

2. To enable blocking-style queuing, do one of the following:


– Set environment variable toolName_LICENSE_WAIT=1 (toolName is the
name of the FPGA synthesis tool).
– In batch mode, include a -license_wait command-line argument, as
shown in the following examples:

synplify_pro -batch -license_wait Tcl_script.tcl


synplify_pro_microsemi -batch -license_wait
projectFilename.prj
With blocking-style queuing enabled, the tool waits until the requested
license becomes available. It generates the following message in the
stdout.log or the Tcl window:

Waiting for license: toolName

3. To enable non-blocking-style queuing, do either of the following:


– Set environment variable toolName_LICENSE_WAIT=waitTime
(toolName is the name of the FPGA synthesis tool and waitTime is the
maximum wait time in seconds). For example:

SYNPLIFYPRO_LICENSE_WAIT=180
The waitTime value determines the maximum wait time, in seconds:

WaitTime Value Queuing Behavior


Undefined or 0 Queuing off
1 Queuing on; wait indefinitely

>1 Queuing on; wait up to the specified number of seconds

– Include a -license_wait waitTime command-line argument when


launching batch mode as shown in the following examples:
LO
synplify_pro -batch -license_wait waitTime Tcl_script.tcl
synplify_pro_microsemi -batch -license_wait waitTime
projectFilename.prj

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
472 December 2015
Using Batch Mode Chapter 13: Optimizing Processes for Productivity

When non-blocking-style queuing is enabled, the tool waits up to the


maximum time limit specified for the license to become available. The
tool generates the following message in stdout.log or the Tcl window:

Waiting up to n seconds for license: toolName

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 473
Chapter 13: Optimizing Processes for Productivity Working with Tcl Scripts and Commands

Working with Tcl Scripts and Commands


The software uses extensions to the popular Tcl (Tool Command Language)
scripting language to control synthesis and for constraint files. See the
following for more information:
• Using Tcl Commands and Scripts, next
• Generating a Job Script, on page 475
• Setting Number of Parallel Jobs, on page 475
• Creating a Tcl Synthesis Script, on page 476
• Using Tcl Variables to Try Different Clock Frequencies, on page 478
• Using Tcl Variables to Try Several Target Technologies, on page 479
• Running Bottom-up Synthesis with a Script, on page 480
You can also use synhooks Tcl scripts, as described in Automating Flows with
synhooks.tcl, on page 481.

Using Tcl Commands and Scripts


1. To get help on Tcl syntax, do any of the following:
– Refer to the online help (Help->Tcl Help) for general information about
Tcl syntax.
– Refer to the Command Reference Manual for information about the
synthesis commands.
– Enter help * in the Tcl window for a list of all the Tcl synthesis
commands.
– Enter help commandName in the Tcl window to see the syntax for an
individual command.

2. To run a Tcl script, do the following:


– Create a Tcl script. Refer to Generating a Job Script, on page 475 and
Creating a Tcl Synthesis Script, on page 476.
– Run the Tcl script byLO
either entering source Tcl_scriptfile in the Tcl
script window, or by selecting File->Run Tcl Script, selecting the Tcl file,
and clicking Open.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
474 December 2015
Working with Tcl Scripts and Commands Chapter 13: Optimizing Processes for Productivity

The software runs the selected script by executing each command in


sequence. For more information about Tcl scripts, refer to the following
sections.

Generating a Job Script


You can record Tcl commands from the interface and use it to generate job
scripts.

1. In the Tcl script window, enter recording -file logfile to write out a Tcl log
file.

2. Work through a synthesis session.

The software saves the commands from this session into a Tcl file that
you can use as a job script or as a starting point for creating other
Tcl files.

For the command syntax, see recording, on page 55 in the Command Refer-
ence manual.

Setting Number of Parallel Jobs


You can set the maximum number of parallel jobs by setting a variable in the
ini file, by defining a Tcl variable, or specifying the maximum number in the
GUI.

1. To set the maximum number of parallel jobs in the ini file, do the
following:
– Open the ini file for the synthesis tool. For example, synplify_pro.ini.
– Add the MaxParallelJobs variable to the ini file, as follows:
[JobSetting]
MaxParallelJobs=<n>
The tool uses the MaxParallelJobs value from the ini file as the default for
both the UI (Project->Options) and batch mode. This value remains in
effect until you reset it in the ini file or from the GUI, as described in the
next step. To locate this configuration and initialization file (ini), see
Input Files, on page 250.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 475
Chapter 13: Optimizing Processes for Productivity Working with Tcl Scripts and Commands

2. To set or change the maximum number of parallel jobs from the GUI, do
the following:
– Select Project->Options->Configure Compile Point Process.
– Set the value you want in the Maximum number of parallel synthesis jobs
field, and click OK. This field shows the current ini value, but you
can reset it, and it will remain in effect until you change it again. The
value you set is saved to the ini file.

3. To set a Tcl variable for the maximum number of parallel jobs, do the
following:
– Determine where you are going to define the variable. You can do this
in the project file, or a Tcl file, or you can type it in the Tcl window. If
you specify it in a Tcl file, you must source the file. If you specify it in
the Tcl window, the tool does not save the value, and it will be lost
when you end the current session.
– Specify the max_parallel_jobs variable with the set_option Tcl command:
set_option -max_parallel_jobs value
The tool applies the max_parallel_jobs value specified to all project files
and their respective implementations. This is a global option. The
maximum number of parallel jobs remains in effect until you specify a
new value. This new value takes effect immediately, going forward.
However, when you set this option from the Tcl command window, the
max_parallel_jobs value is not saved and will be lost when you exit the
application.

Creating a Tcl Synthesis Script


Tcl scripts are text files with a tcl extension. You can use the graphic user
interface to help you create a Tcl script. Interactive commands that you use
actually execute Tcl commands, which are displayed in the Tcl window as
they are run. You can copy the command text and paste it into a text file that
you build to run as a Tcl script. For example:

add_file prep2.v
set_option -technology PROASIC3
set_option -part A3P400
LO
set_option -package FBGA144

project -run

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
476 December 2015
Working with Tcl Scripts and Commands Chapter 13: Optimizing Processes for Productivity

The following procedure covers general guidelines for creating a synthesis


script.

1. Use a text file editor or select File->New, click the Tcl Script option, and type
a name for your Tcl script.

2. Start the script by specifying the project with the project -new command.
For an existing project, use project -load project.prj.

3. Add files using the add_file command. The files are added to their
appropriate directories based on their file name extensions (see add_file,
on page 16 in the Command Reference Manual). Make sure the top-level
file is last in the file list:

add_file statemach.vhd
add_file rotate.vhd
add_file memory.vhd
add_file top_level.vhd
add_file design.fdc
For information on constraints and vendor-specific attributes, see Using
a Text Editor for Constraint Files (Legacy), on page 54 for details about
constraint files.

4. Set the design synthesis controls and the output:


– Use the set_option command for setting implementation options and
vendor-specific controls as needed. See the appropriate vendor
chapter in the Reference Manual for details.
– Set the output file information with project -result_file and project -log_file.
5. Set the file and run options:
– Save the project with a project -save command
– Run the project with a project -run command
– Open the RTL and Technology views:
open_file -rtl_view
open_file -technology_view

6. Check the syntax.


– Check case (Tcl commands are case-sensitive).
– Start all comments with a hash mark (#).

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 477
Chapter 13: Optimizing Processes for Productivity Working with Tcl Scripts and Commands

– Always use a forward slash (/) in directory and pathnames, even on


the Windows platform.

Using Tcl Variables to Try Different Clock Frequencies


To create a single script for multiple synthesis runs with different clock
frequencies, you need to create a Tcl variable for the different settings you
want to try. For example, you might want to try different target technologies.

1. To create a variable, use this syntax:

set variable_name {
first_option_to_try
second_option_to_try
...}

2. Create a foreach loop that runs through each option in the list, using the
appropriate Tcl commands. The following example shows a variable set
up to synthesize a design with different frequencies. It also creates a
separate log file for each run.

set try_freq {
Set of frequencies
to try 85.0
90.0
92.0 Tcl commands that set the
95.0 frequency, create separate log files
97.0 for each run, and run synthesis
100.0
)
Foreach loop foreach frequency $try_freq {
set_option -frequency $frequency
project -log_file $frequency.srr
project -run}

The following code shows the complete script:

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
478 December 2015
Working with Tcl Scripts and Commands Chapter 13: Optimizing Processes for Productivity

project -load design.prj


set try_these {
20.0
24.0
28.0
32.0
36.0
40.0
}
foreach frequency $try_these {
set_option -frequency $frequency
project -log_file $frequency.srr
project -run
open_file -edit_file $frequency.srr
}

Using Tcl Variables to Try Several Target Technologies


This technique used here to run multiple synthesis implementations with
different target technologies is similar to the one described in Using Tcl
Variables to Try Different Clock Frequencies, on page 478. As in that section,
you use a variable to define the target technologies you want to try.

1. Create a variable called try_these with a list of the technologies.

set try_these {

PROASIC3 PROASIC3E # list of technologies


}

2. Add a foreach loop that creates a new implementation for each


technology and opens the RTL view for each implementation.

foreach technology $try_these {


impl -add
set_option -technology $technology
project -run -fg
open_file -rtl_view
}
The following code example shows the script:

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 479
Chapter 13: Optimizing Processes for Productivity Working with Tcl Scripts and Commands

# Open a new project, set frequency, and add files.


project -new
set_option -frequency 33.3
add_file -verilog D:/test/simpletest/prep2_2.v
# Create the Tcl variable to try different target technologies.
set try_these
IGLOO IGLOOE FUSION # list of technologies
}
# Loop through synthesis for each target technology.
foreach technology $try_these {
impl -add
set_option -technology $technology
project -run -fg
open_file -rtl_view
}

Running Bottom-up Synthesis with a Script


To run bottom-up synthesis, you create Tcl scripts for individual logic blocks,
and a script for the top level that reads the other Tcl scripts.

1. Create a Tcl script for each logic block. The Tcl script must synthesize
the block. See Creating a Tcl Synthesis Script, on page 476 for details.

2. Create a top-level script that reads the block scripts. Create the script
with the with the project -new command.

3. Add the top-level data:


– Add source and constraint files with the add_file command.
– Set the top-level options with the set_option command.
– Set the output file information with project -result_file and project -log_file.
– Save the project with a project -save command.
– Run the project with a project -run command.

4. Save the top-level script, and then run it using this syntax:

source block_script.tcl
LO
When you run this command, the entire design is synthesized, begin-
ning with the lower-level logic blocks specified in the sourced files, and
then the top level.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
480 December 2015
Automating Flows with synhooks.tcl Chapter 13: Optimizing Processes for Productivity

Automating Flows with synhooks.tcl


This procedure provides the advanced user with callbacks that let you
customize your design flow or integrate with other products. For example,
you might use the callbacks to send yourself email when a job is done (see
Automating Message Filtering with a Tcl Script, on page 202), or to
automatically copy files to another location after mapping. You can use the
callback functions to integrate with a version control system, or generate the
files needed to run formal verification. The procedure is based on a file called
synhooks.tcl, which contains the Tcl callbacks.

1. Copy the synhooks.tcl file from the installDirectory/examples directory to a


new location.

You must copy the file to a new location so that it does not get
overwritten by subsequent product installations and you can maintain
your customizations from version to version. For example, copy it to
C:/work/synhooks.tcl.

2. Define an environment variable called SYN_TCL_HOOKS, and point it to


the absolute path location of the synhooks.tcl file. For example:

$SYN_TCL_HOOKS=/remote/rel/projects/MyProj/synhooks.tcl

3. Open the synhooks.tcl file in a text editor, and edit the file so that the
commands reflect what you want to do. The default file contains
examples of the callbacks, which provide you with hooks at various
points of the design process.
– Customize the file by deleting the ones you do not need and by adding
your customized code to the callbacks you want to use. The following
table summarizes the various design phases where you can use the
callbacks and lists the corresponding functions. For details of the
syntax, refer to synhooks File Syntax, on page 694 in the Reference
Manual.

Design Phase Tcl Callback Function


Project Setup Callbacks
Settings defaults for projects proc syn_on_set_project_template
Creating projects proc syn_on_new_project
Opening projects proc syn_on_open_project

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 481
Chapter 13: Optimizing Processes for Productivity Automating Flows with synhooks.tcl

Design Phase Tcl Callback Function


Closing projects proc syn_on_close_project
Application Callbacks
Starting the application after proc syn_on_start_application
opening a project
Exiting the application proc syn_on_exit_application
Run Callbacks
Starting a run. See Example: proc syn_on_start_run
proc syn_on_start_run, on
page 483.
Ending a run proc syn_on_end_run
Key Assignment Callbacks
Setting an operation for Ctrl- proc syn_on_press_ctrl_f8
F8. See Example: proc
syn_on_press_ctrl_f8, on
page 483.
Setting an operation for Ctrl- proc syn_on_press_ctrl_f9
F9
Setting an operation for Ctrl- proc syn_on_press_ctrl_f11
F11

– Save the file.


As you synthesize your design, the software automatically executes the
function callbacks you defined at the appropriate points in the design
flow.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
482 December 2015
Automating Flows with synhooks.tcl Chapter 13: Optimizing Processes for Productivity

Example: proc syn_on_start_run


The following code example gets selected files from the project browser at the
start of a run:

proc syn_on_start_run {compile c:/work/prep2.prj rev_1} {


set sel_files [get_selected_files -browser]
while {[expr [llength $sel_files] > 0]} {
set file_name [lindex $sel_files 0]
puts $file_name
set sel_files [lrange $sel_files 1 end]
}
}

Example: proc syn_on_press_ctrl_f8


The following code example gets all the selected files from the project browser
and project directory when the Ctrl-F8 key combination is pressed:

proc syn_on_press_ctrl_f8 {} {
set sel_files [get_selected_files]
while {[expr [llength $sel_files] > 0]} {
set file_name [lindex $sel_files 0]
puts $file_name
set sel_files [lrange $sel_files 1 end]
}
}

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 483
Chapter 13: Optimizing Processes for Productivity Automating Flows with synhooks.tcl

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
484 December 2015
CHAPTER 14

Improving Runtime

The following sections describe how to use multiprocessing run parallel


synthesis jobs and improve runtime:
• Multiprocessing With Compile Points, on page 486
– Setting Maximum Parallel Jobs, on page 486
– Specifying Licenses for Multiprocessing, on page 488

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 485
Chapter 14: Improving Runtime Multiprocessing With Compile Points

Multiprocessing With Compile Points


This procedure describes how to run multiprocessing on a design with
compile points. For information about defining compile points, see
Chapter 11, Working with Compile Points.

To run compile points with multiprocessing:

1. If required, specify additional license types to use for multiprocessing, as


described in Using Different License Types for Multiprocessing, on
page 488.

The tool uses one license per job, so additional licenses increase the
number of jobs that can be run in parallel. The actual number of
licenses used depends on certain factors. See Specifying Licenses for
Multiprocessing, on page 488 for an explanation.

2. Select Options->Configure Compile Point Process and set the maximum


number of jobs to run in parallel.

See Setting Maximum Parallel Jobs, on page 486 for other ways to set
this value.

3. Synthesize the design as usual.

The synthesis software runs multiple, independent compile point jobs


simultaneously, providing additional runtime improvements for the
logical compile point synthesis flows.

Soft ACPs might not be processed in parallel, unless they are independent (at
the leaf level). Upper-level compile points that contain soft lower-level compile
points cannot be processed until the lower level has been mapped, with the
top level being processed last. By contrast, if you have hard or locked compile
points, they are all processed in parallel, including the top level.

Setting Maximum Parallel Jobs


You can set maximum number of parallel jobs in the following ways:
• Setting the MaxParallelJobs Variable in the ini File, on page 487
LO
• Setting the max_parallel_jobs Tcl Option

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
486 December 2015
Multiprocessing With Compile Points Chapter 14: Improving Runtime

Setting the MaxParallelJobs Variable in the ini File


The maximum number of parallel jobs is set in the product ini file. The
following commands are set in the product.ini file (for example, synplify_pro.ini):

[JobSetting]
MaxParallelJobs=<n>

The MaxParallelJobs value is used by the UI as well as in batch mode. This


value is effective until you specify a new value. To change the number of
parallel jobs you can run, use the Options->Configure Compile Point Process
command from the Project view menu. On the Configure Compile Point Process
dialog box, in the Maximum number of parallel synthesis jobs field you will see the
current ini value. You can specify a new MaxParallelJobs value which is effec-
tive until you change it again. Once you click OK, the new value is saved in
the ini file. For a description of the dialog box, see Configure Compile Point
Process Command, on page 292.

Setting the max_parallel_jobs Tcl Option


You can also manually set an override value for the maximum number of
parallel jobs. To do this, use the Tcl command:

set_option -max_parallel_jobs numberJobs

You can choose to:


• Source the Tcl file containing this option.
• Add this option to the Project file.
• Set this option from the Tcl command window.
This max_parallel_jobs value is applied to all project files and their respective
implementations. This is a global option. The maximum number of parallel
jobs remains in effect until you specify a new value. This new value takes
affect immediately going forward. However, when you set this option from the
Tcl command window, the max_parallel_jobs value is not saved and will be lost
when you exit the application.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 487
Chapter 14: Improving Runtime Multiprocessing With Compile Points

Specifying Licenses for Multiprocessing


When you decide to run parallel synthesis jobs, a license is used for each
compile point job that runs. For example, if you set the Maximum number of
parallel synthesis jobs to 4, then the synthesis tool consumes one license and
three additional licenses are utilized to run the parallel jobs if they are avail-
able for your computing environment. Licenses are released as jobs complete,
and then consumed by new jobs which need to run.

The actual number of licenses utilized depends on the following factors:

1. Synthesis software scheme for the compile point requirements used to


determine the maximum number of parallel jobs or licenses a particular
design tries to use.

2. Value set on the Configure Compile Point Process dialog box.

3. Number of licenses actually available. You can use Help->Preferred License


Selection to check the number of available license. If you need to increase
the number of available licenses, you can specify multiple license types.
For more information, see Using Different License Types for
Multiprocessing, on page 488.

Factors 1 and 3 can change during a single synthesis run. The number of
jobs equals the number of licenses; which then equates to the lowest value of
these three factors.

Using Different License Types for Multiprocessing


You can specify multiple license types to increase the total number of licenses
available for multiprocessing. Use either of these methods to specify the
license types:
• Use the -licensetype command line option when you execute your tool.
For example, suppose you have two synplifypro licenses, two synplifypro_all-
vendor and synplifypro_pro licenses. Type the following at the command
line:

synplify_pro.exe -licensetype
"synplifypro_microsem:synplifypro_allvendor"
LO
• Use one of the following environment variables specified with the license
type:
– SYNPLIFYPRO_LICENSE_TYPE
© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
488 December 2015
Multiprocessing With Compile Points Chapter 14: Improving Runtime

setenv SYNPLIFYPRO_LICENSE_TYPE=
"synplifypro:synplifypro_allvendor:synplifypro_microsemi"

Multiprocessing can access any of these license types for additional licenses.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 489
Chapter 14: Improving Runtime Multiprocessing With Compile Points

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
490 December 2015
CHAPTER 15

Optimizing for Microsemi Designs

This chapter covers techniques for optimizing your design for various
Microsemi designs. The information in this chapter is intended to be used
together with the information in Chapter 9, Inferring High-Level Objects.
• Using Predefined Microsemi Black Boxes, on page 492
• Using Smartgen Macros, on page 493
• Working with Radhard Designs, on page 493
• Specifying syn_radhardlevel in the Source Code, on page 494

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 491
Chapter 15: Optimizing for Microsemi Designs Optimizing Microsemi Designs

Optimizing Microsemi Designs


The Synplify and Synplify Pro synthesis tools support Microsemi designs. The
following procedures Microsemi-specific design tips.
• Using Predefined Microsemi Black Boxes, on page 492
• Using Smartgen Macros, on page 493
• Working with Radhard Designs, on page 493
• Specifying syn_radhardlevel in the Source Code, on page 494
For additional Microsemi-specific information, see Passing Information to the
P&R Tools, on page 498 and Generating Vendor-Specific Output, on
page 500.

Using Predefined Microsemi Black Boxes


The Microsemi macro libraries contain predefined black boxes for Microsemi
macros so that you can manually instantiate them in your design. For infor-
mation about using ACTGen macros, see Using Smartgen Macros, on
page 493. For general information about working with black boxes, see
Defining Black Boxes for Synthesis, on page 302.

To instantiate an Microsemi macro, use the following procedure.

1. Locate the Microsemi macro library file appropriate to your technology


and language (v or vhd) in one of these subdirectories under
installDirectory/lib.

proasic ProASIC3/3E/3L, Fusion/SmartFusion, and


IGLOO/IGLOO+/IGLOOe macros
microsemi Macros for all other Microsemi technologies.

Use the macro file that corresponds to your target architecture.

2. Add the Microsemi macro library at the top of the source file list for your
synthesis project. MakeLO
sure that the library file is first in the list.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
492 December 2015
Optimizing Microsemi Designs Chapter 15: Optimizing for Microsemi Designs

3. For VHDL, also add the appropriate library and use clauses to the top of
the files that instantiate the macros:

library family;
use family.components.all ;
Specify the appropriate technology in family; for example, proasic3.

Using Smartgen Macros


The Smartgen macros replace the ACTgen macros, which were available in
the previous Designer 6.x place-and-route tool. The following procedure
shows you how to include Smartgen macros in your design. For information
about using Microsemi macro libraries, see Using Predefined Microsemi Black
Boxes, on page 492. For general information about working with black boxes,
see Defining Black Boxes for Synthesis, on page 302.

1. In Smartgen, generate the function you want to include.

2. For Verilog macros, do the following:


– Include the appropriate Microsemi macro library file for your target
architecture in your the source files list for your project.
– Include the Verilog version of the Smartgen result in your source file
list. Make sure that the Microsemi macro library is first in the source
files list, followed by the Smartgen Verilog files, followed by the other
source files.

3. Synthesize your design as usual.

Working with Radhard Designs


The following procedure outlines how to specify radhard values for a design
with the syn_radhardlevel attribute. Remember that the attribute is not recur-
sive. It only applies to all registers at the level where it is set and does not
affect lower-level registers.

You can specify radhard values on modules and architecture in both the
Attributes panel in SCOPE and in the source code. However, for registers, it
must be specified in the source code only.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 493
Chapter 15: Optimizing for Microsemi Designs Optimizing Microsemi Designs

1. Add to your project the Microsemi macro files appropriate to the radhard
values you plan to set in the design. The macro files are in
installDirectory/lib/microsemi:

Radhard Value Verilog Macro File VHDL Macro File


cc cc.v cc.vhd
tmr tmr.v tmr.vhd
tmr_cc tmr_cc.v tmr_cc.vhd

For ProASIC3/3E devices only, you do not need to add the Microsemi
macro file to your project.

2. To set a global or default syn_radhardlevel attribute, do the following:


– Set the value in the source file for the module. The following sets all
registers of module_b to tmr:

VHDL Verilog
library synplify; module module_b (a, b, sub,
use synplify.attributes.all; clk, rst) /*synthesis
attribute syn_radhardlevel of syn_radhardlevel="tmr"*/;
behav: architecture is "tmr";

– Make sure that the corresponding Microsemi macro file from step 1 is
the first file listed in the project, if required.

Specifying syn_radhardlevel in the Source Code


For a module, you can attach the syn_radhardlevel attribute either in the Attri-
butes panel of the SCOPE window or in the source code. For a register, you
can only apply this attribute in the source code.

To set attributes in SCOPE, see How Attributes and Directives are Specified,
on page 8 in the Attribute Reference manual. The following procedure outlines
how to set this attribute in the source code.
LOvalue, make sure that the corresponding
1. To set a global or default
Microsemi macro file is the first file listed in the project, if required.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
494 December 2015
Optimizing Microsemi Designs Chapter 15: Optimizing for Microsemi Designs

2. To set a syn_radhardlevel value for all the registers of a module, do the


following:
– Set the value in the source file. The following sets all registers of
module_b to tmr:

VHDL Verilog
library synplify; module module_b (a, b, sub,
use synplify.attributes.all; clk, rst) /*synthesis
attribute syn_radhardlevel of syn_radhardlevel="tmr"*/;
behav: architecture is "tmr";

– Add the appropriate Microsemi macro file (tmr.v or tmr.vhd) to the


project, unless you are working with a ProASIC3, ProASIC3E, or
ProASIC3L target. You do not need to add the Microsemi macro file to
your project for these devices. The macro files are in the
installDirectory/lib/microsemi.

The attribute is not recursive. When used at the module or architecture


level, it only applies to the registers at that level, and does not affect
lower-level registers.

3. To set a syn_radhardlevel value on a per-register basis, do the following:


– Set the value on the register in the source file for the module. For
example, to set the value of register bl_int to tmr, enter the following in
the module source file:

VHDL Verilog
library synplify; reg [15:0] a1_int, b1_int
use synplify.attributes.all; /* synthesis syn_radhardlevel =
attribute syn_radhardlevel of "tmr" */;
bl_int: signal is "tmr"

– Add the appropriate Microsemi macro file (tmr.v or tmr.vhd for this
example) to the project, unless you are working with a ProASIC3,
ProASIC3E, or ProASIC3L target. You do not need to add the
Microsemi macro file to your project for these devices.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 495
Chapter 15: Optimizing for Microsemi Designs Optimizing Microsemi Designs

Use a register-level attribute to override a default value with another


value, or set it to none to ensure that a global default value is not applied
to the register.

4. To prevent a default from being applied to a register or module/entity,


set syn_radhardlevel to none for that register, module, or entity.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
496 December 2015
CHAPTER 16

Working with Synthesis Output

This chapter covers techniques for optimizing your design for various
vendors. The information in this chapter is intended to be used together with
the information in Chapter 9, Inferring High-Level Objects.

This chapter describes the following:


• Passing Information to the P&R Tools, on page 498
• Generating Vendor-Specific Output, on page 500

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 497
Chapter 16: Working with Synthesis Output Passing Information to the P&R Tools

Passing Information to the P&R Tools


The following procedures show you how to pass information to the place-and-
route tool; this information generally has no impact on synthesis. Typically,
you use attributes to pass this information to the place-and-route tools. This
section describes the following:
• Specifying Pin Locations, on page 498
• Specifying Locations for Microsemi Bus Ports, on page 499
• Specifying Macro and Register Placement, on page 499

Specifying Pin Locations


In certain technologies you can specify pin locations that are forward-
annotated to the corresponding place-and-route tool. The following procedure
shows you how to specify the appropriate attributes. For information about
other placement properties, see Specifying Macro and Register Placement, on
page 499.

1. Start with a design using one of the Microsemi and technology families.

2. Add the appropriate attribute to the port. For a bus, list all the bus pins,
separated by commas. To specify Microsemi bus port locations, see
Specifying Locations for Microsemi Bus Ports, on page 499.
– To add the attribute from the SCOPE interface, click the Attributes tab
and specify the appropriate attribute and value.
– To add the attribute in the source files, use the appropriate attribute
and syntax. See the Attribute Reference Manual for syntax details.

Family Attribute and Value


Microsemi syn_loc {pin_number}
or
alspin {pin_number}

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
498 December 2015
Passing Information to the P&R Tools Chapter 16: Working with Synthesis Output

Specifying Locations for Microsemi Bus Ports


You can specify pin locations for Microsemi bus ports. To assign pin numbers
to a bus port, or to a single- or multiple-bit slice of a bus port, do the
following:

1. Open the constraint file an add these attributes to the design.

2. Specify the syn_noarrayports attribute globally to bit blast all bus ports in
the design.

define_global_attribute syn_noarrayports {1};

3. Use the alspin attribute to specify pin locations for individual bus bits.
This example shows locations specified for individual bits of bus
ADDRESS0.

define_attribute {ADDRESS0[4]} alspin {26}


define_attribute {ADDRESS0[3]} alspin {30}
define_attribute {ADDRESS0[2]} alspin {33}
define_attribute {ADDRESS0[1]} alspin {38}
define_attribute {ADDRESS0[0]} alspin {40}
The software forward-annotates these pin locations to the place-and-
route software.

Specifying Macro and Register Placement


You can use attributes to specify macro and register placement in Microsemi
designs. The information here supplements the pin placement information
described in Specifying Pin Locations, on page 498 and bus pin placement
information described in Specifying Locations for Microsemi Bus Ports, on
page 499.

For ... Use ...


Relative placement of Microsemi alsloc
macros and IP blocks define_attribute {u1} alsloc {R15C6}

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 499
Chapter 16: Working with Synthesis Output Generating Vendor-Specific Output

Generating Vendor-Specific Output


The following topics describe generating vendor-specific output in the
synthesis tools.
• Targeting Output to Your Vendor, on page 500
• Customizing Netlist Formats, on page 500

Targeting Output to Your Vendor


You can generate output targeted to your vendor.

1. To specify the output, click the Implementation Options button.

2. Click the Implementation Results tab, and check the output files you need.

The following table summarizes the outputs to set for the different
vendors, and shows the P&R tools for which the output is intended.

Vendor Output Netlist P&R Tool


Microsemi EDIF (.edn) Libero SoC or IDE
*_sdc.sdc

3. To generate mapped Verilog/VHDL netlists and constraint files, check


the appropriate boxes and click OK. See Specifying Result Options, on
page 81 for details about setting the option.

Customizing Netlist Formats


The following table lists some attributes for customizing your Microsemi
output netlists:

For ... Use ...


Netlist formatting syn_netlist_hierarchy
define_global_attribute syn_netlist_hierarchy {0}
Bus specification LO
syn_noarrayports
define_global_attribute syn_noarrayports {1}

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
500 December 2015
CHAPTER 17

Running Post-Synthesis Operations

The following topics describe how to run post-synthesis operations, like


place-and-route and verification, with compatible tools:
• Running P&R Automatically after Synthesis, on page 502
• Working with the Identify Tools, on page 504
• Simulating with the VCS Tool, on page 515

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 501
Chapter 17: Running Post-Synthesis Operations Running P&R Automatically after Synthesis

Running P&R Automatically after Synthesis


You can run place-and-route automatically from within the tool or in batch
mode for certain vendor devices. The following diagram illustrates the flow.

For detailed procedures, see the following:


• Integrating Synthesis and Place-and-Route in One Run, on page 502
• Releasing the Synthesis License During Place and Route, on page 502

Integrating Synthesis and Place-and-Route in One Run


You can run the place-and-route tool for your target technology automatically
after synthesis.

1. Make sure that you are using the correct version of the P&R tool.

2. Set the PATH variable to point to the place-and-route tool.

3. To automatically run the P&R tool after synthesis completes, do the


following:
– Click on the Add P&R Implementation button. In the dialog box, select
the P&R implementation you want to run and enable Run Place & Route
following synthesis.
– Synthesize the design.
The tool automatically runs P&R after synthesis.

Releasing the Synthesis License During Place and Route


When invoking a third-party place-and-route tool from the FPGA synthesis
tool, you can choose to have place and route continue to run even after
exiting the synthesis tool so that it does not consume an FPGA license. The
software lets you release the license for the synthesis tool and run the place-
and-route tool in batch mode.

To release the FPGA license, specify the following command:


LO
toolName -batch -license_release

Where toolName is the following keyword: synplify_pro.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
502 December 2015
Running P&R Automatically after Synthesis Chapter 17: Running Post-Synthesis Operations

In synthesis batch mode (synbatch), the -license_release option obtains all the
synthesis licenses that are checked out for the session and checks them in
immediately after the place-and-route job is launched.

When licenses are released, you see the following message is generated:

Exiting session due to -license_release option

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 503
Chapter 17: Running Post-Synthesis Operations Working with the Identify Tools

Working with the Identify Tools


The Synopsys Identify tool set is a dual-component system that is a valuable
part of the HDL design flow process. The system consists of the Identify
instrumentor and Identify debugger.
• The Identify instrumentor allows you to select your design instrumenta-
tion at the HDL level and then create an on-chip hardware probe.
• The Identify debugger interacts with the on-chip hardware probe and
lets you do live debugging of the design.

The combination of these tools allows you to probe your HDL design in the
target environment. The combined system allows you to debug your design
faster, easier, and more efficiently.

The synthesis tool has integrated the Identify instrumentor into the synthesis
user interface. This section describes how to take advantage of this integra-
tion and use the Identify instrumentor:
• Launching from the Tool, on page 504
• Handling Problems with Launching Identify, on page 510
• Using the Identify Tool, on page 511
• Using Compile Points with the Identify Tool, on page 513

Launching from the Tool


This section describes how to launch the Identify tool from the synthesis
software.

Define a project that you can pass to and launch in the Identify instrumentor.
You must create an Identify implementation in order to run the Identify
instrumentor. If you already have an Identify implementation, open it and
use the Identify tool as described in Using the Identify Tool, on page 511.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
504 December 2015
Working with the Identify Tools Chapter 17: Running Post-Synthesis Operations

Do the following to add an Identify implementation:

1. In the synthesis interface, open the design you want to debug.

2. Do one of the following tasks to add an Identify implementation:


– With the project implementation selected, right-click and select New
Identify Implementation from the pop-up menu.

– Select Project->New Identify Implementation.


An Implementation Options dialog box appears where you can set the
options for your implementation. An Identify implementation is created.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 505
Chapter 17: Running Post-Synthesis Operations Working with the Identify Tools

3. You can choose to run either the Classic or Integrated Identify instrumentor
interface as shown in the dialog box below. To do this, select
Options->Configure Identify Launch:

4. To run Identify instrumentor, select the Launch Identify Instrumentor icon


( ) in the toolbar, Run->Identify Instrumentor, or right-click and select the
Identify Instrumentor option from the Identify implementation.
– The following Identify Instrumentor (Classic) interface opens.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
506 December 2015
Working with the Identify Tools Chapter 17: Running Post-Synthesis Operations

– The following Integrated version of the Identify Instrumentor interface


opens in the synthesis tool. For a description of this interface, see
Identify Instrumentor Popup Menu Command, on page 339.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 507
Chapter 17: Running Post-Synthesis Operations Working with the Identify Tools

You can now use the Identify tool as described in Using the Identify Tool, on
page 511 For complete details, consult the Identify documentation.

If you run into problems while launching the Identify instrumentor, refer to
Handling Problems with Launching Identify, on page 510.

Creating a New Identify Implementation


1. Make sure that your PATH environment variable points to the Identify bin
directory.

2. Create or open a project.

3. Right-click on the implementation and select New Identify Implementation


from the popup menu.
LO
4. Set any implementation options and close the dialog box; dismiss the
multiple implementation warning.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
508 December 2015
Working with the Identify Tools Chapter 17: Running Post-Synthesis Operations

5. Select Options->Configure Identify Launch to display this dialog box, such as


which Identify Instrumentor to use:
– Integrated – Opens the embedded version of the Identify Instrumentor
interface from the synthesis tool.
– Classic – Opens the standalone version of the Identify Instrumentor
interface.

6. Check the Identify installation. If the Use current Identify Installation field
entry in the dialog box is not correct, either:
– click the Locate Identify Installation button and enter the path to the
Identify installation directory. Use the browse button if necessary.
– set the SYN_IDENTIFY_EXE environment variable to point to the
Identify installation. This path is the directory path displayed in the
Use current Identify Installation field. You must restart the synthesis tool
whenever you change the environment variable setting.

Select the appropriate license option and click OK to launch the Identify
instrumentor for the new implementation.

7. Instrument the design as required, save the instrumentation, and exit


the Identify instrumentor. See Using the Identify Tool, on page 511 for
an overview, or the Identify documentation for details.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 509
Chapter 17: Running Post-Synthesis Operations Working with the Identify Tools

8. Synthesize the instrumented implementation (rev_n_identify) in the


Synplify tool (the schematic will show the added IICE circuitry).

After the design has been synthesized, place and route your design.
Program the device, install the device in the target system, and complete
the cable interface. You can now run the Identify debugger on the
instrumented design (designName.prj) to verify correct operation.

Modifying or Re-instrumenting an Existing Design


To modify or re-instrument an existing design:

1. Load the project containing the Identify implementation.

2. From the menu bar, select Run->Run TCL Script.

3. Navigate to the lib directory and run (open) the relaunch_identify.tcl script
to launch the Identify instrumentor.

4. Re-instrument the design as required, save the instrumentation, and


exit the Identify instrumentor.

5. Resynthesize the instrumented implementation (rev_n_identify).

After the design has been resynthesized, place and route your design.
Program the device and reinstall the device in the target system. You can now
rerun the Identify debugger on the instrumented design (designName.prj) to
verify correct operation.

Handling Problems with Launching Identify


If you have not installed Identify correctly, you might run into problems when
you try to launch it from the synthesis tools. The following describe some
situations:
• If the Launch Identify Instrumentor icon (
)and the Run->Identify Instrumentor
menu command are inaccessible, you are either on an unsupported
platform or you are using a technology that does not support this
feature.
• If you have the Identify LO
software installed but the synthesis application
cannot find it, select Options->Configure Identify Launch.

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
510 December 2015
Working with the Identify Tools Chapter 17: Running Post-Synthesis Operations

In the resulting dialog box, select the instrumentor to use:


– Integrated – Opens the embedded version of the Identify Instrumentor
interface from the synthesis tool.
– Classic – Opens the standalone version of the Identify Instrumentor
interface.

Either:
– check the Use Current Identify Installation entry. This entry is set by the
SYN_IDENTIFY_EXE environment variable to point to the Identify
installation. If this path is incorrect, change the environment variable
setting and restart the synthesis tool.
– click the Locate Identify Installation button and specify the correct
location in the corresponding field. Use the browse button to open the
Select Identify Installation Directory dialog box and navigate to your current
Identify installation directory.

Using the Identify Tool


This procedure provides an overview of how to use the Identify instrumentor.
For detailed information about the tool, refer to the Identify RTL debugger
documentation.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 511
Chapter 17: Running Post-Synthesis Operations Working with the Identify Tools

1. The Identify instrumentor software interface opens, with an Identify


project automatically set up for the design to be instrumented and
debugged (IICE tab).

2. Do the following in the Identify instrumentor interface:


– Instrument the design. For details of using the Identify instrumentor,
refer to the Identify RTL debugger documentation.
– Save the instrumented design.
The Identify instrumentor tool exports the instrumented design to the
synthesis software. It creates an instrumentation subdirectory under
your synthesis working directory called designName_instr, which contains
the following:
– A synthesis project file
– An instr_sources subdirectory for the instrumented HDL files
– Tcl scripts for loading the instrumented design
3. Return to the synthesis interface and view the instrumented design that
contains the debugging logic.
– In the synthesis interface, open the project file for the instrumented
design, which is in the instr_sources subdirectory listed in the
Implementations Results view for your original synthesis project.
– Synthesize the design.
– Open the RTL view to see the inserted debugging logic.
4. Place and route the instrumented design after synthesis.

5. Use the Identify debugger tool to debug the instrumented design.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
512 December 2015
Working with the Identify Tools Chapter 17: Running Post-Synthesis Operations

Using Compile Points with the Identify Tool


You can use compile points to run incrementally. This can reduce runtime
while running synthesis, and also while running the Identify flow. The
following figure illustrates this:

When you use Identify instrumentation, the tool creates extra IICE logic at
the top level of the design and the corresponding interface to the signals that
need to be debugged. If you define compile points, the tool need only rerun
the compile points that have changed because of the insertion of this logic.
On subsequent runs, it can incrementally re-instrument only those compile
points where there are instrumentation changes or design modifications.The
following procedure describes the steps to follow to implement the flow and
take advantage of incremental synthesis and instrumentation:

1. Create a synthesis implementation with compile points.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 513
Chapter 17: Running Post-Synthesis Operations Working with the Identify Tools

2. Set up the Identify implementation:


– Generate the Identify implementation by right-clicking the FPGA
synthesis implementation and selecting New Identify Implementation from
the popup menu.
– Copy the compile point subdirectories manually to the new Identify
implementation directory.

3. Run the tools.


– Run synthesis.
– Before running the Identify tool, enable the top-level constraint file
and all compile point constraint files in the Identify implementation.
– Instrument the design. The tool inserts additional logic for
instrumentation.

4. Resynthesize the design.

The tool runs incrementally, only resynthesizing the compile points


affected by the inserted instrumentation logic. If you make any other
design changes, the tool incrementally synthesizes the affected compile
points.

5. Rerun instrumentation.

The tool runs incrementally, and only re-instruments the affected


compile points.

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
514 December 2015
Simulating with the VCS Tool Chapter 17: Running Post-Synthesis Operations

Simulating with the VCS Tool


The Synopsys VCS® tool is a high-performance, high-capacity Verilog
simulator that incorporates advanced, high-level abstraction verification
technologies into a single, open, native platform. You can launch this simula-
tion tool from the synthesis tools on Linux and Unix platforms by following
the steps below. The VCS tool does not run under the Windows operating
system.

1. Set up the tools.


– Install the VCS software and set up the $VCS_HOME environment
variable to define the location of the software.
– Set up the place-and-route tool.
– In the synthesis software, either select Run->Configure and Launch VCS
Simulator, or click the icon.

If you did not set up the $VCS_HOME environment variable, you are
prompted to define it. The Run VCS Simulator dialog box opens. For
descriptions of the options in this dialog box, see Configure and Launch
VCS Simulator Command, on page 257 of the Reference Manual.

2. Choose the category Simulation Type in the dialog box to configure the
simulation options.
– Specify the kind of simulation you want to run.
RTL simulation Enable Pre-Synthesis
Post-synthesis netlist simulation Enable Post-Synthesis
Post-P&R netlist simulation Enable Post P&R

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 515
Chapter 17: Running Post-Synthesis Operations Simulating with the VCS Tool

– Choose the category VCS Options in the dialog box to set options such
as the following VCS commands.

To set ... Type the option in ...


VLOGAN command options for compiling and Verilog Compile
analyzing Verilog, like the -q option
VHDLAN options for compiling and analyzing VHDL VHDL Compile
VCS command options Elaboration
SIMV command options, like -debug Simulation

The options you set are written out as VCS commands in the script. If
you leave the default settings the VCS tool uses the FPGA version of VCS
and opens with the debugger (DVE) GUI and the waveform viewer. See
the VCS documentation for details of command options.

3. If your project has Verilog files with `include statements, you must use
the +incdir+ fileName argument
LO when you specify the vlogan command.
You enter the +incdir+ in the Verilog Compile field in the VCS Options dialog
box, as shown below:

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
516 December 2015
Simulating with the VCS Tool Chapter 17: Running Post-Synthesis Operations

Example Verilog File:

`include "component.v"
module Top (input a, output x);
...
endmodule
The syntax for the VCS commands must reflect the relative location of
the Verilog files:
– If the Verilog files are in the same directory as the top.v file, specify:
- vlogan -work work Top.v +incdir+ ./
– If the Verilog files are in the a directory above the top.v file, specify:
- vlogan -work work Top.v +incdir+ ../include1 +incdir+
../ include2
– If the Verilog files are in directories below and above the top.v file,
specify:

- vlogan -work work Top.v +incdir+ ./include_dir1


+incdir../include_dir2

4. Specify the libraries and test bench files, if you are using them.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 517
Chapter 17: Running Post-Synthesis Operations Simulating with the VCS Tool

– To specify a library, click the green Add button, and specify the library
in the dialog box that opens. Use the full path to the libraries. For
pre-synthesis simulation, specifying libraries is optional.

Add

Edit

Delete

– For post-synthesis and post-P&R synthesis, by default the dialog box


displays the UNISIM and SIMPRIM libraries in the P&R tool path. You
can add and delete libraries or edit them, using the buttons on the
side. To restore the defaults, click the Verilog Defaults or VHDL Defaults
button, according to the language you are using.
– If you have test bench files, choose the category Test Bench Files in the
dialog box to specify them. Use the buttons on the side to add, delete,
or edit the files.

5. Specify the top-level module and run directory.


– Choose the category Top Level Module in the dialog box to specify the
top-level module or modules for the simulation.
– If necessary, choose the category Run Directory near the bottom of the
dialog box to edit the default run directory listed in the field. The
default location is in the implementation results directory.

6. Generate the VCS script.


– To view the script before generating it, click the View Script button on
the top right of the dialog box. A window opens with the specified VCS
commands and options.
– To generate the VCS script, click Save As, or run VCS by clicking the
Run button in the upper right. The tool generates the XML script in
the directory specified.
LO
7. To run VCS from the synthesis tool interface, do the following:

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
518 December 2015
Simulating with the VCS Tool Chapter 17: Running Post-Synthesis Operations

– If you do not already have it open, open the Run VCS Simulator dialog
box by clicking the icon.
– To use an existing script, click the Load From button on the lower right
and select the script in the dialog box that opens. Then click Run in
the Run VCS Simulator dialog box.
– If you do not have an existing script, specify the VCS options, as
described in the previous five steps. Click Run.

The tool invokes VCS from the synthesis interface, using the commands
in the script.

Limitations
If Verilog include paths have been added to your project file, these paths are
not automatically added to the VCS script. Add the Verilog include paths
manually by using one of the following workarounds:
• From the Run VCS Simulator dialog box, add +incdir+includePath in the
Verilog Compile options field.
• Modify the VCS script file, adding the +incdir+includePath to all or any
relevant vlogan commands.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 519
Chapter 17: Running Post-Synthesis Operations Simulating with the VCS Tool

LO

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
520 December 2015
Index

Symbols effects of retiming 344


for FSMs 313, 363
.adc file 290 inferring RAM 321
.ini file syn_hier (on compile points) 396
parallel jobs 475 VHDL package 90
Attributes panel
A using SCOPE 122
audience for the document 21
ACTgen macros 493 auto constraints, using 295
adc constraints 290 AutoConstraint_design_name.sdc 298
adc file
creating 290 B
object names 294
adc file, using 288 B.E.S.T 255
adders backslash
SYNCore 427 escaping dot wildcard in Find
command 239
alspin
bus port pin numbers 499 batch mode 468
using find and expand 145
Alt key
column editing 36 Behavior Extracting Synthesis
mapping 251 Technology. See B.E.S.T
analysis design constraint file (.adc) 290 black boxes 302
adding constraints 306
analysis design constraints adding constraints in SCOPE 308
design scenarios 289 adding constraints in Verilog 308
analysis design constraints (adc) 288 adding constraints in VHDL 306
analysis design constraints (adc), using instantiating in Verilog 302
with sdc 291 instantiating in VHDL 304
archive utility passing VHDL boolean generics 46
using 99 passing VHDL integer generics 47
pin attributes 310
archiving projects 99
block RAM
area, optimizing 337 inferring 323
asterisk wildcard modes 320
Find command 239 types 320
attributes blocking-style license queuing 471
adding 89 bookmarks
adding in constraint files 55 in source files 36
adding in SCOPE 92 using in log files 186
adding in Verilog 91
adding in VHDL 89 bottom-up design flow

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 521
Index

compile point advantages 370 crossprobing objects 149


browsers 226 definition 147
diffing 151
buffering highlighting in HDL Analyst views 154
controlling 354 listing objects 155
byte-enable RAMs listing objects and properties 154
SYNCore 416 listing objects in a file 155
listing objects in columnar format 154
C listing objects with c_list 154
special characters 153
c_diff command, examples 152 Tcl window and SCOPE
c_intersect command, examples 152 comparison 147
using Tcl expand command 143
c_list command using Tcl find command 141
different from c_print 154 viewing 153
example 156
using 155 Collections panel
using SCOPE 121
c_print command
different from c_list 154 column editing 36
using 155 comments
c_symdiff command, examples 153 source files 36
c_union command, examples 151 compile point types
hard 374
callback functions, customizing flow 481 locked 375
case sensitivity locked,partition 377
Find command (Tcl) 139 compile points
clock and path constraints advantages 370
setting 123 analyzing results 396
clock constraints automatic timing budgeting 381
setting 123 child 373
setting (Legacy) 164 constraint files 378
constraints for forward-annotation 386
clock groups constraints, internal 386
effect on false path constraints 137 continue on error 207
clock trees 281 creating constraint file 394
clocks defined 370
implicit false path 137 defining in constraint files 391
feature summary 377
Clocks panel
Identify flow 513
using SCOPE 121
incremental synthesis 400
CoE. See continue on error 207 manual compile point flow 388
collections multiprocessing 399
adding objects 151 nested 373
concatenating 151 optimization 384
constraints 149 order of synthesis 384
copying 155 parent 373
creating from common objects 151 preserving with syn_hier 396
creating from other collections 149 resynthesis 385
creating in SCOPE 148 setting constraints 395
creating in Tcl 150 setting type 393

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
522 December 2015
Index

syn_hier 396 slack time 283


synthesis process 384 using -route 339
synthesizing 387 viewing 281
types 373 crossprobing 247
using syn_allowed_resources and retiming 344
attribute 396 collection objects 149
Compile Points panel 122 filtering text objects for 252
compile-point synthesis from FSM viewer 253
interface logic models 380 from log file 186
from message viewer 199
compile-point synthesis flow
from text files 250
defining compile points 391
Hierarchy Browser 247
setting constraints 394
importance of encoding style 254
compiler directives (Verilog) paths 251
specifying 85 RTL view 248
constants Technology view 248
extracting from VHDL source code 87 Text Editor view 248
constraint files text file example 251
applying to a collection 149 to FSM Viewer 253
compile point 378, 386 to place-and-route file 223
creating in a text editor 54 Verilog file 248
editing 129 VHDL file 248
effects of retiming 344 within RTL and Technology views 247
options 80 current level
setting for compile points 395 expanding logic from net 262
constraints expanding logic from pin 262
defining clocks (Legacy) 159 searching current level and below 236
defining register delays (Legacy) 160 custom folders
specifying through points 133 creating 66
types 121 hierarchy management 66
types (legacy) 161 customization
using FDC template command 119 callback functions 481
context
for object in filtered view 258 D
context help editor 32
SystemVerilog 32 data block 443
continue on error 79, 207 data key 443
compile points 207 default enum encoding 86
counters define_attribute 95
SYNCore 434 Delay Paths panel
create_fdc_template using SCOPE 122
using 119 design flow
critical paths customizing with callback
delay 283 functions 481
flat view 282 design guidelines 336
hierarchical view 282
design hierarchy
negative slack on clock enables
(Legacy) 170 viewing 256

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 523
Index

design size encryptip output method


amount displayed on a sheet 223 effect on output netlists 454
design views encryptIP script
moving between views 222 controlling output 453
DesignWare encrypting IP 452
importing cores 460 output methods 453
device options encryptP1735 script
See also implementation options encrypting multiple files 451
location 447
directives public keys repository file 451
adding 89 use models 447
adding in Verilog 91
adding in VHDL 89 encryptP1735P script
black box 306, 307 encrypting IP 446
for FSMs 313 environment variables
specifying for Verilog compiler 85 SYN_TCL_HOOKS 481
syn_state_machine 361 error codes 469
syn_tco 307
adding black box constraints 306 errors
syn_tpd 307 continuing 79, 207
adding black box constraints 306 definition 34
syn_tsu 307 filtering 198
adding black box constraints 306 sorting 198
source files 34
dissolving instances for flattening Verilog 34
hierarchy 269 VHDL 34
dot wildcard expand
Find command 239 batch mode 145
drivers Expand command
preserving duplicates with connection logic 265
syn_keep 347
pin and net logic 261
selecting 265
using 262
dual-port RAMs
expand command
SYNCore parameters 413
different from Tcl search 242
expand command (Tcl). See Tcl expand
E command
Editing window 34 Expand Inwards command
editor view using 262
context help 32 Expand Paths command
emacs text editor 39 different from Isolate Paths 265
encoding styles Expand to Register/Port command
and crossprobing 254 using 262
default VHDL 86 expanding
FSM Compiler 360 connections 265
encryption pin and net logic 261
synenc 460
encryption flow. See ReadyIP, encryptIP F
encryptip output constraints 454 false paths

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
524 December 2015
Index

defining between clocks (Legacy) 174 search scope, setting 237


I/O paths 137 searching the mapped database 238
impact of clock group assignments 137 searching the output netlist 244
impact of clock group assignments setting limit for results 238
(Legacy) 174 using in RTL and Technology views 236
ports 137 using wildcards 239
ports (Legacy) 174 wildcard examples 241
registers 137 find command
registers (Legacy) 174 different from Tcl search 242
setting constraints 137 hierarchy 242
setting constraints (Legacy) 174 nuances and differences 243
fanouts find command (Tcl)
buffering vs replication 354 See Tcl find command
hard limits 353
soft global limit 352 finding information
soft module-level limit 353 information organization 23
using syn_keep for replication 348 Flatten Current Schematic command
using syn_maxfan 352 transparent instances 267
feature comparison using 267
FPGA tools 17 Flatten Schematic command
FIFOs using 267
compiling with SYNCore 404 flattening 266
files See also dissolving
.prf file 200 compared to filtering 259
filtered messages 202 dissolving instances 269
fsm.info 361 hidden instances 268
log 183 transparent instances 267
message filter (prf) 200 using syn_hier 350
output 500 using syn_netlist_hierarchy 350
rom.info 229 forward-annotation
searching 96 compile point constraints 386
statemachine.info 275 FPGA Design Constraints Editor
synhooks.tcl 481 using TCL View 127
Tcl 474
See also Tcl commands frequency
Tcl batch script 469 clocks (Legacy) 167
defining for non-clock signals
Filter Schematic command, using 259 (Legacy) 168
Filter Schematic icon, using 259 internal clocks (Legacy) 167
filtering 259 setting global 79
advantages over flattening 259 from constraints 132
using to restrict search 236 FSM Compiler
Find command advantages 358
236 enabling 359
browsing with 235 FSM encoding
hierarchical search 237 user-defined 315
long names 235 using syn_enum_encoding 315
message viewer 198
FSM Explorer 358
reading long names 238
running 364
search scope, effect of 239

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 525
Index

when to use 358 highlighting collections 154


FSM view HDL views, annotating timing
crossprobing from source file 250 information 279
FSM Viewer 272 help
crossprobing 253 information organization 23
fsm.info file 361 hidden instances
FSMs consequences of saving 257
See also FSM Compiler, FSM Explorer flattening 268
attributes and directives 313 restricting search by hiding 236
defining in Verilog 311 specifying 257
defining in VHDL 312 status in other views 257
definition 311 hierarchical design
optimizing with FSM Compiler 358 expanding logic from nets 262
properties 275 expanding logic from pins 261
safe. See safe FSMs hierarchical instances
state encodings 274 dissolving 269
transition diagram 272 hiding. See hidden instances, Hide
viewing 272 Instances command
multiple sheets for internal logic 258
G pin name display 260
viewing internal logic 257
gated clocks hierarchical objects
defining (Legacy) 172 pushing into with mouse stroke 228
Generated Clocks panel traversing with Push/Pop mode 229
using SCOPE 121 hierarchical search 236
generics hierarchy
extracting from VHDL source code 87 flattening 267
passing boolean 46 traversing 226
passing integer 47
hierarchy browser
global optimization options 77 clock trees 281
controlling display 223
H crossprobing from 247
defined 226
HDL Analyst finding objects 234
See also RTL view, Technology view traversing hierarchy 226
critical paths 281
hierarchy management (custom
crossprobing 247 folders) 66
filtering schematics 259
Push/Pop mode 229, 232 high reliability
traversing hierarchy with mouse safe FSMs 316
strokes 227 using safe FSM 316
traversing hierarchy with Push/Pop hyper source
mode 229 example 464
using 255 for IPs 462
HDL Analyst tool for prototyping 462
deselecting objects 220 IP design hierarchy 462
selecting/deselecting objects 220 threading signals 463
HDL Analyst views

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
526 December 2015
Index

I using SCOPE 122


instances
I/O insertion 357 preserving with syn_noprune 347
I/O pads properties 215
specifying I/O standards 126 properties of pins 215
I/O paths ILM See interface logic models
false path constraint 137 interface logic models 380
I/O standards interface timing 381
specifying 126
IP
I/O Standards panel encryption-decryption flow 441
using SCOPE 122 re-encryption 444
I/Os IP design hierarchy
auto-constraining 296 hyper source 462
constraining 125
IP encryption flow overview 440
constraining (Legacy) 173
Verilog black boxes 302 IP encryption scheme 445
VHDL black boxes 304 IP vendors
Identify directory structure for package 456
compile points 513 encrypting IP 445
package file list for encrypted IP
implementation options 74 flow 457
device 74 packaging for evaluation 455
global frequency 79 supplying vendor information 458
global optimization 77
part selection 74 IPs
specifying results 81 encrypting 445
encryption flow 440
implementations SYNCore 404
copying 73 SYNCore byte-enable RAMs 416
deleting 73 SYNCore counters 434
multiple. See multiple SYNCore FIFOs 404
implementations.
SYNCore RAMs 409
overwriting 73
SYNCore ROMs 422
renaming 73
SYNCore subtractors 427
Incremental Compiler using hyper source for debug 462
using 48
Isolate Paths command
Incremental Mode option different from Expand Paths 265, 266
using Incremental Compiler 48
iterations
incremental synthesis reducing with compile on error 207
compile points 400
locked,partition compile points 377
J
initializing 329
initializing RAM 329 job management
up-to-date checking 178
Input and output constraints
defining 125
input constraints, setting 125
K
input constraints, setting (Legacy) 172 key assignments
Inputs/Outputs panel customizing 482

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 527
Index

key block 443 saving filter expressions 200


keywords searching 198
completing words in Text Editor 35 using 197
using the F3 key to search forward 198
using the Shift-F3 key to search
L backward 198
library extensions 40 messagefilter.txt file 206
license queuing 470 messages
blocking-style 471 demoting 204
filtering 199
license release (synthesis)
promoting 204
after P&R 502
saving filter information from command
license_release 502 line 201
log file saving filter information from GUI 200
remote access 189 severity levels 205
suppressing 204
log files
writing messages to file 202
checking FSM descriptions 364
checking information 183 Microsemi
retiming report 343 ACTgen macros 493
setting default display 183 macro libraries 492
state machine descriptions 360 output netlist 500
viewing 183 pin numbers for bus ports 499
logic mixed designs
expanding between objects 265 troubleshooting 46
expanding from net 262 mixed language files 43
expanding from pin 261 mouse strokes
logic preservation pushing/popping objects 227
syn_hier 351 multicycle paths
syn_keep for nets 347 setting constraints 123
syn_keep for registers 347 setting constraints (Legacy) 165
syn_noprune 347
syn_preserve 347 multiple implementations 72
running from project 72
logical folders
creating 66 multiprocessing
compile points 399
maximum parallel jobs 475, 486
M multisheet schematics 221
manual compile points for nested internal logic 258
flow 388 searching just one sheet 236
max_parallel_jobs variable 476 transparent instances 221
maximum parallel jobs 475, 486
MaxParallelJobs variable 475
N
memory usage name spaces
maximizing with HDL Analyst 271 output netlist 244
technology view 238
Message viewer
filtering messages 199 navigating among design views 222
keyboard shortcuts 198 netlists for different vendors 500

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
528 December 2015
Index

nets parameters
expanding logic from 262 extracting from Verilog source code 85
preserving for probing with part selection options 74
syn_probe 347
preserving with syn_keep 347 path constraints
properties 215 false paths 137
selecting drivers 265 false paths (Legacy) 174
New property 217 pathnames
using wildcards for long names
notes (Find) 239
filtering 198
sorting 198 paths
crossprobing 251
notes, definition 34 tracing between objects 265
tracing from net 262
O tracing from pin 261
pattern matching
objects
Find command (Tcl) 139
finding on current sheet 236
flagging by property 216 pattern searching 96
selecting/deselecting 220 PDF
open_design cutting from 36
with find and expand 145 pin names, displaying 260
optimization pins
for area 337 expanding logic from 261
for timing 338 properties 215
logic preservation. See logic ports
preservation.
false path constraint 137
preserving hierarchy 351
false path constraint (Legacy) 174
preserving objects 347
properties 215
tips for 336
POS interface
orig_inst_of property 218
using 133
output constraints, setting 125
post-synthesis constraints with adc 289
output constraints, setting (Legacy) 172
preferences
output files 500 crossprobing to place-and-route
specifying 81 file 223
output netlists displaying Hierarchy Browser 223
finding objects 244 displaying labels 224
RTL and Technology views 223
overutilization 196
sheet size (UI) 223
primitives
P pin name display 260
package library, adding 60 pushing into with mouse stroke 228
viewing internal hierarchy 256
pad types
industry standards 126 probes
adding in source code 366
parallel jobs 475 definition 366
parameter passing 47 retiming 345
boolean generics 46

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 529
Index

Product of Sums interface. See POS compiling with SYNCore 409


interface inferring block RAM 323
project command initializing 329
archiving projects 99 SYNCore 409
copying projects 106 SYNCore, byte-enable 416
unarchiving projects 103 register balancing. See retiming
project file hierarchy 66 register constraints, setting (Legacy) 164
project files registers
adding files 62 false path constraint 137
adding source files 58 false path constraint (Legacy) 174
batch mode 468 Registers panel
creating 58 using SCOPE 122
definition 58
deleting files from 62 remote access
opening 61 status reports 189
replacing files in 62 replication
updating include paths 65 controlling 354
VHDL file order 61 resource sharing
VHDL library 60 optimization technique 337
project status report overriding option with syn_sharing 357
remote access 189 results example 357
projects using 356
archiving 99 resource usage 195
copying 106 resource utilization. See resource usage
restoring archives 103
resynthesis
properties compile points 385
displaying with tooltip 215 forcing with Resynthesize All 386
finding objects with Tcl find -filter 140 forcing with Update Compile Point
orig_inst_of 218 Timing Data 386
reporting for collections 154
retiming
viewing for individual objects 215
effect on attributes and constraints 344
prototyping example 342
using hyper source threading 462 overview 340
Push/Pop mode probes 345
HDL Analyst 227 report 343
keyboard shortcut 229 simulation behavior 345
using 227, 229 return codes 469
rom.info file 229
Q ROMs
question mark wildcard, Find SYNCore 422
command 239 viewing data table 229
RTL view
R See also HDL Analyst
analyzing clock trees 281
RAM inference 320 crossprobing collection objects 149
using attributes 321 crossprobing description 247
RAMs 329 crossprobing from 248

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
530 December 2015
Index

crossprobing from Text Editor 250 setting compile point constraints 395
defined 213 setting constraints (FDC) 114
description 212 specifying constraints 121
filtering 259 state machine attributes 313
finding objects with Find 236 TCL View 122
finding objects with Hierarchy SCOPE editor
Browser 234 using 114
flattening hierarchy 267
highlighting collections 154 scope of the document 21
opening 214 SCOPE panels
selecting/deselecting objects 220 entering and editing constraints 121
setting preferences 223 SCOPE TCL View
state machine implementation 361 using 127
traversing hierarchy 226
search
running P&R browsing objects with the Find
license release (synthesis) 502 command 235
runtime browsing with the Hierarchy
continue on error 207 Browser 234
finding objects on current sheet 236
setting limit for results 238
S setting scope 237
safe case 316 using the Find command in HDL
Analyst views 236
safe FSM 316
using safe case 316 See also search
schematics set command
multisheet. See multisheet schematics collections 155
page size 223 set_option command 76
selecting/deselecting objects 220 sheet connectors
SCOPE navigating with 222
adding attributes 92 sheet size
adding probe insertion attribute 367 setting number of objects 223
Attributes panel 122
Shift-F3 key
case sensitivity for Verilog designs 139
Message Viewer 198
Clocks panel 121
collections compared to Tcl script Show Cell Interior option 256
window 147 Show Context command
Collections panel 121 different from Expand 258
Compile Points panel 122 using 258
creating compile-point constraint
file 394 signals
defining compile points 391 threading with hyper source. See hyper
source
Delay Paths panel 122
drag and drop 130 simulation, effect of retiming 345
editing operations 131 single-port RAMs
Generated Clocks panel 121 SYNCore parameters 412
I/O pad type 126 slack 284
I/O Standards panel 122 setting margins 281
Inputs/Outputs panel 122
multicycle paths 136 slack time display 278
Registers panel 122 Slow property 217

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 531
Index

source code syn_allowed_resources


commenting with synthesis on/off 87 compile points 396
crossprobing from Tcl window 253 syn_encoding attribute 314
defining FSMs 311
fixing errors 37 syn_enum_encoding directive
opening automatically to FSM encoding 315
crossprobe 249 syn_hier attribute
optimizing 336 controlling flattening 350
source files preserving hierarchy 351
See also Verilog, VHDL. using with compile points 396
adding comments 36 syn_isclock
adding files 58 black box clock pins 310
checking 33 syn_keep
column editing 36 replicating redundant logic 348
copying examples from PDF 36
creating 30 syn_keep attribute
crossprobing 250 preserving nets 347
editing 35 preserving shared registers 347
editing operations 35 syn_keep directive
mixed language 43 effect on buffering 354
specifying default encoding style 86 syn_macro
specifying top level file for mixed specifying encrypted IP as white
language projects 44 box 454
specifying top level in Project view 61
syn_maxfan attribute
specifying top-level file 86
setting fanout limits 352
state machine attributes 313
using bookmarks 36 syn_noarrayports attribute
use with alspin 499
special characters
Tcl collections 153 syn_noprune directive
preserving instances 347
STA 285
syn_preserve
STA, generating custom timing
reports 285 effect on buffering 354
preserving power-on for retiming 341
STA, using analysis design constraints
(adc) 288 syn_preserve directive
preserving FSMs from optimization 313
stand-alone timing analyst. See STA preserving logic 347
state machines syn_probe attribute 366
See also FSM Compiler, FSM Explorer, inserting probes 366
FSM viewer, FSMs.
preserving nets 347
attributes 313
descriptions in log file 360 syn_reference_clock constraint
implementation 361 (Legacy) 159
parameter and ’define comparison 312 syn_replicate attribute
statemachine.info file 275 using buffering 354
Structural Verilog flow 50 syn_sharing directive
overriding default 357
subtractors
SYNCore 427 syn_state_machine directive
using with value=0 361
syn_allow_retiming
using for retiming 341

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
532 December 2015
Index

SYN_TCL_HOOKS environment T
variable 481
syn_tco attribute ta file 285
adding in SCOPE 308 Tcl
syn_tco directive 307 max_parallel_jobs variable 476
adding black box constraints 306 tcl callbacks
syn_tpd attribute customizing key assignments 482
adding in SCOPE 308 Tcl commands
syn_tpd directive 307 batch script 469
adding black box constraints 306 running 474
syn_tsu attribute Tcl expand
adding in SCOPE 308 using 138
syn_tsu directive 307 Tcl expand command
adding black box constraints 306 crossprobing objects 149
syn_useioff usage tips 143
preventing flops from moving during using in SCOPE 148
retiming 342 Tcl files 474
SYNCore creating 476
adders 427 for bottom-up synthesis 480
counters 434 guidelines 52
FIFO compiler 404 naming conventions 53
RAMs 409 recording from commands 475
RAMs, byte-enable 416 synhooks.tcl 481
RAMs, dual-port parameters 413 using variables 478
RAMs, single-port parameters 412 wildcards 53
ROMs 422 Tcl find
ROMs, parameters 426 batch mode 145
subtractors 427 filtering results by property 140
synenc encryption 460 search patterns 138
using 138
synhooks
automating message filtering 202 Tcl find command
annotating properties 140
synhooks.tcl file 481 case sensitivity 139
Synopsys crossprobing objects 149
FPGA product family 16 database differences 148
synplify_pro UNIX command 22 pattern matching 139
Tcl window vs SCOPE 147
SYNPLIFY_REMOTE_REPORT_LOCATIO
N 191 usage tips 141
useful -filter examples 141
syntax using in SCOPE 148
checking source files 33
Tcl Script window
syntax check 33 crossprobing 253
synthesis check 33 message viewer 197
synthesis_on/off Tcl script window
using 87 collections compared to SCOPE 147
SystemVerilog keywords Tcl scripts
context help 32 See Tcl files.

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 533
Index

TCL View 127 timing exceptions, modifying with


using 127 adc 289
using SCOPE 122 timing failures 284
-tclcmd 468 timing information commands 278
Technology view timing information in HDL views 279
See also HDL Analyst
timing information, critical paths 283
critical paths 281
crossprobing 247, 248 timing optimization 338
crossprobing collection objects 149 timing report, stand-alone 285
crossprobing from source file 250 timing reports
filtering 259 specifying format options 83
finding objects 238
finding objects with Find 236 timing reports, custom 285
finding objects with Hierarchy tips
Browser 234 memory usage 271
flattening hierarchy 267 to constraints
general description 212 specifying 133
highlighting collections 154
opening 214 top level
selecting/deselecting objects 220 specifying 86
setting preferences 223 top-down design flow
state machine implementation in 361 compile point advantages 370
traversing hierarchy 226 transparent instances
text editor flattening 267
built-in 34 lower-level logic on multiple sheets 221
external 39
using 34 U
Text Editor view
crossprobing 248 UNIX commands
synplify_pro 22
Text Editor window
colors 37 up-to-date checking 178
crossprobing 37 copying job logs to log file 180
fonts 37 limitations 181
text files using 50
crossprobing 250
The Synopsys FPGA Product Family 16 V
through constraints 133 vendor-specific netlists 500
AND lists 134
OR lists 133 Verilog
‘define statements 85
time stamp, checking on files 63 adding attributes and directives 91
timing analysis 278 adding probes 366
timing analysis using STA 285 black boxes 302
black boxes, instantiating 302
timing budgeting case sensitivity for Tcl Find
compile points 381 command 139
timing constraints (Legacy) 159 checking source files 33
timing exceptions, adding constraints choosing a compiler 84
after synthesis 289 creating source files 30

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
534 December 2015
Index

crossprobing from HDL Analyst ordering automatically 61


view 248 vi text editor 39
defining FSMs 311
defining state machines with parameter virtual clock, setting (Legacy) 164
and ’define 312
editing operations 35 W
extracting parameters 85
include paths, updating 65 warning messages
initializing RAMs 329 definition 34
Microsemi ACTgen macros 493 warnings
mixed language files 43 feedback muxes 339
specifying compiler directives 85 filtering 198
specifying top-level module 86 handling 207
using library extensions 40 sorting 198
Verilog 2001 Watch window 193
setting global option from the Project moving 194, 197
view 84 multiple implementations 73
setting option per file 84 resizing 194, 197
Verilog library files wildcards
using library extensions 40 effect of search scope 239
Verilog macro libraries Find command (Tcl) 139
Microsemi 492 message filter 200
Verilog model (.vmd) 380 wildcards (Find)
VHDL examples 241
adding attributes and directives 89 how they work 239
adding probes 366
black boxes 304
black boxes, instantiating 304
case sensitivity for Tcl Find
command 139
checking source file 33
constants 87
creating source files 30
crossprobing from HDL Analyst
view 248
defining FSMs 312
editing operations 35
extracting generics 87
file order in mixed designs 46
global signals in mixed designs 46
initializing RAMs with variable
declarations 332
initializing with signal declarations 330
macro libraries, Microsemi 492
mixed language files 43
specifying top-level entity 86
VHDL files
adding library 60
adding third-party package library 60
order in project file 61

Synplify Pro for Microsemi Edition User Guide © 2015 Synopsys, Inc.
December 2015 535
Index

© 2015 Synopsys, Inc. Synplify Pro for Microsemi Edition User Guide
536 December 2015

You might also like