rggen-default-register-map 0.33.0 → 0.34.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 +11 -7
- data/lib/rggen/default_register_map/bit_field/initial_value.rb +2 -2
- data/lib/rggen/default_register_map/bit_field/labels.rb +2 -2
- data/lib/rggen/default_register_map/bit_field/reference.rb +2 -2
- data/lib/rggen/default_register_map/bit_field/type.rb +2 -2
- data/lib/rggen/default_register_map/comment.rb +20 -2
- data/lib/rggen/default_register_map/global/address_width.rb +3 -12
- data/lib/rggen/default_register_map/register/offset_address.rb +2 -2
- data/lib/rggen/default_register_map/register/size.rb +2 -2
- data/lib/rggen/default_register_map/register/type/indirect.rb +2 -2
- data/lib/rggen/default_register_map/register/type.rb +2 -2
- data/lib/rggen/default_register_map/register_block/bus_width.rb +57 -0
- data/lib/rggen/default_register_map/register_block/byte_size.rb +4 -5
- data/lib/rggen/default_register_map/register_file/offset_address.rb +2 -2
- data/lib/rggen/default_register_map/register_file/size.rb +1 -1
- data/lib/rggen/default_register_map/version.rb +1 -1
- data/lib/rggen/default_register_map.rb +2 -1
- metadata +20 -9
- data/lib/rggen/default_register_map/global/bus_width.rb +0 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c64ad41b647f11e3d45ad172abb18a5d2e1ea193ea75bfcd80260e3e21eaa0d8
|
4
|
+
data.tar.gz: 985a113c7c7409fd52ba8515dfc5bda0a0d5b371332a7e62fadb2d26920daceb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9316a3c0d0bbb526c74c6029421e846b793ce78b86a758cc8fa2edac34ea63d0bc84e6a559c9057a428972489ea2ac324936d68c8a2acaa08bcd629169c5be67
|
7
|
+
data.tar.gz: 401f99b27672199fe52dba27bcc948dafc648e2de6aee7081062cc3b2cfae30aacc02efa72c57bd9620a2ba06394fd6919c9df4ea550b204ead22b9d7fbe86ed
|
data/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c) 2019-
|
3
|
+
Copyright (c) 2019-2025 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
@@ -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-
|
41
|
+
Copyright © 2019-2025 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
|
|
@@ -85,10 +85,10 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
|
85
85
|
end
|
86
86
|
|
87
87
|
def preprocess(value)
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
88
|
+
case value
|
89
|
+
when method(:hash?) then value
|
90
|
+
when method(:integer?) then { variable_key(0) => value }
|
91
|
+
when method(:match_bit_assignment?) then split_match_data(match_data)
|
92
92
|
else
|
93
93
|
error "illegal input value for bit assignment: #{value.inspect}"
|
94
94
|
end
|
@@ -99,14 +99,14 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
|
99
99
|
# * https://bugs.ruby-lang.org/issues/19273
|
100
100
|
# * https://github.com/rggen/rggen/issues/129#issuecomment-1366666885
|
101
101
|
def match_bit_assignment?(value)
|
102
|
-
match_pattern(value) && value.count(':') <= 3
|
102
|
+
string?(value) && match_pattern(value) && value.count(':') <= 3
|
103
103
|
end
|
104
104
|
|
105
105
|
def split_match_data(match_data)
|
106
106
|
match_data
|
107
107
|
.to_s
|
108
108
|
.split(':')
|
109
|
-
.map.with_index { |
|
109
|
+
.map.with_index { |v, i| [variable_key(i), v] }
|
110
110
|
.to_h
|
111
111
|
end
|
112
112
|
|
@@ -134,7 +134,11 @@ RgGen.define_simple_feature(:bit_field, :bit_assignment) do
|
|
134
134
|
|
135
135
|
def lsb_base
|
136
136
|
@lsb_base ||=
|
137
|
-
|
137
|
+
if bit_field.component_index.zero?
|
138
|
+
0
|
139
|
+
else
|
140
|
+
calc_next_lsb(previous_bit_field)
|
141
|
+
end
|
138
142
|
end
|
139
143
|
|
140
144
|
def previous_bit_field
|
@@ -24,8 +24,8 @@ RgGen.define_simple_feature(:bit_field, :initial_value) do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
define_helpers do
|
27
|
-
def verify_initial_value(&
|
28
|
-
initial_value_verifiers << create_verifier(&
|
27
|
+
def verify_initial_value(&)
|
28
|
+
initial_value_verifiers << create_verifier(&)
|
29
29
|
end
|
30
30
|
|
31
31
|
def initial_value_verifiers
|
@@ -21,8 +21,8 @@ RgGen.define_feature(:bit_field, :labels) do
|
|
21
21
|
end
|
22
22
|
|
23
23
|
define_helpers do
|
24
|
-
def verify_label_value(&
|
25
|
-
label_value_verifiers << create_verifier(&
|
24
|
+
def verify_label_value(&)
|
25
|
+
label_value_verifiers << create_verifier(&)
|
26
26
|
end
|
27
27
|
|
28
28
|
def label_value_verifiers
|
@@ -43,8 +43,8 @@ RgGen.define_simple_feature(:bit_field, :reference) do
|
|
43
43
|
end
|
44
44
|
|
45
45
|
define_helpers do
|
46
|
-
def verify_array(&
|
47
|
-
array_verifiers << create_verifier(&
|
46
|
+
def verify_array(&)
|
47
|
+
array_verifiers << create_verifier(&)
|
48
48
|
end
|
49
49
|
|
50
50
|
def array_verifiers
|
@@ -115,8 +115,8 @@ RgGen.define_list_feature(:bit_field, :type) do
|
|
115
115
|
types.find(&value.to_sym.method(:casecmp?)) || value
|
116
116
|
end
|
117
117
|
|
118
|
-
def target_feature_key(
|
119
|
-
|
118
|
+
def target_feature_key(_configuration, input_value)
|
119
|
+
input_value
|
120
120
|
end
|
121
121
|
end
|
122
122
|
end
|
@@ -3,16 +3,34 @@
|
|
3
3
|
module RgGen
|
4
4
|
module DefaultRegisterMap
|
5
5
|
COMMENT = proc do
|
6
|
-
property :comment,
|
6
|
+
property :comment, forward_to: :processed_comment
|
7
7
|
|
8
8
|
build do |value|
|
9
|
-
@
|
9
|
+
@raw_comment =
|
10
10
|
(array?(value) && value.join("\n") || value.to_s).chomp
|
11
11
|
end
|
12
12
|
|
13
13
|
printable :comment do
|
14
14
|
comment.empty? ? nil : comment
|
15
15
|
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def processed_comment
|
20
|
+
@processed_comment ||=
|
21
|
+
if erb_template?
|
22
|
+
template = Erubi::Engine.new(@raw_comment)
|
23
|
+
instance_eval(template.src, position.to_s, 1)
|
24
|
+
elsif @raw_comment
|
25
|
+
@raw_comment
|
26
|
+
else
|
27
|
+
''
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def erb_template?
|
32
|
+
/<%.*%>/.match?(@raw_comment)
|
33
|
+
end
|
16
34
|
end
|
17
35
|
end
|
18
36
|
end
|
@@ -9,22 +9,13 @@ RgGen.define_simple_feature(:global, :address_width) do
|
|
9
9
|
to_int(value) { |v| "cannot convert #{v.inspect} into address width" }
|
10
10
|
end
|
11
11
|
|
12
|
-
verify(:
|
13
|
-
error_condition { address_width
|
12
|
+
verify(:feature) do
|
13
|
+
error_condition { !address_width.positive? }
|
14
14
|
message do
|
15
|
-
|
16
|
-
"address width #{address_width} " \
|
17
|
-
"minimum address width #{min_address_width}"
|
15
|
+
"non positive value is not allowed for address width: #{address_width}"
|
18
16
|
end
|
19
17
|
end
|
20
18
|
|
21
19
|
printable :address_width
|
22
|
-
|
23
|
-
private
|
24
|
-
|
25
|
-
def min_address_width
|
26
|
-
byte_width = configuration.byte_width
|
27
|
-
byte_width == 1 ? 1 : (byte_width - 1).bit_length
|
28
|
-
end
|
29
20
|
end
|
30
21
|
end
|
@@ -84,11 +84,11 @@ RgGen.define_simple_feature(:register, :offset_address) do
|
|
84
84
|
end
|
85
85
|
|
86
86
|
def bus_width
|
87
|
-
|
87
|
+
register_block.bus_width
|
88
88
|
end
|
89
89
|
|
90
90
|
def byte_width
|
91
|
-
|
91
|
+
register_block.byte_width
|
92
92
|
end
|
93
93
|
|
94
94
|
def overlap_address_range?(other, shareable)
|
@@ -39,7 +39,7 @@ RgGen.define_feature(:register, :size) do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
verify(:component) do
|
42
|
-
error_condition { @step && (@step %
|
42
|
+
error_condition { @step && (@step % register_block.byte_width).positive? }
|
43
43
|
message do
|
44
44
|
"step size is not multiple of bus width: #{@step}"
|
45
45
|
end
|
@@ -69,7 +69,7 @@ RgGen.define_feature(:register, :size) do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def calc_width
|
72
|
-
bus_width =
|
72
|
+
bus_width = register_block.bus_width
|
73
73
|
if register.bit_fields.empty?
|
74
74
|
bus_width
|
75
75
|
else
|
@@ -3,8 +3,8 @@
|
|
3
3
|
RgGen.define_list_item_feature(:register, :type, :indirect) do
|
4
4
|
register_map do
|
5
5
|
define_helpers do
|
6
|
-
def verify_index(&
|
7
|
-
index_verifiers << create_verifier(&
|
6
|
+
def verify_index(&)
|
7
|
+
index_verifiers << create_verifier(&)
|
8
8
|
end
|
9
9
|
|
10
10
|
def index_verifiers
|
@@ -90,8 +90,8 @@ RgGen.define_list_feature(:register, :type) do
|
|
90
90
|
find_type(value)
|
91
91
|
end
|
92
92
|
|
93
|
-
def target_feature_key(
|
94
|
-
(!
|
93
|
+
def target_feature_key(_configuration, input_value)
|
94
|
+
(!input_value.empty_value? && input_value) || nil
|
95
95
|
end
|
96
96
|
|
97
97
|
private
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_simple_feature(:register_block, :bus_width) do
|
4
|
+
[:configuration, :register_map].each do |component_type|
|
5
|
+
component(component_type) do
|
6
|
+
build do |value|
|
7
|
+
@bus_width =
|
8
|
+
to_int(value) { |v| "cannot convert #{v.inspect} into bus width" }
|
9
|
+
end
|
10
|
+
|
11
|
+
verify(:feature) do
|
12
|
+
error_condition { bus_width < 8 }
|
13
|
+
message { "input bus width is less than 8: #{bus_width}" }
|
14
|
+
end
|
15
|
+
|
16
|
+
verify(:feature) do
|
17
|
+
error_condition { !power_of_2?(bus_width) }
|
18
|
+
message { "input bus width is not power of 2: #{bus_width}" }
|
19
|
+
end
|
20
|
+
|
21
|
+
printable :bus_width
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def power_of_2?(value)
|
26
|
+
value.positive? && (value & value.pred).zero?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
configuration do
|
32
|
+
property :bus_width, default: 32
|
33
|
+
end
|
34
|
+
|
35
|
+
register_map do
|
36
|
+
property :bus_width, default: -> { configuration.bus_width }
|
37
|
+
property :byte_width, initial: -> { bus_width / 8 }
|
38
|
+
|
39
|
+
verify(:feature) do
|
40
|
+
error_condition { bus_width > max_bus_width }
|
41
|
+
message do
|
42
|
+
'input bus width is grater than maximum bus width: ' \
|
43
|
+
"bus width #{bus_width} maximum bus width #{max_bus_width}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def position
|
48
|
+
super || configuration.feature(:bus_width).position
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def max_bus_width
|
54
|
+
2**(configuration.address_width + 3)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -3,12 +3,11 @@
|
|
3
3
|
RgGen.define_simple_feature(:register_block, :byte_size) do
|
4
4
|
register_map do
|
5
5
|
property :byte_size
|
6
|
-
property :local_address_width
|
6
|
+
property :local_address_width, body: -> { (byte_size - 1).bit_length }
|
7
7
|
|
8
8
|
build do |value|
|
9
9
|
@byte_size =
|
10
10
|
to_int(value) { |v| "cannot convert #{v.inspect} into byte size" }
|
11
|
-
@local_address_width = (@byte_size - 1).bit_length
|
12
11
|
end
|
13
12
|
|
14
13
|
verify(:feature) do
|
@@ -31,7 +30,7 @@ RgGen.define_simple_feature(:register_block, :byte_size) do
|
|
31
30
|
end
|
32
31
|
end
|
33
32
|
|
34
|
-
verify(:
|
33
|
+
verify(:component) do
|
35
34
|
error_condition { (byte_size % byte_width).positive? }
|
36
35
|
message do
|
37
36
|
"byte size is not aligned with bus width(#{bus_width}): #{byte_size}"
|
@@ -47,11 +46,11 @@ RgGen.define_simple_feature(:register_block, :byte_size) do
|
|
47
46
|
end
|
48
47
|
|
49
48
|
def byte_width
|
50
|
-
|
49
|
+
register_block.byte_width
|
51
50
|
end
|
52
51
|
|
53
52
|
def bus_width
|
54
|
-
|
53
|
+
register_block.bus_width
|
55
54
|
end
|
56
55
|
end
|
57
56
|
end
|
@@ -82,11 +82,11 @@ RgGen.define_simple_feature(:register_file, :offset_address) do
|
|
82
82
|
end
|
83
83
|
|
84
84
|
def bus_width
|
85
|
-
|
85
|
+
register_block.bus_width
|
86
86
|
end
|
87
87
|
|
88
88
|
def byte_width
|
89
|
-
|
89
|
+
register_block.byte_width
|
90
90
|
end
|
91
91
|
|
92
92
|
def format_address(address)
|
@@ -30,7 +30,7 @@ RgGen.define_feature(:register_file, :size) do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
verify(:component) do
|
33
|
-
error_condition { @step && (@step %
|
33
|
+
error_condition { @step && (@step % register_block.byte_width).positive? }
|
34
34
|
message do
|
35
35
|
"step size is not multiple of bus width: #{@step}"
|
36
36
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'erubi'
|
3
4
|
if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.3.0')
|
4
5
|
require 'facets/range/overlap'
|
5
6
|
end
|
@@ -11,10 +12,10 @@ RgGen.setup_plugin :'rggen-default-register-map' do |plugin|
|
|
11
12
|
plugin.version RgGen::DefaultRegisterMap::VERSION
|
12
13
|
plugin.files [
|
13
14
|
'default_register_map/global/address_width',
|
14
|
-
'default_register_map/global/bus_width',
|
15
15
|
'default_register_map/global/enable_wide_register',
|
16
16
|
'default_register_map/register_block/name',
|
17
17
|
'default_register_map/register_block/byte_size',
|
18
|
+
'default_register_map/register_block/bus_width',
|
18
19
|
'default_register_map/register_block/comment',
|
19
20
|
'default_register_map/register_file/name',
|
20
21
|
'default_register_map/register_file/offset_address',
|
metadata
CHANGED
@@ -1,15 +1,28 @@
|
|
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.34.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taichi Ishitani
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-01-23 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
12
|
+
- !ruby/object:Gem::Dependency
|
13
|
+
name: erubi
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - ">="
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: '1.7'
|
19
|
+
type: :runtime
|
20
|
+
prerelease: false
|
21
|
+
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
requirements:
|
23
|
+
- - ">="
|
24
|
+
- !ruby/object:Gem::Version
|
25
|
+
version: '1.7'
|
13
26
|
- !ruby/object:Gem::Dependency
|
14
27
|
name: facets
|
15
28
|
requirement: !ruby/object:Gem::Requirement
|
@@ -65,7 +78,6 @@ files:
|
|
65
78
|
- lib/rggen/default_register_map/bit_field/type/wos.rb
|
66
79
|
- lib/rggen/default_register_map/comment.rb
|
67
80
|
- lib/rggen/default_register_map/global/address_width.rb
|
68
|
-
- lib/rggen/default_register_map/global/bus_width.rb
|
69
81
|
- lib/rggen/default_register_map/global/enable_wide_register.rb
|
70
82
|
- lib/rggen/default_register_map/register/comment.rb
|
71
83
|
- lib/rggen/default_register_map/register/name.rb
|
@@ -76,6 +88,7 @@ files:
|
|
76
88
|
- lib/rggen/default_register_map/register/type/indirect.rb
|
77
89
|
- lib/rggen/default_register_map/register/type/reserved.rb
|
78
90
|
- lib/rggen/default_register_map/register/type/rw.rb
|
91
|
+
- lib/rggen/default_register_map/register_block/bus_width.rb
|
79
92
|
- lib/rggen/default_register_map/register_block/byte_size.rb
|
80
93
|
- lib/rggen/default_register_map/register_block/comment.rb
|
81
94
|
- lib/rggen/default_register_map/register_block/name.rb
|
@@ -93,7 +106,6 @@ metadata:
|
|
93
106
|
rubygems_mfa_required: 'true'
|
94
107
|
source_code_uri: https://github.com/rggen/rggen-default-register-map
|
95
108
|
wiki_uri: https://github.com/rggen/rggen/wiki
|
96
|
-
post_install_message:
|
97
109
|
rdoc_options: []
|
98
110
|
require_paths:
|
99
111
|
- lib
|
@@ -101,15 +113,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
113
|
requirements:
|
102
114
|
- - ">="
|
103
115
|
- !ruby/object:Gem::Version
|
104
|
-
version: '3.
|
116
|
+
version: '3.1'
|
105
117
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
118
|
requirements:
|
107
119
|
- - ">="
|
108
120
|
- !ruby/object:Gem::Version
|
109
121
|
version: '0'
|
110
122
|
requirements: []
|
111
|
-
rubygems_version: 3.
|
112
|
-
signing_key:
|
123
|
+
rubygems_version: 3.6.2
|
113
124
|
specification_version: 4
|
114
|
-
summary: rggen-default-register-map-0.
|
125
|
+
summary: rggen-default-register-map-0.34.0
|
115
126
|
test_files: []
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RgGen.define_simple_feature(:global, :bus_width) do
|
4
|
-
configuration do
|
5
|
-
property :bus_width, default: 32
|
6
|
-
property :byte_width, initial: -> { bus_width / 8 }
|
7
|
-
|
8
|
-
build do |value|
|
9
|
-
@bus_width =
|
10
|
-
to_int(value) { |v| "cannot convert #{v.inspect} into bus width" }
|
11
|
-
end
|
12
|
-
|
13
|
-
verify(:feature) do
|
14
|
-
error_condition { bus_width < 8 }
|
15
|
-
message { "input bus width is less than 8: #{bus_width}" }
|
16
|
-
end
|
17
|
-
|
18
|
-
verify(:feature) do
|
19
|
-
error_condition { !power_of_2?(bus_width) }
|
20
|
-
message { "input bus width is not power of 2: #{bus_width}" }
|
21
|
-
end
|
22
|
-
|
23
|
-
printable :bus_width
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def power_of_2?(value)
|
28
|
-
value.positive? && (value & value.pred).zero?
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|