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
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
Pattern.create do
|
|
2
|
+
|
|
3
|
+
ss "Test that basic cycling works"
|
|
4
|
+
$tester.cycle
|
|
5
|
+
10.times do
|
|
6
|
+
$nvm.pin(:invoke).drive(1)
|
|
7
|
+
$tester.cycle
|
|
8
|
+
end
|
|
9
|
+
10.times do |i|
|
|
10
|
+
$nvm.pin(:invoke).drive(i.even? ? 0 : 1)
|
|
11
|
+
$tester.cycle
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
ss "Test that the port API works"
|
|
15
|
+
$nvm.port(:porta).drive(0x55)
|
|
16
|
+
$tester.cycle
|
|
17
|
+
$nvm.port(:porta).expect(0xAA)
|
|
18
|
+
$tester.cycle
|
|
19
|
+
$nvm.port(:porta).drive!(0x55)
|
|
20
|
+
$nvm.port(:porta).dont_care!
|
|
21
|
+
$nvm.port(:porta).drive_hi!
|
|
22
|
+
$nvm.port(:porta).drive_very_hi!
|
|
23
|
+
$nvm.port(:porta).drive_lo!
|
|
24
|
+
$nvm.port(:porta).assert_hi!
|
|
25
|
+
$nvm.port(:porta).assert_lo!
|
|
26
|
+
$nvm.port(:porta).drive_lo
|
|
27
|
+
|
|
28
|
+
ss "Test that the store method works"
|
|
29
|
+
cc "This vector should capture the FAIL pin data"
|
|
30
|
+
$tester.cycle
|
|
31
|
+
$tester.store $nvm.pin(:fail)
|
|
32
|
+
$tester.cycle
|
|
33
|
+
cc "This vector should capture the FAIL pin and the PORTA data"
|
|
34
|
+
$tester.cycle
|
|
35
|
+
$tester.cycle
|
|
36
|
+
$tester.cycle
|
|
37
|
+
$tester.store $nvm.pin(:fail), $nvm.port(:porta), :offset => -2
|
|
38
|
+
$tester.cycle
|
|
39
|
+
$tester.store_next_cycle $nvm.pin(:fail)
|
|
40
|
+
cc "This vector should capture the FAIL pin data"
|
|
41
|
+
$tester.cycle
|
|
42
|
+
|
|
43
|
+
ss "Test calling a subroutine"
|
|
44
|
+
cc "This vector should call subroutine 'sub1'"
|
|
45
|
+
$tester.cycle
|
|
46
|
+
$tester.call_subroutine("sub1")
|
|
47
|
+
cc "This vector should call subroutine 'sub2'"
|
|
48
|
+
$tester.cycle
|
|
49
|
+
$tester.cycle
|
|
50
|
+
$tester.call_subroutine("sub2", :offset => -1)
|
|
51
|
+
|
|
52
|
+
# ss "Test generating a handshake inside a subroutine"
|
|
53
|
+
# cc "The next line should have a global label 'sub3', but no vector"
|
|
54
|
+
# $tester.start_subroutine("sub3")
|
|
55
|
+
# $tester.handshake
|
|
56
|
+
# cc "This vector should have a return statement"
|
|
57
|
+
# $tester.cycle
|
|
58
|
+
# $tester.end_subroutine
|
|
59
|
+
#
|
|
60
|
+
# ss "Test generating a handshake with a readcode"
|
|
61
|
+
# $tester.handshake(:readcode => 10)
|
|
62
|
+
#
|
|
63
|
+
# ss "Test frequency counter"
|
|
64
|
+
# $tester.freq_count($nvm.pin(:dtst), :readcode => 33)
|
|
65
|
+
|
|
66
|
+
ss "Test a single pin match loop"
|
|
67
|
+
$tester.wait(:match => true, :time_in_us => 5000, :pin => $nvm.pin(:done), :state => :high)
|
|
68
|
+
|
|
69
|
+
ss "Test a two pin match loop"
|
|
70
|
+
$tester.wait(:match => true, :time_in_us => 5000,
|
|
71
|
+
:pin => $nvm.pin(:done), :state => :high,
|
|
72
|
+
:pin2 => $nvm.pin(:fail), :state2 => :low)
|
|
73
|
+
$nvm.pin(:fail).assert(0)
|
|
74
|
+
|
|
75
|
+
ss "Test looping, these vectors should be executed once"
|
|
76
|
+
$tester.loop_vector("test_loop_1", 1) do
|
|
77
|
+
$nvm.port(:porta).drive(0xAA)
|
|
78
|
+
$tester.cycle
|
|
79
|
+
$nvm.port(:porta).drive(0x55)
|
|
80
|
+
$tester.cycle
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
ss "Test looping, these vectors should be executed 3 times"
|
|
84
|
+
$tester.loop_vector("test_loop_2", 3) do
|
|
85
|
+
$nvm.port(:porta).drive(0xAA)
|
|
86
|
+
$tester.cycle
|
|
87
|
+
$nvm.port(:porta).drive(0x55)
|
|
88
|
+
$tester.cycle
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
ss "Test looping, these vectors should be executed 5 times"
|
|
92
|
+
$tester.loop_vectors 5 do
|
|
93
|
+
$nvm.port(:porta).drive(0xAA)
|
|
94
|
+
$tester.cycle
|
|
95
|
+
$nvm.port(:porta).drive(0x55)
|
|
96
|
+
$tester.cycle
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
# ss "Test repeat_previous"
|
|
100
|
+
# $tester.cycle
|
|
101
|
+
# cc "Invoke should repeat previous for 10 cycles"
|
|
102
|
+
# $nvm.pin(:invoke).repeat_previous = true
|
|
103
|
+
# 10.cycles
|
|
104
|
+
# $nvm.pin(:invoke).repeat_previous = false
|
|
105
|
+
# cc "All pins should repeat previous for 10 cycles, except the clk pin"
|
|
106
|
+
# $tester.repeat_previous do
|
|
107
|
+
# $nvm.pin(:clk).drive(1)
|
|
108
|
+
# 10.cycles
|
|
109
|
+
# end
|
|
110
|
+
# cc "All should return to the original state"
|
|
111
|
+
# $tester.cycle
|
|
112
|
+
|
|
113
|
+
ss "Test suspend compares"
|
|
114
|
+
$nvm.pin(:fail).assert!(1)
|
|
115
|
+
cc "The fail pin should not be compared on these vectors"
|
|
116
|
+
$tester.ignore_fails($nvm.pin(:fail)) do
|
|
117
|
+
10.cycles
|
|
118
|
+
end
|
|
119
|
+
cc "And now it should"
|
|
120
|
+
$tester.cycle
|
|
121
|
+
|
|
122
|
+
ss "Test inhibit vectors and comments"
|
|
123
|
+
cc "The invoke pin should be driving high on this cycle"
|
|
124
|
+
$nvm.pin(:invoke).drive!(1)
|
|
125
|
+
cc "This should be the last thing you see until 'Inhibit complete!'"
|
|
126
|
+
$tester.inhibit_vectors_and_comments do
|
|
127
|
+
cc "This should not be in the output file, or the following vectors"
|
|
128
|
+
$tester.cycle
|
|
129
|
+
$nvm.pin(:invoke).drive!(0)
|
|
130
|
+
10.cycles
|
|
131
|
+
end
|
|
132
|
+
cc "Inhibit complete!"
|
|
133
|
+
cc "The invoke pin should be driving low on this cycle"
|
|
134
|
+
$tester.cycle
|
|
135
|
+
|
|
136
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Pattern to exercise the reading and writing of a register using ARM Debug
|
|
2
|
+
Pattern.create do
|
|
3
|
+
ss 'Test write register with all 1s'
|
|
4
|
+
$dut.reg(:testme32).write!(0xFFFFFFFF)
|
|
5
|
+
ss 'Test read register after all 1s write'
|
|
6
|
+
$dut.reg(:testme32).read!
|
|
7
|
+
|
|
8
|
+
ss 'Test write register with all 0s'
|
|
9
|
+
$dut.reg(:testme32).write!(0x00000000)
|
|
10
|
+
ss 'Test read register after all 0s write'
|
|
11
|
+
$dut.reg(:testme32).read!
|
|
12
|
+
|
|
13
|
+
ss 'Test store register, the whole register data should be stored'
|
|
14
|
+
$dut.reg(:testme32).store!
|
|
15
|
+
|
|
16
|
+
ss 'Test store bits, only enable bit should be captured'
|
|
17
|
+
$dut.reg(:testme32).bit(:enable).store!
|
|
18
|
+
|
|
19
|
+
ss 'Test store bits, only port A should be captured'
|
|
20
|
+
$dut.reg(:testme32).bits(:portA).store!
|
|
21
|
+
|
|
22
|
+
ss 'Test read of partial register, only portA should be read'
|
|
23
|
+
$dut.reg(:testme32).bits(:portB).read!
|
|
24
|
+
|
|
25
|
+
ss 'Test overlay, all reg vectors should be from subroutine'
|
|
26
|
+
$dut.reg(:testme32).overlay('write_overlay')
|
|
27
|
+
$dut.reg(:testme32).write!
|
|
28
|
+
|
|
29
|
+
ss 'Test overlay, same again but for read'
|
|
30
|
+
$dut.reg(:testme32).overlay('read_overlay')
|
|
31
|
+
$dut.reg(:testme32).read!
|
|
32
|
+
|
|
33
|
+
ss 'Test bit level write overlay, only portA should be from subroutine'
|
|
34
|
+
$dut.reg(:testme32).overlay(nil) # have to reset overlay bits as they are sticky from last overlay set
|
|
35
|
+
$dut.reg(:testme32).bits(:portA).overlay('write_overlay')
|
|
36
|
+
$dut.reg(:testme32).bits(:portA).write!
|
|
37
|
+
|
|
38
|
+
ss 'Test bit level read overlay, only portA should be from subroutine'
|
|
39
|
+
$dut.reg(:testme32).overlay(nil)
|
|
40
|
+
$dut.reg(:testme32).bits(:portA).overlay('read_overlay')
|
|
41
|
+
$dut.reg(:testme32).bits(:portA).read!
|
|
42
|
+
|
|
43
|
+
ss 'Call execute subroutine'
|
|
44
|
+
$dut.execute
|
|
45
|
+
|
|
46
|
+
ss 'Call match_pin subroutine'
|
|
47
|
+
$dut.match(:type => :match_pin)
|
|
48
|
+
|
|
49
|
+
ss 'Call match_2pins subroutine'
|
|
50
|
+
$dut.match(:type => :match_2pins)
|
|
51
|
+
|
|
52
|
+
ss 'Call match_done subroutine'
|
|
53
|
+
$dut.match(:type => :match_done)
|
|
54
|
+
|
|
55
|
+
ss 'Call handshake subroutine'
|
|
56
|
+
$dut.handshake
|
|
57
|
+
|
|
58
|
+
end
|
data/pattern/reset.rb
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
unless $tester.v93k?
|
|
2
|
+
# Pattern to define subroutines
|
|
3
|
+
if $tester.respond_to?('start_subroutine')
|
|
4
|
+
Pattern.create(:subroutine_pat => true) do
|
|
5
|
+
|
|
6
|
+
# Define execute subr
|
|
7
|
+
$dut.execute(:define => true)
|
|
8
|
+
|
|
9
|
+
# Define match_pin
|
|
10
|
+
$dut.match(:define => true, :type => :match_pin)
|
|
11
|
+
|
|
12
|
+
# Define match_2pins
|
|
13
|
+
$dut.match(:define => true, :type => :match_2pins)
|
|
14
|
+
|
|
15
|
+
# Define match_done subr
|
|
16
|
+
$dut.match(:define => true, :type => :match_done, :delay_in_us => 5)
|
|
17
|
+
|
|
18
|
+
# Define match_done subr with longer timeout of 7mS
|
|
19
|
+
$dut.match(:subr_name => 'match_done2', :define => true, :type => :match_done, :delay_in_us => 7000)
|
|
20
|
+
|
|
21
|
+
# Define match_done subr with longer timeout of 7sec
|
|
22
|
+
$dut.match(:subr_name => 'match_done3', :define => true, :type => :match_done, :delay_in_us => 7000000)
|
|
23
|
+
|
|
24
|
+
# Define match_done subr with longer timeout of 72sec
|
|
25
|
+
$dut.match(:subr_name => 'match_done4', :define => true, :type => :match_done, :delay_in_us => 72_000_000)
|
|
26
|
+
|
|
27
|
+
# Define match_done subr with longer timeout of 10min
|
|
28
|
+
$dut.match(:subr_name => 'match_done5', :define => true, :type => :match_done, :delay_in_us => 7_000_000_000)
|
|
29
|
+
|
|
30
|
+
# Define match loop with multiple entries
|
|
31
|
+
$dut.match(:subr_name => 'match_done6', :define => true, :type => :multiple_entries, :delay_in_us => 15_000_000)
|
|
32
|
+
|
|
33
|
+
# Define handshake subr
|
|
34
|
+
$dut.handshake(:define => true)
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
data/program/_erase.rb
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# A sub flow is a flow like any other.
|
|
2
|
+
# However the name should begin with
|
|
3
|
+
# _ to indicate that it is a sub
|
|
4
|
+
# flow this will prevent it being
|
|
5
|
+
# generated as a top-level flow by
|
|
6
|
+
# Origen.
|
|
7
|
+
# Any arguments passed in when
|
|
8
|
+
# instantiating this flow will be available via a hash as the second
|
|
9
|
+
# argument, here called options, although the naming is arbitrary.
|
|
10
|
+
Flow.create do |options|
|
|
11
|
+
|
|
12
|
+
# Define default options
|
|
13
|
+
options = { :pulses => 4,
|
|
14
|
+
:post_verify => true,
|
|
15
|
+
}.merge(options)
|
|
16
|
+
|
|
17
|
+
options[:pulses].times do
|
|
18
|
+
func :erase_all
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
if options[:post_verify]
|
|
22
|
+
import 'erase_vfy'
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
end
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# Flow to exercise the Flow Control API
|
|
2
|
+
#
|
|
3
|
+
# Some of the other flows also cover the flow control API and those tests are used
|
|
4
|
+
# to guarantee that the test ID references work when sub-flows are involved.
|
|
5
|
+
# This flow provides a full checkout of all flow control methods.
|
|
6
|
+
Flow.create do
|
|
7
|
+
|
|
8
|
+
self.resources_filename = 'flow_control'
|
|
9
|
+
|
|
10
|
+
log "Test that if_failed works"
|
|
11
|
+
func :read1, id: :t1, bin: 10
|
|
12
|
+
func :erase1, if_failed: :t1, bin: 12
|
|
13
|
+
|
|
14
|
+
log "Test the block form of if_failed"
|
|
15
|
+
func :read2, id: :t2, bin: 10
|
|
16
|
+
if_failed :t2 do
|
|
17
|
+
func :erase2
|
|
18
|
+
func :erase2
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
log "Test that if_passed works"
|
|
22
|
+
func :read1, id: :t3, bin: 10
|
|
23
|
+
func :pgm1, if_passed: :t3
|
|
24
|
+
|
|
25
|
+
log "Test the block form of if_passed"
|
|
26
|
+
func :read2, id: :t4, bin: 10
|
|
27
|
+
if_passed :t4 do
|
|
28
|
+
func :pgm1
|
|
29
|
+
func :pgm1
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
log "Test that if_ran works"
|
|
33
|
+
func :pgm, id: :t5, bin: 10
|
|
34
|
+
func :read0, if_ran: :t5
|
|
35
|
+
|
|
36
|
+
log "Test the block form of if_ran"
|
|
37
|
+
func :pgm, id: :t6, bin: 10
|
|
38
|
+
if_ran :t6 do
|
|
39
|
+
func :read0
|
|
40
|
+
func :read0
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
log "Test that unless_ran works"
|
|
44
|
+
func :pgm, id: :t7, bin: 10
|
|
45
|
+
func :read0, unless_ran: :t7
|
|
46
|
+
|
|
47
|
+
log "Test the block form of unless_ran"
|
|
48
|
+
func :pgm, id: :t8, bin: 10
|
|
49
|
+
unless_ran :t8 do
|
|
50
|
+
func :read0
|
|
51
|
+
func :read0
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
log "Test that skip works"
|
|
55
|
+
skip do
|
|
56
|
+
func :read0
|
|
57
|
+
func :read0
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
log "Test that conditional skip works"
|
|
61
|
+
skip if_passed: :t4 do
|
|
62
|
+
func :read0
|
|
63
|
+
func :read0
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
log "Test that if_job works"
|
|
67
|
+
func :cold_test, if_job: :fc
|
|
68
|
+
|
|
69
|
+
log "Test the block form of if_job"
|
|
70
|
+
if_job [:prb1, :prb2] do
|
|
71
|
+
func :probe_only_test1
|
|
72
|
+
func :probe_only_test2
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
log "Test that unless_job works"
|
|
76
|
+
func :warmish_test, unless_job: :fc
|
|
77
|
+
|
|
78
|
+
log "Test the block form of unless_job"
|
|
79
|
+
unless_job [:prb1, :prb2] do
|
|
80
|
+
func :ft_only_test1
|
|
81
|
+
func :ft_only_test2
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
log "Test that if_enable works"
|
|
85
|
+
func :extra_test, if_enable: :extras
|
|
86
|
+
|
|
87
|
+
log "Test the block form of if_enable"
|
|
88
|
+
if_enable :cz do
|
|
89
|
+
func :cz_test1
|
|
90
|
+
func :cz_test2
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
log "Test that unless_enable works"
|
|
94
|
+
func :long_test, unless_enable: :quick
|
|
95
|
+
|
|
96
|
+
log "Test the block form of unless_enable"
|
|
97
|
+
unless_enable :quick do
|
|
98
|
+
func :long_test1
|
|
99
|
+
func :long_test2
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
if $tester.v93k?
|
|
103
|
+
log "Test that an id can be assigned to a test group"
|
|
104
|
+
func :read1, id: :r1, bin: 10, by_block: true
|
|
105
|
+
func :erase1, if_failed: :r1
|
|
106
|
+
|
|
107
|
+
log "Test that group-level dependencies work"
|
|
108
|
+
group "grp1", id: :grp1 do
|
|
109
|
+
func :grp1_test1, bin: 5
|
|
110
|
+
func :grp1_test2, bin: 5
|
|
111
|
+
func :grp1_test3, bin: 5
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
group "grp2", if_failed: :grp1 do
|
|
115
|
+
func :grp2_test1, bin: 5
|
|
116
|
+
func :grp2_test2, bin: 5
|
|
117
|
+
func :grp2_test3, bin: 5
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
log "Another group-level dependencies test based on a real life use case"
|
|
121
|
+
func :gt1, bin: 90
|
|
122
|
+
group "gt_grp1", id: :gt_grp1 do
|
|
123
|
+
func :gt_grp1_test1, bin: 90, id: :gt_grp1
|
|
124
|
+
func :gt_grp1_test2, bin: 90, id: :gt_grp1
|
|
125
|
+
end
|
|
126
|
+
func :gt2, bin: 90, if_failed: :gt_grp1
|
|
127
|
+
group "gt_grp2", id: :gt_grp2, if_failed: :gt_grp1 do
|
|
128
|
+
# The if_failed and IDs here are redundant, but it should still generate
|
|
129
|
+
# valid output if an application were to do this
|
|
130
|
+
func :gt_grp2_test1, bin: 90, id: :gt_grp2, if_failed: :gt_grp1
|
|
131
|
+
func :gt_grp2_test2, bin: 90, id: :gt_grp2, if_failed: :gt_grp1
|
|
132
|
+
end
|
|
133
|
+
func :gt3, bin: 90, if_failed: :gt_grp2
|
|
134
|
+
|
|
135
|
+
log "Test that nested groups work"
|
|
136
|
+
group "level1" do
|
|
137
|
+
func :lev1_test1, bin: 5
|
|
138
|
+
func :lev1_test2, bin: 5
|
|
139
|
+
func :lev1_test3, id: :l1t3, bin: 10
|
|
140
|
+
func :lev1_test4, if_failed: :l1t3, bin: 12
|
|
141
|
+
func :lev1_test5, id: :l1t5, bin: 12
|
|
142
|
+
group "level2" do
|
|
143
|
+
func :lev2_test1, bin: 5
|
|
144
|
+
func :lev2_test2, bin: 5
|
|
145
|
+
func :lev2_test3, id: :l2t3, bin: 10
|
|
146
|
+
func :lev2_test4, if_failed: :l2t3, bin: 12
|
|
147
|
+
# Test dependency on a test from another group
|
|
148
|
+
func :lev2_test5, if_failed: :l1t5, bin: 12
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
log "Test nested conditions on a group"
|
|
153
|
+
func :nt1, bin: 10, id: :nt1
|
|
154
|
+
if_failed :nt1 do
|
|
155
|
+
func :nt2, bin: 11, id: :nt2
|
|
156
|
+
group "ntg1", id: :ntg1, if_passed: :nt2 do
|
|
157
|
+
func :nt3, bin: 12
|
|
158
|
+
end
|
|
159
|
+
group "ntg2", id: :ntg2, if_failed: :nt2 do
|
|
160
|
+
func :nt4, bin: 13
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
end
|