origen_testers 0.4.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 +7 -0
- data/config/application.rb +140 -0
- data/config/commands.rb +73 -0
- data/config/development.rb +12 -0
- data/config/environment.rb +1 -0
- data/config/shared_commands.rb +47 -0
- data/config/users.rb +18 -0
- data/config/version.rb +8 -0
- data/lib/commands/build.rb +69 -0
- data/lib/origen_testers.rb +23 -0
- data/lib/origen_testers/api.rb +258 -0
- data/lib/origen_testers/basic_test_setups.rb +105 -0
- data/lib/origen_testers/callback_handlers.rb +58 -0
- data/lib/origen_testers/generator.rb +279 -0
- data/lib/origen_testers/generator/flow_control_api.rb +611 -0
- data/lib/origen_testers/generator/identity_map.rb +23 -0
- data/lib/origen_testers/generator/placeholder.rb +11 -0
- data/lib/origen_testers/generator/test_numberer.rb +23 -0
- data/lib/origen_testers/igxl_based_tester.rb +12 -0
- data/lib/origen_testers/igxl_based_tester/base.rb +641 -0
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +171 -0
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +322 -0
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +217 -0
- data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -0
- data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -0
- data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -0
- data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -0
- data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -0
- data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -0
- data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -0
- data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +326 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +58 -0
- data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +179 -0
- data/lib/origen_testers/igxl_based_tester/files.rb +43 -0
- data/lib/origen_testers/igxl_based_tester/j750.rb +248 -0
- data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -0
- data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/instances.txt.erb +16 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/patgroups.txt.erb +8 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/patsets.txt.erb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/templates/patsubrs.txt.erb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +547 -0
- data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +515 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/parser.rb +102 -0
- data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/parser/ac_specs.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -0
- data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -0
- data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -0
- data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -0
- data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -0
- data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -0
- data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -0
- data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -0
- data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +341 -0
- data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -0
- data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -0
- data/lib/origen_testers/igxl_based_tester/parser/timesets.rb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex.rb +477 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/instances.txt.erb +16 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patgroups.txt.erb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsets.txt.erb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsubrs.txt.erb +10 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +270 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -0
- data/lib/origen_testers/interface.rb +183 -0
- data/lib/origen_testers/parser.rb +22 -0
- data/lib/origen_testers/parser/description_lookup.rb +62 -0
- data/lib/origen_testers/parser/searchable_array.rb +30 -0
- data/lib/origen_testers/parser/searchable_hash.rb +30 -0
- data/lib/origen_testers/pattern_compilers.rb +116 -0
- data/lib/origen_testers/pattern_compilers/assembler.rb +88 -0
- data/lib/origen_testers/pattern_compilers/job.rb +96 -0
- data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -0
- data/lib/origen_testers/program_generators.rb +55 -0
- data/lib/origen_testers/smartest_based_tester.rb +8 -0
- data/lib/origen_testers/smartest_based_tester/base.rb +411 -0
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +188 -0
- data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +476 -0
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +123 -0
- data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +23 -0
- data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +47 -0
- data/lib/origen_testers/smartest_based_tester/base/test_method.rb +143 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +73 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -0
- data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +43 -0
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +166 -0
- data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -0
- data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -0
- data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -0
- data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +169 -0
- data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -0
- data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -0
- data/lib/origen_testers/smartest_based_tester/v93k/flow_node.rb +9 -0
- data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -0
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -0
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +201 -0
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -0
- data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -0
- data/lib/origen_testers/test/basic_interface.rb +17 -0
- data/lib/origen_testers/test/block.rb +21 -0
- data/lib/origen_testers/test/dut.rb +184 -0
- data/lib/origen_testers/test/dut2.rb +76 -0
- data/lib/origen_testers/test/j750_base_interface.rb +119 -0
- data/lib/origen_testers/test/j750_hpt_interface.rb +8 -0
- data/lib/origen_testers/test/j750_interface.rb +8 -0
- data/lib/origen_testers/test/nvm.rb +94 -0
- data/lib/origen_testers/test/ultraflex_interface.rb +110 -0
- data/lib/origen_testers/test/v93k_interface.rb +115 -0
- data/lib/origen_testers/timing.rb +362 -0
- data/lib/origen_testers/vector.rb +203 -0
- data/lib/origen_testers/vector_based_tester.rb +42 -0
- data/lib/origen_testers/vector_generator.rb +623 -0
- data/lib/origen_testers/vector_pipeline.rb +288 -0
- data/pattern/dc_instr.rb +7 -0
- data/pattern/delay.rb +7 -0
- data/pattern/mem_test.rb +8 -0
- data/pattern/multi_vector.rb +117 -0
- data/pattern/multi_vector_plus1.rb +125 -0
- data/pattern/nvm/j750/add_late_pins.rb +3 -0
- data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -0
- data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -0
- data/pattern/nvm/j750/j750_halt.rb +159 -0
- data/pattern/nvm/j750/j750_workout.rb +202 -0
- data/pattern/nvm/j750/timing.rb +73 -0
- data/pattern/nvm/v93k/v93k_workout.rb +136 -0
- data/pattern/read_write_reg.rb +58 -0
- data/pattern/reset.rb +4 -0
- data/pattern/subroutines.rb +38 -0
- data/program/_additional_erase.rb +7 -0
- data/program/_efa_resources.rb +7 -0
- data/program/_erase.rb +25 -0
- data/program/_erase_vfy.rb +5 -0
- data/program/_iv_resources.rb +10 -0
- data/program/basic_interface.rb +5 -0
- data/program/components/_prb2_main.rb +6 -0
- data/program/flow_control.rb +164 -0
- data/program/prb1.rb +226 -0
- data/program/prb1_resources.rb +28 -0
- data/program/prb2.rb +40 -0
- data/program/test.rb +20 -0
- data/templates/example.txt.erb +53 -0
- data/templates/j750/_vt_flow.txt.erb +8 -0
- data/templates/j750/_vt_instances.txt.erb +4 -0
- data/templates/j750/program_sheet.txt.erb +9 -0
- data/templates/manifest/v93k.yaml.erb +22 -0
- data/templates/web/index.md.erb +51 -0
- data/templates/web/layouts/_basic.html.erb +15 -0
- data/templates/web/partials/_navbar.html.erb +22 -0
- data/templates/web/release_notes.md.erb +5 -0
- metadata +332 -0
data/program/prb1.rb
ADDED
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# An instance of the interface is
|
|
2
|
+
# passed in here, iterators and other
|
|
3
|
+
# argument passing will be supported
|
|
4
|
+
# similar to Pattern.create.
|
|
5
|
+
Flow.create do
|
|
6
|
+
|
|
7
|
+
self.resources_filename = 'prb1'
|
|
8
|
+
|
|
9
|
+
# Instantiate tests via the
|
|
10
|
+
# interface
|
|
11
|
+
func 'program_ckbd', :tname => 'PGM_CKBD', :tnum => 1000, :bin => 100, :soft_bin => 1100
|
|
12
|
+
func 'margin_read1_ckbd'
|
|
13
|
+
|
|
14
|
+
# Control the build process based on
|
|
15
|
+
# the current target
|
|
16
|
+
if $dut.has_margin0_bug?
|
|
17
|
+
func 'normal_read_ckbd'
|
|
18
|
+
else
|
|
19
|
+
func 'margin_read0_ckbd'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Include a sub flow, example of
|
|
23
|
+
# parameter passing
|
|
24
|
+
import 'erase', :pulses => 6
|
|
25
|
+
|
|
26
|
+
# Render an ERB template, or raw
|
|
27
|
+
# text file
|
|
28
|
+
if $tester.j750?
|
|
29
|
+
flow.render 'templates/j750/vt_flow', :include_tifr => true
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
log 'Should be v1'
|
|
33
|
+
func :program_ckbd
|
|
34
|
+
log 'Should be v2'
|
|
35
|
+
func :program_ckbd, :duration => :dynamic
|
|
36
|
+
log 'Should be v1'
|
|
37
|
+
func :program_ckbd
|
|
38
|
+
log 'Should be v2'
|
|
39
|
+
func :program_ckbd, :duration => :dynamic
|
|
40
|
+
|
|
41
|
+
log 'Should be a v1 test instance group'
|
|
42
|
+
func :program_ckbd, :by_block => true
|
|
43
|
+
log 'Should be a v2 test instance group'
|
|
44
|
+
func :program_ckbd, :by_block => true, :duration => :dynamic
|
|
45
|
+
log 'Should be a v1 test instance group'
|
|
46
|
+
func :program_ckbd, :by_block => true
|
|
47
|
+
log 'Should be a v2 test instance group'
|
|
48
|
+
func :program_ckbd, :by_block => true, :duration => :dynamic
|
|
49
|
+
|
|
50
|
+
# Test job conditions
|
|
51
|
+
func :p1_only_test, :if_job => :p1
|
|
52
|
+
if_job [:p1, :p2] do
|
|
53
|
+
func :p1_or_p2_only_test
|
|
54
|
+
end
|
|
55
|
+
func :not_p1_test, :unless_job => :p1
|
|
56
|
+
func :not_p1_or_p2_test, :unless_job => [:p1, :p2]
|
|
57
|
+
unless_job [:p1, :p2] do
|
|
58
|
+
func :another_not_p1_or_p2_test
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
log 'Verify that a test with an external instance works'
|
|
62
|
+
por
|
|
63
|
+
|
|
64
|
+
log 'Verify that a request to use the current context works'
|
|
65
|
+
func :erase_all, :if_job => :p1 # Job should be P1
|
|
66
|
+
func :erase_all, :context => :current # Job should be P1
|
|
67
|
+
unless_job :p2 do
|
|
68
|
+
func :erase_all, :context => :current # Job should be P1
|
|
69
|
+
func :erase_all # Job should be !P2
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# Deliver an initial erase pulse
|
|
73
|
+
func :erase_all
|
|
74
|
+
|
|
75
|
+
# Deliver additional erase pulses as required until it verifies, maximum of 5 additional pulses
|
|
76
|
+
5.times do |x|
|
|
77
|
+
# Assign a unique id attribute to each verify so that we know which one we are talking about when
|
|
78
|
+
# making other tests dependent on it.
|
|
79
|
+
# When Origen sees the if_failed dependency on a future test it will be smart enough to inhibit the binning
|
|
80
|
+
# on this test without having to explicitly declare that.
|
|
81
|
+
func :margin_read1_all1, :id => "erase_vfy_#{x}"
|
|
82
|
+
# Run this test only if the given verify failed
|
|
83
|
+
func :erase_all, :if_failed => "erase_vfy_#{x}"
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# A final verify to set the binning
|
|
87
|
+
func :margin_read1_all1
|
|
88
|
+
|
|
89
|
+
log 'Test if enable'
|
|
90
|
+
func :erase_all, :if_enable => 'do_erase'
|
|
91
|
+
|
|
92
|
+
if_enable 'do_erase' do
|
|
93
|
+
func :erase_all
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
log 'Test unless enable'
|
|
97
|
+
func :erase_all, :unless_enable => 'no_extra_erase'
|
|
98
|
+
|
|
99
|
+
unless_enable 'no_extra_erase' do
|
|
100
|
+
func :erase_all
|
|
101
|
+
func :erase_all
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
unless_enable 'no_extra_erase', :or => true do
|
|
105
|
+
func :erase_all
|
|
106
|
+
func :erase_all
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
log 'Test if_passed'
|
|
110
|
+
func :erase_all, :id => 'erase_passed_1'
|
|
111
|
+
func :erase_all, :id => 'erase_passed_2'
|
|
112
|
+
|
|
113
|
+
func :margin_read1_all1, :if_passed => 'erase_passed_1'
|
|
114
|
+
if_passed 'erase_passed_2' do
|
|
115
|
+
func :margin_read1_all1
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
log 'Test unless_passed'
|
|
119
|
+
func :erase_all, :id => 'erase_passed_3'
|
|
120
|
+
func :erase_all, :id => 'erase_passed_4'
|
|
121
|
+
|
|
122
|
+
func :margin_read1_all1, :unless_passed => 'erase_passed_3'
|
|
123
|
+
unless_passed 'erase_passed_4' do
|
|
124
|
+
func :margin_read1_all1
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
log 'Test if_failed'
|
|
128
|
+
func :erase_all, :id => 'erase_failed_1'
|
|
129
|
+
func :erase_all, :id => 'erase_failed_2'
|
|
130
|
+
|
|
131
|
+
func :margin_read1_all1, :if_failed => 'erase_failed_1'
|
|
132
|
+
if_failed 'erase_failed_2' do
|
|
133
|
+
func :margin_read1_all1
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
log 'Test unless_failed'
|
|
137
|
+
func :erase_all, :id => 'erase_failed_3'
|
|
138
|
+
func :erase_all, :id => 'erase_failed_4'
|
|
139
|
+
|
|
140
|
+
func :margin_read1_all1, :unless_failed => 'erase_failed_3'
|
|
141
|
+
unless_failed 'erase_failed_4' do
|
|
142
|
+
func :margin_read1_all1
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
log 'Test if_ran'
|
|
146
|
+
func :erase_all, :id => 'erase_ran_1'
|
|
147
|
+
func :erase_all, :id => 'erase_ran_2'
|
|
148
|
+
|
|
149
|
+
func :margin_read1_all1, :if_ran => 'erase_ran_1'
|
|
150
|
+
if_ran 'erase_ran_2' do
|
|
151
|
+
func :margin_read1_all1
|
|
152
|
+
end
|
|
153
|
+
|
|
154
|
+
log 'Test unless_ran'
|
|
155
|
+
func :erase_all, :id => 'erase_ran_3'
|
|
156
|
+
func :erase_all, :id => 'erase_ran_4'
|
|
157
|
+
|
|
158
|
+
func :margin_read1_all1, :unless_ran => 'erase_ran_3'
|
|
159
|
+
unless_ran 'erase_ran_4' do
|
|
160
|
+
func :margin_read1_all1
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
log 'Test if_all_passed'
|
|
164
|
+
func :erase_all, :id => 'erase_all_passed_1'
|
|
165
|
+
func :erase_all, :id => 'erase_all_passed_2'
|
|
166
|
+
|
|
167
|
+
func :margin_read1_all1, :if_all_passed => 'erase_all_passed_1'
|
|
168
|
+
if_all_passed 'erase_all_passed_2' do
|
|
169
|
+
func :margin_read1_all1
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
log 'Test unless_any_failed'
|
|
173
|
+
func :erase_all, :id => 'erase_all_passed_3'
|
|
174
|
+
func :erase_all, :id => 'erase_all_passed_4'
|
|
175
|
+
|
|
176
|
+
func :margin_read1_all1, :unless_any_failed => 'erase_all_passed_3'
|
|
177
|
+
unless_any_failed 'erase_all_passed_4' do
|
|
178
|
+
func :margin_read1_all1
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
log 'Test if_any_passed'
|
|
182
|
+
func :erase_all, :id => 'erase_any_passed_1'
|
|
183
|
+
func :erase_all, :id => 'erase_any_passed_2'
|
|
184
|
+
|
|
185
|
+
func :margin_read1_all1, :if_any_passed => 'erase_any_passed_1'
|
|
186
|
+
if_any_passed 'erase_any_passed_2' do
|
|
187
|
+
func :margin_read1_all1
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
log 'Test if_all_failed'
|
|
191
|
+
func :erase_all, :id => 'erase_all_failed_1'
|
|
192
|
+
func :erase_all, :id => 'erase_all_failed_2'
|
|
193
|
+
|
|
194
|
+
func :margin_read1_all1, :if_all_failed => 'erase_all_failed_1'
|
|
195
|
+
if_all_failed 'erase_all_failed_2' do
|
|
196
|
+
func :margin_read1_all1
|
|
197
|
+
end
|
|
198
|
+
|
|
199
|
+
log 'Test if_any_failed'
|
|
200
|
+
func :erase_all, :id => 'erase_any_failed_1'
|
|
201
|
+
func :erase_all, :id => 'erase_any_failed_2'
|
|
202
|
+
|
|
203
|
+
func :margin_read1_all1, :if_any_failed => 'erase_any_failed_1'
|
|
204
|
+
if_any_failed 'erase_any_failed_2' do
|
|
205
|
+
func :margin_read1_all1
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
log 'Verify that job context wraps import'
|
|
209
|
+
if_job :fr do
|
|
210
|
+
import 'erase'
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
log 'Verify that job context wraps enable block within an import'
|
|
214
|
+
if_job :fr do
|
|
215
|
+
import 'additional_erase'
|
|
216
|
+
import 'additional_erase', :force => true
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
log 'Verify that flow.cz works...'
|
|
220
|
+
func :margin_read1_all1, :pin_levels => :cz, :cz_setup => 'vbplus_sweep'
|
|
221
|
+
|
|
222
|
+
log 'Verify that MTO template works...'
|
|
223
|
+
mto_memory :mto_read1_all1
|
|
224
|
+
|
|
225
|
+
bin 1, description: "Good die!"
|
|
226
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Similar to the test flows an interface instance is passed in as the first argument.
|
|
2
|
+
Resources.create do
|
|
3
|
+
|
|
4
|
+
self.resources_filename = 'prb1'
|
|
5
|
+
|
|
6
|
+
# Logic here should be minimal,
|
|
7
|
+
# pass whatever options you want
|
|
8
|
+
# but the recommended approach is
|
|
9
|
+
# to infer the pattern name and as
|
|
10
|
+
# many additional details as
|
|
11
|
+
# possible from the test name
|
|
12
|
+
func :program_ckbd, :duration => :dynamic
|
|
13
|
+
|
|
14
|
+
import 'efa_resources'
|
|
15
|
+
|
|
16
|
+
func :margin_read1_ckbd
|
|
17
|
+
func :normal_read_ckbd
|
|
18
|
+
func :margin_read0_ckbd
|
|
19
|
+
|
|
20
|
+
func :erase_all, :duration => :dynamic
|
|
21
|
+
|
|
22
|
+
para 'charge_pump', :high_voltage => true
|
|
23
|
+
|
|
24
|
+
if $tester.j750?
|
|
25
|
+
test_instances.render 'templates/j750/vt_instances'
|
|
26
|
+
compile 'templates/j750/program_sheet.txt', :passed_param => true
|
|
27
|
+
end
|
|
28
|
+
end
|
data/program/prb2.rb
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# An example of creating an entire test program from
|
|
2
|
+
# a single source file
|
|
3
|
+
Flow.create do
|
|
4
|
+
|
|
5
|
+
self.resources_filename = 'prb2'
|
|
6
|
+
|
|
7
|
+
func :erase_all, :duration => :dynamic
|
|
8
|
+
|
|
9
|
+
func :margin_read1_all1
|
|
10
|
+
|
|
11
|
+
func :erase_all, :duration => :dynamic
|
|
12
|
+
func :margin_read1_all1
|
|
13
|
+
|
|
14
|
+
import 'components/prb2_main'
|
|
15
|
+
|
|
16
|
+
func :erase_all, :duration => :dynamic
|
|
17
|
+
func :margin_read1_all1, :id => 'erased_successfully'
|
|
18
|
+
|
|
19
|
+
skip :if_all_passed => 'erased_successfully' do
|
|
20
|
+
import 'components/prb2_main'
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
if_enable 'extra_tests' do
|
|
24
|
+
import 'components/prb2_main'
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
func :margin_read1_all1
|
|
28
|
+
|
|
29
|
+
log '"Check OOF passcodes in both locations"'
|
|
30
|
+
func :pgm_vfy_oof_passcode_tst, tname: "TST_VFY_OOF_PASSCODE", tnum: 1300, continue: true, id: :oof_passcode1
|
|
31
|
+
func :pgm_vfy_oof_passcode_redcols_utst, tname: "UTST_VFY_OOF_PASSCODE_REDCOLS", tnum: 1300, continue: true, id: :oof_passcode2
|
|
32
|
+
nop
|
|
33
|
+
|
|
34
|
+
# Will create a better API when implementing this on V93K
|
|
35
|
+
if Origen.tester.is_a?(OrigenTesters::IGXLBasedTester::Base)
|
|
36
|
+
or_ids id1: :oof_passcode1, id2: :oof_passcode2, id: :OR, condition: :fail
|
|
37
|
+
func :testme, tname: "", if_failed: :OR
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
data/program/test.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# An instance of the interface is
|
|
2
|
+
# passed in here, iterators and other
|
|
3
|
+
# argument passing will be supported
|
|
4
|
+
# similar to Pattern.create.
|
|
5
|
+
Flow.create do
|
|
6
|
+
|
|
7
|
+
# Instantiate tests via the
|
|
8
|
+
# interface
|
|
9
|
+
# func 'program_ckbd', :tname => 'PGM_CKBD', :tnum => 1000, :bin => 100, :soft_bin => 1100
|
|
10
|
+
|
|
11
|
+
# para 'charge_pump', :high_voltage => true, :lo_limit => 5, :hi_limit => 6
|
|
12
|
+
|
|
13
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, lo_limit: 35
|
|
14
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45
|
|
15
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, lo_limit: 35
|
|
16
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, lo_limit: 35, units: "V"
|
|
17
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, lo_limit: 35, scale: "k", units: "V"
|
|
18
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45, lo_limit: 35, scale: "k", units: "V", result: "None"
|
|
19
|
+
|
|
20
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
RGen can compile any ASCII files within the context of a target, in other words
|
|
2
|
+
you can select a target file and access the objects instantiated in the target
|
|
3
|
+
from here and use them to generate dynamic content.
|
|
4
|
+
|
|
5
|
+
To try it run the compile task on this file:
|
|
6
|
+
|
|
7
|
+
> rgen c templates/example.txt.erb
|
|
8
|
+
|
|
9
|
+
You can also compile entire directories like this:
|
|
10
|
+
|
|
11
|
+
> rgen c templates
|
|
12
|
+
|
|
13
|
+
In the case of compiling a directory any .erb files in the directory and its
|
|
14
|
+
subdirectory will be compiled, whereas any non .erb files will simply be
|
|
15
|
+
copied over to the output location un-modified.
|
|
16
|
+
|
|
17
|
+
See the help for the other available options:
|
|
18
|
+
|
|
19
|
+
> rgen c -h
|
|
20
|
+
|
|
21
|
+
SYNTAX
|
|
22
|
+
------
|
|
23
|
+
|
|
24
|
+
The syntax is very simple:
|
|
25
|
+
|
|
26
|
+
% # Lines that start with % (no spaces allowed before it) will be interpreted
|
|
27
|
+
% # as Ruby. Since these lines start with a comment char they will simply be
|
|
28
|
+
% # deleted by the compilation process.
|
|
29
|
+
|
|
30
|
+
Ruby logic can be used to conditionally include lines:
|
|
31
|
+
% if 1 == 1
|
|
32
|
+
You will see me in the compiled file
|
|
33
|
+
% else
|
|
34
|
+
But you won't see me :-(
|
|
35
|
+
% end
|
|
36
|
+
|
|
37
|
+
Loops can be used to expand the content:
|
|
38
|
+
% 10.times do
|
|
39
|
+
I must not talk in class
|
|
40
|
+
% end
|
|
41
|
+
|
|
42
|
+
To inject content use this syntax: 4 + 4 = <%= 4 + 4 %>
|
|
43
|
+
|
|
44
|
+
Whatever is returned by a Ruby snippet like this will be converted to a string and
|
|
45
|
+
output to the compiled file.
|
|
46
|
+
|
|
47
|
+
That's pretty much it.
|
|
48
|
+
|
|
49
|
+
Oh almost forgot the best bit, you can access your objects:
|
|
50
|
+
|
|
51
|
+
"DUT, are you there?"
|
|
52
|
+
|
|
53
|
+
<%= $dut.say_hello %>
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
data_collection Test nvm_allflash_vsgdist ErsSatVsg None
|
|
2
|
+
% if options[:include_fw]
|
|
3
|
+
data_collection Test nvm_allflash_vsgdist_fw ErsSatVsgFW None
|
|
4
|
+
% end
|
|
5
|
+
% if options[:include_tifr]
|
|
6
|
+
data_collection Test nvm_allflash_vsgdist_tifr ErsSatVsgTIFR None
|
|
7
|
+
% end
|
|
8
|
+
data_collection Test nvm_allflash_vsgdist_uifr ErsSatVsgUIFR None
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
nvm_allflash_vsgdist IG-XL Template Empty_T Excel Macro NVM Typ Spec Default Tim Lvl TfsC90InterposeFunc VtDist SetHRAMForRead,32 ArgData:0,1,15,1,vsg,array
|
|
2
|
+
nvm_allflash_vsgdist_fw IG-XL Template Empty_T Excel Macro NVM Typ Spec Default Tim Lvl TfsC90InterposeFunc VtDist SetHRAMForRead,32 ArgData:0,1,15,1,vsg,fw
|
|
3
|
+
nvm_allflash_vsgdist_uifr IG-XL Template Empty_T Excel Macro NVM Typ Spec Default Tim Lvl TfsC90InterposeFunc VtDist SetHRAMForRead,32 ArgData:0,1,15,1,vsg,uifr
|
|
4
|
+
nvm_allflash_vsgdist_tifr IG-XL Template Empty_T Excel Macro NVM Typ Spec Default Tim Lvl TfsC90InterposeFunc VtDist SetHRAMForRead,32 ArgData:0,1,15,1,vsg,tifr
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
flows:
|
|
2
|
+
prb1:
|
|
3
|
+
- continuity
|
|
4
|
+
- scan
|
|
5
|
+
prb2:
|
|
6
|
+
- continuity
|
|
7
|
+
- functional
|
|
8
|
+
|
|
9
|
+
sub_programs:
|
|
10
|
+
- name: continuity
|
|
11
|
+
# Paths can be relative to your RGen application root
|
|
12
|
+
flow: output/v93k/testflow/continuity.flow
|
|
13
|
+
|
|
14
|
+
- name: scan
|
|
15
|
+
# Or relative to this file
|
|
16
|
+
flow: ../../output/v93k/testflow/test.flow
|
|
17
|
+
pattern_master: ../../output/v93k/vectors/test.pmfl
|
|
18
|
+
|
|
19
|
+
- name: functional
|
|
20
|
+
# Or absolute
|
|
21
|
+
flow: /proj/devicex/modules/functional/v93k/testflow/main.flow
|
|
22
|
+
pattern_master: /proj/devicex/modules/functional/v93k/vectors/main.pmfl
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
% render "layouts/basic.html" do
|
|
2
|
+
|
|
3
|
+
%# HTML tags can be embedded in mark down files if you want to do specific custom
|
|
4
|
+
%# formatting like this, but in most cases that is not required.
|
|
5
|
+
<h1><%= Origen.config.name %> <span style="font-size: 14px">(<%= Origen.app.version %>)</span></h1>
|
|
6
|
+
|
|
7
|
+
### Purpose
|
|
8
|
+
|
|
9
|
+
This origen gem provides tester models to drive ATE type testers like the J750, UltraFLEX, V93K.
|
|
10
|
+
|
|
11
|
+
### How To Import
|
|
12
|
+
|
|
13
|
+
In your Gemfile add:
|
|
14
|
+
|
|
15
|
+
~~~ruby
|
|
16
|
+
gem "<%= Origen.app.name %>", ">= <%= Origen.app.version %>"
|
|
17
|
+
~~~
|
|
18
|
+
|
|
19
|
+
or if your application is a gem add this to your <code>.gemspec</code>
|
|
20
|
+
|
|
21
|
+
~~~ruby
|
|
22
|
+
spec.add_runtime_dependency "<%= Origen.app.name %>", ">= <%= Origen.app.version %>"
|
|
23
|
+
~~~
|
|
24
|
+
|
|
25
|
+
### How To Use
|
|
26
|
+
|
|
27
|
+
To use a tester, instantiate it in the current environment file:
|
|
28
|
+
|
|
29
|
+
~~~ruby
|
|
30
|
+
# environment/j750.rb
|
|
31
|
+
$tester = OrigenTesters::J750.new
|
|
32
|
+
~~~
|
|
33
|
+
|
|
34
|
+
Tester programs and patterns can easily be generated for different testers simply by changing the above instantiation.
|
|
35
|
+
|
|
36
|
+
### How To Setup a Development Environment
|
|
37
|
+
|
|
38
|
+
[Clone the repository from Github](https://github.com/Origen-SDK/origen_testers).
|
|
39
|
+
|
|
40
|
+
Follow the instructions here if you want to make a 3rd party app
|
|
41
|
+
workspace use your development copy of the OrigenTesters plugin:
|
|
42
|
+
[Setting up a Plugin Development Environment](http://origen-sdk.org/origen/latest/guides/plugins)
|
|
43
|
+
|
|
44
|
+
This plugin also contains a test suite, makes sure this passes before committing
|
|
45
|
+
any changes!
|
|
46
|
+
|
|
47
|
+
~~~text
|
|
48
|
+
origen test
|
|
49
|
+
~~~
|
|
50
|
+
|
|
51
|
+
% end
|