origen_testers 0.48.2 → 0.49.2
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 +1 -1
- data/lib/origen_testers/api.rb +10 -0
- data/lib/origen_testers/atp/flow.rb +24 -6
- data/lib/origen_testers/flow.rb +5 -1
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +2 -1
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +1 -0
- data/lib/origen_testers/labview_based_tester/pxie6570.rb +1 -1
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +35 -0
- data/lib/origen_testers/smartest_based_tester/base/limits_file.rb +12 -1
- data/lib/origen_testers/smartest_based_tester/base.rb +9 -1
- data/program/flow_control.rb +33 -1
- data/program/flow_control_flag_bug.rb +25 -0
- data/program/prb1.rb +4 -0
- data/templates/origen_guides/program/flowapi.md.erb +33 -0
- metadata +17 -3
- data/templates/origen_guides/pattern/ultraflex.md.erb~ +0 -30
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ea968535c042745fa87c069932af23a54532acc9a0e22583a38ae58e25b2b87
|
4
|
+
data.tar.gz: aec4d331fa4a4933c31228500d450846dbdd954f5e44087d727b752ae51df952
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 119ed16f37c02c94dbe2648df2019275729cb3827dfcebedff30d1beacd5b2ff329edc70eaeafed1f3ea22cfab234f8b2a1b5c46a0b9673ebb53c8c1842b8a63
|
7
|
+
data.tar.gz: 00e51035094d97540785dae4ca1ada4e229bbe5b9f89d7183d66feb32a4ec8e7afac6c22c62133cf30c502e851b89167be3cb28b08410bbcf9ff2c48bfa1ef4d
|
data/config/version.rb
CHANGED
data/lib/origen_testers/api.rb
CHANGED
@@ -11,6 +11,7 @@ module OrigenTesters
|
|
11
11
|
attr_accessor :includes
|
12
12
|
attr_accessor :comment_level
|
13
13
|
attr_accessor :generating
|
14
|
+
|
14
15
|
# Get/Set the overlay style
|
15
16
|
#
|
16
17
|
# This method changes the way overlay is handled.
|
@@ -19,6 +20,7 @@ module OrigenTesters
|
|
19
20
|
# @example
|
20
21
|
# tester.overlay_style = :label
|
21
22
|
attr_accessor :overlay_style
|
23
|
+
|
22
24
|
# Get/Set the capture style
|
23
25
|
#
|
24
26
|
# This method changes the way tester.store() implements the store
|
@@ -49,10 +51,18 @@ module OrigenTesters
|
|
49
51
|
end
|
50
52
|
alias_method :pattern_extension, :pat_extension
|
51
53
|
|
54
|
+
def comment_char=(val)
|
55
|
+
@comment_char = val
|
56
|
+
end
|
57
|
+
|
52
58
|
def comment_char
|
53
59
|
@comment_char || '//'
|
54
60
|
end
|
55
61
|
|
62
|
+
def program_comment_char=(val)
|
63
|
+
@program_comment_char = val
|
64
|
+
end
|
65
|
+
|
56
66
|
def program_comment_char
|
57
67
|
@program_comment_char || comment_char
|
58
68
|
end
|
@@ -439,6 +439,8 @@ module OrigenTesters::ATP
|
|
439
439
|
children << on_pass(options[:on_pass]) if options[:on_pass]
|
440
440
|
end
|
441
441
|
|
442
|
+
children << priority(options[:priority]) if options[:priority]
|
443
|
+
|
442
444
|
save_conditions
|
443
445
|
n(:test, children)
|
444
446
|
end
|
@@ -581,14 +583,26 @@ module OrigenTesters::ATP
|
|
581
583
|
end
|
582
584
|
|
583
585
|
def loop(*args, &block)
|
584
|
-
unless args[0].keys.include?(:from) && args[0].keys.include?(:to)
|
585
|
-
fail 'Loop must specify :from, :to
|
586
|
+
unless args[0].keys.include?(:from) && args[0].keys.include?(:to)
|
587
|
+
fail 'Loop must specify :from, :to'
|
588
|
+
end
|
589
|
+
# assume 1 if :step not provided
|
590
|
+
unless args[0].keys.include?(:step)
|
591
|
+
args[0][:step] = 1
|
592
|
+
end
|
593
|
+
# assume 1 if :test_num_inc not provided
|
594
|
+
unless args[0].keys.include?(:test_num_inc)
|
595
|
+
args[0][:test_num_inc] = 1
|
596
|
+
end
|
597
|
+
# Add node for set of flag to be used for loop
|
598
|
+
unless args[0][:var].nil?
|
599
|
+
set(args[0][:var], 0)
|
586
600
|
end
|
587
601
|
extract_meta!(options) do
|
588
602
|
apply_conditions(options) do
|
589
|
-
# always pass
|
590
|
-
#
|
591
|
-
params = [args[0][:from], args[0][:to], args[0][:step], args[0][:var]]
|
603
|
+
# always pass 5-element array to loop node to simplify downstream parser
|
604
|
+
# element, 'var', will be nil if not specified by loop call
|
605
|
+
params = [args[0][:from], args[0][:to], args[0][:step], args[0][:var], args[0][:test_num_inc]]
|
592
606
|
|
593
607
|
node = n(:loop, params)
|
594
608
|
node = append_to(node) { block.call }
|
@@ -601,7 +615,7 @@ module OrigenTesters::ATP
|
|
601
615
|
define_method method do |*args, &block|
|
602
616
|
options = args.pop if args.last.is_a?(Hash)
|
603
617
|
unless args.size == 2
|
604
|
-
fail "Format for relational operation must match: ':<
|
618
|
+
fail "Format for relational operation must match: ':<operator>(var1, var2)'"
|
605
619
|
end
|
606
620
|
n2(method.to_sym, args[0], args[1])
|
607
621
|
end unless method_defined?(method)
|
@@ -810,6 +824,10 @@ module OrigenTesters::ATP
|
|
810
824
|
n1(:id, name)
|
811
825
|
end
|
812
826
|
|
827
|
+
def priority(name)
|
828
|
+
n1(:priority, name)
|
829
|
+
end
|
830
|
+
|
813
831
|
def on_fail(options = {})
|
814
832
|
if options.is_a?(Proc)
|
815
833
|
node = n0(:on_fail)
|
data/lib/origen_testers/flow.rb
CHANGED
@@ -205,6 +205,8 @@ module OrigenTesters
|
|
205
205
|
def active_description
|
206
206
|
flow_file = OrigenTesters::Flow.callstack.last
|
207
207
|
called_from = caller.find { |l| l =~ /^#{flow_file}:.*/ }
|
208
|
+
# Windows fix - prevent the drive letter in the file name from changing the index of the line_no below
|
209
|
+
called_from.gsub!(flow_file, '')
|
208
210
|
desc = nil
|
209
211
|
if called_from
|
210
212
|
called_from = called_from.split(':')
|
@@ -257,8 +259,10 @@ module OrigenTesters
|
|
257
259
|
flow_file = OrigenTesters::Flow.callstack.last
|
258
260
|
called_from = caller.find { |l| l =~ /^#{flow_file}:.*/ }
|
259
261
|
if called_from
|
262
|
+
# Splitting on ':' when file names are included will yield a different index for everything in Windows
|
263
|
+
called_from.gsub!(flow_file, '')
|
260
264
|
called_from = called_from.split(':')
|
261
|
-
options[:source_file] = called_from[0]
|
265
|
+
options[:source_file] = flow_file # called_from[0]
|
262
266
|
options[:source_line_number] = called_from[1].to_i
|
263
267
|
end
|
264
268
|
end
|
@@ -23,6 +23,7 @@ module OrigenTesters
|
|
23
23
|
limit.type = :use_limit
|
24
24
|
limit.opcode = 'Use-Limit'
|
25
25
|
limit.parameter = nil
|
26
|
+
limit.tnum = nil # Don't duplate test numbers, allow auto-increment by leaving blank
|
26
27
|
if ins.respond_to?(:lo_limit)
|
27
28
|
lo = ins.lo_limit
|
28
29
|
hi = ins.hi_limit
|
@@ -36,7 +36,7 @@ module OrigenTesters
|
|
36
36
|
unless options[:subroutine_pat]
|
37
37
|
stage.with_bank(:body) do
|
38
38
|
# find the first vector
|
39
|
-
stage.bank.delete_at(0) until stage.bank[0].is_a?(OrigenTesters::Vector)
|
39
|
+
stage.bank.delete_at(0) until stage.bank[0].is_a?(OrigenTesters::Vector) || stage.bank.empty?
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -462,6 +462,41 @@ module OrigenTesters
|
|
462
462
|
alias_method :on_whenever_any, :on_whenever
|
463
463
|
alias_method :on_whenever_all, :on_whenever
|
464
464
|
|
465
|
+
def on_loop(node, options = {})
|
466
|
+
# TODO: don't have the SMT8 way to do this yet
|
467
|
+
if smt8?
|
468
|
+
fail 'Flow loop control not yet supported for SMT8!'
|
469
|
+
end
|
470
|
+
start = node.to_a[0]
|
471
|
+
stop = node.to_a[1]
|
472
|
+
step = node.to_a[2]
|
473
|
+
if node.to_a[3].nil?
|
474
|
+
fail 'You must supply a loop variable name!'
|
475
|
+
else
|
476
|
+
var = generate_flag_name(node.to_a[3])
|
477
|
+
end
|
478
|
+
test_num_inc = node.to_a[4]
|
479
|
+
unless smt8?
|
480
|
+
var = "@#{var}"
|
481
|
+
end
|
482
|
+
num = (stop - start) / step + 1
|
483
|
+
# Handle increment/decrement
|
484
|
+
if step < 0
|
485
|
+
compare = '>'
|
486
|
+
incdec = "- #{step * -1}"
|
487
|
+
else
|
488
|
+
compare = '<'
|
489
|
+
incdec = "+ #{step}"
|
490
|
+
end
|
491
|
+
line "for #{var} = #{start}; #{var} #{compare} #{stop + step} ; #{var} = #{var} #{incdec}; do"
|
492
|
+
line "test_number_loop_increment = #{test_num_inc}"
|
493
|
+
line '{'
|
494
|
+
@indent += 1
|
495
|
+
process_all(node.children)
|
496
|
+
@indent -= 1
|
497
|
+
line '}'
|
498
|
+
end
|
499
|
+
|
465
500
|
def generate_expr_string(node, options = {})
|
466
501
|
return node unless node.respond_to?(:type)
|
467
502
|
case node.type
|
@@ -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[:priority] = extract_priority(node, o)
|
122
123
|
o[:test_text] = node.find(:test_text).try(:value)
|
123
124
|
if on_fail = node.find(:on_fail)
|
124
125
|
if set_result = on_fail.find(:set_result)
|
@@ -141,7 +142,7 @@ module OrigenTesters
|
|
141
142
|
end
|
142
143
|
if smt8?
|
143
144
|
if o[:bin_s_num]
|
144
|
-
limits_workbook.add_softbin o[:bin_s_num], name: o[:bin_s_name], bin: o[:bin_h_num]
|
145
|
+
limits_workbook.add_softbin o[:bin_s_num], name: o[:bin_s_name], bin: o[:bin_h_num], priority: o[:priority]
|
145
146
|
end
|
146
147
|
if o[:bin_h_num]
|
147
148
|
limits_workbook.add_bin o[:bin_h_num], name: o[:bin_h_name]
|
@@ -217,6 +218,16 @@ module OrigenTesters
|
|
217
218
|
name
|
218
219
|
end
|
219
220
|
|
221
|
+
def extract_priority(node, o)
|
222
|
+
test_obj = node.find(:priority).to_a[0]
|
223
|
+
if test_obj.is_a?(Hash)
|
224
|
+
priority = test_obj['Priority']
|
225
|
+
else
|
226
|
+
priority = test_obj.respond_to?(:priority) ? test_obj.priority : test_obj if test_obj
|
227
|
+
end
|
228
|
+
priority
|
229
|
+
end
|
230
|
+
|
220
231
|
def extract_test_name(node, o)
|
221
232
|
test_obj = node.find(:object).to_a[0]
|
222
233
|
if smt8?
|
@@ -99,8 +99,10 @@ module OrigenTesters
|
|
99
99
|
@min_repeat_loop = 33
|
100
100
|
if smt8?
|
101
101
|
@pat_extension = 'pat'
|
102
|
+
@program_comment_char = ['println', '//']
|
102
103
|
else
|
103
104
|
@pat_extension = 'avc'
|
105
|
+
@program_comment_char = ['print_dl', '//']
|
104
106
|
end
|
105
107
|
@compress = true
|
106
108
|
# @support_repeat_previous = true
|
@@ -115,6 +117,7 @@ module OrigenTesters
|
|
115
117
|
@overlay_style = :subroutine # default to use subroutine for overlay
|
116
118
|
@capture_style = :hram # default to use hram for capture
|
117
119
|
@overlay_subr = nil
|
120
|
+
@overlay_history = {} # used to track labels, subroutines, digsrc pins used etc
|
118
121
|
|
119
122
|
if options[:add_flow_enable]
|
120
123
|
self.add_flow_enable = options[:add_flow_enable]
|
@@ -203,6 +206,12 @@ module OrigenTesters
|
|
203
206
|
when :subroutine, :default
|
204
207
|
subroutine_overlay(overlay_str, options)
|
205
208
|
ovly_style = :subroutine
|
209
|
+
when :label, :global_label
|
210
|
+
options[:dont_compress] = true
|
211
|
+
unless @overlay_history.key?(overlay_str)
|
212
|
+
cc "#{overlay_str}"
|
213
|
+
@overlay_history[overlay_str] = { is_label: true }
|
214
|
+
end
|
206
215
|
when :handshake
|
207
216
|
if @delayed_handshake
|
208
217
|
if @delayed_handshake != overlay_str
|
@@ -458,7 +467,6 @@ module OrigenTesters
|
|
458
467
|
# Ensure the match pins are don't care by default
|
459
468
|
pin.dont_care
|
460
469
|
options[:pin2].dont_care if options[:pin2]
|
461
|
-
|
462
470
|
if !options[:pin2]
|
463
471
|
cc "for the #{pin.name.upcase} pin to go #{state.to_s.upcase}"
|
464
472
|
match_block(timeout_in_cycles, options) do |match_or_conditions, fail_conditions|
|
data/program/flow_control.rb
CHANGED
@@ -254,7 +254,6 @@ Flow.create interface: 'OrigenTesters::Test::Interface', flow_name: "Flow Contro
|
|
254
254
|
enable :nvm_minimum_ft, if_enable: "nvm_minimum_room", if_job: :fr
|
255
255
|
enable :nvm_minimum_ft, if_enable: "nvm_minimum_cold", if_job: :fc
|
256
256
|
disable :nvm_minimum_ft, if_enable: "nvm_minimum_hot", if_job: :fh
|
257
|
-
|
258
257
|
log "Test enable words that wrap a lot of tests"
|
259
258
|
if_enable :word1 do
|
260
259
|
5.times do |i|
|
@@ -340,6 +339,39 @@ Flow.create interface: 'OrigenTesters::Test::Interface', flow_name: "Flow Contro
|
|
340
339
|
func :test36, on_fail: { render: 'multi_bin;' }, if_flag: :my_flag, number: 51570
|
341
340
|
end
|
342
341
|
|
342
|
+
if tester.v93k? && !tester.smt8?
|
343
|
+
log "Tests of flow loop"
|
344
|
+
loop from: 0, to: 5, step: 1, var: '$LOOP_VARIABLE' do
|
345
|
+
func :test_myloop, number: 56000
|
346
|
+
end
|
347
|
+
|
348
|
+
log "Tests of flow loop, no step"
|
349
|
+
loop from: 0, to: 5, var: '$LOOP_VARIABLE' do
|
350
|
+
func :test_myloop2, number: 5610
|
351
|
+
end
|
352
|
+
|
353
|
+
log "Tests of flow loop, non-default test number increment"
|
354
|
+
loop from: 0, to: 5, var: '$LOOP_VARIABLE', test_num_inc: 2 do
|
355
|
+
func :test_myloop3, number: 56200
|
356
|
+
end
|
357
|
+
|
358
|
+
log "Tests of decrementing loop"
|
359
|
+
loop from: 5, to: 2, step: -1, var: '$LOOP_VARIABLE' do
|
360
|
+
func :test_myloop4, number: 56300
|
361
|
+
end
|
362
|
+
|
363
|
+
log "Tests of nested flow loop, depth 3"
|
364
|
+
loop from: 0, to: 9, step: 2, var: '$LOOP_VARIABLE1'do
|
365
|
+
loop from: 1, to: 10, step: 1, var: '$LOOP_VARIABLE2' do
|
366
|
+
loop from: 1, to: 5, step: 1, var: '$LOOP_VARIABLE3' do
|
367
|
+
func :test_myloop5, number: 56400
|
368
|
+
end
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
# Test of skipping variable name not yet ready
|
373
|
+
end
|
374
|
+
|
343
375
|
log 'An optimization test case, this should not generate a flag on V93K'
|
344
376
|
func :test1, id: :t1a, number: 51580
|
345
377
|
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Flow to exercise the Flow Control API
|
2
|
+
#
|
3
|
+
# Some of the other flows also cover the flow control API and those tests are used
|
4
|
+
# to guarantee that the test ID references work when sub-flows are involved.
|
5
|
+
# This flow provides a full checkout of all flow control methods.
|
6
|
+
Flow.create interface: 'OrigenTesters::Test::Interface', flow_name: "Flow Control Testing" do
|
7
|
+
flow.flow_description = 'Flow to exercise the Flow Control API' if tester.v93k?
|
8
|
+
|
9
|
+
self.resources_filename = 'flow_control'
|
10
|
+
|
11
|
+
log "Mixed-case manual flags"
|
12
|
+
test :test1, on_fail: { set_flag: :$My_Mixed_Flag }, continue: true, number: 51420
|
13
|
+
test :test2, if_flag: "$My_Mixed_Flag", number: 51430
|
14
|
+
unless_flag "$My_Mixed_Flag" do
|
15
|
+
test :test3, number: 51440
|
16
|
+
end
|
17
|
+
|
18
|
+
log "Mixed-case manual flags - induce frozen string error"
|
19
|
+
test :test4, on_fail: { set_flag: :$My_Mixed_Flag }, continue: true, number: 51450
|
20
|
+
test :test5, if_flag: "$My_Mixed_Flag", number: 51460
|
21
|
+
unless_flag "$My_Mixed_Flag" do
|
22
|
+
test :test6, number: 51470
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
data/program/prb1.rb
CHANGED
@@ -8,6 +8,10 @@ Flow.create interface: 'OrigenTesters::Test::Interface', flow_description: 'Prob
|
|
8
8
|
self.resources_filename = 'prb1'
|
9
9
|
end
|
10
10
|
|
11
|
+
# Extra log below not in approved/ folder to show that comments are
|
12
|
+
# being skipped correctly during the difference checks
|
13
|
+
log 'PRB1 Test Flow Version 00001 - do not copy me to approved!'
|
14
|
+
|
11
15
|
import 'components/prb1_main'
|
12
16
|
|
13
17
|
import 'test' # import top-level test.rb directly, note that Flow.create options of sub-flow will be ignored!
|
@@ -339,4 +339,37 @@ end
|
|
339
339
|
~~~
|
340
340
|
|
341
341
|
|
342
|
+
#### Flow Loops for V93k (SMT7 only)
|
343
|
+
Use flow loop control to permit re-running tests without using additional sequence labels.
|
344
|
+
|
345
|
+
~~~ruby
|
346
|
+
loop from: 0, to: 5, step: 1, var: '$LOOP_VARIABLE' do
|
347
|
+
func :test_myloop, number: 56000
|
348
|
+
end
|
349
|
+
~~~
|
350
|
+
|
351
|
+
Indicating step value is optional, default is 1.
|
352
|
+
|
353
|
+
These loops can also be nested:
|
354
|
+
~~~ruby
|
355
|
+
loop from: 0, to: 9, step: 2, var: '$LOOP_VARIABLE1'do
|
356
|
+
loop from: 1, to: 10, step: 1, var: '$LOOP_VARIABLE2' do
|
357
|
+
loop from: 1, to: 5, step: 1, var: '$LOOP_VARIABLE3' do
|
358
|
+
func :test_myloop5, number: 56400
|
359
|
+
end
|
360
|
+
end
|
361
|
+
end
|
362
|
+
~~~
|
363
|
+
|
364
|
+
You can also indicate a test number increment if desired (default is 1):
|
365
|
+
~~~ruby
|
366
|
+
loop from: 0, to: 5, var: '$LOOP_VARIABLE', test_num_inc: 2 do
|
367
|
+
func :test_myloop3, number: 56200
|
368
|
+
end
|
369
|
+
~~~
|
370
|
+
|
371
|
+
Decrementing loops, having `from:` value > `to:` value and using negative `step:`, is also supported.
|
372
|
+
|
373
|
+
|
374
|
+
|
342
375
|
% 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.49.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen McGinty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.57.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: dentaku
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: simplecov
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -516,6 +530,7 @@ files:
|
|
516
530
|
- program/components/_temp.rb
|
517
531
|
- program/custom_tests.rb
|
518
532
|
- program/flow_control.rb
|
533
|
+
- program/flow_control_flag_bug.rb
|
519
534
|
- program/prb1.rb
|
520
535
|
- program/prb1_resources.rb
|
521
536
|
- program/prb2.rb
|
@@ -543,7 +558,6 @@ files:
|
|
543
558
|
- templates/origen_guides/pattern/stil.md.erb
|
544
559
|
- templates/origen_guides/pattern/timing.md.erb
|
545
560
|
- templates/origen_guides/pattern/ultraflex.md.erb
|
546
|
-
- templates/origen_guides/pattern/ultraflex.md.erb~
|
547
561
|
- templates/origen_guides/pattern/v93k.md.erb
|
548
562
|
- templates/origen_guides/program/charz.md.erb
|
549
563
|
- templates/origen_guides/program/code.md.erb
|
@@ -1,30 +0,0 @@
|
|
1
|
-
% render "layouts/guides.html" do
|
2
|
-
|
3
|
-
This page will be used to document any UltraFLEX-only APIs related to pattern generation,
|
4
|
-
however the goal is to have as few of these as possible so that Origen pattern source code can re-target
|
5
|
-
automatically to any supported platform.
|
6
|
-
|
7
|
-
There are no significant APIs in this category currently, therefore refer to the
|
8
|
-
[Common Pattern API](<%= path "guides/pattern/common" %>) which can fully target the UltraFLEX.
|
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 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
|
-
|
30
|
-
% end
|