rggen-default-register-map 0.28.0 → 0.29.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 +1 -1
- data/lib/rggen/default_register_map/bit_field/bit_assignment.rb +10 -2
- data/lib/rggen/default_register_map/bit_field/labels.rb +124 -0
- data/lib/rggen/default_register_map/bit_field/type.rb +1 -1
- data/lib/rggen/default_register_map/register/offset_address.rb +2 -3
- data/lib/rggen/default_register_map/register/size.rb +32 -10
- data/lib/rggen/default_register_map/register/type.rb +1 -1
- data/lib/rggen/default_register_map/version.rb +1 -1
- data/lib/rggen/default_register_map.rb +1 -0
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a715cb1298469ed180728f9252c8a82bc879a156b427f08b7f5f0ead4881a79d
|
4
|
+
data.tar.gz: eebb8fdf95cc6727a48145089812049540b3bd900c78a91e9dd55d8844a9e9a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b4b816a40f826f0545c84040ed25d33b808de5dacbba83ccd75fe813183b8789767c7ea450f846ac780256850e7c20ef4780a23d5d37b28489e3e0003a544452
|
7
|
+
data.tar.gz: b9a9949aea2259f9cb66f4d9bb123a92ff9e6dc9513ea8b9074e72f3121ddb6f260128cc9612fda20595694f6cc12fc77c0ccfa513f8e439f22b2e8099ddd3ed
|
data/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c) 2019-
|
3
|
+
Copyright (c) 2019-2023 Taichi Ishitani
|
4
4
|
|
5
5
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
6
|
of this software and associated documentation files (the "Software"), to deal
|
data/README.md
CHANGED
@@ -39,7 +39,7 @@ Feedbacks, bug reports, questions and etc. are wellcome! You can post them by us
|
|
39
39
|
|
40
40
|
## Copyright & License
|
41
41
|
|
42
|
-
Copyright © 2019-
|
42
|
+
Copyright © 2019-2023 Taichi Ishitani. RgGen::DefaultRegisterMap is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
|
43
43
|
|
44
44
|
## Code of Conduct
|
45
45
|
|
@@ -23,7 +23,7 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
|
23
23
|
property :sequential?, body: -> { !@sequence_size.nil? }
|
24
24
|
property :bit_map, initial: -> { calc_bit_map }
|
25
25
|
|
26
|
-
input_pattern /#{integer}(?::#{integer})
|
26
|
+
input_pattern /#{integer}(?::#{integer})*/,
|
27
27
|
match_automatically: false
|
28
28
|
|
29
29
|
build do |value|
|
@@ -87,13 +87,21 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
|
87
87
|
def preprocess(value)
|
88
88
|
if hash?(value)
|
89
89
|
value
|
90
|
-
elsif
|
90
|
+
elsif match_bit_assignment?(value)
|
91
91
|
split_match_data(match_data)
|
92
92
|
else
|
93
93
|
error "illegal input value for bit assignment: #{value.inspect}"
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
+
# workaround for ruby 3.2 bug
|
98
|
+
# see:
|
99
|
+
# * https://bugs.ruby-lang.org/issues/19273
|
100
|
+
# * https://github.com/rggen/rggen/issues/129#issuecomment-1366666885
|
101
|
+
def match_bit_assignment?(value)
|
102
|
+
match_pattern(value) && value.count(':') <= 3
|
103
|
+
end
|
104
|
+
|
97
105
|
def split_match_data(match_data)
|
98
106
|
match_data
|
99
107
|
.to_s
|
@@ -0,0 +1,124 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_feature(:bit_field, :labels) do
|
4
|
+
register_map do
|
5
|
+
feature do
|
6
|
+
property :labels, initial: -> { [] }
|
7
|
+
|
8
|
+
input_pattern variable_name, match_automatically: false
|
9
|
+
|
10
|
+
define_struct :label_entry, [:name, :value, :comment] do
|
11
|
+
def to_s
|
12
|
+
to_h
|
13
|
+
.compact
|
14
|
+
.map { |k, v| "#{k}: #{v}" }
|
15
|
+
.join(' ')
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
build do |values|
|
20
|
+
values.each { |label| labels << parse_label(label) }
|
21
|
+
end
|
22
|
+
|
23
|
+
define_helpers do
|
24
|
+
def verify_label_value(&body)
|
25
|
+
label_value_verifiers << create_verifier(&body)
|
26
|
+
end
|
27
|
+
|
28
|
+
def label_value_verifiers
|
29
|
+
@label_value_verifiers ||= []
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
verify(:component) do
|
34
|
+
check_error do
|
35
|
+
labels.each do |label|
|
36
|
+
helper.label_value_verifiers.each do |verifier|
|
37
|
+
verifier.verify(self, label.value)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
verify_label_value do
|
44
|
+
error_condition { |value| value < min_label_value }
|
45
|
+
message do |value|
|
46
|
+
'input label value is less than minimum label value: ' \
|
47
|
+
"label value #{value} minimum label value #{min_label_value}"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
verify_label_value do
|
52
|
+
error_condition { |value| value > max_label_value }
|
53
|
+
message do |value|
|
54
|
+
'input label value is greater than maximum label value: ' \
|
55
|
+
"label value #{value} maximum label value #{max_label_value}"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
printable :labels
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def parse_label(label)
|
64
|
+
label_values = [
|
65
|
+
parse_name(label), parse_value(label), fetch_label(label, :comment)
|
66
|
+
]
|
67
|
+
label_entry.new(*label_values)
|
68
|
+
end
|
69
|
+
|
70
|
+
def parse_name(label)
|
71
|
+
label_value = fetch_label(label, :name) { error 'no label name is given' }
|
72
|
+
name = match_name(label_value)
|
73
|
+
unique_name?(name) && name ||
|
74
|
+
(error "duplicated label name: #{name}", label_value)
|
75
|
+
end
|
76
|
+
|
77
|
+
def match_name(name)
|
78
|
+
match_data, = match_pattern(name)
|
79
|
+
match_data&.to_s ||
|
80
|
+
(error "illegal input value for label name: #{name.inspect}", name)
|
81
|
+
end
|
82
|
+
|
83
|
+
def unique_name?(name)
|
84
|
+
labels.none? { |label| label.name == name }
|
85
|
+
end
|
86
|
+
|
87
|
+
def parse_value(label)
|
88
|
+
label_value = fetch_label(label, :value) { error 'no label value is given' }
|
89
|
+
value = convert_label_value(label_value)
|
90
|
+
unique_value?(value) && value ||
|
91
|
+
(error "duplicated label value: #{value}", label_value)
|
92
|
+
end
|
93
|
+
|
94
|
+
def convert_label_value(value)
|
95
|
+
Integer(value)
|
96
|
+
rescue ArgumentError, TypeError
|
97
|
+
error "cannot convert #{value.inspect} into label value", value
|
98
|
+
end
|
99
|
+
|
100
|
+
def unique_value?(value)
|
101
|
+
labels.none? { |label| label.value == value }
|
102
|
+
end
|
103
|
+
|
104
|
+
def fetch_label(label, key, &ifnone)
|
105
|
+
match_key =
|
106
|
+
[key.to_sym, key.to_s]
|
107
|
+
.find { |k| label.key?(k) }
|
108
|
+
(match_key || ifnone&.call) && label[match_key]
|
109
|
+
end
|
110
|
+
|
111
|
+
def min_label_value
|
112
|
+
bit_field.width == 1 ? 0 : -(2**(bit_field.width - 1))
|
113
|
+
end
|
114
|
+
|
115
|
+
def max_label_value
|
116
|
+
2**bit_field.width - 1
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
factory do
|
121
|
+
value_format :hash_list
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -75,9 +75,8 @@ RgGen.define_simple_feature(:register, :offset_address) do
|
|
75
75
|
end
|
76
76
|
|
77
77
|
def expand_local_addresses
|
78
|
-
|
79
|
-
|
80
|
-
end
|
78
|
+
width = shared_address? && 0 || register.byte_width
|
79
|
+
Array.new(register.count) { |i| offset_address + width * i }
|
81
80
|
end
|
82
81
|
|
83
82
|
def previous_component
|
@@ -77,24 +77,46 @@ RgGen.define_simple_feature(:register, :size) do
|
|
77
77
|
.max
|
78
78
|
end
|
79
79
|
|
80
|
-
def calc_byte_size(whole_size = true)
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
end
|
80
|
+
def calc_byte_size(whole_size = true, hierarchical: false)
|
81
|
+
return byte_width unless whole_size
|
82
|
+
|
83
|
+
include_register = !register.settings[:support_shared_address]
|
84
|
+
collect_size(hierarchical, include_register, false).reduce(1, :*) * byte_width
|
86
85
|
end
|
87
86
|
|
88
|
-
def array_register?
|
87
|
+
def array_register?(hierarchical: false)
|
88
|
+
return true if hierarchical && register_files.any?(&:array?)
|
89
89
|
register.settings[:support_array] && !@size.nil? || false
|
90
90
|
end
|
91
91
|
|
92
|
-
def array_registers
|
93
|
-
|
92
|
+
def array_registers(hierarchical: false)
|
93
|
+
size = collect_size(hierarchical, true, true)
|
94
|
+
!size.empty? && size || nil
|
94
95
|
end
|
95
96
|
|
96
97
|
def calc_count(whole_count = true)
|
97
|
-
whole_count
|
98
|
+
if whole_count
|
99
|
+
@count ||= collect_size(false, true, true).reduce(1, :*)
|
100
|
+
else
|
101
|
+
1
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def collect_size(inculde_register_file, include_register, array_only)
|
106
|
+
size = []
|
107
|
+
collect_register_file_size(size, inculde_register_file)
|
108
|
+
collect_register_size(size, include_register, array_only)
|
109
|
+
size.compact
|
110
|
+
end
|
111
|
+
|
112
|
+
def collect_register_file_size(size, inculde_register_file)
|
113
|
+
inculde_register_file &&
|
114
|
+
size.concat(register_files.flat_map(&:array_size))
|
115
|
+
end
|
116
|
+
|
117
|
+
def collect_register_size(size, include_register, array_only)
|
118
|
+
@size && include_register && (!array_only || array_register?) &&
|
119
|
+
size.concat(@size)
|
98
120
|
end
|
99
121
|
end
|
100
122
|
end
|
@@ -50,6 +50,7 @@ RgGen.setup_plugin :'rggen-default-register-map' do |plugin|
|
|
50
50
|
'default_register_map/bit_field/type/wos',
|
51
51
|
'default_register_map/bit_field/initial_value',
|
52
52
|
'default_register_map/bit_field/reference',
|
53
|
+
'default_register_map/bit_field/labels',
|
53
54
|
'default_register_map/bit_field/comment'
|
54
55
|
]
|
55
56
|
end
|
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.29.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:
|
11
|
+
date: 2023-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- lib/rggen/default_register_map/bit_field/bit_assignment.rb
|
39
39
|
- lib/rggen/default_register_map/bit_field/comment.rb
|
40
40
|
- lib/rggen/default_register_map/bit_field/initial_value.rb
|
41
|
+
- lib/rggen/default_register_map/bit_field/labels.rb
|
41
42
|
- lib/rggen/default_register_map/bit_field/name.rb
|
42
43
|
- lib/rggen/default_register_map/bit_field/reference.rb
|
43
44
|
- lib/rggen/default_register_map/bit_field/type.rb
|
@@ -99,15 +100,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
99
100
|
requirements:
|
100
101
|
- - ">="
|
101
102
|
- !ruby/object:Gem::Version
|
102
|
-
version: '2.
|
103
|
+
version: '2.7'
|
103
104
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
104
105
|
requirements:
|
105
106
|
- - ">="
|
106
107
|
- !ruby/object:Gem::Version
|
107
108
|
version: '0'
|
108
109
|
requirements: []
|
109
|
-
rubygems_version: 3.
|
110
|
+
rubygems_version: 3.4.1
|
110
111
|
signing_key:
|
111
112
|
specification_version: 4
|
112
|
-
summary: rggen-default-register-map-0.
|
113
|
+
summary: rggen-default-register-map-0.29.0
|
113
114
|
test_files: []
|