1 // ============================================================================= 2 STIL 1.0 { 3 Flow 2007; 4 } 5 // ----------------------------------------------------------------------------- 6 TestBase { // Name StdBase for consistency ? See namespaces below 7 // How about convention: constants, types, and keywords are upper case or capitalized, variables & functions start with lower case ? 8 // Identifier words are separated by capitalized letters, e.g., highestSetBin, NrOfAxes, i.e., no underscores 9 // Inherit UsrdefBase; // TestExec, Actions, and init vals may be overridden by subsequent inherit statements 10 Parameters { // **** Initialization syntax needs to be settled on all Parameters 11 Out Const String TestId; // **** Const spec requires consensus 14 Out Int execResult = Pass; 16 In Bin Failbin = NoBin; // **** Keyword NoBin requires consensus 17 } 18 PreActions {} 19 TestExec {} // **** Allow placeholder for possible default action and/or to show execution in sequence ? 20 PostActions {} 21 PassActions {} 22 FailActions { // IEEE P1450.4/D19 - May. 15, 2008: n/a here 23 SetBin FailBin; // **** How do concepts bin, stop, bin-and-stop apply, i.e., I want bin-and-stop semantics 25 } 26 } 27 // ----------------------------------------------------------------------------- 28 // **** Need consensus on default FlowNode def 29 // **** Is pseudo-code, i.e., do we need syntax ? 30 // **** Is top-level FlowNode statement the default FlowNode definition ? 31 // **** Does the next top-level FlowNode statement override the default FlowNode definition ? Only for FlowNodes following it ? 32 FlowNode { 33 PreActions {} 34 TestExec ; // Define semantics: i.e., multiple "execute_stmt"s in braces yields StdFlow with default FlowNodes 35 PostActions {} 36 ExitPorts { 37 Port FAIL: .execResult { Stop; } 38 Port PASS: True { Next; } 39 } 40 } 41 // ----------------------------------------------------------------------------- 42 FlowType StdFlow { 43 Inherit TestBase; 44 } 45 // ----------------------------------------------------------------------------- 46 // Does nothing and therefore does not fail. 47 // **** support namespaces, e.g., Std::NoOp, Std.NoOp ? 48 TestType StdNoOp { 49 Inherit TestBase; 50 } 51 // ----------------------------------------------------------------------------- 52 // Performs functional test. **** support namespaces, e.g., Std::Func, Std.Func ? 53 TestType StdFunc { 54 Inherit TestBase; 55 Parameters { 56 In Category timcat {} // Optional, therefore "{}" must be interpreted as initialized to empty initial_value_stmt 57 In Selector timsel {} 58 In Timing tim; // Required, therefore not initialized 59 In Category dccat {} 60 In Selector dcsel {} 61 In DCLevels dclevels; // Selects DCLevels from DCSets 62 In DCSets dcsets; // Contains DCLevels 63 In PatternBurst patburst; 64 In PatLocation start = 0; // Optional, need types: PatLocation = PatAddr | PatCycle ? 65 In PatLocation stop = PatEnd; // Optional, need mechanism to specify pattern end 66 In SignalGroup output = AllDigitalOuts; // To complete window, signals with strobes enabled are needed 67 } 68 } 69 // ============================================================================= 70 BinDefs bindefs { 71 Pass { 72 Bin Passed; // Index 0 73 } 74 Fail { 75 Bin Functional; // Index 0 76 Bin Timing; // Index 1 77 } 78 } 79 // ----------------------------------------------------------------------------- 80 // **** Define before use problem: "default_binmap" doesn't yet know it is tied to "bindefs" 81 BinMap default_binmap { 82 Map Passed 1; // **** Is Passed a legal reference ? 83 Map Functional 2; 84 Map Timing 3; 85 } 86 // ----------------------------------------------------------------------------- 87 // **** Define before use problem: code below doesn't yet know it is tied to "testvars" 88 Variables testvars { 89 } 90 // ----------------------------------------------------------------------------- 91 FlowType MainFlow { 92 Inherit StdFlow; 93 Parameters { 94 In Meter xcoord {} // Optional, for wafer 95 In Meter ycoord {} // Optional, for wafer 96 In Integer sitenr {} // Optional, for multi-site 97 Out Character waferMapChar = '?'; // **** Do we have a Character type ? 98 } 99 } 100 // ----------------------------------------------------------------------------- 101 Test StdFunc fnc1 { 102 // **** test_elements_stmt violates STIL.1 leading keyword rule for Paramer initialization 103 failBin = Functional; 104 tim = myloosetiming; // Assumption: "myloosetiming" is defined 105 dclevels = mydclevels; // Assumption: "mydclevels" is defined 106 dcsets = mydcsets; // Assumption: "mydcsets" is defined 107 patburst = mypatburst; // Assumption: "mypatburst" is defined 108 } 109 // ----------------------------------------------------------------------------- 110 Flow MainFlow mainflow { 111 TestExec { // Require FlowNodes to be inside TestExec block so that empty list can be specified, ref inheritance ? 112 TestExec fnc1; // Missing syntax: invokes default FlowNode 113 FlowNode { 114 TestExec StdFunc { 115 failBin = Timing; 116 tim = mytighttiming; // Assumption: "mytighttiming" is defined 117 dclevels = mydclevels; // Assumption: "mydclevels" is defined 118 dcsets = mydcsets; // Assumption: "mydcsets" is defined 119 patburst = mypatburst; // Assumption: "mypatburst" is defined 120 } 121 } 122 } 123 } 124 // ----------------------------------------------------------------------------- 125 TestProgram { 126 Variables testvars; // Variables are global to test program; local to site (a copy for each site) 127 BinDefs bindefs; 128 BinMap default_binmap; 129 EntryPoints { 130 OnException StdNoOp; // **** What triggers ? Can user trigger via syntax ? 131 OnFinish StdNoOp; // See OnStart, OnSiteEnd 132 OnLoad StdNoOp; // **** What if there is both a type and an instantiation called StdNoOp ? Need namespace description. 133 OnLotEnd StdNoOp; 134 OnLotStart StdNoOp; 135 OnMultiSiteDisable StdNoOp; 136 OnMultiSiteEnable StdNoOp; 137 OnPatternLoad StdNoOp; 138 OnPowerDown StdNoOp; 139 OnReset StdNoOp; // **** What triggers ? Can user trigger via syntax ? 140 OnRetest StdNoOp; // **** Add OnRetest to repertoire ? Can user trigger via syntax ? 141 OnSiteEnd StdNoOp; // **** Corollary to OnSiteStart ? How is it different from OnFinish ? 142 OnSiteStart StdNoOp; // **** How is it different from OnStart ? How does it relate ? 143 OnStart mainflow;// **** Corollary to OnFinish ? How is it different from OnSiteEnd ? 144 OnUnload StdNoOp; 145 OnWaferEnd StdNoOp; 146 OnWaferStart StdNoOp; 147 } 148 } 149 // =============================================================================