origen_testers 0.49.3 → 0.51.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 44d3544735522514276c1f11198d48015f587645bb434cb5ff5e1cd877dd799c
4
- data.tar.gz: 99b3a18e65bd837febf9b9d6cfa1043f447c5cbc02aec73902c35312d2e9f266
3
+ metadata.gz: c5ff2e2f1b209e2dadbf045bc52f45361a8220f7f43b5fa27a1782f6c2b61a9e
4
+ data.tar.gz: a0387e3b6629f520a42dde25ae6c5b78a86d4f93a1beefbff6bd865988b8577d
5
5
  SHA512:
6
- metadata.gz: 87fb0d43358361dc87fb0db076c75050edfd26c4e4e5c8b62eb21d4794f4a5efe314a019cf7ede6e1d93f31184829e52cf50852c8aac9ffc573bceb97a9eba0e
7
- data.tar.gz: d3ff0b325eecffe7a7f61cdc16473fd737b798cfa8dc5c7404ff60831407bdc441bcc158975cf9e34c0110c191287f05d03b056e8f2962bb6fdc7e4e278b37eb
6
+ metadata.gz: 8c1b698fc08e769ce66ce5b65073f1aa3644b59497587849338c6fa343c615e42c5300e45238d4f706c347d6b7e354aab7fae28541f90f8845ee3cdcd0633a72
7
+ data.tar.gz: a227d7203f78c6d36aa2963478067b8e4a7746e588f464d680da7e36069f48fa2bbed19743d8e2923045bb53adb42856ab700061bd52492d28bf0c188f7c2db3
data/config/commands.rb CHANGED
@@ -200,7 +200,7 @@ when "examples", "test"
200
200
  puts
201
201
  puts "To approve any diffs in the reference.list files run the following command:"
202
202
  puts
203
- platforms = %w(j750 j750_hpt ultraflex v93k v93k_multiport v93k_enable_flow v93k_disable_flow v93k_limits_file v93k_global v93k_smt8) # put here the various platforms used in examples/program_generator.rb
203
+ platforms = %w(j750 j750_literals j750_hpt ultraflex ultraflex_literals v93k v93k_multiport v93k_enable_flow v93k_disable_flow v93k_limits_file v93k_global v93k_smt8) # put here the various platforms used in examples/program_generator.rb
204
204
  reflist_command = ''
205
205
  platforms.each do |platform|
206
206
  unless reflist_command == ''
data/config/version.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  module OrigenTesters
2
2
  MAJOR = 0
3
- MINOR = 49
4
- BUGFIX = 3
3
+ MINOR = 51
4
+ BUGFIX = 0
5
5
  DEV = nil
6
6
  VERSION = [MAJOR, MINOR, BUGFIX].join(".") + (DEV ? ".pre#{DEV}" : '')
7
7
  end
@@ -337,8 +337,11 @@ module OrigenTesters::ATP
337
337
 
338
338
  name = (options[:name] || options[:tname] || options[:test_name])
339
339
  unless name
340
- [:name, :tname, :test_name].each do |m|
341
- name ||= instance.respond_to?(m) ? instance.send(m) : nil
340
+ # Starting in Ruby3 type Symbol responds to name
341
+ unless instance.is_a?(Symbol)
342
+ [:name, :tname, :test_name].each do |m|
343
+ name ||= instance.respond_to?(m) ? instance.send(m) : nil
344
+ end
342
345
  end
343
346
  end
344
347
  children << n1(:name, name) if name
@@ -2,6 +2,7 @@ require 'sexpistol'
2
2
  module OrigenTesters::ATP
3
3
  class Parser < Sexpistol
4
4
  def initialize
5
+ # This accessor moves to Sexpistol::Parser in newer versions of the gem
5
6
  self.ruby_keyword_literals = true
6
7
  end
7
8
 
@@ -9,15 +9,25 @@ module OrigenTesters::ATP
9
9
  end
10
10
 
11
11
  # Make all IDs lower cased symbols
12
+ # unless literal_flags is set
12
13
  def on_id(node)
13
14
  id = node.to_a[0]
