origen_testers 0.5.0 → 0.5.1
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 +120 -4
- data/lib/origen_testers/igxl_based_tester/ultraflex.rb +33 -1
- data/lib/origen_testers/interface.rb +5 -2
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +1 -1
- data/lib/origen_testers/smartest_based_tester/base/test_method.rb +2 -2
- data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +15 -3
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +7 -2
- data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +15 -3
- data/lib/origen_testers/test/dut.rb +48 -0
- data/pattern/subroutines.rb +7 -0
- metadata +4 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ede4a79072352c2cd7d6acaa9fb865179f17316
|
4
|
+
data.tar.gz: 7af62afb233b4363fac108e8ddcbf64f862e33a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 65ef5f42b2f18f4d7b6f5218af23f762eb3d3b1687b635e4e39866e2da8e0d03ac99c5e104c71f9a885e92732fa9cf589462eba8fb00eff6d6c1c2d8643d3e98
|
7
|
+
data.tar.gz: a2086e85641e434028486e4313b01ad4efa37959a36cbda1ff4b00c5aea2017e3ef931e4cde098506994471082bb73dd9a875d84f3fa7b37009cff107d9592ab
|
data/config/version.rb
CHANGED
@@ -43,13 +43,41 @@ module OrigenTesters
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def assign_dc_instr_pins(dc_pins)
|
46
|
-
|
46
|
+
if !dc_pins.is_a?(Array)
|
47
|
+
@dc_pins = [] << dc_pins
|
48
|
+
else
|
49
|
+
@dc_pins = dc_pins
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def assign_digsrc_pins(digsrc_pins)
|
54
|
+
if !digsrc_pins.is_a?(Array)
|
55
|
+
@digsrc_pins = [] << digsrc_pins
|
56
|
+
else
|
57
|
+
@digsrc_pins = digsrc_pins
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def assign_digcap_pins(digcap_pins)
|
62
|
+
if !digcap_pins.is_a?(Array)
|
63
|
+
@digcap_pins = [] << digcap_pins
|
64
|
+
else
|
65
|
+
@digcap_pins = digcap_pins
|
66
|
+
end
|
47
67
|
end
|
48
68
|
|
49
69
|
def get_dc_instr_pins
|
50
70
|
@dc_pins
|
51
71
|
end
|
52
72
|
|
73
|
+
def get_digsrc_pins
|
74
|
+
@digsrc_pins
|
75
|
+
end
|
76
|
+
|
77
|
+
def get_digcap_pins
|
78
|
+
@digcap_pins
|
79
|
+
end
|
80
|
+
|
53
81
|
def flows
|
54
82
|
parser.flows
|
55
83
|
end
|
@@ -489,11 +517,15 @@ module OrigenTesters
|
|
489
517
|
# Take care of any instruments
|
490
518
|
if options[:instruments].length > 0
|
491
519
|
microcode 'instruments = {'
|
492
|
-
options[:instruments].each do |
|
493
|
-
if "#{
|
520
|
+
options[:instruments].each do |pins, instrument|
|
521
|
+
if "#{pins}" == 'nil'
|
494
522
|
microcode " #{instrument};"
|
523
|
+
elsif instrument == 'digsrc'
|
524
|
+
microcode " #{pins}:#{instrument} #{options[:digsrc_width]}:#{options[:digsrc_bit_order]}:#{options[:digsrc_mode]}:format=#{options[:digsrc_format]}:#{options[:digsrc_site_uniqueness]}:#{options[:digsrc_auto_cond]};"
|
525
|
+
elsif instrument == 'digcap'
|
526
|
+
microcode " #{pins}:#{instrument} #{options[:digcap_width]}:#{options[:digcap_bit_order]}:#{options[:digcap_mode]}:format=#{options[:digcap_format]}:data_type=#{options[:digcap_data_type]}:#{options[:digcap_auto_cond]}:#{options[:digcap_auto_trig_enable]}:#{options[:digcap_store_stv]}:#{options[:digcap_receive_data]};"
|
495
527
|
else
|
496
|
-
microcode " #{
|
528
|
+
microcode " #{pins}:#{instrument};"
|
497
529
|
end
|
498
530
|
end
|
499
531
|
microcode '}'
|
@@ -635,6 +667,90 @@ module OrigenTesters
|
|
635
667
|
end
|
636
668
|
end
|
637
669
|
|
670
|
+
# Call this method at the start of any digsrc overlay operations, this method
|
671
|
+
# takes care of all the microcodes and delays that's needed for digsrc overlay
|
672
|
+
# Required arguments:
|
673
|
+
# pins
|
674
|
+
# Optionsal arguments:
|
675
|
+
# options[:dssc_mode] = :single or :dual, anything else wil be
|
676
|
+
# treated as if it's operating in :quad mode
|
677
|
+
def digsrc_start(pins, options = {})
|
678
|
+
options = {
|
679
|
+
dssc_mode: :single # defaults dssc_mode to single mode
|
680
|
+
}.merge(options)
|
681
|
+
if pins.size > 1
|
682
|
+
microcode "((#{format_multiple_instrument_pins(pins)}):DigSrc = Start)"
|
683
|
+
else
|
684
|
+
microcode "((#{pin}):DigSrc = Start)"
|
685
|
+
end
|
686
|
+
if options[:dssc_mode] == :single
|
687
|
+
$tester.cycle(repeat: 145) # minimum of 144 cycles, adding 1 for safey measures
|
688
|
+
elsif options[:dssc_mode] == :dual
|
689
|
+
$tester.cycle(repeat: 289) # minimum of 288 cycles, adding 1 for safety measures
|
690
|
+
else
|
691
|
+
$tester.cycle(repeat: 577) # minimum of 577 cycles, adding 1 for safety measures
|
692
|
+
end
|
693
|
+
end
|
694
|
+
|
695
|
+
# Call this method at the end of each digscr overlay operation to clear the pattern
|
696
|
+
# memory pipeline, so that the pattern is ready to do the next digsrc overlay operation.
|
697
|
+
# Required arguments:
|
698
|
+
# pins
|
699
|
+
def digsrc_stop(pins, options = {})
|
700
|
+
if pins.size > 1
|
701
|
+
microcode "((#{format_multiple_instrument_pins(pins)}):DigSrc = Stop)"
|
702
|
+
else
|
703
|
+
microcode "((#{pins}):DigSrc = Stop)"
|
704
|
+
end
|
705
|
+
end
|
706
|
+
|
707
|
+
# Call this method before each tester cycle to insert the digsrc overlay microcode
|
708
|
+
def digsrc_send(pins)
|
709
|
+
microcode "((#{format_multiple_instrument_pins(pins)}):DigSrc = SEND)"
|
710
|
+
end
|
711
|
+
|
712
|
+
# Call this method before each tester cycle to inser the digcap overlay microcode
|
713
|
+
def digcap_store(pins)
|
714
|
+
microcode "((#{format_multiple_instrument_pins(pins)}):DigCap = STORE)"
|
715
|
+
end
|
716
|
+
|
717
|
+
def apply_digsrc_settings(options = {})
|
718
|
+
options.merge!(digsrc_width: 1) if options[:digsrc_width].nil? # default to digsrc 1
|
719
|
+
options.merge!(digsrc_bit_order: :lsb) if options[:digsrc_bit_order].nil? # default to lsb
|
720
|
+
options.merge!(digsrc_mode: :serial) if options[:digsrc_mode].nil? # default to serial mode
|
721
|
+
options.merge!(digsrc_format: :binary) if options[:digsrc_format].nil? # default to binary
|
722
|
+
options.merge!(digsrc_site_uniqueness: :unique_sites) if options[:digsrc_site_uniqueness].nil? # default to unique sites
|
723
|
+
options.merge!(digsrc_data_type: :default) if options[:digsrc_data_type].nil? # default to default
|
724
|
+
options.merge!(digsrc_auto_cond: :auto_cond_disable) if options[:digsrc_auto_cond].nil? # default to disable
|
725
|
+
@digsrc_settings = options
|
726
|
+
end
|
727
|
+
|
728
|
+
def apply_digcap_settings(options = {})
|
729
|
+
options.merge!(digcap_width: 8) if options[:digcap_width].nil? # default to digcap 8
|
730
|
+
options.merge!(digcap_bit_order: :lsb) if options[:digcap_bit_order].nil? # default to lsb
|
731
|
+
options.merge!(digcap_mode: :serial) if options[:digcap_mode].nil? # default to serial mode
|
732
|
+
options.merge!(digcap_site_uniqueness: :unique_sites) if options[:digcap_site_uniqueness].nil? # default to unique sites
|
733
|
+
options.merge!(digcap_format: :binary) if options[:digcap_format].nil? # default to binary
|
734
|
+
options.merge!(digcap_data_type: :default) if options[:digcap_data_type].nil? # default to default
|
735
|
+
options.merge!(digcap_auto_cond: :auto_cond_disable) if options[:digcap_auto_cond].nil? # default to disable
|
736
|
+
options.merge!(digcap_auto_trig_enable: :auto_trig_disable) if options[:digcap_auto_trig_enable].nil? # default to disable
|
737
|
+
options.merge!(digcap_store_stv: :store_stv_disable) if options[:digcap_store_stv].nil? # default to disable
|
738
|
+
options.merge!(digcap_receive_data: :store_stv_disable) if options[:digcap_receive_data].nil? # default to logic
|
739
|
+
@digcap_settings = options
|
740
|
+
end
|
741
|
+
|
742
|
+
# Call this method if there are more than one pin/pin groups used with an instrument,
|
743
|
+
# this method will format an array of pins into the correct format required by igxl
|
744
|
+
# pattern microcodes.
|
745
|
+
def format_multiple_instrument_pins(pins, options = {})
|
746
|
+
return_value = ''
|
747
|
+
pins.each do |pin|
|
748
|
+
return_value += "#{pin}"
|
749
|
+
return_value += ',' unless pins.last == pin
|
750
|
+
end
|
751
|
+
return_value
|
752
|
+
end
|
753
|
+
|
638
754
|
def mask_fails(setclr)
|
639
755
|
@mask_vector = setclr
|
640
756
|
end
|
@@ -187,6 +187,8 @@ module OrigenTesters
|
|
187
187
|
|
188
188
|
options[:memory_test] = memory_test_en
|
189
189
|
options[:dc_pins] = get_dc_instr_pins
|
190
|
+
options[:digsrc_pins] = get_digsrc_pins
|
191
|
+
options[:digcap_pins] = get_digcap_pins
|
190
192
|
|
191
193
|
if options[:dc_pins]
|
192
194
|
options[:dc_pins].each do |pin|
|
@@ -194,9 +196,39 @@ module OrigenTesters
|
|
194
196
|
end
|
195
197
|
end
|
196
198
|
|
199
|
+
# Syntax for Digital Source
|
200
|
+
# instruments = {
|
201
|
+
# pin-item:digsrc instrument-width: bit-order: instrument-mode:
|
202
|
+
# site-uniqueness: format: auto_cond;
|
203
|
+
# }
|
204
|
+
|
205
|
+
if options[:digsrc_pins]
|
206
|
+
@digsrc_settings.each do |setting_name, setting|
|
207
|
+
options.merge!(setting_name => setting) if options[setting_name].nil?
|
208
|
+
end
|
209
|
+
options[:digsrc_pins].each do |pin|
|
210
|
+
options[:instruments].merge!(pin => 'digsrc')
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
# Syntax for Digital Capture
|
215
|
+
# instruments = {
|
216
|
+
# pin-item:digcap instrument-width: bit-order: instrument-mode:
|
217
|
+
# format: data-type: auto_cond: auto_trig_enable: store_stv: receive_data;
|
218
|
+
# }
|
219
|
+
|
220
|
+
if options[:digcap_pins]
|
221
|
+
@digcap_settings.each do |setting_name, setting|
|
222
|
+
options.merge!(setting_name => setting) if options[setting_name].nil?
|
223
|
+
end
|
224
|
+
options[:digcap_pins].each do |pin|
|
225
|
+
options[:instruments].merge!(pin => 'digcap')
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
197
229
|
# If memory test, then add to instruments hash
|
198
230
|
if options[:memory_test]
|
199
|
-
options[:instruments].merge!('
|
231
|
+
options[:instruments].merge!('nil' => 'mto')
|
200
232
|
end
|
201
233
|
|
202
234
|
super(options.merge(digital_inst: @digital_instrument,
|
@@ -28,13 +28,16 @@ module OrigenTesters
|
|
28
28
|
|
29
29
|
# Compile a template file
|
30
30
|
def compile(file, options = {})
|
31
|
+
# Any options passed in from an interface will be passed to the compiler and to
|
32
|
+
# the templates being compiled
|
33
|
+
options[:initial_options] = options
|
31
34
|
Origen.file_handler.preserve_state do
|
32
35
|
begin
|
33
36
|
file = Origen.file_handler.clean_path_to_template(file)
|
34
|
-
Origen.generator.compile_file_or_directory(file,
|
37
|
+
Origen.generator.compile_file_or_directory(file, options)
|
35
38
|
rescue
|
36
39
|
file = Origen.file_handler.clean_path_to(file)
|
37
|
-
Origen.generator.compile_file_or_directory(file,
|
40
|
+
Origen.generator.compile_file_or_directory(file, options)
|
38
41
|
end
|
39
42
|
end
|
40
43
|
end
|
@@ -28,7 +28,7 @@ module OrigenTesters
|
|
28
28
|
# run entry in the flow.
|
29
29
|
def test(test_suite, options = {})
|
30
30
|
sbin = options[:sbin] || options[:softbin] || options[:soft_bin]
|
31
|
-
if options[:bin] || sbin
|
31
|
+
if (options[:bin] || sbin) && !options[:continue]
|
32
32
|
node = run_and_branch(test_suite, options)
|
33
33
|
options.delete(:id)
|
34
34
|
# Only pass options to configure the bin, don't pass flow control options, those apply to the main
|
@@ -2,7 +2,7 @@ module OrigenTesters
|
|
2
2
|
module SmartestBasedTester
|
3
3
|
class Base
|
4
4
|
class TestMethod
|
5
|
-
FORMAT_TYPES = [:current, :voltage, :time, :string, :integer]
|
5
|
+
FORMAT_TYPES = [:current, :voltage, :time, :string, :integer, :double]
|
6
6
|
|
7
7
|
# Returns the object representing the test method library that the
|
8
8
|
# given test method is defined in
|
@@ -100,7 +100,7 @@ module OrigenTesters
|
|
100
100
|
"#{val}[s]"
|
101
101
|
when :frequency
|
102
102
|
"#{val}[Hz]"
|
103
|
-
when :string, :integer
|
103
|
+
when :string, :integer, :double
|
104
104
|
val.to_s
|
105
105
|
else
|
106
106
|
fail "Unknown type for attribute #{attr}: #{type}"
|
@@ -5,20 +5,32 @@ module OrigenTesters
|
|
5
5
|
class Limits
|
6
6
|
attr_reader :test_method
|
7
7
|
attr_accessor :lo_limit, :hi_limit
|
8
|
+
attr_accessor :unit
|
8
9
|
|
9
10
|
def initialize(test_method)
|
10
11
|
@test_method = test_method
|
11
12
|
end
|
12
13
|
|
14
|
+
def unit=(val)
|
15
|
+
case val.to_s.downcase
|
16
|
+
when 'v', 'volts'
|
17
|
+
@unit = 'V'
|
18
|
+
when 'a', 'amps'
|
19
|
+
@unit = 'A'
|
20
|
+
else
|
21
|
+
fail "Limit unit of #{val} not implemented yet!"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
13
25
|
def to_s
|
14
26
|
if !lo_limit && !hi_limit
|
15
27
|
"\"#{test_name}\"" + ' = "":"NA":"":"NA":"":"":""'
|
16
28
|
elsif !lo_limit
|
17
|
-
"\"#{test_name}\"" + " = \"\":\"NA\":\"#{hi_limit}\":\"LE\":\"\":\"\":\"0\""
|
29
|
+
"\"#{test_name}\"" + " = \"\":\"NA\":\"#{hi_limit}\":\"LE\":\"#{unit}\":\"\":\"0\""
|
18
30
|
elsif !hi_limit
|
19
|
-
"\"#{test_name}\"" + " = \"#{lo_limit}\":\"GE\":\"\":\"NA\":\"\":\"\":\"0\""
|
31
|
+
"\"#{test_name}\"" + " = \"#{lo_limit}\":\"GE\":\"\":\"NA\":\"#{unit}\":\"\":\"0\""
|
20
32
|
else
|
21
|
-
"\"#{test_name}\"" + " = \"#{lo_limit}\":\"GE\":\"#{hi_limit}\":\"LE\":\"\":\"\":\"0\""
|
33
|
+
"\"#{test_name}\"" + " = \"#{lo_limit}\":\"GE\":\"#{hi_limit}\":\"LE\":\"#{unit}\":\"\":\"0\""
|
22
34
|
end
|
23
35
|
end
|
24
36
|
|
@@ -84,17 +84,22 @@ module OrigenTesters
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def initialize(name, attrs = {})
|
87
|
-
|
87
|
+
@name = name
|
88
88
|
# Set the defaults
|
89
89
|
DEFAULTS.each do |k, v|
|
90
90
|
send("#{k}=", v)
|
91
91
|
end
|
92
92
|
# Then the values that have been supplied
|
93
93
|
attrs.each do |k, v|
|
94
|
-
send("#{k}=", v) if respond_to?("#{k}=")
|
94
|
+
send("#{k}=", v) if respond_to?("#{k}=") && k.to_sym != :name
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
98
|
+
# The name is immutable once the test_suite is created, this will raise an error when called
|
99
|
+
def name=(val, options = {})
|
100
|
+
fail 'Once assigned the name of a test suite cannot be changed!'
|
101
|
+
end
|
102
|
+
|
98
103
|
def lines
|
99
104
|
l = []
|
100
105
|
l << ' override = 1;'
|
@@ -116,16 +116,19 @@ module OrigenTesters
|
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
119
|
+
# Add the test methods from the given flow to this flow
|
119
120
|
def add_test_methods(flow)
|
120
121
|
flow.testmethods.each do |id, tm|
|
122
|
+
# If this flow already contains a test method with the current ID
|
121
123
|
if testmethods[id]
|
122
124
|
nid = "tm_#{tm_ix}"
|
123
125
|
testmethods[nid] = tm
|
124
126
|
testmethodparameters[nid] = flow.testmethodparameters[id]
|
125
127
|
testmethodlimits[nid] = flow.testmethodlimits[id]
|
126
128
|
flow.test_suites.each do |tsid, ts|
|
127
|
-
if ts['override_testf'] == "#{id};"
|
129
|
+
if ts['override_testf'] == "#{id};" && !ts[:new_id]
|
128
130
|
ts['override_testf'] = "#{nid};"
|
131
|
+
ts[:new_id] = true
|
129
132
|
end
|
130
133
|
end
|
131
134
|
else
|
@@ -134,10 +137,15 @@ module OrigenTesters
|
|
134
137
|
testmethodlimits[id] = flow.testmethodlimits[id]
|
135
138
|
end
|
136
139
|
end
|
140
|
+
# Remove this temporary flag to prevent it rendering to the output file
|
141
|
+
flow.test_suites.each do |tsid, ts|
|
142
|
+
ts.delete(:new_id)
|
143
|
+
end
|
137
144
|
end
|
138
145
|
|
139
146
|
def add_test_suites(flow)
|
140
147
|
flow.test_suites.each do |id, ts|
|
148
|
+
# If this flow already contains a test suite with the current ID
|
141
149
|
if test_suites[id]
|
142
150
|
i = 1
|
143
151
|
nid = id
|
@@ -147,8 +155,9 @@ module OrigenTesters
|
|
147
155
|
end
|
148
156
|
test_suites[nid] = ts
|
149
157
|
flow.test_flow.map! do |line|
|
150
|
-
if line =~ /(run|run_and_branch)\(#{id}\)/
|
151
|
-
line.sub(id, nid)
|
158
|
+
if line =~ /(run|run_and_branch)\(#{id}\)/ && line !~ /--NEW_ID--/
|
159
|
+
line = line.sub(id, nid)
|
160
|
+
line += '--NEW_ID--'
|
152
161
|
else
|
153
162
|
line
|
154
163
|
end
|
@@ -157,6 +166,9 @@ module OrigenTesters
|
|
157
166
|
test_suites[id] = ts
|
158
167
|
end
|
159
168
|
end
|
169
|
+
flow.test_flow.map! do |line|
|
170
|
+
line.sub('--NEW_ID--', '')
|
171
|
+
end
|
160
172
|
end
|
161
173
|
|
162
174
|
def tm_ix
|
@@ -6,6 +6,10 @@ module OrigenTesters
|
|
6
6
|
attr_accessor :blocks
|
7
7
|
attr_accessor :hv_supply_pin
|
8
8
|
attr_accessor :lv_supply_pin
|
9
|
+
attr_accessor :digsrc_pins
|
10
|
+
attr_accessor :digcap_pins
|
11
|
+
attr_accessor :digsrc_settings
|
12
|
+
attr_accessor :digcap_settings
|
9
13
|
|
10
14
|
include OrigenARMDebug
|
11
15
|
include Origen::TopLevel
|
@@ -25,6 +29,10 @@ module OrigenTesters
|
|
25
29
|
end
|
26
30
|
@hv_supply_pin = 'VDDHV'
|
27
31
|
@lv_supply_pin = 'VDDLV'
|
32
|
+
@digsrc_pins = [:tdi, :tms]
|
33
|
+
@digsrc_settings = { digsrc_mode: :parallel, digsrc_bit_order: :msb }
|
34
|
+
@digcap_pins = :tdo
|
35
|
+
@digcap_settings = { digcap_format: :twos_complement }
|
28
36
|
@blocks = [Block.new(0, self), Block.new(1, self), Block.new(2, self)]
|
29
37
|
end
|
30
38
|
|
@@ -154,6 +162,46 @@ module OrigenTesters
|
|
154
162
|
end
|
155
163
|
end
|
156
164
|
|
165
|
+
def digsrc_overlay(options = {})
|
166
|
+
options = { define: false, # whether to define subr or call it
|
167
|
+
subr_name: false, # default use match type as subr name
|
168
|
+
digsrc_pins: @digsrc_pins, # defaults to what's defined in $dut
|
169
|
+
overlay_reg: nil, # defaults to testme32 register
|
170
|
+
overlay_cycle_num: 32, # Only needed if overlay_reg is NOT nil, this specificies how many clk cycles to overlay.
|
171
|
+
}.merge(options)
|
172
|
+
if options[:define]
|
173
|
+
$tester.start_subroutine(options[:subr_name]) # Start subroutine
|
174
|
+
digsrc_pins = $tester.assign_digsrc_pins(options[:digsrc_pins])
|
175
|
+
$tester.digsrc_start(digsrc_pins, dssc_mode: :single)
|
176
|
+
original_pin_states = {}
|
177
|
+
digsrc_pins.each do |pin|
|
178
|
+
original_pin_states.merge!(pin => pin(pin).data)
|
179
|
+
pin(pin).drive_mem
|
180
|
+
end
|
181
|
+
if options[:overlay_reg].nil?
|
182
|
+
options[:overlay_cycle_num].times do
|
183
|
+
$tester.digsrc_send(digsrc_pins)
|
184
|
+
$tester.cycle
|
185
|
+
end
|
186
|
+
else
|
187
|
+
$tester.dont_compress = true
|
188
|
+
options[:overlay_reg].size.times do
|
189
|
+
$tester.digsrc_send(digsrc_pins)
|
190
|
+
$tester.cycle
|
191
|
+
end
|
192
|
+
end
|
193
|
+
original_pin_states.each do |pin, state|
|
194
|
+
pin(pin).drive(state)
|
195
|
+
end
|
196
|
+
$tester.digsrc_stop(digsrc_pins)
|
197
|
+
$tester.cycle
|
198
|
+
$tester.end_subroutine # end subroutine
|
199
|
+
else
|
200
|
+
$tester.cycle
|
201
|
+
$tester.call_subroutine(options[:subr_name])
|
202
|
+
end
|
203
|
+
end
|
204
|
+
|
157
205
|
def memory_test(options = {})
|
158
206
|
options = {
|
159
207
|
}.merge(options)
|
data/pattern/subroutines.rb
CHANGED
@@ -33,6 +33,13 @@ unless $tester.v93k?
|
|
33
33
|
# Define handshake subr
|
34
34
|
$dut.handshake(:define => true)
|
35
35
|
|
36
|
+
if $tester.ultraflex?
|
37
|
+
# Define digsrc_overlay_testme32 subr
|
38
|
+
$dut.digsrc_overlay(:subr_name => 'digsrc_overlay_testme32', :define => true, overlay_reg: :testme32)
|
39
|
+
|
40
|
+
# Define digsrc_overlay subr
|
41
|
+
$dut.digsrc_overlay(:subr_name => 'digsrc_overlay', :define => true, overlay_cycle_num: 64)
|
42
|
+
end
|
36
43
|
end
|
37
44
|
end
|
38
45
|
end
|
metadata
CHANGED
@@ -1,35 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: origen_testers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stephen McGinty
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-09-
|
11
|
+
date: 2015-09-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: origen
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.2'
|
20
17
|
- - ">="
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version: 0.
|
19
|
+
version: 0.4.0
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0.2'
|
30
24
|
- - ">="
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version: 0.
|
26
|
+
version: 0.4.0
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: require_all
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|