origen 0.27.0 → 0.28.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.
- checksums.yaml +4 -4
- data/config/version.rb +1 -1
- data/lib/origen.rb +13 -0
- data/lib/origen/application/plugins.rb +3 -0
- data/lib/origen/commands.rb +1 -1
- data/lib/origen/commands/plugin.rb +240 -3
- data/lib/origen/core_ext.rb +1 -0
- data/lib/origen/core_ext/numeric.rb +6 -6
- data/lib/origen/core_ext/string.rb +24 -0
- data/lib/origen/core_ext/symbol.rb +5 -0
- data/lib/origen/model.rb +3 -0
- data/lib/origen/model/exporter.rb +238 -0
- data/lib/origen/parameters.rb +27 -6
- data/lib/origen/pins.rb +4 -0
- data/lib/origen/pins/pin.rb +26 -1
- data/lib/origen/power_domains/power_domain.rb +51 -11
- data/lib/origen/registers.rb +5 -4
- data/lib/origen/registers/bit_collection.rb +9 -4
- data/lib/origen/registers/reg.rb +66 -24
- data/lib/origen/site_config.rb +1 -1
- data/lib/origen/sub_blocks.rb +125 -38
- data/lib/origen/top_level.rb +6 -1
- data/lib/origen/users/user.rb +1 -1
- data/vendor/lib/models/origen/export1.rb +75 -0
- data/vendor/lib/models/origen/export1/block1.rb +13 -0
- data/vendor/lib/models/origen/export1/block1/x.rb +27 -0
- metadata +8 -3
@@ -0,0 +1,238 @@
|
|
1
|
+
module Origen
|
2
|
+
module Model
|
3
|
+
module Exporter
|
4
|
+
def export(name, options = {})
|
5
|
+
options = {
|
6
|
+
include_pins: true,
|
7
|
+
include_registers: true,
|
8
|
+
include_sub_blocks: true,
|
9
|
+
include_timestamp: true,
|
10
|
+
file_path: nil
|
11
|
+
}.merge(options)
|
12
|
+
if options[:file_path]
|
13
|
+
file = File.join(options[:file_path], "#{name}.rb")
|
14
|
+
else
|
15
|
+
file = export_path(name)
|
16
|
+
end
|
17
|
+
file += '.rb' unless file =~ /.rb$/
|
18
|
+
file = Pathname.new(file)
|
19
|
+
FileUtils.rm_rf(file.sub_ext('').to_s) if File.exist?(file.sub_ext('').to_s)
|
20
|
+
FileUtils.rm_rf(file.to_s) if File.exist?(file.to_s)
|
21
|
+
FileUtils.mkdir_p(file.dirname)
|
22
|
+
File.open(file, 'w') do |f|
|
23
|
+
export_wrap_with_namespaces(f, options) do |indent|
|
24
|
+
f.puts((' ' * indent) + 'def self.extended(model)')
|
25
|
+
indent += 2
|
26
|
+
if top_level?
|
27
|
+
# Write out packages if any
|
28
|
+
unless Origen.top_level.packages.empty?
|
29
|
+
spaces = ' ' * indent
|
30
|
+
Origen.top_level.packages.each { |p| f.puts "#{spaces}model.add_package :#{p}\n" }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
if options[:include_pins]
|
34
|
+
if top_level?
|
35
|
+
pins.each do |id, pin|
|
36
|
+
f.puts export_pin(id, pin, indent: indent)
|
37
|
+
end
|
38
|
+
pin_groups.each do |id, pins|
|
39
|
+
f.puts export_pin_group(id, pins, indent: indent)
|
40
|
+
end
|
41
|
+
power_pins.each do |id, pin|
|
42
|
+
f.puts export_pin(id, pin, indent: indent, method: :add_power_pin, attributes: [:voltage, :current_limit])
|
43
|
+
end
|
44
|
+
power_pin_groups.each do |id, pins|
|
45
|
+
f.puts export_pin_group(id, pins, indent: indent, method: :add_power_pin_group)
|
46
|
+
end
|
47
|
+
ground_pins.each do |id, pin|
|
48
|
+
f.puts export_pin(id, pin, indent: indent, method: :add_ground_pin)
|
49
|
+
end
|
50
|
+
ground_pin_groups.each do |id, pins|
|
51
|
+
f.puts export_pin_group(id, pins, indent: indent, method: :add_ground_pin_group)
|
52
|
+
end
|
53
|
+
f.puts
|
54
|
+
end
|
55
|
+
end
|
56
|
+
if options[:include_sub_blocks]
|
57
|
+
sub_blocks.each do |name, block|
|
58
|
+
f.puts export_sub_block(name, block, options.merge(indent: indent, file_path: file))
|
59
|
+
end
|
60
|
+
f.puts unless sub_blocks.empty?
|
61
|
+
end
|
62
|
+
|
63
|
+
if options[:include_registers]
|
64
|
+
regs.each do |name, reg|
|
65
|
+
f.puts export_reg(name, reg, indent: indent)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
indent -= 2
|
70
|
+
f.puts((' ' * indent) + 'end')
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
def import(name, options = {})
|
76
|
+
path = export_path(name)
|
77
|
+
require path
|
78
|
+
extend "#{Origen.app.namespace.underscore.camelcase}::#{name.to_s.camelcase}".constantize
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
|
83
|
+
def write_pin_packages(pin)
|
84
|
+
''.tap do |str|
|
85
|
+
unless pin.packages.empty?
|
86
|
+
str << 'packages: { '
|
87
|
+
pin.packages.each do |pin_pkg, pin_pkg_meta|
|
88
|
+
pkg_end_str = (pin_pkg == pin.packages.keys.last) ? ' }' : ', '
|
89
|
+
if pin_pkg_meta.empty?
|
90
|
+
str << "#{pin_pkg}: {}#{pkg_end_str}"
|
91
|
+
next
|
92
|
+
else
|
93
|
+
str << "#{pin_pkg}: { "
|
94
|
+
pin_pkg_meta.each do |attr, attr_val|
|
95
|
+
str << "#{attr}: "
|
96
|
+
attr_end_str = (attr == pin_pkg_meta.keys.last) ? ' }' : ', '
|
97
|
+
case attr_val
|
98
|
+
when String
|
99
|
+
str << "'#{attr_val}'#{attr_end_str}"
|
100
|
+
else
|
101
|
+
str << "#{attr_val}#{attr_end_str}"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
str << pkg_end_str
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def export_wrap_with_namespaces(file, options = {})
|
112
|
+
file.puts '# This file was generated by Origen, any hand edits will likely get overwritten'
|
113
|
+
if options[:include_timestamp]
|
114
|
+
file.puts "# Created at #{Time.now.strftime('%e %b %Y %H:%M%p')} by #{User.current.name}"
|
115
|
+
end
|
116
|
+
file.puts '# rubocop:disable all'
|
117
|
+
indent = 0
|
118
|
+
export_module_names_from_path(file.path).each do |name|
|
119
|
+
file.puts((' ' * indent) + "module #{name}")
|
120
|
+
indent += 2
|
121
|
+
end
|
122
|
+
yield indent
|
123
|
+
export_module_names_from_path(file.path).each do |name|
|
124
|
+
indent -= 2
|
125
|
+
file.puts((' ' * indent) + 'end')
|
126
|
+
end
|
127
|
+
file.puts '# rubocop:enable all'
|
128
|
+
end
|
129
|
+
|
130
|
+
def export_module_names_from_path(name)
|
131
|
+
name = name.sub("#{export_dir}/", '').sub('.rb', '')
|
132
|
+
name.split(/[\/\\]/).map do |n|
|
133
|
+
if n == ''
|
134
|
+
nil
|
135
|
+
else
|
136
|
+
n.camelcase
|
137
|
+
end
|
138
|
+
end.compact
|
139
|
+
end
|
140
|
+
|
141
|
+
def export_path(name)
|
142
|
+
File.join(export_dir, Origen.app.namespace.to_s.underscore, name.to_s.underscore)
|
143
|
+
end
|
144
|
+
|
145
|
+
def export_dir
|
146
|
+
File.join(Origen.root, 'vendor', 'lib', 'models')
|
147
|
+
end
|
148
|
+
|
149
|
+
def export_pin(id, pin, options = {})
|
150
|
+
indent = ' ' * (options[:indent] || 0)
|
151
|
+
line = indent + "model.#{options[:method] || 'add_pin'} :#{id}"
|
152
|
+
if (r = pin.instance_variable_get('@reset')) != :dont_care
|
153
|
+
line << ", reset: :#{r}"
|
154
|
+
end
|
155
|
+
if (d = pin.direction) != :io
|
156
|
+
line << ", direction: :#{d}"
|
157
|
+
end
|
158
|
+
pkg_meta = write_pin_packages(pin)
|
159
|
+
line << ", #{pkg_meta}" unless pkg_meta == ''
|
160
|
+
Array(options[:attributes]).each do |attr|
|
161
|
+
unless (v = pin.send(attr)).nil?
|
162
|
+
if v.is_a?(Numeric)
|
163
|
+
line << ", #{attr}: #{v}"
|
164
|
+
else
|
165
|
+
line << ", #{attr}: '#{v}'"
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
169
|
+
unless pin.meta.empty?
|
170
|
+
line << ', meta: { '
|
171
|
+
line << pin.meta.map do |k, v|
|
172
|
+
if v.is_a?(Numeric)
|
173
|
+
"#{k}: #{v}"
|
174
|
+
else
|
175
|
+
"#{k}: '#{v}'"
|
176
|
+
end
|
177
|
+
end.join(', ')
|
178
|
+
line << ' }'
|
179
|
+
end
|
180
|
+
line
|
181
|
+
end
|
182
|
+
|
183
|
+
def export_pin_group(id, pins, options = {})
|
184
|
+
indent = ' ' * (options[:indent] || 0)
|
185
|
+
line = indent + "model.#{options[:method] || 'add_pin_group'} :#{id}, "
|
186
|
+
if pins.endian == :little
|
187
|
+
line << pins.reverse_each.map { |p| ":#{p.id}" }.join(', ')
|
188
|
+
line << "\n#{indent}model.pins(:#{id}).endian = :little"
|
189
|
+
else
|
190
|
+
line << pins.map { |p| ":#{p.id}" }.join(', ')
|
191
|
+
end
|
192
|
+
line
|
193
|
+
end
|
194
|
+
|
195
|
+
def export_sub_block(id, block, options = {})
|
196
|
+
indent = ' ' * (options[:indent] || 0)
|
197
|
+
file = File.join(options[:file_path].sub_ext(''), "#{id}.rb")
|
198
|
+
local_file = file.to_s.sub("#{export_dir}/", '')
|
199
|
+
line = indent + "model.sub_block :#{id}, file: '#{local_file}'"
|
200
|
+
unless block.base_address == 0
|
201
|
+
line << ", base_address: #{block.base_address.to_hex}"
|
202
|
+
end
|
203
|
+
block.export(id, options.merge(file_path: options[:file_path].sub_ext('').to_s))
|
204
|
+
line
|
205
|
+
end
|
206
|
+
|
207
|
+
def export_reg(id, reg, options = {})
|
208
|
+
indent = ' ' * (options[:indent] || 0)
|
209
|
+
lines = []
|
210
|
+
unless reg.description.empty?
|
211
|
+
reg.description.each { |l| lines << indent + "# #{l}" }
|
212
|
+
end
|
213
|
+
lines << indent + "model.add_reg :#{id}, #{reg.offset.to_hex}, size: #{reg.size} do |reg|"
|
214
|
+
indent = ' ' * ((options[:indent] || 0) + 2)
|
215
|
+
reg.named_bits.each do |name, bits|
|
216
|
+
unless bits.description.empty?
|
217
|
+
bits.description.each { |l| lines << indent + "# #{l}" }
|
218
|
+
end
|
219
|
+
if bits.size == 1
|
220
|
+
line = indent + "reg.bit #{bits.position}, :#{name}"
|
221
|
+
else
|
222
|
+
line = indent + "reg.bit #{bits.position + bits.size - 1}..#{bits.position}, :#{name}"
|
223
|
+
end
|
224
|
+
unless bits.access == :rw
|
225
|
+
line << ", access: :#{bits.access}"
|
226
|
+
end
|
227
|
+
unless bits.reset_val == 0
|
228
|
+
line << ", reset: #{bits.reset_val.to_hex}"
|
229
|
+
end
|
230
|
+
lines << line
|
231
|
+
end
|
232
|
+
indent = ' ' * (options[:indent] || 0)
|
233
|
+
lines << indent + 'end'
|
234
|
+
lines.join("\n")
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
data/lib/origen/parameters.rb
CHANGED
@@ -31,8 +31,8 @@ module Origen
|
|
31
31
|
else
|
32
32
|
_parameter_sets[name] = Set.new(top_level: true, owner: self)
|
33
33
|
if options[:inherit]
|
34
|
-
_validate_parameter_set_name(options[:inherit])
|
35
|
-
parent = _parameter_sets[
|
34
|
+
kontext = _validate_parameter_set_name(options[:inherit])
|
35
|
+
parent = kontext[:obj]._parameter_sets[kontext[:context]]
|
36
36
|
_parameter_sets[name].copy_defaults_from(parent)
|
37
37
|
_parameter_sets[name].define(parent, &block)
|
38
38
|
else
|
@@ -100,10 +100,31 @@ module Origen
|
|
100
100
|
|
101
101
|
private
|
102
102
|
|
103
|
-
def _validate_parameter_set_name(
|
104
|
-
|
105
|
-
|
106
|
-
|
103
|
+
def _validate_parameter_set_name(expr)
|
104
|
+
# Check if the user specified to inherit from another object
|
105
|
+
# or just passed in a param context
|
106
|
+
param_context = {}.tap do |context_hash|
|
107
|
+
case expr
|
108
|
+
when Symbol
|
109
|
+
# user specified a local context
|
110
|
+
context_hash[:obj] = self
|
111
|
+
context_hash[:context] = expr
|
112
|
+
when String
|
113
|
+
# user specified a DUT path
|
114
|
+
path = expr.split('.')[0..-2].join('.')
|
115
|
+
kontext = expr.split('.')[-1].to_sym
|
116
|
+
context_hash[:obj] = eval(path)
|
117
|
+
context_hash[:context] = kontext
|
118
|
+
else
|
119
|
+
Origen.log.error('Parameter context must be a Symbol (local to self) or a String (reference to another object)!')
|
120
|
+
fail
|
121
|
+
end
|
122
|
+
end
|
123
|
+
if param_context[:obj]._parameter_sets.key?(param_context[:context])
|
124
|
+
return param_context
|
125
|
+
else
|
126
|
+
puts "Unknown parameter set :#{param_context[:context]} requested for #{param_context[:obj].class}, these are the valid sets:"
|
127
|
+
param_context[:obj]._parameter_sets.keys.each { |k| puts " :#{k}" }
|
107
128
|
puts ''
|
108
129
|
fail 'Unknown parameter set!'
|
109
130
|
end
|
data/lib/origen/pins.rb
CHANGED
@@ -732,6 +732,7 @@ If you meant to define the pin then use the add_pin method instead.
|
|
732
732
|
}.merge(options)
|
733
733
|
pins(id, options, &block)
|
734
734
|
end
|
735
|
+
alias_method :power_pin, :power_pins
|
735
736
|
|
736
737
|
# Equivalent to the pins method but considers ground pins rather than regular pins
|
737
738
|
def ground_pins(id = nil, options = {}, &block)
|
@@ -741,6 +742,7 @@ If you meant to define the pin then use the add_pin method instead.
|
|
741
742
|
}.merge(options)
|
742
743
|
pins(id, options, &block)
|
743
744
|
end
|
745
|
+
alias_method :ground_pin, :ground_pins
|
744
746
|
|
745
747
|
# Equivalent to the pins method but considers other pins rather than regular pins
|
746
748
|
def other_pins(id = nil, options = {}, &block)
|
@@ -750,6 +752,7 @@ If you meant to define the pin then use the add_pin method instead.
|
|
750
752
|
}.merge(options)
|
751
753
|
pins(id, options, &block)
|
752
754
|
end
|
755
|
+
alias_method :other_pin, :other_pins
|
753
756
|
|
754
757
|
# Equivalent to the pins method but considers virtual pins rather than regular pins
|
755
758
|
def virtual_pins(id = nil, options = {}, &block)
|
@@ -759,6 +762,7 @@ If you meant to define the pin then use the add_pin method instead.
|
|
759
762
|
}.merge(options)
|
760
763
|
pins(id, options, &block)
|
761
764
|
end
|
765
|
+
alias_method :virtual_pin, :virtual_pins
|
762
766
|
|
763
767
|
def delete_all_pins
|
764
768
|
Origen.pin_bank.send :empty!
|
data/lib/origen/pins/pin.rb
CHANGED
@@ -9,7 +9,7 @@ module Origen
|
|
9
9
|
|
10
10
|
# Any attributes listed here will be looked up for the current package context
|
11
11
|
# before falling back to a default
|
12
|
-
PACKAGE_SCOPED_ATTRIBUTES = [:location, :dib_assignment]
|
12
|
+
PACKAGE_SCOPED_ATTRIBUTES = [:location, :dib_assignment, :dib_meta]
|
13
13
|
|
14
14
|
# Pin Types
|
15
15
|
TYPES = [:analog, :digital]
|
@@ -74,6 +74,7 @@ module Origen
|
|
74
74
|
@value = 0
|
75
75
|
@clock = nil
|
76
76
|
@meta = options[:meta] || {}
|
77
|
+
@dib_meta = options[:dib_meta] || {}
|
77
78
|
on_init(owner, options)
|
78
79
|
# Assign the initial state from the method so that any inversion is picked up...
|
79
80
|
send(@reset)
|
@@ -421,6 +422,18 @@ module Origen
|
|
421
422
|
alias_method :add_dib_info, :add_dib_assignment
|
422
423
|
alias_method :add_channel, :add_dib_assignment
|
423
424
|
|
425
|
+
def add_dib_meta(pkg, options)
|
426
|
+
unless Origen.top_level.packages.include? pkg
|
427
|
+
Origen.log.error("Cannot add DIB metadata for package '#{pkg}', that package has not been added yet!")
|
428
|
+
fail
|
429
|
+
end
|
430
|
+
options.each do |attr, attr_value|
|
431
|
+
packages[pkg][:dib_meta] ||= {}
|
432
|
+
packages[pkg][:dib_meta][attr] = attr_value
|
433
|
+
add_alias attr_value.to_s.symbolize, package: pkg, mode: :all, configuration: :all
|
434
|
+
end
|
435
|
+
end
|
436
|
+
|
424
437
|
# Returns the number of test sites enabled for the pin
|
425
438
|
def sites
|
426
439
|
dib_assignment.size
|
@@ -978,6 +991,18 @@ module Origen
|
|
978
991
|
end
|
979
992
|
end
|
980
993
|
|
994
|
+
def method_missing(m, *args, &block)
|
995
|
+
if meta.include? m
|
996
|
+
meta[m]
|
997
|
+
else
|
998
|
+
super
|
999
|
+
end
|
1000
|
+
end
|
1001
|
+
|
1002
|
+
def respond_to_missing?(m, include_private = false)
|
1003
|
+
meta[m] || super
|
1004
|
+
end
|
1005
|
+
|
981
1006
|
private
|
982
1007
|
|
983
1008
|
def primary_group=(group)
|
@@ -1,7 +1,9 @@
|
|
1
|
+
require 'origen/specs'
|
1
2
|
module Origen
|
2
3
|
module PowerDomains
|
3
4
|
class PowerDomain
|
4
|
-
|
5
|
+
include Origen::Specs
|
6
|
+
attr_accessor :id, :description, :unit_voltage_range, :nominal_voltage, :setpoint, :maximum_voltage_rating, :min, :max
|
5
7
|
|
6
8
|
# Generic Power Domain Name
|
7
9
|
# This is the power supply that can be blocked off to multiple power supplies
|
@@ -36,12 +38,31 @@ module Origen
|
|
36
38
|
(block.arity < 1 ? (instance_eval(&block)) : block.call(self)) if block_given?
|
37
39
|
@unit_voltage_range = :fixed if @unit_voltage_range.nil?
|
38
40
|
fail unless attrs_ok?
|
41
|
+
create_dut_spec unless @min.nil? || @max.nil?
|
39
42
|
end
|
40
43
|
|
41
44
|
def name
|
42
45
|
@id
|
43
46
|
end
|
44
47
|
|
48
|
+
# Create DUT specs for the power supply
|
49
|
+
def create_dut_spec
|
50
|
+
if Origen.top_level.specs.nil?
|
51
|
+
set_specs
|
52
|
+
elsif Origen.top_level.specs.include? name
|
53
|
+
Origen.log.error("Cannot create power domain spec '#{name}', it already exists!")
|
54
|
+
fail
|
55
|
+
else
|
56
|
+
set_specs
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Maximum Voltage Rating
|
61
|
+
def maximum_voltage_rating
|
62
|
+
@maximum_voltage_rating
|
63
|
+
end
|
64
|
+
alias_method :mvr, :maximum_voltage_rating
|
65
|
+
|
45
66
|
# Sets setpoint equal to nominal_voltage
|
46
67
|
def setpoint_to_nominal
|
47
68
|
@setpoint = @nominal_voltage
|
@@ -112,7 +133,8 @@ module Origen
|
|
112
133
|
alias_method :curr_value, :setpoint
|
113
134
|
alias_method :value, :setpoint
|
114
135
|
|
115
|
-
#
|
136
|
+
# Power domain can allow either a variable
|
137
|
+
# or fixed unit voltage range (Range or :fixed)
|
116
138
|
def unit_voltage_range
|
117
139
|
@unit_voltage_range
|
118
140
|
end
|
@@ -129,11 +151,14 @@ module Origen
|
|
129
151
|
# Checks if the setpoint is valid
|
130
152
|
# This will need rework once the class has spec limits added
|
131
153
|
def setpoint_ok?(val = nil)
|
132
|
-
return true if
|
133
|
-
|
134
|
-
|
154
|
+
return true if maximum_voltage_rating.nil?
|
155
|
+
compare_val = val.nil? ? setpoint : val
|
156
|
+
if compare_val.nil?
|
157
|
+
false
|
158
|
+
elsif compare_val <= maximum_voltage_rating
|
159
|
+
true
|
135
160
|
else
|
136
|
-
|
161
|
+
false
|
137
162
|
end
|
138
163
|
end
|
139
164
|
alias_method :value_ok?, :setpoint_ok?
|
@@ -164,6 +189,16 @@ module Origen
|
|
164
189
|
|
165
190
|
private
|
166
191
|
|
192
|
+
def set_specs
|
193
|
+
Origen.top_level.spec name, :dc do |s|
|
194
|
+
s.description = "#{name.to_s.upcase} Power Domain"
|
195
|
+
s.min = min
|
196
|
+
s.typ = nominal_voltage
|
197
|
+
s.max = max
|
198
|
+
s.unit = 'V'
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
167
202
|
def attrs_ok?
|
168
203
|
return_value = true
|
169
204
|
unless description.is_a? String
|
@@ -188,15 +223,20 @@ module Origen
|
|
188
223
|
elsif unit_voltage_range == :fixed
|
189
224
|
true
|
190
225
|
elsif unit_voltage_range.nil?
|
191
|
-
Origen.log.error("PPEKit: Missing voltage range for power domain '#{name}'!")
|
226
|
+
Origen.log.error("PPEKit: Missing unit voltage range for power domain '#{name}'!")
|
192
227
|
false
|
193
228
|
elsif unit_voltage_range.is_a? Range
|
194
|
-
|
195
|
-
|
196
|
-
else
|
197
|
-
Origen.log.error("PPEKit: Nominal voltage #{nominal_voltage} is not inbetween the voltage range #{unit_voltage_range} for power domain '#{name}'!")
|
229
|
+
unless unit_voltage_range.include?(nominal_voltage)
|
230
|
+
Origen.log.error("PPEKit: Nominal voltage #{nominal_voltage} is not inbetween the unit voltage range #{unit_voltage_range} for power domain '#{name}'!")
|
198
231
|
false
|
199
232
|
end
|
233
|
+
unless maximum_voltage_rating.nil?
|
234
|
+
unless unit_voltage_range.last <= maximum_voltage_rating
|
235
|
+
Origen.log.error('PPEKit: Unit voltage range exceeds the maximum voltage range!')
|
236
|
+
fail
|
237
|
+
end
|
238
|
+
end
|
239
|
+
true
|
200
240
|
else
|
201
241
|
Origen.log.error("Power domain attribute 'unit_voltage_range' must be a Range or set to the value of :fixed!")
|
202
242
|
return_value = false
|