origen_testers 0.49.3 → 0.51.0

Sign up to get free protection for your applications and to get access to all the features.
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