origen 0.2.6 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/bin/origen +3 -1
  3. data/config/boot.rb +1 -7
  4. data/config/commands.rb +0 -1
  5. data/config/version.rb +2 -2
  6. data/lib/c99/{j750_interface.rb → ate_interface.rb} +3 -11
  7. data/lib/c99/doc_interface.rb +1 -1
  8. data/lib/origen.rb +9 -30
  9. data/lib/origen/application.rb +10 -8
  10. data/lib/origen/application/configuration.rb +13 -26
  11. data/lib/origen/application/plugins.rb +122 -0
  12. data/lib/origen/application/plugins_manager.rb +16 -254
  13. data/lib/origen/application/release.rb +2 -2
  14. data/lib/origen/application/runner.rb +2 -4
  15. data/lib/origen/chips.rb +0 -0
  16. data/lib/origen/chips/chip.rb +0 -0
  17. data/lib/origen/chips/design_entry.rb +0 -0
  18. data/lib/origen/chips/doc_entry.rb +0 -0
  19. data/lib/origen/chips/note.rb +0 -0
  20. data/lib/origen/commands.rb +4 -44
  21. data/lib/origen/commands/compile.rb +1 -2
  22. data/lib/origen/commands/generate.rb +1 -1
  23. data/lib/origen/commands/interactive.rb +1 -2
  24. data/lib/origen/commands/plugin.rb +49 -56
  25. data/lib/origen/commands/program.rb +1 -1
  26. data/lib/origen/commands/rc.rb +2 -2
  27. data/lib/origen/commands/version.rb +2 -17
  28. data/lib/origen/commands_global.rb +3 -0
  29. data/lib/origen/file_handler.rb +10 -10
  30. data/lib/origen/generator.rb +1 -1
  31. data/lib/origen/generator/job.rb +1 -1
  32. data/lib/origen/generator/pattern.rb +2 -2
  33. data/lib/origen/generator/pattern_finder.rb +10 -9
  34. data/lib/origen/pins/pin.rb +0 -0
  35. data/lib/origen/regression_manager.rb +0 -0
  36. data/lib/origen/remote_manager.rb +2 -8
  37. data/lib/origen/revision_control/design_sync.rb +0 -0
  38. data/lib/origen/revision_control/git.rb +0 -0
  39. data/lib/origen/specs.rb +0 -0
  40. data/lib/origen/specs/checkers.rb +0 -0
  41. data/lib/origen/specs/creation_info.rb +0 -0
  42. data/lib/origen/specs/exhibit.rb +0 -0
  43. data/lib/origen/specs/spec.rb +0 -0
  44. data/lib/origen/utility.rb +0 -1
  45. data/lib/origen/utility/diff.rb +0 -0
  46. metadata +42 -119
  47. data/lib/origen/import_manager.rb +0 -596
  48. data/lib/origen/nvm.rb +0 -6
  49. data/lib/origen/nvm/block_array.rb +0 -72
  50. data/lib/origen/tester.rb +0 -56
  51. data/lib/origen/tester/api.rb +0 -277
  52. data/lib/origen/tester/bdm/bdm.rb +0 -25
  53. data/lib/origen/tester/doc/doc.rb +0 -226
  54. data/lib/origen/tester/doc/generator.rb +0 -126
  55. data/lib/origen/tester/doc/generator/flow.rb +0 -71
  56. data/lib/origen/tester/doc/generator/flow_line.rb +0 -203
  57. data/lib/origen/tester/doc/generator/test.rb +0 -68
  58. data/lib/origen/tester/doc/generator/test_group.rb +0 -66
  59. data/lib/origen/tester/doc/generator/tests.rb +0 -47
  60. data/lib/origen/tester/doc/model.rb +0 -162
  61. data/lib/origen/tester/generator.rb +0 -271
  62. data/lib/origen/tester/generator/flow_control_api.rb +0 -606
  63. data/lib/origen/tester/generator/identity_map.rb +0 -25
  64. data/lib/origen/tester/generator/placeholder.rb +0 -13
  65. data/lib/origen/tester/generator/test_numberer.rb +0 -25
  66. data/lib/origen/tester/interface.rb +0 -154
  67. data/lib/origen/tester/j750/files.rb +0 -45
  68. data/lib/origen/tester/j750/generator.rb +0 -203
  69. data/lib/origen/tester/j750/generator/flow.rb +0 -123
  70. data/lib/origen/tester/j750/generator/flow_line.rb +0 -288
  71. data/lib/origen/tester/j750/generator/patgroup.rb +0 -111
  72. data/lib/origen/tester/j750/generator/patgroups.rb +0 -41
  73. data/lib/origen/tester/j750/generator/patset.rb +0 -111
  74. data/lib/origen/tester/j750/generator/patsets.rb +0 -41
  75. data/lib/origen/tester/j750/generator/templates/flow.txt.erb +0 -9
  76. data/lib/origen/tester/j750/generator/templates/instances.txt.erb +0 -16
  77. data/lib/origen/tester/j750/generator/templates/patgroups.txt.erb +0 -8
  78. data/lib/origen/tester/j750/generator/templates/patsets.txt.erb +0 -10
  79. data/lib/origen/tester/j750/generator/test_instance.rb +0 -846
  80. data/lib/origen/tester/j750/generator/test_instance_group.rb +0 -60
  81. data/lib/origen/tester/j750/generator/test_instances.rb +0 -182
  82. data/lib/origen/tester/j750/j750.rb +0 -845
  83. data/lib/origen/tester/j750/j750_hpt.rb +0 -35
  84. data/lib/origen/tester/j750/parser.rb +0 -104
  85. data/lib/origen/tester/j750/parser/ac_spec.rb +0 -11
  86. data/lib/origen/tester/j750/parser/ac_specs.rb +0 -0
  87. data/lib/origen/tester/j750/parser/dc_spec.rb +0 -36
  88. data/lib/origen/tester/j750/parser/dc_specs.rb +0 -50
  89. data/lib/origen/tester/j750/parser/descriptions.rb +0 -340
  90. data/lib/origen/tester/j750/parser/flow.rb +0 -111
  91. data/lib/origen/tester/j750/parser/flow_line.rb +0 -207
  92. data/lib/origen/tester/j750/parser/flows.rb +0 -23
  93. data/lib/origen/tester/j750/parser/pattern_set.rb +0 -94
  94. data/lib/origen/tester/j750/parser/pattern_sets.rb +0 -33
  95. data/lib/origen/tester/j750/parser/test_instance.rb +0 -322
  96. data/lib/origen/tester/j750/parser/test_instances.rb +0 -26
  97. data/lib/origen/tester/j750/parser/timeset.rb +0 -15
  98. data/lib/origen/tester/j750/parser/timesets.rb +0 -0
  99. data/lib/origen/tester/jlink/jlink.rb +0 -33
  100. data/lib/origen/tester/parser.rb +0 -24
  101. data/lib/origen/tester/parser/description_lookup.rb +0 -64
  102. data/lib/origen/tester/parser/searchable_array.rb +0 -32
  103. data/lib/origen/tester/parser/searchable_hash.rb +0 -32
  104. data/lib/origen/tester/time.rb +0 -338
  105. data/lib/origen/tester/timing.rb +0 -253
  106. data/lib/origen/tester/ultraflex/files.rb +0 -45
  107. data/lib/origen/tester/ultraflex/generator.rb +0 -200
  108. data/lib/origen/tester/ultraflex/generator/flow.rb +0 -119
  109. data/lib/origen/tester/ultraflex/generator/flow_line.rb +0 -269
  110. data/lib/origen/tester/ultraflex/generator/patgroup.rb +0 -111
  111. data/lib/origen/tester/ultraflex/generator/patgroups.rb +0 -41
  112. data/lib/origen/tester/ultraflex/generator/patset.rb +0 -111
  113. data/lib/origen/tester/ultraflex/generator/patsets.rb +0 -41
  114. data/lib/origen/tester/ultraflex/generator/templates/flow.txt.erb +0 -9
  115. data/lib/origen/tester/ultraflex/generator/templates/instances.txt.erb +0 -16
  116. data/lib/origen/tester/ultraflex/generator/templates/patgroups.txt.erb +0 -8
  117. data/lib/origen/tester/ultraflex/generator/templates/patsets.txt.erb +0 -10
  118. data/lib/origen/tester/ultraflex/generator/test_instance.rb +0 -622
  119. data/lib/origen/tester/ultraflex/generator/test_instance_group.rb +0 -60
  120. data/lib/origen/tester/ultraflex/generator/test_instances.rb +0 -174
  121. data/lib/origen/tester/ultraflex/parser.rb +0 -104
  122. data/lib/origen/tester/ultraflex/parser/ac_spec.rb +0 -11
  123. data/lib/origen/tester/ultraflex/parser/ac_specs.rb +0 -0
  124. data/lib/origen/tester/ultraflex/parser/dc_spec.rb +0 -36
  125. data/lib/origen/tester/ultraflex/parser/dc_specs.rb +0 -50
  126. data/lib/origen/tester/ultraflex/parser/descriptions.rb +0 -342
  127. data/lib/origen/tester/ultraflex/parser/flow.rb +0 -111
  128. data/lib/origen/tester/ultraflex/parser/flow_line.rb +0 -207
  129. data/lib/origen/tester/ultraflex/parser/flows.rb +0 -23
  130. data/lib/origen/tester/ultraflex/parser/pattern_set.rb +0 -94
  131. data/lib/origen/tester/ultraflex/parser/pattern_sets.rb +0 -33
  132. data/lib/origen/tester/ultraflex/parser/test_instance.rb +0 -262
  133. data/lib/origen/tester/ultraflex/parser/test_instances.rb +0 -26
  134. data/lib/origen/tester/ultraflex/parser/timeset.rb +0 -15
  135. data/lib/origen/tester/ultraflex/parser/timesets.rb +0 -0
  136. data/lib/origen/tester/ultraflex/ultraflex.rb +0 -759
  137. data/lib/origen/tester/v93k/generator.rb +0 -80
  138. data/lib/origen/tester/v93k/generator/flow.rb +0 -63
  139. data/lib/origen/tester/v93k/generator/flow_node.rb +0 -17
  140. data/lib/origen/tester/v93k/generator/flow_node/print.rb +0 -10
  141. data/lib/origen/tester/v93k/generator/pattern.rb +0 -16
  142. data/lib/origen/tester/v93k/generator/pattern_master.rb +0 -54
  143. data/lib/origen/tester/v93k/generator/templates/_test_method.txt.erb +0 -6
  144. data/lib/origen/tester/v93k/generator/templates/_test_suite.txt.erb +0 -11
  145. data/lib/origen/tester/v93k/generator/templates/template.flow.erb +0 -121
  146. data/lib/origen/tester/v93k/generator/templates/template.pmfl.erb +0 -9
  147. data/lib/origen/tester/v93k/generator/test_function.rb +0 -103
  148. data/lib/origen/tester/v93k/generator/test_functions.rb +0 -79
  149. data/lib/origen/tester/v93k/generator/test_method.rb +0 -46
  150. data/lib/origen/tester/v93k/generator/test_methods.rb +0 -75
  151. data/lib/origen/tester/v93k/generator/test_suite.rb +0 -54
  152. data/lib/origen/tester/v93k/generator/test_suites.rb +0 -65
  153. data/lib/origen/tester/v93k/v93k.rb +0 -420
  154. data/lib/origen/tester/vector.rb +0 -86
  155. data/lib/origen/tester/vector_generator.rb +0 -637
  156. data/lib/origen/tester/vector_pipeline.rb +0 -150
  157. data/lib/origen/utility/design_sync.rb +0 -494
  158. data/lib/origen/version_checker.rb +0 -117