14
- node.updated(nil, [clean(id)])
15
+ if tester.literal_flags
16
+ node.updated(nil, [id])
17
+ else
18
+ node.updated(nil, [clean(id)])
19
+ end
15
20
  end
16
21
 
17
22
  # Make all ID references use the lower case symbols
23
+ # unless literal_flags is set
18
24
  def on_if_failed(node)
19
25
  id, *children = *node
20
- node.updated(nil, [clean(id)] + process_all(children))
26
+ if tester.literal_flags
27
+ node.updated(nil, [id] + process_all(children))
28
+ else
29
+ node.updated(nil, [clean(id)] + process_all(children))
30
+ end
21
31
  end
22
32
  alias_method :on_if_passed, :on_if_failed
23
33
  alias_method :on_if_any_failed, :on_if_failed
@@ -52,7 +52,7 @@ module OrigenTesters
52
52
  end
53
53
 
54
54
  def split!
55
- section_indices = split(splitter_config)
55
+ section_indices = split(**splitter_config)
56
56
 
57
57
  # Check that we found each section in the pattern.
58
58
  if section_indices[:pinlist_start].nil?
@@ -51,7 +51,11 @@ module OrigenTesters
51
51
  include EnumerableExt
52
52
  include SpecHelpers
53
53
 
54
- def initialize(source, direct_source: false, no_verify: false)
54
+ def initialize(source, options = {})
55
+ options = { direct_source: false, no_verify: false }.merge(options)
56
+ direct_source = options[:direct_source]
57
+ no_verify = options[:no_verify]
58
+
55
59
  if source.is_a?(File)
56
60
  source = source.path
57
61
  end
@@ -425,7 +425,11 @@ module OrigenTesters
425
425
  flag[0] = ''
426
426
  flag
427
427
  else
428
- flag.downcase
428
+ if tester.literal_enables
429
+ flag
430
+ else
431
+ flag.downcase
432
+ end
429
433
  end
430
434
  end
431
435
 
@@ -23,12 +23,17 @@ module OrigenTesters
23
23
  attr_accessor :min_repeat_loop
24
24
  alias_method :min_repeat_count, :min_repeat_loop
25
25
  alias_method :min_repeat_count=, :min_repeat_loop=
26
+
27
+ # Control literal flag definitions
28
+ attr_accessor :literal_flags # whether flags should be exactly as indicated
29
+ attr_accessor :literal_enables # whether enables should be exactly as indicated
30
+
26
31
  # NOTE: DO NOT USE THIS CLASS DIRECTLY ONLY USED AS PARENT FOR
27
32
  # DESIRED TESTER CLASS
28
33
 
29
34
  # Returns a new IGXLBasedTester instance, normally there would only ever be one of these
30
35
  # assigned to the global variable such as $tester by your target.
31
- def initialize
36
+ def initialize(options = {})
32
37
  @unique_counter = 0
33
38
  @counter_lsb_bits = 0
34
39
  @counter_msb_bits = 0
@@ -64,6 +69,13 @@ module OrigenTesters
64
69
  @overlay_history = {} # used to track labels, subroutines, digsrc pins used etc
65
70
  @overlay_subr = nil
66
71
  @capture_history = {}
72
+
73
+ if options[:literal_flags]
74
+ @literal_flags = true
75
+ end
76
+ if options[:literal_enables]
77
+ @literal_enables = true
78
+ end
67
79
  end
68
80
 
69
81
  def igxl_based?
@@ -26,8 +26,8 @@ module OrigenTesters
26
26
 
27
27
  # Returns a new J750 instance, normally there would only ever be one of these
28
28
  # assigned to the global variable such as $tester by your target.
29
- def initialize
30
- super
29
+ def initialize(options = {})
30
+ super(options)
31
31
  @pipeline_depth = 34 # for extended mode is vectors, for normal mode is vector pairs (54 for J750Ex)
32
32
  @use_hv_pin = false # allows to use high voltage for a pin for all patterns
33
33
  @software_version = '3.50.40'
@@ -14,8 +14,8 @@ module OrigenTesters
14
14
  class J750_HPT < J750
