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.
Files changed (199) hide show
  1. checksums.yaml +7 -0
  2. data/config/application.rb +140 -0
  3. data/config/commands.rb +73 -0
  4. data/config/development.rb +12 -0
  5. data/config/environment.rb +1 -0
  6. data/config/shared_commands.rb +47 -0
  7. data/config/users.rb +18 -0
  8. data/config/version.rb +8 -0
  9. data/lib/commands/build.rb +69 -0
  10. data/lib/origen_testers.rb +23 -0
  11. data/lib/origen_testers/api.rb +258 -0
  12. data/lib/origen_testers/basic_test_setups.rb +105 -0
  13. data/lib/origen_testers/callback_handlers.rb +58 -0
  14. data/lib/origen_testers/generator.rb +279 -0
  15. data/lib/origen_testers/generator/flow_control_api.rb +611 -0
  16. data/lib/origen_testers/generator/identity_map.rb +23 -0
  17. data/lib/origen_testers/generator/placeholder.rb +11 -0
  18. data/lib/origen_testers/generator/test_numberer.rb +23 -0
  19. data/lib/origen_testers/igxl_based_tester.rb +12 -0
  20. data/lib/origen_testers/igxl_based_tester/base.rb +641 -0
  21. data/lib/origen_testers/igxl_based_tester/base/flow.rb +171 -0
  22. data/lib/origen_testers/igxl_based_tester/base/flow_line.rb +322 -0
  23. data/lib/origen_testers/igxl_based_tester/base/generator.rb +217 -0
  24. data/lib/origen_testers/igxl_based_tester/base/patgroup.rb +109 -0
  25. data/lib/origen_testers/igxl_based_tester/base/patgroups.rb +38 -0
  26. data/lib/origen_testers/igxl_based_tester/base/patset.rb +68 -0
  27. data/lib/origen_testers/igxl_based_tester/base/patset_pattern.rb +56 -0
  28. data/lib/origen_testers/igxl_based_tester/base/patsets.rb +38 -0
  29. data/lib/origen_testers/igxl_based_tester/base/patsubr.rb +68 -0
  30. data/lib/origen_testers/igxl_based_tester/base/patsubr_pattern.rb +56 -0
  31. data/lib/origen_testers/igxl_based_tester/base/patsubrs.rb +38 -0
  32. data/lib/origen_testers/igxl_based_tester/base/test_instance.rb +326 -0
  33. data/lib/origen_testers/igxl_based_tester/base/test_instance_group.rb +58 -0
  34. data/lib/origen_testers/igxl_based_tester/base/test_instances.rb +179 -0
  35. data/lib/origen_testers/igxl_based_tester/files.rb +43 -0
  36. data/lib/origen_testers/igxl_based_tester/j750.rb +248 -0
  37. data/lib/origen_testers/igxl_based_tester/j750/flow.rb +10 -0
  38. data/lib/origen_testers/igxl_based_tester/j750/flow_line.rb +19 -0
  39. data/lib/origen_testers/igxl_based_tester/j750/generator.rb +19 -0
  40. data/lib/origen_testers/igxl_based_tester/j750/patgroup.rb +9 -0
  41. data/lib/origen_testers/igxl_based_tester/j750/patgroups.rb +10 -0
  42. data/lib/origen_testers/igxl_based_tester/j750/patset.rb +9 -0
  43. data/lib/origen_testers/igxl_based_tester/j750/patset_pattern.rb +18 -0
  44. data/lib/origen_testers/igxl_based_tester/j750/patsets.rb +10 -0
  45. data/lib/origen_testers/igxl_based_tester/j750/patsubr.rb +9 -0
  46. data/lib/origen_testers/igxl_based_tester/j750/patsubr_pattern.rb +18 -0
  47. data/lib/origen_testers/igxl_based_tester/j750/patsubrs.rb +10 -0
  48. data/lib/origen_testers/igxl_based_tester/j750/templates/flow.txt.erb +9 -0
  49. data/lib/origen_testers/igxl_based_tester/j750/templates/instances.txt.erb +16 -0
  50. data/lib/origen_testers/igxl_based_tester/j750/templates/patgroups.txt.erb +8 -0
  51. data/lib/origen_testers/igxl_based_tester/j750/templates/patsets.txt.erb +10 -0
  52. data/lib/origen_testers/igxl_based_tester/j750/templates/patsubrs.txt.erb +10 -0
  53. data/lib/origen_testers/igxl_based_tester/j750/test_instance.rb +547 -0
  54. data/lib/origen_testers/igxl_based_tester/j750/test_instance_group.rb +9 -0
  55. data/lib/origen_testers/igxl_based_tester/j750/test_instances.rb +10 -0
  56. data/lib/origen_testers/igxl_based_tester/j750_hpt.rb +34 -0
  57. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow.rb +9 -0
  58. data/lib/origen_testers/igxl_based_tester/j750_hpt/flow_line.rb +9 -0
  59. data/lib/origen_testers/igxl_based_tester/j750_hpt/generator.rb +19 -0
  60. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroup.rb +9 -0
  61. data/lib/origen_testers/igxl_based_tester/j750_hpt/patgroups.rb +9 -0
  62. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset.rb +9 -0
  63. data/lib/origen_testers/igxl_based_tester/j750_hpt/patset_pattern.rb +9 -0
  64. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsets.rb +9 -0
  65. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr.rb +9 -0
  66. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubr_pattern.rb +9 -0
  67. data/lib/origen_testers/igxl_based_tester/j750_hpt/patsubrs.rb +9 -0
  68. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance.rb +515 -0
  69. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instance_group.rb +9 -0
  70. data/lib/origen_testers/igxl_based_tester/j750_hpt/test_instances.rb +9 -0
  71. data/lib/origen_testers/igxl_based_tester/parser.rb +102 -0
  72. data/lib/origen_testers/igxl_based_tester/parser/ac_spec.rb +9 -0
  73. data/lib/origen_testers/igxl_based_tester/parser/ac_specs.rb +0 -0
  74. data/lib/origen_testers/igxl_based_tester/parser/dc_spec.rb +33 -0
  75. data/lib/origen_testers/igxl_based_tester/parser/dc_specs.rb +48 -0
  76. data/lib/origen_testers/igxl_based_tester/parser/descriptions.rb +339 -0
  77. data/lib/origen_testers/igxl_based_tester/parser/flow.rb +109 -0
  78. data/lib/origen_testers/igxl_based_tester/parser/flow_line.rb +203 -0
  79. data/lib/origen_testers/igxl_based_tester/parser/flows.rb +21 -0
  80. data/lib/origen_testers/igxl_based_tester/parser/pattern_set.rb +92 -0
  81. data/lib/origen_testers/igxl_based_tester/parser/pattern_sets.rb +31 -0
  82. data/lib/origen_testers/igxl_based_tester/parser/test_instance.rb +341 -0
  83. data/lib/origen_testers/igxl_based_tester/parser/test_instances.rb +24 -0
  84. data/lib/origen_testers/igxl_based_tester/parser/timeset.rb +13 -0
  85. data/lib/origen_testers/igxl_based_tester/parser/timesets.rb +0 -0
  86. data/lib/origen_testers/igxl_based_tester/ultraflex.rb +477 -0
  87. data/lib/origen_testers/igxl_based_tester/ultraflex/flow.rb +10 -0
  88. data/lib/origen_testers/igxl_based_tester/ultraflex/flow_line.rb +19 -0
  89. data/lib/origen_testers/igxl_based_tester/ultraflex/generator.rb +19 -0
  90. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroup.rb +9 -0
  91. data/lib/origen_testers/igxl_based_tester/ultraflex/patgroups.rb +10 -0
  92. data/lib/origen_testers/igxl_based_tester/ultraflex/patset.rb +9 -0
  93. data/lib/origen_testers/igxl_based_tester/ultraflex/patset_pattern.rb +18 -0
  94. data/lib/origen_testers/igxl_based_tester/ultraflex/patsets.rb +10 -0
  95. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr.rb +9 -0
  96. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubr_pattern.rb +18 -0
  97. data/lib/origen_testers/igxl_based_tester/ultraflex/patsubrs.rb +10 -0
  98. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/flow.txt.erb +9 -0
  99. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/instances.txt.erb +16 -0
  100. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patgroups.txt.erb +9 -0
  101. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsets.txt.erb +10 -0
  102. data/lib/origen_testers/igxl_based_tester/ultraflex/templates/patsubrs.txt.erb +10 -0
  103. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance.rb +270 -0
  104. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instance_group.rb +9 -0
  105. data/lib/origen_testers/igxl_based_tester/ultraflex/test_instances.rb +10 -0
  106. data/lib/origen_testers/interface.rb +183 -0
  107. data/lib/origen_testers/parser.rb +22 -0
  108. data/lib/origen_testers/parser/description_lookup.rb +62 -0
  109. data/lib/origen_testers/parser/searchable_array.rb +30 -0
  110. data/lib/origen_testers/parser/searchable_hash.rb +30 -0
  111. data/lib/origen_testers/pattern_compilers.rb +116 -0
  112. data/lib/origen_testers/pattern_compilers/assembler.rb +88 -0
  113. data/lib/origen_testers/pattern_compilers/job.rb +96 -0
  114. data/lib/origen_testers/pattern_compilers/ultraflex_pattern_compiler.rb +599 -0
  115. data/lib/origen_testers/program_generators.rb +55 -0
  116. data/lib/origen_testers/smartest_based_tester.rb +8 -0
  117. data/lib/origen_testers/smartest_based_tester/base.rb +411 -0
  118. data/lib/origen_testers/smartest_based_tester/base/flow.rb +188 -0
  119. data/lib/origen_testers/smartest_based_tester/base/flow_node.rb +476 -0
  120. data/lib/origen_testers/smartest_based_tester/base/generator.rb +123 -0
  121. data/lib/origen_testers/smartest_based_tester/base/pattern_compiler.rb +23 -0
  122. data/lib/origen_testers/smartest_based_tester/base/pattern_master.rb +47 -0
  123. data/lib/origen_testers/smartest_based_tester/base/test_method.rb +143 -0
  124. data/lib/origen_testers/smartest_based_tester/base/test_methods.rb +73 -0
  125. data/lib/origen_testers/smartest_based_tester/base/test_methods/ac_tml.rb +33 -0
  126. data/lib/origen_testers/smartest_based_tester/base/test_methods/base_tml.rb +38 -0
  127. data/lib/origen_testers/smartest_based_tester/base/test_methods/custom_tml.rb +19 -0
  128. data/lib/origen_testers/smartest_based_tester/base/test_methods/dc_tml.rb +147 -0
  129. data/lib/origen_testers/smartest_based_tester/base/test_methods/limits.rb +43 -0
  130. data/lib/origen_testers/smartest_based_tester/base/test_suite.rb +166 -0
  131. data/lib/origen_testers/smartest_based_tester/base/test_suites.rb +58 -0
  132. data/lib/origen_testers/smartest_based_tester/v93k.rb +8 -0
  133. data/lib/origen_testers/smartest_based_tester/v93k/builder.rb +89 -0
  134. data/lib/origen_testers/smartest_based_tester/v93k/builder/flow.rb +169 -0
  135. data/lib/origen_testers/smartest_based_tester/v93k/builder/pattern_master.rb +54 -0
  136. data/lib/origen_testers/smartest_based_tester/v93k/flow.rb +10 -0
  137. data/lib/origen_testers/smartest_based_tester/v93k/flow_node.rb +9 -0
  138. data/lib/origen_testers/smartest_based_tester/v93k/generator.rb +19 -0
  139. data/lib/origen_testers/smartest_based_tester/v93k/pattern_compiler.rb +10 -0
  140. data/lib/origen_testers/smartest_based_tester/v93k/pattern_master.rb +10 -0
  141. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.aiv.erb +17 -0
  142. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.flow.erb +201 -0
  143. data/lib/origen_testers/smartest_based_tester/v93k/templates/template.pmfl.erb +13 -0
  144. data/lib/origen_testers/smartest_based_tester/v93k/test_method.rb +9 -0
  145. data/lib/origen_testers/smartest_based_tester/v93k/test_methods.rb +9 -0
  146. data/lib/origen_testers/smartest_based_tester/v93k/test_suite.rb +9 -0
  147. data/lib/origen_testers/smartest_based_tester/v93k/test_suites.rb +9 -0
  148. data/lib/origen_testers/test/basic_interface.rb +17 -0
  149. data/lib/origen_testers/test/block.rb +21 -0
  150. data/lib/origen_testers/test/dut.rb +184 -0
  151. data/lib/origen_testers/test/dut2.rb +76 -0
  152. data/lib/origen_testers/test/j750_base_interface.rb +119 -0
  153. data/lib/origen_testers/test/j750_hpt_interface.rb +8 -0
  154. data/lib/origen_testers/test/j750_interface.rb +8 -0
  155. data/lib/origen_testers/test/nvm.rb +94 -0
  156. data/lib/origen_testers/test/ultraflex_interface.rb +110 -0
  157. data/lib/origen_testers/test/v93k_interface.rb +115 -0
  158. data/lib/origen_testers/timing.rb +362 -0
  159. data/lib/origen_testers/vector.rb +203 -0
  160. data/lib/origen_testers/vector_based_tester.rb +42 -0
  161. data/lib/origen_testers/vector_generator.rb +623 -0
  162. data/lib/origen_testers/vector_pipeline.rb +288 -0
  163. data/pattern/dc_instr.rb +7 -0
  164. data/pattern/delay.rb +7 -0
  165. data/pattern/mem_test.rb +8 -0
  166. data/pattern/multi_vector.rb +117 -0
  167. data/pattern/multi_vector_plus1.rb +125 -0
  168. data/pattern/nvm/j750/add_late_pins.rb +3 -0
  169. data/pattern/nvm/j750/iterator_postfix_test_x_bx.rb +8 -0
  170. data/pattern/nvm/j750/iterator_test_x_bx.rb +8 -0
  171. data/pattern/nvm/j750/j750_halt.rb +159 -0
  172. data/pattern/nvm/j750/j750_workout.rb +202 -0
  173. data/pattern/nvm/j750/timing.rb +73 -0
  174. data/pattern/nvm/v93k/v93k_workout.rb +136 -0
  175. data/pattern/read_write_reg.rb +58 -0
  176. data/pattern/reset.rb +4 -0
  177. data/pattern/subroutines.rb +38 -0
  178. data/program/_additional_erase.rb +7 -0
  179. data/program/_efa_resources.rb +7 -0
  180. data/program/_erase.rb +25 -0
  181. data/program/_erase_vfy.rb +5 -0
  182. data/program/_iv_resources.rb +10 -0
  183. data/program/basic_interface.rb +5 -0
  184. data/program/components/_prb2_main.rb +6 -0
  185. data/program/flow_control.rb +164 -0
  186. data/program/prb1.rb +226 -0
  187. data/program/prb1_resources.rb +28 -0
  188. data/program/prb2.rb +40 -0
  189. data/program/test.rb +20 -0
  190. data/templates/example.txt.erb +53 -0
  191. data/templates/j750/_vt_flow.txt.erb +8 -0
  192. data/templates/j750/_vt_instances.txt.erb +4 -0
  193. data/templates/j750/program_sheet.txt.erb +9 -0
  194. data/templates/manifest/v93k.yaml.erb +22 -0
  195. data/templates/web/index.md.erb +51 -0
  196. data/templates/web/layouts/_basic.html.erb +15 -0
  197. data/templates/web/partials/_navbar.html.erb +22 -0
  198. data/templates/web/release_notes.md.erb +5 -0
  199. metadata +332 -0
@@ -0,0 +1,3 @@
1
+ Pattern.create(:add_additional_pins => true) do
2
+ $tester.cycle
3
+ end
@@ -0,0 +1,8 @@
1
+ Pattern.create(:pat_postfix => :sel, :by_block => true, :by_setting => [1, 2, 3, 4, 5]) do |block, setting|
2
+
3
+ cc block.id
4
+ $tester.cycle
5
+ cc setting
6
+ $tester.cycle
7
+
8
+ end
@@ -0,0 +1,8 @@
1
+ Pattern.create(:by_block => true, :by_setting => [1, 2, 3, 4, 5]) do |block, setting|
2
+
3
+ cc block.id
4
+ $tester.cycle
5
+ cc setting
6
+ $tester.cycle
7
+
8
+ end
@@ -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