origen_testers 0.13.1 → 0.13.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/application.rb +151 -151
- data/config/boot.rb +13 -13
- data/config/commands.rb +85 -86
- data/config/users.rb +18 -18
- data/config/version.rb +8 -8
- data/lib/commands/build.rb +69 -69
- data/lib/commands/run.rb +48 -48
- data/lib/origen_testers.rb +47 -47
- data/lib/origen_testers/api.rb +381 -381
- data/lib/origen_testers/basic_test_setups.rb +105 -105
- data/lib/origen_testers/callback_handlers.rb +59 -59
- data/lib/origen_testers/command_based_tester.rb +45 -45
- data/lib/origen_testers/flow.rb +382 -382
- data/lib/origen_testers/generator.rb +283 -283
- data/lib/origen_testers/generator/identity_map.rb +23 -23
- data/lib/origen_testers/generator/placeholder.rb +11 -11
- data/lib/origen_testers/generator/test_numberer.rb +23 -23
- data/lib/origen_testers/igxl_based_tester.rb +12 -12
- data/lib/origen_testers/igxl_based_tester/base.rb +1100 -1099
- data/lib/origen_testers/igxl_based_tester/base/ac_specsets.rb +79 -79
- data/lib/origen_testers/igxl_based_tester/base/custom_test_instance.rb +169 -169
- data/lib/origen_testers/igxl_based_tester/base/dc_specsets.rb +98 -98
- data/lib/origen_testers/igxl_based_tester/base/edge.rb +60 -60
- data/lib/origen_testers/igxl_based_tester/base/edges.rb +24 -24
- data/lib/origen_testers/igxl_based_tester/base/edgeset.rb +39 -39
- data/lib/origen_testers/igxl_based_tester/base/edgesets.rb +130 -130
- data/lib/origen_testers/igxl_based_tester/base/flow.rb +460 -460
- data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +276 -276
- data/lib/origen_testers/igxl_based_tester/base/generator.rb +607 -607
- data/lib/origen_testers/igxl_based_tester/base/global_specs.rb +83 -83
- data/lib/origen_testers/igxl_based_tester/base/job.rb +75 -75
- data/lib/origen_testers/igxl_based_tester/base/jobs.rb +44 -44
- data/lib/origen_testers/igxl_based_tester/base/level_io_se.rb +59 -59
- data/lib/origen_testers/igxl_based_tester/base/level_supply.rb +39 -39
- data/lib/origen_testers/igxl_based_tester/base/levels.rb +31 -31
- data/lib/origen_testers/igxl_based_tester/base/levelset.rb +110 -110
- data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -109
- data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -38
- data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -68
- data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -56
- data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -38
- data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -68
- data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -56
- data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -38
- data/lib/origen_testers/igxl_based_tester/base/pinmap.rb +93 -93
- data/lib/origen_testers/igxl_based_tester/base/references.rb +25 -25
- data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +322 -322
- data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +66 -66
- data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +212 -212
- data/lib/origen_testers/igxl_based_tester/base/test_instances/custom_til.rb +37 -37
- data/lib/origen_testers/igxl_based_tester/base/timeset.rb +37 -37
- data/lib/origen_testers/igxl_based_tester/base/timesets.rb +49 -49
- data/lib/origen_testers/igxl_based_tester/base/timesets_basic.rb +49 -49
- data/lib/origen_testers/igxl_based_tester/files.rb +43 -43
- data/lib/origen_testers/igxl_based_tester/j750.rb +269 -269
- data/lib/origen_testers/igxl_based_tester/j750/custom_test_instance.rb +32 -32
- data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +746 -746
- data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -34
- data/lib/origen_testers/igxl_based_tester/j750_hpt/custom_test_instance.rb +32 -32
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +599 -599
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/parser.rb +102 -102
- data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -33
- data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -48
- data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -339
- data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -109
- data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -203
- data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -21
- data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -92
- data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -31
- data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +420 -420
- data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -24
- data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -13
- data/lib/origen_testers/igxl_based_tester/ultraflex.rb +798 -798
- data/lib/origen_testers/igxl_based_tester/ultraflex/ac_specsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/ate_hardware.rb +949 -949
- data/lib/origen_testers/igxl_based_tester/ultraflex/custom_test_instance.rb +36 -36
- data/lib/origen_testers/igxl_based_tester/ultraflex/dc_specsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/edge.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/edges.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgeset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/edgesets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +158 -158
- data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -19
- data/lib/origen_testers/igxl_based_tester/ultraflex/global_specs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/job.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/jobs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_io_se.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/level_supply.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/levels.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/levelset.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -18
- data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/pinmap.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/references.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/ac_specsets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/dc_specsets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/edgesets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/global_specs.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/jobs.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/levelset.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/pinmap.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/references.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/templates/timesets_basic.txt.erb +0 -0
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +315 -315
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/timeset.rb +9 -9
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets.rb +10 -10
- data/lib/origen_testers/igxl_based_tester/ultraflex/timesets_basic.rb +10 -10
- data/lib/origen_testers/interface.rb +345 -324
- data/lib/origen_testers/memory_style.rb +77 -77
- data/lib/origen_testers/no_interface.rb +7 -7
- data/lib/origen_testers/origen_ext/application/runner.rb +25 -25
- data/lib/origen_testers/origen_ext/generator.rb +54 -54
- data/lib/origen_testers/origen_ext/generator/flow.rb +91 -77
- data/lib/origen_testers/origen_ext/generator/resources.rb +21 -21
- data/lib/origen_testers/origen_ext/pins/pin.rb +78 -78
- data/lib/origen_testers/origen_ext/pins/pin_collection.rb +84 -84
- data/lib/origen_testers/parser.rb +22 -22
- data/lib/origen_testers/parser/description_lookup.rb +62 -62
- data/lib/origen_testers/parser/searchable_array.rb +30 -30
- data/lib/origen_testers/parser/searchable_hash.rb +30 -30
- data/lib/origen_testers/pattern_compilers.rb +116 -116
- data/lib/origen_testers/pattern_compilers/assembler.rb +88 -88
- data/lib/origen_testers/pattern_compilers/job.rb +96 -96
- data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -599
- data/lib/origen_testers/program_generators.rb +62 -62
- data/lib/origen_testers/smartest_based_tester.rb +8 -8
- data/lib/origen_testers/smartest_based_tester/base.rb +576 -567
- data/lib/origen_testers/smartest_based_tester/base/flow.rb +296 -291
- data/lib/origen_testers/smartest_based_tester/base/generator.rb +207 -194
- data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +32 -32
- data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +69 -69
- data/lib/origen_testers/smartest_based_tester/base/processors.rb +16 -16
- data/lib/origen_testers/smartest_based_tester/base/processors/adjacent_if_combiner.rb +106 -106
- data/lib/origen_testers/smartest_based_tester/base/processors/continue_implementer.rb +39 -39
- data/lib/origen_testers/smartest_based_tester/base/processors/empty_branch_cleaner.rb +21 -21
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_run_flag_table.rb +33 -33
- data/lib/origen_testers/smartest_based_tester/base/processors/extract_set_variables.rb +22 -22
- data/lib/origen_testers/smartest_based_tester/base/processors/flag_optimizer.rb +188 -188
- data/lib/origen_testers/smartest_based_tester/base/processors/if_ran_cleaner.rb +34 -34
- data/lib/origen_testers/smartest_based_tester/base/test_method.rb +178 -164
- data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +77 -73
- data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -33
- data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -38
- data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -19
- data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -147
- data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +65 -65
- data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +208 -193
- data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -54
- data/lib/origen_testers/smartest_based_tester/base/variables_file.rb +38 -38
- data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -8
- data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -89
- data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +181 -181
- data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -54
- data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -10
- data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -19
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -10
- data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -10
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -17
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -13
- data/lib/origen_testers/smartest_based_tester/v93k/templates/template.tf.erb +236 -214
- data/lib/origen_testers/smartest_based_tester/v93k/templates/vars.tf.erb +48 -48
- data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -9
- data/lib/origen_testers/smartest_based_tester/v93k/variables_file.rb +10 -10
- data/lib/origen_testers/test/basic_interface.rb +17 -17
- data/lib/origen_testers/test/block.rb +21 -21
- data/lib/origen_testers/test/custom_test_interface.rb +111 -111
- data/lib/origen_testers/test/dut.rb +295 -295
- data/lib/origen_testers/test/dut2.rb +76 -76
- data/lib/origen_testers/test/dut3.rb +244 -244
- data/lib/origen_testers/test/interface.rb +503 -503
- data/lib/origen_testers/test/nvm.rb +94 -94
- data/lib/origen_testers/timing.rb +368 -368
- data/lib/origen_testers/vector.rb +207 -207
- data/lib/origen_testers/vector_based_tester.rb +41 -41
- data/lib/origen_testers/vector_generator.rb +655 -655
- data/lib/origen_testers/vector_pipeline.rb +302 -302
- data/pattern/bitmap.rb +7 -7
- data/pattern/dc_instr.rb +7 -7
- data/pattern/delay.rb +7 -7
- data/pattern/freq_counter.rb +6 -6
- data/pattern/mem_test.rb +8 -8
- data/pattern/multi_vector.rb +122 -122
- data/pattern/multi_vector_plus1.rb +125 -125
- data/pattern/nvm/j750/add_late_pins.rb +3 -3
- data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -8
- data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -8
- data/pattern/nvm/j750/j750_halt.rb +159 -159
- data/pattern/nvm/j750/j750_workout.rb +209 -209
- data/pattern/nvm/j750/timing.rb +73 -73
- data/pattern/read_write_reg.rb +61 -61
- data/pattern/reset.rb +4 -4
- data/pattern/subroutines.rb +69 -69
- data/pattern/tester_overlay.rb +61 -52
- data/pattern/tester_store.rb +28 -28
- data/program/_additional_erase.rb +7 -7
- data/program/_efa_resources.rb +7 -7
- data/program/_erase.rb +25 -25
- data/program/_erase_vfy.rb +5 -5
- data/program/_iv_resources.rb +10 -10
- data/program/basic_interface.rb +5 -5
- data/program/components/_prb1_main.rb +222 -222
- data/program/components/_temp.rb +6 -6
- data/program/custom_tests.rb +10 -10
- data/program/flow_control.rb +422 -422
- data/program/prb1.rb +11 -11
- data/program/prb1_resources.rb +28 -28
- data/program/prb2.rb +27 -27
- data/program/test.rb +29 -29
- data/program/uflex_resources.rb +199 -199
- data/templates/example.txt.erb +53 -53
- data/templates/j750/program_sheet.txt.erb +9 -9
- data/templates/manifest/v93k.yaml.erb +22 -22
- data/templates/web/index.md.erb +51 -51
- data/templates/web/layouts/_basic.html.erb +15 -15
- data/templates/web/partials/_navbar.html.erb +22 -22
- data/templates/web/release_notes.md.erb +5 -5
- metadata +2 -2
data/program/prb1.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
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 interface: 'OrigenTesters::Test::Interface' do
|
|
6
|
-
|
|
7
|
-
self.resources_filename = 'prb1'
|
|
8
|
-
|
|
9
|
-
import 'components/prb1_main'
|
|
10
|
-
|
|
11
|
-
end
|
|
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 interface: 'OrigenTesters::Test::Interface' do
|
|
6
|
+
|
|
7
|
+
self.resources_filename = 'prb1'
|
|
8
|
+
|
|
9
|
+
import 'components/prb1_main'
|
|
10
|
+
|
|
11
|
+
end
|
data/program/prb1_resources.rb
CHANGED
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
# Similar to the test flows an interface instance is passed in as the first argument.
|
|
2
|
-
Resources.create interface: 'OrigenTesters::Test::Interface' 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
|
|
1
|
+
# Similar to the test flows an interface instance is passed in as the first argument.
|
|
2
|
+
Resources.create interface: 'OrigenTesters::Test::Interface' 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
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
# An example of creating an entire test program from
|
|
2
|
-
# a single source file
|
|
3
|
-
Flow.create interface: 'OrigenTesters::Test::Interface' do
|
|
4
|
-
|
|
5
|
-
# Test that this can be overridden from the target at flow-level
|
|
6
|
-
self.add_flow_enable = :enabled
|
|
7
|
-
|
|
8
|
-
self.resources_filename = 'prb2'
|
|
9
|
-
|
|
10
|
-
func :erase_all, :duration => :dynamic
|
|
11
|
-
|
|
12
|
-
func :margin_read1_all1
|
|
13
|
-
|
|
14
|
-
func :erase_all, :duration => :dynamic
|
|
15
|
-
func :margin_read1_all1
|
|
16
|
-
|
|
17
|
-
import 'components/prb2_main'
|
|
18
|
-
|
|
19
|
-
func :erase_all, :duration => :dynamic
|
|
20
|
-
func :margin_read1_all1, :id => 'erased_successfully'
|
|
21
|
-
|
|
22
|
-
if_enable 'extra_tests' do
|
|
23
|
-
import 'components/prb2_main'
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
func :margin_read1_all1
|
|
27
|
-
end
|
|
1
|
+
# An example of creating an entire test program from
|
|
2
|
+
# a single source file
|
|
3
|
+
Flow.create interface: 'OrigenTesters::Test::Interface' do
|
|
4
|
+
|
|
5
|
+
# Test that this can be overridden from the target at flow-level
|
|
6
|
+
self.add_flow_enable = :enabled
|
|
7
|
+
|
|
8
|
+
self.resources_filename = 'prb2'
|
|
9
|
+
|
|
10
|
+
func :erase_all, :duration => :dynamic
|
|
11
|
+
|
|
12
|
+
func :margin_read1_all1
|
|
13
|
+
|
|
14
|
+
func :erase_all, :duration => :dynamic
|
|
15
|
+
func :margin_read1_all1
|
|
16
|
+
|
|
17
|
+
import 'components/prb2_main'
|
|
18
|
+
|
|
19
|
+
func :erase_all, :duration => :dynamic
|
|
20
|
+
func :margin_read1_all1, :id => 'erased_successfully'
|
|
21
|
+
|
|
22
|
+
if_enable 'extra_tests' do
|
|
23
|
+
import 'components/prb2_main'
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
func :margin_read1_all1
|
|
27
|
+
end
|
data/program/test.rb
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
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 interface: 'OrigenTesters::Test::Interface' 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
|
|
17
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45.mV, lo_limit: 35.mV
|
|
18
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45.mV, lo_limit: 35.mV, continue: true
|
|
19
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 2000, lo_limit: 0.01, continue: true
|
|
20
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: "_some_spec", lo_limit: 0.01, continue: true
|
|
21
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: [1, 2]
|
|
22
|
-
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, lo_limit: [1.uA, 2.uA, 3.uA], hi_limit: [4.uA,5.uA], units: "A", defer_limits: true
|
|
23
|
-
|
|
24
|
-
if tester.uflex?
|
|
25
|
-
log "Test of ultraflex render API"
|
|
26
|
-
line = flow.ultraflex.use_limit
|
|
27
|
-
line.units = "Hz"
|
|
28
|
-
end
|
|
29
|
-
end
|
|
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 interface: 'OrigenTesters::Test::Interface' 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
|
|
17
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45.mV, lo_limit: 35.mV
|
|
18
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 45.mV, lo_limit: 35.mV, continue: true
|
|
19
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: 2000, lo_limit: 0.01, continue: true
|
|
20
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: "_some_spec", lo_limit: 0.01, continue: true
|
|
21
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, hi_limit: [1, 2]
|
|
22
|
+
meas :read_pump, tnum: 1050, bin: 119, soft_bin: 2, lo_limit: [1.uA, 2.uA, 3.uA], hi_limit: [4.uA,5.uA], units: "A", defer_limits: true
|
|
23
|
+
|
|
24
|
+
if tester.uflex?
|
|
25
|
+
log "Test of ultraflex render API"
|
|
26
|
+
line = flow.ultraflex.use_limit
|
|
27
|
+
line.units = "Hz"
|
|
28
|
+
end
|
|
29
|
+
end
|
data/program/uflex_resources.rb
CHANGED
|
@@ -1,199 +1,199 @@
|
|
|
1
|
-
Resources.create interface: 'OrigenTesters::Test::Interface' do
|
|
2
|
-
|
|
3
|
-
pinmap :pinmap_test
|
|
4
|
-
|
|
5
|
-
timing_sheet_pins = [:tclk, :tdi, :tdo, :tms]
|
|
6
|
-
|
|
7
|
-
# Define some edge options so we can define some Edge objects
|
|
8
|
-
default_options = {
|
|
9
|
-
d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
|
|
10
|
-
d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
|
|
11
|
-
d0_edge: 'd1_edge', # time at which the input drive is turned on
|
|
12
|
-
d1_edge: 'clkre + 0.25 * cycle', # time of the initial data drive edge
|
|
13
|
-
d2_edge: '', # time of the return format data drive edge
|
|
14
|
-
d3_edge: '', # time at which the input drive is turned off
|
|
15
|
-
c_mode: 'Edge', # output compare mode
|
|
16
|
-
c1_edge: 'clkre + 0.75 * cycle', # time of the initial output compare edge
|
|
17
|
-
c2_edge: '', # time of the final output compare edge (window compare)
|
|
18
|
-
t_res: 'Machine', # timing resolution (possibly ATE-specific)
|
|
19
|
-
clk_per: '' # clock period equation - for use with MCG
|
|
20
|
-
}
|
|
21
|
-
clock_options = {
|
|
22
|
-
d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
|
|
23
|
-
d_fmt: 'RL', # drive data format (NR, RL, RH, etc.)
|
|
24
|
-
d0_edge: 'd1_edge', # time at which the input drive is turned on
|
|
25
|
-
d1_edge: 'clkre', # time of the initial data drive edge
|
|
26
|
-
d2_edge: 'clkre + 0.5 * cycle', # time of the return format data drive edge
|
|
27
|
-
d3_edge: '', # time at which the input drive is turned off
|
|
28
|
-
c_mode: 'Off', # output compare mode
|
|
29
|
-
c1_edge: '', # time of the initial output compare edge
|
|
30
|
-
c2_edge: '', # time of the final output compare edge (window compare)
|
|
31
|
-
t_res: 'Machine', # timing resolution (possibly ATE-specific)
|
|
32
|
-
clk_per: 'mcg_cycle' # clock period equation - for use with MCG
|
|
33
|
-
}
|
|
34
|
-
input_options = {
|
|
35
|
-
d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
|
|
36
|
-
d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
|
|
37
|
-
d0_edge: 'd1_edge', # time at which the input drive is turned on
|
|
38
|
-
d1_edge: 'clkre - jtag_su', # time of the initial data drive edge
|
|
39
|
-
d2_edge: '', # time of the return format data drive edge
|
|
40
|
-
d3_edge: '', # time at which the input drive is turned off
|
|
41
|
-
c_mode: 'Off', # output compare mode
|
|
42
|
-
c1_edge: '', # time of the initial output compare edge
|
|
43
|
-
c2_edge: '', # time of the final output compare edge (window compare)
|
|
44
|
-
t_res: 'Machine', # timing resolution (possibly ATE-specific)
|
|
45
|
-
clk_per: '' # clock period equation - for use with MCG
|
|
46
|
-
}
|
|
47
|
-
output_options = {
|
|
48
|
-
d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
|
|
49
|
-
d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
|
|
50
|
-
d0_edge: 'd1_edge', # time at which the input drive is turned on
|
|
51
|
-
d1_edge: 'clkre', # time of the initial data drive edge
|
|
52
|
-
d2_edge: '', # time of the return format data drive edge
|
|
53
|
-
d3_edge: '', # time at which the input drive is turned off
|
|
54
|
-
c_mode: 'Edge', # output compare mode
|
|
55
|
-
c1_edge: 'clkre + jtag_ov', # time of the initial output compare edge
|
|
56
|
-
c2_edge: '', # time of the final output compare edge (window compare)
|
|
57
|
-
t_res: 'Machine', # timing resolution (possibly ATE-specific)
|
|
58
|
-
clk_per: '' # clock period equation - for use with MCG
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
# Define the Edge objects that you want to use later to construct edgesets/timesets
|
|
62
|
-
# * the interface puts these in 'edge_collection'
|
|
63
|
-
# FORMAT: edge <timing category>, <pin_name/type>, <edge options>
|
|
64
|
-
edge :default, :default, default_options
|
|
65
|
-
edge :clock, :clk, clock_options
|
|
66
|
-
edge :input, :default, input_options
|
|
67
|
-
edge :output, :default, output_options
|
|
68
|
-
|
|
69
|
-
# Assign edges to the pins for edgeset sheet ':func'
|
|
70
|
-
# * assign all pins some default timing for starters...
|
|
71
|
-
# * importing edgesets will automatically populate ac_specset variables contained within the equations
|
|
72
|
-
# FORMAT: edgeset <edgeset sheet name>, edgeset: <edgeset>, pin: <pin_name>, edge: <edge_object>, es_sheet_pins: <array of pins>, spec_sheet: <AC specsheet name>
|
|
73
|
-
edgeset :func, edgeset: :default, pin: :tclk, edge: edge_collection.edges[:default][:default], spec_sheet: :func, es_sheet_pins: timing_sheet_pins
|
|
74
|
-
edgeset :func, edgeset: :default, pin: :tms, edge: edge_collection.edges[:default][:default], spec_sheet: :func
|
|
75
|
-
edgeset :func, edgeset: :default, pin: :tdi, edge: edge_collection.edges[:default][:default], spec_sheet: :func
|
|
76
|
-
edgeset :func, edgeset: :default, pin: :tdo, edge: edge_collection.edges[:default][:default], spec_sheet: :func
|
|
77
|
-
# * now assign pins some more meaningful timing for JTAG operation...
|
|
78
|
-
edgeset :func, edgeset: :es_jtag, pin: :tclk, edge: edge_collection.edges[:clock][:clk], spec_sheet: :func, es_sheet_pins: timing_sheet_pins
|
|
79
|
-
edgeset :func, edgeset: :es_jtag, pin: :tms, edge: edge_collection.edges[:input][:default], spec_sheet: :func
|
|
80
|
-
edgeset :func, edgeset: :es_jtag, pin: :tdi, edge: edge_collection.edges[:input][:default], spec_sheet: :func
|
|
81
|
-
edgeset :func, edgeset: :es_jtag, pin: :tdo, edge: edge_collection.edges[:output][:default], spec_sheet: :func
|
|
82
|
-
|
|
83
|
-
# Assign edges to the pins for timeset sheet ':func'
|
|
84
|
-
# * first a :default timeset
|
|
85
|
-
# FORMAT: timeset <timset sheet name>, timeset: <timeset>, pin: <pin_name>, eset: <edgeset name>, ts_sheet_pins: <array of pins>
|
|
86
|
-
timeset :func, timeset: :default, pin: :tclk, eset: :default, ts_sheet_pins: timing_sheet_pins
|
|
87
|
-
timeset :func, timeset: :default, pin: :tms, eset: :default
|
|
88
|
-
timeset :func, timeset: :default, pin: :tdi, eset: :default
|
|
89
|
-
timeset :func, timeset: :default, pin: :tdo, eset: :default
|
|
90
|
-
# * now a :jtag timeset
|
|
91
|
-
timeset :func, timeset: :jtag, pin: :tclk, eset: :es_jtag, ts_sheet_pins: timing_sheet_pins
|
|
92
|
-
timeset :func, timeset: :jtag, pin: :tms, eset: :es_jtag
|
|
93
|
-
timeset :func, timeset: :jtag, pin: :tdi, eset: :es_jtag
|
|
94
|
-
timeset :func, timeset: :jtag, pin: :tdo, eset: :es_jtag
|
|
95
|
-
|
|
96
|
-
# Now repeat the timing generation process to create a timeset_basic sheet
|
|
97
|
-
edgeset :func_tsb, edgeset: :default, pin: :tclk, edge: edge_collection.edges[:default][:default], spec_sheet: :func, es_sheet_pins: timing_sheet_pins, timeset_basic: true
|
|
98
|
-
edgeset :func_tsb, edgeset: :default, pin: :tms, edge: edge_collection.edges[:default][:default], spec_sheet: :func
|
|
99
|
-
edgeset :func_tsb, edgeset: :default, pin: :tdi, edge: edge_collection.edges[:default][:default], spec_sheet: :func
|
|
100
|
-
edgeset :func_tsb, edgeset: :default, pin: :tdo, edge: edge_collection.edges[:default][:default], spec_sheet: :func
|
|
101
|
-
# * now assign pins some more meaningful timing for JTAG operation...
|
|
102
|
-
edgeset :func_tsb, edgeset: :es_jtag, pin: :tclk, edge: edge_collection.edges[:clock][:clk], spec_sheet: :func, es_sheet_pins: timing_sheet_pins, timeset_basic: true
|
|
103
|
-
edgeset :func_tsb, edgeset: :es_jtag, pin: :tms, edge: edge_collection.edges[:input][:default], spec_sheet: :func
|
|
104
|
-
edgeset :func_tsb, edgeset: :es_jtag, pin: :tdi, edge: edge_collection.edges[:input][:default], spec_sheet: :func
|
|
105
|
-
edgeset :func_tsb, edgeset: :es_jtag, pin: :tdo, edge: edge_collection.edges[:output][:default], spec_sheet: :func
|
|
106
|
-
|
|
107
|
-
# Assign edges to the pins for timeset sheet ':func'
|
|
108
|
-
# * first a :default timeset
|
|
109
|
-
# FORMAT: timeset <timset sheet name>, timeset: <timeset>, pin: <pin_name>, eset: <edgeset name>, ts_sheet_pins: <array of pins>
|
|
110
|
-
timeset :func_tsb, timeset: :default, pin: :tclk, eset: :default, ts_sheet_pins: timing_sheet_pins, timeset_basic: true
|
|
111
|
-
timeset :func_tsb, timeset: :default, pin: :tms, eset: :default
|
|
112
|
-
timeset :func_tsb, timeset: :default, pin: :tdi, eset: :default
|
|
113
|
-
timeset :func_tsb, timeset: :default, pin: :tdo, eset: :default
|
|
114
|
-
# * now a :jtag timeset
|
|
115
|
-
timeset :func_tsb, timeset: :jtag, pin: :tclk, eset: :es_jtag, ts_sheet_pins: timing_sheet_pins, timeset_basic: true
|
|
116
|
-
timeset :func_tsb, timeset: :jtag, pin: :tms, eset: :es_jtag
|
|
117
|
-
timeset :func_tsb, timeset: :jtag, pin: :tdi, eset: :es_jtag
|
|
118
|
-
timeset :func_tsb, timeset: :jtag, pin: :tdo, eset: :es_jtag
|
|
119
|
-
|
|
120
|
-
# * now define a few more AC specs and values
|
|
121
|
-
ac_specset :func, 'cycle', specset: :func_100MHz, nom: { min: '9*ns', typ: '10*ns', max: '11*ns' }
|
|
122
|
-
ac_specset :func, 'cycle', specset: :func_125MHz, nom: { min: '7*ns', typ: '8*ns', max: '9*ns' }
|
|
123
|
-
ac_specset :func, 'new_var1', specset: :func_100MHz, nom: { min: '1*ns', typ: '2*ns', max: '3*ns' }
|
|
124
|
-
ac_specset :func, 'new_var2', specset: :func_125MHz, nom: { min: '4*ns', typ: '5*ns', max: '6*ns' }
|
|
125
|
-
|
|
126
|
-
level_sheet_pins = [:vdd1, :vdd2, :tclk, :tdi, :tdo, :tms]
|
|
127
|
-
|
|
128
|
-
# Define some level options so we can define some Level objects
|
|
129
|
-
pwr_options = {
|
|
130
|
-
vmain: 'vdd_main_val', # Main supply voltage
|
|
131
|
-
valt: 'vdd_alt_val', # Alternate supply voltage
|
|
132
|
-
ifold: 'fold_val', # Supply clamp current
|
|
133
|
-
delay: 'delay_val' # Supply power-up delay
|
|
134
|
-
}
|
|
135
|
-
se_pin_options1 = {
|
|
136
|
-
vil: 'pin_supply * 0.25', # Input drive low
|
|
137
|
-
vih: 'pin_supply * 0.75', # Input drive high
|
|
138
|
-
vol: 'pin_supply * 0.45', # Output compare low
|
|
139
|
-
voh: 'pin_supply * 0.55', # Output compare high
|
|
140
|
-
vcl: 'vclamp_low', # Voltage clamp low
|
|
141
|
-
vch: 'vclamp_low', # Voltage clamp high
|
|
142
|
-
vt: 'pin_supply * 0.50', # Termination voltage
|
|
143
|
-
voutlotyp: '0', #
|
|
144
|
-
vouthityp: '0', #
|
|
145
|
-
dmode: 'Largeswing-VT' # Driver mode (possibly ATE-specific)
|
|
146
|
-
}
|
|
147
|
-
se_pin_options2 = {
|
|
148
|
-
vil: 'pin_supply * 0.10', # Input drive low
|
|
149
|
-
vih: 'pin_supply * 0.90', # Input drive high
|
|
150
|
-
vol: 'pin_supply * 0.50', # Output compare low
|
|
151
|
-
voh: 'pin_supply * 0.50', # Output compare high
|
|
152
|
-
vcl: 'vclamp_low', # Voltage clamp low
|
|
153
|
-
vch: 'vclamp_low', # Voltage clamp high
|
|
154
|
-
vt: 'pin_supply * 0.50', # Termination voltage
|
|
155
|
-
voutlotyp: '0', #
|
|
156
|
-
vouthityp: '0', #
|
|
157
|
-
dmode: 'Largeswing-VT' # Driver mode (possibly ATE-specific)
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
# Define the Level objects that you want to use later to construct edgesets/timesets
|
|
161
|
-
# * the interface puts these in 'level_collection'
|
|
162
|
-
# FORMAT: level <level category>, <level options>
|
|
163
|
-
pwr_level :pwr, pwr_options
|
|
164
|
-
pin_level_se :pin_type1, se_pin_options1
|
|
165
|
-
pin_level_se :pin_type2, se_pin_options2
|
|
166
|
-
|
|
167
|
-
# Assign levels to the pins for levelset sheet ':func'
|
|
168
|
-
# * assign all pins some default levels for starters...
|
|
169
|
-
# * importing levelsets will automatically populate dc_specset variables contained within the equations
|
|
170
|
-
# FORMAT: levelset <levelset sheet name>, pin: <pin_name>, level: <level_object>, es_sheet_pins: <array of pins>, spec_sheet: <AC specsheet name>
|
|
171
|
-
levelset :func, pin: :vdd1, level: level_collection.pwr_group[:pwr], spec_sheet: :func, ls_sheet_pins: level_sheet_pins
|
|
172
|
-
levelset :func, pin: :vdd2, level: level_collection.pwr_group[:pwr], spec_sheet: :func
|
|
173
|
-
levelset :func, pin: :tclk, level: level_collection.pin_group[:pin_type1], spec_sheet: :func
|
|
174
|
-
levelset :func, pin: :tms, level: level_collection.pin_group[:pin_type2], spec_sheet: :func
|
|
175
|
-
levelset :func, pin: :tdi, level: level_collection.pin_group[:pin_type1], spec_sheet: :func
|
|
176
|
-
levelset :func, pin: :tdo, level: level_collection.pin_group[:pin_type2], spec_sheet: :func
|
|
177
|
-
|
|
178
|
-
# * now define a few more DC specs and values
|
|
179
|
-
dc_specset :func, 'vdd_main_val', specset: :power_down_levels, min: { min: '0.1*V' }, nom: { typ: '0.2*V' }, max: { max: '0.3*V' }
|
|
180
|
-
dc_specset :func, 'vdd_alt_val', specset: :power_down_levels, min: { min: '7*V' }, nom: { typ: '8*V' }, max: { max: '9*V' }
|
|
181
|
-
dc_specset :func, 'current1', specset: :power_up_levels, min: { min: '1*mA' }, nom: { typ: '2*mA' }, max: { max: '3*mA' }
|
|
182
|
-
dc_specset :func, 'voltage1', specset: :power_up_levels, min: { min: '4*mV' }, nom: { typ: '5*mV' }, max: { max: '6*mV' }
|
|
183
|
-
|
|
184
|
-
# Define some global variables that will generate a Globals sheet
|
|
185
|
-
global_spec :spec1, job: 'FT', value: '17', comment: 'entering spec1'
|
|
186
|
-
global_spec :spec2, job: 'WT', value: '18', comment: 'entering spec2'
|
|
187
|
-
global_spec :spec3, job: 'FT1', value: '19', comment: 'entering spec3'
|
|
188
|
-
global_spec :spec4, job: 'WT1', value: '20', comment: 'entering spec4'
|
|
189
|
-
|
|
190
|
-
# Collect all the currently generated sheets and include them in the FT job
|
|
191
|
-
job_def 'FT'
|
|
192
|
-
|
|
193
|
-
# Add a couple additional flow sheets to define the WT job
|
|
194
|
-
job_def 'WT', flows: ['WT_flow1', 'WT_flow2']
|
|
195
|
-
|
|
196
|
-
# Add a couple of files to the references sheet
|
|
197
|
-
reference '.\inc\file1.xla', comment: 'Block1'
|
|
198
|
-
reference '.\inc\file2.xla', comment: 'Block2'
|
|
199
|
-
end
|
|
1
|
+
Resources.create interface: 'OrigenTesters::Test::Interface' do
|
|
2
|
+
|
|
3
|
+
pinmap :pinmap_test
|
|
4
|
+
|
|
5
|
+
timing_sheet_pins = [:tclk, :tdi, :tdo, :tms]
|
|
6
|
+
|
|
7
|
+
# Define some edge options so we can define some Edge objects
|
|
8
|
+
default_options = {
|
|
9
|
+
d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
|
|
10
|
+
d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
|
|
11
|
+
d0_edge: 'd1_edge', # time at which the input drive is turned on
|
|
12
|
+
d1_edge: 'clkre + 0.25 * cycle', # time of the initial data drive edge
|
|
13
|
+
d2_edge: '', # time of the return format data drive edge
|
|
14
|
+
d3_edge: '', # time at which the input drive is turned off
|
|
15
|
+
c_mode: 'Edge', # output compare mode
|
|
16
|
+
c1_edge: 'clkre + 0.75 * cycle', # time of the initial output compare edge
|
|
17
|
+
c2_edge: '', # time of the final output compare edge (window compare)
|
|
18
|
+
t_res: 'Machine', # timing resolution (possibly ATE-specific)
|
|
19
|
+
clk_per: '' # clock period equation - for use with MCG
|
|
20
|
+
}
|
|
21
|
+
clock_options = {
|
|
22
|
+
d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
|
|
23
|
+
d_fmt: 'RL', # drive data format (NR, RL, RH, etc.)
|
|
24
|
+
d0_edge: 'd1_edge', # time at which the input drive is turned on
|
|
25
|
+
d1_edge: 'clkre', # time of the initial data drive edge
|
|
26
|
+
d2_edge: 'clkre + 0.5 * cycle', # time of the return format data drive edge
|
|
27
|
+
d3_edge: '', # time at which the input drive is turned off
|
|
28
|
+
c_mode: 'Off', # output compare mode
|
|
29
|
+
c1_edge: '', # time of the initial output compare edge
|
|
30
|
+
c2_edge: '', # time of the final output compare edge (window compare)
|
|
31
|
+
t_res: 'Machine', # timing resolution (possibly ATE-specific)
|
|
32
|
+
clk_per: 'mcg_cycle' # clock period equation - for use with MCG
|
|
33
|
+
}
|
|
34
|
+
input_options = {
|
|
35
|
+
d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
|
|
36
|
+
d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
|
|
37
|
+
d0_edge: 'd1_edge', # time at which the input drive is turned on
|
|
38
|
+
d1_edge: 'clkre - jtag_su', # time of the initial data drive edge
|
|
39
|
+
d2_edge: '', # time of the return format data drive edge
|
|
40
|
+
d3_edge: '', # time at which the input drive is turned off
|
|
41
|
+
c_mode: 'Off', # output compare mode
|
|
42
|
+
c1_edge: '', # time of the initial output compare edge
|
|
43
|
+
c2_edge: '', # time of the final output compare edge (window compare)
|
|
44
|
+
t_res: 'Machine', # timing resolution (possibly ATE-specific)
|
|
45
|
+
clk_per: '' # clock period equation - for use with MCG
|
|
46
|
+
}
|
|
47
|
+
output_options = {
|
|
48
|
+
d_src: 'PAT', # source of the channel drive data (e.g. pattern, drive_hi, drive_lo, etc.)
|
|
49
|
+
d_fmt: 'NR', # drive data format (NR, RL, RH, etc.)
|
|
50
|
+
d0_edge: 'd1_edge', # time at which the input drive is turned on
|
|
51
|
+
d1_edge: 'clkre', # time of the initial data drive edge
|
|
52
|
+
d2_edge: '', # time of the return format data drive edge
|
|
53
|
+
d3_edge: '', # time at which the input drive is turned off
|
|
54
|
+
c_mode: 'Edge', # output compare mode
|
|
55
|
+
c1_edge: 'clkre + jtag_ov', # time of the initial output compare edge
|
|
56
|
+
c2_edge: '', # time of the final output compare edge (window compare)
|
|
57
|
+
t_res: 'Machine', # timing resolution (possibly ATE-specific)
|
|
58
|
+
clk_per: '' # clock period equation - for use with MCG
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
# Define the Edge objects that you want to use later to construct edgesets/timesets
|
|
62
|
+
# * the interface puts these in 'edge_collection'
|
|
63
|
+
# FORMAT: edge <timing category>, <pin_name/type>, <edge options>
|
|
64
|
+
edge :default, :default, default_options
|
|
65
|
+
edge :clock, :clk, clock_options
|
|
66
|
+
edge :input, :default, input_options
|
|
67
|
+
edge :output, :default, output_options
|
|
68
|
+
|
|
69
|
+
# Assign edges to the pins for edgeset sheet ':func'
|
|
70
|
+
# * assign all pins some default timing for starters...
|
|
71
|
+
# * importing edgesets will automatically populate ac_specset variables contained within the equations
|
|
72
|
+
# FORMAT: edgeset <edgeset sheet name>, edgeset: <edgeset>, pin: <pin_name>, edge: <edge_object>, es_sheet_pins: <array of pins>, spec_sheet: <AC specsheet name>
|
|
73
|
+
edgeset :func, edgeset: :default, pin: :tclk, edge: edge_collection.edges[:default][:default], spec_sheet: :func, es_sheet_pins: timing_sheet_pins
|
|
74
|
+
edgeset :func, edgeset: :default, pin: :tms, edge: edge_collection.edges[:default][:default], spec_sheet: :func
|
|
75
|
+
edgeset :func, edgeset: :default, pin: :tdi, edge: edge_collection.edges[:default][:default], spec_sheet: :func
|
|
76
|
+
edgeset :func, edgeset: :default, pin: :tdo, edge: edge_collection.edges[:default][:default], spec_sheet: :func
|
|
77
|
+
# * now assign pins some more meaningful timing for JTAG operation...
|
|
78
|
+
edgeset :func, edgeset: :es_jtag, pin: :tclk, edge: edge_collection.edges[:clock][:clk], spec_sheet: :func, es_sheet_pins: timing_sheet_pins
|
|
79
|
+
edgeset :func, edgeset: :es_jtag, pin: :tms, edge: edge_collection.edges[:input][:default], spec_sheet: :func
|
|
80
|
+
edgeset :func, edgeset: :es_jtag, pin: :tdi, edge: edge_collection.edges[:input][:default], spec_sheet: :func
|
|
81
|
+
edgeset :func, edgeset: :es_jtag, pin: :tdo, edge: edge_collection.edges[:output][:default], spec_sheet: :func
|
|
82
|
+
|
|
83
|
+
# Assign edges to the pins for timeset sheet ':func'
|
|
84
|
+
# * first a :default timeset
|
|
85
|
+
# FORMAT: timeset <timset sheet name>, timeset: <timeset>, pin: <pin_name>, eset: <edgeset name>, ts_sheet_pins: <array of pins>
|
|
86
|
+
timeset :func, timeset: :default, pin: :tclk, eset: :default, ts_sheet_pins: timing_sheet_pins
|
|
87
|
+
timeset :func, timeset: :default, pin: :tms, eset: :default
|
|
88
|
+
timeset :func, timeset: :default, pin: :tdi, eset: :default
|
|
89
|
+
timeset :func, timeset: :default, pin: :tdo, eset: :default
|
|
90
|
+
# * now a :jtag timeset
|
|
91
|
+
timeset :func, timeset: :jtag, pin: :tclk, eset: :es_jtag, ts_sheet_pins: timing_sheet_pins
|
|
92
|
+
timeset :func, timeset: :jtag, pin: :tms, eset: :es_jtag
|
|
93
|
+
timeset :func, timeset: :jtag, pin: :tdi, eset: :es_jtag
|
|
94
|
+
timeset :func, timeset: :jtag, pin: :tdo, eset: :es_jtag
|
|
95
|
+
|
|
96
|
+
# Now repeat the timing generation process to create a timeset_basic sheet
|
|
97
|
+
edgeset :func_tsb, edgeset: :default, pin: :tclk, edge: edge_collection.edges[:default][:default], spec_sheet: :func, es_sheet_pins: timing_sheet_pins, timeset_basic: true
|
|
98
|
+
edgeset :func_tsb, edgeset: :default, pin: :tms, edge: edge_collection.edges[:default][:default], spec_sheet: :func
|
|
99
|
+
edgeset :func_tsb, edgeset: :default, pin: :tdi, edge: edge_collection.edges[:default][:default], spec_sheet: :func
|
|
100
|
+
edgeset :func_tsb, edgeset: :default, pin: :tdo, edge: edge_collection.edges[:default][:default], spec_sheet: :func
|
|
101
|
+
# * now assign pins some more meaningful timing for JTAG operation...
|
|
102
|
+
edgeset :func_tsb, edgeset: :es_jtag, pin: :tclk, edge: edge_collection.edges[:clock][:clk], spec_sheet: :func, es_sheet_pins: timing_sheet_pins, timeset_basic: true
|
|
103
|
+
edgeset :func_tsb, edgeset: :es_jtag, pin: :tms, edge: edge_collection.edges[:input][:default], spec_sheet: :func
|
|
104
|
+
edgeset :func_tsb, edgeset: :es_jtag, pin: :tdi, edge: edge_collection.edges[:input][:default], spec_sheet: :func
|
|
105
|
+
edgeset :func_tsb, edgeset: :es_jtag, pin: :tdo, edge: edge_collection.edges[:output][:default], spec_sheet: :func
|
|
106
|
+
|
|
107
|
+
# Assign edges to the pins for timeset sheet ':func'
|
|
108
|
+
# * first a :default timeset
|
|
109
|
+
# FORMAT: timeset <timset sheet name>, timeset: <timeset>, pin: <pin_name>, eset: <edgeset name>, ts_sheet_pins: <array of pins>
|
|
110
|
+
timeset :func_tsb, timeset: :default, pin: :tclk, eset: :default, ts_sheet_pins: timing_sheet_pins, timeset_basic: true
|
|
111
|
+
timeset :func_tsb, timeset: :default, pin: :tms, eset: :default
|
|
112
|
+
timeset :func_tsb, timeset: :default, pin: :tdi, eset: :default
|
|
113
|
+
timeset :func_tsb, timeset: :default, pin: :tdo, eset: :default
|
|
114
|
+
# * now a :jtag timeset
|
|
115
|
+
timeset :func_tsb, timeset: :jtag, pin: :tclk, eset: :es_jtag, ts_sheet_pins: timing_sheet_pins, timeset_basic: true
|
|
116
|
+
timeset :func_tsb, timeset: :jtag, pin: :tms, eset: :es_jtag
|
|
117
|
+
timeset :func_tsb, timeset: :jtag, pin: :tdi, eset: :es_jtag
|
|
118
|
+
timeset :func_tsb, timeset: :jtag, pin: :tdo, eset: :es_jtag
|
|
119
|
+
|
|
120
|
+
# * now define a few more AC specs and values
|
|
121
|
+
ac_specset :func, 'cycle', specset: :func_100MHz, nom: { min: '9*ns', typ: '10*ns', max: '11*ns' }
|
|
122
|
+
ac_specset :func, 'cycle', specset: :func_125MHz, nom: { min: '7*ns', typ: '8*ns', max: '9*ns' }
|
|
123
|
+
ac_specset :func, 'new_var1', specset: :func_100MHz, nom: { min: '1*ns', typ: '2*ns', max: '3*ns' }
|
|
124
|
+
ac_specset :func, 'new_var2', specset: :func_125MHz, nom: { min: '4*ns', typ: '5*ns', max: '6*ns' }
|
|
125
|
+
|
|
126
|
+
level_sheet_pins = [:vdd1, :vdd2, :tclk, :tdi, :tdo, :tms]
|
|
127
|
+
|
|
128
|
+
# Define some level options so we can define some Level objects
|
|
129
|
+
pwr_options = {
|
|
130
|
+
vmain: 'vdd_main_val', # Main supply voltage
|
|
131
|
+
valt: 'vdd_alt_val', # Alternate supply voltage
|
|
132
|
+
ifold: 'fold_val', # Supply clamp current
|
|
133
|
+
delay: 'delay_val' # Supply power-up delay
|
|
134
|
+
}
|
|
135
|
+
se_pin_options1 = {
|
|
136
|
+
vil: 'pin_supply * 0.25', # Input drive low
|
|
137
|
+
vih: 'pin_supply * 0.75', # Input drive high
|
|
138
|
+
vol: 'pin_supply * 0.45', # Output compare low
|
|
139
|
+
voh: 'pin_supply * 0.55', # Output compare high
|
|
140
|
+
vcl: 'vclamp_low', # Voltage clamp low
|
|
141
|
+
vch: 'vclamp_low', # Voltage clamp high
|
|
142
|
+
vt: 'pin_supply * 0.50', # Termination voltage
|
|
143
|
+
voutlotyp: '0', #
|
|
144
|
+
vouthityp: '0', #
|
|
145
|
+
dmode: 'Largeswing-VT' # Driver mode (possibly ATE-specific)
|
|
146
|
+
}
|
|
147
|
+
se_pin_options2 = {
|
|
148
|
+
vil: 'pin_supply * 0.10', # Input drive low
|
|
149
|
+
vih: 'pin_supply * 0.90', # Input drive high
|
|
150
|
+
vol: 'pin_supply * 0.50', # Output compare low
|
|
151
|
+
voh: 'pin_supply * 0.50', # Output compare high
|
|
152
|
+
vcl: 'vclamp_low', # Voltage clamp low
|
|
153
|
+
vch: 'vclamp_low', # Voltage clamp high
|
|
154
|
+
vt: 'pin_supply * 0.50', # Termination voltage
|
|
155
|
+
voutlotyp: '0', #
|
|
156
|
+
vouthityp: '0', #
|
|
157
|
+
dmode: 'Largeswing-VT' # Driver mode (possibly ATE-specific)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
# Define the Level objects that you want to use later to construct edgesets/timesets
|
|
161
|
+
# * the interface puts these in 'level_collection'
|
|
162
|
+
# FORMAT: level <level category>, <level options>
|
|
163
|
+
pwr_level :pwr, pwr_options
|
|
164
|
+
pin_level_se :pin_type1, se_pin_options1
|
|
165
|
+
pin_level_se :pin_type2, se_pin_options2
|
|
166
|
+
|
|
167
|
+
# Assign levels to the pins for levelset sheet ':func'
|
|
168
|
+
# * assign all pins some default levels for starters...
|
|
169
|
+
# * importing levelsets will automatically populate dc_specset variables contained within the equations
|
|
170
|
+
# FORMAT: levelset <levelset sheet name>, pin: <pin_name>, level: <level_object>, es_sheet_pins: <array of pins>, spec_sheet: <AC specsheet name>
|
|
171
|
+
levelset :func, pin: :vdd1, level: level_collection.pwr_group[:pwr], spec_sheet: :func, ls_sheet_pins: level_sheet_pins
|
|
172
|
+
levelset :func, pin: :vdd2, level: level_collection.pwr_group[:pwr], spec_sheet: :func
|
|
173
|
+
levelset :func, pin: :tclk, level: level_collection.pin_group[:pin_type1], spec_sheet: :func
|
|
174
|
+
levelset :func, pin: :tms, level: level_collection.pin_group[:pin_type2], spec_sheet: :func
|
|
175
|
+
levelset :func, pin: :tdi, level: level_collection.pin_group[:pin_type1], spec_sheet: :func
|
|
176
|
+
levelset :func, pin: :tdo, level: level_collection.pin_group[:pin_type2], spec_sheet: :func
|
|
177
|
+
|
|
178
|
+
# * now define a few more DC specs and values
|
|
179
|
+
dc_specset :func, 'vdd_main_val', specset: :power_down_levels, min: { min: '0.1*V' }, nom: { typ: '0.2*V' }, max: { max: '0.3*V' }
|
|
180
|
+
dc_specset :func, 'vdd_alt_val', specset: :power_down_levels, min: { min: '7*V' }, nom: { typ: '8*V' }, max: { max: '9*V' }
|
|
181
|
+
dc_specset :func, 'current1', specset: :power_up_levels, min: { min: '1*mA' }, nom: { typ: '2*mA' }, max: { max: '3*mA' }
|
|
182
|
+
dc_specset :func, 'voltage1', specset: :power_up_levels, min: { min: '4*mV' }, nom: { typ: '5*mV' }, max: { max: '6*mV' }
|
|
183
|
+
|
|
184
|
+
# Define some global variables that will generate a Globals sheet
|
|
185
|
+
global_spec :spec1, job: 'FT', value: '17', comment: 'entering spec1'
|
|
186
|
+
global_spec :spec2, job: 'WT', value: '18', comment: 'entering spec2'
|
|
187
|
+
global_spec :spec3, job: 'FT1', value: '19', comment: 'entering spec3'
|
|
188
|
+
global_spec :spec4, job: 'WT1', value: '20', comment: 'entering spec4'
|
|
189
|
+
|
|
190
|
+
# Collect all the currently generated sheets and include them in the FT job
|
|
191
|
+
job_def 'FT'
|
|
192
|
+
|
|
193
|
+
# Add a couple additional flow sheets to define the WT job
|
|
194
|
+
job_def 'WT', flows: ['WT_flow1', 'WT_flow2']
|
|
195
|
+
|
|
196
|
+
# Add a couple of files to the references sheet
|
|
197
|
+
reference '.\inc\file1.xla', comment: 'Block1'
|
|
198
|
+
reference '.\inc\file2.xla', comment: 'Block2'
|
|
199
|
+
end
|