origen_std_lib 0.9.0 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/config/application.rb +7 -19
- data/config/commands.rb +9 -0
- data/config/version.rb +1 -2
- data/lib/origen_std_lib/v93k.rb +17 -1
- data/{stdlib/v93k → src/advantest/smt7}/origen/.cproject +0 -0
- data/{stdlib/v93k → src/advantest/smt7}/origen/.project +0 -0
- data/src/advantest/smt7/origen/origen.cpp +18 -0
- data/{stdlib/v93k → src/advantest/smt7}/origen/origen.hpp +3 -3
- data/{stdlib/v93k → src/advantest/smt7}/origen/origen/helpers.hpp +25 -8
- data/src/advantest/smt7/origen/origen/helpers/console.cpp +94 -0
- data/src/advantest/smt7/origen/origen/helpers/misc.cpp +456 -0
- data/src/advantest/smt7/origen/origen/helpers/time.cpp +64 -0
- data/src/advantest/smt7/origen/origen/site.cpp +237 -0
- data/src/advantest/smt7/origen/origen/site.hpp +49 -0
- data/{stdlib/v93k → src/advantest/smt7}/origen/origen/test_method.hpp +1 -3
- data/src/advantest/smt7/origen/origen/test_method/base.cpp +231 -0
- data/src/advantest/smt7/origen/origen/test_method/base.hpp +155 -0
- data/src/advantest/smt7/origen/origen/test_method/dc_measurement.cpp +266 -0
- data/src/advantest/smt7/origen/origen/test_method/dc_measurement.hpp +58 -0
- data/src/advantest/smt7/origen/origen/test_method/empty.cpp +13 -0
- data/src/advantest/smt7/origen/origen/test_method/empty.hpp +24 -0
- data/src/advantest/smt7/origen/origen/test_method/frequency_measurement.cpp +133 -0
- data/src/advantest/smt7/origen/origen/test_method/frequency_measurement.hpp +46 -0
- data/src/advantest/smt7/origen/origen/test_method/functional_test.cpp +168 -0
- data/src/advantest/smt7/origen/origen/test_method/functional_test.hpp +53 -0
- data/{stdlib/v93k → src/advantest/smt7}/origen/origen/utils.hpp +1 -3
- data/src/advantest/smt7/origen/origen/utils/version.cpp +72 -0
- data/{stdlib/v93k → src/advantest/smt7}/origen/origen/utils/version.hpp +20 -21
- data/src/advantest/smt7/origen/test_methods/ApplyBin.cpp +37 -0
- data/src/advantest/smt7/origen/test_methods/DCMeasurement.cpp +90 -0
- data/src/advantest/smt7/origen/test_methods/FrequencyMeasurement.cpp +50 -0
- data/src/advantest/smt7/origen/test_methods/FunctionalTest.cpp +24 -0
- data/src/advantest/smt7/origen/test_methods/RecordBin.cpp +39 -0
- data/src/advantest/smt8/origen/common/Origen.java +334 -0
- data/src/advantest/smt8/origen/common/OrigenData.java +391 -0
- data/src/advantest/smt8/origen/common/OrigenHelpers.java +170 -0
- data/src/advantest/smt8/origen/test_methods/Base.java +265 -0
- data/src/advantest/smt8/origen/test_methods/DC_Measurement.java +302 -0
- data/src/advantest/smt8/origen/test_methods/Empty.java +12 -0
- data/src/advantest/smt8/origen/test_methods/Functional_test.java +474 -0
- data/templates/web/faq.md.erb +1 -52
- data/templates/web/guides/intro.md.erb +8 -0
- data/templates/web/guides/{v93k/intro.md.erb → v93ksmt7/capture.md.erb} +0 -2
- data/templates/web/guides/v93ksmt7/complete.md.erb +68 -0
- data/templates/web/guides/v93ksmt7/customizable.md.erb +139 -0
- data/templates/web/guides/v93ksmt7/helpers.md.erb +3 -0
- data/templates/web/guides/{v93k → v93ksmt7}/install.md.erb +1 -1
- data/templates/web/guides/v93ksmt7/integration.md.erb +3 -0
- data/templates/web/guides/v93ksmt7/intro.md.erb +8 -0
- data/templates/web/guides/v93ksmt7/patching.md.erb +3 -0
- data/templates/web/guides/v93ksmt8/intro.md.erb +9 -0
- data/templates/web/index.md.erb +23 -6
- data/templates/web/layouts/_guides.html.erb +15 -3
- data/templates/web/partials/_common_args.md.erb +13 -0
- data/templates/web/partials/_navbar.html.erb +2 -2
- metadata +52 -33
- data/stdlib/v93k/origen/origen.cpp +0 -22
- data/stdlib/v93k/origen/origen/helpers/console.cpp +0 -105
- data/stdlib/v93k/origen/origen/helpers/misc.cpp +0 -311
- data/stdlib/v93k/origen/origen/site.cpp +0 -220
- data/stdlib/v93k/origen/origen/site.hpp +0 -51
- data/stdlib/v93k/origen/origen/test_method/base.hpp +0 -156
- data/stdlib/v93k/origen/origen/test_method/dc_measurement.cpp +0 -182
- data/stdlib/v93k/origen/origen/test_method/dc_measurement.hpp +0 -59
- data/stdlib/v93k/origen/origen/test_method/frequency_measurement.cpp +0 -107
- data/stdlib/v93k/origen/origen/test_method/frequency_measurement.hpp +0 -48
- data/stdlib/v93k/origen/origen/test_method/functional_test.cpp +0 -118
- data/stdlib/v93k/origen/origen/test_method/functional_test.hpp +0 -51
- data/stdlib/v93k/origen/origen/utils/version.cpp +0 -79
- data/stdlib/v93k/origen/test_methods/ApplyBin.cpp +0 -41
- data/stdlib/v93k/origen/test_methods/DCMeasurement.cpp +0 -129
- data/stdlib/v93k/origen/test_methods/FrequencyMeasurement.cpp +0 -93
- data/stdlib/v93k/origen/test_methods/FunctionalTest.cpp +0 -94
- data/stdlib/v93k/origen/test_methods/RecordBin.cpp +0 -48
@@ -0,0 +1,391 @@
|
|
1
|
+
package origen.common;
|
2
|
+
|
3
|
+
import java.util.ArrayList;
|
4
|
+
import java.util.Collections;
|
5
|
+
import java.util.Comparator;
|
6
|
+
import java.util.List;
|
7
|
+
import xoc.dta.datatypes.MultiSiteBoolean;
|
8
|
+
import xoc.dta.datatypes.MultiSiteLong;
|
9
|
+
import xoc.dta.datatypes.MultiSiteLongArray;
|
10
|
+
import xoc.dta.resultaccess.datatypes.BitSequence.BitOrder;
|
11
|
+
|
12
|
+
/**
|
13
|
+
* Generic data holder class
|
14
|
+
*
|
15
|
+
* <p>Can be used for example to store data before patching. Data elements are of type long. The
|
16
|
+
* implementation class is responsible for mapping this data to the right format
|
17
|
+
*
|
18
|
+
* <p>Use: It's basically a key-value pair per data point. This format is efficient for large arrays
|
19
|
+
* with little set data. It's not so efficient for a small array with many datapoints set. The key
|
20
|
+
* is the address and the value is called data. Everything is stored in a multisitelongarray for
|
21
|
+
* efficient patching.
|
22
|
+
*
|
23
|
+
* <p>Usage example:
|
24
|
+
*
|
25
|
+
* <pre>{@code
|
26
|
+
* OrigenData mem = new OrigenData();
|
27
|
+
* mem.setData(10, 0x55);
|
28
|
+
* mem.setData(12, 0x55);
|
29
|
+
* println("The same? " + mem.allSitesTheSame(10));
|
30
|
+
* mem.setDataOnSite(1, 10, 11);
|
31
|
+
* println("The same? " + mem.allSitesTheSame(10));
|
32
|
+
*
|
33
|
+
* mem.setDataOnSite(4, 100, 44);
|
34
|
+
* mem.setDataOnSite(4, 200, 44);
|
35
|
+
* mem.setDataOnSite(4, 300, 44);
|
36
|
+
* mem.setData(60, 60);
|
37
|
+
* mem.printData();
|
38
|
+
*
|
39
|
+
* println("Addr 10 site 1 set? : " + mem.addrIsSet(1, 10));
|
40
|
+
* int addr = 60;
|
41
|
+
* if (mem.allSitesTheSame(addr)) {
|
42
|
+
* println(mem.getDataCommon(addr));
|
43
|
+
* } else {
|
44
|
+
* println(mem.getDataMSL(addr));
|
45
|
+
* }
|
46
|
+
* }</pre>
|
47
|
+
*/
|
48
|
+
public class OrigenData {
|
49
|
+
private MultiSiteLongArray mem_addr;
|
50
|
+
private MultiSiteLongArray mem_data;
|
51
|
+
|
52
|
+
private ArrayList<Long> _sortedUniqueElements;
|
53
|
+
// For printing purposes only
|
54
|
+
public int bitPerDataElement = 32;
|
55
|
+
|
56
|
+
private boolean _anythingSet = false;
|
57
|
+
/** Constructor, initialized empty address and data arrays */
|
58
|
+
public OrigenData() {
|
59
|
+
mem_addr = new MultiSiteLongArray();
|
60
|
+
mem_data = new MultiSiteLongArray();
|
61
|
+
_anythingSet = false;
|
62
|
+
}
|
63
|
+
|
64
|
+
public ArrayList<Long> getUniqueAddressList() {
|
65
|
+
ArrayList<Long> list = new ArrayList<Long>();
|
66
|
+
for (int site : mem_data.getActiveSites()) {
|
67
|
+
long[] a = mem_addr.get(site);
|
68
|
+
for (int i = 0; i < a.length; i++) {
|
69
|
+
if (!list.contains(a[i])) {
|
70
|
+
list.add(a[i]);
|
71
|
+
}
|
72
|
+
}
|
73
|
+
}
|
74
|
+
Collections.sort(list);
|
75
|
+
return list;
|
76
|
+
}
|
77
|
+
|
78
|
+
public MultiSiteBoolean getActiveSitesOnAddr(long addr) {
|
79
|
+
MultiSiteBoolean MSB = new MultiSiteBoolean();
|
80
|
+
for (int site : mem_data.getActiveSites()) {
|
81
|
+
MSB.set(site, addrIsSet(site, addr));
|
82
|
+
}
|
83
|
+
return MSB;
|
84
|
+
}
|
85
|
+
|
86
|
+
public int getUniqueAddr(int index) {
|
87
|
+
_sortedUniqueElements = getUniqueAddressList();
|
88
|
+
return _sortedUniqueElements.get(index).intValue();
|
89
|
+
}
|
90
|
+
|
91
|
+
public int getNumUniqueAddr() {
|
92
|
+
_sortedUniqueElements = getUniqueAddressList();
|
93
|
+
return _sortedUniqueElements.size();
|
94
|
+
}
|
95
|
+
|
96
|
+
public static <T extends Comparable<T>> List<Integer> sortIndex(final List<T> in) {
|
97
|
+
ArrayList<Integer> index = new ArrayList<>();
|
98
|
+
for (int i = 0; i < in.size(); i++) {
|
99
|
+
index.add(i);
|
100
|
+
}
|
101
|
+
|
102
|
+
Collections.sort(
|
103
|
+
index,
|
104
|
+
new Comparator<Integer>() {
|
105
|
+
@Override
|
106
|
+
public int compare(Integer idx1, Integer idx2) {
|
107
|
+
return in.get(idx1).compareTo(in.get(idx2));
|
108
|
+
}
|
109
|
+
});
|
110
|
+
|
111
|
+
return index;
|
112
|
+
}
|
113
|
+
|
114
|
+
public void sort() {
|
115
|
+
for (int site : mem_data.getActiveSites()) {
|
116
|
+
long[] a = mem_addr.get(site);
|
117
|
+
long[] d = mem_data.get(site);
|
118
|
+
|
119
|
+
List<Long> list = new ArrayList<Long>(a.length);
|
120
|
+
for (long n : a) {
|
121
|
+
list.add(n);
|
122
|
+
}
|
123
|
+
|
124
|
+
List<Integer> idx = sortIndex(list);
|
125
|
+
|
126
|
+
long[] newA = a.clone();
|
127
|
+
long[] newD = d.clone();
|
128
|
+
for (int i = 0; i < a.length; i++) {
|
129
|
+
newA[i] = a[idx.get(i)];
|
130
|
+
newD[i] = d[idx.get(i)];
|
131
|
+
}
|
132
|
+
mem_addr.set(site, newA);
|
133
|
+
mem_data.set(site, newD);
|
134
|
+
}
|
135
|
+
}
|
136
|
+
|
137
|
+
public boolean memEmpty() {
|
138
|
+
return _anythingSet;
|
139
|
+
}
|
140
|
+
/**
|
141
|
+
* Set data on 1 specific site for 1 address
|
142
|
+
*
|
143
|
+
* @param site
|
144
|
+
* @param addr
|
145
|
+
* @param data
|
146
|
+
*/
|
147
|
+
public void setDataOnSite(int site, long addr, long data) {
|
148
|
+
long[] a = mem_addr.get(site);
|
149
|
+
long[] d = mem_data.get(site);
|
150
|
+
if (a == null) {
|
151
|
+
a = new long[0];
|
152
|
+
}
|
153
|
+
if (d == null) {
|
154
|
+
d = new long[0];
|
155
|
+
}
|
156
|
+
int loc = valInAddr(a, addr);
|
157
|
+
if (loc == d.length) {
|
158
|
+
d = expand(d);
|
159
|
+
a = expand(a);
|
160
|
+
}
|
161
|
+
d[loc] = data;
|
162
|
+
a[loc] = addr;
|
163
|
+
mem_data.set(site, d);
|
164
|
+
mem_addr.set(site, a);
|
165
|
+
_anythingSet = true;
|
166
|
+
}
|
167
|
+
|
168
|
+
/**
|
169
|
+
* Set the data for a certain 32bit addr
|
170
|
+
*
|
171
|
+
* @param addr
|
172
|
+
* @param data
|
173
|
+
*/
|
174
|
+
public void setData(long addr, long data) {
|
175
|
+
for (int site : mem_data.getActiveSites()) {
|
176
|
+
setDataOnSite(site, addr, data);
|
177
|
+
}
|
178
|
+
}
|
179
|
+
|
180
|
+
/**
|
181
|
+
* Returns true if a certain address is set on ANY site
|
182
|
+
*
|
183
|
+
* @param addr
|
184
|
+
* @return
|
185
|
+
*/
|
186
|
+
public boolean addrIsSetAnySite(long addr) {
|
187
|
+
for (int site : mem_data.getActiveSites()) {
|
188
|
+
if (addrIsSet(site, addr)) {
|
189
|
+
return true;
|
190
|
+
}
|
191
|
+
}
|
192
|
+
return false;
|
193
|
+
}
|
194
|
+
|
195
|
+
/**
|
196
|
+
* Returns true if a certain address is set on a specific site
|
197
|
+
*
|
198
|
+
* @param site
|
199
|
+
* @param addr
|
200
|
+
* @return
|
201
|
+
*/
|
202
|
+
public boolean addrIsSet(int site, long addr) {
|
203
|
+
long[] a = mem_addr.get(site);
|
204
|
+
int loc = valInAddr(a, addr);
|
205
|
+
return loc != a.length;
|
206
|
+
}
|
207
|
+
|
208
|
+
/**
|
209
|
+
* Returns the common data for all sites. Throws an error if this specific address is
|
210
|
+
* site-specific
|
211
|
+
*
|
212
|
+
* @param addr
|
213
|
+
* @return
|
214
|
+
*/
|
215
|
+
public long getDataCommon(long addr) {
|
216
|
+
int sites[] = mem_data.getActiveSites();
|
217
|
+
if (allSitesTheSame(addr)) {
|
218
|
+
return getDataPerSite(sites[0], addr);
|
219
|
+
}
|
220
|
+
throw new Error(
|
221
|
+
"Not all sites have the same data, cannot give common data for this addr: " + addr);
|
222
|
+
}
|
223
|
+
|
224
|
+
/**
|
225
|
+
* Returns the site specific data for an address, returning -1 for the data if it has not been
|
226
|
+
* previously set
|
227
|
+
*
|
228
|
+
* @param addr
|
229
|
+
* @return
|
230
|
+
*/
|
231
|
+
public MultiSiteLong getDataMSL(long addr) {
|
232
|
+
return getDataMSL(addr, false, "");
|
233
|
+
}
|
234
|
+
|
235
|
+
/**
|
236
|
+
* Returns the site specific data for an address, but raising and error with the given message if
|
237
|
+
* the data has not been previously set
|
238
|
+
*
|
239
|
+
* @param addr
|
240
|
+
* @return
|
241
|
+
*/
|
242
|
+
public MultiSiteLong getDataMSL(long addr, String errorMsg) {
|
243
|
+
return getDataMSL(addr, true, errorMsg);
|
244
|
+
}
|
245
|
+
|
246
|
+
private MultiSiteLong getDataMSL(long addr, boolean errorOnNotSet, String errorMsg) {
|
247
|
+
MultiSiteLong result = new MultiSiteLong();
|
248
|
+
for (int site : mem_data.getActiveSites()) {
|
249
|
+
if (addrIsSet(site, addr)) {
|
250
|
+
result.set(site, getDataPerSite(site, addr));
|
251
|
+
} else {
|
252
|
+
if (errorOnNotSet) {
|
253
|
+
throw new Error(errorMsg);
|
254
|
+
}
|
255
|
+
result.set(site, -1);
|
256
|
+
}
|
257
|
+
}
|
258
|
+
return result;
|
259
|
+
}
|
260
|
+
|
261
|
+
/**
|
262
|
+
* Returns whether or not all the sites have the same data for this addr
|
263
|
+
*
|
264
|
+
* @param addr
|
265
|
+
* @return
|
266
|
+
*/
|
267
|
+
public boolean allSitesTheSame(long addr) {
|
268
|
+
long commonData = -1;
|
269
|
+
boolean addrFound = false, addrNotFound = false;
|
270
|
+
for (int site : mem_data.getActiveSites()) {
|
271
|
+
long[] d = mem_data.get(site);
|
272
|
+
long[] a = mem_addr.get(site);
|
273
|
+
int loc = valInAddr(a, addr);
|
274
|
+
if (loc != a.length) {
|
275
|
+
if (addrNotFound) {
|
276
|
+
return false;
|
277
|
+
}
|
278
|
+
// Addr is found
|
279
|
+
addrFound = true;
|
280
|
+
if (commonData == -1) {
|
281
|
+
commonData = d[loc];
|
282
|
+
} else {
|
283
|
+
if (commonData != d[loc]) {
|
284
|
+
// Not all data the same for this addr over all sits
|
285
|
+
return false;
|
286
|
+
}
|
287
|
+
}
|
288
|
+
} else {
|
289
|
+
addrNotFound = true;
|
290
|
+
// Addr is found on one site but not the other
|
291
|
+
if (addrFound) {
|
292
|
+
return false;
|
293
|
+
}
|
294
|
+
}
|
295
|
+
}
|
296
|
+
return true;
|
297
|
+
}
|
298
|
+
|
299
|
+
/** Print all set data for all sites */
|
300
|
+
public void printData() {
|
301
|
+
sort();
|
302
|
+
System.out.println(getUniqueAddressList());
|
303
|
+
for (int site : mem_data.getActiveSites()) {
|
304
|
+
System.out.println("Site: " + site);
|
305
|
+
long[] d = mem_data.get(site);
|
306
|
+
long[] a = mem_addr.get(site);
|
307
|
+
for (int i = 0; i < d.length; i++) {
|
308
|
+
System.out.println(
|
309
|
+
a[i]
|
310
|
+
+ "\t"
|
311
|
+
+ OrigenHelpers.longToPaddedHexString(
|
312
|
+
d[i], bitPerDataElement / 4, BitOrder.RIGHT_TO_LEFT));
|
313
|
+
}
|
314
|
+
}
|
315
|
+
}
|
316
|
+
|
317
|
+
/** Clears all data on all sites */
|
318
|
+
public void clearAllData() {
|
319
|
+
// Lazy man's approach: Basically just throwing the reference to the old MSLarray away
|
320
|
+
// Let's hope the garbage collector removes the old references nicely
|
321
|
+
mem_addr = new MultiSiteLongArray();
|
322
|
+
mem_data = new MultiSiteLongArray();
|
323
|
+
_anythingSet = false;
|
324
|
+
}
|
325
|
+
// Some private helper functions
|
326
|
+
|
327
|
+
/**
|
328
|
+
* Returns the location in the array for a certain address. Returns the last+1 location of the
|
329
|
+
* array if addr is not found
|
330
|
+
*
|
331
|
+
* @param arr
|
332
|
+
* @param val
|
333
|
+
* @return
|
334
|
+
*/
|
335
|
+
private int valInAddr(long[] arr, long val) {
|
336
|
+
if (arr != null) {
|
337
|
+
for (int i = 0; i < arr.length; i++) {
|
338
|
+
if (val == arr[i]) {
|
339
|
+
return i;
|
340
|
+
}
|
341
|
+
}
|
342
|
+
return arr.length;
|
343
|
+
}
|
344
|
+
return 0;
|
345
|
+
}
|
346
|
+
|
347
|
+
/**
|
348
|
+
* Get the data for a specific site. This is private because the testmethod should call
|
349
|
+
* getDataMSL()
|
350
|
+
*
|
351
|
+
* @param site
|
352
|
+
* @param addr
|
353
|
+
* @return
|
354
|
+
*/
|
355
|
+
private long getDataPerSite(int site, long addr) {
|
356
|
+
long[] d = mem_data.get(site);
|
357
|
+
long[] a = mem_addr.get(site);
|
358
|
+
int loc = valInAddr(a, addr);
|
359
|
+
return d[loc];
|
360
|
+
}
|
361
|
+
|
362
|
+
/**
|
363
|
+
* Expand the array by 1
|
364
|
+
*
|
365
|
+
* @param origArray
|
366
|
+
* @return
|
367
|
+
*/
|
368
|
+
private long[] expand(long[] origArray) {
|
369
|
+
long[] newArray = new long[origArray.length + 1];
|
370
|
+
System.arraycopy(origArray, 0, newArray, 0, origArray.length);
|
371
|
+
return newArray;
|
372
|
+
}
|
373
|
+
}
|
374
|
+
|
375
|
+
class DataPair<T> {
|
376
|
+
private final T addr;
|
377
|
+
private final T data;
|
378
|
+
|
379
|
+
public DataPair(T first, T second) {
|
380
|
+
addr = first;
|
381
|
+
data = second;
|
382
|
+
}
|
383
|
+
|
384
|
+
public T addr() {
|
385
|
+
return addr;
|
386
|
+
}
|
387
|
+
|
388
|
+
public T second() {
|
389
|
+
return data;
|
390
|
+
}
|
391
|
+
}
|
@@ -0,0 +1,170 @@
|
|
1
|
+
package origen.common;
|
2
|
+
|
3
|
+
import xoc.dta.datatypes.MultiSiteLong;
|
4
|
+
import xoc.dta.resultaccess.datatypes.BitSequence;
|
5
|
+
import xoc.dta.resultaccess.datatypes.BitSequence.BitOrder;
|
6
|
+
import xoc.dta.setupaccess.IPattern;
|
7
|
+
import xoc.dta.setupaccess.IStateCharBuffer;
|
8
|
+
|
9
|
+
public class OrigenHelpers {
|
10
|
+
|
11
|
+
public static boolean isEven(int number) {
|
12
|
+
return (number % 2) == 0;
|
13
|
+
}
|
14
|
+
|
15
|
+
public static boolean isOdd(int number) {
|
16
|
+
return (number % 2) != 0;
|
17
|
+
}
|
18
|
+
|
19
|
+
public static boolean isEven(long number) {
|
20
|
+
return (number % 2) == 0;
|
21
|
+
}
|
22
|
+
|
23
|
+
public static boolean isOdd(long number) {
|
24
|
+
return (number % 2) != 0;
|
25
|
+
}
|
26
|
+
|
27
|
+
/**
|
28
|
+
* String parameter to assert it's not used Default value is "0"
|
29
|
+
*
|
30
|
+
* @param params
|
31
|
+
*/
|
32
|
+
public static void assertNotImplStrParam(String params) {
|
33
|
+
assertNotImplementedStringParam(new String[] {params}, "0");
|
34
|
+
}
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Check list of string parameters to assert they are not used Default value is "0"
|
38
|
+
*
|
39
|
+
* @param params
|
40
|
+
*/
|
41
|
+
public static void assertNotImplStrParam(String[] params) {
|
42
|
+
assertNotImplementedStringParam(params, "0");
|
43
|
+
}
|
44
|
+
|
45
|
+
/**
|
46
|
+
* Check list of string parameters to make sure they are not used
|
47
|
+
*
|
48
|
+
* @param params
|
49
|
+
* @param defValue
|
50
|
+
*/
|
51
|
+
public static void assertNotImplementedStringParam(String[] params, String defValue) {
|
52
|
+
for (String p : params) {
|
53
|
+
if (p != null && (p != "" && p != defValue)) {
|
54
|
+
throw new Error("String Paramvalue: " + p + " is not defined!!");
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
/**
|
60
|
+
* Check list int parameters to make sure they not used Default value = 0
|
61
|
+
*
|
62
|
+
* @param params
|
63
|
+
*/
|
64
|
+
public static void assertNotImplIntParam(int[] params) {
|
65
|
+
assertNotImplementedIntParam(params, 0);
|
66
|
+
}
|
67
|
+
|
68
|
+
/**
|
69
|
+
* Check list of int parameter to make sure it's not used
|
70
|
+
*
|
71
|
+
* @param params
|
72
|
+
* @param defValue
|
73
|
+
*/
|
74
|
+
public static void assertNotImplementedIntParam(int[] params, int defValue) {
|
75
|
+
for (int p : params) {
|
76
|
+
if (p != 0) {
|
77
|
+
throw new Error("Int Paramvalue: " + p + " is not defined!!");
|
78
|
+
}
|
79
|
+
}
|
80
|
+
}
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Check double paramter they make sure it's not used
|
84
|
+
*
|
85
|
+
* @param params
|
86
|
+
*/
|
87
|
+
public static void assertNotImplDoubleParam(double params) {
|
88
|
+
assertNotImplDoubleParam(new double[] {params});
|
89
|
+
}
|
90
|
+
|
91
|
+
/**
|
92
|
+
* Check list of double parameters to make sure they are not used Default value = 0
|
93
|
+
*
|
94
|
+
* @param params
|
95
|
+
*/
|
96
|
+
public static void assertNotImplDoubleParam(double[] params) {
|
97
|
+
assertNotImplementedDoubleParam(params, 0);
|
98
|
+
}
|
99
|
+
|
100
|
+
/**
|
101
|
+
* Check list of double parameters
|
102
|
+
*
|
103
|
+
* @param params
|
104
|
+
* @param defValue
|
105
|
+
*/
|
106
|
+
public static void assertNotImplementedDoubleParam(double[] params, double defValue) {
|
107
|
+
for (double p : params) {
|
108
|
+
if (p != 0) {
|
109
|
+
throw new Error("double Paramvalue: " + p + " is not defined!!");
|
110
|
+
}
|
111
|
+
}
|
112
|
+
}
|
113
|
+
|
114
|
+
// Overlays the given data on the given pin, starting from the first vector of the given pattern
|
115
|
+
// For ALL sites the same
|
116
|
+
public static void overlaySubroutine(
|
117
|
+
IPattern subroutinePattern, String pin, long decData, int size) {
|
118
|
+
if (size > 64) {
|
119
|
+
throw new NumberFormatException("Cannot patch more than 64 bits using Long");
|
120
|
+
}
|
121
|
+
if (decData != -1) {
|
122
|
+
String data = longToPaddedBinaryString(decData, size, BitOrder.LEFT_TO_RIGHT, false);
|
123
|
+
subroutinePattern.vector(0).writeStateChar(data.toCharArray(), pin);
|
124
|
+
}
|
125
|
+
}
|
126
|
+
|
127
|
+
public static String longToPaddedHexString(Long data, int size, BitSequence.BitOrder order) {
|
128
|
+
String binStr = longToPaddedBinaryString(data, size, order, false);
|
129
|
+
long value = Long.parseLong(binStr, 2);
|
130
|
+
String format = "%" + size + "s";
|
131
|
+
String strData = String.format(format, Long.toHexString(value).toUpperCase()).replace(" ", "0");
|
132
|
+
return strData;
|
133
|
+
}
|
134
|
+
|
135
|
+
public static String longToPaddedBinaryString(
|
136
|
+
Long data, int size, BitSequence.BitOrder order, boolean replace01ToHL) {
|
137
|
+
// Enforce minimum string size
|
138
|
+
String format = "%" + size + "s";
|
139
|
+
String strData = String.format(format, Long.toBinaryString(data)).replace(" ", "0");
|
140
|
+
if (order == BitOrder.LEFT_TO_RIGHT) {
|
141
|
+
strData = new StringBuilder(strData).reverse().toString();
|
142
|
+
// System.out.println(strData);
|
143
|
+
// Enforce maximum string size
|
144
|
+
strData = strData.substring(0, size);
|
145
|
+
}
|
146
|
+
|
147
|
+
if (replace01ToHL) {
|
148
|
+
strData = strData.replace("0", "L").replace("1", "H");
|
149
|
+
}
|
150
|
+
return strData;
|
151
|
+
}
|
152
|
+
// Overlay per site
|
153
|
+
public static void overlaySubroutine(
|
154
|
+
IPattern subroutinePattern, String pin, MultiSiteLong decData, int size, int[] sites) {
|
155
|
+
if (size > 64) {
|
156
|
+
throw new NumberFormatException("Cannot patch more than 64 bits using Long");
|
157
|
+
}
|
158
|
+
IStateCharBuffer scBuf = subroutinePattern.createStateCharBuffer();
|
159
|
+
for (int site : sites) {
|
160
|
+
long longData = decData.get(site);
|
161
|
+
// Only patch if data != -1, this can be used to not patch data on certain sites
|
162
|
+
if (longData != -1) {
|
163
|
+
String data = longToPaddedBinaryString(longData, size, BitOrder.LEFT_TO_RIGHT, false);
|
164
|
+
scBuf.writeStateChar(site, 0, pin, data.toCharArray());
|
165
|
+
}
|
166
|
+
}
|
167
|
+
|
168
|
+
scBuf.flush();
|
169
|
+
}
|
170
|
+
}
|