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,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,4 @@
1
+ # Pattern to exercise the reading and writing of a register using Nexus
2
+ Pattern.create do
3
+ $dut.reset
4
+ end
@@ -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
@@ -0,0 +1,7 @@
1
+ Flow.create do |options|
2
+
3
+ if_enable 'additional_erase', :or => options[:force] do
4
+ func :erase_all
5
+ end
6
+
7
+ end
@@ -0,0 +1,7 @@
1
+ Resources.create do |options|
2
+
3
+ func :bitmap_all0
4
+
5
+ import 'iv_resources', :number => 3
6
+
7
+ 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,5 @@
1
+ Flow.create do |options|
2
+
3
+ func :margin_read1_all1
4
+
5
+ end
@@ -0,0 +1,10 @@
1
+ Resources.create do |options|
2
+
3
+ options = { :number => 2,
4
+ }.merge(options)
5
+
6
+ options[:number].times do |x|
7
+ func "bitcell_iv_#{x}"
8
+ end
9
+
10
+ end
@@ -0,0 +1,5 @@
1
+ Flow.create interface: 'OrigenTesters::Test::BasicInterface' do
2
+
3
+ functional :test1, sbin: 100
4
+
5
+ end
@@ -0,0 +1,6 @@
1
+ Flow.create do |options|
2
+
3
+ func :pgm_ckbd
4
+ func :mrd_ckbd
5
+
6
+ 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