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,159 @@
|
|
|
1
|
+
# This pattern exercises the methods in the Origen::Tester::J750 class
|
|
2
|
+
Pattern.create(:end_with_halt => true) do
|
|
3
|
+
|
|
4
|
+
ss 'Test that basic cycling works'
|
|
5
|
+
$tester.cycle
|
|
6
|
+
10.times do
|
|
7
|
+
$nvm.pin(:invoke).drive(1)
|
|
8
|
+
$tester.cycle
|
|
9
|
+
end
|
|
10
|
+
10.times do |i|
|
|
11
|
+
$nvm.pin(:invoke).drive(i.even? ? 0 : 1)
|
|
12
|
+
$tester.cycle
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
ss 'Test that basic port manipulation works'
|
|
16
|
+
unless $tester.respond_to?('hpt_mode')
|
|
17
|
+
$nvm.port(:porta).drive(0x55)
|
|
18
|
+
$tester.cycle
|
|
19
|
+
$nvm.port(:porta).expect(0xAA)
|
|
20
|
+
$tester.cycle
|
|
21
|
+
$nvm.port(:porta)[1].dont_care
|
|
22
|
+
$tester.cycle
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
ss 'Test that the store method works'
|
|
26
|
+
cc 'This vector should be stored'
|
|
27
|
+
$tester.cycle
|
|
28
|
+
$tester.store
|
|
29
|
+
$tester.cycle
|
|
30
|
+
cc 'This vector should be stored'
|
|
31
|
+
$tester.cycle
|
|
32
|
+
$tester.cycle
|
|
33
|
+
$tester.cycle
|
|
34
|
+
$tester.store(:offset => -2)
|
|
35
|
+
|
|
36
|
+
ss 'Test calling a subroutine'
|
|
37
|
+
cc "This vector should call subroutine 'sub1'"
|
|
38
|
+
$tester.cycle
|
|
39
|
+
$tester.call_subroutine('sub1')
|
|
40
|
+
cc "This vector should call subroutine 'sub2'"
|
|
41
|
+
$tester.cycle
|
|
42
|
+
$tester.cycle
|
|
43
|
+
$tester.call_subroutine('sub2', :offset => -1)
|
|
44
|
+
cc "This vector should call subroutine 'sub3', however because"
|
|
45
|
+
cc 'it is local it should not appear in the imports in the header'
|
|
46
|
+
$tester.cycle
|
|
47
|
+
$tester.call_subroutine('sub3')
|
|
48
|
+
|
|
49
|
+
ss 'Test generating a handshake inside a subroutine'
|
|
50
|
+
cc "The next line should have a global label 'sub3', but no vector"
|
|
51
|
+
$tester.start_subroutine('sub3')
|
|
52
|
+
$tester.handshake
|
|
53
|
+
cc 'This vector should have a return statement'
|
|
54
|
+
$tester.cycle
|
|
55
|
+
$tester.end_subroutine
|
|
56
|
+
|
|
57
|
+
ss 'Test generating a handshake with a readcode'
|
|
58
|
+
$tester.handshake(:readcode => 10)
|
|
59
|
+
|
|
60
|
+
ss 'Test frequency counter'
|
|
61
|
+
$tester.freq_count($nvm.pin(:dtst), :readcode => 33)
|
|
62
|
+
|
|
63
|
+
ss 'Test a single pin match loop'
|
|
64
|
+
$tester.wait(:match => true, :time_in_us => 5000, :pin => $nvm.pin(:done), :state => :high)
|
|
65
|
+
|
|
66
|
+
ss 'Test a two pin match loop'
|
|
67
|
+
$tester.wait(:match => true, :time_in_us => 5000,
|
|
68
|
+
:pin => $nvm.pin(:done), :state => :high,
|
|
69
|
+
:pin2 => $nvm.pin(:fail), :state2 => :low)
|
|
70
|
+
|
|
71
|
+
ss 'Test adding an arbitrary label'
|
|
72
|
+
$tester.cycle
|
|
73
|
+
$tester.label 'a_test_label'
|
|
74
|
+
$tester.cycle
|
|
75
|
+
|
|
76
|
+
ss 'Test calling a match loop'
|
|
77
|
+
$tester.cycle
|
|
78
|
+
$tester.call_match
|
|
79
|
+
$tester.cycle
|
|
80
|
+
$tester.call_match
|
|
81
|
+
|
|
82
|
+
ss 'Test setting the readcode to 100'
|
|
83
|
+
$tester.set_code(100)
|
|
84
|
+
|
|
85
|
+
ss 'Test explicit branching'
|
|
86
|
+
$tester.branch_to('somewhere')
|
|
87
|
+
|
|
88
|
+
if !$tester.respond_to?('hpt_mode')
|
|
89
|
+
ss 'Test looping, these vectors should be executed once'
|
|
90
|
+
$tester.loop_vector('test_loop_1', 1) do
|
|
91
|
+
$nvm.port(:porta).drive(0xAA)
|
|
92
|
+
$tester.cycle
|
|
93
|
+
$nvm.port(:porta).drive(0x55)
|
|
94
|
+
$tester.cycle
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
ss 'Test looping, these vectors should be executed 3 times'
|
|
98
|
+
$tester.loop_vector('test_loop_2', 3) do
|
|
99
|
+
$nvm.port(:porta).drive(0xAA)
|
|
100
|
+
$tester.cycle
|
|
101
|
+
$nvm.port(:porta).drive(0x55)
|
|
102
|
+
$tester.cycle
|
|
103
|
+
end
|
|
104
|
+
else
|
|
105
|
+
ss 'Test looping, these vectors should be executed once'
|
|
106
|
+
$tester.loop_vector('test_loop_1', 1) do
|
|
107
|
+
$nvm.pin(:clk).drive(1)
|
|
108
|
+
$tester.cycle
|
|
109
|
+
$nvm.pin(:clk).drive(0)
|
|
110
|
+
$tester.cycle
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
ss 'Test looping, these vectors should be executed 3 times'
|
|
114
|
+
$tester.loop_vector('test_loop_2', 3) do
|
|
115
|
+
$nvm.pin(:clk).drive(1)
|
|
116
|
+
$tester.cycle
|
|
117
|
+
$nvm.pin(:clk).drive(0)
|
|
118
|
+
$tester.cycle
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
ss 'Test repeat_previous'
|
|
123
|
+
$tester.cycle
|
|
124
|
+
cc 'Invoke should repeat previous for 10 cycles'
|
|
125
|
+
$nvm.pin(:invoke).repeat_previous = true
|
|
126
|
+
10.cycles
|
|
127
|
+
$nvm.pin(:invoke).repeat_previous = false
|
|
128
|
+
cc 'All pins should repeat previous for 10 cycles, except the clk pin'
|
|
129
|
+
$tester.repeat_previous do
|
|
130
|
+
$nvm.pin(:clk).drive(1)
|
|
131
|
+
10.cycles
|
|
132
|
+
end
|
|
133
|
+
cc 'All should return to the original state'
|
|
134
|
+
$tester.cycle
|
|
135
|
+
|
|
136
|
+
ss 'Test suspend compares'
|
|
137
|
+
$nvm.pin(:fail).assert!(1)
|
|
138
|
+
cc 'The fail pin should not be compared on these vectors'
|
|
139
|
+
$tester.ignore_fails($nvm.pin(:fail)) do
|
|
140
|
+
10.cycles
|
|
141
|
+
end
|
|
142
|
+
cc 'And now it should'
|
|
143
|
+
$tester.cycle
|
|
144
|
+
|
|
145
|
+
ss 'Test inhibit vectors and comments'
|
|
146
|
+
cc 'The invoke pin should be driving high on this cycle'
|
|
147
|
+
$nvm.pin(:invoke).drive!(1)
|
|
148
|
+
cc "This should be the last thing you see until 'Inhibit complete!'"
|
|
149
|
+
$tester.inhibit_vectors_and_comments do
|
|
150
|
+
cc 'This should not be in the output file, or the following vectors'
|
|
151
|
+
$tester.cycle
|
|
152
|
+
$nvm.pin(:invoke).drive!(0)
|
|
153
|
+
10.cycles
|
|
154
|
+
end
|
|
155
|
+
cc 'Inhibit complete!'
|
|
156
|
+
cc 'The invoke pin should be driving low on this cycle'
|
|
157
|
+
$tester.cycle
|
|
158
|
+
|
|
159
|
+
end
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
# This pattern exercises the methods in the Origen::Tester::J750 class
|
|
2
|
+
Pattern.create do
|
|
3
|
+
|
|
4
|
+
ss 'Test that basic cycling works'
|
|
5
|
+
$tester.cycle
|
|
6
|
+
10.times do
|
|
7
|
+
$nvm.pin(:invoke).drive(1)
|
|
8
|
+
$tester.cycle
|
|
9
|
+
end
|
|
10
|
+
10.times do |i|
|
|
11
|
+
$nvm.pin(:invoke).drive(i.even? ? 0 : 1)
|
|
12
|
+
$tester.cycle
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
unless $tester.respond_to?('hpt_mode')
|
|
16
|
+
ss 'Test that the port API works'
|
|
17
|
+
$nvm.port(:porta).drive(0x55)
|
|
18
|
+
$tester.cycle
|
|
19
|
+
$nvm.port(:porta).expect(0xAA)
|
|
20
|
+
$tester.cycle
|
|
21
|
+
$nvm.port(:porta).drive!(0x55)
|
|
22
|
+
$nvm.port(:porta).dont_care!
|
|
23
|
+
$nvm.port(:porta).drive_hi!
|
|
24
|
+
$nvm.port(:porta).drive_very_hi!
|
|
25
|
+
$nvm.port(:porta).drive_lo!
|
|
26
|
+
$nvm.port(:porta).assert_hi!
|
|
27
|
+
$nvm.port(:porta).assert_lo!
|
|
28
|
+
$nvm.port(:porta).drive_lo
|
|
29
|
+
$nvm.port(:porta)[1].assert(1)
|
|
30
|
+
$nvm.port(:porta)[2].assert!(1)
|
|
31
|
+
$nvm.port(:porta).drive_lo
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
ss 'Test that the store method works'
|
|
35
|
+
cc 'This vector should be stored'
|
|
36
|
+
$tester.cycle
|
|
37
|
+
$tester.store
|
|
38
|
+
$tester.cycle
|
|
39
|
+
cc 'This vector should be stored'
|
|
40
|
+
$tester.cycle
|
|
41
|
+
$tester.cycle
|
|
42
|
+
$tester.cycle
|
|
43
|
+
$tester.store(:offset => -2)
|
|
44
|
+
$tester.cycle
|
|
45
|
+
$tester.store_next_cycle
|
|
46
|
+
cc 'This vector should be stored'
|
|
47
|
+
$tester.cycle
|
|
48
|
+
|
|
49
|
+
ss 'Test calling a subroutine'
|
|
50
|
+
cc "This vector should call subroutine 'sub1'"
|
|
51
|
+
$tester.cycle
|
|
52
|
+
$tester.call_subroutine('sub1')
|
|
53
|
+
cc "This vector should call subroutine 'sub2'"
|
|
54
|
+
$tester.cycle
|
|
55
|
+
$tester.cycle
|
|
56
|
+
$tester.call_subroutine('sub2', :offset => -1)
|
|
57
|
+
cc "This vector should call subroutine 'sub3', however because"
|
|
58
|
+
cc 'it is local it should not appear in the imports in the header'
|
|
59
|
+
$tester.cycle
|
|
60
|
+
$tester.call_subroutine('sub3')
|
|
61
|
+
|
|
62
|
+
ss 'Test generating a handshake inside a subroutine'
|
|
63
|
+
cc "The next line should have a global label 'sub3', but no vector"
|
|
64
|
+
$tester.start_subroutine('sub3')
|
|
65
|
+
$tester.handshake
|
|
66
|
+
cc 'This vector should have a return statement'
|
|
67
|
+
$tester.cycle
|
|
68
|
+
$tester.end_subroutine
|
|
69
|
+
|
|
70
|
+
ss 'Test generating a handshake with a readcode'
|
|
71
|
+
$tester.handshake(:readcode => 10)
|
|
72
|
+
|
|
73
|
+
ss 'Test frequency counter'
|
|
74
|
+
$tester.freq_count($nvm.pin(:dtst), :readcode => 33)
|
|
75
|
+
|
|
76
|
+
ss 'Test a single pin match loop - short timeout'
|
|
77
|
+
$tester.wait(:match => true, :time_in_us => 5000, :pin => $nvm.pin(:done), :state => :high)
|
|
78
|
+
|
|
79
|
+
ss 'Test a single pin match loop- long timeout'
|
|
80
|
+
$tester.wait(:match => true, :time_in_s => 7 , :pin => $nvm.pin(:done), :state => :high)
|
|
81
|
+
|
|
82
|
+
ss 'Test a single pin match loop - with clr_fail after match loop complete'
|
|
83
|
+
$tester.wait(:match => true, :time_in_us => 5000, :pin => $nvm.pin(:done), :state => :high, :clr_fail_post_match => true)
|
|
84
|
+
|
|
85
|
+
ss 'Test a two pin match loop'
|
|
86
|
+
$tester.wait(:match => true, :time_in_us => 5000,
|
|
87
|
+
:pin => $nvm.pin(:done), :state => :high,
|
|
88
|
+
:pin2 => $nvm.pin(:fail), :state2 => :low)
|
|
89
|
+
|
|
90
|
+
ss 'Test adding an arbitrary label'
|
|
91
|
+
$tester.cycle
|
|
92
|
+
$tester.label 'a_test_label'
|
|
93
|
+
$tester.cycle
|
|
94
|
+
|
|
95
|
+
ss 'Test calling a match loop'
|
|
96
|
+
$tester.cycle
|
|
97
|
+
$tester.call_match
|
|
98
|
+
$tester.cycle
|
|
99
|
+
$tester.call_match
|
|
100
|
+
|
|
101
|
+
ss 'Test setting the readcode to 100'
|
|
102
|
+
$tester.set_code(100)
|
|
103
|
+
|
|
104
|
+
ss 'Test explicit branching'
|
|
105
|
+
$tester.branch_to('somewhere')
|
|
106
|
+
|
|
107
|
+
unless $tester.respond_to?('hpt_mode')
|
|
108
|
+
ss 'Test looping, these vectors should be executed once'
|
|
109
|
+
$tester.loop_vector('test_loop_1', 1) do
|
|
110
|
+
$nvm.port(:porta).drive(0xAA)
|
|
111
|
+
$tester.cycle
|
|
112
|
+
$nvm.port(:porta).drive(0x55)
|
|
113
|
+
$tester.cycle
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
ss 'Test looping, these vectors should be executed 3 times'
|
|
117
|
+
$tester.loop_vector('test_loop_2', 3) do
|
|
118
|
+
$nvm.port(:porta).drive(0xAA)
|
|
119
|
+
$tester.cycle
|
|
120
|
+
$nvm.port(:porta).drive(0x55)
|
|
121
|
+
$tester.cycle
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
ss 'Test looping with label first, these vectors should be executed 3 times'
|
|
125
|
+
$tester.loop_vector('test_loop_2', 3, false, true) do
|
|
126
|
+
$nvm.port(:porta).drive(0xAA)
|
|
127
|
+
$tester.cycle
|
|
128
|
+
$nvm.port(:porta).drive(0x55)
|
|
129
|
+
$tester.cycle
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
ss 'Test repeat_previous'
|
|
134
|
+
$tester.cycle
|
|
135
|
+
cc 'Invoke should repeat previous for 10 cycles'
|
|
136
|
+
$nvm.pin(:invoke).repeat_previous = true
|
|
137
|
+
10.cycles
|
|
138
|
+
$nvm.pin(:invoke).repeat_previous = false
|
|
139
|
+
cc 'All pins should repeat previous for 10 cycles, except the clk pin'
|
|
140
|
+
$tester.repeat_previous do
|
|
141
|
+
$nvm.pin(:clk).drive(1)
|
|
142
|
+
10.cycles
|
|
143
|
+
end
|
|
144
|
+
cc 'All should return to the original state'
|
|
145
|
+
$tester.cycle
|
|
146
|
+
|
|
147
|
+
ss 'Test suspend compares'
|
|
148
|
+
$nvm.pin(:fail).assert!(1)
|
|
149
|
+
cc 'The fail pin should not be compared on these vectors'
|
|
150
|
+
$tester.ignore_fails($nvm.pin(:fail)) do
|
|
151
|
+
10.cycles
|
|
152
|
+
end
|
|
153
|
+
cc 'And now it should'
|
|
154
|
+
$tester.cycle
|
|
155
|
+
|
|
156
|
+
ss 'Test inhibit vectors and comments'
|
|
157
|
+
cc 'The invoke pin should be driving high on this cycle'
|
|
158
|
+
$nvm.pin(:invoke).drive!(1)
|
|
159
|
+
cc "This should be the last thing you see until 'Inhibit complete!'"
|
|
160
|
+
$tester.inhibit_vectors_and_comments do
|
|
161
|
+
cc 'This should not be in the output file, or the following vectors'
|
|
162
|
+
$tester.cycle
|
|
163
|
+
$nvm.pin(:invoke).drive!(0)
|
|
164
|
+
10.cycles
|
|
165
|
+
end
|
|
166
|
+
cc 'Inhibit complete!'
|
|
167
|
+
cc 'The invoke pin should be driving low on this cycle'
|
|
168
|
+
$tester.cycle
|
|
169
|
+
|
|
170
|
+
if $tester.respond_to?('memory_test')
|
|
171
|
+
ss 'Test memory test pin states'
|
|
172
|
+
$nvm.pin(:invoke).drive_mem
|
|
173
|
+
$tester.cycle
|
|
174
|
+
$nvm.pin(:invoke).drive_mem!
|
|
175
|
+
$nvm.pin(:invoke).expect_mem
|
|
176
|
+
$tester.cycle
|
|
177
|
+
$nvm.pin(:invoke).expect_mem!
|
|
178
|
+
$nvm.pin(:invoke).drive!(0)
|
|
179
|
+
|
|
180
|
+
unless $tester.respond_to?('hpt_mode')
|
|
181
|
+
ss 'Test memory test port states'
|
|
182
|
+
$nvm.port(:porta).drive_mem
|
|
183
|
+
$tester.cycle
|
|
184
|
+
$nvm.port(:porta).drive_mem!
|
|
185
|
+
$nvm.port(:porta).expect_mem
|
|
186
|
+
$tester.cycle
|
|
187
|
+
$nvm.port(:porta).expect_mem!
|
|
188
|
+
$nvm.port(:porta).drive!(0x0)
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
ss 'Test that long repeats are broken down to < 65k repeats'
|
|
193
|
+
$nvm.pin(:invoke).drive(1)
|
|
194
|
+
Origen.tester.cycle(:repeat => 240000)
|
|
195
|
+
|
|
196
|
+
ss 'Test that long repeats do not compress to > 65k repeats'
|
|
197
|
+
$nvm.pin(:invoke).drive(0)
|
|
198
|
+
Origen.tester.cycle(:repeat => 60000)
|
|
199
|
+
Origen.tester.cycle(:repeat => 60000)
|
|
200
|
+
Origen.tester.cycle(:repeat => 60000)
|
|
201
|
+
Origen.tester.cycle(:repeat => 60000)
|
|
202
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# This pattern exercises the methods in the Origen::Tester::Timing module
|
|
2
|
+
def gen_vectors
|
|
3
|
+
2.times do
|
|
4
|
+
$nvm.pin(:invoke).drive(0)
|
|
5
|
+
$tester.cycle
|
|
6
|
+
$nvm.pin(:invoke).drive(1)
|
|
7
|
+
$tester.cycle
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
Pattern.create do
|
|
11
|
+
|
|
12
|
+
ss 'Test ability to switch timesets'
|
|
13
|
+
|
|
14
|
+
cc 'These vectors should use timeset nvm_slow'
|
|
15
|
+
$tester.set_timeset('nvm_slow', 200)
|
|
16
|
+
gen_vectors
|
|
17
|
+
cc 'These vectors should use timeset nvm_fast'
|
|
18
|
+
$tester.set_timeset('nvm_fast', 40)
|
|
19
|
+
gen_vectors
|
|
20
|
+
|
|
21
|
+
ss 'Test ability to switch timesets within a block'
|
|
22
|
+
cc 'These vectors should use timeset nvm_slow'
|
|
23
|
+
$tester.set_timeset('nvm_slow', 200) do
|
|
24
|
+
gen_vectors
|
|
25
|
+
end
|
|
26
|
+
cc 'These vectors should use timeset nvm_fast'
|
|
27
|
+
gen_vectors
|
|
28
|
+
|
|
29
|
+
ss 'Test ability to call a set timeset block with no arguments'
|
|
30
|
+
cc 'These vectors should use timeset nvm_fast'
|
|
31
|
+
$tester.set_timeset(nil) do
|
|
32
|
+
gen_vectors
|
|
33
|
+
end
|
|
34
|
+
cc 'These vectors should use timeset nvm_fast'
|
|
35
|
+
gen_vectors
|
|
36
|
+
|
|
37
|
+
ss 'Test ability to call with a single array argument'
|
|
38
|
+
cc 'These vectors should use timeset nvm_slow'
|
|
39
|
+
$tester.set_timeset(['nvm_slow', 40]) do
|
|
40
|
+
gen_vectors
|
|
41
|
+
end
|
|
42
|
+
cc 'These vectors should use timeset nvm_fast'
|
|
43
|
+
gen_vectors
|
|
44
|
+
cc 'These vectors should use timeset nvm_fast'
|
|
45
|
+
$tester.set_timeset([]) do
|
|
46
|
+
gen_vectors
|
|
47
|
+
end
|
|
48
|
+
cc 'These vectors should use timeset nvm_fast'
|
|
49
|
+
gen_vectors
|
|
50
|
+
|
|
51
|
+
ss 'Test that delay calculations are based on the current timeset period'
|
|
52
|
+
|
|
53
|
+
cc 'This should wait for 5 cycles, 1000/200'
|
|
54
|
+
$tester.set_timeset('nvm_slow', 200)
|
|
55
|
+
$tester.wait(:time_in_ns => 1000)
|
|
56
|
+
cc 'This should wait for 25 cycles, 1000/40'
|
|
57
|
+
$tester.set_timeset('nvm_fast', 40)
|
|
58
|
+
$tester.wait(:time_in_ns => 1000)
|
|
59
|
+
|
|
60
|
+
ss 'Test the period counter'
|
|
61
|
+
cc 'This should generate a sequence with a clock pulse on the clk'
|
|
62
|
+
cc 'pin with period of 1 ms, and overall duration 10 ms'
|
|
63
|
+
$nvm.pin(:clk).drive(0)
|
|
64
|
+
$tester.count(:period_in_ms => 1, :duration_in_ms => 10) do
|
|
65
|
+
$nvm.pin(:clk).drive!(1)
|
|
66
|
+
$nvm.pin(:clk).drive(0)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
ss 'Test that Fixnum.cycles works'
|
|
70
|
+
cc 'There should be 10 cycles here'
|
|
71
|
+
10.cycles
|
|
72
|
+
|
|
73
|
+
end
|