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/boot/app.rb
CHANGED
|
@@ -229,7 +229,7 @@ end
|
|
|
229
229
|
|
|
230
230
|
def setup_bundler(origen_root)
|
|
231
231
|
bundle_path = nil
|
|
232
|
-
eval BUNDLER_SETUP
|
|
232
|
+
eval BUNDLER_SETUP # Will update bundle_path
|
|
233
233
|
bundle_path
|
|
234
234
|
end
|
|
235
235
|
|
|
@@ -239,43 +239,41 @@ end
|
|
|
239
239
|
gem_dir = Pathname.new(Gem.dir)
|
|
240
240
|
|
|
241
241
|
Origen.site_config.gem_use_from_system.each do |gem, version|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
spec = Gem::Specification.find_by_name(gem, version)
|
|
242
|
+
# This will raise an error if the system doesn't have this gem installed, that
|
|
243
|
+
# will be rescued below
|
|
244
|
+
spec = Gem::Specification.find_by_name(gem, version)
|
|
246
245
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
246
|
+
# If the spec has returned a handle to a system installed gem. If this script has been invoked through
|
|
247
|
+
# Bundler then it could point to some other gem dir. The only time this should occur is when switching
|
|
248
|
+
# from the old system to the new system, but can't work out how to fix it so just disabling in that case.
|
|
249
|
+
if spec.gem_dir =~ /#{gem_dir}/
|
|
251
250
|
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
local_file = Pathname.new(File.join(local_gem_dir, Pathname.new(spec.cache_file).relative_path_from(gem_dir)))
|
|
257
|
-
FileUtils.mkdir_p local_file.dirname
|
|
258
|
-
FileUtils.cp(spec.cache_file, local_file)
|
|
251
|
+
local_dir = File.join(local_gem_dir, Pathname.new(spec.gem_dir).relative_path_from(gem_dir))
|
|
252
|
+
FileUtils.mkdir_p local_dir
|
|
253
|
+
FileUtils.cp_r("#{spec.gem_dir}/.", local_dir)
|
|
259
254
|
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
FileUtils.cp_r("#{spec.extension_dir}/.", local_dir)
|
|
264
|
-
end
|
|
255
|
+
local_file = Pathname.new(File.join(local_gem_dir, Pathname.new(spec.cache_file).relative_path_from(gem_dir)))
|
|
256
|
+
FileUtils.mkdir_p local_file.dirname
|
|
257
|
+
FileUtils.cp(spec.cache_file, local_file)
|
|
265
258
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
FileUtils.
|
|
259
|
+
if spec.extension_dir && File.exist?(spec.extension_dir)
|
|
260
|
+
local_dir = File.join(local_gem_dir, Pathname.new(spec.extension_dir).relative_path_from(gem_dir))
|
|
261
|
+
FileUtils.mkdir_p local_dir
|
|
262
|
+
FileUtils.cp_r("#{spec.extension_dir}/.", local_dir)
|
|
263
|
+
end
|
|
269
264
|
|
|
270
|
-
|
|
265
|
+
local_file = Pathname.new(File.join(local_gem_dir, Pathname.new(spec.spec_file).relative_path_from(gem_dir)))
|
|
266
|
+
FileUtils.mkdir_p local_file.dirname
|
|
267
|
+
FileUtils.cp(spec.spec_file, local_file)
|
|
271
268
|
|
|
272
|
-
|
|
269
|
+
puts "Copied #{gem} #{version} from the system into #{bundle_path}"
|
|
273
270
|
|
|
274
|
-
rescue Exception # Gem::LoadError # Rescue everything here, this is a try-our-best operation, better to
|
|
275
|
-
# continue and try and install the gem if this fails rather than crash
|
|
276
|
-
# This just means that one of the gems that should be copied from the system
|
|
277
|
-
# was not actually installed in the system, so nothing we can do about that here
|
|
278
271
|
end
|
|
272
|
+
|
|
273
|
+
rescue Exception # Gem::LoadError # Rescue everything here, this is a try-our-best operation, better to
|
|
274
|
+
# continue and try and install the gem if this fails rather than crash
|
|
275
|
+
# This just means that one of the gems that should be copied from the system
|
|
276
|
+
# was not actually installed in the system, so nothing we can do about that here
|
|
279
277
|
end
|
|
280
278
|
end
|
|
281
279
|
end
|
data/lib/origen/boot.rb
CHANGED
|
@@ -140,6 +140,7 @@ elsif Origen.site_config.gem_manage_bundler && (Origen.site_config.user_install_
|
|
|
140
140
|
if STDOUT.tty?
|
|
141
141
|
begin
|
|
142
142
|
fail OrigenBootError unless File.exist?(ENV['BUNDLE_BIN'])
|
|
143
|
+
|
|
143
144
|
Bundler.setup
|
|
144
145
|
fail OrigenBootError unless File.exist?(ENV['BUNDLE_BIN'])
|
|
145
146
|
rescue Gem::LoadError, Bundler::BundlerError, OrigenBootError => e
|
data/lib/origen/bugs.rb
CHANGED
|
@@ -2,7 +2,7 @@ module Origen
|
|
|
2
2
|
module Bugs
|
|
3
3
|
extend ActiveSupport::Concern
|
|
4
4
|
|
|
5
|
-
autoload :Bug,
|
|
5
|
+
autoload :Bug, 'origen/bugs/bug'
|
|
6
6
|
|
|
7
7
|
module ClassMethods # :nodoc:
|
|
8
8
|
# Define a bug on the given IP
|
|
@@ -23,7 +23,7 @@ module Origen
|
|
|
23
23
|
# Returns true if the version of the IP represented by the object has the bug of the
|
|
24
24
|
# given name
|
|
25
25
|
def has_bug?(name, _options = {})
|
|
26
|
-
unless
|
|
26
|
+
unless respond_to?(:version) && version
|
|
27
27
|
puts 'To test for the presence of a bug the object must implement an attribute'
|
|
28
28
|
puts "called 'version' which returns the IP version represented by the the object."
|
|
29
29
|
fail 'Version undefined!'
|
data/lib/origen/chip_mode.rb
CHANGED
|
@@ -4,12 +4,14 @@ module Origen
|
|
|
4
4
|
attr_accessor :brief_description
|
|
5
5
|
attr_accessor :description
|
|
6
6
|
attr_writer :name
|
|
7
|
-
|
|
7
|
+
attr_writer :data_rate
|
|
8
8
|
attr_accessor :data_rate_unit
|
|
9
9
|
attr_accessor :minimum_version_enabled
|
|
10
|
+
|
|
10
11
|
alias_writer :min_ver_enabled, :minimum_version_enabled
|
|
11
12
|
alias_writer :min_version_enabled, :minimum_version_enabled
|
|
12
13
|
attr_accessor :audience
|
|
14
|
+
|
|
13
15
|
alias_writer :full_name, :name
|
|
14
16
|
# Returns the object that owns the mode (the SoC instance usually)
|
|
15
17
|
attr_accessor :owner
|
|
@@ -47,15 +49,15 @@ module Origen
|
|
|
47
49
|
# in theory but should still check if it returns a numeric
|
|
48
50
|
value = @data_rate.send(@data_rate_unit.to_sym)
|
|
49
51
|
if value.is_a?(Numeric)
|
|
50
|
-
|
|
52
|
+
value
|
|
51
53
|
else
|
|
52
54
|
Origen.log.error "@data_rate '#{@data_rate}' conversion using @data_rate_unit '#{@data_rate_unit}' did not product a Numeric, exiting..."
|
|
53
55
|
end
|
|
54
56
|
else
|
|
55
|
-
|
|
57
|
+
@data_rate
|
|
56
58
|
end
|
|
57
59
|
else
|
|
58
|
-
|
|
60
|
+
@data_rate
|
|
59
61
|
end
|
|
60
62
|
end
|
|
61
63
|
|
|
@@ -82,6 +84,7 @@ module Origen
|
|
|
82
84
|
instance_variable_get(ivar)
|
|
83
85
|
end
|
|
84
86
|
end
|
|
87
|
+
|
|
85
88
|
send(method_name, *arguments, &block)
|
|
86
89
|
end
|
|
87
90
|
|
data/lib/origen/chip_package.rb
CHANGED
|
@@ -6,7 +6,7 @@ module Origen
|
|
|
6
6
|
attr_accessor :number_of_rows
|
|
7
7
|
attr_accessor :number_of_columns
|
|
8
8
|
attr_accessor :interconnects
|
|
9
|
-
|
|
9
|
+
attr_writer :types
|
|
10
10
|
attr_reader :upper_axes
|
|
11
11
|
attr_reader :lower_axes
|
|
12
12
|
attr_reader :rows
|
|
@@ -14,10 +14,11 @@ module Origen
|
|
|
14
14
|
attr_reader :field
|
|
15
15
|
attr_reader :obj
|
|
16
16
|
attr_reader :groups
|
|
17
|
-
attr_reader :group_list
|
|
17
|
+
# attr_reader :group_list # method is redefined further down
|
|
18
18
|
attr_reader :last_empty_char
|
|
19
19
|
attr_reader :plottable
|
|
20
20
|
attr_writer :name
|
|
21
|
+
|
|
21
22
|
alias_writer :full_name, :name
|
|
22
23
|
# Returns the owner that $owns the mode (the SoC instance usually)
|
|
23
24
|
attr_accessor :owner
|
|
@@ -57,7 +58,7 @@ module Origen
|
|
|
57
58
|
#
|
|
58
59
|
def prepare_plot
|
|
59
60
|
@plottable = types.any? { |x| /BGA/i =~ x }
|
|
60
|
-
if
|
|
61
|
+
if @plottable
|
|
61
62
|
@last_empty_char = '.'
|
|
62
63
|
@field = []
|
|
63
64
|
@groups = []
|
|
@@ -69,7 +70,7 @@ module Origen
|
|
|
69
70
|
(1..@number_of_columns).map { |item| @columns << item }
|
|
70
71
|
@upper_axes = []
|
|
71
72
|
@lower_axes = []
|
|
72
|
-
@columns.each_with_index do|column, index|
|
|
73
|
+
@columns.each_with_index do |column, index|
|
|
73
74
|
# if index % 2 == 0
|
|
74
75
|
if index.even?
|
|
75
76
|
temp = column.to_s
|
|
@@ -96,20 +97,20 @@ module Origen
|
|
|
96
97
|
# 2. It concatenates the array elements into printable rows, and prints
|
|
97
98
|
# them.
|
|
98
99
|
#
|
|
99
|
-
def generate_field(
|
|
100
|
+
def generate_field(empty_char = @last_empty_char)
|
|
100
101
|
if plottable
|
|
101
102
|
new_field = []
|
|
102
103
|
@field.each do |rows|
|
|
103
104
|
rows.each do |items|
|
|
104
105
|
if items.length == 0
|
|
105
|
-
items.insert(0, "#{
|
|
106
|
-
elsif
|
|
107
|
-
items[0] = "#{
|
|
106
|
+
items.insert(0, "#{empty_char} ")
|
|
107
|
+
elsif empty_char != @last_empty_char && items == ["#{last_empty_char} "]
|
|
108
|
+
items[0] = "#{empty_char} "
|
|
108
109
|
end
|
|
109
110
|
end
|
|
110
111
|
new_field.insert(-1, rows.join(''))
|
|
111
112
|
end
|
|
112
|
-
@last_empty_char =
|
|
113
|
+
@last_empty_char = empty_char
|
|
113
114
|
package = (owner.package.nil?) ? 'No package chosen.' : owner.package.to_s
|
|
114
115
|
puts "\nPin field: #{package}\n\n"
|
|
115
116
|
group_display = @groups.join("\n")
|
|
@@ -129,13 +130,12 @@ module Origen
|
|
|
129
130
|
@groups << "#{marker} - Power"
|
|
130
131
|
pin_list.each do |item|
|
|
131
132
|
# puts items,owner.pins[items].location
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
end
|
|
133
|
+
|
|
134
|
+
coordinates = coordinate(item.location)
|
|
135
|
+
@field[coordinates[0]][coordinates[1]] = [marker.red + ' ']
|
|
136
|
+
rescue
|
|
137
|
+
puts "#{item} doesn't appear to have a physical location in this configuration."
|
|
138
|
+
puts "Current package = #{owner.package}"
|
|
139
139
|
end
|
|
140
140
|
generate_field
|
|
141
141
|
end
|
|
@@ -151,12 +151,10 @@ module Origen
|
|
|
151
151
|
pin_list = owner.ground_pins.map { |_ken, pin| pin }
|
|
152
152
|
@groups << "#{marker} - Ground"
|
|
153
153
|
pin_list.each do |item|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
puts "#{item} doesn't appear to have a physical location in this configuration."
|
|
159
|
-
end
|
|
154
|
+
coordinates = coordinate(item.location)
|
|
155
|
+
@field[coordinates[0]][coordinates[1]] = [marker.green + ' ']
|
|
156
|
+
rescue
|
|
157
|
+
puts "#{item} doesn't appear to have a physical location in this configuration."
|
|
160
158
|
end
|
|
161
159
|
generate_field
|
|
162
160
|
end
|
|
@@ -183,16 +181,16 @@ module Origen
|
|
|
183
181
|
if plottable
|
|
184
182
|
puts "\nPLOTTING GROUPS:"
|
|
185
183
|
puts '$dut.package.list_groups <-- to see available group names'
|
|
186
|
-
puts
|
|
184
|
+
puts '$dut.package.plot("ddr_interface_1")'
|
|
187
185
|
puts "$dut.package.plot_group(\"serdes_1\",'Z') <--denotes custom legend marker, Z"
|
|
188
186
|
puts "\nPLOTTING INDIVIDUAL PINS:"
|
|
189
|
-
puts
|
|
187
|
+
puts '$dut.package.plot("d1_mdqs00")'
|
|
190
188
|
puts "\nPLOTTING WITH REGEXP:"
|
|
191
|
-
puts
|
|
192
|
-
puts
|
|
189
|
+
puts '$dut.package.plot("d1_mdqs") <-- Plot all controller 1 DQS pins.'
|
|
190
|
+
puts '$dut.package.plot("d1_mdqs0[0-9]") <-- Plot d1_mdqs00 - d1_mdqs09.'
|
|
193
191
|
puts "\nADDING POWER/GROUND:"
|
|
194
|
-
puts
|
|
195
|
-
puts
|
|
192
|
+
puts '$dut.package.plot("grounds")'
|
|
193
|
+
puts '$dut.package.plot("power")'
|
|
196
194
|
puts "\nVIEW CURRENT PLOT\n"
|
|
197
195
|
puts '$dut.package.show'
|
|
198
196
|
else
|
|
@@ -206,7 +204,7 @@ module Origen
|
|
|
206
204
|
grps = owner.pins.map { |_key, val| val.group }
|
|
207
205
|
grps.uniq!
|
|
208
206
|
rescue
|
|
209
|
-
|
|
207
|
+
[]
|
|
210
208
|
end
|
|
211
209
|
alias_method :group_list, :list_groups
|
|
212
210
|
|
|
@@ -216,7 +214,7 @@ module Origen
|
|
|
216
214
|
pin_list[0].compact!
|
|
217
215
|
puts 'No pins found under that group name.' unless pin_list.any?
|
|
218
216
|
rescue
|
|
219
|
-
|
|
217
|
+
[]
|
|
220
218
|
end
|
|
221
219
|
|
|
222
220
|
# ##############################################################
|
|
@@ -235,6 +233,7 @@ module Origen
|
|
|
235
233
|
row = location[0..split_index]
|
|
236
234
|
column = location[split_index + 1..-1]
|
|
237
235
|
fail ArgumentError, error unless row.length > 0 && column.length > 0
|
|
236
|
+
|
|
238
237
|
## Now convert alphanumeric row to jedec equiv' with to_row() method
|
|
239
238
|
# and return coordinates.
|
|
240
239
|
coordinates = [to_row(row), column.to_i - 1]
|
|
@@ -264,48 +263,46 @@ module Origen
|
|
|
264
263
|
# $dut.package.plot("d1_mdq37","$") # plots controller 1 mdq 37, and uses $ as a legend marker
|
|
265
264
|
# $dut.package.plot("d2_mdq[3-6]0) # plots d2_mdq30, d2_mdq40, d2_md520, and d2_md620
|
|
266
265
|
#
|
|
267
|
-
def plot(
|
|
266
|
+
def plot(pin_name, marker = nil)
|
|
268
267
|
prepare_plot if field.nil?
|
|
269
|
-
if plottable &&
|
|
268
|
+
if plottable && pin_name.is_a?(String) && /ground/ =~ pin_name.downcase
|
|
270
269
|
add_grounds('G')
|
|
271
|
-
elsif plottable &&
|
|
270
|
+
elsif plottable && pin_name.is_a?(String) && /power/ =~ pin_name.downcase
|
|
272
271
|
add_power('P')
|
|
273
|
-
elsif plottable &&
|
|
272
|
+
elsif plottable && pin_name.is_a?(String)
|
|
274
273
|
found_pins = []
|
|
275
|
-
owner.pins.map { |pin| found_pins << pin[1] if /#{
|
|
274
|
+
owner.pins.map { |pin| found_pins << pin[1] if /#{pin_name}/ =~ pin[1].name.to_s || /#{pin_name}/ =~ pin[1].group.to_s }
|
|
276
275
|
if found_pins.size == 1 && marker.nil?
|
|
277
|
-
marker = initial(
|
|
278
|
-
while @groups.index { |
|
|
276
|
+
marker = initial(pin_name.to_s)
|
|
277
|
+
while @groups.index { |grp_name| grp_name =~ /#{marker} -/ }
|
|
279
278
|
marker.next!
|
|
280
279
|
marker = '0' unless marker.size < 2
|
|
281
280
|
end
|
|
282
281
|
coordinates = coordinate(found_pins[0].location)
|
|
283
282
|
@field[coordinates[0]][coordinates[1]] = [marker.white_on_blue + ' ']
|
|
284
|
-
@groups.delete_if { |group| /#{
|
|
283
|
+
@groups.delete_if { |group| /#{pin_name}/ =~ group }
|
|
285
284
|
@groups << "#{marker} - #{found_pins[0].name} - #{found_pins[0].location}"
|
|
286
285
|
elsif found_pins.size == 1
|
|
287
286
|
coordinates = coordinate(found_pins[0].location)
|
|
288
287
|
@field[coordinates[0]][coordinates[1]] = [marker.white_on_blue + ' ']
|
|
289
|
-
@groups.delete_if { |group| /#{
|
|
288
|
+
@groups.delete_if { |group| /#{pin_name}/ =~ group }
|
|
290
289
|
@groups << "#{marker} - #{found_pins[0].name} - #{found_pins[0].location}"
|
|
291
290
|
else
|
|
292
291
|
if marker.nil?
|
|
293
|
-
marker = initial(
|
|
294
|
-
while @groups.index { |
|
|
292
|
+
marker = initial(pin_name.to_s)
|
|
293
|
+
while @groups.index { |grp_name| grp_name =~ /#{marker} -/ }
|
|
295
294
|
marker.next!
|
|
296
295
|
marker = '0' unless marker.size < 2
|
|
297
296
|
end
|
|
298
297
|
end
|
|
299
|
-
reg_state = quote_regex(
|
|
298
|
+
reg_state = quote_regex(pin_name)
|
|
300
299
|
found_pins.each do |item|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
raise "\n#{item} doesn't appear to have a physical location in this configuration."
|
|
308
|
-
end
|
|
300
|
+
coordinates = coordinate(item.location)
|
|
301
|
+
@field[coordinates[0]][coordinates[1]] = [marker + ' ']
|
|
302
|
+
@groups.delete_if { |group| "#{marker} - \"#{reg_state}\"" == group }
|
|
303
|
+
@groups << "#{marker} - \"#{pin_name}\""
|
|
304
|
+
rescue
|
|
305
|
+
raise "\n#{item} doesn't appear to have a physical location in this configuration."
|
|
309
306
|
end
|
|
310
307
|
end
|
|
311
308
|
generate_field
|
|
@@ -328,20 +325,20 @@ module Origen
|
|
|
328
325
|
owner.pins.map { |pin| found_pins << pin[1] if coord == pin[1].location.to_s }
|
|
329
326
|
if marker.nil?
|
|
330
327
|
marker = initial(coord.to_s)
|
|
331
|
-
while @groups.index { |
|
|
328
|
+
while @groups.index { |grp_name| grp_name =~ /#{marker} -/ }
|
|
332
329
|
marker.next!
|
|
333
330
|
marker = '0' unless marker.size < 2
|
|
334
331
|
end
|
|
335
332
|
found_pins.each do |pin|
|
|
336
333
|
coordinates = coordinate(pin.location)
|
|
337
334
|
@field[coordinates[0]][coordinates[1]] = [marker.white_on_blue + ' ']
|
|
338
|
-
@groups.delete_if { |group| /#{coord
|
|
335
|
+
@groups.delete_if { |group| /#{coord}/ =~ group }
|
|
339
336
|
@groups << "#{marker} - #{found_pins[0].name} - #{found_pins[0].location}"
|
|
340
337
|
end
|
|
341
338
|
else
|
|
342
339
|
coordinates = coordinate(found_pins[0].location)
|
|
343
340
|
@field[coordinates[0]][coordinates[1]] = [marker.white_on_blue + ' ']
|
|
344
|
-
@groups.delete_if { |group| /#{coord
|
|
341
|
+
@groups.delete_if { |group| /#{coord}/ =~ group }
|
|
345
342
|
@groups << "#{marker} - #{found_pins[0].name} - #{found_pins[0].location}"
|
|
346
343
|
end
|
|
347
344
|
if found_pins.size > 0
|
data/lib/origen/chips/chip.rb
CHANGED
|
@@ -70,11 +70,11 @@ module Origen
|
|
|
70
70
|
end
|
|
71
71
|
end
|
|
72
72
|
if notes_found.empty?
|
|
73
|
-
|
|
73
|
+
nil
|
|
74
74
|
elsif notes_found.size == 1
|
|
75
75
|
notes_found.values.first.values.first
|
|
76
76
|
else
|
|
77
|
-
|
|
77
|
+
notes_found
|
|
78
78
|
end
|
|
79
79
|
end
|
|
80
80
|
|
|
@@ -122,6 +122,8 @@ module Origen
|
|
|
122
122
|
|
|
123
123
|
private
|
|
124
124
|
|
|
125
|
+
# rubocop:disable Lint/DuplicateMethods
|
|
126
|
+
|
|
125
127
|
# Two-dimensional hash with note id and type as the keys
|
|
126
128
|
def _notes
|
|
127
129
|
@_notes ||= Hash.new do |h, k|
|
|
@@ -143,9 +145,12 @@ module Origen
|
|
|
143
145
|
end
|
|
144
146
|
end
|
|
145
147
|
|
|
148
|
+
# rubocop:enable Lint/DuplicateMethods
|
|
149
|
+
|
|
146
150
|
# Return a hash based on the filter provided
|
|
147
151
|
def filter_hash(hash, filter)
|
|
148
152
|
fail 'Hash argument is not a Hash!' unless hash.is_a? Hash
|
|
153
|
+
|
|
149
154
|
filtered_hash = {}
|
|
150
155
|
select_logic = case filter
|
|
151
156
|
when String then 'k[Regexp.new(filter)]'
|
|
@@ -155,8 +160,7 @@ module Origen
|
|
|
155
160
|
'k == filter'
|
|
156
161
|
when NilClass then true # Return all specs if a filter is set to nil (i.e. user doesn't care about this filter)
|
|
157
162
|
else true
|
|
158
|
-
|
|
159
|
-
# rubocop:disable UnusedBlockArgument
|
|
163
|
+
end
|
|
160
164
|
filtered_hash = hash.select do |k, v|
|
|
161
165
|
[TrueClass, FalseClass].include?(select_logic.class) ? select_logic : eval(select_logic)
|
|
162
166
|
end
|
data/lib/origen/chips.rb
CHANGED
|
@@ -37,13 +37,13 @@ module Origen
|
|
|
37
37
|
}.update(options || {})
|
|
38
38
|
_chips
|
|
39
39
|
if s.nil?
|
|
40
|
-
|
|
40
|
+
show_chips(options)
|
|
41
41
|
elsif s.is_a? Hash
|
|
42
42
|
options.update(s)
|
|
43
|
-
|
|
43
|
+
show_chips(options)
|
|
44
44
|
else
|
|
45
45
|
options[:chip] = s
|
|
46
|
-
|
|
46
|
+
show_chips(options)
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
49
|
|
|
@@ -61,6 +61,7 @@ module Origen
|
|
|
61
61
|
if has_chip?(name, group: group, family: family, performance: performance, creating_chip: true)
|
|
62
62
|
fail "Chip already exists for chip: #{name}, group: #{group}, family: #{family} for object #{self}"
|
|
63
63
|
end
|
|
64
|
+
|
|
64
65
|
@_chips[group][family][performance][name] = chip_holder
|
|
65
66
|
end
|
|
66
67
|
|
|
@@ -76,9 +77,9 @@ module Origen
|
|
|
76
77
|
creating_chip: false
|
|
77
78
|
}.update(options)
|
|
78
79
|
if @_chips.nil? || @_chips == {}
|
|
79
|
-
|
|
80
|
+
false
|
|
80
81
|
else
|
|
81
|
-
|
|
82
|
+
!!show_chips(options)
|
|
82
83
|
end
|
|
83
84
|
end
|
|
84
85
|
|
|
@@ -127,11 +128,11 @@ module Origen
|
|
|
127
128
|
end
|
|
128
129
|
end
|
|
129
130
|
if notes_found.empty?
|
|
130
|
-
|
|
131
|
+
nil
|
|
131
132
|
elsif notes_found.size == 1
|
|
132
133
|
notes_found.values.first.values.first
|
|
133
134
|
else
|
|
134
|
-
|
|
135
|
+
notes_found
|
|
135
136
|
end
|
|
136
137
|
end
|
|
137
138
|
|
|
@@ -184,6 +185,8 @@ module Origen
|
|
|
184
185
|
|
|
185
186
|
private
|
|
186
187
|
|
|
188
|
+
# rubocop:disable Lint/DuplicateMethods
|
|
189
|
+
|
|
187
190
|
def _chips
|
|
188
191
|
# 4D hash with group, family, and performance
|
|
189
192
|
@_chips ||= Hash.new do |h, k|
|
|
@@ -215,10 +218,12 @@ module Origen
|
|
|
215
218
|
h[k] = {}
|
|
216
219
|
end
|
|
217
220
|
end
|
|
221
|
+
# rubocop:enable Lint/DuplicateMethods
|
|
218
222
|
|
|
219
223
|
# Return a hash based on the filter provided
|
|
220
224
|
def filter_hash(hash, filter)
|
|
221
225
|
fail 'Hash argument is not a Hash!' unless hash.is_a? Hash
|
|
226
|
+
|
|
222
227
|
filtered_hash = {}
|
|
223
228
|
select_logic = case filter
|
|
224
229
|
when String then 'k[Regexp.new(filter)]'
|
|
@@ -228,8 +233,7 @@ module Origen
|
|
|
228
233
|
'k == filter'
|
|
229
234
|
when NilClass then true # Return all specs if a filter is set to nil (i.e. user doesn't care about this filter)
|
|
230
235
|
else true
|
|
231
|
-
|
|
232
|
-
# rubocop:disable UnusedBlockArgument
|
|
236
|
+
end
|
|
233
237
|
filtered_hash = hash.select do |k, v|
|
|
234
238
|
[TrueClass, FalseClass].include?(select_logic.class) ? select_logic : eval(select_logic)
|
|
235
239
|
end
|
|
@@ -268,13 +272,13 @@ module Origen
|
|
|
268
272
|
return show_chips(options)
|
|
269
273
|
end
|
|
270
274
|
Origen.log.debug "Returning no chips for options #{options}"
|
|
271
|
-
|
|
275
|
+
nil
|
|
272
276
|
elsif chips_to_be_shown.size == 1
|
|
273
277
|
Origen.log.debug "returning one spec #{chips_to_be_shown.first.part_name}"
|
|
274
|
-
|
|
278
|
+
chips_to_be_shown.first
|
|
275
279
|
else
|
|
276
280
|
Origen.log.debug "returning an array of specs during initial search: #{chips_to_be_shown}"
|
|
277
|
-
|
|
281
|
+
chips_to_be_shown
|
|
278
282
|
end
|
|
279
283
|
end
|
|
280
284
|
end
|
data/lib/origen/client.rb
CHANGED
data/lib/origen/clocks/clock.rb
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
module Origen
|
|
2
2
|
module Clocks
|
|
3
3
|
class Clock
|
|
4
|
-
attr_accessor :id, :owner, :
|
|
4
|
+
attr_accessor :id, :owner, :instantiate_users
|
|
5
|
+
attr_writer :users, :freq_target, :freq_range
|
|
5
6
|
|
|
6
7
|
def initialize(id, owner, options = {}, &block)
|
|
7
8
|
@id = id
|
|
@@ -37,17 +38,17 @@ module Origen
|
|
|
37
38
|
val = @setpoint if val.nil?
|
|
38
39
|
if @freq_range == :fixed
|
|
39
40
|
if val == @freq_target
|
|
40
|
-
|
|
41
|
+
true
|
|
41
42
|
else
|
|
42
43
|
Origen.log.warn("Clock '#{id}' is a fixed clock with a target frequency of #{@freq_target.as_Hz}")
|
|
43
|
-
|
|
44
|
+
false
|
|
44
45
|
end
|
|
45
46
|
else
|
|
46
47
|
if @freq_range.include?(val)
|
|
47
|
-
|
|
48
|
+
true
|
|
48
49
|
else
|
|
49
50
|
Origen.log.warn("Setpoint (#{setpoint_string(val)}) for clock '#{id}' is not within the frequency range (#{freq_range_string})")
|
|
50
|
-
|
|
51
|
+
false
|
|
51
52
|
end
|
|
52
53
|
end
|
|
53
54
|
end
|
|
@@ -100,10 +101,10 @@ module Origen
|
|
|
100
101
|
def users_defined?
|
|
101
102
|
undefined_ips = ips - Origen.all_sub_blocks
|
|
102
103
|
if undefined_ips.empty?
|
|
103
|
-
|
|
104
|
+
true
|
|
104
105
|
else
|
|
105
106
|
Origen.log.warn("Clock '#{id}' has the following IP undefined: #{undefined_ips}")
|
|
106
|
-
|
|
107
|
+
false
|
|
107
108
|
end
|
|
108
109
|
end
|
|
109
110
|
|
|
@@ -18,6 +18,7 @@ module Origen
|
|
|
18
18
|
attr_getter = attr.to_s[/\@(\S+)/, 1].to_sym
|
|
19
19
|
attr_val = clk.send attr_getter
|
|
20
20
|
next unless [String, Numeric, Float, Integer, Symbol, Range].include? attr_val.class
|
|
21
|
+
|
|
21
22
|
headers << attr_getter unless headers.include?(attr_getter)
|
|
22
23
|
str = case attr_val
|
|
23
24
|
when Numeric
|
|
@@ -29,7 +30,7 @@ module Origen
|
|
|
29
30
|
"#{start_frequency.as_Hz}\.\.#{end_frequency.as_Hz}"
|
|
30
31
|
else
|
|
31
32
|
attr_val.to_s
|
|
32
|
-
|
|
33
|
+
end
|
|
33
34
|
curr_longest = [attr_getter, str].max_by(&:length).size + 2 # Add 2 for the whitespace
|
|
34
35
|
if colhash[attr].nil? || (colhash[attr] < curr_longest)
|
|
35
36
|
colhash[attr] = curr_longest
|
|
@@ -354,7 +354,7 @@ module Origen
|
|
|
354
354
|
# done of the name and it is assumed that it is a valid class name including the application namespace.
|
|
355
355
|
def class_name_to_blocks_dir(name)
|
|
356
356
|
name = name.split('::')
|
|
357
|
-
name.shift
|
|
357
|
+
name.shift # Drop the application name
|
|
358
358
|
dir = Origen.root.join('app', 'blocks')
|
|
359
359
|
name.each_with_index do |n, i|
|
|
360
360
|
if i == 0
|
|
@@ -40,7 +40,7 @@ module Origen
|
|
|
40
40
|
|
|
41
41
|
# Cache source root and add lib/generators/base/generator/templates to
|
|
42
42
|
# source paths.
|
|
43
|
-
def self.inherited(base)
|
|
43
|
+
def self.inherited(base) # :nodoc:
|
|
44
44
|
super
|
|
45
45
|
if base.name && base.name !~ /Base$/
|
|
46
46
|
if base.namespace == 'origen'
|
|
@@ -28,6 +28,7 @@ module Origen
|
|
|
28
28
|
|
|
29
29
|
def self.load_generators
|
|
30
30
|
return if @generators_loaded
|
|
31
|
+
|
|
31
32
|
# Load Origen's generators
|
|
32
33
|
require_relative 'code_generators/block_common'
|
|
33
34
|
require_relative 'code_generators/dut'
|
|
@@ -43,6 +44,7 @@ module Origen
|
|
|
43
44
|
# Loaded separately so as not to pollute the generated list of generators available to users
|
|
44
45
|
def self.load_internal_generators
|
|
45
46
|
return if @internal_generators_loaded
|
|
47
|
+
|
|
46
48
|
require_relative 'code_generators/semver'
|
|
47
49
|
require_relative 'code_generators/timever'
|
|
48
50
|
@internal_generators_loaded = true
|
|
@@ -121,6 +123,7 @@ END
|
|
|
121
123
|
end
|
|
122
124
|
plugin_generators.each do |namespace, generators|
|
|
123
125
|
next if namespace.to_s == 'origen_app_generators'
|
|
126
|
+
|
|
124
127
|
puts
|
|
125
128
|
generators.each do |_name, gen|
|
|
126
129
|
puts "#{namespace}:#{gen}"
|
|
@@ -16,7 +16,7 @@ opt_parser.parse! ARGV
|
|
|
16
16
|
|
|
17
17
|
origen_binstub = File.join(Origen.root, 'lbin', 'origen')
|
|
18
18
|
|
|
19
|
-
unless
|
|
19
|
+
unless File.exist?(origen_binstub) && File.read(origen_binstub) =~ /This file was generated by Origen/
|
|
20
20
|
puts 'An archive can only be created after your application is running the latest Origen boot system,'
|
|
21
21
|
puts 'run the following command to update your application and then try again:'
|
|
22
22
|
puts
|