15
15
  require 'origen_testers/igxl_based_tester/j750_hpt/generator.rb'
16
16
 
17
- def initialize
18
- super
17
+ def initialize(options = {})
18
+ super(options)
19
19
  @@hpt_mode = true
20
20
  @drive_hi_state = '.1'
21
21
  @drive_lo_state = '.0'
@@ -4,6 +4,10 @@ module OrigenTesters
4
4
  class UltraFLEX < Base
5
5
  autoload :Generator, 'origen_testers/igxl_based_tester/ultraflex/generator.rb'
6
6
 
7
+ # Read or update the digital instrument
8
+ # Ex: tester.digital_instrument = 'hsdmq'
9
+ attr_accessor :digital_instrument
10
+
7
11
  # Tester model to generate .atp patterns for the Teradyne UltraFLEX
8
12
  #
9
13
  # == Basic Usage
@@ -18,8 +22,9 @@ module OrigenTesters
18
22
 
19
23
  # Returns a new UltraFLEX instance, normally there would only ever be one of these
20
24
  # assigned to the global variable such as $tester by your target.
21
- def initialize
22
- super
25
+ def initialize(options = {})
26
+ super(options)
27
+ options = { digital_instrument: 'hsdm' }.merge(options)
23
28
  @pipeline_depth = 255 # for single mode
24
29
  @software_version = '8.10.10'
25
30
  @name = 'ultraflex'
@@ -36,7 +41,7 @@ module OrigenTesters
36
41
  # this handled in pattern_header below
37
42
  @min_pattern_vectors = (@opcode_mode == :single) ? 64 : 128
38
43
 
39
- @digital_instrument = 'hsdm' # 'hsdm' for HSD1000 and UP800, ok with UP1600 though
44
+ @digital_instrument = options[:digital_instrument] # 'hsdm' for HSD1000 and UP800, ok with UP1600 though
40
45
 
41
46
  @capture_state = 'V' # STV requires valid 'V' expect data
42
47
 
@@ -27,6 +27,10 @@ module OrigenTesters
27
27
  alias_method :min_repeat_count, :min_repeat_loop
28
28
  alias_method :min_repeat_count=, :min_repeat_loop=
29
29
 
30
+ # Control literal flag definitions
31
+ attr_accessor :literal_flags # whether flags should be exactly as indicated
32
+ attr_accessor :literal_enables # whether enables should be exactly as indicated
33
+
30
34
  # permit option to generate multiport type patterns
31
35
  # and use multiport type code
32
36
  attr_accessor :multiport
@@ -140,6 +144,13 @@ module OrigenTesters
140
144
  @create_limits_file = false
141
145
  end
142
146
  end
147
+ if options[:literal_flags]
148
+ @literal_flags = true
149
+ end
150
+ if options[:literal_enables]
151
+ @literal_enables = true
152
+ end
153
+
143
154
  @package_namespace = options.delete(:package_namespace)
144
155
  self.limitfile_test_modes = options[:limitfile_test_modes] || options[:limitsfile_test_modes]
145
156
  self.force_pass_on_continue = options[:force_pass_on_continue]
