origen 0.60.7 → 0.60.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/config/rubocop/easy.yml +4875 -308
- data/config/rubocop/strict.yml +4875 -308
- data/config/version.rb +1 -1
- data/lib/origen/application/configuration.rb +6 -3
- data/lib/origen/application/deployer.rb +4 -4
- data/lib/origen/application/environment.rb +4 -2
- data/lib/origen/application/lsf.rb +23 -4
- data/lib/origen/application/lsf_manager.rb +48 -52
- data/lib/origen/application/plugins.rb +7 -7
- data/lib/origen/application/release.rb +5 -3
- data/lib/origen/application/runner.rb +5 -6
- data/lib/origen/application/statistics.rb +1 -0
- data/lib/origen/application/target.rb +9 -6
- data/lib/origen/application/version_tracker.rb +4 -5
- data/lib/origen/application/workspace_manager.rb +5 -2
- data/lib/origen/application.rb +9 -9
- data/lib/origen/boot/api.rb +3 -0
- data/lib/origen/boot/app.rb +28 -30
- data/lib/origen/boot.rb +1 -0
- data/lib/origen/bugs.rb +2 -2
- data/lib/origen/chip_mode.rb +7 -4
- data/lib/origen/chip_package.rb +50 -53
- data/lib/origen/chips/chip.rb +8 -4
- data/lib/origen/chips.rb +16 -12
- data/lib/origen/client.rb +1 -0
- data/lib/origen/clocks/clock.rb +8 -7
- data/lib/origen/clocks/clocks_collection.rb +2 -1
- data/lib/origen/code_generators/actions.rb +1 -1
- data/lib/origen/code_generators/base.rb +1 -1
- data/lib/origen/code_generators.rb +3 -0
- data/lib/origen/commands/archive.rb +1 -1
- data/lib/origen/commands/compile.rb +2 -2
- data/lib/origen/commands/fetch.rb +1 -1
- data/lib/origen/commands/generate.rb +3 -3
- data/lib/origen/commands/interactive.rb +6 -7
- data/lib/origen/commands/lint.rb +1 -1
- data/lib/origen/commands/lsf.rb +2 -2
- data/lib/origen/commands/new.rb +1 -1
- data/lib/origen/commands/plugin.rb +2 -2
- data/lib/origen/commands/program.rb +3 -3
- data/lib/origen/commands/rc.rb +4 -4
- data/lib/origen/commands/save.rb +1 -1
- data/lib/origen/commands/time.rb +4 -6
- data/lib/origen/commands/web.rb +5 -2
- data/lib/origen/commands.rb +1 -1
- data/lib/origen/componentable.rb +1 -0
- data/lib/origen/controller.rb +11 -13
- data/lib/origen/core_ext/array.rb +2 -1
- data/lib/origen/core_ext/enumerable.rb +4 -2
- data/lib/origen/core_ext/hash.rb +5 -6
- data/lib/origen/core_ext/integer.rb +2 -4
- data/lib/origen/core_ext/object.rb +2 -2
- data/lib/origen/core_ext/option_parser/optparse.rb +1 -1
- data/lib/origen/core_ext/string.rb +8 -8
- data/lib/origen/database/key_value_store.rb +12 -14
- data/lib/origen/database/key_value_stores.rb +1 -0
- data/lib/origen/errata/hw_erratum.rb +1 -1
- data/lib/origen/errata.rb +7 -8
- data/lib/origen/features/feature.rb +1 -0
- data/lib/origen/features.rb +4 -6
- data/lib/origen/file_handler.rb +8 -7
- data/lib/origen/fuses/fuse_field.rb +2 -2
- data/lib/origen/generator/compiler.rb +2 -4
- data/lib/origen/generator/job.rb +3 -2
- data/lib/origen/generator/pattern.rb +3 -3
- data/lib/origen/generator/pattern_finder.rb +6 -5
- data/lib/origen/generator/pattern_sequence.rb +3 -0
- data/lib/origen/generator/renderer.rb +3 -4
- data/lib/origen/generator/resources.rb +1 -1
- data/lib/origen/generator/stage.rb +3 -0
- data/lib/origen/limits/limit.rb +14 -11
- data/lib/origen/limits/limit_set.rb +2 -1
- data/lib/origen/loader.rb +4 -2
- data/lib/origen/log.rb +3 -2
- data/lib/origen/memory.rb +1 -0
- data/lib/origen/model.rb +10 -4
- data/lib/origen/models.rb +2 -2
- data/lib/origen/netlist/list.rb +1 -0
- data/lib/origen/netlist.rb +5 -7
- data/lib/origen/org_file/interceptor.rb +1 -1
- data/lib/origen/org_file.rb +4 -1
- data/lib/origen/parameters/set.rb +1 -0
- data/lib/origen/parameters.rb +3 -1
- data/lib/origen/pins/pin.rb +18 -12
- data/lib/origen/pins/pin_bank.rb +3 -0
- data/lib/origen/pins/pin_clock.rb +3 -2
- data/lib/origen/pins/pin_collection.rb +3 -0
- data/lib/origen/pins/timing/wave.rb +5 -0
- data/lib/origen/pins.rb +7 -1
- data/lib/origen/ports.rb +1 -1
- data/lib/origen/power_domains/power_domain.rb +5 -2
- data/lib/origen/power_domains/power_domains_collection.rb +2 -1
- data/lib/origen/registers/bit.rb +21 -17
- data/lib/origen/registers/bit_collection.rb +15 -6
- data/lib/origen/registers/reg.rb +34 -28
- data/lib/origen/registers.rb +25 -24
- data/lib/origen/remote_manager.rb +3 -2
- data/lib/origen/revision_control/base.rb +1 -4
- data/lib/origen/revision_control/design_sync.rb +10 -10
- data/lib/origen/revision_control/git.rb +4 -2
- data/lib/origen/site_config/config.rb +3 -1
- data/lib/origen/site_config.rb +3 -0
- data/lib/origen/specs/checkers.rb +12 -8
- data/lib/origen/specs/doc_resource.rb +3 -4
- data/lib/origen/specs/spec.rb +5 -1
- data/lib/origen/specs/version_history.rb +1 -1
- data/lib/origen/specs.rb +52 -37
- data/lib/origen/sub_blocks.rb +20 -14
- data/lib/origen/top_level.rb +2 -1
- data/lib/origen/users/user.rb +4 -5
- data/lib/origen/utility/csv_data.rb +6 -4
- data/lib/origen/utility/diff.rb +9 -9
- data/lib/origen/utility/file_diff.rb +4 -0
- data/lib/origen/utility/input_capture.rb +6 -6
- data/lib/origen/utility/mailer.rb +8 -11
- data/lib/origen/utility/time_and_date.rb +1 -2
- data/lib/origen/utility.rb +2 -2
- data/lib/origen/value.rb +2 -1
- data/lib/origen/version_string.rb +33 -41
- data/lib/origen.rb +62 -64
- data/origen_app_generators/origen_app_generators.gemspec +1 -1
- metadata +9 -27
- data/config/rubocop/easy_disabled.yml +0 -275
- data/config/rubocop/easy_enabled.yml +0 -727
- data/config/rubocop/strict_disabled.yml +0 -251
- data/config/rubocop/strict_enabled.yml +0 -751
data/lib/origen/specs.rb
CHANGED
|
@@ -14,7 +14,7 @@ module Origen
|
|
|
14
14
|
require 'origen/specs/checkers'
|
|
15
15
|
include Checkers
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
attr_writer :_specs, :_notes, :_exhibits, :_doc_resources, :_overrides, :_power_supplies, :_mode_selects, :_version_history, :_creation_info, :_spec_features, :_documentation
|
|
18
18
|
|
|
19
19
|
# Detailed description for the ip block
|
|
20
20
|
attr_accessor :description
|
|
@@ -53,15 +53,15 @@ module Origen
|
|
|
53
53
|
}.update(options || {})
|
|
54
54
|
_specs
|
|
55
55
|
if s.nil?
|
|
56
|
-
|
|
56
|
+
show_specs(options)
|
|
57
57
|
elsif s.is_a? Hash
|
|
58
58
|
# no spec was passed but some option was passed
|
|
59
59
|
options.update(s)
|
|
60
|
-
|
|
60
|
+
show_specs(options)
|
|
61
61
|
else
|
|
62
62
|
# a spec was passed
|
|
63
63
|
options[:spec] = s
|
|
64
|
-
|
|
64
|
+
show_specs(options)
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
67
|
|
|
@@ -69,14 +69,16 @@ module Origen
|
|
|
69
69
|
def spec(name, type = nil, mode = nil, &block)
|
|
70
70
|
return specs(name, type) unless block_given?
|
|
71
71
|
fail 'A type argument is required when defining a spec!' unless type
|
|
72
|
+
|
|
72
73
|
_specs
|
|
73
74
|
name = name_audit(name)
|
|
74
75
|
fail 'Specification names must be of SPEC_TYPES Symbol or String and cannot start with a number' if name.nil?
|
|
75
76
|
fail "Spec type must be one of #{SPEC_TYPES.join(', ')}" unless SPEC_TYPES.include? type
|
|
77
|
+
|
|
76
78
|
type = type
|
|
77
79
|
mode = get_mode if mode.nil?
|
|
78
80
|
owner_name = ''
|
|
79
|
-
if
|
|
81
|
+
if respond_to?(:name) && send(:name)
|
|
80
82
|
owner_name = self.name.to_s.downcase.to_sym
|
|
81
83
|
elsif self == Origen.top_level
|
|
82
84
|
owner_name = self.class.to_s.split('::').last.downcase.to_sym
|
|
@@ -91,6 +93,7 @@ module Origen
|
|
|
91
93
|
# This is a fatal error.
|
|
92
94
|
fail "Spec already exists for name: #{name}, type: #{type}, mode: #{mode} for object #{self}"
|
|
93
95
|
end
|
|
96
|
+
|
|
94
97
|
@_specs[name][mode][type][spec_placeholder.sub_type] = spec_placeholder
|
|
95
98
|
end
|
|
96
99
|
|
|
@@ -107,9 +110,9 @@ module Origen
|
|
|
107
110
|
creating_spec: false
|
|
108
111
|
}.update(options)
|
|
109
112
|
if @_specs.nil? || @_specs == {}
|
|
110
|
-
|
|
113
|
+
false
|
|
111
114
|
else
|
|
112
|
-
|
|
115
|
+
!!show_specs(options)
|
|
113
116
|
end
|
|
114
117
|
end
|
|
115
118
|
|
|
@@ -228,6 +231,7 @@ module Origen
|
|
|
228
231
|
}.update(options)
|
|
229
232
|
return nil if @_notes.nil?
|
|
230
233
|
return nil if @_notes.empty?
|
|
234
|
+
|
|
231
235
|
# Empty 2-D Hash to be used for notes found based on id and type
|
|
232
236
|
notes_found = Hash.new do |h, k|
|
|
233
237
|
# h is the id portion of the hash
|
|
@@ -243,11 +247,11 @@ module Origen
|
|
|
243
247
|
end
|
|
244
248
|
end
|
|
245
249
|
if notes_found.empty?
|
|
246
|
-
|
|
250
|
+
nil
|
|
247
251
|
elsif notes_found.size == 1
|
|
248
252
|
notes_found.values.first.values.first
|
|
249
253
|
else
|
|
250
|
-
|
|
254
|
+
notes_found
|
|
251
255
|
end
|
|
252
256
|
end
|
|
253
257
|
|
|
@@ -259,6 +263,7 @@ module Origen
|
|
|
259
263
|
return @_spec_features if options[:id].nil? && options[:device].nil?
|
|
260
264
|
return nil if @_spec_features.nil?
|
|
261
265
|
return nil if @_spec_features.empty?
|
|
266
|
+
|
|
262
267
|
features_found = Hash.new do |h, k|
|
|
263
268
|
h[k] = {}
|
|
264
269
|
end
|
|
@@ -268,11 +273,11 @@ module Origen
|
|
|
268
273
|
end
|
|
269
274
|
end
|
|
270
275
|
if features_found.empty?
|
|
271
|
-
|
|
276
|
+
nil
|
|
272
277
|
elsif features_found.size == 1
|
|
273
278
|
features_found.values.first.values.first
|
|
274
279
|
else
|
|
275
|
-
|
|
280
|
+
features_found
|
|
276
281
|
end
|
|
277
282
|
end
|
|
278
283
|
|
|
@@ -284,6 +289,7 @@ module Origen
|
|
|
284
289
|
}.update(options)
|
|
285
290
|
return nil if @_exhibits.nil?
|
|
286
291
|
return nil if @_exhibits.empty?
|
|
292
|
+
|
|
287
293
|
ex_found = Hash.new do |h, k|
|
|
288
294
|
h[k] = Hash.new do |hh, kk|
|
|
289
295
|
hh[kk] = {}
|
|
@@ -297,9 +303,9 @@ module Origen
|
|
|
297
303
|
end
|
|
298
304
|
end
|
|
299
305
|
if ex_found.empty?
|
|
300
|
-
|
|
306
|
+
nil
|
|
301
307
|
else
|
|
302
|
-
|
|
308
|
+
ex_found
|
|
303
309
|
end
|
|
304
310
|
end
|
|
305
311
|
|
|
@@ -312,6 +318,7 @@ module Origen
|
|
|
312
318
|
}.update(options)
|
|
313
319
|
return nil if @_doc_resources.nil?
|
|
314
320
|
return nil if @_doc_resources.empty?
|
|
321
|
+
|
|
315
322
|
dr_found = Hash.new do |h, k|
|
|
316
323
|
h[k] = Hash.new do |hh, kk|
|
|
317
324
|
hh[kk] = Hash.new do |hhh, kkk|
|
|
@@ -329,9 +336,9 @@ module Origen
|
|
|
329
336
|
end
|
|
330
337
|
end
|
|
331
338
|
if dr_found.empty?
|
|
332
|
-
|
|
339
|
+
nil
|
|
333
340
|
else
|
|
334
|
-
|
|
341
|
+
dr_found
|
|
335
342
|
end
|
|
336
343
|
end
|
|
337
344
|
|
|
@@ -347,6 +354,7 @@ module Origen
|
|
|
347
354
|
}.update(options)
|
|
348
355
|
return nil if @_documentation.nil?
|
|
349
356
|
return nil if @_documentation.empty?
|
|
357
|
+
|
|
350
358
|
doc_found = Hash.new do |h, k|
|
|
351
359
|
h[k] = Hash.new do |hh, kk|
|
|
352
360
|
hh[kk] = Hash.new do |hhh, kkk|
|
|
@@ -376,9 +384,9 @@ module Origen
|
|
|
376
384
|
end
|
|
377
385
|
end
|
|
378
386
|
if doc_found.empty?
|
|
379
|
-
|
|
387
|
+
nil
|
|
380
388
|
else
|
|
381
|
-
|
|
389
|
+
doc_found
|
|
382
390
|
end
|
|
383
391
|
end
|
|
384
392
|
|
|
@@ -392,6 +400,7 @@ module Origen
|
|
|
392
400
|
}.update(options)
|
|
393
401
|
return nil if @_overrides.nil?
|
|
394
402
|
return nil if @_overrides.empty?
|
|
403
|
+
|
|
395
404
|
overrides_found = Hash.new do |h, k|
|
|
396
405
|
h[k] = Hash.new do |hh, kk|
|
|
397
406
|
hh[kk] = Hash.new do |hhh, kkk|
|
|
@@ -413,9 +422,9 @@ module Origen
|
|
|
413
422
|
end
|
|
414
423
|
end
|
|
415
424
|
if overrides_found.empty?
|
|
416
|
-
|
|
425
|
+
nil
|
|
417
426
|
else
|
|
418
|
-
|
|
427
|
+
overrides_found
|
|
419
428
|
end
|
|
420
429
|
end
|
|
421
430
|
|
|
@@ -426,7 +435,8 @@ module Origen
|
|
|
426
435
|
}.update(options)
|
|
427
436
|
return nil if @_mode_selects.nil?
|
|
428
437
|
return nil if @_mode_selects.empty?
|
|
429
|
-
|
|
438
|
+
|
|
439
|
+
modes_found = Hash.new do |h, k|
|
|
430
440
|
h[k] = {}
|
|
431
441
|
end
|
|
432
442
|
filter_hash(@_mode_selects, options[:block]).each do |block, hash|
|
|
@@ -435,9 +445,9 @@ module Origen
|
|
|
435
445
|
end
|
|
436
446
|
end
|
|
437
447
|
if modes_found.empty?
|
|
438
|
-
|
|
448
|
+
nil
|
|
439
449
|
else
|
|
440
|
-
|
|
450
|
+
modes_found
|
|
441
451
|
end
|
|
442
452
|
end
|
|
443
453
|
|
|
@@ -446,20 +456,21 @@ module Origen
|
|
|
446
456
|
gen: nil,
|
|
447
457
|
act: nil
|
|
448
458
|
}.update(options)
|
|
449
|
-
ps_found = Hash.new do|h, k|
|
|
459
|
+
ps_found = Hash.new do |h, k|
|
|
450
460
|
h[k] = {}
|
|
451
461
|
end
|
|
452
462
|
return nil if @_power_supplies.nil?
|
|
453
463
|
return nil if @_power_supplies.empty?
|
|
464
|
+
|
|
454
465
|
filter_hash(@_power_supplies, options[:gen]).each do |gen, hash|
|
|
455
466
|
filter_hash(hash, options[:act]).each do |act, sel|
|
|
456
467
|
ps_found[gen][act] = sel
|
|
457
468
|
end
|
|
458
469
|
end
|
|
459
470
|
if ps_found.empty?
|
|
460
|
-
|
|
471
|
+
nil
|
|
461
472
|
else
|
|
462
|
-
|
|
473
|
+
ps_found
|
|
463
474
|
end
|
|
464
475
|
end
|
|
465
476
|
|
|
@@ -476,6 +487,7 @@ module Origen
|
|
|
476
487
|
end
|
|
477
488
|
return nil if @_version_history.nil?
|
|
478
489
|
return nil if @_version_history.empty?
|
|
490
|
+
|
|
479
491
|
filter_hash(@_version_history, options[:date]).each do |date, hash|
|
|
480
492
|
filter_hash(hash, options[:author]).each do |author, hash1|
|
|
481
493
|
filter_hash(hash1, options[:label]).each do |label, ver|
|
|
@@ -484,9 +496,9 @@ module Origen
|
|
|
484
496
|
end
|
|
485
497
|
end
|
|
486
498
|
if vh_found.empty?
|
|
487
|
-
|
|
499
|
+
nil
|
|
488
500
|
else
|
|
489
|
-
|
|
501
|
+
vh_found
|
|
490
502
|
end
|
|
491
503
|
end
|
|
492
504
|
|
|
@@ -644,6 +656,7 @@ module Origen
|
|
|
644
656
|
# Return a hash based on the filter provided
|
|
645
657
|
def filter_hash(hash, filter, debug = false)
|
|
646
658
|
fail 'Hash argument is not a Hash!' unless hash.is_a? Hash
|
|
659
|
+
|
|
647
660
|
filtered_hash = {}
|
|
648
661
|
select_logic = case filter
|
|
649
662
|
when String then 'k.nil? ? false : k[Regexp.new(filter)] && k.length == filter.length'
|
|
@@ -653,8 +666,7 @@ module Origen
|
|
|
653
666
|
'k == filter'
|
|
654
667
|
when NilClass then true # Return all specs if a filter is set to nil (i.e. user doesn't care about this filter)
|
|
655
668
|
else true
|
|
656
|
-
|
|
657
|
-
# rubocop:disable UnusedBlockArgument
|
|
669
|
+
end
|
|
658
670
|
filtered_hash = hash.select do |k, v|
|
|
659
671
|
# binding.pry if filter == 'SubSection A'
|
|
660
672
|
[TrueClass, FalseClass].include?(select_logic.class) ? select_logic : eval(select_logic)
|
|
@@ -711,14 +723,14 @@ module Origen
|
|
|
711
723
|
end
|
|
712
724
|
end
|
|
713
725
|
Origen.log.debug "Returning no specs for options #{options}"
|
|
714
|
-
|
|
726
|
+
nil
|
|
715
727
|
elsif specs_to_be_shown.size == 1
|
|
716
728
|
print_to_console(specs_to_be_shown) if options[:verbose] == true
|
|
717
729
|
Origen.log.debug "returning one spec #{specs_to_be_shown.first.name}"
|
|
718
|
-
|
|
730
|
+
specs_to_be_shown.first
|
|
719
731
|
else
|
|
720
732
|
Origen.log.debug "returning an array of specs during initial search: #{specs_to_be_shown}"
|
|
721
|
-
|
|
733
|
+
specs_to_be_shown
|
|
722
734
|
end
|
|
723
735
|
end
|
|
724
736
|
|
|
@@ -727,18 +739,18 @@ module Origen
|
|
|
727
739
|
whitespace_padding = 3
|
|
728
740
|
table = []
|
|
729
741
|
attrs_to_be_shown = {
|
|
730
|
-
name: SpecTableAttr.new('Name',
|
|
731
|
-
symbol: SpecTableAttr.new('Symbol',
|
|
742
|
+
name: SpecTableAttr.new('Name', true, 'Name'.length + whitespace_padding),
|
|
743
|
+
symbol: SpecTableAttr.new('Symbol', false, 'Symbol'.length + whitespace_padding),
|
|
732
744
|
mode: SpecTableAttr.new('Mode', true, 'Mode'.length + whitespace_padding),
|
|
733
745
|
type: SpecTableAttr.new('Type', true, 'Type'.length + whitespace_padding),
|
|
734
|
-
sub_type: SpecTableAttr.new('Sub-Type',
|
|
746
|
+
sub_type: SpecTableAttr.new('Sub-Type', false, 'Sub-Type'.length + whitespace_padding),
|
|
735
747
|
# spec SpecTableAttribute :description is called parameter in the spec table output to match historical docs
|
|
736
748
|
description: SpecTableAttr.new('Parameter', false, 'Parameter'.length + whitespace_padding),
|
|
737
749
|
min: SpecTableAttr.new('Min', false, 'Min'.length + whitespace_padding),
|
|
738
750
|
typ: SpecTableAttr.new('Typ', false, 'Typ'.length + whitespace_padding),
|
|
739
751
|
max: SpecTableAttr.new('Max', false, 'Max'.length + whitespace_padding),
|
|
740
|
-
unit: SpecTableAttr.new('Unit',
|
|
741
|
-
audience: SpecTableAttr.new('Audience',
|
|
752
|
+
unit: SpecTableAttr.new('Unit', false, 'Unit'.length + whitespace_padding),
|
|
753
|
+
audience: SpecTableAttr.new('Audience', false, 'Audience'.length + whitespace_padding)
|
|
742
754
|
# notes: SpecTableAttr.new('Notes', false, 'Notes'.length + whitespace_padding)
|
|
743
755
|
}
|
|
744
756
|
# Calculate the padding needed in the spec table for the longest attr of all specs
|
|
@@ -747,6 +759,7 @@ module Origen
|
|
|
747
759
|
unless spec.send(attr_name).nil?
|
|
748
760
|
if spec.send(attr_name).class == Origen::Specs::Spec::Limit
|
|
749
761
|
next if spec.send(attr_name).value.nil?
|
|
762
|
+
|
|
750
763
|
current_padding = spec.send(attr_name).value.to_s.length + whitespace_padding
|
|
751
764
|
else
|
|
752
765
|
current_padding = spec.send(attr_name).to_s.length + whitespace_padding
|
|
@@ -760,6 +773,7 @@ module Origen
|
|
|
760
773
|
header = ''
|
|
761
774
|
attrs_to_be_shown.each do |_attr_name, attr_struct|
|
|
762
775
|
next if attr_struct.show == false
|
|
776
|
+
|
|
763
777
|
header += "| #{attr_struct.table_text}".ljust(attr_struct.padding)
|
|
764
778
|
end
|
|
765
779
|
header += '|'
|
|
@@ -775,6 +789,7 @@ module Origen
|
|
|
775
789
|
data = ''
|
|
776
790
|
attrs_to_be_shown.each do |attr_name, attr_struct|
|
|
777
791
|
next if attr_struct.show == false
|
|
792
|
+
|
|
778
793
|
if spec.send(attr_name).class == Origen::Specs::Spec::Limit
|
|
779
794
|
data += "| #{spec.send(attr_name).value}".ljust(attr_struct.padding)
|
|
780
795
|
else
|
data/lib/origen/sub_blocks.rb
CHANGED
|
@@ -17,7 +17,7 @@ module Origen
|
|
|
17
17
|
# address API, but will accept any of these
|
|
18
18
|
@reg_base_address = options.delete(:reg_base_address) ||
|
|
19
19
|
options.delete(:base_address) || options.delete(:base) || 0
|
|
20
|
-
if options[:_instance]
|
|
20
|
+
if options[:_instance] # to be deprecated as part of multi-instance removal below
|
|
21
21
|
if @reg_base_address.is_a?(Array)
|
|
22
22
|
@reg_base_address = @reg_base_address[options[:_instance]]
|
|
23
23
|
elsif options[:base_address_step]
|
|
@@ -179,6 +179,7 @@ module Origen
|
|
|
179
179
|
|
|
180
180
|
def path(options = {})
|
|
181
181
|
return abs_path if abs_path
|
|
182
|
+
|
|
182
183
|
if is_a?(Origen::Registers::BitCollection)
|
|
183
184
|
# Special case where path relative to the register has been requested
|
|
184
185
|
if options[:relative_to] == parent
|
|
@@ -264,9 +265,7 @@ module Origen
|
|
|
264
265
|
# Note that this returns an array instead of a hash since there could be naming collisions in the
|
|
265
266
|
# hash keys
|
|
266
267
|
def all_sub_blocks
|
|
267
|
-
@all_sub_blocks ||=
|
|
268
|
-
(sub_blocks_array + sub_blocks_array.map(&:all_sub_blocks)).flatten
|
|
269
|
-
end
|
|
268
|
+
@all_sub_blocks ||= (sub_blocks_array + sub_blocks_array.map(&:all_sub_blocks)).flatten
|
|
270
269
|
end
|
|
271
270
|
|
|
272
271
|
# Returns true if the given sub block owns at least one register
|
|
@@ -301,7 +300,7 @@ module Origen
|
|
|
301
300
|
# permit creating multiple instances of a particular sub_block class
|
|
302
301
|
# can pass array for base_address, which will be processed above
|
|
303
302
|
Origen.deprecate 'instances: option to sub_block is deprecated, use sub_block_groups instead'
|
|
304
|
-
group_name = name =~ /s$/ ? name : "#{name}s"
|
|
303
|
+
group_name = name =~ /s$/ ? name : "#{name}s" # take care if name already with 's' is passed
|
|
305
304
|
unless respond_to?(group_name)
|
|
306
305
|
sub_block_groups group_name do
|
|
307
306
|
i.times do |j|
|
|
@@ -341,6 +340,7 @@ module Origen
|
|
|
341
340
|
skip_require_files = options[:skip_require_files] || %w(attributes parameters pins registers sub_blocks timesets)
|
|
342
341
|
Dir.glob("#{block_dir}/*.rb").each do |file|
|
|
343
342
|
next if skip_require_files.include?(Pathname.new(file).basename('.rb').to_s)
|
|
343
|
+
|
|
344
344
|
require file
|
|
345
345
|
end
|
|
346
346
|
end
|
|
@@ -362,7 +362,7 @@ module Origen
|
|
|
362
362
|
else
|
|
363
363
|
sub_blocks[name] = block
|
|
364
364
|
end
|
|
365
|
-
unless @current_group.nil?
|
|
365
|
+
unless @current_group.nil? # a group is currently open, store sub_block id only
|
|
366
366
|
@current_group << name
|
|
367
367
|
end
|
|
368
368
|
if options.key?(:lazy)
|
|
@@ -417,14 +417,14 @@ module Origen
|
|
|
417
417
|
if options[:class_name]
|
|
418
418
|
b = Object.const_get(options[:class_name]).new
|
|
419
419
|
else
|
|
420
|
-
b = []
|
|
420
|
+
b = [] # Will use Array if no class defined
|
|
421
421
|
end
|
|
422
422
|
# Add sub_blocks to group
|
|
423
423
|
my_group.each do |group_id|
|
|
424
424
|
b << send(group_id)
|
|
425
425
|
end
|
|
426
426
|
sub_block_groups[id] = b
|
|
427
|
-
@current_group = nil
|
|
427
|
+
@current_group = nil # close group
|
|
428
428
|
end
|
|
429
429
|
alias_method :sub_blocks_group, :sub_block_group
|
|
430
430
|
|
|
@@ -442,18 +442,18 @@ module Origen
|
|
|
442
442
|
current_namespace = remaining_namespace.shift
|
|
443
443
|
if current_namespace
|
|
444
444
|
if current_path.join(current_namespace).exist?
|
|
445
|
-
|
|
445
|
+
_find_block_dir(options, current_path.join(current_namespace), remaining_namespace)
|
|
446
446
|
elsif current_path.join("derivatives/#{current_namespace}").exist?
|
|
447
|
-
|
|
447
|
+
_find_block_dir(options, current_path.join("derivatives/#{current_namespace}"), remaining_namespace)
|
|
448
448
|
elsif current_path.join("sub_blocks/#{current_namespace}").exist?
|
|
449
|
-
|
|
449
|
+
_find_block_dir(options, current_path.join("sub_blocks/#{current_namespace}"), remaining_namespace)
|
|
450
450
|
else
|
|
451
451
|
Origen.log.error "Could not find block dir for namespace #{options[:class_name]}!"
|
|
452
452
|
fail
|
|
453
453
|
end
|
|
454
454
|
else
|
|
455
455
|
if current_path.join('model.rb').exist?
|
|
456
|
-
|
|
456
|
+
current_path.to_s
|
|
457
457
|
else
|
|
458
458
|
Origen.log.error "Could not find block dir for namespace #{options[:class_name]}!"
|
|
459
459
|
fail
|
|
@@ -463,6 +463,7 @@ module Origen
|
|
|
463
463
|
|
|
464
464
|
def instantiate_sub_block(name, klass, options)
|
|
465
465
|
return sub_blocks[name] unless sub_blocks[name].is_a?(Placeholder)
|
|
466
|
+
|
|
466
467
|
sub_blocks[name] = klass.new(options.merge(parent: self, name: name))
|
|
467
468
|
end
|
|
468
469
|
|
|
@@ -491,6 +492,7 @@ module Origen
|
|
|
491
492
|
# looking up and loaded by the autoload system straight away, especially if the sub-block
|
|
492
493
|
# has been specified to lazy load
|
|
493
494
|
return false if klass == Hash || klass == Array
|
|
495
|
+
|
|
494
496
|
klass == self.klass || klass == Placeholder
|
|
495
497
|
end
|
|
496
498
|
|
|
@@ -557,16 +559,19 @@ module Origen
|
|
|
557
559
|
klass = eval(tmp_class)
|
|
558
560
|
rescue NameError => e
|
|
559
561
|
raise if e.message !~ /^uninitialized constant (.*)$/ || tmp_class !~ /#{Regexp.last_match(1)}/
|
|
562
|
+
|
|
560
563
|
begin
|
|
561
564
|
tmp_class = "::#{class_name}"
|
|
562
565
|
klass = eval(tmp_class)
|
|
563
566
|
rescue NameError => e
|
|
564
567
|
raise if e.message !~ /^uninitialized constant (.*)$/ || tmp_class !~ /#{Regexp.last_match(1)}/
|
|
568
|
+
|
|
565
569
|
begin
|
|
566
570
|
tmp_class = "#{owner.class}::#{class_name}"
|
|
567
571
|
klass = eval(tmp_class)
|
|
568
572
|
rescue NameError => e
|
|
569
573
|
raise if e.message !~ /^uninitialized constant (.*)$/ || tmp_class !~ /#{Regexp.last_match(1)}/
|
|
574
|
+
|
|
570
575
|
puts "Could not find class: #{class_name}"
|
|
571
576
|
raise 'Unknown sub block class!'
|
|
572
577
|
end
|
|
@@ -609,8 +614,9 @@ module Origen
|
|
|
609
614
|
def method_missing(method, *args, &block)
|
|
610
615
|
super
|
|
611
616
|
rescue NoMethodError
|
|
612
|
-
return regs(method) if
|
|
613
|
-
return ports(method) if
|
|
617
|
+
return regs(method) if has_reg?(method)
|
|
618
|
+
return ports(method) if has_port?(method)
|
|
619
|
+
|
|
614
620
|
if method.to_s =~ /=$/
|
|
615
621
|
define_singleton_method(method) do |val|
|
|
616
622
|
instance_variable_set("@#{method.to_s.sub('=', '')}", val)
|
data/lib/origen/top_level.rb
CHANGED
|
@@ -79,7 +79,7 @@ module Origen
|
|
|
79
79
|
val.id
|
|
80
80
|
else
|
|
81
81
|
packages.include?(val) ? val : nil
|
|
82
|
-
|
|
82
|
+
end
|
|
83
83
|
end
|
|
84
84
|
alias_method :package=, :current_package=
|
|
85
85
|
|
|
@@ -88,6 +88,7 @@ module Origen
|
|
|
88
88
|
def current_package(_options = {})
|
|
89
89
|
if @current_package_id
|
|
90
90
|
return _packages[@current_package_id] if _packages[@current_package_id]
|
|
91
|
+
|
|
91
92
|
fail "The package #{@current_package_id} of #{self.class} has not been defined!"
|
|
92
93
|
end
|
|
93
94
|
end
|
data/lib/origen/users/user.rb
CHANGED
|
@@ -87,11 +87,10 @@ module Origen
|
|
|
87
87
|
end
|
|
88
88
|
end
|
|
89
89
|
else
|
|
90
|
-
@email ||=
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
end
|
|
90
|
+
@email ||= if Origen.site_config.email_domain
|
|
91
|
+
"#{id}@#{Origen.site_config.email_domain}"
|
|
92
|
+
end
|
|
93
|
+
|
|
95
94
|
end
|
|
96
95
|
end
|
|
97
96
|
|
|
@@ -34,7 +34,7 @@ module Origen
|
|
|
34
34
|
# end
|
|
35
35
|
def parse(options = {})
|
|
36
36
|
csv_data = extract_csv_data(options)
|
|
37
|
-
if block_given?
|
|
37
|
+
if block_given? # doesn't do much at this point
|
|
38
38
|
csv_data.each do |dataset|
|
|
39
39
|
yield dataset
|
|
40
40
|
end
|
|
@@ -69,9 +69,11 @@ module Origen
|
|
|
69
69
|
|
|
70
70
|
# Returns an array containing all data from given CSV file
|
|
71
71
|
def extract_csv_data(options = {}) # :nodoc:
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
# rubocop:disable Layout/MultilineHashBraceLayout
|
|
73
|
+
options = { field_names_only: false, # whether to obtain field names only
|
|
74
|
+
comment_char: '#' # ignore lines that start with comment character
|
|
74
75
|
}.merge(options)
|
|
76
|
+
# rubocop:enable Layout/MultilineHashBraceLayout
|
|
75
77
|
|
|
76
78
|
field_names = []
|
|
77
79
|
field_values = []
|
|
@@ -87,7 +89,7 @@ module Origen
|
|
|
87
89
|
end
|
|
88
90
|
if line_no == 1 # Field names
|
|
89
91
|
field_names = line.split(',')
|
|
90
|
-
else
|
|
92
|
+
else # Field values
|
|
91
93
|
field_values = line.split(',')
|
|
92
94
|
if field_names.length != field_values.length
|
|
93
95
|
abort "ERROR! Invalid number of fields (#{field_values.length}) in CVS file on line # #{line_no}. Should be #{field_names.length}.\n"
|
data/lib/origen/utility/diff.rb
CHANGED
|
@@ -48,14 +48,14 @@ module Origen
|
|
|
48
48
|
lines_remaining = true
|
|
49
49
|
|
|
50
50
|
while lines_remaining
|
|
51
|
-
a = get_next_line_a(content_a)
|
|
51
|
+
a = get_next_line_a(content_a) # Get the next vectors
|
|
52
52
|
b = get_next_line_b(content_b)
|
|
53
53
|
if !a && !b # If both patterns finished
|
|
54
54
|
lines_remaining = false
|
|
55
55
|
elsif !a || !b # If only 1 pattern finished
|
|
56
56
|
lines_remaining = false
|
|
57
|
-
changes = true unless @suspend_diff
|
|
58
|
-
elsif a != b
|
|
57
|
+
changes = true unless @suspend_diff # There are extra vectors in one of the patterns
|
|
58
|
+
elsif a != b # If the vectors don't match
|
|
59
59
|
changes = true unless @suspend_diff
|
|
60
60
|
end
|
|
61
61
|
if @resume_diff # resume checking diffs for subsequent lines
|
|
@@ -112,8 +112,8 @@ module Origen
|
|
|
112
112
|
end
|
|
113
113
|
# This rescue is a crude way to guard against non-ASCII files that find
|
|
114
114
|
# their way in here
|
|
115
|
-
|
|
116
|
-
|
|
115
|
+
rescue
|
|
116
|
+
line
|
|
117
117
|
end
|
|
118
118
|
else
|
|
119
119
|
line.strip
|
|
@@ -144,10 +144,10 @@ module Origen
|
|
|
144
144
|
else
|
|
145
145
|
matched = true
|
|
146
146
|
end
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
147
|
+
# This rescue is a crude way to guard against non-ASCII files that find
|
|
148
|
+
# there way in here
|
|
149
|
+
rescue
|
|
150
|
+
matched = true
|
|
151
151
|
end
|
|
152
152
|
end
|
|
153
153
|
ix
|
|
@@ -25,9 +25,11 @@ module Origen
|
|
|
25
25
|
class OutputFile < Array
|
|
26
26
|
class Line < String
|
|
27
27
|
attr_accessor :type, :original_number
|
|
28
|
+
|
|
28
29
|
def initialize(type, input_file)
|
|
29
30
|
self.type = type
|
|
30
31
|
return unless input_file
|
|
32
|
+
|
|
31
33
|
replace(input_file.current_line)
|
|
32
34
|
self.original_number = input_file.pointer + 1
|
|
33
35
|
input_file.advance_pointer!
|
|
@@ -59,6 +61,7 @@ module Origen
|
|
|
59
61
|
class Processor
|
|
60
62
|
attr_accessor :source, :target
|
|
61
63
|
attr_accessor :source_output, :target_output
|
|
64
|
+
|
|
62
65
|
def initialize(source_file_name, target_file_name)
|
|
63
66
|
self.source = InputFile.new
|
|
64
67
|
self.target = InputFile.new
|
|
@@ -125,6 +128,7 @@ module Origen
|
|
|
125
128
|
module Formatter
|
|
126
129
|
class Base
|
|
127
130
|
attr_accessor :source_output, :target_output, :file
|
|
131
|
+
|
|
128
132
|
def initialize(processed_diff, output_file_name)
|
|
129
133
|
self.source_output = processed_diff.source_output
|
|
130
134
|
self.target_output = processed_diff.target_output
|
|
@@ -5,14 +5,16 @@ module Origen
|
|
|
5
5
|
# Gets text input from the user
|
|
6
6
|
# Supply an optional default value in the event that the user enters nothing
|
|
7
7
|
def get_text(options = {})
|
|
8
|
+
# rubocop:disable Layout/MultilineHashBraceLayout
|
|
8
9
|
options = { default: false,
|
|
9
|
-
single: false,
|
|
10
|
+
single: false, # Set if only a single line entry is expected
|
|
10
11
|
confirm: false,
|
|
11
|
-
accept: false,
|
|
12
|
+
accept: false, # Supply and array of entries you are willing to accept
|
|
12
13
|
case_sensitive: false, # If accept values are supplied they will be treated as case
|
|
13
14
|
# in-sensitive by default
|
|
14
|
-
wrap: true
|
|
15
|
+
wrap: true # Automatically split long lines
|
|
15
16
|
}.merge(options)
|
|
17
|
+
# rubocop:enable Layout/MultilineHashBraceLayout
|
|
16
18
|
if options[:confirm]
|
|
17
19
|
puts "Type 'yes' or 'no' to confirm or 'quit' to abort."
|
|
18
20
|
elsif options[:accept]
|
|
@@ -65,9 +67,7 @@ module Origen
|
|
|
65
67
|
end
|
|
66
68
|
if confirm == 'yes' || confirm == 'y'
|
|
67
69
|
if options[:confirm] == :return_boolean
|
|
68
|
-
|
|
69
|
-
else
|
|
70
|
-
return
|
|
70
|
+
true
|
|
71
71
|
end
|
|
72
72
|
else
|
|
73
73
|
get_text(options)
|
|
@@ -18,8 +18,7 @@ module Origen
|
|
|
18
18
|
domain: (Origen.site_config.email_domain || ''),
|
|
19
19
|
|
|
20
20
|
auth_user: (Origen.site_config.email_auth_user || current_user.email),
|
|
21
|
-
auth_password: (Origen.site_config.email_auth_password || current_user.password)
|
|
22
|
-
}.merge(options)
|
|
21
|
+
auth_password: (Origen.site_config.email_auth_password || current_user.password) }.merge(options)
|
|
23
22
|
|
|
24
23
|
# Force to an array
|
|
25
24
|
to = options[:to].respond_to?('each') ? options[:to] : [options[:to]]
|
|
@@ -52,15 +51,13 @@ END_OF_MESSAGE
|
|
|
52
51
|
smtp = Net::SMTP.new(options[:server], options[:port])
|
|
53
52
|
smtp.enable_starttls if options[:authentication] != :none
|
|
54
53
|
|
|
55
|
-
opts =
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
end
|
|
63
|
-
end
|
|
54
|
+
opts = if options[:authentication] == :none
|
|
55
|
+
# Trying to add username and password if there's no authentication will actually be rejected by
|
|
56
|
+
# the server.
|
|
57
|
+
[options[:domain]]
|
|
58
|
+
else
|
|
59
|
+
[options[:domain], options[:auth_user], options[:auth_password], options[:authentication]]
|
|
60
|
+
end
|
|
64
61
|
|
|
65
62
|
smtp.start(*opts) do |m|
|
|
66
63
|
m.send_message(msg, options[:from], addr)
|