origen_testers 0.9.6 → 0.9.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/config/version.rb +1 -1
- data/lib/origen_testers/igxl_based_tester/base.rb +6 -2
- data/lib/origen_testers/igxl_based_tester/j750.rb +4 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex.rb +36 -1
- data/lib/origen_testers/test/dut.rb +39 -0
- data/pattern/read_write_reg.rb +9 -0
- data/pattern/subroutines.rb +6 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ca5ef883e61569b03873dd4ef28d2462620b5c67
|
4
|
+
data.tar.gz: d0478e7f02690978ca429b6a77a30b40bde21f73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c583d05f0ab49d7f525a13b24a38e632a00a16f0e973058f331716f369a17bd0c07af6b574ffefdf387431fa33359c3f005abb762a1adb746a8327452496ba4
|
7
|
+
data.tar.gz: 16230dd1ed48febb08557e476463af6893b149b33391ff000e2c41c84c3451beb3982a85cc46c4b38bdbc69184d2ac5b17fe631269e940d2cd050184fa26a4f0
|
data/config/version.rb
CHANGED
@@ -331,7 +331,11 @@ module OrigenTesters
|
|
331
331
|
# $tester.end_subroutine
|
332
332
|
def start_subroutine(name, options = {})
|
333
333
|
local_subroutines << name.to_s.chomp unless local_subroutines.include?(name.to_s.chomp) || @inhibit_vectors
|
334
|
-
|
334
|
+
if $tester.ultraflex? && (name =~ /keep_?alive/ || options[:keep_alive])
|
335
|
+
microcode "keepalive subr #{name}:"
|
336
|
+
else
|
337
|
+
microcode "global subr #{name}:"
|
338
|
+
end
|
335
339
|
end
|
336
340
|
|
337
341
|
# End a subroutine.
|
@@ -727,7 +731,7 @@ module OrigenTesters
|
|
727
731
|
$tester.align_to_last
|
728
732
|
# cycle(:microcode => "#{$dut.end_of_pattern_label}:") if $dut.end_of_pattern_label
|
729
733
|
if options[:end_in_ka]
|
730
|
-
|
734
|
+
keep_alive(options)
|
731
735
|
else
|
732
736
|
if options[:end_with_halt]
|
733
737
|
$tester.cycle microcode: 'halt'
|
@@ -259,6 +259,10 @@ module OrigenTesters
|
|
259
259
|
@unique_counter += 1 # Increment so a different label will be applied if another
|
260
260
|
# handshake is called in the same pattern
|
261
261
|
end
|
262
|
+
|
263
|
+
def keep_alive
|
264
|
+
$tester.cycle microcode: "#{@microcode[:keepalive]}"
|
265
|
+
end
|
262
266
|
end
|
263
267
|
end
|
264
268
|
J750 = IGXLBasedTester::J750
|
@@ -472,7 +472,22 @@ module OrigenTesters
|
|
472
472
|
cycle(microcode: "if (branch_expr) jump block_#{i}_notyet_matched_#{@unique_counter}")
|
473
473
|
cc 'Match found'
|
474
474
|
cycle(microcode: 'pop_loop')
|
475
|
-
|
475
|
+
if options[:on_block_match_goto]
|
476
|
+
if options[:on_block_match_goto].is_a?(Hash)
|
477
|
+
if options[:on_block_match_goto][i]
|
478
|
+
custom_jump = options[:on_block_match_goto][i]
|
479
|
+
else
|
480
|
+
custom_jump = nil
|
481
|
+
end
|
482
|
+
else
|
483
|
+
custom_jump = options[:on_block_match_goto]
|
484
|
+
end
|
485
|
+
end
|
486
|
+
if custom_jump
|
487
|
+
cycle(microcode: "jump #{custom_jump}")
|
488
|
+
else
|
489
|
+
cycle(microcode: "jump match_loop_end_#{@unique_counter}")
|
490
|
+
end
|
476
491
|
cc 'Match not yet found'
|
477
492
|
cycle(microcode: "block_#{i}_notyet_matched_#{@unique_counter}:")
|
478
493
|
end
|
@@ -524,6 +539,12 @@ module OrigenTesters
|
|
524
539
|
condition.call
|
525
540
|
end
|
526
541
|
end
|
542
|
+
if options[:on_timeout_goto]
|
543
|
+
cycle(microcode: "jump #{options[:on_timeout_goto]}")
|
544
|
+
else
|
545
|
+
cycle(microcode: "jump match_loop_end_#{@unique_counter}")
|
546
|
+
end
|
547
|
+
cycle(microcode: "match_loop_end_#{@unique_counter}:")
|
527
548
|
|
528
549
|
@unique_counter += 1 # Increment so a different label will be applied if another
|
529
550
|
# handshake is called in the same pattern
|
@@ -558,6 +579,20 @@ module OrigenTesters
|
|
558
579
|
# handshake is called in the same pattern
|
559
580
|
end
|
560
581
|
|
582
|
+
def keep_alive(options = {})
|
583
|
+
if options[:subroutine_pat]
|
584
|
+
cycle(microcode: 'clr_subr')
|
585
|
+
cycle(microcode: "#{@microcode[:enable]} (#{@flags[3]})")
|
586
|
+
cycle(microcode: "#{@microcode[:set_flag]} (#{@flags[3]})")
|
587
|
+
cycle(microcode: "loop_here_#{@unique_counter}: if (branch_expr) jump loop_here_#{@unique_counter}")
|
588
|
+
cycle
|
589
|
+
@unique_counter += 1 # Increment so a different label will be applied if another
|
590
|
+
else
|
591
|
+
$tester.cycle
|
592
|
+
call_subroutine('keep_alive')
|
593
|
+
end
|
594
|
+
end
|
595
|
+
|
561
596
|
# Capture a vector to the tester HRAM.
|
562
597
|
#
|
563
598
|
# This method applys a store vector (stv) opcode to the previous vector, note that is does
|
@@ -137,6 +137,27 @@ module OrigenTesters
|
|
137
137
|
force_fail_on_timeout: true,
|
138
138
|
clr_fail_post_match: true,
|
139
139
|
manual_stop: true)
|
140
|
+
elsif options[:type] == :match_2pins_custom_jump
|
141
|
+
# Match on TDO pin state
|
142
|
+
$tester.wait(match: true,
|
143
|
+
pin: pin(:tdo),
|
144
|
+
state: :high,
|
145
|
+
pin2: pin(:tms),
|
146
|
+
state2: :high,
|
147
|
+
time_in_us: options[:delay_in_us],
|
148
|
+
on_pin_match_goto: { 0 => 'no_fails_found' },
|
149
|
+
on_timeout_goto: 'no_fails_found',
|
150
|
+
global_loops: true,
|
151
|
+
check_for_fails: true,
|
152
|
+
force_fail_on_timeout: true,
|
153
|
+
clr_fail_post_match: true,
|
154
|
+
manual_stop: true)
|
155
|
+
$tester.cycle
|
156
|
+
$tester.set_code(200)
|
157
|
+
$tester.branch('match_done')
|
158
|
+
$tester.label('no_fails_found')
|
159
|
+
$tester.set_code(201)
|
160
|
+
$tester.label('match_done')
|
140
161
|
elsif options[:type] == :multiple_entries
|
141
162
|
# Match on TDO pin state, with multiple subr entry points
|
142
163
|
$tester.wait(match: true,
|
@@ -179,6 +200,24 @@ module OrigenTesters
|
|
179
200
|
end
|
180
201
|
end
|
181
202
|
|
203
|
+
def keepalive(options = {})
|
204
|
+
options = {
|
205
|
+
define: false, # whether to define subr or call it
|
206
|
+
allow_subroutine: false,
|
207
|
+
subroutine_pat: true
|
208
|
+
}.merge(options)
|
209
|
+
|
210
|
+
if options[:define]
|
211
|
+
$tester.start_subroutine('keep_alive')
|
212
|
+
$tester.keep_alive(options)
|
213
|
+
$tester.end_subroutine
|
214
|
+
else
|
215
|
+
$tester.cycle
|
216
|
+
$tester.call_subroutine('keep_alive')
|
217
|
+
end
|
218
|
+
end
|
219
|
+
alias_method :keep_alive, :keepalive
|
220
|
+
|
182
221
|
def digsrc_overlay(options = {})
|
183
222
|
options = { define: false, # whether to define subr or call it
|
184
223
|
subr_name: false, # default use match type as subr name
|
data/pattern/read_write_reg.rb
CHANGED
@@ -49,10 +49,19 @@ Pattern.create do
|
|
49
49
|
ss 'Call match_2pins subroutine'
|
50
50
|
$dut.match(:type => :match_2pins)
|
51
51
|
|
52
|
+
ss 'Call match_2pins custom_jump subroutine'
|
53
|
+
$dut.match(:type => :match_2pins_custom_jump)
|
54
|
+
|
52
55
|
ss 'Call match_done subroutine'
|
53
56
|
$dut.match(:type => :match_done)
|
54
57
|
|
55
58
|
ss 'Call handshake subroutine'
|
56
59
|
$dut.handshake
|
57
60
|
|
61
|
+
# UltraFlex call a keep alive as a subroutine
|
62
|
+
if $tester.ultraflex?
|
63
|
+
ss 'Call keep_alive subroutine'
|
64
|
+
$dut.keep_alive
|
65
|
+
end
|
66
|
+
|
58
67
|
end
|
data/pattern/subroutines.rb
CHANGED
@@ -30,6 +30,9 @@ unless $tester.v93k?
|
|
30
30
|
# Define match loop with multiple entries
|
31
31
|
$dut.match(:subr_name => 'match_done6', :define => true, :type => :multiple_entries, :delay_in_us => 15_000_000)
|
32
32
|
|
33
|
+
# Define match loop with custom jump
|
34
|
+
$dut.match(:define => true, :type => :match_2pins_custom_jump)
|
35
|
+
|
33
36
|
# Define handshake subr
|
34
37
|
$dut.handshake(:define => true)
|
35
38
|
|
@@ -40,13 +43,15 @@ unless $tester.v93k?
|
|
40
43
|
# Define digsrc_overlay subr
|
41
44
|
$dut.digsrc_overlay(:subr_name => 'digsrc_overlay', :define => true, overlay_cycle_num: 64)
|
42
45
|
|
46
|
+
# test out UF keep_alive subroutine capability
|
47
|
+
$dut.keepalive(define: true)
|
48
|
+
|
43
49
|
# test out single module subroutine capability, integrated with other normal subroutines
|
44
50
|
# only for UltraFLEX
|
45
51
|
$dut.execute(define: true, name: 'overlaysub1', onemodsub: true )
|
46
52
|
$dut.execute(define: true, name: 'overlaysub2', onemodsub: true )
|
47
53
|
$dut.execute(define: true, name: 'overlaysub3', onemodsub: true )
|
48
54
|
$dut.execute(define: true, name: 'overlaysub4', onemodsub: true )
|
49
|
-
|
50
55
|
end
|
51
56
|
end
|
52
57
|
|
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.9.
|
4
|
+
version: 0.9.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen McGinty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|
@@ -342,7 +342,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
342
342
|
version: 1.8.11
|
343
343
|
requirements: []
|
344
344
|
rubyforge_project:
|
345
|
-
rubygems_version: 2.
|
345
|
+
rubygems_version: 2.6.7
|
346
346
|
signing_key:
|
347
347
|
specification_version: 4
|
348
348
|
summary: This plugin provides Origen tester models to drive ATE type testers like
|