@@ -0,0 +1,3 @@
1
+ Pattern.create do
2
+ tester.digital_instrument = 'hsdp' if tester.respond_to?(:digital_instrument)
3
+ end
@@ -0,0 +1,139 @@
1
+ # Flow to exercise the Flow Control API related to using exact literal value of flag (no lowercase or cleanup) as
2
+ # controlled at tester API level
3
+ #
4
+ # Some of the other flows also cover the flow control API and those tests are used
5
+ # to guarantee that the test ID references work when sub-flows are involved.
6
+ # This flow provides a full checkout of all flow control methods.
7
+ Flow.create interface: 'OrigenTesters::Test::Interface', flow_name: "Flow Control Flag/Enable Literal Testing" do
8
+ flow.flow_description = 'Flow to exercise the Flow Control API' if tester.v93k?
9
+
10
+ self.resources_filename = 'flow_control'
11
+
12
+ log "Test that if_failed works using Literal"
13
+ func :read1, id: :Test__Flag1, bin: 10, number: 50000
14
+ func :erase1, if_failed: :Test__Flag1, bin: 12, number: 50010
15
+
16
+ log "Test the block form of if_failed"
17
+ func :read2, id: :Test__Flag2, bin: 10, number: 50020
18
+ if_failed :Test__Flag2 do
19
+ func :erase2, number: 50030
20
+ func :erase2, number: 50040
21
+ end
22
+
23
+ log "Test that if_passed works"
24
+ func :read1, id: :Test__Flag3, bin: 10, number: 50050
25
+ func :pgm1, if_passed: :Test__Flag3, number: 50060
26
+
27
+ log "Test the block form of if_passed"
28
+ func :read2, id: :Test__Flag4, bin: 10, number: 50070
29
+ if_passed :Test__Flag4 do
30
+ func :pgm1, number: 50080
31
+ func :pgm1, number: 50090
32
+ end
33
+
34
+ log "Test that if_ran works"
35
+ func :pgm, id: :Test__Flag5, bin: 10, number: 50100
36
+ func :read0, if_ran: :Test__Flag5, number: 50110
37
+
38
+ log "Test the block form of if_ran"
39
+ func :pgm, id: :Test__Flag6, bin: 10, number: 50120
40
+ if_ran :Test__Flag6 do
41
+ func :read0, number: 50130
42
+ func :read0, number: 50140
43
+ end
44
+
45
+ log "Test that unless_ran works"
46
+ func :pgm, id: :Test__Flag7, bin: 10, number: 50150
47
+ func :read0, unless_ran: :Test__Flag7, number: 50160
48
+
49
+ log "Test the block form of unless_ran"
50
+ func :pgm, id: :Test__Flag8, bin: 10, number: 50170
51
+ unless_ran :Test__Flag8 do
52
+ func :read0, number: 50180
53
+ func :read0, number: 50190
54
+ end
55
+
56
+ log "Test that if_enable works"
57
+ func :extra_test, if_enable: :Extras__123, number: 50270
58
+
59
+ log "Test the block form of if_enable"
60
+ if_enable :Cz__123 do
61
+ func :cz_test1, number: 50280
62
+ func :cz_test2, number: 50290
63
+ end
64
+
65
+ log "Test that unless_enable works"
66
+ func :long_test, unless_enable: :Quick__123, number: 50300
67
+
68
+ log "Test the block form of unless_enable"
69
+ unless_enable :Quick__123 do
70
+ func :long_test1, number: 50310
71
+ func :long_test2, number: 50320
72
+ end
73
+
74
+ log "Test that if_any_failed works"
75
+ func :test1, id: :iFA__1, number: 50330
76
+ func :test2, id: :iFA__2, number: 50340
77
+ func :test3, if_any_failed: [:iFA__1, :iFA__2], number: 50350
78
+
79
+ log "Test the block form of if_any_failed"
80
+ func :test1, id: :OOF__Passcode1, number: 50360
81
+ func :test2, id: :OOF__Passcode2, number: 50370
82
+ if_any_failed :OOF__Passcode1, :OOF__Passcode2 do
83
+ func :test3, number: 50380
84
+ func :test4, number: 50390
85
+ end
86
+
87
+ log "Test that if_all_failed works"
88
+ func :test1, id: :iFall__1, number: 50400
89
+ func :test2, id: :iFall__2, number: 50410
90
+ func :test3, if_all_failed: [:iFall__1, :iFall__2], number: 50420
91
+
92
+ log "Test the block form of if_all_failed"
93
+ func :test1, id: :iFall__B1, number: 50430
94
+ func :test2, id: :iFall__B2, number: 50440
95
+ if_all_failed [:iFall__B1, :iFall__B2] do
96
+ func :test3, number: 50450
97
+ func :test4, number: 50460
98
+ end
99
+
100
+ log "Test that if_any_passed works"
101
+ func :test1, id: :if__AP1, number: 50470
102
+ func :test2, id: :if__AP2, number: 50480
103
+ func :test3, if_any_passed: [:if__AP1, :if__AP2], number: 50490
104
+
105
+ log "Test the block form of if_any_passed"
106
+ func :test1, id: :if__APB1, number: 50500
107
+ func :test2, id: :if__APB2, number: 50510
108
+ if_any_passed :if__APB1, :if__APB2 do
109
+ func :test3, number: 50520
110
+ func :test4, number: 50530
111
+ end
112
+
113
+ log "Test that if_all_passed works"
114
+ func :test1, id: :iFall__P1, number: 50540
115
+ func :test2, id: :iFall__P2, number: 50550
116
+ func :test3, if_all_passed: [:iFall__P1, :iFall__P2], number: 50560
117
+
118
+ log "Test the block form of if_all_passed"
119
+ func :test1, id: :iFall__PB1, number: 50570
120
+ func :test2, id: :iFall__PB2, number: 50580
121
+ if_all_passed :iFall__PB1, :iFall__PB2 do
122
+ func :test3, number: 50590
123
+ func :test4, number: 50600
124
+ end
125
+
126
+ log "Test that group-level dependencies work"
127
+ group "grp1", id: :Group__1 do
128
+ func :grp1_test1, bin: 5, number: 50610
129
+ func :grp1_test2, bin: 5, number: 50620
130
+ func :grp1_test3, bin: 5, number: 50630
131
+ end
132
+
133
+ group "grp2", if_failed: :Group__1 do
134
+ func :grp2_test1, bin: 5, number: 50640
135
+ func :grp2_test2, bin: 5, number: 50650
136
+ func :grp2_test3, bin: 5, number: 50660
137
+ end
138
+
139
+ end
@@ -27,4 +27,16 @@ for a given pin.
27
27
  # Overlay operations can happen after this point
