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,13 @@
1
+ hp93000,pattern_master_file,0.1
2
+
3
+ % p = options[:program] ? options[:program].paths : paths
4
+ % p.each do |path, patterns|
5
+ path:
6
+ <%= path %>
7
+
8
+ files:
9
+ % patterns.uniq.sort.each do |pattern|
10
+ <%= pattern %>
11
+ % end
12
+
13
+ % end
@@ -0,0 +1,9 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ require 'origen_testers/smartest_based_tester/base/test_method'
5
+ class TestMethod < Base::TestMethod
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ require 'origen_testers/smartest_based_tester/base/test_methods'
5
+ class TestMethods < Base::TestMethods
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ require 'origen_testers/smartest_based_tester/base/test_suite'
5
+ class TestSuite < Base::TestSuite
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module OrigenTesters
2
+ module SmartestBasedTester
3
+ class V93K
4
+ require 'origen_testers/smartest_based_tester/base/test_suites'
5
+ class TestSuites < Base::TestSuites
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,17 @@
1
+ module OrigenTesters
2
+ module Test
3
+ # A simple interface designed to test the Testers::BasicTestSetups module
4
+ class BasicInterface
5
+ include OrigenTesters::BasicTestSetups
6
+
7
+ def functional(name, options = {})
8
+ # Apply custom defaults before calling
9
+ options = {
10
+ bin: 3
11
+ }.merge(options)
12
+ # Now call the generator
13
+ super
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ module OrigenTesters
2
+ module Test
3
+ class Block
4
+ attr_accessor :id, :selected
5
+
6
+ def initialize(id, owner)
7
+ @id = id
8
+ @selected = false
9
+ @owner = owner
10
+ end
11
+
12
+ def select
13
+ @selected = true
14
+ end
15
+
16
+ def owner
17
+ @owner
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,184 @@
1
+ module OrigenTesters
2
+ module Test
3
+ class DUT
4
+ # Simple DUT using Nexus interface
5
+
6
+ attr_accessor :blocks
7
+ attr_accessor :hv_supply_pin
8
+ attr_accessor :lv_supply_pin
9
+
10
+ include OrigenARMDebug
11
+ include Origen::TopLevel
12
+ include OrigenJTAG
13
+
14
+ def initialize(options = {})
15
+ add_pin :tclk
16
+ add_pin :tdi
17
+ add_pin :tdo
18
+ add_pin :tms
19
+
20
+ add_reg32 :testme32, 0x007a do
21
+ bits 31..16, :portB
22
+ bits 15..8, :portA
23
+ bits 1, :done
24
+ bits 0, :enable
25
+ end
26
+ @hv_supply_pin = 'VDDHV'
27
+ @lv_supply_pin = 'VDDLV'
28
+ @blocks = [Block.new(0, self), Block.new(1, self), Block.new(2, self)]
29
+ end
30
+
31
+ def startup(options)
32
+ $tester.set_timeset('tp0', 60)
33
+ end
34
+
35
+ def write_register(reg, options = {})
36
+ arm_debug.write_register(reg, options)
37
+ end
38
+
39
+ def read_register(reg, options = {})
40
+ arm_debug.write_register(reg, options)
41
+ end
42
+
43
+ def execute(options = {})
44
+ options = { define: false, # whether to define subr or call it
45
+ name: 'executefunc1'
46
+ }.merge(options)
47
+
48
+ if options[:define]
49
+ # define subroutine
50
+ $tester.start_subroutine(options[:name])
51
+ $tester.cycle
52
+ $tester.end_subroutine
53
+ $tester.cycle
54
+ else
55
+ # call subroutine
56
+ $tester.cycle
57
+ $tester.call_subroutine(options[:name])
58
+ $tester.cycle
59
+ end
60
+ end
61
+
62
+ # Match loop functionality
63
+ def match(options = {})
64
+ options = { type: :match_pin, # whether to match DONE bit in register or match pin
65
+ # :match_done
66
+ # :match_2pins
67
+ delay_in_us: 5, # match loop delay
68
+ define: false, # whether to define subr or call it
69
+ subr_name: false, # default use match type as subr name
70
+ }.merge(options)
71
+
72
+ subr_name = options[:subr_name] ? options[:subr_name] : options[:type].to_s
73
+
74
+ if options[:define]
75
+ $tester.start_subroutine(subr_name)
76
+ $tester.cycle
77
+ if options[:type] == :match_done
78
+
79
+ # Match DONE bit in register
80
+ $tester.wait(match: true,
81
+ time_in_us: options[:delay_in_us],
82
+ global_loops: true,
83
+ check_for_fails: true,
84
+ force_fail_on_timeout: true,
85
+ clr_fail_post_match: true,
86
+ manual_stop: true) do
87
+ # Match on reading done bit
88
+ reg(:testme32).bits(:done).write(1)
89
+ reg(:testme32).bits(:done).read!
90
+ end
91
+ elsif options[:type] == :match_pin
92
+ # Match on TDO pin state
93
+ $tester.wait(match: true,
94
+ pin: pin(:tdo),
95
+ state: :high,
96
+ time_in_us: options[:delay_in_us],
97
+ global_loops: true,
98
+ check_for_fails: true,
99
+ force_fail_on_timeout: true,
100
+ clr_fail_post_match: true,
101
+ manual_stop: true)
102
+ elsif options[:type] == :match_2pins
103
+ # Match on TDO pin state
104
+ $tester.wait(match: true,
105
+ pin: pin(:tdo),
106
+ state: :high,
107
+ pin2: pin(:tms),
108
+ state2: :high,
109
+ time_in_us: options[:delay_in_us],
110
+ global_loops: true,
111
+ check_for_fails: true,
112
+ force_fail_on_timeout: true,
113
+ clr_fail_post_match: true,
114
+ manual_stop: true)
115
+ elsif options[:type] == :multiple_entries
116
+ # Match on TDO pin state, with multiple subr entry points
117
+ $tester.wait(match: true,
118
+ pin: pin(:tdo),
119
+ state: :high,
120
+ time_in_us: options[:delay_in_us],
121
+ global_loops: true,
122
+ multiple_entries: true,
123
+ check_for_fails: true,
124
+ force_fail_on_timeout: true,
125
+ clr_fail_post_match: true,
126
+ manual_stop: true)
127
+ end
128
+ $tester.cycle
129
+ $tester.end_subroutine
130
+ $tester.cycle
131
+ else
132
+ # call subroutine
133
+ $tester.cycle
134
+ $tester.call_subroutine(subr_name)
135
+ $tester.cycle
136
+ end
137
+ end
138
+
139
+ def handshake(options = {})
140
+ options = {
141
+ define: false, # whether to define subr or call it
142
+ }.merge(options)
143
+
144
+ if options[:define]
145
+ $tester.start_subroutine('handshake')
146
+ $tester.handshake(readcode: 100)
147
+ $tester.cycle
148
+ $tester.cycle
149
+ $tester.cycle
150
+ $tester.end_subroutine
151
+ else
152
+ $tester.cycle
153
+ $tester.call_subroutine('handshake')
154
+ end
155
+ end
156
+
157
+ def memory_test(options = {})
158
+ options = {
159
+ }.merge(options)
160
+
161
+ $tester.memory_test(inc_counter_x: true, gen_vector: true)
162
+
163
+ $tester.memory_test(inc_counter_y: true, gen_vector: true)
164
+
165
+ $tester.memory_test(init_counter_x: true)
166
+
167
+ $tester.memory_test(inc_counter_x: true, init_counter_y: true)
168
+
169
+ $tester.memory_test(inc_counter_y: true, capture_vector: true)
170
+
171
+ $tester.memory_test(pin: pin(:tdo), pin_data: :expect)
172
+ end
173
+
174
+ # dummy flag to check for a particular design bug for this DUT
175
+ def has_margin0_bug?
176
+ false
177
+ end
178
+
179
+ def find_block_by_id(id)
180
+ @blocks.find { |block| block.id == id }
181
+ end
182
+ end
183
+ end
184
+ end
@@ -0,0 +1,76 @@
1
+ module OrigenTesters
2
+ module Test
3
+ class DUT2
4
+ include Origen::TopLevel
5
+
6
+ def initialize
7
+ add_pin :reset, reset: :drive_hi, name: 'nvm_reset'
8
+ add_pin :clk, reset: :drive_hi, name: 'nvm_clk'
9
+ add_pin :clk_mux, reset: :drive_hi, name: 'nvm_clk_mux'
10
+ add_port :porta, reset: :drive_lo, size: 8
11
+ add_port :portb, reset: :drive_lo, size: 8, endian: :little
12
+ add_pin :invoke, reset: :drive_lo, name: 'nvm_invoke'
13
+ add_pin :done, reset: :expect_hi, name: 'nvm_done'
14
+ add_pin :fail, reset: :expect_lo, name: 'nvm_fail'
15
+ add_pin :alvtst, reset: :dont_care, name: 'nvm_alvtst'
16
+ add_pin :ahvtst, reset: :dont_care, name: 'nvm_ahvtst'
17
+ add_pin :dtst, reset: :dont_care, name: 'nvm_dtst'
18
+
19
+ add_pin :tclk, reset: :drive_lo
20
+ add_pin :trst, reset: :drive_hi
21
+
22
+ add_pin_alias :extal, :clk
23
+ add_pin_alias :extal_mux, :clk_mux
24
+ add_pin_alias :tms, :done
25
+ add_pin_alias :tdo, :fail
26
+ add_pin_alias :tdi, :invoke
27
+ add_pin_alias :resetb, :ahvtst
28
+
29
+ add_pin_alias :pa5, :porta, pin: 5
30
+ add_pin_alias :pa_lower, :porta, pins: [3..0]
31
+ add_pin_alias :pa_upper, :porta, pins: [7, 6, 5, 4]
32
+ add_port_alias :porta_alias, :porta
33
+ end
34
+
35
+ def startup(options)
36
+ if options[:add_additional_pins]
37
+ add_pin :late_added_pin, reset: :drive_hi
38
+ else
39
+ # Test that rendering some vectors from a template works...
40
+ if $tester.is_a?(J750)
41
+ $tester.render("#{Origen.root}/pattern/nvm/j750/_mode_entry.atp.erb", hold_cycles: 5)
42
+ end
43
+ end
44
+ $tester.set_timeset('nvmbist', 40) if $tester.is_vector_based?
45
+ end
46
+
47
+ def has_margin0_bug?
48
+ false
49
+ end
50
+
51
+ def write_register(reg, options = {})
52
+ reg
53
+ end
54
+
55
+ def read_register(reg, options = {})
56
+ reg
57
+ end
58
+
59
+ def base_address(reg, options = {})
60
+ if reg.owned_by?(:nvm)
61
+ 0x4000_0000
62
+ else
63
+ 0
64
+ end
65
+ end
66
+
67
+ def origen_dot_root
68
+ Origen.root
69
+ end
70
+
71
+ def origen_dot_root!
72
+ Origen.root!
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,119 @@
1
+ module OrigenTesters
2
+ module Test
3
+ class J750BaseInterface
4
+ # Options passed to Flow.create and Library.create will be passed in here, use as
5
+ # desired to configure your interface
6
+ def initialize(options = {})
7
+ end
8
+
9
+ def log(msg)
10
+ flow.logprint(msg)
11
+ end
12
+
13
+ def func(name, options = {})
14
+ options = {
15
+ duration: :static
16
+ }.merge(options)
17
+
18
+ block_loop(name, options) do |block, i, group|
19
+ ins = test_instances.functional(name)
20
+ ins.set_wait_flags(:a) if options[:duration] == :dynamic
21
+ ins.pin_levels = options.delete(:pin_levels) if options[:pin_levels]
22
+ if group
23
+ pname = "#{name}_b#{i}_pset"
24
+ patsets.add(pname, [{ pattern: "#{name}_b#{i}.PAT" },
25
+ { pattern: 'nvm_global_subs.PAT', start_label: 'subr' }])
26
+ ins.pattern = pname
27
+ flow.test(group, options) if i == 0
28
+ else
29
+ pname = "#{name}_pset"
30
+ patsets.add(pname, [{ pattern: "#{name}.PAT" },
31
+ { pattern: 'nvm_global_subs.PAT', start_label: 'subr' }])
32
+ ins.pattern = pname
33
+ if options[:cz_setup]
34
+ flow.cz(ins, options[:cz_setup], options)
35
+ else
36
+ flow.test(ins, options)
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ def block_loop(name, options)
43
+ if options[:by_block]
44
+ test_instances.group do |group|
45
+ group.name = name
46
+ $dut.blocks.each_with_index do |block, i|
47
+ yield block, i, group
48
+ end
49
+ end
50
+ else
51
+ yield
52
+ end
53
+ end
54
+
55
+ def por(options = {})
56
+ options = {
57
+ instance_not_available: true
58
+ }.merge(options)
59
+ flow.test('por_ins', options)
60
+ end
61
+
62
+ def para(name, options = {})
63
+ options = {
64
+ high_voltage: false
65
+ }.merge(options)
66
+ if options.delete(:high_voltage)
67
+ ins = test_instances.bpmu(name)
68
+ else
69
+ ins = test_instances.ppmu(name)
70
+ end
71
+ ins.dc_category = 'NVM_PARA'
72
+ flow.test(ins, options)
73
+ patsets.add("#{name}_pset", pattern: "#{name}.PAT")
74
+ end
75
+ alias_method :meas, :para
76
+
77
+ # OR 2 IDS together into 1 flag
78
+ def or_ids(options = {})
79
+ flow.or_flags(options[:id1], options[:id2], options)
80
+ end
81
+
82
+ def nop(options = {})
83
+ flow.nop options
84
+ end
85
+
86
+ def mto_memory(name, options = {})
87
+ options = {
88
+ duration: :static
89
+ }.merge(options)
90
+
91
+ block_loop(name, options) do |block, i, group|
92
+ ins = test_instances.mto_memory(name)
93
+ ins.set_wait_flags(:a) if options[:duration] == :dynamic
94
+ ins.pin_levels = options.delete(:pin_levels) if options[:pin_levels]
95
+ if group
96
+ pname = "#{name}_b#{i}_pset"
97
+ patsets.add(pname, [{ pattern: "#{name}_b#{i}.PAT" },
98
+ { pattern: 'nvm_global_subs.PAT', start_label: 'subr' }])
99
+ ins.pattern = pname
100
+ flow.test(group, options) if i == 0
101
+ else
102
+ pname = "#{name}_pset"
103
+ patsets.add(pname, [{ pattern: "#{name}.PAT" },
104
+ { pattern: 'nvm_global_subs.PAT', start_label: 'subr' }])
105
+ ins.pattern = pname
106
+ if options[:cz_setup]
107
+ flow.cz(ins, options[:cz_setup], options)
108
+ else
109
+ flow.test(ins, options)
110
+ end
111
+ end
112
+ end
113
+ end
114
+
115
+ def bin(number, options = {})
116
+ end
117
+ end
118
+ end
119
+ end