rggen-default-register-map 0.16.0 → 0.21.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/LICENSE +1 -1
- data/README.md +3 -3
- data/lib/rggen/default_register_map.rb +7 -4
- data/lib/rggen/default_register_map/bit_field/bit_assignment.rb +32 -10
- data/lib/rggen/default_register_map/bit_field/initial_value.rb +144 -26
- data/lib/rggen/default_register_map/bit_field/name.rb +10 -11
- data/lib/rggen/default_register_map/bit_field/reference.rb +53 -24
- data/lib/rggen/default_register_map/bit_field/type/{rw.rb → rw_w1.rb} +1 -1
- data/lib/rggen/default_register_map/bit_field/type/rwe_rwl.rb +17 -0
- data/lib/rggen/default_register_map/bit_field/type/{wo.rb → wo_wo1.rb} +1 -1
- data/lib/rggen/default_register_map/common/comment.rb +18 -0
- data/lib/rggen/default_register_map/register/name.rb +23 -8
- data/lib/rggen/default_register_map/register/offset_address.rb +53 -32
- data/lib/rggen/default_register_map/register/size.rb +7 -11
- data/lib/rggen/default_register_map/register/type.rb +2 -6
- data/lib/rggen/default_register_map/register/type/external.rb +11 -0
- data/lib/rggen/default_register_map/register/type/indirect.rb +27 -40
- data/lib/rggen/default_register_map/register_block/name.rb +4 -9
- data/lib/rggen/default_register_map/register_file/name.rb +53 -0
- data/lib/rggen/default_register_map/register_file/offset_address.rb +107 -0
- data/lib/rggen/default_register_map/register_file/size.rb +60 -0
- data/lib/rggen/default_register_map/setup.rb +10 -3
- data/lib/rggen/default_register_map/version.rb +1 -1
- metadata +11 -8
- data/lib/rggen/default_register_map/bit_field/comment.rb +0 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae013f1baa39fec2b34473f60af4a530444b1bf1124d97f19d266604cf7eb5ff
|
4
|
+
data.tar.gz: d3f9ee6009f22d81eab9157f2a3277e3f436aa2167054a2745af71f3e3a8790a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 49cb8841485f9d1dba72f4ee7b79af0551a91718079a9df6785b9490c0d9c9efddaacba22057421c818134ad0c6fd5383faf3ae69ccb4a4c5f0c3d4466d36ab7
|
7
|
+
data.tar.gz: 1a822488fdefcc6947e8e4a2578ed335b557615effa70e0f57f9b82a29626f0c2658d30e4073461cdd5b1e1d3969d953948f1e3fb66d7dd3b9ca710d5df09c60
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
[](https://badge.fury.io/rb/rggen-default-register-map)
|
2
|
-
[](https://github.com/rggen/rggen-default-register-map/actions?query=workflow%3ACI)
|
3
3
|
[](https://codeclimate.com/github/rggen/rggen-default-register-map/maintainability)
|
4
4
|
[](https://codecov.io/gh/rggen/rggen-default-register-map)
|
5
5
|
[](https://sonarcloud.io/dashboard?id=rggen_rggen-default-register-map)
|
6
6
|
[](https://gitter.im/rggen/rggen?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
|
7
7
|
|
8
8
|
|
9
|
-
#
|
9
|
+
# RgGen::DefaultRegisterMap
|
10
10
|
|
11
11
|
RgGen::DefaultRegisterMap provides following features.
|
12
12
|
|
@@ -38,7 +38,7 @@ Feedbacks, bug reports, questions and etc. are wellcome! You can post them by us
|
|
38
38
|
|
39
39
|
## Copyright & License
|
40
40
|
|
41
|
-
Copyright © 2019 Taichi Ishitani. RgGen::DefaultRegisterMap is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
|
41
|
+
Copyright © 2019-2020 Taichi Ishitani. RgGen::DefaultRegisterMap is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
|
42
42
|
|
43
43
|
## Code of Conduct
|
44
44
|
|
@@ -6,7 +6,6 @@ module RgGen
|
|
6
6
|
module DefaultRegisterMap
|
7
7
|
FEATURES = [
|
8
8
|
'default_register_map/bit_field/bit_assignment',
|
9
|
-
'default_register_map/bit_field/comment',
|
10
9
|
'default_register_map/bit_field/initial_value',
|
11
10
|
'default_register_map/bit_field/name',
|
12
11
|
'default_register_map/bit_field/reference',
|
@@ -16,14 +15,15 @@ module RgGen
|
|
16
15
|
'default_register_map/bit_field/type/ro',
|
17
16
|
'default_register_map/bit_field/type/rof',
|
18
17
|
'default_register_map/bit_field/type/rs',
|
19
|
-
'default_register_map/bit_field/type/
|
18
|
+
'default_register_map/bit_field/type/rw_w1',
|
20
19
|
'default_register_map/bit_field/type/rwc_rws',
|
21
20
|
'default_register_map/bit_field/type/rwe_rwl',
|
22
21
|
'default_register_map/bit_field/type/w0c_w1c',
|
23
22
|
'default_register_map/bit_field/type/w0crs_w1crs_w0src_w1src',
|
24
23
|
'default_register_map/bit_field/type/w0s_w1s',
|
25
24
|
'default_register_map/bit_field/type/w0trg_w1trg',
|
26
|
-
'default_register_map/bit_field/type/
|
25
|
+
'default_register_map/bit_field/type/wo_wo1',
|
26
|
+
'default_register_map/common/comment',
|
27
27
|
'default_register_map/global/address_width',
|
28
28
|
'default_register_map/global/bus_width',
|
29
29
|
'default_register_map/register/name',
|
@@ -33,7 +33,10 @@ module RgGen
|
|
33
33
|
'default_register_map/register/type/external',
|
34
34
|
'default_register_map/register/type/indirect',
|
35
35
|
'default_register_map/register_block/byte_size',
|
36
|
-
'default_register_map/register_block/name'
|
36
|
+
'default_register_map/register_block/name',
|
37
|
+
'default_register_map/register_file/name',
|
38
|
+
'default_register_map/register_file/offset_address',
|
39
|
+
'default_register_map/register_file/size'
|
37
40
|
].freeze
|
38
41
|
|
39
42
|
def self.load_features
|
@@ -19,13 +19,13 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
verify(:feature) do
|
22
|
-
error_condition { [@
|
22
|
+
error_condition { [@lsb_base, @width, @sequence_size, @step].none? }
|
23
23
|
message { 'no bit assignment is given' }
|
24
24
|
end
|
25
25
|
|
26
26
|
verify(:feature) do
|
27
|
-
error_condition {
|
28
|
-
message { '
|
27
|
+
error_condition { [@lsb_base, @width].none? }
|
28
|
+
message { 'neither lsb nor width is given' }
|
29
29
|
end
|
30
30
|
|
31
31
|
verify(:feature) do
|
@@ -61,7 +61,11 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
|
61
61
|
|
62
62
|
private
|
63
63
|
|
64
|
-
|
64
|
+
VARIABLE_NAMES = {
|
65
|
+
lsb: :@lsb_base, width: :@width, sequence_size: :@sequence_size, step: :@step
|
66
|
+
}.freeze
|
67
|
+
|
68
|
+
KEYS = VARIABLE_NAMES.keys.freeze
|
65
69
|
|
66
70
|
def preprocess(value)
|
67
71
|
if value.is_a?(Hash)
|
@@ -83,18 +87,38 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
|
83
87
|
|
84
88
|
def parse_value(input_value, key)
|
85
89
|
input_value.key?(key) &&
|
86
|
-
instance_variable_set(
|
90
|
+
instance_variable_set(VARIABLE_NAMES[key], Integer(input_value[key]))
|
87
91
|
rescue ArgumentError, TypeError
|
88
92
|
error "cannot convert #{input_value[key].inspect} into " \
|
89
93
|
"bit assignment(#{key.to_s.tr('_', ' ')})"
|
90
94
|
end
|
91
95
|
|
96
|
+
def lsb_base
|
97
|
+
@lsb_base ||=
|
98
|
+
((bit_field.component_index.zero? && 0) || calc_next_lsb(previous_bit_field))
|
99
|
+
end
|
100
|
+
|
101
|
+
def previous_bit_field
|
102
|
+
index = bit_field.component_index - 1
|
103
|
+
bit_fields[index]
|
104
|
+
end
|
105
|
+
|
106
|
+
def calc_next_lsb(bit_field)
|
107
|
+
compact_sequential_bit_field?(bit_field) &&
|
108
|
+
(bit_field.lsb + bit_field.width * bit_field.sequence_size) ||
|
109
|
+
(bit_field.lsb + bit_field.width)
|
110
|
+
end
|
111
|
+
|
112
|
+
def compact_sequential_bit_field?(bit_field)
|
113
|
+
bit_field.sequential? && (bit_field.step == bit_field.width)
|
114
|
+
end
|
115
|
+
|
92
116
|
def lsb_bit(index = 0)
|
93
|
-
lsb_msb_bit(index,
|
117
|
+
lsb_msb_bit(index, lsb_base)
|
94
118
|
end
|
95
119
|
|
96
120
|
def msb_bit(index = 0)
|
97
|
-
lsb_msb_bit(index,
|
121
|
+
lsb_msb_bit(index, lsb_base + width - 1)
|
98
122
|
end
|
99
123
|
|
100
124
|
def lsb_msb_bit(index, base)
|
@@ -114,9 +138,7 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
|
114
138
|
end
|
115
139
|
|
116
140
|
def overlap?
|
117
|
-
|
118
|
-
.bit_fields
|
119
|
-
.any? { |bit_field| (bit_field.bit_map & bit_map).nonzero? }
|
141
|
+
bit_fields.any? { |bit_field| (bit_field.bit_map & bit_map).nonzero? }
|
120
142
|
end
|
121
143
|
end
|
122
144
|
end
|
@@ -2,16 +2,35 @@
|
|
2
2
|
|
3
3
|
RgGen.define_simple_feature(:bit_field, :initial_value) do
|
4
4
|
register_map do
|
5
|
-
property :initial_value
|
6
|
-
property :
|
5
|
+
property :initial_value
|
6
|
+
property :initial_values
|
7
|
+
property :initial_value?, forward_to: :initial_value_set?
|
8
|
+
property :fixed_initial_value?, forward_to: :fixed?
|
9
|
+
property :initial_value_array?, forward_to: :array?
|
10
|
+
|
11
|
+
input_pattern [{ parameterized: /default:(#{integer})/,
|
12
|
+
array: /#{integer}(?:[,\n]#{integer})+/ }]
|
7
13
|
|
8
14
|
build do |value|
|
9
|
-
@
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
15
|
+
@input_format =
|
16
|
+
if value.is_a?(Hash) || match_index == :parameterized
|
17
|
+
:parameterized
|
18
|
+
elsif value.is_a?(Array) || match_index == :array
|
19
|
+
:array
|
20
|
+
else
|
21
|
+
:single
|
14
22
|
end
|
23
|
+
@initial_value, @initial_values = parse_initial_value(value)
|
24
|
+
end
|
25
|
+
|
26
|
+
define_helpers do
|
27
|
+
def verify_initial_value(&block)
|
28
|
+
initial_value_verifiers << create_verifier(&block)
|
29
|
+
end
|
30
|
+
|
31
|
+
def initial_value_verifiers
|
32
|
+
@initial_value_verifiers ||= []
|
33
|
+
end
|
15
34
|
end
|
16
35
|
|
17
36
|
verify(:component) do
|
@@ -20,40 +39,130 @@ RgGen.define_simple_feature(:bit_field, :initial_value) do
|
|
20
39
|
end
|
21
40
|
|
22
41
|
verify(:component) do
|
23
|
-
error_condition
|
42
|
+
error_condition do
|
43
|
+
@input_format == :array && !bit_field.sequential?
|
44
|
+
end
|
24
45
|
message do
|
25
|
-
'
|
26
|
-
"initial value #{initial_value} " \
|
27
|
-
"minimum initial value #{min_initial_value}"
|
46
|
+
'arrayed initial value is not allowed for non sequential bit field'
|
28
47
|
end
|
29
48
|
end
|
30
49
|
|
31
50
|
verify(:component) do
|
32
|
-
error_condition
|
33
|
-
|
34
|
-
'input initial value is greater than maximum initial value: ' \
|
35
|
-
"initial value #{initial_value} " \
|
36
|
-
"maximum initial value #{max_initial_value}"
|
51
|
+
error_condition do
|
52
|
+
@input_format == :array && initial_values.size > bit_field.sequence_size
|
37
53
|
end
|
54
|
+
message { 'too many initial values are given' }
|
38
55
|
end
|
39
56
|
|
40
57
|
verify(:component) do
|
41
|
-
error_condition
|
42
|
-
|
43
|
-
|
58
|
+
error_condition do
|
59
|
+
@input_format == :array && initial_values.size < bit_field.sequence_size
|
60
|
+
end
|
61
|
+
message { 'few initial values are given' }
|
62
|
+
end
|
63
|
+
|
64
|
+
verify(:component) do
|
65
|
+
check_error do
|
66
|
+
Array(initial_value || initial_values)
|
67
|
+
.each(&method(:verify_initial_value))
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
verify_initial_value do
|
72
|
+
error_condition { |value| value < min_initial_value }
|
73
|
+
message do |value|
|
74
|
+
'input initial value is less than minimum initial value: ' \
|
75
|
+
"initial value #{value} minimum initial value #{min_initial_value}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
verify_initial_value do
|
80
|
+
error_condition { |value| value > max_initial_value }
|
81
|
+
message do |value|
|
82
|
+
'input initial value is greater than maximum initial value: ' \
|
83
|
+
"initial value #{value} maximum initial value #{max_initial_value}"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
verify_initial_value do
|
88
|
+
error_condition { |value| !match_valid_condition?(value) }
|
89
|
+
message do |value|
|
90
|
+
"does not match the valid initial value condition: #{value}"
|
44
91
|
end
|
45
92
|
end
|
46
93
|
|
47
94
|
printable(:initial_value) do
|
48
|
-
@
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
95
|
+
if @input_format == :parameterized
|
96
|
+
"default: #{format_value(initial_value)}"
|
97
|
+
elsif @input_format == :array
|
98
|
+
initial_values.map(&method(:format_value))
|
99
|
+
elsif initial_value?
|
100
|
+
format_value(initial_value)
|
101
|
+
end
|
53
102
|
end
|
54
103
|
|
55
104
|
private
|
56
105
|
|
106
|
+
def initial_value_format
|
107
|
+
@initial_value_format ||=
|
108
|
+
if @input_format == :parameterized
|
109
|
+
bit_field.sequential? && :array || :single
|
110
|
+
else
|
111
|
+
@input_format
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def array?
|
116
|
+
initial_value_format == :array
|
117
|
+
end
|
118
|
+
|
119
|
+
def fixed?
|
120
|
+
[:array, :single].include?(@input_format)
|
121
|
+
end
|
122
|
+
|
123
|
+
def parse_initial_value(input_value)
|
124
|
+
if @input_format == :parameterized
|
125
|
+
[parse_parameterized_initial_value(input_value), nil]
|
126
|
+
elsif @input_format == :array
|
127
|
+
[nil, parse_arrayed_initial_value(input_value)]
|
128
|
+
else
|
129
|
+
[parse_value(input_value), nil]
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def parse_parameterized_initial_value(input_value)
|
134
|
+
value =
|
135
|
+
if pattern_matched?
|
136
|
+
match_data.captures.first
|
137
|
+
else
|
138
|
+
input_value
|
139
|
+
.fetch(:default) { error 'no default value is given' }
|
140
|
+
end
|
141
|
+
parse_value(value)
|
142
|
+
end
|
143
|
+
|
144
|
+
def parse_arrayed_initial_value(input_value)
|
145
|
+
values =
|
146
|
+
if pattern_matched?
|
147
|
+
input_value.split(/[,\n]/)
|
148
|
+
else
|
149
|
+
input_value
|
150
|
+
end
|
151
|
+
values.map(&method(:parse_value))
|
152
|
+
end
|
153
|
+
|
154
|
+
def parse_value(value)
|
155
|
+
Integer(value)
|
156
|
+
rescue ArgumentError, TypeError
|
157
|
+
error "cannot convert #{value.inspect} into initial value"
|
158
|
+
end
|
159
|
+
|
160
|
+
def verify_initial_value(value)
|
161
|
+
helper.initial_value_verifiers.each do |verifier|
|
162
|
+
verifier.verify(self, value)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
57
166
|
def settings
|
58
167
|
@settings ||=
|
59
168
|
(bit_field.settings && bit_field.settings[:initial_value]) || {}
|
@@ -67,9 +176,18 @@ RgGen.define_simple_feature(:bit_field, :initial_value) do
|
|
67
176
|
2**bit_field.width - 1
|
68
177
|
end
|
69
178
|
|
70
|
-
def match_valid_condition?
|
179
|
+
def match_valid_condition?(value)
|
71
180
|
!settings.key?(:valid_condition) ||
|
72
|
-
instance_exec(
|
181
|
+
instance_exec(value, &settings[:valid_condition])
|
182
|
+
end
|
183
|
+
|
184
|
+
def initial_value_set?
|
185
|
+
[@initial_value, @initial_values].any?
|
186
|
+
end
|
187
|
+
|
188
|
+
def format_value(value)
|
189
|
+
print_width = (bit_field.width + 3) / 4
|
190
|
+
format('0x%0*x', print_width, value)
|
73
191
|
end
|
74
192
|
end
|
75
193
|
end
|
@@ -2,19 +2,15 @@
|
|
2
2
|
|
3
3
|
RgGen.define_simple_feature(:bit_field, :name) do
|
4
4
|
register_map do
|
5
|
-
property :name,
|
5
|
+
property :name, default: -> { register.name }
|
6
6
|
property :full_name, forward_to: :get_full_name
|
7
7
|
|
8
8
|
input_pattern variable_name
|
9
9
|
|
10
10
|
build do |value|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
else
|
15
|
-
error "illegal input value for bit field name: #{value.inspect}"
|
16
|
-
end
|
17
|
-
@full_name = [register.name, @name]
|
11
|
+
pattern_matched? ||
|
12
|
+
(error "illegal input value for bit field name: #{value.inspect}")
|
13
|
+
@name = match_data.to_s
|
18
14
|
end
|
19
15
|
|
20
16
|
verify(:feature) do
|
@@ -22,16 +18,19 @@ RgGen.define_simple_feature(:bit_field, :name) do
|
|
22
18
|
message { "duplicated bit field name: #{name}" }
|
23
19
|
end
|
24
20
|
|
25
|
-
printable
|
21
|
+
printable(:name) do
|
22
|
+
RgGen::Core::Utility::CodeUtility
|
23
|
+
.array_name(name, Array(bit_field.sequence_size))
|
24
|
+
end
|
26
25
|
|
27
26
|
private
|
28
27
|
|
29
28
|
def get_full_name(separator = '.')
|
30
|
-
|
29
|
+
[register.full_name(separator), *@name].join(separator)
|
31
30
|
end
|
32
31
|
|
33
32
|
def duplicated_name?
|
34
|
-
|
33
|
+
bit_fields.any? { |bit_field| bit_field.name == name }
|
35
34
|
end
|
36
35
|
end
|
37
36
|
end
|
@@ -7,18 +7,12 @@ RgGen.define_simple_feature(:bit_field, :reference) do
|
|
7
7
|
property :reference_width, forward_to: :required_width
|
8
8
|
property :find_reference, forward_to: :find_reference_bit_field
|
9
9
|
|
10
|
-
input_pattern
|
11
|
-
/(#{variable_name})\.(#{variable_name})/,
|
12
|
-
/(#{variable_name})/
|
13
|
-
]
|
10
|
+
input_pattern /(#{variable_name}(?:\.#{variable_name})*)/
|
14
11
|
|
15
12
|
build do |value|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
else
|
20
|
-
error "illegal input value for reference: #{value.inspect}"
|
21
|
-
end
|
13
|
+
pattern_matched? ||
|
14
|
+
(error "illegal input value for reference: #{value.inspect}")
|
15
|
+
@input_reference = match_data.to_s
|
22
16
|
end
|
23
17
|
|
24
18
|
verify(:component) do
|
@@ -38,20 +32,46 @@ RgGen.define_simple_feature(:bit_field, :reference) do
|
|
38
32
|
|
39
33
|
verify(:all) do
|
40
34
|
error_condition do
|
41
|
-
reference? &&
|
35
|
+
reference? && within_array?(reference_bit_field) &&
|
36
|
+
(bit_field.depth != reference_bit_field.depth)
|
42
37
|
end
|
43
38
|
message do
|
44
|
-
'
|
45
|
-
"
|
39
|
+
'depth of layer is not matched: ' \
|
40
|
+
"own #{bit_field.depth} " \
|
41
|
+
"reference #{reference_bit_field.depth}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
define_helpers do
|
46
|
+
def verify_array(&block)
|
47
|
+
array_verifiers << create_verifier(&block)
|
48
|
+
end
|
49
|
+
|
50
|
+
def array_verifiers
|
51
|
+
@array_verifiers ||= []
|
46
52
|
end
|
47
53
|
end
|
48
54
|
|
49
55
|
verify(:all) do
|
50
|
-
|
51
|
-
|
56
|
+
check_error do
|
57
|
+
reference? && within_array?(reference_bit_field) &&
|
58
|
+
helper.array_verifiers.each(&method(:verify_array))
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
verify_array do
|
63
|
+
error_condition { |own, ref| !own.array? && ref.array? }
|
64
|
+
message do |*_, layer|
|
65
|
+
"bit field within array #{layer.to_s.tr('_', ' ')} is not allowed for " \
|
66
|
+
"reference bit field: #{@input_reference}"
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
verify_array do
|
71
|
+
error_condition { |own, ref| unmatch_array_size?(own, ref) }
|
72
|
+
message do |own, ref|
|
52
73
|
'array size is not matched: ' \
|
53
|
-
"own #{
|
54
|
-
"reference #{reference_bit_field.register.array_size}"
|
74
|
+
"own #{own.array_size} reference #{ref.array_size}"
|
55
75
|
end
|
56
76
|
end
|
57
77
|
|
@@ -66,7 +86,7 @@ RgGen.define_simple_feature(:bit_field, :reference) do
|
|
66
86
|
end
|
67
87
|
|
68
88
|
verify(:all) do
|
69
|
-
error_condition { reference? &&
|
89
|
+
error_condition { reference? && unmatch_sequence_size? }
|
70
90
|
message do
|
71
91
|
'sequence size is not matched: ' \
|
72
92
|
"own #{bit_field.sequence_size} " \
|
@@ -125,14 +145,23 @@ RgGen.define_simple_feature(:bit_field, :reference) do
|
|
125
145
|
find_reference_bit_field(register_block.bit_fields)
|
126
146
|
end
|
127
147
|
|
128
|
-
def
|
129
|
-
|
130
|
-
|
148
|
+
def within_array?(bit_field)
|
149
|
+
bit_field.register_files.any?(&:array?) || bit_field.register.array?
|
150
|
+
end
|
151
|
+
|
152
|
+
def verify_array(verifier)
|
153
|
+
[*register_files, register]
|
154
|
+
.zip([*reference_bit_field.register_files, reference_bit_field.register])
|
155
|
+
.each { |own, ref| verifier.verify(self, own, ref, own.layer) }
|
156
|
+
end
|
157
|
+
|
158
|
+
def unmatch_array_size?(own, ref)
|
159
|
+
own.array? && ref.array? && own.array_size != ref.array_size
|
131
160
|
end
|
132
161
|
|
133
|
-
def
|
134
|
-
|
135
|
-
bit_field.sequence_size
|
162
|
+
def unmatch_sequence_size?
|
163
|
+
bit_field.sequential? && reference_bit_field.sequential? &&
|
164
|
+
(bit_field.sequence_size != reference_bit_field.sequence_size)
|
136
165
|
end
|
137
166
|
|
138
167
|
def required_width
|