rggen-default-register-map 0.24.0 → 0.25.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/lib/rggen/default_register_map.rb +1 -0
- data/lib/rggen/default_register_map/bit_field/bit_assignment.rb +31 -9
- data/lib/rggen/default_register_map/bit_field/type.rb +5 -0
- data/lib/rggen/default_register_map/global/address_width.rb +3 -6
- data/lib/rggen/default_register_map/global/bus_width.rb +3 -6
- data/lib/rggen/default_register_map/register/offset_address.rb +16 -14
- data/lib/rggen/default_register_map/register/type.rb +9 -13
- data/lib/rggen/default_register_map/register/type/reserved.rb +10 -0
- data/lib/rggen/default_register_map/register_block/byte_size.rb +3 -6
- data/lib/rggen/default_register_map/register_file/offset_address.rb +3 -6
- data/lib/rggen/default_register_map/setup.rb +1 -1
- data/lib/rggen/default_register_map/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a0b6e48b3b6da6739cbe958694f2a1cf45f22532b41fcc47f7d1eb6cc10869e
|
4
|
+
data.tar.gz: 3eaf3ebd9bd36133bd024cf65858fee3349322c65a43071bfd8b0dd390e4b067
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e76010e8a516197774b91c23a738c4c7b510e351d083a4bdb9c4b2e6455037e801f451ffdfc2bb58f45a23cb3904ddd25995f8c2eddb40da4e1dde396c82f208
|
7
|
+
data.tar.gz: 33edbad2da7140c757901aa8bebdae1b17fbe81209e51864fde2ef7be7d41d8fd971ad7e861fa60075eeb27ab76a97347d6080e387811343fc72713e8932a17c
|
@@ -39,6 +39,7 @@ module RgGen
|
|
39
39
|
'default_register_map/register/type',
|
40
40
|
'default_register_map/register/type/external',
|
41
41
|
'default_register_map/register/type/indirect',
|
42
|
+
'default_register_map/register/type/reserved',
|
42
43
|
'default_register_map/register_block/byte_size',
|
43
44
|
'default_register_map/register_block/name',
|
44
45
|
'default_register_map/register_file/name',
|
@@ -1,6 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
4
|
+
configuration do
|
5
|
+
property :bit_assignment, default: :width_first
|
6
|
+
|
7
|
+
input_pattern [width_first: /width_first/i, lsb_first: /lsb_first/i]
|
8
|
+
ignore_empty_value false
|
9
|
+
|
10
|
+
build do |value|
|
11
|
+
pattern_matched? ||
|
12
|
+
(error "illegal input value for bit assignment: #{value.inspect}")
|
13
|
+
@bit_assignment = match_index
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
4
17
|
register_map do
|
5
18
|
property :lsb, forward_to: :lsb_bit
|
6
19
|
property :msb, forward_to: :msb_bit
|
@@ -15,7 +28,9 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
|
15
28
|
|
16
29
|
build do |value|
|
17
30
|
input_value = preprocess(value)
|
18
|
-
helper.
|
31
|
+
helper.variable_names.each do |key, variable_name|
|
32
|
+
parse_value(input_value, key, variable_name)
|
33
|
+
end
|
19
34
|
end
|
20
35
|
|
21
36
|
verify(:feature) do
|
@@ -64,13 +79,9 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
|
64
79
|
define_helpers do
|
65
80
|
def variable_names
|
66
81
|
@variable_names ||= {
|
67
|
-
|
82
|
+
width: :@width, lsb: :@lsb_base, sequence_size: :@sequence_size, step: :@step
|
68
83
|
}.freeze
|
69
84
|
end
|
70
|
-
|
71
|
-
def variable_keys
|
72
|
-
@variable_keys ||= variable_names.keys
|
73
|
-
end
|
74
85
|
end
|
75
86
|
|
76
87
|
def preprocess(value)
|
@@ -87,13 +98,24 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
|
87
98
|
match_data
|
88
99
|
.to_s
|
89
100
|
.split(':')
|
90
|
-
.map.with_index { |value, i| [
|
101
|
+
.map.with_index { |value, i| [variable_key(i), value] }
|
91
102
|
.to_h
|
92
103
|
end
|
93
104
|
|
94
|
-
def
|
105
|
+
def variable_key(index)
|
106
|
+
@keys ||=
|
107
|
+
if configuration.bit_assignment == :width_first
|
108
|
+
helper.variable_names.keys
|
109
|
+
else
|
110
|
+
keys = helper.variable_names.keys
|
111
|
+
[keys[1], keys[0], *keys[2..-1]]
|
112
|
+
end
|
113
|
+
@keys[index]
|
114
|
+
end
|
115
|
+
|
116
|
+
def parse_value(input_value, key, variable_name)
|
95
117
|
input_value.key?(key) &&
|
96
|
-
instance_variable_set(
|
118
|
+
instance_variable_set(variable_name, Integer(input_value[key]))
|
97
119
|
rescue ArgumentError, TypeError
|
98
120
|
error "cannot convert #{input_value[key].inspect} into " \
|
99
121
|
"bit assignment(#{key.to_s.tr('_', ' ')})"
|
@@ -5,12 +5,9 @@ RgGen.define_simple_feature(:global, :address_width) do
|
|
5
5
|
property :address_width, default: 32
|
6
6
|
|
7
7
|
build do |value|
|
8
|
-
@address_width =
|
9
|
-
|
10
|
-
|
11
|
-
rescue ArgumentError, TypeError
|
12
|
-
error "cannot convert #{value.inspect} into address width"
|
13
|
-
end
|
8
|
+
@address_width = Integer(value)
|
9
|
+
rescue ArgumentError, TypeError
|
10
|
+
error "cannot convert #{value.inspect} into address width"
|
14
11
|
end
|
15
12
|
|
16
13
|
verify(:component) do
|
@@ -6,12 +6,9 @@ RgGen.define_simple_feature(:global, :bus_width) do
|
|
6
6
|
property :byte_width, initial: -> { bus_width / 8 }
|
7
7
|
|
8
8
|
build do |value|
|
9
|
-
@bus_width =
|
10
|
-
|
11
|
-
|
12
|
-
rescue ArgumentError, TypeError
|
13
|
-
error "cannot convert #{value.inspect} into bus width"
|
14
|
-
end
|
9
|
+
@bus_width = Integer(value)
|
10
|
+
rescue ArgumentError, TypeError
|
11
|
+
error "cannot convert #{value.inspect} into bus width"
|
15
12
|
end
|
16
13
|
|
17
14
|
verify(:feature) do
|
@@ -5,15 +5,12 @@ RgGen.define_simple_feature(:register, :offset_address) do
|
|
5
5
|
property :offset_address, initial: -> { default_offset_address }
|
6
6
|
property :expanded_offset_addresses, forward_to: :expand_addresses
|
7
7
|
property :address_range, initial: -> { start_address..end_address }
|
8
|
-
property :overlap?,
|
8
|
+
property :overlap?, body: ->(other) { overlap_address_range?(other, false) }
|
9
9
|
|
10
10
|
build do |value|
|
11
|
-
@offset_address =
|
12
|
-
|
13
|
-
|
14
|
-
rescue ArgumentError, TypeError
|
15
|
-
error "cannot convert #{value.inspect} into offset address"
|
16
|
-
end
|
11
|
+
@offset_address = Integer(value)
|
12
|
+
rescue ArgumentError, TypeError
|
13
|
+
error "cannot convert #{value.inspect} into offset address"
|
17
14
|
end
|
18
15
|
|
19
16
|
verify(:feature) do
|
@@ -44,7 +41,7 @@ RgGen.define_simple_feature(:register, :offset_address) do
|
|
44
41
|
verify(:component) do
|
45
42
|
error_condition do
|
46
43
|
files_and_registers.any? do |other|
|
47
|
-
overlap_address_range?(other
|
44
|
+
overlap_address_range?(other, true)
|
48
45
|
end
|
49
46
|
end
|
50
47
|
message do
|
@@ -96,8 +93,9 @@ RgGen.define_simple_feature(:register, :offset_address) do
|
|
96
93
|
configuration.byte_width
|
97
94
|
end
|
98
95
|
|
99
|
-
def overlap_address_range?(other)
|
100
|
-
overlap_range?(other) &&
|
96
|
+
def overlap_address_range?(other, sharable)
|
97
|
+
overlap_range?(other) &&
|
98
|
+
(exclusive_range?(other) || competitive_access?(other, sharable))
|
101
99
|
end
|
102
100
|
|
103
101
|
def overlap_range?(other)
|
@@ -106,13 +104,17 @@ RgGen.define_simple_feature(:register, :offset_address) do
|
|
106
104
|
self_range.include?(othre_range.first) || othre_range.include?(self_range.first)
|
107
105
|
end
|
108
106
|
|
109
|
-
def
|
110
|
-
other.register_file? ||
|
107
|
+
def exclusive_range?(other)
|
108
|
+
other.register_file? || other.reserved? || register.reserved?
|
109
|
+
end
|
110
|
+
|
111
|
+
def competitive_access?(other, sharable)
|
112
|
+
!sharable_range?(other, sharable) &&
|
111
113
|
[:writable?, :readable?].any? { |access| [register, other].all?(&access) }
|
112
114
|
end
|
113
115
|
|
114
|
-
def
|
115
|
-
|
116
|
+
def sharable_range?(other, sharable)
|
117
|
+
sharable && shared_address? && register.match_type?(other)
|
116
118
|
end
|
117
119
|
|
118
120
|
def shared_address?
|
@@ -40,6 +40,7 @@ RgGen.define_list_feature(:register, :type) do
|
|
40
40
|
property :match_type?, body: ->(register) { register.type == type }
|
41
41
|
property :writable?, initial: -> { writability }
|
42
42
|
property :readable?, initial: -> { readability }
|
43
|
+
property :reserved?, initial: -> { !(writable? || readable?) }
|
43
44
|
property :settings, forward_to_helper: true
|
44
45
|
|
45
46
|
build do |value|
|
@@ -48,6 +49,10 @@ RgGen.define_list_feature(:register, :type) do
|
|
48
49
|
helper.need_bit_fields? || register.need_no_children
|
49
50
|
end
|
50
51
|
|
52
|
+
post_build do
|
53
|
+
reserved? && register.document_only
|
54
|
+
end
|
55
|
+
|
51
56
|
verify(:component) do
|
52
57
|
error_condition do
|
53
58
|
helper.need_bit_fields? && register.bit_fields.empty?
|
@@ -62,22 +67,13 @@ RgGen.define_list_feature(:register, :type) do
|
|
62
67
|
attr_reader :options
|
63
68
|
|
64
69
|
def writability
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
def default_writability
|
69
|
-
-> { register.bit_fields.any?(&:writable?) }
|
70
|
+
block = helper.writability || -> { register.bit_fields.any?(&:writable?) }
|
71
|
+
instance_exec(&block)
|
70
72
|
end
|
71
73
|
|
72
74
|
def readability
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
def default_readability
|
77
|
-
lambda do
|
78
|
-
block = ->(bit_field) { bit_field.readable? || bit_field.reserved? }
|
79
|
-
register.bit_fields.any?(&block)
|
80
|
-
end
|
75
|
+
block = helper.readability || -> { register.bit_fields.any?(&:readable?) }
|
76
|
+
instance_exec(&block)
|
81
77
|
end
|
82
78
|
end
|
83
79
|
|
@@ -6,13 +6,10 @@ RgGen.define_simple_feature(:register_block, :byte_size) do
|
|
6
6
|
property :local_address_width
|
7
7
|
|
8
8
|
build do |value|
|
9
|
-
@byte_size =
|
10
|
-
begin
|
11
|
-
Integer(value)
|
12
|
-
rescue ArgumentError, TypeError
|
13
|
-
error "cannot convert #{value.inspect} into byte size"
|
14
|
-
end
|
9
|
+
@byte_size = Integer(value)
|
15
10
|
@local_address_width = (@byte_size - 1).bit_length
|
11
|
+
rescue ArgumentError, TypeError
|
12
|
+
error "cannot convert #{value.inspect} into byte size"
|
16
13
|
end
|
17
14
|
|
18
15
|
verify(:feature) do
|
@@ -7,12 +7,9 @@ RgGen.define_simple_feature(:register_file, :offset_address) do
|
|
7
7
|
property :address_range, initial: -> { start_address..end_address }
|
8
8
|
|
9
9
|
build do |value|
|
10
|
-
@offset_address =
|
11
|
-
|
12
|
-
|
13
|
-
rescue ArgumentError, TypeError
|
14
|
-
error "cannot convert #{value.inspect} into offset address"
|
15
|
-
end
|
10
|
+
@offset_address = Integer(value)
|
11
|
+
rescue ArgumentError, TypeError
|
12
|
+
error "cannot convert #{value.inspect} into offset address"
|
16
13
|
end
|
17
14
|
|
18
15
|
verify(:feature) do
|
@@ -13,7 +13,7 @@ RgGen.register_plugin RgGen::DefaultRegisterMap do |builder|
|
|
13
13
|
builder.enable :register, [
|
14
14
|
:name, :offset_address, :size, :type, :comment
|
15
15
|
]
|
16
|
-
builder.enable :register, :type, [:external, :indirect]
|
16
|
+
builder.enable :register, :type, [:external, :indirect, :reserved]
|
17
17
|
builder.enable :bit_field, [
|
18
18
|
:name, :bit_assignment, :type, :initial_value, :reference, :comment
|
19
19
|
]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rggen-default-register-map
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.25.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taichi Ishitani
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-02-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,7 @@ files:
|
|
66
66
|
- lib/rggen/default_register_map/register/type.rb
|
67
67
|
- lib/rggen/default_register_map/register/type/external.rb
|
68
68
|
- lib/rggen/default_register_map/register/type/indirect.rb
|
69
|
+
- lib/rggen/default_register_map/register/type/reserved.rb
|
69
70
|
- lib/rggen/default_register_map/register_block/byte_size.rb
|
70
71
|
- lib/rggen/default_register_map/register_block/name.rb
|
71
72
|
- lib/rggen/default_register_map/register_file/name.rb
|
@@ -89,7 +90,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
89
90
|
requirements:
|
90
91
|
- - ">="
|
91
92
|
- !ruby/object:Gem::Version
|
92
|
-
version: '2.
|
93
|
+
version: '2.5'
|
93
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
95
|
requirements:
|
95
96
|
- - ">="
|
@@ -99,5 +100,5 @@ requirements: []
|
|
99
100
|
rubygems_version: 3.2.3
|
100
101
|
signing_key:
|
101
102
|
specification_version: 4
|
102
|
-
summary: rggen-default-register-map-0.
|
103
|
+
summary: rggen-default-register-map-0.25.0
|
103
104
|
test_files: []
|