Modus Ug Pmbist
Modus Ug Pmbist
Contents
List of Figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
List of Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
List of Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
About This Manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Typographic and Syntax Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Modus Documentation Roadmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Getting Help for Modus and Diagnostics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Extended Command and Message Help . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Contacting Customer Service . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Modus and Diagnostics Tutorials . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
Modus Licenses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
What We Changed for This Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
21.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
21.10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
PMBIST Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Memory Repair Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Fault Tolerance Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
Power Domain Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2
Inserting Programmable MBIST Logic . . . . . . . . . . . . . . . . . . . . . . . . . 39
Inserting PMBIST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Prerequisite PMBIST Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Genus Synthesis Solution Prerequisites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
Design Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
PMBIST Interface Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
PMBIST Reports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
3
PMBIST Pattern Generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
PMBIST Operational Planning . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Pattern Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Experiment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Testplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Algorithm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
PMBIST Program Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Single Pattern Class Programs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Design Flow into Modus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Limitations for RTL Insertion Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
4
Static Timing Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
How PMBIST Affects Static Timing in a Design . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
PMBIST Module-level Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Design Timing with PMBIST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
5
Boolean Equivalence Checking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Chip Level Insertion Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Multiple Block Merging Flows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
6
Design Verification. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
Getting to Modus PMBIST Pattern Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Simulation Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
PMBIST Patterns . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
ROM Data Load Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Design and Technology Libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Analyzing Pattern Class Simulation Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
irun to analyze_embedded_test Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
irun to CPP to analyze_embedded_test Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Special Handling of Four pin TAP controller in Simulation . . . . . . . . . . . . . . . . . . . . 164
Injecting Memory Faults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Methodology . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Changes in the Verilog Memory Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Fault Injection Control Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Understanding analyze_embedded_test Results . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Executing the Command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Working with Simulation Logs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Working with CPP Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Analyzing and Debugging PMBIST Simulation Results . . . . . . . . . . . . . . . . . . . . . . . . . 178
Simulation Environment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
PMBIST Startup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Memory Connections and Activity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
PMBIST Comparators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Determining Miscomparing Registers from Simulation Logs . . . . . . . . . . . . . . . . . . 205
A
Customizing PMBIST Memory View and Configuration Files .
209
Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Syntax Conventions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Comments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Memory View File Skeleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Configuration File Skeleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
module Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
port_alias Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
port_action Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
address_limit Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
read_delay Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
data_order Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
write_mask_binding Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
address_partition Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
wrapper Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
redundancy Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
macro Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
name Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
port_access Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
port_alias Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
port_action Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
assertion_limit Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
memory_map Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
algorithm_constraints Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
algorithm Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
testplan Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
target Group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
sharing_limit Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299
clock Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
location Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
failure_recording Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
interface_control Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
testplans Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
B
PMBIST using Core Test Language (CTL) Memory Models . .
327
CTL Memory Model Skeleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
Sample CTL Memory Model File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
C
Glossary of PMBIST Terms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
List of Figures
Figure 1-1 Programmable MBIST Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Figure 2-1 PMBIST Preview Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Figure 2-2 PMBIST Chip-level Insertion Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Figure 2-3 PMBIST Block Insertion Flow. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Figure 3-1 PMBIST Program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Figure 3-2 PMBIST Pattern Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Figure 3-3 Programmable Memory Built-In Self-Test Process Flow . . . . . . . . . . . . . . . . . 92
Figure 3-4 Custom Schedule Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Figure 3-5 Custom Scheduling Flow Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
Figure 3-6 Scheduler Main Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
Figure 3-7 Loading Design Details . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
Figure 3-8 Selecting Keys for Scheduling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Figure 3-9 Filter Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Figure 3-10 Select values for expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
Figure 3-11 A sample query . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
Figure 3-12 Preview sample query for filtering targets . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Figure 3-13 Schedule Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Figure 3-14 Warning of Scheduling Constraint Violation. . . . . . . . . . . . . . . . . . . . . . . . . 121
Figure 3-15 Creating Test Program Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Figure 3-16 Creating Test Program Flow Steps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Figure 3-17 Test-Programming Tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
Figure 3-18 Setup for Programming tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Figure 3-19 Experiment Creation tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
Figure 3-20 Test-Programming creation tab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Figure 3-21 1149 TAP Access Production Pattern Abstract View . . . . . . . . . . . . . . . . . . 131
Figure 3-22 1149 TAP Access ROM Production Pattern Abstract View . . . . . . . . . . . . . 132
Figure 3-23 Production Pattern Data Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Figure 4-1 PMBIST Timing Domain Crossings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
List of Tables
Table 2-1 JTAG Instructions and Registers to Access PMBIST Logic . . . . . . . . . . . . . . . 41
Table 2-2 PMBIST Flow Options at Insertion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Table 2-3 PMBIST attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Table 2-4 Genus attributes controlled during PMBIST insertion . . . . . . . . . . . . . . . . . . . . 46
Table 2-5 Genus attributes affecting PMBIST insertion . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Table 2-6 Memory cell/Wrapper pin usage status. [PMBIST-31] . . . . . . . . . . . . . . . . . . . 68
Table 2-7 Summary table for read_pmbist_memory_view. [PMBIST-41] . . . . . . . . . . . . . 68
Table 2-8 Summary table for algorithm constraints [PMBIST-42] . . . . . . . . . . . . . . . . . . . 70
Table 2-9 Memory Target and programmable BIST Engine Summary [PMBIST-21] . . . . 70
Table 2-10 PMBIST area overhead summary table [PMBIST-32]. . . . . . . . . . . . . . . . . . . 71
Table 2-11 PMBIST area comparison table. [PMBIST-33] . . . . . . . . . . . . . . . . . . . . . . . . 72
Table 2-12 PMBIST repair register unit status table. [PMBIST-50] . . . . . . . . . . . . . . . . . . 72
Table 2-13 PMBIST repair channel status table. [PMBIST-50] . . . . . . . . . . . . . . . . . . . . . 72
Table 2-14 Summary table of PMBIST enabled feature set [PMBIST-52] . . . . . . . . . . . . 72
Table 2-15 Summary table for add_hard_repair. [PMBIST-49] . . . . . . . . . . . . . . . . . . 73
Table 2-16 Repair Logic Summary Table [PMBIST-36] . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Table 2-17 Repair area comparison table. [PMBIST-37]. . . . . . . . . . . . . . . . . . . . . . . . . . 74
Table 3-1 createpatterns Option Relationship to Scheduling Options. . . . . . . . . . . . . . . 102
Table 3-2 Scheduling Option Value Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Table 3-3 Pattern Generation Options. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Table 3-4 Pattern File Output Directory Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
Table 3-5 Assign File Descriptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
Table 3-6 Mode Initialization Sequence Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
Table 3-7 Block and Chip Level Pattern Class Support . . . . . . . . . . . . . . . . . . . . . . . . . 107
Table 3-8 Scheduling options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Table 6-1 Design Verification Pattern Class Support . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Table 6-2 Memory Model Fault Injection Control Files . . . . . . . . . . . . . . . . . . . . . . . . . . 168
Table 6-3 PMBIST SRAM Failure Indication Timing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
List of Examples
Preface
Getting
Started Overview and
New User
Quickstart
Models
Testmodes
Guides
Test Structures
Faults
ATPG
Test Vectors
Hierarchical Test
Flow PMBIST
Diagnostics
Modus Flows
Expert
Reference Legacy GUI Stylus Common UI
Documents
Test Pattern Formats GUI Glossary
Commands Messages
❑ To view a book, double-click the desired product book collection and double-click the
desired book title in the lower pane to open the book.
2. For command and message help, use man <command_name> or man
<msgprefix>messages to display a man page with the requested information (for
example man build_model or man TSVmessages.
Click the Help or ? buttons on Modus forms to navigate to help for the form and its related
topics.
Refer to the following in the Modus: Reference: GUI for additional details:
■ “Help Pull-down” describes the Help selections for the Modus main window.
■ “View Schematic Help Pull-down” describes the Help selections for the Modus View
Schematic window.
Messages
■ Display extended help information for a message by entering one of the following
commands either directly on the command line or in the GUI Command Input field:
❑ msgHelp <message_prefix-error_number1> <message_prefix-
error_number1> ...
For example,
msgHelp TSV-001 TSV-315
Commands
■ Use help command to find all the available command lines. You can simply type help or
use help all to get the complete list. You can give help a portion of the command to find
all the commands that contain that string (for example, help fault will give you all the
commands that contain "fault" in the name; build_faultmodel, report_faults,
and prepare_fault_subset would all be included in the list along with other
commands that include "fault" in their name).
help <command_name>
Modus Licenses
Refer to “ Modus and Diagnostics Product License Configuration” in What’s New for Modus
and Diagnostics for details on product license structure and requirements.
21.11
There are no changes to this version of the document.
21.10
There are no significant changes to this version of document.
1
Overview
Introduction
Programmable Memory Built-In-Self-Test (PMBIST) logic is inserted into a design to apply
and observe patterns written into targeted memories and to record the ability of these
memories to accurately store and retrieve these data patterns under test conditions. The
Genus solution incorporates a fully integrated PMBIST component. Design planning prior to
insertion is critical to understand the features required of and specified to the PMBIST
application.
This manual describes the PMBIST insertion, pattern generation, verification, and debug.
Theses capability applies specifically to the PMBIST logic inserted within a design using
Design For Test in Genus. Topics range from feature selection of the PMBIST within Genus,
file transferring from Genus into Modus DFT solution, PMBIST pattern generation, structure
and export, and supporting design verification, debug, manufacturing test and Power-On Self-
Test (POST).
PMBIST Architecture
Figure 1-1 shows the Programmable MBIST Structure:
Algorithm FUSE
Test Access Test Access
Memory Unit Control Unit
Method(s) Method(s)
(AMU) (FCU)
Other
SIU(s)
Repair Channel
Register Unit Interface Unit FUSE
(RRU) (CIU)
Comparator
Data Compare
Unit (DCU)
Memory
Functional Functional
Logic Logic
Looking at the PMBIST structure diagram, the AMU is the interface. Not only because the
access methods connect to the AMU from a design structure point of view, but also it enables
the programming of PMBIST TDRs from an architecture point of view. The test access
interface on AMU can be viewed as a scan interface in the context of IEEE 1687. It enables
other custom macros to control the PMBIST. Potentially, it can communicate with other control
protocols through adapters. AMU can be shared across multiple SIUs which enables the
As the name indicated, SIUs generate the test sequences based on the select testplan and
apply the test sequences to the target memories. SIU also connects to a corresponding DCU
to collect any failure information. In the case of RAMs, the DCU compares the data read from
the memory against the expected data from SIU. For ROMs, a signature will be cumulated
during the test and check against the expected signature.
In the case of self-repair is requested, the RAU and RRU will be added. The RAU is used to
analyze any failure during the test and dynamically calculated the repair solution. The
generated solution can be applied to the memory by RRU. When an eFUSE/an NVM is
available for BISR, an FCU can be added to store and retrieve the repair solution to and from
the NVM. The bi-directional communicates between FCU and RRU indicates that.
Redundant row, column, row and column, and data bit repair mechanisms are supported
based on the MBIST logic options chosen at the time of insertion. Refer to redundancy
Specification in Appendix A, “Customizing PMBIST Memory View and Configuration Files” for
more information.
Fault tolerance support is limited to two options. Option one allows only 1 error per logical
memory. Option two allows only 1 error per data splitting group. The user can specify solution
groups in the fault tolerance section as part of the configuration file.
MMMC Support
PMBIST does support synthesis using Multi-Mode, Multi-Corner (MMMC) timing constraints.
When executing the add_pmbist and add_hard_repair commands, PMBIST checks for
analysis views associated with MMMC to determine if synthesis constraints for the parent
design were previously defined for Multi-Mode, Multi-Corner synthesis using the read_mmmc
command. For more details, reference to the MMMC in STA section.
Both JTAG method and direct access method allow for some level of scheduling and
algorithm selection through program load and acquisition of diagnostic failure data. Any
shared resource during insertion might limited the scheduling during pattern generation.
Basically, it is a trade-off between area and test runtime.
Prerequisite steps include defining the controlling test signal for PMBIST use, the MBIST
clocks, any PMBIST required JTAG instructions and control ports, and any utilized direct
access controls. The JTAG module can be inserted prior to or following the PMBIST
insertion.
■ Bottom-up flow
PMBIST can be inserted into portions of the final design incrementally using block-level
insertion. PMBIST insertion is performed in a design that is later instantiated one or more
times in an encompassing design. This can be performed repetitively as the design
hierarchy grows.
Prerequisite steps include defining the controlling test signal for PMBIST use, the MBIST
clocks, any PMBIST required JTAG instructions, and any utilized direct access controls.
Access mechanisms desired at the top level must be included in the block-level insertion
steps as well.
The Cadence memory views are the primary source of information describing the ports and
other related information of the memories to the PMBIST application. The Cadence memory
views can be defined at multiple levels:
■ Memory Module
❑ Liberty file representation of a memory
❑ Identifies memory blocks and provides external connections with port bindings
■ Memory Wrapper or memory module wrapper
❑ Design module encapsulating the memory module and requiring the definition of all
memory ports
■ Logical Wrapper or logical memory wrapper
❑ One-to-one relationship between memory module and logical wrapper boundary
❑ Design module encapsulating the memory module or memory wrapper with
additional discrete logic, permitting the implementation of functions such as ECC
and repair outside the memory module itself but within the targeted device
■ Multi-view Memory
❑ Logical wrapper which supports two distinct views of the encapsulated memory
❍ First view is the boundary of memory module or memory wrapper
❍ Second view is the boundary of the logical wrapper
❍ pmbist_enable_multiple_views root attribute
■ Macro View
❑ Test memories through the defined embedded memory bus
❑ Manage static and dynamic control signals
❑ Support multi-cycle access and controlled programmable pipeline
❑ Comprised of one or more physical memories not necessarily the same size in both
dimensions
Memory core test language (memory CTL, or IEEE Std 1450.6.2™-2014) is an extension of
the core test language (CTL, or IEEE Std 1450.6™-2005) that allows the description of the
test-related aspects of memory blocks. For more information refer to IEEE 1450.6.2
standards.
To create a configuration file template without performing insertion, the user can run the
PMBIST insertion in preview mode using the -preview option along with the -directory
option. The template file can be used to review configuration file content or as a basis to
further edit content.
add_pmbist -preview -directory ...
MBIST Clocking
The following scenarios illustrate different MBIST clock sources, clock hookup points, and
insertion flows. The proper definition of the clocks enables improved MBIST access checks
and flexible pattern grouping at the tester.
■ External Clock Sources, Chip- or Block-Level Insertion, Pulsed Tester Clocks
In the scenario below, a single chip or block level port is used to feed two logic domains: one
running at 100MHz and the second running at 200MHz after a PLL is used to multiply the
clock frequency. The third domain is clocked by a second chip or block level port running at
333MHz.
sysclk_1 Y domain 1
[100Mhz] g1
pll_in pllclk_1
ref_port1 PLL domain 2
pll_1 [200Mhz]
ref_port2
sysclk_2 Y domain 3
[333Mhz] g2
To enable clock source checking through the PLL blackbox (indicated by the dashed arc
between the pins), set the following attribute:
set_db pll_1/pllclk_1 .dft_controllable "pll_1/pll_in non_inverting"
Assuming that the sysclk_1 and sysclk_2 clocks in the previous scenario are connected
to free-running clock generators at the tester, two options are possible when performing
PMBIST insertion.
1. The clocks are treated independently which subsequently forces PMBIST test patterns
to be generated for each clock independently:
define_mbist_clock \
-name mbist_clk100 \
-period 10000 \
-internal_clock_source \
-hookup_pin g1/Y \
ref_port1
define_mbist_clock \
-name mbist_clk200 \
-period 10000 \
-internal_clock_source \
-hookup_pin pll_1/pllclk_1 \
-hookup_period 5000 \
ref_port1
define_mbist_clock \
-name mbist_clk333 \
-period 3000 \
-internal_clock_source \
-hookup_pin g2/Y \
ref_port2
set_db pll_1/pllclk_1 .dft_controllable "pll_1/pll_in non_inverting"
ref_port1 and ref_port2 serve as test time control ports, described in the
define_mbist_clock command, for PMBIST pattern generation and execution, must
be tester accessible and not affect the operation of the PMBIST logic.
2. All PMBIST logic is grouped for concurrent PMBIST pattern generation and execution by
referencing a single test time control port:
define_mbist_clock \
-name mbist_clk100 \
-period 10000 \
-internal_clock_source \
-hookup_pin g1/Y \
ref_port1
define_mbist_clock \
-name mbist_clk200 \
-period 10000 \
-internal_clock_source \
-hookup_pin pll_1/pllclk_1 \
-hookup_period 5000 \
ref_port1
define_mbist_clock \
-name mbist_clk333 \
-period 3000 \
-internal_clock_source \
-hookup_pin g2/Y \
ref_port1
set_db pll_1/pllclk_1 .dft_controllable "pll_1/pll_in non_inverting"
In both cases, the gates g1 and g2 must block the ability to trace the clock path to the original
source ports, sysclk_1 and sysclk_2, respectively, within the add_pmbist command
and the PMBIST DFT configuration mode. This is not usually an issue as these gates are
typically PLL blackboxes and lack of dft_controllable attributes will stop the clock
tracing at these blocks.
■ External Clock Sources, Bottom-up Insertion Flow, Pulsed Tester Clocks
In the scenario below, PMBIST insertion is done within the block1 block, and this design is
subsequently merged into the chip design where MBIST insertion is completed on the rest
of the design.
blkclk_1 domain 1
[100Mhz]
pll_in pllclk_1
PLL domain 2
pll_1 [200Mhz]
blkclk_2 domain 3
[333Mhz]
block1
sysclk_0 domain 4
[50Mhz]
The clocks for the block1 block must be defined prior to PMBIST insertion at the block level:
define_mbist_clock \
-name mbist_clk100 \
-period 10000 \
blkclk_1
define_mbist_clock \
-name mbist_clk200 \
-period 10000 \
-hookup_pin pll_1/pllclk_1 \
-hookup_period 5000 \
blkclk_1
define_mbist_clock \
-name mbist_clk333 \
-period 3000 \
blkclk_2
To enable clock source checking through the PLL blackbox (indicated by the dashed arc
between the pins), set the following attribute:
set_db pll_1/pllclk_1 .dft_controllable "pll_1/pll_in non_inverting"
Prior to PMBIST insertion and merging at the chip level, the clocks for chip and block1
must be defined:
define_mbist_clock \
-name mbist_clk50 \
-period 20000 \
sysclk_0
define_mbist_clock \
-name mbist_clk100 \
-period 20000 \
-hookup_pin pll_0/pllclk_0 \
-hookup_period 10000 \
sysclk_0
define_mbist_clock \
-name mbist_clk333 \
-period 3000 \
sysclk_2
To enable clock source checking through the PLL blackbox, set the following attribute:
set_db pll_0/pllclk_0 .dft_controllable "pll_0/pll_in non_inverting"
In some cases the clock source is internal to the design, possibly driven from an analog logic
domain in the design. In the scenario below, MBIST logic is first inserted within the
digital_core block and this block is subsequently merged into the chip design where
PMBIST insertion is completed on the rest of the design.
sysclk_1 domain 1
[100Mhz]
pll_in pllclk_1
PLL domain 2
pll_1 [200Mhz]
sysclk_2 domain 3
[333Mhz]
digital_core
chip
sysclk_1
domain 1
[100Mhz]
pll_in pllclk_1
PLL domain 2
ref_port1 pll_1 [200Mhz]
ref_port2
sysclk_2
domain 3
[333Mhz]
analog_core digital_core
The clocks for the digital_core block must be defined prior to MBIST insertion at the block
level:
define_mbist_clock \
-name mbist_clk100 \
-period 10000 \
sysclk_1
define_mbist_clock \
-name mbist_clk200 \
-period 10000 \
-hookup_pin pll_1/pllclk_1 \
-hookup_period 5000 \
sysclk_1
define_mbist_clock \
-name mbist_clk333 \
-period 3000 \
sysclk_2
To enable clock source checking through the PLL blackbox (indicated by the dashed arc
between the pins), set the following attribute:
set_db pll_1/pllclk_1 .dft_controllable "pll_1/pll_in non_inverting"
When the sysclk_1 and sysclk_2 clocks are connected to free-running oscillators in the
analog domain, you have two options for performing PMBIST insertion at the chip level.
1. The clocks are treated independently which subsequently forces PMBIST test patterns
to be generated for each clock independently:
define_mbist_clock \
-name mbist_clk100 \
-period 10000 \
-internal_clock_source \
-hookup_pin digital_core/sysclk_1 \
ref_port1
define_mbist_clock \
-name mbist_clk200 \
-period 10000 -internal_clock_source \
-hookup_pin digital_core/pll_1/pllclk_1 \
-hookup_period 5000 \
ref_port1
define_mbist_clock \
-name mbist_clk333 \
-period 3000 \
-internal_clock_source \
-hookup_pin digital_core/sysclk_2 \
ref_port2
set_db digital_core/pll_1/pllclk_1 .dft_controllable \
"digital_core/pll_1/pll_in non_inverting"
ref_port1 and ref_port2 serve as test time control ports, described in the
define_mbist_clock command, for PMBIST pattern generation and execution, must
be tester accessible and not affect the operation of the PMBIST logic.
2. All PMBIST logic is grouped for concurrent PMBIST pattern generation and execution by
referencing a single test time control port:
define_mbist_clock \
-name mbist_clk100 \
-period 10000 \
-internal_clock_source \
-hookup_pin digital_core/sysclk_1 \
ref_port1
define_mbist_clock \
-name mbist_clk200 \
-period 10000 \
-internal_clock_source \
-hookup_pin digital_core/pll_1/pllclk_1 \
-hookup_period 5000 \
ref_port1
define_mbist_clock \
-name mbist_clk333 \
-period 3000 \
-internal_clock_source \
-hookup_pin digital_core/sysclk_2 \
ref_port1
set_db digital_core/pll_1/pllclk_1 .dft_controllable \
"digital_core/pll_1/pll_in non_inverting"
2
Inserting Programmable MBIST Logic
Inserting PMBIST
Depending upon the flow you choose, some PMBIST-specific input files are required prior to
inserting PMBIST in a design:
■ The PMBIST memory view file
■ The PMBIST configuration file
■ The PMBIST interface files
Other input files are required regardless of the selected flow: the memory module Liberty files
and the design description. Finally, certain Genus Synthesis Solution commands, attributes,
and constraints may be necessary to ensure proper insertion and controllability. The insertion
command itself must be constructed based on the prerequisites and the chosen design flow.
The configuration file contains the directives that control the insertion of PMBIST logic into
the netlist. It allows control over the characteristics of the PMBIST AMU (Algorithm Memory
Unit), SIU (Sequence Iterator Unit) and target memory collars, and the assignment of SIU to
target memories. When hard repair is requested, a separate configuration file is used to
control the characteristics of the PMBIST FCU (FUSE control Unit) and CIU (Channel
Interface Unit). Refer to Appendix A, “Customizing PMBIST Memory View and Configuration
Files” for more details.
You must define the test signal used by PMBIST using the define_test_mode command
is required. Use the define_dft_cfg_mode command to describe this to Genus. If the test
signal is actually the decode of several mode control pins, a DFT configuration mode for
PMBIST use with the define_dft_cfg_mode command. Refer to the add pmbist
command for more information.
If you use a JTAG macro to access the PMBIST logic, define the JTAG instruction register and
the instructions used by PMBIST with the define_jtag_instruction_register and
define_jtag_instruction constraints, respectively. The JTAG macro must be built with
the PMBIST-specific user-defined instructions and their respective test data registers. The
test data registers inserted during PMBIST are required to access the PMBIST controllers.
Depending upon the desired level of PMBIST diagnostics, redundancy analysis, self-repair,
and the presence of read-only memories, additional user-defined instructions might be
required. You must specify these instructions prior to inserting PMBIST logic. The instructions
and registers have default names as shown in Table 2-1 on page 41. To change the default
names, use the define_jtag_instruction constraints. The new instruction names must
also be specified to the add_pmbist command.
Note: You must not specify the -private option when you use the
define_jtag_instruction command to define any PMBIST-related instruction.
When the PMBIST logic is accessed and controlled via a JTAG macro which is IEEE 1149.x
compliant, you must insert the JTAG macro into your design. You can do so prior to or
following PMBIST logic insertion.
Use the -connect_to_jtag option of the add_pmbist command to indicate that the
JTAG macro is already present in the design and the PMBIST logic should connect to it when
inserted.
In situations where the JTAG macro is not present in the design when PMBIST is inserted at
the top design level, you must identify the TAP connections for the PMBIST logic using either
read_dft_jtag_boundary_file or define_jtag_tap_port.
When you use the direct access mechanism to access PMBIST, the required design ports
must already exist and be defined prior to executing add_pmbist. Use the define_
pmbist_direct_access command to define the ports. If you use the direct access
mechanism without the JTAG access mechanism, you must specify the
-direct_access_only option with the add_pmbist command to insert PMBIST.
You must define all MBIST clock sources using the define_mbist_clock constraint prior
to using them with the add_pmbist command. These mbist_clock objects are referenced
in the add_pmbist configuration file target sections using the clock Specification statement.
You can find the objects created by the define_mbist_clock constraints in:
/designs/design/dft/mbist/mbist_clocks
One Genus Synthesis Solution attributes may also require attention: instance attribute
pmbist_instruction_set. In a bottom-up design flow, when a block which has PMBIST
is instantiated into a higher level design, the user can identify the set of PMBIST instructions
which should be used with each instance.
Design Flows
The desired design flow is inferred by the PMBST insertion commands by the use of the
following add_pmbist command line options. Only the valid combinations are listed in
Table 2-2. The unlisted combinations cause an error during execution.
In the following design flow diagrams, the step labels are consistent. An explanation of these
step labels when relevant to the PMBIST insertion is included after each flow.
Other than the command line options, Genus attributes created for PMBIST, attributes
controlled by PMBIST, and attributes used by PMBIST can also affect the PMBIST insertion
flows. The attributes created for PMBIST are shown in the following table:
Affects
Attribute Comment
flow(s)
dft_pmbist_jtag_timing_mode_name JTAG flow SDC constraints for PMBIST
logic are added to this timing
mode for JTAG flow.
dft_pmbist_mda_timing_mode_name PMDA flow SDC constraints for PMBIST
logic are added to this timing
mode for PMDA flow.
dft_rtl_insertion RTL flow Enables RTL flow for PMBIST.
insert_pmbist_without_liberty_files All flows enables the PMBIST insertion
without memory liberty files.
mbist_enable_shared_library_domain_set All flows A way to indicate that a set of
library domains can be shared
as one domain for PMBIST
purpose.
pmbist_instruction_set Multi-block allows to bind the PMBIST
JTAG flows inserted block instance to a
particular instruction set.
Different instruction sets can be
used to bind two instances of a
same block.
pmbist_enable_multiple_views All flows Allows the logical wrapper (LW)
and memory wrapper/memory
(MW) specification of the same
memory to be tested.
pmbist_hri_async_reset All flows Specifies the pin or port to be
with used to asynchronously reset
hard-repair hard repair interface logic for
enabled PMBIST.
pmbist_use All flows Specifies how the test signal
should be used to control the
PMBIST logic during retention
test and ATPG.
To ensure a success insertion of PMBIST, the controlled attributes are shown in the following
table. If an attribute was set to an unexpected value, the tool will set the attribute to the
expected value for PMBIST insertion and restore it back to its original value when PMBIST
insertion is successfully complete.
Note: In the case of RTL flow, please pay extra attention to the attribute might affecting the
naming of the design. PMBIST try to control all the known attributes under the cover. As the
new attribute introduced or discovered, the list of the controlled attributes might grow.
The attributes used for PMBIST insertion are shown in the following table. In this case,
PMBIST only uses value without controlling it.
The bottom-up flow enables progressive insertion and verification of DFT structures within
each specific design partition as it is created. The methodology first requires executing the
PMBIST flow shown in Figure 2-3 on page 60 with block-level insertion of structures and
excluding insertion of boundary-scan or JTAG_Macro logic. The
write_dft_pmbist_interface_files command will produce interface files to be used
as input for the next block-level PMBIST flow. The top-level iteration includes insertion of
boundary-scan or JTAG_Macro logic to stitch together the entire design and the need to
As each PMBIST-inserted block is included in a higher level of design hierarchy, you can
re-assign the JTAG-accessed PMBIST instruction set for each instance of the block using the
pmbist_instruction_set instance attribute. This requires individual scheduling of
PMBIST logic in each of the unique instruction sets. It also allows the blocks to be merged
into one or more instruction sets only at the top level of the design.
The module file names produced by block-level insertion must be controlled with the
-module_prefix option. This option avoids overwriting existing module files over the
course of successive iterations. For example, specify -module_prefix block1 to append
the default name of tem with temblock1.
Flows
■ PMBIST Preview Flow on page 50
■ PMBIST Chip-level Insertion Flow on page 54
■ PMBIST Block Insertion Flow on page 60
Note: The PMBIST flows are demonstrated in the Rapid Adoption Kit (RAK) for
Programmable Memory Built-In-Self-Test (PMBIST). To download the RAK for PMBIST:
a. Go to http://support.cadence.com
Start
Read libraries, HDL files, SDC
Elaborate
Load DB data
The PMBIST preview flow is used to enable the generation of the memory view file (if not
provided by the memory vendor), PMBIST configuration file, and (to perform) early phase
analysis of a post-elaborate design. Refer to the labs in the PMBIST RAK for the
demonstration of the PMBIST preview flow.
1. Specify the test signal(s) that control PMBIST.
❑ Define test-related test signal(s):
define_test_mode -name test_signal_name...
❑ Use pmbist_use attribute to specify how the test signal should be used to control the
Programmable MBIST logic during ATPG. (Link reference to attribute)
set_db pmbist_use ...
for example:
set_db test_signal:TopBlock/test_enable .pmbist_use test_rambypass
❑ In case of low power clock gating being utilized, use the following attribute to specify
the specific test-control signal used for clock-gating instances in the design.
PMBIST utilizes the following attribute and uses it for connecting to the test pins of
clock-gating instances within the PMBIST logic.
set_db lp_clock_gating_test_signal test_signal ...
2. If the test signal is the decode of several mode control pins, define DFT configuration
mode(s) for PMBIST.
define_test_mode -name test_signal_name...
define_shift_enable -name test_signal_name ...
...
define_dft_cfg_mode -name pmbist_cfg_mode ...
3. Define the MBIST clocks prior to referencing them in the PMBIST configuration file.
define_mbist_clock -name mbist_clock ...
4. Define PMBIST access method(s). Either JTAG access, direct access, or both
❑ Define the PMBIST direct access interface pins or ports if direct access to the
PMBIST logic is desired.
define_pmbist_direct_access -function string ...
For more information on the function of the interface pins, refer to and the description
of the define_pmbist_direct_access command.
❑ Define the JTAG instruction register and PMBIST-specific instructions (see Table 2-1
on page 41) if JTAG access to PMBIST is desired.
define_jtag_instruction_register -name string ....
define_jtag_instruction -name string ...
...
5. Generate the PMBIST memory view template using the preview option.
read_pmbist_memory_view -preview ...
Verify the memory view file, making corrections and modifications as necessary to
correctly reflect actual memories. Use the warning and error message(s) in the log file
related to read_pmbist_memory_view to make changes where information is missing or
misunderstood.
8. Run DFT rule checker prior to insertion.
check_dft_rules...
The configuration file controls how Programmable MBIST logic being inserted into the
design. Refer to target Group in Appendix C, “Customizing PMBIST Memory View and
Configuration Files,” for more information.
13. Read previously saved DB data.
To create final configuration file, conditional experiment(s) are needed by loading
previously saved DB data file. It is recommended to check tables, warning, error reported
in the log file and go back to update configuration file step. Refer to “PMBIST Reports”
on page 68 for more information about tables generated by PMBIST.
14. Create the final configuration file.
The final configuration file lists the targeted memory instances or modules and their test
options. Refer to Appendix C, “Customizing PMBIST Memory View and Configuration
Files,” for details.
RTL GATE
FLOW FLOW Start
Read libraries, HDL files, SDC Task added
Set ’dft_rtl_insertion’ to true
Elaborate Optional task
Define test signals &
PMBIST configuration mode(s) PMBIST task
For PMBIST, the RTL flow and gate flow are the same for most of the steps. Looking at the
flow diagram, the RTL flow is indicated by the red arrows which goes through a set of steps.
On the other side, the gate flow is indicated by the black arrows.
The PMBIST chip-level insertion flow can be used to insert PMBIST logic in the entire design
at one point in time as part of top-down test synthesis flow. It can also be used as final
integration of the BISTed blocks at chip-level when a multi-block bottom-up approach is taken.
Refer to Lab 1 and 2 in PMBIST RAK for demonstration of the top-down flow using JTAG and
direct access methods. Refer to Lab 3 in PMBIST RAK for demonstration of chip-level
processing in a multi-block bottom-up flow.
Both RTL and gate flow start with loading libraries, HDL files, and design constraints. Before
test control signals are defined, all the libraries, design files, SDC constraints are loaded, and
the design is elaborated with proper attributes.
1. (Required for RTL flow only) Set the root-level attribute dft_rtl_insertion to true
to enable the PMBIST RTL flow. Setting the attribute to true allows the tool to keep track
of the changes to the design. Later in the flow, the user-supplied RTL files will be
annotated with the RTL constructs for the inserted JTAG macro and MBIST structures
using the write_dft_rtl_model command.
set_db dft_rtl_insertion true
❑ Use pmbist_use attribute to specify how the test signal should be used to control the
Programmable MBIST logic during ATPG.
set_db <obj> .pmbist_use ...
For example:
set_db test_signal:TopBlock/test_enable .pmbist_use test_rambypass
❑ In case hard repair is enabled, use the following attribute to specify the specific
test-control signal to asynchronously reset hard repair interface logic for
programmable MBIST.
❑ In case of low power clock gating being utilized, use the following attribute to specify
the specific test-control signal used for clock-gating instances in the design.
PMBIST utilizes the following attribute and uses it for connecting to the test pins of
clock-gating instances within the PMBIST logic.
set_db <obj> .lp_clock_gating_test_signal test_signal ...
3. If the test signal is the decode of several mode control pins, define DFT configuration
mode(s) for PMBIST.
define_test_mode -name test_signal_name ...
define_test_mode ...
...
define_dft_cfg_mode -name pmbist_cfg_mode ...
4. Define the MBIST clocks prior to referencing them in the PMBIST configuration file.
define_mbist_clock -name mbist_clock ...
For more information about the function of the interface pins, refer to the description
of the define_pmbist_direct_access command.
❑ Define the JTAG instruction register and PMBIST-specific instructions (see Table 2-1
on page 41) if JTAG access to PMBIST is desired.
define_jtag_instruction_register -name string ....
define_jtag_instruction -name string ...
...
Verify the memory view file, making corrections and modifications as necessary to
correctly reflect actual memories. Refer to the warning and error message(s) in the log
file of the read_pmbist_memory_view command to update the memory view files as
required (refer to the later PMBIST report section).
7. (Optional) Read PMBIST interface files required for multi-block bottom-up flow.
read_dft_pmbist_interface_files -directory string ...
Note: PMBIST chip-level insertion flow could either serves as a top-down insertion flow
excluding execution of read_dft_pmbist_interface_files, or a chip-level iteration in
multi-block bottom-up flow using read_dft_pmbist_interface_files to import interface
files form all of the instantiated block(s) in which PMBIST was previously inserted. For
more information about the generation of PMBIST interface files at block-level, refer to
write_dft_pmbist_interface_files step in Figure 2-3 on page 60.
In case hard repair is enabled, the channel information is imported into the top-level
when reading the PMBIST interface files.
8. (Optional) Insert JTAG or boundary scan logic if JTAG access has been selected.
❑ Insert boundary scan logic.
add_jtag_boundary_scan ...
For more information, refer to section Inserting a JTAG Macro in Genus Design for
Test Guide for Common UI.
9. Insert PMBIST logic.
When a JTAG macro is already instantiated and you also optionally want to use the direct
access mechanism, use
add_pmbist -config_file config_file -connect_to_jtag...
When a JTAG macro will be inserted after PMBIST insertion and you also optionally want
to use the direct access mechanism, use
add_pmbist -config_file config_file -dont_create_pmbist_ports...
For chip-level processing, either in a bottom-up flow or a top-down flow, the memory view
information of the targeting NVM should has been processed when reading the Cadence
memory view files.
When processing at the chip-level in a bottom-up flow, the processed blocks with hard
repair enabled should already have channels created and connected to the repair
interface on the block boundary. The information of the block-level channels is imported
to the top-level by reading the PMBIST interface files. The add_hard_repair command
will use the specified configuration file to create the FCU, CIU, and stitch the repair
channels, NVM, and all the building blocks together.
When processing at the chip-level in a top-down flow, the FCU, CIU, and repair channels
will be created. The tool will stitch all the building blocks together as part of the insertion.
11. Run DFT rule checker.
check_dft_rules ...
12. (Required for RTL flow only) Write DFT RTL models.
write_dft_rtl_model -directory ...
Writes out the RTL models of the design in Verilog when the DFT RTL insertion flow has
been enabled.
Note: The updated Verilog will include Hierarchical reference to indicate the updated
connection and structure. Comments will be added to indicate a change made by the
tool. For now, limit the use of RTL flow along with the hard repair feature.
13. Write PMBIST interface files and testbench to allow early verification of inserted PMBIST
logic. Full PMBIST verification is recommended to optimize the simulation runtime.
write_dft_pmbist_interface_files -directory ...
write_dft_pmbist_testbench -directory ...
In the RTL flow, an additional option, -rtl, should be used for both
write_dft_pmbist_interface_files and write_dft_pmbist_testbench commands to
generate the interface files and PMBIST testbenches.
write_dft_pmbist_interface_files -rtl -directory ...
write_dft_pmbist_testbench -rtl -directory ...
Note: Configure and connect scan chains post PMBIST insertion to include PMBIST
logic as part of design scan structure. For more information, refer to section Running the
Scan Configuration in Genus Design for Test Guide for UICommon.
15. Write PMBIST interface files and the Verilog test benches and simulation scripts that
allow verification of the inserted PMBIST logic.
PMBIST interface files represent an abstract model of the current PMBIST insertion
process, supporting not only multi-block bottom-up flow for incremental PMBIST
insertion but also the generation of patterns to exercise the PMBIST logic from Modus
create_embedded_test command.
16. Generate the Verilog test benches and simulation scripts that allow verification of the
inserted PMBIST logic.
write_dft_pmbist_testbench ...
The PMBIST block insertion flow is used to insert PMBIST logic into portions of the final
design incrementally using block-level insertion. This can be performed repetitively as the
design hierarchy grows until the final integration at chip-level. Refer to Lab 3 in PMBIST RAK
for the demonstration of the PMBIST block-level insertion flow.
1. (Required for RTL flow only) Set the root-level attribute dft_rtl_insertion to
true, to enable the PMBIST RTL flow. Setting the attribute to true allows the tool to keep
track of the changes to the design. The user-supplied RTL files will be annotated with the
RTL constructs for the inserted JTAG macro and MBIST structures using the
write_dft_rtl_model command.
set_db dft_rtl_insertion true
❑ Use pmbist_use attribute to specify how the test signal should be used to control the
Programmable MBIST logic during ATPG.
set_db pmbist_use ...
❑ In case hard repair is enabled, use the following attribute to specify the specific
test-control signal to asynchronously reset hard repair interface logic for
programmable MBIST.
set_db <obj> .pmbist_hri_async_reset {<port> active_high|active_low}
❑ In case of low power clock gating being utilized, use the following attribute to specify
the specific test-control signal used for clock-gating instances in the design.
PMBIST utilize the following attribute and allow Genus Synthesis Solution
connecting to the test pins of clock-gating instances.
set_db lp_clock_gating_test_signal test_signal ...
3. If the test signal is the decode of several mode control pins, define DFT configuration
mode(s) for PMBIST.
define_test_mode -name test_signal_name...
define_test_mode ...
...
define_dft_cfg_mode -name pmbist_configuration_mode....
4. Define the MBIST clocks prior to referencing them in the PMBIST configuration file.
define_mbist_clock -name mbist_clock ...
Note: If the JTAG access method has been selected, define JTAG TCK as an MBIST
clock with -is_jtag_tck option.
define_mbist_clock -name mbist_jtag_tck -is_jtag_tck ...
For more information about the function of the interface pins, refer to the description
of the define_pmbist_direct_access command.
❑ Define the JTAG instruction register and PMBIST-specific instructions (see Table 2-1
on page 41) if JTAG access to PMBIST is desired.
define_jtag_instruction_register -name string ....
define_jtag_instruction -name string ...
...
Verify the memory view file, making corrections and modifications as necessary to
correctly reflect actual memories. Refer to the warning and error message(s) in the log
file of the read_pmbist_memory_view command to update the memory view files as
required (refer to the later PMBIST report section).
7. (Optional) Read PMBIST interface files.
read_dft_pmbist_interface_files ‘-directory string ...
For block-level processing, the add_hard_repair command can be used to create the
block-level repair channels based on the specification from the configuration file.
10. Run DFT rule checker.
check_dft_rules...
11. (Required for RTL flow only) Write DFT RTL models.
write_dft_rtl_model -directory ...
Writes out the RTL models of the design in Verilog when the DFT RTL insertion flow has
been enabled.
Note: The updated Verilog will include Hierarchical reference to indicate the updated
connection and structure. Comments will be added to indicated a change made by the
tool. For now, limit the use of RTL flow with the hard repair feature.
12. Write PMBIST interface files and testbench to allow early verification of inserted PMBIST
logic. Full PMBIST verification is recommended to optimize the simulation runtime.
write_dft_pmbist_interface_files -directory ...
write_dft_pmbist_testbench -directory ...
In the RTL flow, an additional option, -rtl, should be used to for both
write_dft_pmbist_interface_files and write_dft_pmbist_testbench commands to
generate the interface files and PMBIST testbenches..
write_dft_pmbist_interface_files -rtl -directory ...
write_dft_pmbist_testbench -rtl -directory ...
Note: Configure and connect scan chains post PMBIST insertion to include PMBIST
logic as part of design scan structure. For more information, refer to section Running the
Scan Configuration in Genus Design for Test Guide for Common UI.
15. Write PMBIST interface files.
write_dft_pmbist_interface_files -directory string ...
In case hard repair is enabled, additional interface files are written to the specified directory.
The files are named as follows:
■ design_fcu_pattern_control.txt contains the block’s PMBIST external
interface and pattern generation controls derived from the configuration file.
■ design_fcutpn_tdr_map.txt identifies the FCUTPN TDR definition.
PMBIST Reports
Prior to PMBIST insertion, the read_pmbist_memory_view command is used to load the
memory view files. After the read_pmbist_memory_view command has completed
analyzing the design memories and prior to the PMBIST-41 message, the tool reports a list
of all detected memory modules with the set of ports on each module and their disposition
during PMBIST. You can find these tables by searching for the PMBIST-31 message ID. Most
categories in the report are self-explanatory. Table 2-6 lists the report column headings and
associated data.
Memory/Wrapper
Base Port Name/Function Polarity Remarks
Port Name
You can find the summary table for read_pmbist_memory_view (see Table 2-7) by
searching for the PMBIST-41 message ID. This table indicates the status of the
read_pmbist_memory_view after processing the Liberty files and PMBIST memory view
file. It indicates if any problems exist with the memories targeted for PMBIST.
The Remarks category is intended to summarize the detailed action of the read memory
view.
■ Processed indicates that memory specifications have been successfully processed for
this instance.
■ Missing indicates that required instance exists in the design but missing in the supplied
input memory view file.
■ Already Processed indicates that memory instance had already been successfully
processed in previous call of read_pmbist_memory_view command. You need to
remove existing specification if overwriting is desired.
■ Failed indicates that error occurred and read_pmbist_memory_view failed for this
instance.
■ Examined indicates that memory specifications have been examined for this instance.
But, the memory view specifications have not been updated to Genus Synthesis Solution
since error exists for some other memory.
■ Unused in design indicates that some memory is specified in the view file. Its
corresponding liberty file also exists. But there is no instance of this memory cell in the
design.
■ Ignored indicates that some memory is specified in the view file. Its corresponding
liberty file does not exist and there are no instances of this in the design. If there are
some instances of this in the design then the status will be Failed instead of Ignored.
Programmable MBIST logic is created and inserted using add_pmbist command. Each time
you invoke the add_pmbist command, the following information is generated:
■ Status reports of the insertion process (if automatic insertion was performed)
Four types of tables are generated in the Genus Synthesis Solution log file. After the
command has completed the insertion, it reports a list of all detected memory instances and
any action taken against those memory instances and algorithm constraints. You can find the
Summary table for 'algorithm constraints' (see Table 2-8) by searching for the message
PMBIST-42 ID. Refer to “algorithm_constraints Specification” on page 277 in Appendix A,
“Customizing PMBIST Memory View and Configuration Files”for more details. Table 2-8 lists
the report column headings and associated data.
You can find the programmable BIST Engine Summary table (see Table 2-9) by searching for
the PMBIST-21 message ID. Most categories in the report are self-explanatory. Table 2-9
lists the report column headings and associated data.
Table 2-9 Memory Target and programmable BIST Engine Summary [PMBIST-21]
full path name {Target, {Libcell, full path name full path name full path name
Ignore, Memory Wrapper,
Merged Black-box, Logical Wrapper,
Merged ILM, Macro Interface,
Merged Libcell, Multiple View,
Checked and Merged} Block Instance}
■ Checked and Merged indicates that a block with PMBIST previously inserted was
successfully merged into the design as a complete netlist. Consistency checking against
the corresponding interface files has been done as part of the merging.
The Memory Module/Block Class category is intended to summarize the class of the
memory/block instance. For Memory Module/Block Class, you can find the following
comments:
■ Libcell indicates that an memory libcell is being targeted for PMBIST.
■ Memory Wrapper indicates that an memory wrapper is being targeted for PMBIST. It
represents a PMBIST overlay at the memory Liberty file level.
■ Logic Wrapper indicates that a logic wrapper is being targeted for PMBIST. It
represents a PMBIST overlay at a hierarchical design level.
■ Macro Interface indicates that a macro interface is being targeted for PMBIST. A
test interface within the core or hierarchical module will be used to access the memories.
■ Multiple View indicates that two independent views of a given memory instance
where data width and some controls may vary, but address width is consistent. Only one
view can be targeted at a time.
■ Block Instance indicates that a block with PMBIST previously inserted was
successfully merged into the design for this instance. Only boundary level integration
consistency checks could be accomplished.
You can also find the area summary tables (see Table 2-10 and Table 2-11) by searching for
the PMBIST-32 and PMBIST-33 message IDs. The table associated with the PMBIST-32
message ID reports the area of the various blocks inserted by the add_pmbistadd_pmbist
command. This table is library domain aware. For each library domain in which PMBIST
inserts some logic, the tool generates a table.
module name type of module number of instances of area of instances of this particular
this particular module module
Table 2-11 associated with the PMBIST-33 message ID compares the design area against
the total PMBIST logic area inserted by the add_pmbist command. This table takes into
account the total PMBIST logic area of all affected library domains.
initial design area PMBIST logic area final design area after PMBIST insertion
Amu Instance Siu Instance Mbist Clock Domain Repair Register Unit Memory Instance
Instance name Instance name Defined MBIST clock Instance name of RRU Target memory
domain name
You can find the summary table for repair channel status by searching for the PMBIST-51
message ID. The table associated with the PMBIST-51 message ID reports the status of the
repair channels includes the channel number, channel length, and its corresponding RRU
instance.
You can find the summary table of PMBIST enabled feature set by searching for the
PMBIST-52 message ID. The table associated with the PMBIST-52 message ID reports all
the enabled features for each target instance.
You can find the summary table for add_hard_repair by searching for the PMBIST-49
message ID. The table associated with the PMBIST-49 message ID reports the summary of
the hard repair status.
■ Mr Memories possessing one or more read-only ports (Mr ROM).
■ Krw Memories possessing one or more ports used for reading and writing.
■ MrNw Memories possessing one or more read-only ports (Mr) and one or more
write-only ports (Nw).
■ MrNwKrw Memories possessing one or more read-only ports (Mr), and one or more
write-only ports (Nw), and one or more ports used for reading and writing (Krw).
Channel index Instance name Previous channel Length of a Total length {checked and
number number from channel of the Merged Block,
block-level processing segment channel Repair Register
Unit,
Merged
Black-box,
Merged ILM
}
You can find the area information of the added repair logic by searching for the PMBIST-36
and PMBIST-37 message IDs. The table associated with the PMBIST-36 message ID
reports the area of the various blocks inserted by the add_hard_repair command. This
table is library domain aware. For each library domain in which PMBIST inserts repair logic,
the tool generates a table.
■ Checked and Merged Block indicates that a block with PMBIST previously inserted
was successfully merged into the design for this instance.
■ Repair Register Unit indicates the RRU inserted in current design during
add_pmbist.
■ Merged Black-box indicates that a block with PMBIST previously inserted was
successfully merged into the design as a blackbox for this instance.
■ Merged ILM indicates that a block with PMBIST previously inserted was successfully
merged into the design as an interface logic model (ILM) for this instance.
Module Name Module Type Number of Instances Area of All Instances Slack (ps)
module name type of module number of instances of area of instances of this Slack
this particular module particular module
The table associated with the PMBIST-37 message ID compares the design area against the
total PMBIST repair logic area inserted by the add_pmbist command. This table takes into
account the total PMBIST repair logic area of all affected library domains.
initial design area Repair logic area Final design area with repair logic in total
3
PMBIST Pattern Generation
This chapter describes the Modus programmable memory built-in self-test pattern
generation. The pattern generation capability applies specifically to the programmable
memory built-in self-test logic inserted within a design using Design For Test in Genus
Synthesis Solution. Topics range from transferring the design from Genus into Modus,
programmable memory built-in self-test pattern generation, structure and export, and
supporting design verification and manufacturing test.
Programs
PMBIST programs can be developed to target the following:
■ Manufacturing Test (MFGT)
■ Power-On Self-Test (POST)
■ Mission-Mode Self-Test (MMST)
Manufacturing Test (MFGT) will have programs that are utilized during the design's
manufacturing process and targeting the Automatic Test Equipment (ATE). These are usually
geared to stress the memories in the design and assure highest product quality. This could
include the stressing of the memories with advanced testplans while analyzing the results and
calculating a repair solution. This would be a Redundancy Analysis Pattern Class, then
applying that solution to the Non-Volatile Memory (NVM) macro. This would be a Repair
Pattern class. This is the primary application of test programs.
Power-On Self-Test (POST) will have a program that has been designed to bring the
design up to an operational state when powered on. This will typically include reading of the
NVM and the propagation of that solution back to the memory repair registers and some
fundamental test experiments (if desired).
Mission-Mode Self-Test (MMST) will have a program that will step through its experiments
to assure that an accumulated quality level is met. Each experiment would need to meet the
available time windows in the functional operation of the design which allows test to occur.
Pattern Classes
The PMBIST pattern classes can be developed to target the following type of test:
■ Production
■ Redundancy Analysis
■ Fault Tolerance
■ Diagnostics
■ Repair
By default, experiments are created within Modus using the 1149_patt test mode for JTAG
access, and the mda test mode for PMDA access. The experiment name can be overridden
using the -customexperiment option. clock-source refers to a design level port name.
If MBIST clock domains are defined by using the -domain clock_domain option on the
define_dft mbist_clock command during insertion, then the clock-source mentioned
in the descriptions below is replaced with the clock_domain.
Production
Are standard PMBIST testplan(s) with no special internal PMBIST hardwired capability
enabled, (i.e. Redundancy Analysis, Fault Tolerance Analysis, Diagnostics Analysis). They
are setup to run one or more testplans created and defined as part of the add_pmbist
command's configuration file to include one or more user defined or predefined algorithm.
These patterns are the primary memory testing vehicle for PMBIST in a design.
❑ Example: MBIST_ATE_PROD_2_ref_clka_100_0000MHz
■ PMDA - MBIST_ATE_DIRECTACCESS_1
Redundancy Analysis
Are the encapsulation of Production Patterns within the prologue and epilogue testplans
which enable and disable the internal failure analysis capability based on the redundancy
defined to the PMBIST application. This analysis is done with at-speed observation of failures
coming from the application of PMBIST testplans which are operating on the targeted
memory (a memory which is scheduled). The analysis will only be applied to memories which,
has redundancy capability within it and that redundancy which was defined to the application
as part of the memory model that was read into the PMBIST flow. Other memories that do not
have redundancy capability or its redundancy capability defined in its memory model will still
have the testplans selected applied to them, but they will run them as a production pattern
class, since no analysis can occur. These patterns are the building block patterns for both soft
and hard repair for PMBIST in a design.
❑ integer2 is the SIU number from the first target running in the first testplan in the
experiment.
❑ Example: MBIST_ATE_JTAG_REDUNDANCY_0_0
■ PMDA - MBIST_ATE_PMDA_REDUNDANCY_1
Fault Tolerance:
Are the encapsulation of Production Patterns within the prologue and epilogue testplans
which enables and disables the internal failure analysis capability based off the ECC word
setup in the solution group define to the PMBIST product as part of the add_pmbist
command's configuration file. This pattern class requires the targeted memories to have a
level of ECC across the logical word of the memory(s). There is no check of the logic to assure
that ECC is available but operates on the assumption that the user understands this
requirement and creates a PMBIST pattern that leverages this technology. Currently these
patterns will tolerate a single bit failure in the defined solution group. These patterns are
special patterns for designs that have ECC around their memories and have chosen this
solution over memory redundancy or conjunction with the redundancy analysis of the
memories.
When scheduling fault tolerance patterns, the following rules are enforced:
■ Shared DCU can only execute one target per time
This can be overridden by specifying enable_group_analysis in the configuration
file used by add_pmbist during insertion, and by specifying -enablegroupanalysis
yes to create_embedded_test.
■ For JTAG patterns, different clock sources cannot be grouped together
■ For PMDA patterns, different clock sources can be grouped together
■ Request latency must be the same for all targets on an engine
■ Cannot do fault tolerance on logical wrappers of a multiple view memory
■ Cannot have different targets on the same SIU executed together if fault tolerance is
shared
❑ integer1 is the AMU number from the first target running in the first testplan in the
experiment.
❑ integer2 is the SIU number from the first target running in the first testplan in the
experiment.
❑ Example: MBIST_ATE_FAULT_TOLERANCE_0_0
■ PMDA - MBIST_ATE_PMDA_FAULT_TOLERANCE_1
Diagnostics:
Are the looping execution of a Production Patterns to gather the specific failure occurrences
in the memories being targeted. Each loop of the Production Patterns captures a failure
location in the memory. The number of loops of the patterns is determine by the user
specification of the -failurelimit positive_integer option to
create_embedded_test and has no relationship to the possible number of failure that may
have occurred in the memory. These patterns are a special pattern class to characterize the
failure within the targeted memories and are not needed for repair, but when used with
analyze_embedded_test can create a failing bit map of the memory.
❑ integer1 is the AMU number from the first target running in the first testplan in the
experiment.
❑ integer2 is the SIU number from the first target running in the first testplan in the
experiment.
❑ Example: MBIST_ATE_DIAG_ICS_ref_clka_0_0
■ JTAG (internal clock source with multiple clock-source periods) -
MBIST_ATE_DIAG_ICS_clock-
source_frequenceyMHz_integer1_integer2
❑ Example: MBIST_ATE_DIAG_ICS_ref_clka_100_0000MHz_0_0
■ PMDA - MBIST_ATE_PMDA_DIAG_1
Repair:
Are patterns that are operational separate from PMBIST patterns. They focus on the access
and controlling of Non-Volatile Memory (NVM) for testing, reading and writing values and
distribution to repair channels defined and created using the add_hard_repair command
in Genus.
■ PMDA - FCU_ATE_PMDA_REPAIR_1
Experiment
An experiment is created when running the create_embedded_test command. This
command will create a unique experiment for each pattern class specified as an option on the
command line. Within a pattern class, if the JTAG Access Method is used, it will also create
a unique experiment for each unique PMBIST clock domain which has memories targeted in
the schedule.
Each experiment is typically independent of other experiments created, with its own mode
initialization section to the pattern. There are cases, like memory repair, where the program
will contain multiple pattern classes and multiple experiments. In such cases, the experiments
can be dependent upon each other and are expected to run in a particular order. The user is
required to be aware of this when writing the experiments, for ATE or Verilog simulation
usage. The lead experiment is the only one that require a mode initialization sequence. If
other have one too, then the operation will not behave as expected. All experiments, but the
last experiment, will need to have the write_vector option of -finalnonscanpattern
set to no. The default is yes.
Testplan
A testplan is a wrapper around an algorithm that selects the data pattern that will be applied
to a memory's address space and how that memory space will be traversed. They also define
how the test is stored in the PMBIST logic, hardwired meaning the program of the testplan is
stored in the PMBIST logic and is executed upon selection or programmable meaning a
register to receive the program of the testplan is allocated and can be loaded via the
PMBIST's access mechanism.
If the target is a memory to be tested with the PMBIST, the add_pmbist command's
configuration file will contain the user defined testplans at the bottom of that configuration file.
These testplans, by name, will be referenced in that same configuration file within the target
group section with testplan field:
{
target {
{module_list | instance_list }
}
{
sharing_limit integer
clock mbist_clock [clock_mux]
The default testplan execution order within a pattern class' experiment IS NOT the order of
the testplans referenced in the target groups testplans field, but the order of the defined
testplans at the bottom of the configuration file.
If the target is a NVM to be tested, read and written as part of PMBIST, the
add_hard_repair command's configuration file will contain the user defined testplans at
the bottom of that configuration file. These testplans, by name, will be referenced in that same
configuration file within the repair group section with testplan field:
{
repair
// NVM list
[{ { module_list | instance_list }
}]
{
[clock mbist_clock
location { instance_name | module_name }
testplans { testplan_name [testplan_name]… } ]
[channels {
{count integer [clock mbist_clock] | // channel count
length integer [clock mbist_clock ] | //register count
map { { [ rru_instance | hierarchical_instance repair_channel_index ]… |
reserved
}
}…
}
[ nvm_map { { nvm_instance [rows integer:integer] [bits integer:integer]
[copy] }…
} ]
} ]
}
}
The default testplan execution order within a pattern class experiment IS NOT the order of the
testplans referenced in the target groups testplans field, but the order of the defined testplans
at the bottom of the configuration file.
More information can be found on the target and repair group section in Chapter A,
“Customizing PMBIST Memory View and Configuration Files” of this document.
If the user does not know how best to define a testplan, examples are provided within the
Genus and Modus tools. The predefined testplans exist in the flowing files within these tools:
■ In MODUS -
@modus:root:/ 1> ls $env(Install_Dir)/defaults/mbist /*testplans.txt
■ In GENUS -
@genus:root: 1> ls $CDN_SYNTH_ROOT/share/synth/lib/vhdl/cdnpmbist/
*testplans.txt
Within these files are example testplans that can be copied into the appropriate configuration
file. predefine_testplans.txt examples to the add_pmbist commands configuration file and
predefine_fcu_testplans.txt into the add_hard_repair configuration file. Thereafter, they
need to be reviewed for a specific application, modified and expanded upon, if necessary, to
meet the goals of that specific design.
Algorithm
An algorithm is a series of events that occur in a specific order which sets controls within the
PMBIST logic and/or on the targets interface, monitors signals, writes and/or reads a
targeting a memory's addressed location. Several predefined algorithms are available in files
located in the same directories as the predefined testplans:
■ In MODUS -
@modus:root:/ 1> ls $env(Install_Dir)/defaults/mbist /*algorithms.txt
■ In GENUS -
@genus:root: 1> ls $CDN_SYNTH_ROOT/share/synth/lib/vhdl/cdnpmbist/
*algorithms.txt
The predefined_algorithms.txt contain several algorithms defined in recent literature. The txt
file also shows how they can be referenced within a testplan. The predefined algorithms for
the PMBIST logic are:
The algorithms listed in the above table can be referenced directly by name within the testplan
defined in the add_pmbist configuration file. They do not need to be redefined in the
configuration file as they are already defined in the application.
A user can define their own algorithms to this list by adding them to the add_pmbist
configuration file and referencing them in their defined testplans.
The predefined_fcu_algorithms.txt contains operational algorithms for the fuse control unit
(FCU) to execute and are specific to Cadence access to a particular technology's NVM. They
are NOT accessed by reference as the wait statements will need to reflect the delays
specified in the design specific NVM datasheet. They will need to be redefined with the
designs specific timing in the add_hard_repair configuration file. The predefined
algorithms for the FCU logic are:
Overview
PMBIST requires patterns to be created that will setup and program the PMBIST logic. These
patterns enable the PMBIST logic, selects memories to be targeted with test, selects
testplans to be applied to the memories and examines the results of these PMBIST
operations. These patterns are created within Modus directly or under the covers via Genus.
To help a user get started generating patterns for PMBIST operation and verification, there is
a methodology within Genus to write out the supporting files and scripts to create and set up
a basic validation program. This will be a starting point to expand. Here we will discuss those
elements that support PMBIST operation and verification by simulation. This methodology
starts after the insertion of the PMBIST logic within Genus.
This first starts with writing out of the design. The user has the option of inserting PMBIST in
a RTL flow or in a synthesis flow.
If a Synthesized to gate flow is used, then use the Genus command: write_hdl
Once the design is written out of Genus, two additional commands are required to enable
pattern generation. The Genus command write_dft_pmbist_interface_files, writes
out several files that make up the abstraction of the inserted PMBIST logic in the design from
this level and below. Care should be taken with these files since they describe to the pattern
generation tool what the hardware does, if these files are altered from what the hardware
contains, then patterns can be generated that will setup the PMBIST logic incorrectly.
Within this command's script a Modus model is built, and patterns are generated using the
create_embedded_test command, with options list added. An irun simulation script is
For the remaining cases which rely upon the write_hdl command, the transition to pattern
generation relies upon entry into Modus at the build_model step. Several options are
available.
In this case, the design is an abstract representation, including the top level ports only.
You must manually make a connection from some input to some output in the Verilog
description for Modus to handle this appropriately. Also, no reference to internal design
points in the interface files can be supported in this approach. If these conditions are
satisfied, create_embedded_test can successfully generate patterns using the
abstract model.
build_model -cellname design -designsource design_abstract.v -WORKDIR
directory
For programmable memory built-in self-test, a default TDR is shipped with the product that
contains a description that supports generation of memory test patterns that may exceed one
or more parameters of the target tester. Although most pattern groups are constrained by a
single clock source within create_embedded_test, this is not the default behavior for
directaccess and burnin patterns and parameters related to clocking capabilities should be
constrained by the engineer. Test engineers should ensure the target tester capabilities are
not exceeded prior to generating memory test patterns for manufacturing test.
The default programmable memory built-in self-test TDR can be found in $Install_dir/
tools.<ARCH>/tb/defaults/….A6672m.mbist. Relevant excerpts are listed below.
This TDR allows for a maximum of 32 clocks with a maximum of 32 pulses per clock per tester
cycle and a maximum clock frequency of 2GHz.
TEST_PINS
CLOCK_PINS = 32
SCAN_IN_PINS = 32
OSCILLATORS = 32
;
PIN_TIMING
TIMING_RESOURCE = PER_PIN
MAX_PULSES = 32
MAX_STIMS = 1
MAX_MEASURES = 1
MAX_CYCLE_TIME = 1 MS
MIN_CYCLE_TIME = 500 PS
MAX_PULSE_WIDTH = 1 MS
MIN_PULSE_WIDTH = 250 PS
AC_MIN_PULSE_WIDTH = 250 PS
HF_MIN_PULSE_WIDTH = 250 PS
MIN_PULSE_OFF = 0 NS
MIN_TIME_LEADING_TO_LEADING = 500 PS
MIN_TIME_TRAILING_TO_TRAILING = 500 PS
MIN_STIM_STABLE = 0 NS
ACCURACY = 0 PS
RESOLUTION = 1 PS
LEADING_PADDING = 0 PS
TRAILING_PADDING = 0 PS
TERM_TIME_TO_1 = 125 NS
TERM_TIME_TO_0 = 125 NS
STROBE_SETUP = 0 NS
STROBE_HOLD = 100 PS
MIN_SCAN_CYCLE_TIME = 13250 PS
MIN_SCAN_PULSE_WIDTH = 2500 PS
DC_CYCLE_TIME = 100 NS
DC_PULSE_WIDTH = 20 NS
;
For further information regarding tester description rules, refer to the Tester Description Rule
(TDR) File Syntax in the Modus: Guide 2: Testmodes.
Inputs
create_embedded_test takes as necessary inputs the Modus design model from the
build_model command, the interface file set written by
write_pmbist_interface_files in the Genus session, and the ROM data load files for
any ROMs in the design. Other command options are selected as necessary for the pattern
generation desired.
Basic Options
The interface files are identified through use of the -interfacefiledir directory and
-interfacefilelist comma_separated_filenames options. The interface files
contain information describing the structures inserted into the netlist by add_pmbist and
pattern generation control information. If add_hard_repair has been run in Genus, there
will be an additional set of interface files that include “fcu” in the file name. They are an
abstract model of the programmable memory built-in self-test and targeted memories for
create_embedded_test. For bottom-up design flows inserting programmable memory
built-in self-test into multiple design blocks and/or creating multiple instances of blocks in
which programmable memory built-in self-test was inserted, it is possible to assign these
blocks to different JTAG instruction sets requiring unique interface file sets.
create_embedded_test can generate patterns for a single interface file set at each
invocation.
You can also choose a subset of interface file wherein a subset of interface files needs to be
specified. Any files not specified will be searched for in the location specified by
If the specified pattern control file indicates that one of the multiple instruction sets is being
used (for example, the file name design_1_pattern_control.txt indicates 1 as the
instruction set index) all the files generated by create_embedded_test will be named with
the instruction set index appended to the design name.
If ROMs exist in the design and are targeted for programmable memory built-in self-test, the
data load files must be identified through the -ROMPATH
colon_separated_directories and -romcontentsfile
comma_separated_filenames options, and optionally the -romdatamapfile
fully_qualified_filename option. The romdatamapfile option allows you to
specify unique ROM data load files for specific instances of ROMs in the design. This option
is used in conjunction with the ROMPATH and romcontentsfile options and takes higher
priority, therefore, when searching for ROM data load files, romdatamapfile is used first. If
the memory instance is not present in romdatamapfile, then the data load file is searched
using the ROMPATH and romcontentsfile options. Each line in romdatamapfile
contains a memory instance, followed by one or more white space characters and then a fully
qualified ROM load file. The memory instance name may start with the (/) character. If so,
the string found between the first two (/) characters is assumed to be the top-level design,
and removed for further processing by create_embedded_test. The ROM content files
contain an image of the data present in the read-only memories. These data load files are
typically created by the technology vendor ROM generators and used in logic simulation to
load the memory contents. The file name must include the name of the memory module as a
prefix within the filename: ROM_module_name. The files must be structured with one line
per address, with the first line containing address zero contents and the last line containing
the maximum address contents. The content of each line is a bit vector for that address, with
the most significant bit on the left and bit zero on the right. The vector is either a binary string
of ones and zeroes or a hexadecimal string with right-justified valid data.
Command line:
create_embedded_test ... -ROMPATH location_of_ROM_contents_file -
romcontentsfile ROM128X17_verilog.rcf
Contents of ROM128X17_verilog.rcf:
01000011101011011
10010110100011000
...
00001001010101000
There are 128 lines of data in the file, one for each address. There are 17 bits of data on each
line as the data width of the memory is 17 bits.
Command line:
create_embedded_test ... -ROMPATH location_of_ROM_contents_file -
romcontentsfile p10np_512x10cm16.hex
Contents of p10np_512x10cm16.hex:
28A
1FE
...
12C
There are 512 lines of data in the file, one for each address. There are 10 bits of usable data
on each line, as the data width of the memory is 10 bits. As the data is right justified, the 2
leftmost bits are ignored by create_embedded_test during processing.
Command line:
create_embedded_test ... -ROMPATH location_of_default_ROM_load_files -
romcontentsfile ROM32X4.hex -romdatamapfile location_of_file/romdatamapfile
In this example, instance /TopBlock/l1m1/rom uses the ROM32X4.hex.1 ROM data load
file, and instance /TopBlock/l2m2/rom uses the ROM32X4.hex default ROM data load
file.
Housekeeping Options
These options enable use of this manually updated mode initialization sequence file in
programmable memory built-in self-test pattern generation for JTAG access patterns.
The following options enable use of a manually updated mode initialization sequence file in
programmable memory built-in self-test pattern generation for direct access patterns:
-cleanstart no -genmodeinitonly no
-pmda_modeinit direct_access_mode_initialization_filename
The option -genscriptsonly yes enables the generation of the scripts executed within
the create_embedded_test command but avoids actually executing them. This provides
expert users more opportunity to vary the parameters of execution of the command.
When the default programmable memory built-in self-test tester description rule is not
appropriate for pattern generation, three options exist which support varying degrees of
control.
These options control the class of patterns and execution schedule followed during
generation of the programmable memory built-in self-test patterns during execution of
create_embedded_test. The createpatterns option selects one or more pattern
classes for generation and the corresponding *schedule option selects the desired
execution schedule. Each *schedule option allows for a fully custom schedule to be
selected and the production patterns allow for one of four broader engine/device schedule
values.
The following options allows the user to create STIL, WGL and TDL patterns. These options
add a write_vectors call to the script created by create_embedded_test to generate
STIL/WGL/TDL patterns.The script is automatically run if using the Genus
write_dft_pmbist_testbench command. If invoking create_embedded_test
directly, the user must execute the generated script.
Table 3-3 Pattern Generation Options
-outputstil <no | yes> Creates STIL patterns. Default is no
-outputwgl <no | yes> Creates WGL patterns. Default is no
-outputtdl <no | yes> Creates TDL patterns. Default is no
The directory where the generated patterns are to be placed can be specified by the options:
Table 3-4 Pattern File Output Directory Options
outputstildir=<path> Directory to place STIL patterns.
outputwgldir=<path> Directory to place WGL patterns.
outputtdldir=<path> Directory to place TDL patterns.
The -tdlconfigfile <input filename> specifies the file containing TDL design
configuration information. This option is used in conjunction with -outputtdl yes option.
The tdlconfigfile option is used to define the TDL design configuration information. The
file specified by <input filename> contains most of the ASIC_TITLE statement. The
required fields are "LIBRARY_TYPE", "CUSTOMER", "TI_PART_NUMBER",
"PATTERN_SET_NAME", "PATTERN_SET_TYPE", "PATTERN_SET_DESCRIPTION" and
"REVISION". All fields must be on a separate line followed by a equals sign and value.
These keywords are only accessible from within the Genus session when the
write_dft_pmbist_testbench command is invoked. They exist to permit programmable
memory built-in self-test generation of Verilog testbench patterns. -outputverilog yes
enables Verilog patterns to be exported from Modus and -outputverilogdir
verilog_pattern_directory identifes the location where the files are written.
On-Demand Options
To support power-on self-test (POST), also known as on-demand PMBIST, new hardware is
added during the insertion phase. This new hardware, known as the application specific
sequencing unit (ASU), is added using the Genus command
add_pmbist_access_method. One of the inputs to add_pmbist_access_method is an
ASU vectors file. The ASU vectors are an optimized schedule (in terms of MBISTTPN and
MBISTSCH TDR loads), of hardwired testplans generated by create_embedded_test by
using the asu_vectors option. The ASU vectors file is named as
<design>_[fcu_]asu_vectors.txt and is located in the directory specified by the
interfacefiledir option. Following are the details of these options:
■ asu_vectors=<append | replace | none> - Generates ASU (on demand)
vectors. Default value is none. ASU vectors are stored in the interface file directory, in a
file called <design>_asu_vectors.txt (for AMU patterns) and
<design>_fcu_asu_vectors.txt (for FCU patterns). This file may or may not exist
when create_embedded_test is called.
If the file exists, specifying a value of append will cause CET to append newly generated
vectors for the pattern types requested in the file. Specifying a value of replace will
cause CET to replace vectors of the requested pattern type in the file.
If the file does not exist, either value of append or replace causes a new file to be
created. This file is then modified by the user to indicate what vectors are binded to what
mask.
■ amu_instance=<AMU instance> - Specifies an AMU instance to target for ASU
vectors. If there are multiple AMUs in the design, and ASU vectors are being generated,
an AMU instance must be specified on the command line. The
<design>_asu_vectors.txt contains vectors for only one AMU.
■ fcu_instance=<FCU instance> - Specifies an FCU instance to target for ASU
vectors. If there are multiple FCUs in the design, and ASU vectors are being generated,
an FCU instance must be specified on the command line. The
<design>_fcu_asu_vectors.txt contains vectors for only one FCU.
Assign Files
create_embedded_test typically generates the necessary assign files for its own pattern
generation based on interface file content. However, there may be situations where these
need enhancement by the designer. In such situations they may be edited in place and used
by specifying -cleanstart no on the create_embedded_test command line.
is extracted from the pattern control file name. For example, if the pattern control file specified
is design_1_pattern_control.txt, then the instruction set index would be 1.
A Modus test mode initialization sequence is used to establish a defined state of the design
under test. create_embedded_test generates the necessary sequences based on its
knowledge of the design and the pattern requirements. This includes
■ establishing the state of test control pins defined in the Genus session,
■ initializing the state of any JTAG controller and compliance enable pins,
■ initializing the state of any programmable memory built-in self-test direct access
mechanism,
■ and initializing the state of clock paths into the programmable memory built-in self-test
logic.
If the designer has additional requirements which must be satisfied, such as using the JTAG
controller to establish a design for test control mode or locking a PLL for use as a clock source
in programmable memory built-in self-test, these can be added manually to the sequences in
their predefined filesystem location and used by create_embedded_test.
In a mixed mode environment (where both JTAG and direct access are present), in order to
reset properly, both the mda_reset as well as JTAG reset signals need to be active at the
same time.
Pattern Classes
Patterns are classified in general terms by their execution time and failure analysis capability.
In general terms, as the granularity of the failure analysis increases, the execution time
increases. Programmable memory built-in self-test patterns can be generated for a design,
be it the block level or full chip, in most cases.
Block-level
Pattern Class Chip-level Support
Support
production yes yes
direct access yes yes
For the experiment names in the pattern classes which appear below, the clock-source
variable has a value based on the source of the programmable memory built-in self-test clock
selected for pattern generation:
■ stclk
clock-source = design-port-name
Production
Production pattern scheduling restrictions include the clock source and frequency.
Experiments are created within Modus 1149_patt test mode using the following naming
convention:
MBIST_ATE_PROD_positive-integer_clock-source
Direct Access
The direct access patterns, selected with createpatterns option set to directaccess
or createpatterns set to pmda_burnin, perform the execution of the specified testplans
in each programmable memory BIST engine on its associated scheduled devices.
For directaccess patterns, the mda_done and mda_fail pins can be defined during the
insertion process to allow for determination if the test is complete (using mda_done), and if
there was a failure detected (using mda_fail). Contents of the MBISTCHK TDR are examined
after each test, and can be checked for on the mda_tdo pin (if defined during insertion).
For burnin patterns, the mda_fail pin can be defined during the insertion process to allow for
determination if there was a failure detected. Burnin patterns run through the applied test
repeatedly until the test engineer stops the test.
Direct access pattern scheduling restrictions include the limitations imposed by the tester
description rule and the create_embedded_test tester description rule option overrides.
Experiments are created within Modus mda test mode using the following naming convention:
MBIST_ATE_DIRECTACCESS_1
MBIST_ATE_BURNIN_1
As the names of the experiments created are not unique for direct access patterns, if multiple
sets of patterns are required, care must be taken to copy existing experiments to a different
name or location. They will be overwritten with the next invocation of
create_embedded_test.
Outputs
In addition to the assign files, mode initialization sequences, test modes, and experiments
create_embedded_test generates within Modus, several scripts and support files are
generated. The file system updates are noted below. Outputs are generated as requested on
the command line of create_embedded_test, but all possible files are show here.
create_embedded_test may also modify in place the input pattern control file when
programmable memory built-in self-test changes are made under pattern generation
scheduling constraints.
WORKDIR is an environment variable accessible within Modus. This points to the branch of
the directory tree where create_embedded_test reads input and writes user required
output by default.
WORKDIR/testresults/
logs/
. create_embedded_test logs and reports
scripts/
run.design.instruction2
run_sim.design.patt_gen1,2
run_sim.design.mda_build_testmode1,2
run_sim.design.mda_read_vectors1,2
testmode_data/
. sources/
assignfile.design.mda1,2
assignfile.design.patt_gen1,2
TBDseqPatt.design.mda1,2
TBDseqPatt.design.patt_gen1,2
MODE_JTAG.design.MBIST_instruction_name2
TBDseqPatt.design.MBIST_instruction_name2
TBDpatt.design.*2
1If the option -testerdescriptionrule TDR_path/TDR_filename is used, the test
mode string (located after the design name) in the file name is suffixed with
_TDR_filename.
2If multiple instructions are detected based on the interfacefiledir and
interfacefilelist options being specified, then the string design becomes
design_instruction-set-index. The instruction set index is extracted from the
pattern control file name. For example, if the pattern control file specified was
design_1_pattern_control.txt, then the instruction set index would be 1.
Using the Custom Scheduler you can modify the PCF (Input Pattern Control File), file and
update the interface files prior to create_embedded_test. The custom scheduling flow is
shown in red in Figure 3-4.
2. Invoke the CET Scheduler from the Modus Common User Interface:
gui_view_pmbist_scheduler
1. Using the Forward and Backward arrow buttons you can select the required keys for
custom scheduling. You can also arrange the sequence of the keys using the Up and
Down arrow buttons.
2. Click on the Next button to navigate to the Filter tab.
1. Using the Forward and Backward arrow buttons you can select the required keys for
creating the expression.
2. Use the AND / OR buttons to define AND / OR operation in between two sub-operation.
The selected keys and their values are displayed in the Expression and Define Query
Filter as shown below:
3. Define the operation between the values of the key by selecting the operator from the
Operator list. The available operators are equal and not equal.
Note: The values of the operator depends on the keys that are selected. For example,
the “Target” key has operations “with feature” and “without feature”. All keys have values
“equal” and “not equal”.
4. Click on the Value(s) Select button to select the values of the selected expressions. The
Search and Select dialog box is displayed as shown in Fig 3-10.
5. To show selected values in Choice List enter a regular expression from the available
values in the Search field. For example, entering “_base” will display the values that
match the search string in the Choice List as shown below:
The Search and Select Value dialog contains the following options:
❑ Add All - to add all values in selection list from available list
❑ Add - to add selected values in selection list from available list
❑ Remove All - to remove all values from selection list
❑ Remove - to remove selected values from selection list
6. Click OK.
Fig 3-11 shows a sample query for filtering testplan details.
A preview of the query is displayed in the Schedule tab as shown in the following figure:
1. From the available access methods - JTAG and MDA, select the desired access method.
2. Then select the pattern group for scheduling. The following pattern groups are available
for JTAG and MDA:
❑ JTAG
❍ Production
❍ Diagnostics
❍ Redundancy
❍ Fault Tolerance
❍ FCU Repair
❑ MDA
❍ Direct-Access
❍ Burnin
❍ Diagnostics
❍ Redundancy
❍ Fault Tolerance
❍ FCU Repair
Note: A pattern group is enabled only when the PCF contains the hardware for that
group.
The column Step No. indicates the order of execution of testplan and corresponding devices.
Testplans with step number “0” are not scheduled which means that they will not be a part of
the pattern and hence will not take part in the run. These testplan are disabled.
■ To view details of targets under a step, click +, , for that testplan.
■ To sort the keys in ascending/descending order, select and click the key
as required.
■ To modify the step number of a testplan, double-click the step number for that testplan
and enter the required step number, or, right-click the mouse and select Update step
number.
■ To expand all/selected nodes to one level below, right-click the mouse and select
Expand - all / selected.
■ To collapse all/selected nodes to one level above, right-click the mouse and select
Collapse - all / selected.
■ To disable a target in a specific testplan from the create_embedded_test run, set the
target to Step No. “0”.
Scheduling
Description
Options
ss serial_serial
Scheduling
Description
Options
pp parallel_parallel
ps parallel_serial
pp parallel_parallel
sss serial_serial_serial
ssp serial_serial_parallel
sps serial_parallel_serial
spp serial_parallel_parallel
pss parallel_serial_serial
psp parallel_serial_parallel
pps parallel_parallel_serial
ppp parallel_parallel_parallel
You then need to validate the changes before saving the file for
create_embedded_test. To perform the same:
3. Click on the Validate button. If the modifications to the PCF file violates any scheduling
constraint, a warning message, as shown in Figure 3-14 is displayed and the changes
are corrected automatically.
After the changes are validated the colour of the Validate button changes to green and
the Save button get enabled.
4. Save the changes to the PCF file. The available options are
Figure 3-16 shows the steps required to create test programs using scheduler.
You can create test program by selecting the Test-Programming tab from the Scheduler
Main window. The Test-Programming tab is shown in the figure 3-17:
To run build_model
1. In the build_model tab, click on Browse to select the design netlist.
2. Enter a design name in Top Name and click Run.
3. In case the command has been executed from the command prompt earlier, refresh the
scheduler with the details by clicking Refresh.
4. Click Next to proceed to the Setup for Programming tab.
1. Use the Input interface file directory to specify the directory containing the pcf files.
Click Browse to select the directory that contains the interface files.
2. Use the Input BSDL file to specify the bsdl file. Click Browse to select the bsdl file This
is an optional step
3. Click Load to load the details to the schedule.
4. Click Next to navigate to the Experiment creation tab.
Creating Experiments
In this tab, under Experiment options you can specify details of the experiment you need to
create with the available pattern classes. The Experiment creation tab Fig is shown in 3-19.
All the experiments that have been created in the previous steps are displayed in Available
experiment.
1. Use the Forward and Backward arrow buttons to select and deselect the available
experiments.
2. Use the Up and Down arrow buttons to arrange the sequence in which the experiments
are to be run.
3. Select the design by specifying the verilog file in Design File.
4. If the design contains a chipware component, specify the path of the library containing
the chipware component, e.g. /home/genus/logs/191002/tcli/lib/chipware.
5. If required, specify the path to the Simulation library.
6. Finally, specify the xrun options and click Create Test-Program to create the xrun script.
7. Specify a name to the script file in the Save File dialog and click Save. A message
showing successful file creation is displayed and the Create Test-Program button
changes to green.
Write Vectors
To export programmable memory built-in self-test patterns from Modus for use in design
verification or manufacturing test, use the write_vectors command. Certain options
should be applied for programmable memory built-in self-test patterns.
■ -compresspatterns no prevents the events from moving between test cycles,
allowing analysis software to reliably predict actions within the memory test patterns.
■ -cyclecount yes causes test cycle count informational comments to be added to the
generated STIL and WGL output formats.
■ -keyeddata yes causes information allowing consistency checks and failure data
analysis to be added as comments to the STIL and WGL output formats.
■ -includemodeinit yes causes the mode initialization sequence to be included in the
generated patterns. This is the default value for write_vectors. Using a value of no
may be required depending on the sequence of experiments being simulated. If multiple
experiments are being simulated, only the first experiment should include the mode
initialization sequence.
■ -includefinalnonscanpattern yes causes the final non scan pattern to be
included in the generated patterns. This is the default value for write_vectors. Using
a value of no may be required depending on the sequence of experiments being
simulated. If multiple experiments are being simulated, only the last experiment should
include the final non scan pattern.
Programmable memory built-in self-test pattern creation relies upon certain relationships
between the applied stimulus, pulsed clocks, and measurements within a test cycle. The
following inequalities must be satisfied using the write_vectors options for proper pattern
generation:
The default testpioffset value of 50% is used for JTAG and MDA TCK pins.
Typical values as they might be found on the write_vectors command line for a 20MHz
JTAG TCK clock follow.
-testtimeunits ps \
-testpioffset 0 -testbidioffset 0 \
-testperiod 50000 \
-teststrobeoffset 5000 \
-testpulsewidth 25000 \
-testpioffsetlist=TCK=25000 \
Pattern Structure
Programmable memory built-in self-test patterns are comprised of a mode initialization
sequence as described in “Mode Initialization Sequences” on page 106 followed by a pattern
generally comprising:
■ setup of the targeted tests using the programmable memory built-in self-test access
method
■ execution of the selected programmable memory built-in self-test testplans under control
of the system clocks
■ examination of the results using the programmable memory built-in self-test access
method.
This chapter describes these sequences, distinguished by access method, direct or 1149
TAP, and pattern class.
Direct Access
Direct access is limited to executing production class patterns, selected with -
createpatterns set to pmda_production or createpatterns set to pmda_burnin.
Refer to the Programmable Memory built-in self-test insertion in the Design for Test User
Guide within the Genus documentation for details regarding the finite state machine which
describes the direct access behavior.
Manufacturing Test
Figure 3-22 1149 TAP Access ROM Production Pattern Abstract View
Test algorithm:
■ For programmed testplans, create_embedded_test uses the ROM data load file to
compute a MISR signature. This computed signature is loaded in the MBISTROM TDR
and must match the signature calculated during simulation in order to determine a good
test.
■ For hardwired testplans, create_embedded_test verifies the ROM data load file
specified on the command line is the same as the ROM data load file that was used
during add_pmbist. If the files are different, an error message is issued.
Pattern Simulation
Verilog testbenches can be generated by two different commands. The first way is within
Genus using the write_dft_pmbist_testbench command, this approach supplies a
very fixed testplan set and schedule. This command is typically used for a quick entry into
verification of the MBIST logic and not really used for planning test to be done for full
verification or going to the tester. The second way is within Modus using the
create_embedded_test command, or using the gui_view_pmbist_scheduler
command for a graphic planning of mbist test which can be written out using
write_vectors -language verilog. Using Xcellium's simulation logs, analysis can be done.
A verilog assertions file is supplied with the testbench do that detailed debug can be done on
the testbench if mis-compares occur.
1149 Verification
The default test mode created by verify_11491_boundary within Modus can be used to
validate the programmable memory built-in self-test JTAG instructions on a full chip design.
When a simulation is complete, the Xcelium sim log can be processed directly by the
analyze_embedded_test command to determine location of injected failures.
When a failure log from ATE are provided, they first need to be converted to CPP format using
convert_failures_to_cpp command. This CPP file need to be manually updated with a
header statement and constructed from the Keyeddata and tester fail log information to build
the correlation with the pattern. Once modified, the CPP data file can then be referenced
directly by analyze_embedded_test for processing and locating error found in the
memories under test.
From the above figure, Steps 1, 2 and 3 can be mapped as given below:
1. Execute the write_vectors command with the keyeddata option to write out
PMBIST patterns. For more information on keyeddata, use the command
write_vectors -help keyeddata.
To specify the PMBIST Keyeddata information to the file an additional option is needed
to identify that this information needs to be added.
2. Use the keyeddatakey option with the string, “PMBISTFailDataSync”. This will add the
needed information into the pattern.
3. If the fail data is returned from the tester, use the convert_failures_to_cpp
command to create a base CPP file.
4. Then add the Keyed Data Headers to the CPP data file.
A sample header is shown below:
Chip serialno Lot 000000104C01291-01 Wafer 23 WaferX 022 WaferY 030
Testblockname Tblknam Testcondition RSFN1 PMBISTFailDataSync "n/a modeinit
write_vectors=n/a n/a"
Chip serialno Lot 000000104C01291-01 Wafer 23 WaferX 022 WaferY 030
Testblockname Tblknam Testcondition RSFN1 PMBISTFailDataSync "AMU
pmda_faulttolerance
write_vectors_options=finalnonscanpattern=yes,includemodeinit=yes
MBIST_ATE_PMDA_FAULT_TOLERANCE_1"
a. From the failure log extract the following information and place it into
b. From the KeyedData within the patterns complete the header field with
PMBISTFailDataSync "AMU pmda_faulttolerance
write_vectors_options=finalnonscanpattern=yes,includemodeinit=yes
MBIST_ATE_PMDA_FAULT_TOLERANCE_1"
Within the CPP file, a header section is required at the beginning of each mode
initialization section and experiment. These headers will be separated by the measure
value statement that occurred in the MBIST pattern. Since the mode initialization
typically does not have measures within it's pattern section, the header for the mode
initialization is followed by the header for the first experiment within the pattern. If there
are additional mode initialization or experiments sections within the pattern, the
corresponding measure value statements will be in-between them.
In the above CPP file, two headers are added, one for the mode initialization experiment
section (which has no measures value statements) followed by another for the
experiment that follows the mode initialization sequence (which does have measure
value statements). The pattern only had one experiment beyond that mode initialization
sequence experiment.
Following is a sample AET output that shows the keyed data for the mode init and experiment
added in the CPP file. It contains:
■ Diagnostic patterns
■ Summary Report
4
Static Timing Analysis
From a clock point of view, the PMBIST logic uses the test access mechanism (TAM) clock to
load and unload the PMBIST TDRs. The at-speed MBIST clocks are used to achieve at-
speed memory testing. Consider the case of self-repair, additional repair related clock(s)
might be required to access the repair channels and non-volatile memories (NVMs). All those
clocks can be asynchronous to each other.
Proper clock domain crossing between TAM clock domain (JTAG TCK or PMDA TCK) and
MBIST clock domain relies upon certain relationship. The following requirements must be
satisfied:
■ Clock period of TAM clock, either JTAG TCK or PMDA TCK should larger than or equal
to every defined MBIST clock period. In other word, the following inequalities must be
satisfied:
TAM_clock_period >= Largest_PMBIST_clock_period;
Mode-init
Async-reset
PMBIST Gathering PMBIST
initiation Asynchronous domain results completion
crossing deglitching logic
TAM clock
MBIST clock
temamu*/l_tamtapsync_reg temsiu*/l_tamchkrst_reg
temsiu*/l_tamdiagrst_reg (if diagnostics is enabled)
temsiu*/l_tamromdsync_reg[1:0] (if rom diagnostics is enabled)
temamu*/l_tapsync_reg[2:0] temsiu*/l_chkrst_reg[1:0]
or tapsynch/ffsync_reg or chkrsth/ffsync_reg
temsiu*/l_diagrst_reg[1:0] (if diagnostics is enabled)
or diagrsth/ffsync_reg
temsiu*/l_romdsync[1:0] (if rom diagnostics is enabled)
or romdsynch/ffsync_reg
During PMBIST initiation, an asynchronous reset of the targeted PMBIST logic occurs. When
PMBIST is controlled by JTAG, create_embedded_test builds this reset into the
generated patterns either using the TRST port, if available, or forcing a synchronous reset of
the TAP controller through manipulation of the JTAG finite state machine. In either case, the
jtag_reset signal into the PMBIST AMU block is used for this purpose. If the direct access
interface is used to initiate PMBIST, the asynchronous reset pulse is created by the defined
mda_reset function. If the mda_reset function is accessible from a chip-level port,
create_embedded_test builds the asynchronous reset into the generated patterns similar
to JTAG access. If the mda_reset function is intended to be controlled by a user-supplied
internal point, a user-supplied mode initialization sequence is needed to ensure proper
asynchronous reset before PMBIST starts. In case of mixing JTAG and direct access, both
jtag_reset and mda_reset need to be active to trigger a valid asynchronous reset. With
the D = Q = value of reset for the flops in the target clock domain during reset removal,
the deassertion of the asynchronous reset is claimed to be safe.
PMBIST AMU. For direct access controlled PMBIST, it occurs when PMBIST direct access
RUN or RUND instruction is loaded and finite state machine enters runpm or runbi state.
After domain crossing, a set of internal synchronous reset sequences happens. Once the
frequency domain control transfer has occurred, the temamu_active[n] line(s) are
asserted from the activated PMBIST engine(s). This causes the PMBIST control, address,
and data paths to the target memories to be selected, either through external multiplexors or
multiplexors internal to the memory devices. The PMBIST finite state machine is started and
multiple MBIST clock cycles later, when the temsiu_si_done[n] asserts, the first PMBIST
operation is sent to the target memories. As a result, the temamu_active[n] signals is a
multi-cycle path. For details refer to chapter “Generating SDC Constraints for DFT
Constructs” in Genus Design for Test Guide.
The static timing problem for PMBIST is therefore reduced to one of closing timing within the
PMBIST closed loop systems and avoiding any undesired interference across the boundaries
with the functional logic. At completion of PMBIST execution, the engines are idled and
results remain stable for inspection by the initiating control mechanism.
The MMMC support for PMBIST is covered in PMBIST Multi-Mode, Multi-Corner (MMMC)
Timing Support section in Genus Design for Test Guide.
l_mdafsm
mda_reset
mda_tdo
mda_done
mda_fail
jtag_tdi
jtag_tck
jtag_reset
l_tamtapsync_reg
jtag_runidle
l_tapsync[2:0]
jtag_shiftdr_state temamu_active SRU
jtag_capturedr_state
mda_tck
l_mcdfsm
jtag_updatedr_state
jtag_tck
jtag_instruction_decode_inst_name
jtag_amu_tdo RRU
mbist_clk fcu_clk
mbist_clk
SIU
optional clock
mda_tck l_tamromdsync_reg[1:0] mux input memory
jtag_tck functional
l_romdsync_reg[1:0] clock data
mbist_clk
functional
l_tamchkrst_reg ctl/addr/data
l_tamdiagrst_reg ctl/addr/data
l_chkrst_reg[1:0]
l_diagrst_reg[1:0]
DCU
mbist_clk
Areas of potential interference between functional timing and PMBIST timing occur all around
the memory devices. These include the control, address, and data input paths to the
memories, possibly the clock input path(s), and the data propagation paths from the
memories. After establishing the PMBIST operational mode, the functional inputs to the target
memories terminate at the input of the multiplexors as the temamu_active[n] signals are
stable. The same claim can be made regarding the clock input path to the memories whether
the clock is multiplexed with a user-specified clock hookup point. The memory outputs,
however, fan out to functional paths as well as PMBIST DCU (Data Compare Unit) and may
show up in PMBIST timing analysis.
Clock selection logic between JTAG TCK and PMDA TCK exists in AMU, SIU, and SRU
feeding the shared PMBIST TDRs. The select single temmda_active is generated by
PMBIST direct access finite state machine. During the switching between JTAG TCK and
PMDA TCK, glitches could show up. But, the affected sink flops should have stable input D
and Q and extra cycles exist before PMBIST execution actually starts.
add_pmbist produces a summary of the synthesis timing step for each module indicating
whether the timing closed at the specified frequency. The following message in the Genus log
indicates that synthesis started for the specified module:
On completion of the synthesis for the module, the following message appears in the Genus
log if the timing closed successfully:
If timing closure was not successful during the module synthesis step, a message is issued
in the Genus log indicating this status along with the frequency at which the module could
close timing.
Warning : Timing optimization failed to achieve zero negative slack. [PMBIST-1015]
: Module: tem*
: Target period: <value> picoseconds
: Mininum period: <value> picoseconds.
: Could not eliminate negative slack for target period. Specify at most the
minimum period as a target period in the configuration file and re-run.
■ PMBIST DFT configuration mode signals are set to values in the PMBIST timing mode
based upon the applicable define_dft_cfg_mode, define_test_mode, and
define_shift_enable commands.
■ The balance of the constraints are applied at the boundaries of the inserted PMBIST
blocks in the PMBIST timing mode and non-DFT mode.
For details on the SDC generation flow that includes importing, generating and exporting the
constraints, refer to chapter“Generating SDC Constraints for DFT Constructs” in Genus
Design for Test Guide.
5
Boolean Equivalence Checking
Various PMBIST insertion flows exist within Genus. Memory devices may have variations in
ports. Some include ports for access exclusively by memory BIST and test-related scan
chains. The selection of the original design for the basis of comparison and the amount of
DFT logic inserted may vary as one performs equivalence checking under different
circumstances. Each of these factors can cause variations in the constraints necessary to
satisfy boolean equivalence checking. The standard flows and implicit support within
add_pmbist are documented in this chapter.
Methodology
The philosophy in all flows is to make the inserted PMBIST logic hidden to the boolean
equivalence checking when comparing to source RTL. This effort includes the PMBIST logic
itself, the extra design hierarchy pins added as a result of propagating connections with
PMBIST, and the change in functionality resulting from PMBIST connections at the memory
boundaries. The approach taken by the add_pmbist command assumes that:
■ All relevant DFT structures are inserted into the design prior to any checking.
■ All relevant DFT structures are inserted successfully.
■ The original design, prior to any DFT insertion in this Genus session, is used as the base
(golden) design for comparison. Note that within the Multiple Block Merging Flows, the
merged blocks either contain the previously inserted memory built-in self-test structures
and ports in the original (golden) design or are blackboxed or referenced as ILM models
in the original design with the previously inserted memory built-in self-test ports.
Designer modifications to the constraints may be necessary when deviating from this
approach. The details of the add_pmbist generated constraints are included below for
insertion into various design levels. Use command write_do_lec to generate constraints. For
more details, refer to Genus Command Reference.
Gate RTL
Flow Flow
Add
PMBIST
Logic
Hide Hide Hide
DFT DFT write_dft_rtl_model DFT
Structures Structures Structures
write_hdl
Synthesize
To
Map
Revised Netlist
MAP Netlist
+ PMBIST
Golden Netlist
Connect
Scan
Chains
Revised Netlist
MAP Netlist
+ PMBIST
■ Use the following two options when executing the write_do_lec command:
-hierarchical_reference
-rtl_revised
Note: If the user passes -rtl_revised option, then there is no need to specify the
-revised option to include the files generated by the write_dft_rtl_model
command. If the user choose to specify the -revised option, a user-provided list of
files will be used. If the user wants to supply a design as golden RTL, the user needs to
use the -golden option.
As the generated RTL source files can be loaded into a different Genus section. To validate
the design with or without PMBIST logic, LEC can be done between RTL.0, ELAB.0, RTL.1,
and ELAB.1 as the following. The RTL.0 is the RTL source files for initial Genus section. The
Elab.0 is the back-annotated design files with PMBIST logic inserted after elaboration. The
RTL.1 is the back-annotated design with PMBIST logic which can be loaded into another
Genus section. The ELAB.1 is the elaborated one in another Genus section.
■ Check RTL.0 as golden against ELAB.0 as revised.
write_do_lec -hierarchical_reference \
-golden_design ${rtl_0} \
-revised_design ${elab_0} \
-logfile ${path}/write_do_lec.log > ${path}\${do_script}
Note: As part of the back-annotation in RTL flow, the design changes are denoted as
Verilog hierarchical references. When loading the RTL.1 into another Genus section, the
hierarchical references will become connections and Genus automatically created pins
or ports if necessary.
■ Check ELAB.0 as golden against ELAB.1 as revised.
write_do_lec -hierarchical_reference \
-golden_design ${elab_0} \
-revised_design ${elab_1} \
-logfile ${path}/write_do_lec.log > ${path}\${do_script}
Currently, PMBIST LEC flow still utilize the old LEC flow for the support of Verilog hierarchical
reference.
Hide
DFT
Structures
Hide
DFT
Structures
Revised
Revised ELAB.1
(+ PMBIST)
Within Genus, if JTAG access to PMBIST is implemented, constraints are generated to make
PMBIST invisible when check against the golden or reference design which does not include
DFT structure.
If direct access to PMBIST is implemented, additional constraints are necessary for the ports
defined with define_pmbist_direct_access.
Test-wrapped memories are those memory devices which have ports specifically used by
memory BIST applications. The set of memory ports is described in , “port_alias
Specification” on page 217. A pair of constraints for each scalar port and vector port are
required. For each port the * wildcard is used in the statement to cover all bits of any
associated bus.
If direct access to PMBIST is implemented, additional constraints are necessary for the pins
or ports defined with define_pmbist_direct_access.
Test-wrapped memories are memory devices which have ports specifically used by memory
BIST applications. The set of memory ports is described in “port_alias Specification” on
page 217. A pair of constraints for each scalar port and vector port are required. For each
port the * wildcard is used in the statement to cover all bits of any associated bus.
If direct access to PMBIST is implemented, additional constraints are necessary for the
associated merged block ports. Only those present on the merged block are required in the
golden design.
For each block which is a blackbox and which previously had PMBIST inserted that is merged
into this design, the following actions are taken. The test mode and JTAG ports are added to
the block during add_pmbist by default. Additional constraints are necessary for the
associated merged blackbox or ILM model ports.
If direct access to PMBIST is implemented, additional constraints are necessary for the
associated merged blackbox ports. Only those present on the merged blackbox are required
in the design.
6
Design Verification
To verify the operation of the memory built-in self-test logic inserted by Genus , patterns can
be created as described Chapter 3, “PMBIST Pattern Generation”. Figure 3-3 on page 92
shows the process flow through entry into the Incisive Simulator. The inputs in the process
flow are described in the following sections.
Simulation Scripts
The simulation script generated by the Genus write_dft_pmbist_testbench command
has the following structure:
The script executes programmable memory built-in self-test pattern simulations in zero delay
mode. To avoid race conditions, associated with sequential elements in the design, including
registers and latches, seq_udp_delay 10ps is included on the command line. This should
be sufficient to ensure proper propagation of values as clocks pulse for most modern
technology libraries.
The +TESTFILE1 line and the preceding line in the file above are described in section
PMBIST Patterns on page 160. The -y and -v lines in the given file reference the simulation
libraries passed through the write_dft_pmbist_testbench -ncsim_library
keyword. The line following these library specifications contains the reference to the actual
design description being tested. Such a script is generated for each experiment created by
write_dft_pmbist_testbench.
PMBIST Patterns
The Modus Verilog output consists of two files for each experiment with default names using
the given formats.
■ VER.testmode-name.experiment-name.mainsim.v
This file contains the Verilog module, which instantiates the design under test. It creates
connections to all ports on the design, allowing it to stimulate inputs and monitor outputs.
The stimulation of inputs and measurement of outputs occur within a test cycle. The set
of test cycles comprises an experiment.
Test cycles may vary in their period and more than one may be used in the experiment.
In a typical programmable memory built-in self-test experiment, there exists a static test
cycle in which JTAG operates to load and unload test data registers. This test cycle
period is based on the JTAG TCK clock period. The following relationship must be
satisfied within the generated pattern for proper execution:
inputs stimulated < outputs measured < pulse JTAG TCK
The actual execution of the programmable memory built-in self-test algorithms usually
occurs within a set of dynamic test cycles whose period is based on the clock driving the
PMBIST logic. In these dynamic test cycles, only the PMBIST clock(s) are pulsed.
The generic test application driver within this module accepts instructions, input data
values, and expected output values from the given data file.
■ VER.testmode-name.experiment-name.data.logic.ex1.ts1.verilog
This file contains the information that the generic test application driver within the
*mainsim.v file used to control simulation of the patterns, applying values, and
expecting results during the required test cycles. The file is organized as a set of lines
each containing a three-digit instruction field followed by instruction-dependent data.
Incisive Simulator
irun
simulation log
CPP
Modus
analyze_embedded_test
Two design verification flows are supported from the Incisive Simulator command, irun, to
Modus command analyze_embedded_test.
-interfacefiledir intfdir
-topshell design
■ Direct access
❑ pattern class: directaccess
analyze_embedded_test
-analysis directaccess
-interfacefiledir intfdir
-topshell design
-simlog simulation-log-file
The CPP file must be generated from the simulation log file.
$Install_Dir/etc/tb/contrib/simlog2CPP -simlog simulation-log-file -cppfile
generated-cpp-file
■ JTAG access
❑ pattern class: production
analyze_embedded_test
-analysis production
-interfacefiledir intfdir
-topshell design
■ Direct access
❑ pattern class: directaccess
analyze_embedded_test
-analysis directaccess
-interfacefiledir intfdir
-topshell design
pin. In such a situation, the mode initialization sequence consists of holding the TMS signal
to the active state, pulsing TCK for 10 cycles, and setting TMS to the inactive state. However,
this is not enough to initialize all of the FSM latches inside the TAP controller.
An alternative approach to initialize the FSM latches is to manually assert the JTAG_TRST
signal just after TMS is activated by using a force event, run for small period cycles, and then
de-assert the JTAG_TRST signal by using another force event. When using the irun
command to perform simulation, it is necessary to use the -access rw option to allow force
events to occur. An example of the steps used is given below:
run 150ns
force path_to_tap_controller_instance.tap_instance.JTAG_TRST = ‘b0
run 10ns
force path_to_tap_controller_instance.tap_instance.JTAG_TRST = ‘b1
run
Methodology
Many possible methods exist to inject faults within and around memories to verify detection
occurs during programmable memory built-in self-test. The recommended methodology
relies upon changes in the Verilog memory models used in simulation. By making the
changes indicated below, analyze_embedded_test can be used to determine that proper
faults were injected and detected during the various simulation flows as displayed in Figure 6-
1 on page 161.
■ Simulation memory models must be modified to support reading fault injection control
files, injecting memory errors on memory write operations, and recording the error
injection action in the simulation log file.
■ Fault injection control files must identify the desired stuck-at fault set. Fault sets are
bound to memory modules and not memory instances.
■ analyze_embedded_test can be used to determine if the PMBIST engines properly
detect the faults injected.
module RF32X32 (
Q,
CLK,
CEN,
WEN,
A,
D
);
...
parameter UPM_WIDTH = 2;
parameter insert_SAF=1; // enable error injection when 1
parameter num_SAF=16;
output [31:0] Q;
...
// store tmpdata in memory
if (rren === 1'b1)
mem[a]=fi_d(a,tmpdata);
...
reg [15:0] SAF_row[0:num_SAF-1];
reg [7:0] SAF_col[0:num_SAF-1];
reg SAF_st[0:num_SAF-1];
integer i;
begin
fi_d = d;
if (insert_SAF)
begin
for (i=0; i<num_SAF; i=i+1)
begin
if((a == SAF_row[i]) &&
(SAF_st[i] !== 1'bx))
begin
fi_d[SAF_col[i]] = SAF_st[i];
$display("insert fault in RF32X32 at address %d, column %d, state %d at Time %t",
a, SAF_col[i], SAF_st[i], $realtime);
end
end
end
end
endfunction
...
These files are correlated by lines, the information at the same line number in each file is used
to create a stuck-at fault. The files are each expected to be num_SAF entries in size, one
entry per line in the file. Unused entries should be filled with zeroes in the row and col files,
and x in the state file.
The following sample files inject two failures into the RF32X32 memory model.
methodology described in the section Injecting Memory Faults on page 165. When
processing CPP data, such checks are not possible.
Direct Access
The Test Status indicates a failing test for the die due to the injected stuck-at faults.
Information is limited due to the direct access of the programmable memory built-in self-test.
INFO (TEM-311): Parsing the simulation log file 'path_to_file/sim.experiment-name.log'. [end TEM_311]
--------------
Test Status
--------------
Failed
Production
The Test Status indicates a failing test for the SIU 4, DCU 0, and SIU 5, DCU 0 due to the
injected stuck-at faults. This information appears in the JTAG-accessible MBISTCHK test
data register.
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistchk_tdr_map.txt'. [end
TEM_301]
INFO (TEM-507): Parsing the test definition file 'path_to_file/design_test_def.txt'. [end TEM_507]
INFO (TEM-311): Parsing the simulation log file 'path_to_file/sim.experiment-name.log'. [end TEM_311]
---------------------------------------------------------------
Amu Siu Dcu Test Status
---------------------------------------------------------------
0 4 0 Failed
0 5 0 Failed
Diagnostic
In this test, six stuck-at faults were detected by the march_lr and march_sr algorithms as
shown in the TEM-304 table. For each scheduling unit, the failing address and corresponding
physical information have been displayed if there is any. Extra information, includes write port,
testplan, algorithm, sequence iterator (SI), address order (AO), address update (AU), and
data background (DB), is available in the same table. Look at scheduling unit 1, the first failure
is detected by the march_lr algorithm when SI 1 is applied to logical address 5 for data bit
10 using the solid data background. Look at march_lr algorithm below, sequence iterator
1 is dn(r0,w1) as sequence iterators start at 0.
algorithm {
name march_lr
{
(w0)
dn(r0,w1)
(r1,w0,r0,w1)
(r1,w0)
(r0,w1,r1,w0)
(r0)
}
The last table is a completion summary table that includes all scheduling units with the
indication of testplan type: hardwired (h) or programmed (p). The number of failures detected
by each scheduling unit is displayed. In this test, each scheduling unit detects three failures.
The suffix ‘*’ indicates additional failure(s) detected beyond the predefined failurelimit.
To detect additional failure(s), increase the value of the failurelimit when generating
patterns using create_embedded_test command. This would increase the simulation
execution time because of the additional execution loop(s).
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistchk_tdr_map.txt'. [end
TEM_301]
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistdiag_tdr_map.txt'. [end
TEM_301]
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistsch_tdr_map.txt'. [end
TEM_301]
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistamr_tdr_map.txt'. [end
TEM_301]
INFO (TEM-507): Parsing the test definition file 'path_to_file/design_test_def.txt'. [end TEM_507]
INFO (TEM-507): Parsing the test definition file 'path_to_file/predefined_algorithms.txt'. [end TEM_507]
---------------------------------------------------------------------------------------------------------------
Scheduling Unit Amu Siu Dcu Target Test Plan Algorithm AO AU DB Status Failures
---------------------------------------------------------------------------------------------------------------
1 (p) 0 1 0 0 ... testplan_1 march_lr fast-row complement solid Failed 3*
---------------------------------------------------------------------------------------------------------------
2 (p) 0 1 0 0 ... testplan_2 march_sr fast-column linear solid Failed 3*
Redundancy
Redundancy patterns execute at PMBIST clock speeds as production patterns but with
redundancy analysis enabled. The solution is dynamically calculated as redundancy analysis
unit examines the fail data from the memory. Since it is impossible to predict failures, the test
results are gathered as miscompares. For both JTAG and direct access redundancy patterns,
miscompares will exist and must be analyzed by analyze_embedded_test command.
These miscompares are used to pass information from the patterns to
analyze_embedded_test.
In this test, three failures have been analyzed as shown in the table below. The Defined
Rows Columns indicates the type(s) of spare or redundant capabilities that the memory
module contains. The Fixed Rows Columns Data Bits identify the physical location that
needs to be repaired. Status information indicates whether a memory is Repairable or
Unrepairable based on the defined redundancy capability and number of failures
detected. If a memory is identified as Unrepairable, an entry is printed in the table for each
redundant resource that was used. If no redundancy analysis is defined for the memory or if
there are no redundant resources available and failures are detected, the status will be
indicated as Failed.
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistchk_tdr_map.txt'. [end
TEM_301]
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistdrar_tdr_map.txt'. [end
TEM_301]
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistsch_tdr_map.txt'. [end
TEM_301]
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistamr_tdr_map.txt'. [end
TEM_301]
INFO (TEM-507): Parsing the test definition file 'path_to_file/design_test_def.txt'. [end TEM_507]
INFO (TEM-507): Parsing the test definition file 'path_to_file/predefined_algorithms.txt'. [end TEM_507]
Direct Access
The Test Status indicates a failing test for the die due to the injected stuck-at faults.
Information is limited due to the direct access of the programmable memory built-in self-test.
INFO (TEM-309): Parsing the chip pad pattern (cpp) file 'path/chip_pad_pattern_file'. [end TEM_309]
Lot: 000000104C01291-01
Wafer: 23
Wafer Position: 022,030
Testblockname: Tblknam
Testcondition: RSFN1
--------------
Test Status
--------------
Failed
Production
The Test Status indicates a failing test for the SIU 4, DCU 0, and SIU 5, DCU 0 due to the
injected stuck-at faults. This information appears in the JTAG-accessible MBISTCHK test
data register.
INFO (TEM-301): Parsing the test data register mapping file 'path/design_mbistchk_tdr_map.txt'. [end TEM_301]
INFO (TEM-507): Parsing the test definition file 'path/design_test_def.txt'. [end TEM_507]
INFO (TEM-309): Parsing the chip pad pattern (cpp) file 'path/chip_pad_pattern_file'. [end TEM_309]
Lot: 000000104C01291-01
Wafer: 23
Wafer Position: 022,030
Testblockname: Tblknam
Testcondition: RSFN1
---------------------------------------------------------------
Amu Siu Dcu Test Status
---------------------------------------------------------------
0 4 0 Failed
0 5 0 Failed
Diagnostic
In this test, six stuck-at faults were detected by the march_lr and march_sr algorithms as
shown in the TEM-319 table. For each scheduling unit, the failing address and corresponding
physical information have been displayed if any. Extra information which includes write port,
testplan, algorithm, sequence iterator (SI), address order (AO), address update (AU), and
data background (DB), is available in the same table. Look at scheduling unit 1, the first failure
is detected by the march_lr algorithm when SI 1 is applied to logical address 5 for data bit
10 using the solid data background. Look at march_lr algorithm below, sequence iterator
1 is dn(r0,w1) as sequence iterators start at 0.
algorithm {
name march_lr
{
(w0)
dn(r0,w1)
(r1,w0,r0,w1)
(r1,w0)
(r0,w1,r1,w0)
(r0)
}
The last table is a completion summary table that includes all scheduling units with the
indication of testplan type: hardwired (h) or programmed (p). The number of failures detected
by each scheduling unit is displayed. In this test, each scheduling unit detects three failures.
The suffix ‘*’ indicates additional failure(s) detected beyond the predefined failurelimit.
To detect additional failure(s), increase the value of the failurelimit when generating
patterns using create_embedded_test command. This would increase the simulation
execution time because the additional execution loop(s).
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistchk_tdr_map.txt'. [end
TEM_301]
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistdiag_tdr_map.txt'. [end
TEM_301]
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistsch_tdr_map.txt'. [end
TEM_301]
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistamr_tdr_map.txt'. [end
TEM_301]
INFO (TEM-507): Parsing the test definition file 'path_to_file/design_test_def.txt'. [end TEM_507]
INFO (TEM-507): Parsing the test definition file 'path_to_file/predefined_algorithms.txt'. [end TEM_507]
Lot: 000000104C01291-01
Wafer: 23
Wafer Position: 022,030
Testblockname: Tblknam
Testcondition: RSFN1
---------------------------------------------------------------------------------------------------------------
Scheduling Unit Amu Siu Dcu Target Test Plan Algorithm AO AU DB Status Failures
---------------------------------------------------------------------------------------------------------------
1 (p) 0 1 0 0 ... testplan_1 march_lr fast-row complement solid Failed 3*
---------------------------------------------------------------------------------------------------------------
2 (p) 0 1 0 0 ... testplan_2 march_sr fast-column linear solid Failed 3*
Redundancy
Redundancy patterns execute at PMBIST clock speeds as production patterns but with
redundancy analysis enabled. The solution is dynamically calculated as redundancy analysis
unit examines the fail data from the memory. Since the prediction of the failure is impossible
to make, the test results are gathered as miscompares. For both JTAG and direct access
redundancy patterns, miscompares will exist and must be analyzed by
analyze_embedded_test command. These miscompares are used to pass information
from the patterns to analyze_embedded_test.
In this test, three failures have been analyzed as shown in the table blow. The Defined Rows
Columns indicates the type(s) of spare or redundant capabilities that the memory module
contains. The Fixed Rows Columns Data Bits identify the physical location that needs
to be repaired. Status information indicates whether a memory is Repairable or
Unrepairable based on the defined redundancy capability and number of failures
detected. If a memory is identified as Unrepairable, an entry is printed in the table for each
redundant resource that was used. If no redundancy analysis is defined for the memory or if
there are no redundant resources available and failures are detected, the status will be
indicated as Failed.
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistchk_tdr_map.txt'. [end
TEM_301]
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistdrar_tdr_map.txt'. [end
TEM_301]
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistsch_tdr_map.txt'. [end
TEM_301]
INFO (TEM-301): Parsing the test data register mapping file 'path_to_file/design_mbistamr_tdr_map.txt'. [end
TEM_301]
INFO (TEM-507): Parsing the test definition file 'path_to_file/design_test_def.txt'. [end TEM_507]
INFO (TEM-507): Parsing the test definition file 'path_to_file/predefined_algorithms.txt'. [end TEM_507]
Lot: 000000104C01291-01
Wafer: 23
Wafer Position: 022,030
Testblockname: Tblknam
Testcondition: RSFN1
The content of this section is divided into several topics with related items grouped under
those headings:
■ Simulation Environment on page 178
■ PMBIST Startup on page 182
■ Memory Connections and Activity on page 196
■ PMBIST Comparators on page 201
■ PMBIST Completion on page 203
■ Determining Miscomparing Registers from Simulation Logs on page 205
Simulation Environment
■ ‘timescale
supporting simulation time precision down to 1fs and a time unit of 1ps to avoid limiting the
precision of the design under test.
■ simulation delay mode: zero, unit, Standard Delay Format (SDF)
inspected on any registered signal in the simulation waveforms, as displayed in Figure 6-3 on
page 180, where the mbist_address output on the PMBIST engine changes value.
Back-annotated SDF simulation is also possible. Changes to the simulation scripts generated
by write_dft_pmbist_testbench are necessary to support this properly.
seq_udp_delay of 10ps
from clock edge
Test cycles may vary in their period and more than one may be used in the experiment. In a
typical programmable memory built-in self-test experiment, there exists a static test cycle in
which JTAG operates to load and unload test data registers. This test cycle period is based
on the JTAG TCK clock period.
The static test cycle boundaries (CYCLE in the waveform) and the Modus identifier used to
mark them uniquely, the odometer (pattern in the waveform), are visible in the simulation
waveforms for correlation with the pattern activity as displayed in Figure 6-4 on page 181.
The actual execution of the programmable memory built-in self-test algorithms usually occurs
within a set of dynamic test cycles whose period is based on the clock driving the PMBIST
logic. In these dynamic test cycles, only the PMBIST clock(s) are pulsed.
Programmable Memory built-in self-test pattern creation relies upon certain relationships
between the applied stimulus, pulsed clocks, and measurements within a test cycle. The
following inequality must be satisfied using the write_vectors options for proper pattern
generation:
If ROMs are being tested by PMBIST the data load files must be accessible in the simulation
environment. Ensure $readmem error messages like the given example do not exist in the
simulation log.
PMBIST Startup
There are a number of simple checks covering the more common problems to verify that
PMBIST logic is operating properly at initiation.
■ dft configuration mode(s) stability
Whether a PMBIST DFT configuration mode was established or simply a test signal used, the
test signal input and any ATPG related signals to all PMBIST engines must be in non-
controlling states for PMBIST to operate.
■ Clock Controllability
All clocks connected to all PMBIST engines must be controlled throughout the PMBIST
execution. If the PMBIST is controlled only by the JTAG access interface, the Genus
insert_dft pmbist command ties the mda_tck input inactive at insertion. Refer to
Figure 6-7 on page 185.
If the PMBIST is controlled only by the direct access interface, the Genus insert_dft
pmbist command ties the jtag_tck input inactive at insertion. Refer to Figure 6-8 on
page 186.
All other situations are the responsibilities of the designer to ensure properly controlled clocks
to the PMBIST engines for jtag_tck, mbist_clk, and mda_tck inputs.
Each PMBIST clock frequency is defined prior to insertion in Genus using define_
mbist_clock commands. Verifying the accuracy during pattern execution is essential as
these definitions are used in the calculation of PMBIST runtimes in the patterns run on the
tester. The given Genus command defines a design port refclk running at 100MHz
connected to a PLL with the same output frequency. This is verified by inspection of the
CYCLE, refclk, and mbist_clk waveforms in Figure 6-9 on page 188.
define_mbist_clock -name m_dsram_clk0 -hookup_pin DTMF_INST0/TEST_CONTROL_INST/
m_dsram_clk -period 10000 refclk
50ns period
10ns period
■ JTAG Concerns
When the 1149.x Test Access Port is used to control PMBIST, verifying it is operating properly
at the PMBIST AMU (Algorithm Memory Unit) ports is relatively simple. The following activity
should be observed on the PMBIST AMU ports:
❑ jtag_reset should be pulsed high indicating the TAP was reset
❑ For the first test sequence, jtag_instruction_decode_mbisttpn should be
asserted to start the PMBIST operation
❑ jtag_shiftdr should be asserted while jtag_tck is pulsed to load the PMBIST
test data register
❑ After jtag_shiftdr drops, jtag_runidle is asserted, signaling the transfer of
control to the PMBIST AMU mbist_clk domain is commencing
❑ temamu_rst should be pulsed high to reset all the PMBIST logic
When the direct access mechanism is used to control PMBIST, verifying it is operating
properly at the PMBIST engine ports requires observing the following activity on these ports:
❑ mda_reset should be pulsed high indicating the PMBIST logic was reset
❑ mda_tck is pulsed to load programmable direct access test data register(s)
❑ mda_tdi needs to be controlled before pulsing the mda_tck pin. mda_tdi serves
as control and data transfer input signal, which is used to control all the operations
in programmable direct access
❑ jtag_reset is held active or all JTAG PMBIST related instruction signals to the
PMBIST engine remain in their non-controlling states
Whether the JTAG or direct access mechanism is used to control PMBIST, the same actions
occur at transfer of control to the PMBIST engine mbist_clk domain. The following activity
should be observed on the PMBIST engine ports:
❑ After jtag_tck stays low, mbist_clk starts pulsing, signaling the transfer of
control to the PMBIST SIU mbist_clk domain is commencing
❑ temamu_rst should be pulsed high indicating the PMBIST SIU was reset
❑ temsiu_si_done is asserted low at the time the mbist_clk pulse occurs and the
set of scheduled memory devices associated with this SIU have their respective
output port activated
❑ temsiu_rwcs then activates to enable the associated set of memories
❑ temsiu_rwe activates as required to indicate the initial memory write operations of
the algorithm are commencing along with changes to the temsiu_rwaddr,
temsiu_rdata or temsiu_wdata ports
Write controls, address, and data are supplied directly from the PMBIST engine to the target
devices in the same clock cycle. Controls must be in the proper state to enable the write
operations: ENABLE high and WR_EABLE high are examples. For more details, refer to
Figure 6-14 on page 197. Note the first write operation is being transferred to the memory
device starting with the clock edge at the red cursor.
Read controls, address, and data are supplied directly from the PMBIST engine to the target
devices in the same clock cycle. Controls must be in the proper state to enable the read
operations: ENABLE high and WR_EABLE low are examples. Refer to Figure 6-15 on
page 199 for more details. Note the first read operation is being transferred to the memory
device starting with the clock edge at the red cursor.
In this case, the memory device has a read_delay 1 value specified in the PMBIST
configuration view file, meaning it takes one clock cycle to transfer the read request to the
memory, access memory, and transfer data from the memory to the PMBIST comparator.
This should be verified in the waveforms or PMBIST execution failures will result. Also note
in this algorithm that two read and write operations are occurring for each memory address.
The number of clock cycles required to read memory data from presentation of the command
and address on the PMBIST engine signal interface to the memory device must be identified
in the memory module definition within the configuration view file supplied to the Genus
PMBIST command
and address C/A 1 C/A 2
memory read
Q1 Q2
PMBIST comparator
Q1 Q2
capture memory data
PMBIST command
and address C/A 1 C/A 2
memory read
Q1 Q2
PMBIST comparator
capture memory data Q1 Q2
PMBIST command
and address C/A 1 C/A 2
memory read
Q1 Q2
memory output
register Q1 Q2
PMBIST comparator
capture memory data Q1 Q2
PMBIST Comparators
■ Actual and Expect Data Comparison
Comparison of data read from memory with expected values from the algorithms is how
PMBIST determines failures. Expected data values, temsiu_rdata, and a read enable-
temsiu_rportv, are supplied by the PMBIST engines to the comparators in the same cycle
as the read command and address are presented to the associated memories. Variations in
memory read timings are managed in the individual comparators to allow memory devices of
different characteristics to be tested simultaneously. The temdcu_fail signal from the
comparator indicates when a miscompare has occurred. Refer to the following figure for
details.
For SRAMs, temdcu_fail asserted indicates a miscompare has been detected within the
PMBIST comparator on a given memory port in a given cycle. It can be asserted only as a
result of a valid read operation in which a miscompare is detected, otherwise it is zero. The
relationship between a particular memory read operation and the temdcu_fail signal is a
function of the read_delay of the memory and whether or not the memory read data is
registered within the comparator prior to analysis. Table 6-3 on page 203 summarizes this
relationship relative to the clock cycle in which the read command is presented on the
interface between the PMBIST engine and the associated memory device.
For ROMs, temdcu_fail is asserted from the beginning of the test, only deasserting at the
end of the test if an all zeroes signature results in the MISR.
In some cases, it is possible for a failure indication to occur at the output of a PMBIST
comparator but not be valid for capture within the corresponding engine. This situation may
arise for the unselected memory devices when a subset of the memories associated with a
PMBIST engine are scheduled for execution.
comparator
memory data
memory temdcu_fail
registered in
read_delay signal active in
comparator
cycle
1 no 2
1 yes 3
2 no 3
2 yes 4
■ PMBIST Completion
Once a PMBIST engine has completed execution, its done register is asserted and remains
asserted until reset by external controls. For JTAG-initiated PMBIST, the done state is
observed on the temsiu_si_done port and assert during shifting of the MBISTCHK test
data register when the jtag_instruction_decode_mbistchk input is active. Refer to
Figure 6-17 on page 204.
The direct access done state is observed on the PMBIST SIU mda_done port. The fail state
is observed on the PMBIST SIU mda_fail port, allowing for a pass/failing die indication.
The simulation log file snippet for the production class test
INFO (TEM-311): Parsing the simulation log file 'sim.experiment-name.log'. [end TEM_311]
and further analyzed for failing register data written into the corresponding *.translated file.
This *.translated file also identifies within the design the PMBIST block(s) associated with the
detected miscompares.
From the design_pattern_control.txt file find the first measure for the production
class pattern.
## TBD Odometer Values
production_first_measure=1.1.1.2.4.15.1
Then, subtracting this value from the miscomparing pattern value in the simulation
log file, 33 - 15 = 18 is the index into the design_mbistchk_tdr_map.txt file.
This identifies the summary fail register in PMBIST tem_siu4 within the design.
## Version information
...
0 0 . 9 DTMF_INST0/tem_siu0/l_siudone_reg
0 0 0 10 DTMF_INST0/tem_siu0/l_dcufail_reg[0]
0 1 . 11 DTMF_INST1/tem_siu1/l_siudone_reg
0 1 0 12 DTMF_INST1/tem_siu1/l_dcufail_reg[0]
0 2 . 13 DTMF_INST2/tem_siu2/l_siudone_reg
0 2 0 14 DTMF_INST2/tem_siu2/l_dcufail_reg[0]
0 3 . 15 DTMF_INST3/tem_siu3/l_siudone_reg
0 3 0 16 DTMF_INST3/tem_siu3/l_dcufail_reg[0]
0 4 . 17 DTMF_INST0/tem_siu4/l_siudone_reg
0 4 0 18 DTMF_INST0/tem_siu4/l_dcufail_reg[0]
0 5 . 19 DTMF_INST0/tem_siu5/l_siudone_reg
0 5 0 20 DTMF_INST0/tem_siu5/l_dcufail_reg[0]
0 6 . 21 DTMF_INST1/tem_siu6/l_siudone_reg
0 6 0 22 DTMF_INST1/tem_siu6/l_dcufail_reg[0]
...
A
Customizing PMBIST Memory View and
Configuration Files
Conventions
Syntax Conventions
The list below describes the syntax conventions used in the PMBIST memory view and
configuration file statements.
literal or boldface Nonitalic words indicate options that you must type literally.
They can only be used in the places indicated by the syntax.
Keywords are case insensitive.
italic Words in italics indicate user-defined arguments for which you
must substitute a name or a value.
| Vertical bars (OR-bars) separate possible choices for a single
argument.
[ ] Brackets denote options. When used with OR-bars, they
enclose a list of choices from which you can choose one.
{ } Braces denote arguments and are used to indicate that a
choice is required from the list of arguments separated by OR-
bars. You must choose one from the list.
{ argument1 | argument2 | argument3 }
... Three dots (...) indicate that you can repeat the previous
argument. If the three dots are used with brackets (that is,
[argument]...), you can specify zero or more arguments. If
the three dots are used without brackets (argument...), you
must specify at least one argument, but can specify more.
{ } Braces in bold-face type must be entered literally.
Comments
You can use two types of comments:
■ End of line comments—preceded with a double slash:
// This is a comment to the end of the line
■ Enclosed comments
/* A comment can be enclosed as well */
/* And again */
The memory view file(s) contains information about the memories used in the design and the
configuration file contains information about how to test these memories.
The memory view file contents are limited to descriptions of the features defining the memory
devices and possible memory module or logic module wrappers and macro interfaces found
in the design. This file or set of files must be specified as a cdns_memory_view_file input
to the read_pmbist_memory_view command(s). Only module and macro groups should
appear in these memory view files.
The configuration file contains the directives that control the insertion of PMBIST logic into
the design. It allows control over the characteristics of the PMBIST engines and target
memory collars, and over the assignment of PMBIST engines to target memories. Default
values exist for most options, allowing you to specify only those characteristics deemed
necessary or to override the existing defaults.
You may define PMBIST algorithms within the limits imposed by the algorithm language
description. Numerous algorithms are predefined to the PMBIST application and can be
selected by algorithm name. The optional algorithm_constraints defines the
capabilities of the hardware to support predefined and user-defined algorithms. If it is not
specified, the PMBIST application determines the algorithm support requirements based on
the selected predefined algorithms and user-defined algorithms within the configuration file.
testplan is used to bind algorithms, data backgrounds, and addressing functions to specific
target groups.
The configuration file consists of two types of groups: target, ignore, and three global
definitions: algorithm_constraints, algorithm and testplan. A configuration file
can have multiple instances of each of these specifications with the exception of
algorithm_constraints which should appear only once or not at all.
Within a configuration file, the instance names, macro instance names and memory module
names must be uniquely specified within a single target list. If a target group lists a certain
type or instance of a memory and the ignore group lists an identical type or instance of a
memory, an error is indicated and must be corrected.
Descriptions
Related Information
module Group
module {
module_list
}
{
module_specifications
}
You can use a module group for each memory module in the design.
Descriptions
Related Information
port_alias Specification
port_alias {
base_port [.integer ] aliased_port
[base_port [.integer ] aliased_port ]...
}
Aliases unrecognized port names to the base port names in the Liberty file or wrapper
module. Each port can be either a scalar or a vector. The .integer notation is available
only when the module definition includes a wrapper specification.
For a module defined using a wrapper specification, all memory ports must be defined and
the .integer notation is available. At minimum, a unique memory port contains an
address bus. Multiple port memories can utilize the .integer notation to bind signals
associated with individual memory ports. This is a requirement for all relevant base ports
when more than one memory port exists and any of the base port names a, d, q are specified
in the port alias specification. Base port names a, d, q are only available for use with wrapper
specifications.
The read_pmbist_memory_view command expects that the ports defined in the Liberty
file meet a specific naming convention. If the memory compiler does not generate memory
port names that are recognized, aliasing is required to aid read_pmbist_memory_view in
the interpretation. Table A-1 on page 217 lists the base port names for a memory which can
be used to identify memory port functionality.
Test ports on memories are not always present, depending on the memory module design.
When a base port name is aliased, the add_pmbist command assumes all corresponding
test ports are also aliased similarly.The default t test input port prefix can be attached to a
base port name we[n], wem[n], cs[n], re[n], oe[n], clk above indicating a test input
port twe[n], twem[n], tcs[n], tre[n], toe[n], tclk corresponding to that functional
port name. The default y test output port suffix can be attached to a base port name we[n]y,
wem[n]y, cs[n]y, re[n]y, oe[n]y above indicating a test multiplexor output port
corresponding to the functional port name. These test port prefix and suffix characters can
also be aliased by using the tprefix and ysuffix base port names, respectively. Some
aliases are inherently supported by add_pmbist.
When multiple ports of the same function exist, a unique port identifier must be specified,
possibly after the ysuffix. This unique port identifier is assumed to be a single alphanumeric
character. Port names are parsed by add_pmbist in the following fashion:
[tprefix]port_name[ysuffix][port_identifier]
Descriptions
aliased_port Specifies the port name that add_pmbist will find in the Liberty
file and/or on the memory module definition.
base_port[.intege Specifies the port name that add_pmbist recognizes and
r] associates with a predefined function. An optional port number,
integer, can be used to identify individual ports of a multiple
port memory when used in the wrapper specification. Specify
one of the port names found in Table A-1 on page 217.
Note: Overloading of port functions is neither supported nor permitted through this
mechanism. To clarify, if a port CS exists on a target device, a port XY on that device cannot
be aliased to CS, port_alias {CS XY}, unless the original CS port has its function
redefined as well, port_alias { te CS }.
Examples
■ In the following example, the add_pmbist command will interpret port
my_custom_write_enable_name as the write enable port, we, and so on.
{
module {
RAM_2000X32
}
{
port_alias
{
we my_custom_write_enable_name
re my_custom_read_enable_name
clk my_custom_memory_clock_name
ten my_custom_test_enable_name_NOT
}
}
}
■ In the following example module RAM_2000X32 has two write enable ports. To
distinguish the two ports a unique port identifier of a and b is assigned to the write enable
ports. Also, a prefix of Tst is assigned to the test ports for the memory.
{
module {
RAM_2000X32
}
{
port_alias
{
we wea
we web
tprefix Tst
}
}
}
■ In the following example module RAM_2000X32 has two read-write ports addressed by
aa and ab associated with write data buses da and db and output data buses qa and qb.
The memory also provides test input ports identified by a suffix "m", ama, amb, dma, dmb
corresponding to the functional address and data buses. The port aliasing mechanism
requires the following bindings to understand the test port functions.
{
module {
RAM_2000X32
}
{
port_alias
{
ta ama
ta amb
td dma
td dmb
}
}
}
port_action Specification
port_action {
port {0|1|U|X}
[port {0|1|U|X}]...
default {0|1|U|X} }
Specifies how to control the memory ports that are not used by the PMBIST engine. Each
port can be a scalar or a vector. If the port is a vector, you can either specify one value to
connect all bits of the bus in a similar fashion, or you can specify a value for each bit (referred
to as bit indexing). In the latter case, the tool will error out if the supplied bit-string does not
match the bus width. Vector notation requires the use of brackets, "[" and "]", to enclose bit
indices separated by a ":" when indicating a range of values.
The memories described in the technology Liberty files can have ports which are not used by
the PMBIST engine. Such ports might require some connection during the testing process to
prevent erroneous behavior of the memory. Usually these ports are handled in the RTL,
especially if the value is non-uniform and subject to change. For a uniform or stable value that
is to be constrained differently during test than in a functional mode, such as the parametric
test ports on the memory, the configuration file must specify how to these ports will be
controlled when add_pmbist is executed.
Descriptions
port Specifies the memory port name that must be controlled when
the memory is tested.
Examples
■ In the configuration file below, the two tune ports, tune_1 and tune_2 are constrained
to a value, where the func_op pin was left untouched and the fuse pin excluded.
If a net is already connected to the tune ports, a multiplexer will be inserted on that net
and selected with the PMBIST operation control to choose between the two modes:
functional and memory test. If the tune ports are unconnected initially, the port will be
directly tied to the constant value specified in the port_action statement.
The func_op pin will be included in the observation-only test logic added when the
logic_test option so indicates but the fuse port is excluded from observation for this
module.
{
module {
RAM_2000X32
}
{
port_alias
{
we wea
we web
tprefix Tst
}
port_action
{
tune_1 0
tune_2 1
func_op U
fuse X
}
}
}
■ The following example shows two legal specifications for a bus. The first specification
indicates that all bits are connected to logical 1 for PMBIST. The second specification
specifies a different value for each bit. If the range of BWE is defined as BWE[2:0],
BWE[2] will be tied to 1 and BWE[1] to 0, while BWE[0] will be left untouched. The third
specification is illegal and will cause an error as the bit-string is not the proper length.
port_action BWE 1
port_action BWE 10X
port_action BWE 10
address_limit Specification
address_limit integer
Example
In the configuration file below, the module name RAM_2000X32 indicates that the width of the
data bus is 32 and the size of the address space, the number of words, is 2000.
{
module {
RAM_2000X32
}
{
port_alias
{
we wea
we web
tprefix Tst
}
port_action
{
tune_1 0
tune_2 1
func_op U
fuse X
}
address_limit 2000
}
}
read_delay Specification
read_delay integer
Specifies the intrinsic read delay of the selected memory module(s) in system clock cycles.
Description
integer Indicates the number of system clock cycles required for new
data to appear on the data output ports once a read operation is
presented to the memory’s input ports.
The value is one if no clocked storage elements exist between
the read request input ports and the data output ports, usually
considered an asynchronous read operation.
Default: 2
The default value of two indicates that a register exists on the
input ports within the memory to capture the read request. The
memory read operation is launched from the values captured in
this embedded register.
memory read
Q1 Q2
PMBIST comparator
capture memory data Q1 Q2
memory read
Q1 Q2
PMBIST comparator
capture memory data Q1 Q2
Figure A-4 read_delay 3 - memory with data output register read timing
memory read
Q1 Q2
PMBIST comparator
capture memory data Q1 Q2
Example
{
module { RAM_2000X32 }
{
port_alias {
we wea
we web
tsuffix Tst
}
port_action {
tune_1 0
tune_2 1
func_op U
}
address_limit 2000
read_delay 1
}
}
data_order Specification
data_order {
{ bit | bit:bit }... |
{{ bit | bit:bit }...}...
}
Specifies the physical order of the data bits within the memory word positionally in the
expression above, from 0 on the left to highest index on the right, when they do not
monitonically increase or decrease or when physical memory cell subarrays exist. The bit
above represents the logical bit index at the data input and output ports of the memory
module.
Descriptions
bit Indicates one logical bit index within the memory word.
bit:bit Indicates a contiguous range of bits within the memory word.
Any bit value must exist within the valid set of bits contained
within the memory word and each bit must be specified only
once.
{{ bit | bit:bit }...}...
Specifies groups of data bits that are physically disjoint subsets
of the memory word. As an example, such a situation can arise
when the wordline address decoder exists in the horizontal
center of the physical memory cell array, effectively creating two
memory cell subarrays.
Default: 0:n
The default value indicates the logical bits of the memory word
are physically ordered in an ascending sequence based on bit
index within the word and physically contiguous.
Example
In the configuration below, the bits of the memory word are physically ordered with the low
order bits in ascending sequence and the high order bits in descending sequence.
RAM_2000X32
CS
CLK
WE
A[10:0]
D[31:0] Q[31:0]
D/Q 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
physical position 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
{
module { RAM_2000X32 }
{
port_alias {
we wea
we web
tsuffix Tst
}
port_action {
tune_1 0
tune_2 1
func_op U
}
address_limit 2000
data_order { 0:15 31:16 }
}
}
In the configuration below, the logial bits of the memory word are physically ordered with the
low order bits in ascending sequence and the high order bits in descending sequence. Here
the two halves of the memory word are indicated as physically separated memory subarrays
which can be treated independently from a memory test perspective.
{
module { RAM_2000X32 }
{
port_alias {
we wea
we web
tsuffix Tst
}
port_action {
tune_1 0
tune_2 1
func_op U
}
address_limit 2000
data_order { {0:15} {31:16} }
}
}
write_mask_binding Specification
write_mask_binding {
integer { {bit | bit:bit}... } ...
}
Specifies the association of write mask bits with the data bits of the memory words.
Descriptions
Example
In the configuration below, four write mask bits control different 8 contiguous bit portions of
the memory word.
{
module { RAM_2000X32 }
{
port_alias {
we wea
we web
tsuffix Tst
}
port_action {
tune_1 0
tune_2 1
func_op U
}
address_limit 2000
write_mask_binding {
0 {0:7}
1 {8:15}
2 {16:23}
3 {24:31}
}
}
}
address_partition Specification
address_partition {
[column {integer | integer:integer }...
[order [{ data { bit| bit:bit}... }] { address_list}]...]
row {integer | integer:integer }...
[order [{ bank { integer| integer :integer}... }]
[{ data { bit| bit :bit}... }]
{ address_list [: partial_address_list ] }]...
[bank {integer | integer:integer }]
}
Describes the memory’s physical storage cell layout and addressing scheme.
For linear memories, illustrated in Figure A-5, every value of the address will access a unique
row in the memory.
Muxed memories, illustrated in Figure A-6 on page 234, are constructed with multiple
columns per data bit. This results in a more regular shape for the memory.
3 12 13 14 15 12 13 14 15 12 13 14 15 12 13 14 15
2 8 9 10 11 8 9 10 11 8 9 10 11 8 9 10 11
row
1 4 5 6 7 4 5 6 7 4 5 6 7 4 5 6 7
0 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
3 12 13 15 14 12 13 15 14 12 13 15 14 12 13 15 14
2 8 9 11 10 8 9 11 10 8 9 11 10 8 9 11 10
row
1 4 5 7 6 4 5 7 6 4 5 7 6 4 5 7 6
0 0 1 3 2 0 1 3 2 0 1 3 2 0 1 3 2
3 12 13 15 14 12 13 15 14 12 13 15 14 12 13 15 14
1 4 5 7 6 4 5 7 6 4 5 7 6 4 5 7 6
row
2 8 9 11 10 8 9 11 10 8 9 11 10 8 9 11 10
0 0 1 3 2 0 1 3 2 0 1 3 2 0 1 3 2
3 12 13 15 14 14 15 13 12 12 13 15 14 14 15 13 12
1 4 5 7 6 6 7 5 4 4 5 7 6 6 7 5 4
row
2 8 9 11 10 10 11 9 8 8 9 11 10 10 11 9 8
0 0 1 3 2 2 3 1 0 0 1 3 2 2 3 1 0
address_partition { row 3:2 column 1:0 order {data 0:1} {0 1 2 3} order {data 2:3} {3 2 1 0} }
data bits
0 1 2 3
3 12 13 14 15 12 13 14 15 15 14 13 12 15 14 13 12
2 8 9 10 11 8 9 10 11 11 10 9 8 11 10 9 8
row
1 4 5 6 7 4 5 6 7 7 6 5 4 7 6 5 4
0 0 1 2 3 0 1 2 3 3 2 1 0 3 2 1 0
When an address is applied to the memory to access a row, a portion of the address bits is
used to select the column from which to get the word. In the address, address bit “0” is
assumed to be the least significant bit, while address bit “n” is assumed to be the most
significant bit. The least significant bits are usually used to select the columns, while the most
significant bits are used to select the rows and possibly banks.
The order of the columns can change based on the physical layout of the memory. Some
memories can have the columns in ascending integer order. Some memories may have a
different order. The PMBIST hardware must understand the memory structure so that the
patterns can be correctly applied to test the memory based on its physical cell array layout.
A checkerboard will still be a true checkerboard pattern and so on for the other patterns.
The column structure of the first muxed memory shown in Figure A-6 has logical addresses
0, 1, 2 and 3 that are physically aligned. This is also the default order. The next two examples
have a column order within each data bit that has addresses 0, 1, 3, 2 contiguously aligned.
The fourth example has two column orders, the even data bits having addresses 0, 1, 3, 2
contiguously aligned and the odd data bits having addresses 2, 3, 1, 0 contiguously aligned.
The fifth example has two column orders, the low order data bits having addresses 0, 1, 2, 3
contiguously aligned and the high order data bits having addresses 3, 2, 1, 0 contiguously
aligned. Examples three and four show a non-monitonically increasing row order: 0, 2, 1, 3.
Memories may also employ the use of banks, whether explicitly or implicitly based on column
address wiring limits or collections of data bits. In either case, PMBIST assumes the patterns
written must account for the physical layout within the banks but that space filled with wires
and random logic exists both vertically and horizontally between banks. This avoids the need
to maintain consistency with any pattern written between adjacent banks in any direction.
Banked memory examples are illustrated in Figure A-7 on page 236. The first example splits
the memory vertically across the data word: the low order bits are in the left half and the high
order bits are in the right half. Notice the mirrored column addressing structure across the
halves. The data_order specification is used to convey this vertically-split bank structure.
As the patterns can properly fill the memory for each bank independently, two equivalent
means of representing the address partition are shown for this example. The second banked
example is split horizontally using bit 0 of the address. Notice the row order is mirrored across
the horizontal split and two address partition specifications can be specified. Again, the
proper patterns can fill the memory for each bank independently. The third banked example
uses the high order address to select the bank. The structure of each bank is consistent in its
row and column addressing.
3 12 13 14 15 12 13 14 15 15 14 13 12 15 14 13 12
2 8 9 10 11 8 9 10 11 11 10 9 8 11 10 9 8
row
1 4 5 6 7 4 5 6 7 7 6 5 4 7 6 5 4
0 0 1 2 3 0 1 2 3 3 2 1 0 3 2 1 0
3 25 27 29 31 25 27 29 31 25 27 29 31 25 27 29 31
2 17 19 21 23 17 19 21 23 17 19 21 23 17 19 21 23
row
1 9 11 13 15 9 11 13 15 9 11 13 15 9 11 13 15
bank 1 0 1 3 5 7 1 3 5 7 1 3 5 7 1 3 5 7
0 0 2 4 6 0 2 4 6 0 2 4 6 0 2 4 6
1 8 10 12 14 8 10 12 14 8 10 12 14 8 10 12 14
row
2 16 18 20 22 16 18 20 22 16 18 20 22 16 18 20 22
bank 0 3 24 26 28 30 24 26 28 30 24 26 28 30 24 26 28 30
3 31 30 29 28 31 30 29 28 31 30 29 28 31 30 29 28
2 27 26 25 24 27 26 25 24 27 26 25 24 27 26 25 24
row
1 23 22 21 20 23 22 21 20 23 22 21 20 23 22 21 20
bank 1 0 19 18 17 16 19 18 17 16 19 18 17 16 19 18 17 16
3 15 14 13 12 15 14 13 12 15 14 13 12 15 14 13 12
2 11 10 9 8 11 10 9 8 11 10 9 8 11 10 9 8
row
1 7 6 5 4 7 6 5 4 7 6 5 4 7 6 5 4
bank 0 0 3 2 1 0 3 2 1 0 3 2 1 0 3 2 1 0
Descriptions
Example
In the configuration below, address bits 2 down to 0 are used to select the columns. Address
bits 8 down to 3 are used to select the rows. Address bits 10 to 9 are the most significant
address bits and used to select one of four banks. The order indicates that the column
structure has addresses 0, 1, then 3 followed by 2 as the physical alignment. As there are 3
bits in the column address, 8 locations are stored in the data bit columns per row. The
hardware assumes the remaining columns are ordered 4,5,7,6 following the pattern to
complete each row.
{
module {
RAM_2000X32
}
{
port_alias
{
we wea
we web
tsuffix Tst
}
port_action
{
tune_1 0
tune_2 1
func_op U
}
address_limit 2000
read_delay 1
address_partition
{
bank 10:9
row 8:3
column 2:0 order { 0 1 3 2 }
}
}
}
wrapper Specification
wrapper wrapper_module
Under certain conditions, a logical level of abstraction or a logical wrapper around a memory
module may be necessary. As an example, when supporting memory repair features exist
outside the memory module, a wrapper is necessary to encapsulate the repair logic and the
memory module. When a wrapper is specified, PMBIST makes connections to the wrapper
module rather than the memory module itself.
It is also possible to specify a memory wrapper at the level of the memory module itself. In
such a situation all pins of the memory module must be identified in the module specification
using port alias or port action statements. A Liberty file is required to define the cell to Genus
, but the memory constructs within the Liberty file that are normally used to identify a memory
and some of its features need not be present.
port_alias and port_action specifications should refer to ports on the wrapper module
in these situations and all memory ports must be defined when using the wrapper
specification.
Further, it is possible to specify two different views of a memory instance when enabled using
the attribute, pmbist_enable_multiple_views. In such situations, a logical wrapper
view can be paired either with a memory module or memory wrapper view of the same
memory. PMBIST connections are made to the appropriate ports. Both views should be
specified in the same target section.
Description
Example
In the configuration shown below, row repair logic exists external to the memory and must be
controlled by the PMBIST. The repair ports are defined to the wrapper module in the port alias
specification.
RAM_2000X32_top
RAM_2000X32
CS CS
CLK CLK
WE WE
A[10:0] A[10:0]
D[31:0] D[31:0] Q[31:0] Q[31:0]
row
RRE repair
RRA[7:0] controls
{
module { RAM_2000X32 }
{
wrapper RAM_2000X32_top
port_alias {
cs CS
clk CLK
we WE
a A
d D
q Q
rre RRE
rra RRA
}
address_limit 2000
read_delay 1
address_partition
{
bank 10:9
row 8:3
column 2:0 order { 0 1 3 2 }
}
}
}
redundancy Specification
redundancy {
{ row {integer | integer:integer }...
[data {{ bit| bit:bit}...}]
[bank_range {{ integer| integer:integer}...}]
[map { [srsi port srclk port [srst port] [sre port] [srso port]]
[enable port]
address range port {range | unused}
}]
| column [{integer | integer:integer }...]
[data {{ bit| bit:bit}...}]
[bank_range {{ integer| integer:integer}...}]
[map { [srsi port srclk port [srst port] [sre port] [srso port]]
[enable port]
data range [port] [address range port] function
}]
} ...
}
Specifies the type(s) of spare or redundant capabilities that the memory module contains.
The following types or combination of types are supported:
spare rows
spare data bits
spare columns
spare rows and data bits
spare rows and columns
Each spare resource must be individually defined. The specified resource must include the
map expression when the PMBIST logic is expected to control the spare resource. The
redundant capability can be further bound to specific groups of data bits and memory words.
More than one contiguous row or column, in the case of multiplexed column memory
structures, can be treated as a configurable spare block resource. Full data IO redundancy is
covered as a subset of column redundancy where the number of columns in the spare block
is equal to the number of columns implementing the data bit.
Limitations:
■ bank, row and column address fields are each allocated fields within the address as
defined in the address_partition specification.
■ bank_range can be used to indicate that a particular spare resource is assigned per
bank or group of banks. The bank_range expression must be a subset of the range of
integer values available in the address_partition bank expression. The expression
may be uniquely specified for row and for column spare resources, and if used, fully
enumerated within each resource class.
■ row, when an incomplete specification of the address_partition row address field,
must be a contiguous range on the high end of the row address field, defining the row-
configurable unit as a block of rows sharing common low-order row address field bits not
included in the row expression. The row expression must be a subset of the
address_partition row expression.
■ column, when an incomplete specification of the address_partition column
address field, is a contiguous range on the high end of the column address field, defining
the column-configurable unit as a block of columns sharing common low-order column
address field bits not included in the column expression. The column expression must be
a subset of the address_partition column expression. When no address bits are
specified it represents data IO redundancy.
spare row
FBA 0 0 0 0 1 1 1 1 2 2 2 2 3 3 3 3
FCA 0 1 2 3 0 1 2 3 0 1 2 3 0 1 2 3
In Figure A-8, the single spare column can replace any single column, identified by column
address bits 1 to 0, of any bit in the memory. As such, the redundancy specification could be
any of the following samples.
redundancy {column 1:0 data {0:3}}
redundancy {column 0:1 data {0 1 2 3}}
Similarly, the single redundant row may replace any single row, identified by row address bits
3 to 2, across all bits and columns in the memory words. Possible specifications include the
following.
redundancy {row 3:2 data {0:3}}
redundancy {row 2:3 data {0 1 2 3}}
Now consider that both the single row and the single column are available for use. Possible
specifications include the following.
redundancy {row 3:2
column 1:0
}
When repair operations are controlled by PMBIST, port mapping information is also
necessary. The description below shows the extensions to the example including connections
to relevant ports on the memory.
port_alias { rre RRE
rra FRA
cre CRE
cra FBA
cra FCA
}
redundancy { row 3:2
map {enable RRE address 0:3 FRA[1:0] 0:3}
column 1:0
map {enable CRE data 0:3 FBA[1:0] address 0:3 FCA[1:0] integer}
}
3 28 29 30 31 28 29 30 31 31 30 29 28 31 30 29 28
2 24 25 26 27 24 25 26 27 27 26 25 24 27 26 25 24
row
1 20 21 22 23 20 21 22 23 23 22 21 20 23 22 21 20
bank 1 0 16 17 18 19 16 17 18 19 19 18 17 16 19 18 17 16
3 12 13 14 15 12 13 14 15 15 14 13 12 15 14 13 12
2 8 9 10 11 8 9 10 11 11 10 9 8 11 10 9 8
row
1 4 5 6 7 4 5 6 7 7 6 5 4 7 6 5 4
bank 0 0 0 1 2 3 0 1 2 3 3 2 1 0 3 2 1 0
Figure A-9 shows a memory with the data words split into two physical halves and the rows
split into two physical banks, resulting in four separate physical memory subarrays. In this
example, each of the four subarrays has a single 2-column configurable unit, implying that half
a data bit can be repaired in each subarray. Each of the left and right halves of the memory
has a single row which can be reconfigured to either of the two subarrays in that half of the
memory. A possible redundancy description follows:
redundancy { row 3:2 data {0 1}
column 1 data {0 1} bank_range {0}
column 1 data {0 1} bank_range {1}
row 3:2 data {2 3}
column 1 data {2 3} bank_range {0}
column 1 data {2 3} bank_range {1}
}
When repair operations are controlled by PMBIST, port mapping information is also
necessary. The description below shows the extensions to the example including connections
to relevant ports on the memory.
port_alias { rre RENF
rra RRAF[2:0]
rre RENS
rra RRAS[2:0]
cra CRAL[5:0]
cra CRAH[5:0]
}
redundancy { row 3:2 data {0 1}
map {enable RENF address 0:7 RRAF 0:7}
column 1 data {0 1} bank_range {0}
map {data 0:1 address 0:1 CRAL[5:3] shift_right_integer
}
column 1 data {0 1} bank_range {1}
map {data 0:1 address 0:1 CRAL[2:0] shift_right_integer
}
row 3:2 data {2 3}
map {enable RENS address 0:7 RRAS 0:7}
column 1 data {2 3} bank_range {0}
map {data 0:1 address 0:1 CRAH[5:3] shift_left_integer
}
column 1 data {2 3} bank_range {1}
map {data 0:1 address 0:1 CRAH[2:0] shift_left_integer
}
}
In the previous example, RENF/S are positive active row repair enable signals as defined in
the port alias specification and RRAF/S the failing address applied to the left or right half
spare partial row of the memory. The address range is a combination of the bank, address bit
4, and row, address bits 3 to 2, combined in the order required of the RRAF/S memory port
descriptions, memory address bits 4 to 2 in this example. For the column redundancy
expressions, half data IOs are being replaced where bit 0 of the address can be ignored in
the analysis. There is no explicit column repair enable signal, but the all zeroes value of
CRAL/H portion of the vector indicates that no column repair is being requested on that repair
interface. Note the repair vector in CRAH/L shifts the reconfigued column pairs toward the
spare structures in the middle of the physical cell array while removing the bad columns from
use, in effect, translating the failing logical data bit and column addresses to a physical
relocation value.
3 28 29 30 31 28 29 30 31 31 30 29 28 31 30 29 28
2 24 25 26 27 24 25 26 27 27 26 25 24 27 26 25 24
row
1 20 21 22 23 20 21 22 23 23 22 21 20 23 22 21 20
bank 1 0 16 17 18 19 16 17 18 19 19 18 17 16 19 18 17 16
3 12 13 14 15 12 13 14 15 15 14 13 12 15 14 13 12
2 8 9 10 11 8 9 10 11 11 10 9 8 11 10 9 8
row
1 4 5 6 7 4 5 6 7 7 6 5 4 7 6 5 4
bank 0 0 0 1 2 3 0 1 2 3 3 2 1 0 3 2 1 0
Figure A-10 shows a memory with the data words split into two physical halves and the rows
split into two physical banks, resulting in four separate physical memory subarrays. In this
example, each pair of subarrays horizontally has a single full data bit as a reconfigurable unit.
Each of the left and right halves of the memory has a single row which can be reconfigured
to either of the two subarrays in that half of the memory. A possible redundancy description
follows:
redundancy { row 3:2 data {0:1}
column bank_range {0}
row 3:2 data {2:3}
column bank_range {1}
}
When repair operations are controlled by PMBIST, port mapping information is also
necessary. The description below shows the extensions to the example including connections
to relevant ports on the memory.
port_alias { rre RENF
rra RRAF[2:0]
rre RENS
rra RRAS[2:0]
cra CRAL[2:0]
cra CRAH[2:0]
}
redundancy { row 3:2 data {0:1}
map {enable RENF address 0:7 RRAF 0:7}
column bank_range {0}
map {data 0:3 CRAL[2:0] shift_right_integer
row 3:2 data {2:3}
map {enable RENS address 0:7 RRAS 0:7}
column bank_range {1}
map {data 0:3 CRAH[2:0] shift_right_integer
}
In the previous example, RENF/S are positive active row repair enable signals as defined in
the port alias specification and RRAF/S the failing address applied to the left or right half
spare partial row of the memory. The address range is a combination of the bank, address bit
4, and row, address bits 3 to 2, combined in the order required of the RRAF/S memory port
descriptions, memory address bits 4 to 2 in this example. For the column redundancy
expressions, full data IOs are being replaced. There is no explicit column repair enable signal,
but the all zeroes value of CRAL/H indicates that no column repair is being requested on that
interface. Note the repair vector in CRAH/L shifts the rightmost data bit towards the spare
structures on the right side of the physical cell array while removing the bad columns from
use, in effect, translating the failing logical data bit and column addresses to a physical
relocation value.
data bits
0 1 2 3
3 25 27 29 31 25 27 29 31 25 27 29 31 25 27 29 31
2 17 19 21 23 17 19 21 23 17 19 21 23 17 19 21 23
row
1 9 11 13 15 9 11 13 15 9 11 13 15 9 11 13 15
bank 1 0 1 3 5 7 1 3 5 7 1 3 5 7 1 3 5 7
0 0 2 4 6 0 2 4 6 0 2 4 6 0 2 4 6
1 8 10 12 14 8 10 12 14 8 10 12 14 8 10 12 14
row
2 16 18 20 22 16 18 20 22 16 18 20 22 16 18 20 22
bank 0 3 24 26 28 30 24 26 28 30 24 26 28 30 24 26 28 30
In Figure A-11, the memory is split horizontally using address bit 0 to address the two banks.
The row order is mirrored across the horizontal axis. Also, a single two-row reparable block is
allocated to each memory bank. Note the redundancy specification ignores the physical row
order in defining the spare capabilities of each memory subarray.
redundancy{ row 4 bank_range {0}
row 4 bank_range {1}
}
When repair operations are controlled by PMBIST, port mapping information is also
necessary. The description below shows the extensions to the example including connections
to relevant ports on the memory.
port_alias { srsi RR_SI
srso RR_SO
srclk RR_CLK
rre srreg[3]
rre srreg[1]
rra srreg[2]
rra srreg[0]
}
redundancy { row 4 bank_range {0}
map {srsi RR_SI srso RR_SO srclk RR_CLK enable srreg[3]
address 0:1 srreg[2] 0:1}
row 4 bank_range {1}
map {srsi RR_SI srso RR_SO srclk RR_CLK enable srreg[1]
address 0:1 srreg[0] 0:1}
}
In the previous example, two block row repair structures are available, with one spare 2-row
block assigned to each bank of memory. In this situation, a repair register exists within the
memory module itself and is accessed via a serial shift interface. This is indicated by the port
alias definitions: the clock, RR_CLK, to shift the values into the memory-internal register,
srreg[0:3], ordered from shift input, RR_SI, to shift output, RR_SO. srreg[3]/[1] are
positive active row repair enable signals as defined in the port alias specification and
srreg[2]/[0] the failing address applied to the top or bottom bank of the memory. Note
the repair vector in srreg[2]/[0] identifies the reconfigured row pairs replaced by the
spare structures in the middle of the physical cell array while removing the bad row pairs from
use, in effect, translating the failing logical row addresses to a physical relocation value. It is
assumed the low order row address bit 3 can be ignored in the selection of the replaced row
pair.
Descriptions
map { [srsi port srclk port [srst port] [sre port] [srso port] ]
[enable port]
{ address range port {range | unused} |
data range [port] [address range port] function} }
}
■ integer
■ mask
■ shift_left_integer
■ shift_left_mask
■ shift_right_integer
■ shift_right_mask
If the interface to the redundant feature is a serial interface, a
shift register internal to the memory module already exists to
hold the repair solution. In this case, the register shift input,
srsi port, and register shift clock, srclk port, must be
defined to access the repair register. Optional register shift
asynchronous reset, srst port, register shift clock enable,
sre port, register shift output, srso port, may be specified
if they exist. Subsequently, port references in the enable,
data and address expressions must indicate
srreg[integer] or srreg[integer:integer] to refer
to the appropriate shift register bit(s).
The order of the specified spare resources is a function of the
bit positions within the memory internal shift register, srreg.
If the map expression is not used, PMBIST hardware must be
limited to determining a redundancy analysis solution, but no
PMBIST hardware is implemented to access the memory
module repair registers or any embedded non-volatile memory.
Any repair function is a responsibility of the designer in this
situation.
Default: none
Examples
■ In the configuration below, the redundant features are applicable to the entire memory
and indicate two spare rows which can be individually assigned and a single spare
column. In this example, no map expressions exist, indicating that the redundancy
analysis can be performed by the hardware, but repair is not directly controlled by the
inserted PMBIST.
{
module {
RAM_2000X32
}
{
port_alias
{
we wea
we web
tsuffix Tst
}
port_action
{
tune_1 0
tune_2 1
func_op U
}
address_limit 2000
read_delay 1
address_partition
{
bank 10:9
row 8:3
column 2:0 order { 0 1 3 2 }
}
redundancy
{
row 8:3
row 8:3
column 2:0
}
}
}
■ In the configuration below, the redundancy is specified using banks and columns. The
module has four banks and two spare data bits per bank pair. In this example, no map
expressions exist, indicating that the redundancy analysis can be performed by the
hardware, but repair is not directly controlled by the inserted PMBIST.
{
module {
RAM_2000X32
}
{
port_alias
{
we wea
we web
tsuffix Tst
}
port_action
{
tune_1 0
tune_2 1
func_op U
}
address_limit 2000
read_delay 1
address_partition
{
bank 10:9
row 8:3
column 2:0 order { 0 1 3 2 }
}
redundancy
{
column bank_range {0:1}
column bank_range {0:1}
column bank_range {2:3}
column bank_range {2:3}
}
}
}
macro Group
macro {
macro_list
}
{
macro_specifications
}
Describes the set of memories contained within a core or hierarchical design module and the
block port connections necessary to test these memories when the PMBIST logic must
connect to these predefined macro ports.
A macro group should be defined for each independently controlled memory test interface
available within the macro.
Descriptions
Related Information
name Specification
name [macro_instance_name:]macro_interface_name
Specifies the name associated with a macro statement and a memory test interface on that
macro. In some cases, where a macro is used more than once, it may be necessary to create
a unique macro view per instance. For these cases the macro_instance_name can be
included in the name value above to disambiguate each use.
Description
Example
In the configuration below, a two processor L1 cache memory test interface and an L2 cache
memory test interface are named against a common core.
{
macro {
mp_core
}
{
name mp_core_L1_mbist
}
}
{
macro {
mp_core
}
{
name mp_core_L2_mbist
}
}
port_access Specification
port_access {
{ assign {port|pin} binary_string [tam] |
sample {port|pin} binary_string }...
}
Defines ports on the macro module boundary or pins internal to the macro module which can
be assigned values or sampled for values in the testplan prologue and epilogue
expressions, algorithm assign expressions, and memory_map expressions. Each port/
pin can be a scalar or a vector. Vector notation requires the use of brackets, "[" and "]", to
enclose bit indices separated by a ":" when indicating a range of signals.
Pin references are path names relative to the macro module boundary. "/" is used as the
hierarchical separator.
Description
Example
In the configuration below, a two processor L1 cache memory test interface and an L2 cache
memory test interface have handshaking signals which must be used to establish memory
BIST control of the memories prior to starting actual memory BIST operations. In this
situation, the mbreq1 and mbreq2 ports request PMBIST operations should commence and
the mback1 and mback2 signals acknowledge it is safe to start PMBIST operations on the
memories associated with the respective interfaces.
{
macro {
mp_core
}
{
name mp_core_L1_mbist
port_access {
assign mbreq1[1:0] 00
assign mbcpid[1:0] 00
assign mblogarray1[1:0] 00
assign mbaddr1[10:7] 0000
sample mback1[1:0] 00
}
}
}
{
macro {
mp_core
}
{
name mp_core_L2_mbist
port_access {
assign mbreq2 0
assign mblogarray2[1:0] 00
assign mbaddr2[12:8] 00000
sample mback2 0
}
}
}
port_alias Specification
port_alias {
base_port [.integer ] aliased_port_or_pin
[base_port [.integer ] aliased_port_or_pin ]...
}
In the macro context, port_alias specifies how to bind the macro module ports or pins to
the base port names necessary to test the physical memories accessible through the macro
interface. Each port or pin can be either a scalar or a vector. The .integer notation is
available when multiple port memories exist within the macro and are supported by unique
control interfaces within the macro. For a macro, the minimum set of base port names which
must be defined include clk, a, d, q.
Pin references are path names relative to the macro module boundary. "/" is used as the
hierarchical separator.
Description
Example
In the configuration below, the appropriate interface signals are defined within the module as
macro interface connection points for the PMBIST logic.
{
macro {
mp_core
}
{
name mp_core_L1_mbist
port_access {
assign mbreq1[1:0] 00
assign mbcpid[1:0] 00
assign mblogarray1[1:0] 00
assign mbaddr1[10:7] 0000
sample mback1[1:0] 00
}
port_alias {
a mbaddr1[10:0]
clk CLK
we mbwe1
wem mbwem1
re mbre1
d mbdatain1[127:0]
q mbdataout1[127:0]
}
}
}
{
macro {
mp_core
}
{
name mp_core_L2_mbist
port_access {
assign mbreq2 0
assign mblogarray2[1:0] 00
assign mbaddr2[12:8] 00000
sample mback2 0
}
port_alias {
a mbaddr2[12:0]
clk CLK
we mbwe2
re mbre2
d mbdatain2[143:0]
q mbdataout2[143:0]
}
}
}
port_action Specification
port_action {
{port|pin} {0|1|U|X}
[{port|pin} {0|1|U|X}]...
default {0|1|U|X} }
In the macro context, port_action specifies how to control the macro module ports and
pins that are not used by the PMBIST logic but must remain in a stable state for the duration
of the PMBIST operations. Each port/pin can be a scalar or a vector. If the signal is a vector,
you can either specify one value to connect all bits of the bus in a similar fashion, or you can
specify a value for each bit, referred to as bit indexing. In the latter case, the tool will error out
if the supplied bit string does not match the bus width. Vector notation requires the use of
brackets, "[" and "]", to enclose bit indices separated by a ":" when indicating a range of
values.
Pin references are path names relative to the macro module boundary. "/" is used as the
hierarchical separator.
Description
Example
In the configuration below, certain DFT and power switch enable signals must be controlled
during PMBIST operations.
{
macro {
mp_core
}
{
name mp_core_L1_mbist
port_access {
assign mbreq1[1:0] 00
assign mbcpid[1:0] 00
assign mblogarray1[1:0] 00
assign mbaddr1[10:7] 0000
sample mback1[1:0] 00
}
port_alias {
a mbaddr1[10:0]
clk CLK
we mbwe1
wem mbwem1
re mbre1
d mbdatain1[127:0]
q mbdataout1[127:0]
}
port_action {
dftse 0
dftmembypass 0
pwrupcpul1 11
}
}
}
{
macro {
mp_core
}
{
name mp_core_L2_mbist
port_access {
assign mbreq2 0
assign mblogarray2[1:0] 00
assign mbaddr2[12:8] 00000
sample mback2 0
}
port_alias {
a mbaddr2[12:0]
clk CLK
we mbwe2
re mbre2
d mbdatain2[143:0]
q mbdataout2[143:0]
}
port_action {
dftse 0
dftmembypass 0
pwrupl2 1
}
}
}
assertion_limit Specification
assertion_limit {
{{port|pin} integer }...
}
For a memory test interface on a macro that requires more than one cycle between
consecutive requests to the memory under test, it is possible that certain control signals must
remain asserted for fewer clock cycles than the period between requests. In such situations,
the assertion_limit can be used to indicate these signal constraints to PMBIST.
Pin references are path names relative to the macro module boundary. "/" is used as the
hierarchical separator.
Description
{{port|pin} integer port/pin indicates the name of the macro module port or pin
}... while integer defines the number of PMBIST clock cycles the
asserted signal may remain active. This number of cycles must
be less than or equal to the spacing between consecutive
requests to the memory under test.
Default: the number of cycles between consecutive
requests to the memory under test
Example
In the configuration below, an L2 cache memory test interface permits memory requests
every two cycles. However, the read and write enable signals, mbre2 and mbwe2, activation
must be limited to a single cycle for proper memory opertions. All other signals controlled by
PMBIST on this interface can be asserted for the full two cycles.
{
macro {
mp_core
}
{
name mp_core_L1_mbist
port_access {
assign mbreq1[1:0] 00
assign mbcpid[1:0] 00
assign mblogarray1[1:0] 00
assign mbaddr1[10:7] 0000
sample mback1[1:0] 00
}
port_alias {
a mbaddr1[10:0]
clk CLK
we mbwe1
wem mbwem1
re mbre1
d mbdatain1[127:0]
q mbdataout1[127:0]
}
port_action {
dftse 0
dftmembypass 0
pwrupcpul1 11
}
}
}
{
macro {
mp_core
}
{
name mp_core_L2_mbist
port_access {
assign mbreq2 0
assign mblogarray2[1:0] 00
assign mbaddr2[12:8] 00000
sample mback2 0
}
port_alias {
a mbaddr2[12:0]
clk CLK
we mbwe2
re mbre2
d mbdatain2[143:0]
q mbdataout2[143:0]
}
port_action {
dftse 0
dftmembypass 0
pwrupl2 1
}
assertion_limit {
mbwe2 1
mbre2 1
}
}
}
memory_map Specification
memory_map {
[target_map {
{port|pin} [{ binary_string[ binary_string]... }] ...
} ]
[port_action {
{port|pin} binary_string ...
} ]
read_delay integer [ + port_assign ]...
[request_latency integer [ + port_assign ]...]
[write_mask_binding {
integer { {bit | bit:bit}... } ...
} ]
segment {
memory_module module_name
[address_limit integer]
instances { instance_name[ instance_name]... }
[segment_map {
{port|pin} binary_string ...
} ]
port_alias {
base_port[.integer] aliased_port_expression ...
}
} ...
}
Specifies the set of physical memories and their features associated with a logical memory
accessed from the boundary or within a hierarchical level of the macro. The mapping enables
PMBIST to test and repair individual physical memory instances while being connected to a
predefined interface to the macro.
Description
Default: none
port_action { {port|pin} binary_string ...}
Default: none
aliased_port_expression is further defined as
[binary_string,]aliased_port_or_pin[,aliased_port_or_pin]... [,binary_string]
[=bit_range[,binary_string]]
Example
In the configuration below, two logical memories, mblogarray1, exist per two processors,
mbcpid, in the L1 memory test interface and two logical memories, mblogarray2, exist
within the L2 memory test interface. The first logical memory in the L1 interface uses two
instances, mbaddr1[8], of a ram128x64cm4, but only half of the memory can be tested at
a time as seen in the segment definitions using q and d base ports. The second logical
memory in the L1 interface uses four instances, mbaddr1[10:9], of a ram512x128cm2
and a write mask distributed one write mask bit per contiguous eight data bits.
The first logical memory in the L2 interface uses eight instances, mbaddr2[10:9], of a
ram512x72cm4 to implement a 144-bit wide logical memory as seen in the segment
definitions using q and d base ports. The second logical memory in the L2 interface uses
thirty-two instances, mbaddr2[12:8], of a ram256x64cm2. Consecutive requests to both
of these logical memories are minimally 2 cycles apart as seen in the request_latency.
{
macro {
mp_core
}
{
name mp_core_L1_mbist
port_access {
assign mbreq1[1:0] 00
assign mbcpid[1:0] 00
assign mblogarray1[1:0] 00
assign mbaddr1[10:7] 0000
sample mback1[1:0] 00
}
port_alias {
a mbaddr1[10:0]
clk CLK
we mbwe1
wem mbwem1[15:0]
re mbre1
d mbdatain1[127:0]
q mbdataout1[127:0]
}
port_action {
dftse 0
dftmembypass 0
pwrupcpul1 11
}
memory_map {
target_map {
mbcpid[1:0] {00 01}
mblogarray1[1:0] {00}
mbaddr1[10:9] {00}
mbaddr1[8]
}
read_delay 8
segment {
memory_module ram128x64cm4
instances { cp[0]/lsram_0 cp[0]/lsram_1 }
cp[1]/lsram_0 cp[1]/lsram_1 }
segment_map {
mbaddr1[7] 0
}
port_alias {
a mbaddr1[6:0]
d mbdatain1[31:0]
we mbwe1
re mbre1
q mbdataout1[31:0]
}
}
segment {
memory_module ram128x64cm4
instances { cp[0]/lsram_0 cp[0]/lsram_1 }
cp[1]/lsram_0 cp[1]/lsram_1 }
segment_map {
mbaddr1[7] 1
}
port_alias {
a mbaddr1[6:0]
d mbdatain1[31:0]=[63:32]
we mbwe1
re mbre1
q mbdataout1[31:0]=[63:32]
}
}
}
memory_map {
target_map {
mbcpid[1:0] {00 01}
mblogarray1[1:0] {01}
mbaddr1[10:9]
}
read_delay 9
write_mask_binding {
0 {0:7}
1 {8:15}
2 {16:23}
3 {24:31}
4 {32:39}
5 {40:47}
6 {48:55}
7 {56:63}
8 {64:71}
9 {72:79}
10 {80:87}
11 {88:95}
12 {96:103}
13 {104:111}
14 {112:119}
15 {120:127}
}
segment {
memory_module ram512x128cm2
instances { cp[0]/diffram00 cp[0]/diffram01
cp[0]/diffram10 cp[0]/diffram11
cp[1]/diffram00 cp[1]/diffram01
cp[1]/diffram10 cp[1]/diffram11 }
port_alias {
a mbaddr1[8:0]
d mbdatain1[127:0]
we mbwe1
wem mbwem1[15:0]
re mbre1
q mbdataout1[127:0]
}
}
}
}
}
{
macro {
mp_core
}
{
name mp_core_L2_mbist
port_access {
assign mbreq2 0
assign mblogarray2[1:0] 00
assign mbaddr2[12:8] 00000
sample mback2 0
}
port_alias {
a mbaddr2[12:0]
clk CLK
we mbwe2
re mbre2
d mbdatain2[143:0]
q mbdataout2[143:0]
}
port_action {
dftse 0
dftmembypass 0
pwrupl2 1
}
assertion_limit {
mbwe2 1
mbre2 1
}
memory_map {
target_map {
mblogarray2[1:0] {00}
mbaddr2[12:11] {00}
mbaddr2[10:9]
}
read_delay 10
request_latency 2
segment {
memory_module ram512x72cm4
instances { l2ram00_lo l2ram01_lo l2ram10_lo l2ram11_lo }
port_alias {
a mbaddr2[8:0]
d mbdatain2[71:0]
we mbwe2
re mbre2
q mbdataout2[71:0]
}
}
segment {
memory_module ram512x72cm4
instances { l2ram00_hi l2ram01_hi l2ram10_hi l2ram11_hi }
port_alias {
a mbaddr2[8:0]
d mbdatain2[143:72]
we mbwe2
re mbre2
q mbdataout2[143:72]
}
}
}
memory_map {
target_map {
mblogarray2[1:0] {01}
mbaddr2[12:8]
}
read_delay 12
request_latency 2
segment {
memory_module ram256x64cm2
instances { l2recram00 l2recram01 l2recram02 l2recram03
l2recram04 l2recram05 l2recram06 l2recram07
l2recram08 l2recram09 l2recram0a l2recram0b
l2recram0c l2recram0d l2recram0e l2recram0f
l2recram10 l2recram11 l2recram12 l2recram13
l2recram14 l2recram15 l2recram16 l2recram17
l2recram18 l2recram19 l2recram1a l2recram1b
l2recram1c l2recram1d l2recram1e l2recram1f }
port_alias {
a mbaddr2[7:0]
d mbdatain2[63:0]
we mbwe2
re mbre2
q mbdataout2[63:0]
}
}
}
}
}
algorithm_constraints Specification
algorithm_constraints {
[algorithm_limit integer ]
[access_limit integer ]
[repeat_limit integer ]
[log2b_limit integer ]
[pause_duration integer {ms|us}]
[macro_support {no | yes}]
[simple_instructions_only {no | yes}]
[cell_test_support {no | yes}]
[address_orders {
[ no-update | nu ]
[ fast-row | fr ]
[ fast-column | fc ]
[ fast-diagonal | fd ]
} ]
[address_updates {
[ linear | li ]
[ complement | ca ]
[ twos-power | 2i ]
[ worstcase | wc ]
[ shifted | s1 ]
[ next-physical | np ]
[ next-address | na ]
} ]
[data_backgrounds {
[ solid | s ]
[ checkerboard | cb ]
[ row-stripe | rs ]
[ column-stripe | cs ]
[ column-stripe-solid-pairs | cssp ]
[ column-stripe-checkerboard-pairs | cscbp ]
[ log2b]
} ]
}
The specification of any testplan as programmed in the configuration file forces the
insertion of programmable algorithm hardware into the PMBIST logic.
Descriptions
algorithm_limit integer
Example
The configuration file indicates a set of preferred limit values and hardware options.
algorithm_constraints {
algorithm_limit 64
access_limit 8
repeat_limit 256
pause_duration 50ms
macro_support yes
}
algorithm Specification
algorithm {
name algorithm_name
{
{wait integer |
pause |
address_direction (sequence_iterator) }...
}
}
address_direction =
{ null | up | u | down | dn | d }
sequence_iterator =
{memory_access | macro_access}[,{memory_access | macro_access}]...
macro_access =
{null | row | col | diag | integer | all}(memory_access[,memory_access]...)
memory_access =
{ {- | r | w}{0 | 1 | -}{ null | b | m | s} }
Algorithms are comprised primarily of sequences of memory read and write operations.
These sequences can be grouped into sets which are applied to a single memory address
at a time. We iterate through the memory address space, executing this sequence for each
memory address, prior to executing the next sequence. In this context, algorithms are
comprised of a set of sequence iterators.
Descriptions
name algorithm_name
Defines the name of the algorithm to enable reference in the
testplan specifications. Each name must be unique within
the context of the defining configuration file and not match any
of the pre-defined algorithm names.
Default: none
wait integer This expression causes the PMBIST engines to suspend
execution of the algorithm at the current point for integer
cycles. This is typically used for small delays associated with
extended function testing in user-defined algorithms.
The integer must not exceed the
algorithm_constraints repeat_limit value.
Default: none
Examples
■ The example below is a March LR algorithm.
algorithm {
name march_lr
{
(w0)
dn(r0,w1)
(r1,w0,r0,w1)
(r1,w0)
(r0,w1,r1,w0)
(r0)
}
}
■ The example below is a March G algorithm which includes a data retention test indicated
by the two pause commands.
algorithm {
name march_g
{
(w0)
(r0,w1,r1,w0,r0,w1)
(r1,w0,w1)
d (r1,w0,w1,w0)
d (r0,w1,w0)
pause
(r0,w1,r1)
pause
(r1,w0,r0)
}
}
■ The following example uses the macro notation to perform a galloping pattern (GalPat)
test. The first sequence iterator, (w0), writes a true data background throughout memory
in an ascending address direction.
The second sequence iterator, (w1,(r0m,r1),w0), includes an unqualified macro
access, (r0m,r1). For each address referenced by the sequence iterator, called the base
address, the iterator first writes an inverted data background into the location, w1. Then
the macro access is repeated for all memory addresses starting with zero, applying a
read of the true data background to the updating macro address followed by a read of
the inverted data background to the current base address, with the exception that when
macro address equals base address, the macro read access is not performed. Finally a
write of the true data background is performed to the current base address, w0, restoring
the original data values. Then the base address is updated to the next ascending
address and the sequence iterator is repeated until all memory addresses have been
referenced as the base address.
The last two sequence iterators repeat the memory accesses of the first two sequence
iterators but using inverted data backgrounds.
algorithm {
name galpat
{
(w0)
(w1,(r0m,r1),w0)
(w1)
(w0,(r1m,r0),w1)
}
}
testplan Specification
testplan {
name testplan_name
[address_orders {
[ no-update | nu ]
[ fast-row | fr ]
[ fast-column | fc ]
[ fast-diagonal | fd ]
} ]
[address_updates {
[ linear | li ]
[ complement | ca ]
[ twos-power | 2i ]
[ worstcase | wc ]
[ shifted | s1 ]
[ next-physical | np ]
[ next-address | na ]
} ]
[data_backgrounds {
[ solid | s ]
[ checkerboard | cb ]
[ row-stripe | rs ]
[ column-stripe | cs ]
[ column-stripe-solid-pairs | cssp ]
[ column-stripe-checkerboard-pairs | cscbp ]
[ log2b ]
} ]
[data_orientation { word | cell }]
[prologue {
{assign xmap_register | imap_register } binary_string |
wait xmap_register binary_string |
wait integer }...
} ]
[algorithms {
algorithm_name ...
} ]
[epilogue {
{assign { xmap_register | imap_register } binary_string |
wait xmap_register binary_string |
wait integer }...
} ]
[onetime]
[hardwired | programmed]
}
algorithm definitions specify the sequence of events for a given memory test. When macro
accesses are used they carry a pre-determined address_order. testplan definitions fill
in the remaining undefined characteristics of a set of algorithms to apply in a given memory
test. These include the order in which addresses are updated, the transformation applied to
each address prior to applying it to memory, and the data values to be written and
subsequently read within the memory cells. Further, the algorithms can generally be executed
in a manner which allows either a word-oriented test or a cell-oriented test. If a memory has
N address bits, it contains W=2N words of B bits with a total number of memory cells
n=W*B=2N*B. For any given algorithm, a word-oriented version of the test executes faster
than its corresponding cell-oriented version.
For each testplan, it is possible to execute an optional entry sequence, a prologue, which
is applied once prior to execution of any algorithm. After this step, execution of the set of
algorithms against the set of combinations of the selected address_orders,
address_updates, and data_backgrounds occurs. Finally, execution of an optional exit
sequence, an epilogue, occurs.
The testplan must be labeled with a name for specification in the target groups. The
testplan can be marked to be hardwired into the PMBIST logic or programmed via the
external access method.
Descriptions
name testplan_name Defines the name of the testplan to enable reference in the
target groups. Each name must be unique within the context
of the design.
address_orders { [no-update|nu] [fast-row|fr] [fast-column|fc]
[fast-diagonal|fd] }
address_orders control the manner in which the address
progresses through the physical memory cell space for the
algorithms in the testplan. More than one selection may
be made within a testplan.
■ no-update|nu—Indicates that neither the row nor the
column portion of the address are updated with higher
priority. This is useful only in conjunction with the
address_updates values of worstcase and shifted.
■ fast-row|fr—Indicates that the row portion of the
address is updated first, incrementing the row counter by
one. At each wrap of the row address portion, any column
portion of the address is updated. At each wrap of the row
and column address segments, any bank portion of the
address is incremented by one. When all valid address
segments wrap simultaneously, the sequence is complete.
Example
The march-lr and march-g algorithms are defined in a testplan that uses multiple passes
through each algorithm for the combination of address_orders (2), address_updates
(2) and data_backgrounds (4), resulting in 2x2x4=16 executions of each algorithm. These
algorithms are hardwired into the PMBIST logic along with the selected test conditions.
testplan {
name march-group
target Group
{
target {
{module_list | macro_name_list | instance_list}
}
{
target_specifications
}
}
The target group contains a list of target specifications for PMBIST construction and insertion
that apply to the specified modules or instances.
■ If the target is a module or module list, the target specifications are applied to all
instances of the specified module(s) in the design.
■ If the target is a list of macro interface name instances, the target specifications are
applied to all listed instances of the specified macro and its associated PMBIST interface
in the design.
■ If the target is a list of instances, the target specifications are applied to that grouping.
Specifying one or more instances allows for a clear representation of the grouping of
memories for test.
■ The list of instances or modules may be freely mixed within a target group.
In a configuration file, each module or instance can appear in only one target group.
Descriptions
Examples
■ In the following example, the target specifications apply to all instances of modules
RAM_2048X32 and RAM_500x11 in the design.
{
target {
RAM_2048X32
RAM_500X11
}
{
target_specifications
}
}
■ In the following example, the target specifications apply to the specified instances.
{
target{
/DLX/Hier_A/RAM2TEST
/DLX/Hier_A/RAM3TEST
/DLX/RAMTEST
}
{
target_specifications
}
}
■ In the following example, the target specifications apply to the MP instance of mp_core
and its L1 and L2 PMBIST interfaces which have been named previously in macro
definition statements.
{
target{
MP:mp_core_L1_mbist
MP:mp_core_L2_mbist
}
{
target_specifications
}
}
Related Information
sharing_limit Specification
sharing_limit integer
Specifies the number of memory instances that can share an PMBIST engine. There are no
PMBIST restrictions on which memory devices may be listed within a target group to share
any given PMBIST engine or comparator.
The primary benefit of grouping memory instances is that it enables you to share an PMBIST
engine to test the multiple memories in the group. If the specified limit is less than the total
number of memory instances, multiple PMBIST engines are created and the grouping
happens in the order that the memory instances are listed.
Description
Example
In the following example, the sharing is set to 2 in the first target group. Consequently,
memory instances /DLX/Hier_a/RAM2TEST and /DLX/Hier_a/RAM3TEST will share an
PMBIST engine. As instance /DLX/RAMTEST is in a separate target group, it will have its own
PMBIST engine.
{
target {
/DLX/Hier_A/RAM2TEST
/DLX/Hier_A/RAM3TEST
}
{
sharing_limit 2
}
target {
/DLX/RAMTEST
}
{
}
}
clock Specification
clock mbist_clock [clock_mux]
Specifies the PMBIST clock source that drives the PMBIST logic in the target group. The
clock must have been previously defined with the define_mbist_clock command.
If multiple port memories are controlled by different clocks, the clock with the highest
frequency should be selected for PMBIST operations. Also, to enable proper PMBIST multiple
port interaction testing, clock_mux must be specified for the target group to ensure use of
this common PMBIST clock.
If clock_mux is not specified, the insert_dft pmbist command verifies the following for
the specified dft_configuration_mode during PMBIST insertion:
■ All memories in the target group share the same clock source as the mbist_clock
■ All memories in the target group use the same clock edge; if the mbist_clock edge
is different, an inverter is added into the PMBIST logic clock path to align the phase
■ All instances of a memory module when contained within a multiply used design module
must consistently use or not use clock multiplexing on their clock ports
Descriptions
clock mbist_clock Specifies the clock source for the inserted PMBIST logic.
clock_mux Selects the clock driving the PMBIST logic to be multiplexed
into the target memory clock ports if the target memory clock
ports do not have the same source as mbist_clock.
Example
■ In the following example, CLK1X is the clock used for the PMBIST engine of the three
listed memory instances. CLK1X was defined using the define_mbist_clock
command.
{
target {
/DLX/Hier_A/RAM2TEST
/DLX/Hier_A/RAM3TEST
/DLX/RAMTEST
}{
sharing_limit 3
clock CLK1X
}
}
location Specification
location {instance_name | module_name }
Specifies a hierarchical instance or a module in the design in which the PMBIST engines for
this target group must be inserted.
By default, the PMBIST engines are inserted in the design in which you are executing the
insert_dft pmbist command.
Note: A module_name should be used when inserting PMBIST engines into a multiply
used module within the design.
Examples
■ In the following example, the location is specified as /DLX. Because this location is the
top level of the netlist (default), its specification could be omitted.
{
target {
/DLX/Hier_A/RAM2TEST
/DLX/Hier_A/RAM3TEST
/DLX/RAMTEST
}
{
sharing_limit 3
location {/DLX}
clock CLK1X
}
}
■ If the following example, the location /DLX/Hier_A is the lowest common hierarchical
location that contains both memories.
{
target {
/DLX/Hier_A/Hier_A1/RAM4TEST
/DLX/Hier_A/Hier_A2/RAM5TEST
}
{
sharing_limit 3
location {/DLX/Hier_A}
clock CLK1X
}
}
failure_recording Specification
failure_recording {
[diagnostics {
{none |
no_frc |
dedicated_fdb }
[disable_2d_algorithm_recording]
}
]
[fault_tolerance {
{none |
dedicated |
shared }
[solution_groups {{ all |
{module_list | instance_list |
macro_instance_name:macro_interface_name { instance_list...}... |
macro_module:macro_interface_name { instance_list...}...
}...}}]
}
]
[redundancy_analysis {
{none |
dedicated |
shared [solution_groups {{ all |
{module_list | instance_list |
macro_instance_name:macro_interface_name { instance_list...}... |
macro_module:macro_interface_name { instance_list...}...
}...}}] }
[row_first_2d | column_first_2d]
}
]
[self_repair {
{none |
soft [enable_hri] }
}
]
}
Four primary classes of patterns are generated for the PMBIST operation: production
patterns, fault tolerance patterns, redundancy patterns, diagnostic patterns. The production
patterns give a basic indication of whether a memory passed or failed the tests performed
and whether these tests completed properly. When data compare units (DCU) are shared by
multiple memories, isolation of failures is limited to the level of the DCU.
Fault tolerance patterns are essentially production patterns with fault tolerance analysis
enabled. They augment the production results with status indicating whether or not a failing
memory or solution group can tolerate a single-bit error (single-bit correctable) using its
available error correction code (ECC) capabilities while providing the initial failure indication,
memory address and data bit, and an overflow or uncorrectable error indication. Additional
hardware is required to perform the fault tolerance analysis running at PMBIST clock speeds.
Redundancy patterns are essentially production patterns with redundancy analysis enabled.
They augment the production results with status indicating whether or not a failing memory
or solution group can be repaired using its available spare resources and provide the requisite
repair solution. Additional hardware is required to perform the redundancy analysis running
at PMBIST clock speeds. More hardware is inserted if self-repair is enabled to supply the
repair solution to the memory repair interface and optionally include an interface to the hard
repair controller.
Diagnostic patterns are run on a memory when performing failure analysis and yield more
detailed failure information while requiring a runtime directly proportional to the number of
detected failures. All tests are run at PMBIST clock speeds in a style called capture-and-
rerun. This approach allows the standard production tests to run at speed while capturing a
new failure, memory row and column with associated data value read, on each pass through
the test sequence. Hardware is required to store such failure data but this approach
minimizes the cost. The no_frc option requires the least hardware investment for
diagnostics, but supports with a single pass through the diagnostic patterns isolation only to
failing memories regardless of whether the assigned DCU is dedicated or shared.
Production patterns execute at PMBIST clock speeds once only for the set of tests within the
execution scheduling unit. The following data are available in each memory PMBIST engine:
■ siudone_reg bit—indicates whether the test finished normally in this sequence iterator
unit (SIU) (=1)
■ dcufail_reg bits—indicates whether the memory currently targeted in each DCU detected
a failure (=1)
Fault tolerance and redundancy patterns execute at PMBIST clock speeds once only for the
set of tests within the execution scheduling unit. In addition to the information provided by
production patterns, the following information is made available for each DCU with spare
resources at the end of the patterns:
■ rov_reg bits—indicate whether the memory or solution group currently targeted in each
DCU has overflowed the ault tolerance/redundant capabilities of the memory, it is
uncorrectable/unreparable (=1)
■ rmfx_reg bits—indicates whether the memory currently targeted in each DCU has a
failing resource class captured in the corresponding redundancy analysis register (=1)
■ Additional bits are used to capture information necessary to indicate the logical location
of the failing resources
If the rov_reg bit is active, the memory cannot be corrected/repaired given the failures
detected and the set of ECC/spare resources available. The redundancy analysis registers
contain the partial solution calculated in this case.
If self-repair is requested, the redundancy patterns can move the redundancy analysis repair
solution to the appropriate repair interface associated with each targeted memory or memory
solution group.
For any pattern type, the test results are shifted off the chip to the tester. After all the fail data
are gathered, the failure data must be converted to Chip-Pad-Pattern format and analyzed.
The analysis is done with the analyze_embedded_test Modus command that reports
pass/fail and reparable indications, bitfail maps, and redundancy analysis solutions.
Descriptions
Examples
■ The following example specifies the collection of memory diagnostic failure information
should be included in the PMBIST features.
{
target {
/DLX/Hier_A/RAM2TEST
/DLX/Hier_A/RAM3TEST
}
{
sharing_limit 3
location {/DLX/Hier_A}
clock CLK1X
failure_recording
{
diagnostics { dedicated_fdb }
}
}
}
■ The following example requests to insert a hardware analysis unit in the design to gather
the fail data on the chip and calculate a redundancy solution, but not implement self-
repair features for this PMBIST.
{
target {
/DLX/Hier_A/RAM2TEST
/DLX/Hier_A/RAM3TEST
}
{
sharing_limit 3
location {/DLX/Hier_A}
clock CLK1X
failure_recording
{
redundancy_analysis { dedicated }
}
}
}
interface_control Specification
interface_control
{
[inputs
{
[pipeline_stages integer |
{ {integer {module_list |
instance_list}}...} ]
}]
[outputs
{
[pipeline_stages integer |
{ {integer {module_list |
instance_list}}...} ]
[comparators { [memory_local | engine_local]
[shared | dedicated] ]
[enable_group_analysis] ]
}
}]
[logic_test {none | bypass [integer ] | registered_bypass [integer ]}
]
}
Controls the features of the logic inserted around the targeted memories, the interface
between the PMBIST engine and its associated memories.This interface consists of the
multiplexers inserted on memory ports when specific test ports are not available, optional
registered pipeline stages on the signals between PMBIST logic and the memory input
signals and output signals, optional logic to test interfaces around ports of the memories, and
the comparators that verify the actual memory data read against the expected data values.
All of the memory input interface logic and any logic to test interfaces around memory ports
are placed at the same hierarchical level as each targeted memory. One comparator is
required for each targeted memory, but these comparators can be shared across several
memories with no restrictions. While sharing comparators may reduce area overhead it forces
serial testing of the associated target memories. You can control the location of the
comparators.
Descriptions
Examples
■ The following example uses the shared option for the comparators.
{
target {
/DLX/Hier_A/RAM2TEST
/DLX/Hier_A/RAM3TEST
}
{
sharing_limit 3
location {/DLX/Hier_A}
clock CLK1X
interface_control
{
outputs {comparators {shared} }
}
}
}
■ In the following example the memory bypass is selected with an integer of 8. The data-
in to data-out is unaffected by the integer, but eight input control signals, such as
address, write, read or chip enables, or any other input but the clocks will be formed into
groups of eight and exclusively ORed down to a single observe register.
{
target {
/DLX/Hier_A/RAM2TEST
/DLX/Hier_A/RAM3TEST
}
{
sharing_limit 3
location {/DLX/Hier_A}
clock CLK1X
failure_recording
{
diagnostics yes
}
interface_control
{
outputs {comparators {shared}}
logic_test bypass 8
}
}
}
■ In the following example the memory registered bypass is selected with a default integer
value of 4. Four data, input control signals, such as address, write, read or chip enables,
or any other input but the clocks will be grouped into groups of four and exclusively ORed
down to a single observe and control register. Additionally, each of the registers will
fanout to one or more memory data output port bypass multiplexers.
{
target {
/DLX/Hier_A/RAM2TEST
/DLX/Hier_A/RAM3TEST
}
{
sharing_limit 3
location {/DLX/Hier_A}
clock CLK1X
failure_recording
{
diagnostics yes
}
interface_control
{
outputs {comparators {shared}}
logic_test registered_bypass
}
}
}
■ In the following example, the pipeline stages for all the signals of both memory instances
mentioned in the target section from the memory output to its comparator are specified
with an integer of 2.
{
target {
/DLX/Hier_A/RAM2TEST
/DLX/Hier_A/RAM3TEST
}
{
sharing_limit 3
location {/DLX/Hier_A}
clock CLK1X
interface_control
{
outputs
{
pipeline_stages 2
}
}
}
}
■ In the following example, the pipeline stages for all the signals from the BIST engine to
memory are specified as 2 and 3 for memory instances /DLX/Hier_A/RAM2TEST and /
DLX/Hier_A/RAM3TEST, respectively.
{
target {
/DLX/Hier_A/RAM2TEST
/DLX/Hier_A/RAM3TEST
}
{
sharing_limit 3
location {/DLX/Hier_A}
clock CLK1X
interface_control
{
inputs
{
pipeline_stages { 2 {/DLX/Hier_A/RAM2TEST}
3 {/DLX/Hier_A/RAM3TEST}}
}
}
}
}
■ In the following example, the pipeline stages for all the signals from the BIST engine to
memory are specified as 2 for memory instance /DLX/Hier_A/RAM2TEST. Nothing has
been specified for memory instance /DLX/Hier_A/RAM3TEST. This is an error condition
because all the entries of the target section must be present in the
pipeline_stages expression.
{
target {
/DLX/Hier_A/RAM2TEST
/DLX/Hier_A/RAM3TEST
}
{
sharing_limit 3
location {/DLX/Hier_A}
clock CLK1X
interface_control
{
inputs
{
pipeline_stages { 2 {/DLX/Hier_A/RAM2TEST} }
}
}
}
}
testplans Specification
testplans {
testplan_name
[ testplan_name]...
}
Specifies the testplan_name list that executes on the active PMBIST engine(s) in this
target group. Each testplan_name previously must have been defined using a testplan
Specification on page 288.
Note: The choice of testplans selected during PMBIST operations can be changed by using
the create_embedded_test command in Modus.
Description
testplan_name Specifies the name of the testplan the PMBIST engine must
execute.
Testplans are executed in the order specified.
Example
ignore Group
ignore {
{module_list | instance_list}
}
Excludes the specified list of memory modules and memory instances from PMBIST
insertion.
If a target group lists a certain type or instance of a memory and the ignore group lists an
identical type or instance of a memory, an error results which must be corrected.
Example
ignore {
/DLX/Hier_B/RAM_dont_test
/DLX/Hier_A/RAM_dont_test_me_either
RAM_2000X32
}
{
macro {
macro_list
}
{
name [macro_instance_name:]macro_interface_name
[port_access {
{ assign {port|pin} binary_string [tam] |
sample {port|pin} binary_string }...
}]
port_alias { base_port[.integer] aliased_port_or_pin
[base_port[.integer] aliased_port_or_pin]... }
[port_action { {port|pin} {0|1|U|X} [{port|pin} {0|1|U|X}]...
default {0|1|U|X} }]
[assertion_limit { { {port|pin} integer }... }]
memory_map {
[target_map {
{port|pin} [{ binary_string[ binary_string]... }] ...
} ]
[port_action {
{port|pin} binary_string ...
} ]
read_delay integer [ + port_assign ]...
[request_latency integer [ + port_assign ]...]
[write_mask_binding {
integer { {bit | bit:bit}... } ...
} ]
segment {
memory_module module_name
[address_limit integer]
instances { instance_name[ instance_name]... }
[segment_map {
{port|pin} binary_string ...
} ]
port_alias {
base_port[.integer] aliased_port_expression ...
}
} ...
} ...
}
}
Example
Following is an example of Cadence Memory View wherein the bank bits that are in the
middle of the row address bits:
{
module { sram_sp_hslve } {
/*
* Address limit needs to be set to the actual number of addresses
* present in the memory.
*/
address_limit 4096
wrapper sram_sp_hslve
read_delay 2
port_alias {
ren REN
tren TREN
csn CEN
tcsn TCEN
clk CLK
bisten TEN
d D
td TD
q Q
a A
ay AY
csny CENY
weny GWENY
ta TA
wen GWEN
twen TGWEN
be DFTRAMBYP
cre CRE1
cra FCA1
cre CRE2
cra FCA2
rre RRE1
rra FRA1
}
port_action {
SMCLK X
SSCLK X
SBYPCLK X
SI[0] X
SI[1] X
SO[0] X
SO[1] X
SE X
STOV X
EMA[2] X
EMA[1] X
EMA[0] X
EMAW[1] X
EMAW[0] X
EMAS X
RET1N X
}
port_Test {
AY[11:0]
CENY
GWENY
Default X
}
/*
* Address bus partitioning must be described to reveal the
* memory's physical layout. Refer to the documentation for
* details.
*/
address_partition { bank 6:5 row 11:7 4:3 order { 0 1 } column 2:0 order
{ data 0 1 4 6 8 10 12 14 } { 0 1 } order { data 2 3 5 7 9 11 13 15 } { 1 0 } }
/*
* The "data_order" must be described to reveal the physical
* order of the data-bits of the memory. Refer to the documentation
* for details.
*/
data_order {
0 2 1 3 4 5 6 7 8 9 10 11 12 13 14 15
}
redundancy {
column data{0:7} map { enable CRE1 data 0:7 FCA1[2:0]
shift_left_integer }
column data{8:15} map { enable CRE2 data 0:7 FCA2[2:0]
shift_left_integer }
row 11:7 4:3 bank_range { 0:3 } map { enable RRE1 address 0:511
FRA1[9:0] 0:511 }
}
}
}
} ]
testplans { testplan_name [testplan_name ]... }
}
}
{
ignore {
{module_list | macro_name_list | instance_list }
}
}
algorithm_constraints {
[algorithm_limit integer]
[access_limit integer]
[repeat_limit integer]
[log2b_limit integer]
[pause_duration integer {ms|us}]
[macro_support {no | yes}]
[simple_instructions_only {no | yes}]
[cell_test_support {no | yes}]
[address_orders {
[ no-update | nu ]
[ fast-row | fr ]
[ fast-column | fc ]
[ fast-diagonal | fd ]
} ]
[address_updates {
[ linear | li ]
[ complement | ca ]
[ twos-power | 2i ]
[ worstcase | wc ]
[ shifted | s1 ]
[ next-address | na ]
[ next-address | na ]
} ]
[data_backgrounds {
[ solid | s ]
[ checkerboard | cb ]
[ row-stripe | rs ]
[ column-stripe | cs ]
[ column-stripe-solid-pairs | cssp ]
[ column-stripe-checkerboard-pairs | cscbp ]
[ log2b]
} ]
}
algorithm {
name algorithm_name
{
{wait integer |
pause |
address_direction (sequence_iterator) }...
}
}
testplan {
name testplan_name
[address_orders {
[ no-update | nu ]
[ fast-row | fr ]
[ fast-column | fc ]
[ fast-diagonal | fd ]
} ]
[address_updates {
[ linear | li ]
[ complement | ca ]
[ twos-power | 2i ]
[ worstcase | wc ]
[ shifted | s1 ]
[ next-physical | np ]
[ next-address | na ]
} ]
[data_backgrounds {
[ solid | s ]
[ checkerboard | cb ]
[ row-stripe | rs ]
[ column-stripe | cs ]
[ column-stripe-solid-pairs | cssp ]
[ column-stripe-checkerboard-pairs | cscbp ]
[ log2b]
} ]
[data_orientation { word | cell }]
[prologue {
{assign { xmap_register | imap_register } binary_string |
wait xmap_register binary_string |
wait integer }...
} ]
[algorithms {
algorithm_name ...
} ]
[epilogue {
{assign { xmap_register | imap_register } binary_string |
wait xmap_register binary_string |
wait integer }...
} ]
[onetime]
[hardwired | programmed | test-access-method]
}
B
PMBIST using Core Test Language (CTL)
Memory Models
( BitDistributionMirroringPeriod INTEGER ; )
Relation {
( FunctionalConfigurationMap FUNC_CONF_NAME {Port INTEGER} )*
( ScrambleMap SCRAMBLE_NAME {( Port INTEGER ; )+} )+
}
}
MemoryRepair {
(RepairResource (REPAIR_RESOURCE_NAME) {
Type <Column | Row | IO> ;
(Width INTEGER;)
(DataRange {(ValueRange INTEGER INTEGER;)+})
(EnableConnectivity {
(REDUNDANCY_CONTROL_SIGNAL {
RepairSignal addr_sig_expression;
}) + // End of REDUNDANCY_CONTROL_SIGNAL
}) // End of EnableConnectivity
(DataConnectivity {
(REDUNDANCY_CONTROL_SIGNAL {
({RepairValue vec_data; (AssociatedSignal {
Data[INTEGER];})})+
({DisableValue vec_data;}
}) + // End of REDUNDANCY_CONTROL_SIGNAL
}) // End of DataConnectivity
(AddressConnectivity {
(REDUNDANCY_CONTROL_SIGNAL {
RepairSignal addr_sig_expression;
}) + // End of REDUNDANCY_CONTROL_SIGNAL
}) // End of AddressConnectivity
})+ // End of RepairResource
} // End of MemoryRepair
PatternInformation {
Procedure PROCEDURE_NAME { Purpose ( purpose_name)+ ;}
}
}
}
Variables {
IntegerConstant MaxData := 63;
IntegerConstant MaxAdd := 8;
IntegerConstant DataWidth := 64;
IntegerConstant AddrWidth := 9;
} // end Variables
Signals {
Q1 [MaxData..0] Out;
Q2 [MaxData..0] Out;
.....
.....
} // end Signals
Procedures Memory_access {
read_cycle_A {
W "_default_WFT_";
...
...
V { CLK1 = P;
CEN1 = 0;
GWEN1 = 1;
TBISTE1 = 1;
WEN1[MaxData..0] = \rFULLData 0;
A1[MaxAdd..0] = \rFULLAdd #;
TIE_HIGH_SIGNAL1 = 1;
TIE_HIGH_SIGNAL2 = 1;
Q1[MaxData..0] = \rFULLData #;
OUTSIG = #;
}
}
}
.....
.....
bist_read_cycle_A {
W "_default_WFT_";
C {
all_inputs = \rFULLAdd N \rFULLAdd N \rFULLData N 0N \r3 N \r3 N 0N 0N;
all_outputs = \rFULLData X \rFULLData X X;
}
V { CLK1 = P;
TCEN1 = 0;
TGWEN1 = 1;
TBISTE1 = 0;
TWEN1[MaxData..0] = \rFULLData 0;
TA1[MaxAdd..0] = \rFULLAdd #;
TIE_HIGH_SIGNAL1 = 1;
TIE_HIGH_SIGNAL2 = 1;
Q1[MaxData..0] = \rFULLData #;
OUTSIG = #;
}
}
write_cycle_A {
C {
all_inputs = \rFULLAdd N \rFULLAdd N rFULLData N 0N \r3 N \r3 N 0N 0N;
all_outputs = \rFULLData X \rFULLData X X;
}
V { CLK1 = P;
CEN1 = 0;
GWEN1 = 0;
TBISTE1 = 1;
WEN1[MaxData..0] = \rFULLData 0;
A1[MaxAdd..0] = \rFULLAdd #;
D1[MaxData..0] = \rFULLData #;
TIE_HIGH_SIGNAL1 = 1;
TIE_HIGH_SIGNAL2 = 1;
Q1[MaxData..0] = \rFULLData #;
OUTSIG = #;
}
}
bist_write_cycle_A {
W "_default_WFT_";
C {
all_inputs = \rFULLAdd N \rFULLData N 0N \r3 N \r3 N 0N 0N;
all_outputs = \rFULLData X \rFULLData X X;
}
V { CLK1 = P;
TCEN1 = 0;
TGWEN1 = 0;
TBISTE1 = 0;
TWEN1[MaxData..0] = \rFULLData 0;
TA1[MaxAdd..0] = \rFULLAdd #;
TD1[MaxData..0] = \rFULLData #;
TIE_HIGH_SIGNAL1 = 1;
TIE_HIGH_SIGNAL2 = 1;
Q1[MaxData..0] = \rFULLData #;
OUTSIG = #;
}
}
} // end Procedures Memory_access
Environment "MY2PortRAM_mbist" {
CTLMode MBIST {
TestMode Normal;
Internal {
Q1 [MaxData..0] { DataType TestData MemoryData; }
OUTSIG { DataType Functional; }
A1 [MaxAdd..0] { DataType TestData MemoryAddress; }
.....
} // end Internal
Relation {
Port 'A1[MaxAdd..0] + TA1[MaxAdd..0] +........
WriteEnableMap WEN1[0] 'D1[0] ';
WriteEnableMap WEN1[1] 'D1[1] ';
WriteEnableMap WEN1[2] 'D1[2] '
......
......
WriteEnableMap WEN2[63] 'D1[63] '
} // end Relation
MemoryPhysicalOrganization {
FunctionalConfigurationDefinition FCD1 {
NumberOfWords 512 ;
WordSize 64 ;
AddressSize 9 ;
ColumnAddress { ValueRange 0 7; AddressPartition A1[2..0] ;}
RowAddress { ValueRange 0 63 ; AddressPartition A1[8..3] ;}
}
ColumnMultiplexing 8 ;
BitDistribution 1 ;
ScrambleDefinition SDblk {
PhysicalColumnAddress[0] 'ColumnAddress[0]';
PhysicalColumnAddress[1] 'ColumnAddress[1]';
.....
.....
PhysicalRowAddress[0] '(RowAddress[1] ^ RowAddress[0])';
}
Relation {
ScrambleMap SDblk {Port 0; Port 1;}
FunctionalConfigurationMap FCD1 { Port 0 }
FunctionalConfigurationMap FCD2 { Port 1 }
}
} // end MemoryPhysicalOrganization
PatternInformation {
Procedure bist_read_cycle_A {
Purpose MemoryRead { Target MemoryTest; Port 0; }
}
......
.....
}
} // end PatternInformation
MemoryRepair {
RepairResource RRIO1 {
Type IO; Width 1;
DataRange { ValueRange 0 31; }
DataConnectivity {
CRAL[5..0] {
{DisableValue 0;}
{ RepairValue 1 ; AssociatedSignal {Data[0];} }
{ RepairValue 2 ; AssociatedSignal {Data[1];} }
.....
.....
{ RepairValue 32 ; AssociatedSignal {Data[63];} }
}
}
}
RepairResource RRrow1 {
Type Row;
Width 4;
RowAddressRange { ValueRange 0 63; }
EnableConnectivity {
RRE1{ { RepairValue 1; } }
}
AddressConnectivity {
RRA1[8..5] { RepairSignal A1[8..5]; }
}
}
} // end MemoryRepair
} // end CTLMode
} // end Environment
C
Glossary of PMBIST Terms
Term/Acronym Definition
Algorithm Fundamental write/read pattern to the memory for testing
BIRA Built-In Redundancy Analysis
BISR Built-In Self Repair
eFuse An electronic fuse macro that can be written (blown)/read on
and off the tester
EGA Enable Group Analysis
FT Fault Tolerant, only valid on ECC wrapped memories
Hard Repair A mechanism in which memory repair solution is retained in
non-volatile memory between design power cycles
LW Logical Memory Wrapper
MMST Mission-Mode Self-Test, test that are applied in time windows
of functional operation
NVM Non-Volatile Memory, basically same as eFuse
PMBIST Programmable Memory Built-In Self-Test
PMDA PMBIST Direct Access
POST Power-On Self-Test, test that are applied every time the
design is powered on
RA Redundancy Analysis
Soft Repair A mechanism in which memory repair solution is lost when the
design is powered off
SR Self Repair
ST Self Test
Index
B S
Boolean Equivalence 147 STA
Multi-Mode Multi-Corner Timimg 142
Static Timing Analysis 139
C module-level 139
commands
add_pmbist 63 U
configuration file for MBIST insertion
intrinsic read 225 using Modus
constraints online help 16
define_jtag_instruction 63
define_jtag_instruction_register 52, 57,
63
CTL Memory Model Skeleton 328
Custom Scheduling 110
customer service, contacting 18
F
flows
test with MBIST insertion 54, 60
test with MBIST insertion, preview 50
H
help, accessing 16
M
macro Group 257
MBIST logic insertion
configuration file 40
interpreting reports 68
P
PMBIST Architecture 23