origen_testers 0.45.2 → 0.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/version.rb +2 -2
- data/lib/origen_testers/atp/flow.rb +4 -0
- data/lib/origen_testers/igxl_based_tester/base.rb +14 -0
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +1 -1
- data/lib/origen_testers/smartest_based_tester/base/limits_file.rb +7 -3
- data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +2 -2
- data/lib/origen_testers/smartest_based_tester/base/test_method.rb +7 -1
- data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +18 -7
- data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +1 -1
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +1 -0
- data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +16 -12
- data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +10 -6
- data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +0 -1
- data/pattern/tester_overlay_no_start.rb +41 -0
- data/program/prb1.rb +1 -1
- data/templates/origen_guides/pattern/ultraflex.md.erb +20 -0
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: df7294cf891812cfb78d98b161891a459391abb07841eb66d14929185385df22
|
4
|
+
data.tar.gz: 2d0bfcc2c6862a2f10abc60136dbba9099f6f1ae0deeecb099b4700d34d95121
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c42eacdbe39b6eb35eddf8dcbeb08e49eab49bca4425c20f2c0474c8b5f977fdbeec9ed5b799001f7b8b7f5e6e87fc3293e3ac9c0ecc7012bc8eea8b7d86183b
|
7
|
+
data.tar.gz: f17d9f4f1c7bdb90e58a0f2e6791e406bbf5b80b8ec8b5986a0e2e49e3e5d4145167c81a39773e560fbb8c8392a5b2dbbcf88efc52940e77301c6b4341a88a3a
|
data/config/version.rb
CHANGED
@@ -408,6 +408,10 @@ module OrigenTesters::ATP
|
|
408
408
|
children << n(:meta, attrs)
|
409
409
|
end
|
410
410
|
|
411
|
+
if options[:test_text]
|
412
|
+
children << n(:test_text, [options[:test_text]])
|
413
|
+
end
|
414
|
+
|
411
415
|
if subs = options[:sub_test] || options[:sub_tests]
|
412
416
|
subs = [subs] unless subs.is_a?(Array)
|
413
417
|
subs.each do |s|
|
@@ -1041,6 +1041,20 @@ module OrigenTesters
|
|
1041
1041
|
# stage = sub_name
|
1042
1042
|
end # subroutine_overlay
|
1043
1043
|
|
1044
|
+
# Disable the automatic addition of the digsrc start command at the beginning of the pattern
|
1045
|
+
#
|
1046
|
+
# @example
|
1047
|
+
# tester.digsrc_skip_start :pin_or_group_name
|
1048
|
+
#
|
1049
|
+
def digsrc_skip_start(pin_or_group)
|
1050
|
+
pin_or_group = dut.pin(pin_or_group).name
|
1051
|
+
if @overlay_history[pin_or_group].nil?
|
1052
|
+
@overlay_history[pin_or_group] = { count: 0, is_digsrc: true, start_applied: true }
|
1053
|
+
else
|
1054
|
+
Origen.log.warn 'tester.digsrc_skip_start must be called before any overlay actions on the pin'
|
1055
|
+
end
|
1056
|
+
end
|
1057
|
+
|
1044
1058
|
# Perform digsrc overlay (called by tester.cycle)
|
1045
1059
|
def digsrc_overlay(options = {})
|
1046
1060
|
options[:overlay] = { change_data: true }.merge(options[:overlay])
|
@@ -18,7 +18,7 @@ module OrigenTesters
|
|
18
18
|
# Returns an array containing all runtime variables which get set by the flow
|
19
19
|
attr_reader :set_runtime_variables
|
20
20
|
|
21
|
-
attr_accessor :add_flow_enable, :flow_name, :flow_bypass, :flow_description
|
21
|
+
attr_accessor :add_flow_enable, :flow_name, :flow_bypass, :flow_description, :subdirectory
|
22
22
|
|
23
23
|
def self.generate_flag_name(flag)
|
24
24
|
case flag[0]
|
@@ -119,6 +119,7 @@ module OrigenTesters
|
|
119
119
|
o[:test_name] = extract_test_name(node, o)
|
120
120
|
o[:test_number] = extract_test_number(node, o)
|
121
121
|
o[:limits] = extract_limits(node, o)
|
122
|
+
o[:test_text] = node.find(:test_text).try(:value)
|
122
123
|
if on_fail = node.find(:on_fail)
|
123
124
|
if set_result = on_fail.find(:set_result)
|
124
125
|
if bin = set_result.find(:bin)
|
@@ -252,9 +253,12 @@ module OrigenTesters
|
|
252
253
|
# "Test Number"
|
253
254
|
l << f(options[:test_number])
|
254
255
|
# "Test Text"
|
255
|
-
|
256
|
-
|
257
|
-
|
256
|
+
if options[:test_text]
|
257
|
+
l << f(options[:test_text])
|
258
|
+
else
|
259
|
+
names = ["#{options[:suite_name]}", "#{options[:test_name]}"]
|
260
|
+
l << f(names.uniq.join('.'))
|
261
|
+
end
|
258
262
|
if test_modes.empty?
|
259
263
|
# "Low Limit"
|
260
264
|
l << f((options[:limits][nil] || {})[:lsl])
|
@@ -6,7 +6,7 @@ module OrigenTesters
|
|
6
6
|
include OrigenTesters::Generator
|
7
7
|
|
8
8
|
attr_reader :flow, :paths
|
9
|
-
attr_accessor :filename, :id
|
9
|
+
attr_accessor :filename, :id, :subdirectory
|
10
10
|
|
11
11
|
def initialize(flow = nil)
|
12
12
|
@flow = flow
|
@@ -18,7 +18,7 @@ module OrigenTesters
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def subdirectory
|
21
|
-
'vectors'
|
21
|
+
@subdirectory ||= 'vectors'
|
22
22
|
end
|
23
23
|
|
24
24
|
def paths
|
@@ -85,7 +85,13 @@ module OrigenTesters
|
|
85
85
|
end
|
86
86
|
# Finally set any initial values that have been supplied
|
87
87
|
options[:attrs].each do |k, v|
|
88
|
-
|
88
|
+
accessor = "#{k}="
|
89
|
+
if respond_to?(accessor)
|
90
|
+
send(accessor, v)
|
91
|
+
else
|
92
|
+
accessor = "#{k.to_s.underscore}="
|
93
|
+
send(accessor, v) if respond_to?(accessor)
|
94
|
+
end
|
89
95
|
end
|
90
96
|
end
|
91
97
|
|
@@ -13,14 +13,14 @@ module OrigenTesters
|
|
13
13
|
|
14
14
|
def method_missing(method, *args, &block)
|
15
15
|
if definitions[method]
|
16
|
-
|
17
|
-
attrs: (args.first || {}),
|
18
|
-
type: method,
|
19
|
-
library: self
|
20
|
-
test_methods.add(m)
|
21
|
-
m
|
16
|
+
instantiate_test_method(method, args)
|
22
17
|
else
|
23
|
-
|
18
|
+
method = method.to_s.underscore.to_sym
|
19
|
+
if definitions[method]
|
20
|
+
instantiate_test_method(method, args)
|
21
|
+
else
|
22
|
+
super
|
23
|
+
end
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
@@ -31,6 +31,17 @@ module OrigenTesters
|
|
31
31
|
def definitions
|
32
32
|
@definitions || self.class::TEST_METHODS
|
33
33
|
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def instantiate_test_method(method, args)
|
38
|
+
m = platform::TestMethod.new methods: definitions[method].dup,
|
39
|
+
attrs: (args.first || {}),
|
40
|
+
type: method,
|
41
|
+
library: self
|
42
|
+
test_methods.add(m)
|
43
|
+
m
|
44
|
+
end
|
34
45
|
end
|
35
46
|
end
|
36
47
|
end
|
@@ -9,7 +9,7 @@ module OrigenTesters
|
|
9
9
|
test_current: [:current, 10.uA],
|
10
10
|
settling_time: [:time, 1.ms],
|
11
11
|
measurement_mode: [:string, 'PPMUpar', %w(PPMUpar ProgLoad)],
|
12
|
-
polarity: [:string, 'SPOL',
|
12
|
+
polarity: [:string, 'SPOL', %w(SPOL BPOL)],
|
13
13
|
precharge_to_zero_vol: [:string, 'ON', %w(ON OFF)],
|
14
14
|
test_name: [:string, 'passVolt_mv'],
|
15
15
|
output: [:string, 'None', %w(None ReportUI ShowFailOnly)]
|
@@ -6,13 +6,13 @@ module OrigenTesters
|
|
6
6
|
include OrigenTesters::Generator
|
7
7
|
|
8
8
|
attr_reader :variables
|
9
|
-
attr_accessor :filename, :id
|
9
|
+
attr_accessor :filename, :id, :subdirectory
|
10
10
|
|
11
11
|
def initialize(options = {})
|
12
12
|
end
|
13
13
|
|
14
14
|
def subdirectory
|
15
|
-
'testflow/mfh.testflow.setup'
|
15
|
+
@subdirectory ||= 'testflow/mfh.testflow.setup'
|
16
16
|
end
|
17
17
|
|
18
18
|
def add_variables(vars)
|
@@ -35,21 +35,25 @@ module OrigenTesters
|
|
35
35
|
|
36
36
|
# What SMT7 calls a flag
|
37
37
|
def flags
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
38
|
+
if variables
|
39
|
+
(variables[:all][:referenced_enables] + variables[:all][:set_enables]).uniq.sort do |x, y|
|
40
|
+
x = x[0] if x.is_a?(Array)
|
41
|
+
y = y[0] if y.is_a?(Array)
|
42
|
+
# Need to use strings for the comparison as some flags can be a string and some a symbol
|
43
|
+
x.to_s <=> y.to_s
|
44
|
+
end
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
46
48
|
# What SMT7 calls a declaration
|
47
49
|
def declarations
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
50
|
+
if variables
|
51
|
+
(variables[:all][:jobs] + variables[:all][:referenced_flags] + variables[:all][:set_flags]).uniq.sort do |x, y|
|
52
|
+
x = x[0] if x.is_a?(Array)
|
53
|
+
y = y[0] if y.is_a?(Array)
|
54
|
+
# Need to use strings for the comparison as some declarations can be a string and some a symbol
|
55
|
+
x.to_s <=> y.to_s
|
56
|
+
end
|
53
57
|
end
|
54
58
|
end
|
55
59
|
|
@@ -3,11 +3,13 @@ language_revision = 1;
|
|
3
3
|
|
4
4
|
declarations
|
5
5
|
|
6
|
-
% declarations
|
7
|
-
%
|
6
|
+
% if declarations
|
7
|
+
% declarations.each do |var|
|
8
|
+
% if var.is_a?(Array)
|
8
9
|
@<%= var[0].to_s %> = <%= var[1].is_a?(String) || var[1].is_a?(Symbol) ? "\"#{var[1]}\"" : var[1] %>;
|
9
|
-
%
|
10
|
+
% else
|
10
11
|
@<%= var.to_s %> = 0;
|
12
|
+
% end
|
11
13
|
% end
|
12
14
|
% end
|
13
15
|
|
@@ -15,11 +17,13 @@ end
|
|
15
17
|
-----------------------------------------------------------------
|
16
18
|
flags
|
17
19
|
|
18
|
-
% flags
|
19
|
-
%
|
20
|
+
% if flags
|
21
|
+
% flags.each do |var|
|
22
|
+
% if var.is_a?(Array)
|
20
23
|
user <%= var[0].to_s %> = <%= var[1].is_a?(String) || var[1].is_a?(Symbol) ? "\"#{var[1]}\"" : var[1] %>;
|
21
|
-
%
|
24
|
+
% else
|
22
25
|
user <%= var.to_s %> = 0;
|
26
|
+
% end
|
23
27
|
% end
|
24
28
|
% end
|
25
29
|
|
@@ -115,7 +115,6 @@ module OrigenTesters
|
|
115
115
|
l << " site_control = #{wrap_if_string(site_control)};" if site_control
|
116
116
|
l << " site_match = #{wrap_if_string(site_match)};" if site_match
|
117
117
|
l << " test_level = #{test_level};" if test_level
|
118
|
-
l << " force_serial = #{wrap_if_string(force_serial)};" if force_serial
|
119
118
|
l
|
120
119
|
end
|
121
120
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Pattern.create(name: "test_overlay_no_start") do
|
2
|
+
tester.overlay_style = :digsrc
|
3
|
+
# increase coverage by changing tdi dig src settings
|
4
|
+
tester.source_memory :digsrc do |mem|
|
5
|
+
mem.pin :tdi, size: 32
|
6
|
+
end
|
7
|
+
cc 'should get a repeat count added to this vector for digsrc start minimum distance'
|
8
|
+
tester.cycle
|
9
|
+
|
10
|
+
dut.pin(:tclk).drive(1)
|
11
|
+
dut.pin(:tdi).drive(1)
|
12
|
+
dut.pin(:tdo).assert(1)
|
13
|
+
dut.pin(:tms).drive(1)
|
14
|
+
|
15
|
+
cc 'should get a repeat 5 vector'
|
16
|
+
tester.cycle repeat: 5
|
17
|
+
|
18
|
+
tester.digsrc_skip_start :tdi_a if tester.ultraflex?
|
19
|
+
tester.digsrc_skip_start :pa if tester.ultraflex?
|
20
|
+
|
21
|
+
cc 'should get a send microcode and 1 cycle with D'
|
22
|
+
tester.cycle overlay: {overlay_str: 'dummy_str', pins: dut.pin(:tdi_a)}
|
23
|
+
cc 'should get a cycle with D and no send'
|
24
|
+
tester.cycle overlay: {overlay_str: 'dummy_str', pins: dut.pin(:tdi_a), change_data: false}
|
25
|
+
cc 'regular cycle with no D or send'
|
26
|
+
tester.cycle
|
27
|
+
|
28
|
+
cc 'cycle with 001 on pa'
|
29
|
+
dut.pin(:pa).drive!(1)
|
30
|
+
cc 'send microcode followed by DDD on pa'
|
31
|
+
dut.pin(:pa).drive(0)
|
32
|
+
tester.cycle overlay: {overlay_str: "dummy_str", pins: dut.pin(:pa)}
|
33
|
+
cc 'cycle with 001 on pa'
|
34
|
+
dut.pin(:pa).drive!(1)
|
35
|
+
cc 'send microcode, DDD on pa with repeat 5 (will send 5 sets of data)'
|
36
|
+
dut.pin(:pa).drive(0)
|
37
|
+
tester.cycle repeat: 5, overlay: {overlay_str: "dummy_str", pins: dut.pin(:pa)}
|
38
|
+
cc 'cycle with 001 on pa'
|
39
|
+
dut.pin(:pa).drive!(1)
|
40
|
+
|
41
|
+
end
|
data/program/prb1.rb
CHANGED
@@ -13,7 +13,7 @@ Flow.create interface: 'OrigenTesters::Test::Interface', flow_description: 'Prob
|
|
13
13
|
import 'test' # import top-level test.rb directly, note that Flow.create options of sub-flow will be ignored!
|
14
14
|
|
15
15
|
# Test that a reference to a deeply nested test works (mainly for SMT8)
|
16
|
-
test :on_deep_1, if_failed: :deep_test
|
16
|
+
test :on_deep_1, if_failed: :deep_test, test_text: "some_custom_text"
|
17
17
|
|
18
18
|
pass 1, description: "Good die!", softbin: 1
|
19
19
|
end
|
@@ -7,4 +7,24 @@ automatically to any supported platform.
|
|
7
7
|
There are no significant APIs in this category currently, therefore refer to the
|
8
8
|
[Common Pattern API](<%= path "guides/pattern/common" %>) which can fully target the UltraFLEX.
|
9
9
|
|
10
|
+
### DigSrc
|
11
|
+
|
12
|
+
UltraFlex supports <code>:digsrc</code> as a <code>tester.overlay_style</code> set like this:
|
13
|
+
|
14
|
+
~~~ruby
|
15
|
+
tester.overlay_style = :digsrc
|
16
|
+
~~~
|
17
|
+
|
18
|
+
By default Origen will automatically place the digsrc start opcode at the beginning of the resulting pattern
|
19
|
+
when <code>:digsrc</code> overlay is used. In some cases (like when the pattern is used in a pattern set that has already started
|
20
|
+
the instrument in a previous pattern, or possibly in svm_patterns) this behavior is undesirable.
|
21
|
+
|
22
|
+
The insertion of this start opcode can be disabled by placing the following code **before** any overlay operations
|
23
|
+
for a given pin.
|
24
|
+
|
25
|
+
~~~ruby
|
26
|
+
tester.digsrc_skip_start :pin_or_group_name if tester.ultraflex?
|
27
|
+
# Overlay operations can happen after this point
|
28
|
+
~~~
|
29
|
+
|
10
30
|
% end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: origen_testers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.47.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen McGinty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-08-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|
@@ -466,6 +466,7 @@ files:
|
|
466
466
|
- pattern/single_overlay_store.rb
|
467
467
|
- pattern/subroutines.rb
|
468
468
|
- pattern/tester_overlay.rb
|
469
|
+
- pattern/tester_overlay_no_start.rb
|
469
470
|
- pattern/tester_store.rb
|
470
471
|
- program/_additional_erase.rb
|
471
472
|
- program/_efa_resources.rb
|
@@ -547,7 +548,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
547
548
|
- !ruby/object:Gem::Version
|
548
549
|
version: '0'
|
549
550
|
requirements: []
|
550
|
-
|
551
|
+
rubyforge_project:
|
552
|
+
rubygems_version: 2.7.6
|
551
553
|
signing_key:
|
552
554
|
specification_version: 4
|
553
555
|
summary: This plugin provides Origen tester models to drive ATE type testers like
|