rggen-default-register-map 0.24.0 → 0.25.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|