data/lib/origen/nvm.rb DELETED
@@ -1,6 +0,0 @@
1
- module Origen
2
- # Module containing helpers to support NVM testing
3
- module NVM
4
- autoload :BlockArray, 'origen/nvm/block_array'
5
- end
6
- end
@@ -1,72 +0,0 @@
1
- module Origen
2
- module NVM
3
- # A block array is a standard Ruby array that has been enhanced with additional
4
- # methods related to the fact that it is intended to hold NVM block objects.
5
- #
6
- # This for example allows a block select value to be automatically generated for
7
- # whatever blocks are contained in the array by calling the bsel method.
8
- class BlockArray < ::Array
9
- # Return all single blocks wrapped in a block array
10
- def [](ix)
11
- BlockArray.new << super(ix)
12
- end
13
-
14
- # Extract a subset of blocks based on ids
15
- #
16
- # $nvm.blocks.find(0,3)
17
- #
18
- # An elegant way to implement this is via an accessor like this on your top-level
19
- # object which owns the blocks:
20
- #
21
- # def blocks(*args)
22
- # if args.empty?
23
- # @blocks
24
- # else
25
- # @blocks.find(*args)
26
- # end
27
- # end
28
- # alias :block :blocks
29
- #
30
- # This provides the following API:
31
- #
32
- # $nvm.blocks # Returns all blocks
33
- # $nvm.block(0) # Returns block 0 wrapped in a block array
34
- # $nvm.blocks(0, 3) # Returns blocks 0 and 3 wrapped in a block array
35
- def find(*ids)
36
- b = BlockArray.new
37
- ids.each do |id|
38
- b << self[id]
39
- end
40
- b
41
- end
42
-
43
- # def method_missing(method, *args, &blk)
44
- # if self.size == 1
45
- # self.first.send(method, *args, &blk)
46
- # else
47
- # super
48
- # end
49
- # end
50
-
51
- # Returns the block select value required to select all contained blocks, the block object
52
- # must implement a method called bsel for this to work
53
- def bsel
54
- reduce(0) { |bsels, block| bsels | block.bsel }
55
- end
56
- alias_method :block_select, :bsel
57
- alias_method :block_select_value, :bsel
58
-
59
- # Returns the sum of the size of all contained blocks in KB, the block object must implement
60
- # a method called size_in_kb for this to work
61
- def size_in_kb
62
- reduce(0) { |sum, block| sum + block.size_in_kb }
63
- end
64
-
65
- # Returns the sum of the size of all contained blocks in bytes, the block object must implement
66
- # a method called size_in_kb for this to work
67
- def size_in_bytes
68
- size_in_kb * 1024
69
- end
70
- end
71
- end
72
- end
data/lib/origen/tester.rb DELETED
@@ -1,56 +0,0 @@
1
- require 'active_support/concern'
2
- module Origen
3
- module Tester
4
- autoload :J750, 'origen/tester/j750/j750'
5
- autoload :J750_HPT, 'origen/tester/j750/j750_hpt'
6
- autoload :Ultraflex, 'origen/tester/ultraflex/ultraflex'
7
- autoload :V93K, 'origen/tester/v93k/v93k'
8
- autoload :BDM, 'origen/tester/bdm/bdm'
9
- autoload :JLink, 'origen/tester/jlink/jlink'
10
- autoload :Doc, 'origen/tester/doc/doc'
11
-
12
- autoload :Vector, 'origen/tester/vector'
13
- autoload :VectorPipeline, 'origen/tester/vector_pipeline'
14
- autoload :CommandBasedTester, 'origen/tester/command_based_tester'
15
- autoload :Interface, 'origen/tester/interface'
16
- autoload :Generator, 'origen/tester/generator'
17
- autoload :Parser, 'origen/tester/parser'
18
- autoload :Time, 'origen/tester/time'
19
-
20
- extend ActiveSupport::Concern
21
-
22
- require 'origen/tester/vector_generator'
23
- require 'origen/tester/timing'
24
- require 'origen/tester/api'
25
-
26
- include VectorGenerator
27
- include Timing
28
- include API
29
-
30
- included do
31
- end
32
-
33
- module ClassMethods # :nodoc:
34
- # This overrides the new method of any class which includes this
35
- # module to force the newly created instance to be registered as
36
- # a tester with Origen
37
- def new(*args, &block) # :nodoc:
38
- if Origen.app.with_doc_tester?
39
- x = Origen::Tester::Doc.allocate
40
- if Origen.app.with_html_doc_tester?
41
- x.html_mode = true
42
- end
43
- else
44
- x = allocate
45
- end
46
- x.send(:initialize, *args, &block)
47
- x.register_tester
48
- x
49
- end
50
- end
51
-
52
- def register_tester # :nodoc:
53
- Origen.app.tester = self
54
- end
55
- end
56
- end
@@ -1,277 +0,0 @@
1
- module Origen
2
- module Tester
3
- # This module implements the basic set of methods that a tester must have
4
- # in order for Origen to talk to it.
5
- #
6
- # They can be overridden by tester specific classes and who may go on to add
7
- # additional methods of their own.
8
- #
9
- # Essentially this API means that any class that includes Origen::Tester will
10
- # function as a tester, although it might not do very much!
11
- module API
12
- attr_accessor :includes
13
- attr_accessor :comment_level
14
- attr_accessor :generating
15
- attr_accessor :inhibit_comments
16
- attr_accessor :inhibit_vectors
17
-
18
- def name
19
- @name || self.class
20
- end
21
-
22
- def generate?
23
- true
24
- end
25
-
26
- def generating_pattern?
27
- @generating == :pattern
28
- end
29
-
30
- def generating_program?
31
- @generating == :program
32
- end
33
-
34
- def pat_extension
35
- @pat_extension || 'txt'
36
- end
37
- alias_method :pattern_extension, :pat_extension
38
-
39
- def comment_char
40
- @comment_char || '//'
41
- end
42
-
43
- def program_comment_char
44
- @program_comment_char || comment_char
45
- end
46
-
47
- def pattern_header(*_args)
48
- end
49
-
50
- def pattern_footer(*_args)
51
- end
52
-
53
- def step_comment_prefix
54
- @step_comment_prefix || '##'
55
- end
56
-
57
- def is_vector_based?
58
- return @vector_based if defined?(@vector_based)
59
- true
60
- end
61
-
62
- def is_command_based?
63
- !is_vector_based?
64
- end
65
-
66
- def j750?
67
- false
68
- end
69
-
70
- def v93k?
71
- false
72
- end
73
-
74
- def ultraflex?
75
- false
76
- end
77
-
78
- def doc?
79
- false
80
- end
81
-
82
- def j750_hpt?
83
- false
84
- end
85
-
86
- def annotate(_msg, _options = {})
87
- end
88
-
89
- # Ignore fails on the given pins for the duration of the given block, this
90
- # has the effect of temporarily setting the states of the given pins to
91
- # don't care.
92
- def ignore_fails(*pins)
93
- pins.each(&:suspend)
94
- yield
95
- pins.each(&:resume)
96
- end
97
-
98
- # Output a comment in the pattern, normally you would not call this directly
99
- # and instead use these shorthand methods:
100
- # cc "Some comment"
101
- # ss "A single line step comment"
102
- # step_comment do
103
- # cc "A multi line"
104
- # cc "step comment"
105
- # end
106
- def c1(msg, _options = {})
107
- prefix = comment_char + ' '
108
- prefix += step_comment_prefix + ' ' if @step_comment_on
109
- push_comment(prefix + msg.to_s)
110
- end
111
-
112
- def c2(msg, options = {})
113
- c1(msg, options)
114
- end
115
-
116
- def pattern_section(msg)
117
- if generating_program?
118
- yield
119
- else
120
- step_comment(msg)
121
- yield
122
- end
123
- end
124
-
125
- def ss(msg = nil)
126
- div = step_comment_prefix.length
127
- div = 1 if div == 0
128
- c1(step_comment_prefix * (70 / div))
129
- @step_comment_on = true
130
- if block_given?
131
- yield
132
- else
133
- c1(msg)
134
- end
135
- @step_comment_on = false
136
- c1(step_comment_prefix * (70 / div))
137
- end
138
-
139
- def snip(_number, _options = {})
140
- yield
141
- end
142
-
143
- # Allows a section to be run without actually generating any vectors. This can be useful
144
- # to ensure the pin states end up as they otherwise would have if the section had been run.
145
- # Classic example of this is a subroutine pattern, wrap this around a call to the startup
146
- # routine to ensure the pin states are as they would have been immediately after the startup.
147
- # ==== Example
148
- # # Setup state as if I had run startup without actually doing so
149
- # $tester.inhibit_vectors_and_comments do
150
- # $soc.startup
151
- # $top.startup
152
- # end
153
- def inhibit_vectors_and_comments
154
- inhibit_vectors = @inhibit_vectors
155
- inhibit_comments = @inhibit_comments
156
- @inhibit_vectors = true
157
- @inhibit_comments = true
158
- yield
159
- @inhibit_vectors = inhibit_vectors # Restore to their initial state
160
- @inhibit_comments = inhibit_comments
161
- end
162
-
163
- # @see inhibit_vectors_and_comments
164
- def inhibit_vectors
165
- inhibit_vectors = @inhibit_vectors
166
- @inhibit_vectors = true
167
- yield
168
- @inhibit_vectors = inhibit_vectors # Restore to their initial state
169
- end
170
-
171
- # @see inhibit_vectors_and_comments
172
- def inhibit_comments
173
- inhibit_comments = @inhibit_comments
174
- @inhibit_comments = true
175
- yield
176
- @inhibit_comments = inhibit_comments
177
- end
178
-
179
- # Generate a vector.
180
- # Calling this method will generate a vector in the output pattern based on the
181
- # current pin states and timeset.
182
- def cycle(options = {})
183
- options = {
184
- microcode: '',
185
- timeset: current_timeset,
186
- pin_vals: current_pin_vals,
187
- repeat: nil
188
- }.merge(options)
189
-
190
- if any_clocks_running?
191
- update_running_clocks
192
- if options[:repeat]
193
- slice_repeats(options).each do |slice|
194
- options[:repeat] = slice[0]
195
- delay(options.delete(:repeat), options) do |options|
196
- push_vector(options)
197
- end
198
- slice[1].each { |clock_pin_name| clocks_running[clock_pin_name].toggle_clock }
199
- options[:pin_vals] = current_pin_vals
200
- end
201
- else
202
- push_vector(options)
203
- pins_need_toggling.each { |clock_pin_name| clocks_running[clock_pin_name].toggle_clock }
204
- end
205
- else
206
- if options[:repeat]
207
- delay(options.delete(:repeat), options) do |options|
208
- push_vector(options)
209
- end
210
- else
211
- push_vector(options)
212
- end
213
- end
214
- end
215
-
216
- def import_test_time(_file, _options = {})
217
- puts "Sorry but an importer doesn't exist for: #{Origen.tester.class}"
218
- end
219
-
220
- def any_clocks_running?
221
- @clocks_running.nil? ? false : @clocks_running.count > 0
222
- end
223
-
224
- def clocks_running
225
- @clocks_running
226
- end
227
- alias_method :running_clocks, :clocks_running
228
-
229
- def push_running_clock(pin)
230
- @clocks_running.nil? ? @clocks_running = { pin.name.to_s => pin } : @clocks_running[pin.name.to_s] = pin
231
- end
232
-
233
- def pop_running_clock(pin)
234
- fail "ERROR: No clocks running, doesn't make sense to pop one" unless any_clocks_running?
235
- @clocks_running.delete(pin.name.to_s)
236
- end
237
-
238
- def slice_repeats(options = {})
239
- slices = {}
240
- repeat_ary = []
241
- clocks_running.each do |name, clock_pin|
242
- if clock_pin.next_edge < (cycle_count + options[:repeat])
243
- pin_slices = (clock_pin.next_edge..(cycle_count + options[:repeat])).step(clock_pin.half_period).to_a
244
- pin_slices.insert(0, cycle_count)
245
- else
246
- pin_slices = [cycle_count]
247
- end
248
- pin_slices.each do |cycle|
249
- slices[cycle].nil? ? slices[cycle] = name : slices[cycle] = "#{slices[cycle]},#{name}"
250
- end
251
- slices[cycle_count + options[:repeat]] = '' if pin_slices[-1] != cycle_count + options[:repeat]
252
- end
253
- slices.keys.sort.each do |edge_cycles|
254
- # puts "Toggle #{slices[edge_cycles]} on #{edge_cycles}"
255
- repeat_ary.push([edge_cycles, slices[edge_cycles].split(',')])
256
- end
257
-
258
- (repeat_ary.count - 1).downto(1).each { |i| repeat_ary[i][0] = repeat_ary[i][0] - repeat_ary[i - 1][0] }
259
- repeat_ary[1..-1]
260
- end
261
-
262
- def pins_need_toggling
263
- toggle_ary = []
264
- clocks_running.each do |name, clock_pin|
265
- toggle_ary.push("#{name}") if clock_pin.next_edge == cycle_count
266
- end
267
- toggle_ary
268
- end
269
-
270
- def update_running_clocks
271
- clocks_running.each do |_name, clock_pin|
272
- clock_pin.update_clock
273
- end
274
- end
275
- end
276
- end
277
- end
@@ -1,25 +0,0 @@
1
- module Origen
2
- module Tester
3
- class BDM < CommandBasedTester
4
- def initialize
5
- super
6
- # The minimum time unit is 0.1s
7
- set_timeset('default', 100_000_000)
8
- @pat_extension = 'cmd'
9
- @comment_char = '//'
10
- end
11
-
12
- def delay(cycles)
13
- microcode "WAIT #{cycles_to_ts(cycles)}"
14
- end
15
-
16
- def write_byte(address, data)
17
- microcode "WB 0x#{address.to_s(16).upcase} 0x#{data.to_s(16).upcase}"
18
- end
19
-
20
- def write_word(address, data)
21
- microcode "WW 0x#{address.to_s(16).upcase} 0x#{data.to_s(16).upcase}"
22
- end
23
- end
24
- end
25
- end
@@ -1,226 +0,0 @@
1
- module Origen
2
- module Tester
3
- # Tester model to generate test program documentation from your pattern sources.
4
- # This is intended to be a drop in replacement for existing testers and instead
5
- # of generating patterns or test program sheets it will generate a document object
6
- # which you can then render out via a template or manually.
7
- class Doc
8
- include Tester
9
-
10
- autoload :Generator, 'origen/tester/doc/generator'
11
- autoload :Model, 'origen/tester/doc/model'
12
-
13
- attr_accessor :html_mode
14
-
15
- def generate?
16
- html_mode
17
- end
18
-
19
- def initialize(*_args)
20
- @pat_extension = 'md'
21
- @indent = 0
22
- @snip_counters = []
23
- end
24
-
25
- # Snip the number of comment lines generated by the contained block
26
- # to the number given, this is useful for keeping files sizes down and
27
- # is typically used to snip sections like downloading LRE code.
28
- def snip(number, _options = {})
29
- @snip_counters.push number + 1
30
- yield
31
- @snip_counters.pop
32
- end
33
-
34
- def pc(msg)
35
- if @snip_counters.last
36
- if @snip_counters.last == 1
37
- @snip_counters[@snip_counters.size - 1] = 0
38
- msg = ' ...snipped'
39
- elsif @snip_counters.last == 0
40
- return
41
- else
42
- @snip_counters[@snip_counters.size - 1] -= 1
43
- end
44
- end
45
- if html_mode
46
- push_comment(msg)
47
- else
48
- Origen.log.info((' ' * @indent) + msg)
49
- end
50
- end
51
-
52
- def c1(msg, options = {})
53
- if generating_program?
54
- Origen.interface.doc_comments_capture(msg)
55
- else
56
- unless @inhibit_comments
57
- options = {
58
- prefix: true
59
- }.merge(options)
60
- if @step_comment_on
61
- open_text_block
62
- if options[:prefix]
63
- pc "# #{msg}"
64
- else
65
- pc "#{msg}"
66
- end
67
- end
68
- end
69
- end
70
- end
71
-
72
- def c2(msg, options = {})
73
- unless @inhibit_comments
74
- options = {
75
- prefix: true
76
- }.merge(options)
77
- open_text_block
78
- if options[:prefix]
79
- pc "# #{msg}"
80
- else
81
- pc "#{msg}"
82
- end
83
- end
84
- end
85
-
86
- def annotate(msg, _options)
87
- unless @inhibit_comments
88
- if html_mode
89
- pc ''
90
- lines = msg.split("\n")
91
- leading_spaces = lines.first[/\A */].size
92
- lines.each do |line|
93
- pc line.gsub(/^.{#{leading_spaces}}/, '')
94
- end
95
- pc ''
96
- end
97
- end
98
- end
99
-
100
- def open_text_block
101
- if html_mode
102
- unless @text_block_open
103
- pc ''
104
- pc '~~~text'
105
- @text_block_open = true
106
- end
107
- end
108
- end
109
-
110
- def close_text_block
111
- if html_mode
112
- if @text_block_open
113
- pc '~~~'
114
- pc ''
115
- @text_block_open = false
116
- end
117
- end
118
- end
119
-
120
- def pattern_name
121
- Origen.app.current_job.output_pattern_filename.gsub('.md', '')
122
- end
123
-
124
- def pre_header
125
- # pc "---"
126
- # pc "layout: bootstrap"
127
- # pc "title: #{pattern_name}"
128
- # pc "gzip: false"
129
- # pc "---"
130
- # pc ""
131
- # pc "# #{pattern_name}"
132
- # pc ""
133
- end
134
-
135
- def pattern_section(msg)
136
- unless @inhibit_comments
137
- if generating_program?
138
- Origen.interface.flow.start_section(name: msg)
139
- yield
140
- Origen.interface.flow.stop_section
141
- else
142
- if html_mode
143
- counter = next_accordion_counter
144
- close_text_block
145
- pc ''
146
- pc "<div class=\"accordion-group\">"
147
- pc "<div class=\"accordion-heading\">"
148
- pc "<a class=\"accordion-toggle\" data-toggle=\"collapse\" data-parent=\"#accordion2\" href=\"#collapseComment#{counter}\">"
149
- pc "#{msg}"
150
- pc '</a>'
151
- pc '</div>'
152
- pc "<div id=\"collapseComment#{counter}\" class=\"accordion-body collapse\">"
153
- pc "<div class=\"accordion-inner\" markdown=\"1\">"
154
- yield
155
- close_text_block
156
- pc '</div>'
157
- pc '</div>'
158
- pc '</div>'
159
- else
160
- pc ''
161
- pc "#{msg}"
162
- pc ''
163
- @indent += 4
164
- yield
165
- @indent -= 4
166
- end
167
- end
168
- end
169
- end
170
-
171
- def next_accordion_counter
172
- @accordion_counter ||= 0
173
- @accordion_counter += 1
174
- end
175
-
176
- def ss(msg = nil)
177
- unless @inhibit_comments
178
- @step_comment_on = true
179
- if block_given?
180
- yield
181
- else
182
- c2(msg)
183
- end
184
- @step_comment_on = false
185
- end
186
- end
187
-
188
- def self.generate_program_model(files, options = {})
189
- options = {
190
- action: :program,
191
- return_model: true,
192
- skip_diff: true
193
- }.merge(options)
194
- Origen.app.with_doc_tester do
195
- Origen.target.temporary = options[:target] if options[:target]
196
- Origen.app.load_target!
197
- Origen.interface.reset_globals
198
- options[:files] = files
199
- Origen.file_handler.preserve_and_clear_state do
200
- Origen.app.runner.launch(options)
201
- end
202
- end
203
- model.target = Origen.target.name
204
- model
205
- end
206
-
207
- def self.model
208
- @model ||= Model.new
209
- end
210
-
211
- def doc?
212
- true
213
- end
214
-
215
- def cycle(_options = {})
216
- end
217
-
218
- # Ignore any tester-specific methods
219
- def method_missing(_method, *_args, &_block)
220
- if block_given?
221
- yield
222
- end
223
- end
224
- end
225
- end
226
- end