Foreword
Preface
Book Organization
Conventions Used in This Book
Additional Resources
Feedback
Acknowledgements
Contents
List of Figures
List of Tables
Chapter 1: Introduction
1.1 ASIC Design Flow
1.2 FPGA Design Flow
1.3 Timing Constraints in ASIC and FPGA Flow
1.4 Timing Constraint Issues in Nanometer Design
1.5 Conclusion
Chapter 2: Synthesis Basics
2.1 Synthesis Explained
2.2 Role of Timing Constraints in Synthesis
2.2.1 Optimization
2.2.2 Input Reordering
2.2.3 Input Buffering
2.2.4 Output Buffering
2.3 Commonly Faced Issues During Synthesis
2.3.1 Design Partitioning
2.3.2 Updating Constraints
2.3.3 Multi-clock Designs
2.4 Conclusion
Chapter 3: Timing Analysis and Constraints
3.1 Static Timing Analysis
3.2 Role of Timing Constraints in STA
3.2.1 Constraints as Statements
3.2.2 Constraints as Assertions
3.2.3 Constraints as Directives
3.2.4 Constraints as Exceptions
3.2.5 Changing Role of Constraints
3.3 Common Issues in STA
3.3.1 No Functionality Check
3.3.2 No Check on Statements
3.3.3 Requirements to be Just Right
3.3.4 Common Errors in Constraints
3.3.5 Characteristics of Good Constraints
3.4 Delay Calculation Versus STA
3.5 Timing Paths
3.5.1 Start and End Points
3.5.2 Path Breaking
3.5.3 Functional Versus Timing Paths
3.5.4 Clock and Data Paths
3.6 Setup and Hold
3.6.1 Setup Analysis
3.6.2 Hold Analysis
3.6.3 Other Analysis
3.7 Slack
3.8 On-Chip Variation
3.9 Conclusion
Chapter 4: SDC Extensions Through Tcl
4.1 History of Timing Constraints
4.2 Tcl Basics
4.2.1 Tcl Variables
4.2.2 Tcl Lists
4.2.3 Tcl Expression and Operators
4.2.4 Tcl Control Flow Statements
4.2.4.1 Iterating over Lists
4.2.4.2 Decision Making
4.2.4.3 Tcl Loops
4.2.4.4 Tcl Procedures
4.2.5 Miscellaneous Tcl Commands
4.3 SDC Overview
4.3.1 Constraints for Timing
4.3.2 Constraints for Area and Power
4.3.3 Constraints for Design Rules
4.3.4 Constraints for Interfaces
4.3.5 Constraints for Specific Modes and Configurations
4.3.6 Exceptions to Design Constraints
4.3.7 Miscellaneous Commands
4.4 Design Query in SDC
4.5 SDC as a Standard
4.6 Conclusion
Chapter 5: Clocks
5.1 Clock Period and Frequency
5.2 Clock Edge and Duty Cycle
5.3 create_clock
5.3.1 Specifying Clock Period
5.3.2 Identifying the Clock Source
5.3.3 Naming the Clock
5.3.4 Specifying the Duty Cycle
5.3.5 More than One Clock on the Same Source
5.3.6 Commenting the Clocks
5.4 Virtual Clocks
5.5 Other Clock Characteristics
5.6 Importance of Clock Specification
5.7 Conclusion
Chapter 6: Generated Clocks
6.1 Clock Divider
6.2 Clock Multiplier
6.3 Clock Gating
6.4 create_generated_clock
6.4.1 Defining the Generated Clock Object
6.4.2 Defining the Source of Generated Clock
6.4.3 Naming the Clock
6.4.4 Specifying the Generated Clock Characteristic
6.4.5 Shifting the Edges
6.4.6 More than One Clock on the Same Source
6.4.7 Enabling Combinational Path
6.5 Generated Clock Gotchas
6.6 Conclusion
Chapter 7: Clock Groups
7.1 Setup and Hold Timing Check
7.1.1 Fast to Slow Clocks
7.1.2 Slow to Fast Clocks
7.1.3 Multiple Clocks Where Periods Synchronize in More than Two Cycles
7.1.4 Asynchronous Clocks
7.2 Logically and Physically Exclusive Clocks
7.3 Crosstalk
7.4 set_clock_group
7.5 Clock Group Gotchas
7.6 Conclusion
Chapter 8: Other Clock Characteristics
8.1 Transition Time
8.2 set_clock_transition
8.3 Skew and Jitter
8.4 set_clock_uncertainty
8.4.1 Intraclock Uncertainty
8.4.2 Interclock Uncertainty
8.5 Clock Latency
8.6 set_clock_latency
8.7 Clock Path Unateness
8.8 set_clock_sense
8.9 Ideal Network
8.10 Conclusion
Chapter 9: Port Delays
9.1 Input Availability
9.1.1 Min and Max Availability Time
9.1.2 Multiple Clocks
9.1.3 Understanding Input Arrival Time
9.2 Output Requirement
9.2.1 Min and Max Required Time
9.2.2 Multiple Reference Events
9.2.3 Understanding Output Required Time
9.3 set_input_delay
9.3.1 Clock Specification
9.3.2 -level_sensitive
9.3.3 Rise/Fall Qualifiers
9.3.4 Min/Max Qualifiers
9.3.5 -add_delay
9.3.6 Clock Latency
9.3.7 Completing Input Delay Constraints
9.4 set_output_delay
9.4.1 Clock Specification
9.4.2 -level_sensitive
9.4.3 Rise/Fall Qualifiers
9.4.4 Min/Max Qualifiers
9.4.5 -add_delay
9.4.6 Clock Latency
9.4.7 Completing Output Delay Constraints
9.5 Relationship Among Input and Output Delay
9.6 Example Timing Analysis
9.6.1 Input Delay: Max
9.6.2 Input Delay: Min
9.6.3 Output Delay: Max
9.6.4 Output Delay: Min
9.7 Negative Delays
9.8 Conclusion
Chapter 10: Completing Port Constraints
10.1 Drive Strength
10.1.1 set_drive
10.2 Driving Cell
10.2.1 set_driving_cell
10.2.1.1 Driver Cell Name
10.2.1.2 Min/Max, Rise/Fall
10.2.1.3 Library
10.2.1.4 Pin
10.2.1.5 Timing Arc
10.2.1.6 Multiplication
10.2.1.7 Scaling
10.2.1.8 Design Rules
10.2.1.9 Clock Association
10.2.1.10 Input Transition
10.2.1.11 Ports
10.3 Input Transition
10.3.1 Input Transition Versus Clock Transition
10.4 Fanout Number
10.5 Fanout Load
10.6 Load
10.6.1 Net Capacitance
10.6.2 Pin Load Adjustments
10.6.3 Load Type
10.6.4 Load Versus Fanout Load
10.6.5 Load at Input
10.7 Conclusion
Chapter 11: False Paths
11.1 Introduction
11.2 set_false_path
11.3 Path Specification
11.4 Transition Specification
11.5 Setup/Hold Specification
11.6 Types of False Paths
11.6.1 Combinational False Path
11.6.2 Sequential False Path
11.6.3 Dynamically Sensitized False Path
11.6.4 Timing False Path
11.6.5 False Path Due to Bus Protocol
11.6.6 False Path Between Virtual and Real Clocks
11.7 set_disable_timing
11.8 False Path Gotchas
11.9 Conclusion
Chapter 12: Multi Cycle Paths
12.1 SDC Command for Multi Cycle Paths
12.2 Path and Transition Specification
12.3 Setup/Hold Specification
12.4 Shift Amount
12.5 Example Multi Cycle Specification
12.5.1 FSM-Based Data Transfer
12.5.2 Source Synchronous Interface
12.5.3 Reset
12.5.4 Asynchronous Clocks
12.5.5 Large Data Path Macros
12.5.6 Multimode
12.6 Conclusion
Chapter 13: Combinational Paths
13.1 set_max_delay
13.2 set_min_delay
13.3 Input/Output Delay
13.3.1 Constraining with Unrelated Clock
13.3.2 Constraining with Virtual Clock
13.3.3 Constraining with Related Clock
13.4 Min/Max Delay Versus Input/Output Delay
13.5 Feedthroughs
13.5.1 Feedthroughs Constrained Imperfectly
13.6 Point-to-Point Exception
13.7 Path Breaking
13.8 Conclusion
Chapter 14: Modal Analysis
14.1 Usage Modes
14.2 Multiple Modes
14.3 Single Mode Versus Merged Mode
14.4 Setting Mode
14.5 Other Constraints
14.6 Mode Analysis Challenges
14.6.1 Timing Closure Iterations
14.6.2 Missed Timing Paths
14.7 Conflicting Modes
14.8 Mode Names
14.9 Conclusion
Chapter 15: Managing Your Constraints
15.1 Top-Down Methodology
15.2 Bottom-Up Methodology
15.3 Bottom-Up Top-Down (Hybrid) Methodology
15.4 Multimode Merge
15.4.1 Picking Pessimistic Clock
15.4.2 Mutually Exclusive Clocks
15.4.3 Partially Exclusive Clocks
15.4.4 Merging Functional and Test Mode
15.4.5 Merging I/O Delays for Same Clock
15.4.6 Merging I/O Delays with Different Clocks
15.5 Challenges in Managing the Constraints
15.6 Conclusion
Chapter 16: Miscellaneous SDC Commands
16.1 Operating Condition
16.1.1 Multiple Analysis Conditions
16.1.2 set_operating_conditions
16.1.3 Derating
16.2 Units
16.3 Hierarchy Separator
16.3.1 set_hierarchy_separator
16.3.2 -hsc
16.4 Scope of Design
16.4.1 current_instance
16.5 Wire Load Models
16.5.1 Minimal Size for Wire Load
16.5.2 Wire Load Mode
16.5.3 Wire Load Selection Group
16.6 Area Constraints
16.7 Power Constraints
16.7.1 Voltage Island
16.7.2 Level Shifters
16.7.3 Power Targets
16.8 Conclusion
Chapter 17: XDC: Xilinx Extensions to SDC
17.1 Clocks
17.1.1 Primary and Virtual Clocks
17.1.2 Generated Clocks
17.1.2.1 Tool-Created Generated Clocks
17.1.2.2 Generated Clocks with Nonintegral Ratio
17.1.3 Querying Clocks
17.1.3.1 -of_objects
17.1.3.2 -include_generated_clocks
17.1.4 Clock Groups
17.1.5 Propagated Clocks and Latency
17.1.6 Clock Uncertainty
17.2 Timing Exceptions
17.3 Placement Constraints
17.4 SDC Integration in Xilinx Tcl Shell
17.5 Conclusion
Bibliography
Index