28
28
  ~~~
29
29
 
30
+ ### Digital Instrument
31
+
32
+ The default digital instrument used is hsdm. This can be changed with either a create option or through an accessor:
33
+
34
+ ~~~ruby
35
+ # Instantiate with a different digital instrument
36
+ OrigenTesters::UltraFLEX.new(digital_instrument: 'hsdmq')
37
+
38
+ # set the digital instrument after instantiation
39
+ tester.digital_instrument = 'hsdmq'
40
+ ~~~
41
+
30
42
  % 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.49.3
4
+ version: 0.51.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: 2021-09-28 00:00:00.000000000 Z
11
+ date: 2022-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: origen
@@ -146,16 +146,16 @@ dependencies:
146
146
  name: sexpistol
147
147
  requirement: !ruby/object:Gem::Requirement
148
148
  requirements:
149
- - - "~>"
149
+ - - '='
150
150
  - !ruby/object:Gem::Version
151
- version: '0.0'
151
+ version: 0.0.7
152
152
  type: :runtime
153
153
  prerelease: false
154
154
  version_requirements: !ruby/object:Gem::Requirement
155
155
  requirements:
156
- - - "~>"
156
+ - - '='
157
157
  - !ruby/object:Gem::Version
158
- version: '0.0'
158
+ version: 0.0.7
159
159
  description:
160
160
  email:
161
161
  - stephen.f.mcginty@gmail.com
@@ -516,6 +516,7 @@ files:
516
516
  - pattern/tester_overlay.rb
517
517
  - pattern/tester_overlay_no_start.rb
518
518
  - pattern/tester_store.rb
519
+ - pattern/uflex_digital_instrument.rb
519
520
  - program/_additional_erase.rb
520
521
  - program/_efa_resources.rb
521
522
  - program/_erase.rb
@@ -531,6 +532,7 @@ files:
531
532
  - program/custom_tests.rb
532
533
  - program/flow_control.rb
533
534
  - program/flow_control_flag_bug.rb
535
+ - program/flow_control_literals.rb
534
536
  - program/prb1.rb
535
537
  - program/prb1_resources.rb
536
538
  - program/prb2.rb
@@ -599,7 +601,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
599
601
  - !ruby/object:Gem::Version
600
602
  version: '0'
601
603
  requirements: []
602
- rubygems_version: 3.0.1
604
+ rubygems_version: 3.1.6
603
605
  signing_key:
604
606
  specification_version: 4
605
607
  summary: This plugin provides Origen tester models to drive ATE type testers like