rggen-default-register-map 0.33.1 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a77cc6528b188fdba713bc53da996cd989418ece9343d890c7faa172f00c5578
4
- data.tar.gz: fc29e6151495e5ccf4b5c849b85bf9826e9b29cc3eceaa8a6cf9d721263d72f0
3
+ metadata.gz: c64ad41b647f11e3d45ad172abb18a5d2e1ea193ea75bfcd80260e3e21eaa0d8
4
+ data.tar.gz: 985a113c7c7409fd52ba8515dfc5bda0a0d5b371332a7e62fadb2d26920daceb
5
5
  SHA512:
6
- metadata.gz: '0318e9214520a542bd889a3745ca936330af5f374a7029d608f2f6164d22a0408317c945e8d809962fe074649b707f61966e401ae0fdd82b34b20c296b5adb03'
7
- data.tar.gz: d80c8f695c32449b9744bf59eb390854de35dfc735d9d5fe8e47695bf509310bd6341f426c889c1badd0fb2eb7382ec0cb55e364c0fd2a6dbc093aef69bed265
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-2024 Taichi Ishitani
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-2024 Taichi Ishitani. RgGen::DefaultRegisterMap is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
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
 
@@ -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
- ((bit_field.component_index.zero? && 0) || calc_next_lsb(previous_bit_field))
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(&block)
28
- initial_value_verifiers << create_verifier(&block)
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(&body)
25
- label_value_verifiers << create_verifier(&body)
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(&block)
47
- array_verifiers << create_verifier(&block)
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(cell)
119
- cell
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, initial: -> { '' }
6
+ property :comment, forward_to: :processed_comment
7
7
 
8
8
  build do |value|
9
- @comment =
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(:component) do
13
- error_condition { address_width < min_address_width }
12
+ verify(:feature) do
13
+ error_condition { !address_width.positive? }
14
14
  message do
15
- 'input address width is less than minimum address width: ' \
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
- configuration.bus_width
87
+ register_block.bus_width
88
88
  end
89
89
 
90
90
  def byte_width
91
- configuration.byte_width
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 % configuration.byte_width).positive? }
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 = configuration.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(&block)
7
- index_verifiers << create_verifier(&block)
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(value)
94
- (!value.empty_value? && value) || nil
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(:feature) do
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
- configuration.byte_width
49
+ register_block.byte_width
51
50
  end
52
51
 
53
52
  def bus_width
54
- configuration.bus_width
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
- configuration.bus_width
85
+ register_block.bus_width
86
86
  end
87
87
 
88
88
  def byte_width
89
- configuration.byte_width
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 % configuration.byte_width).positive? }
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module DefaultRegisterMap
5
- VERSION = '0.33.1'
5
+ VERSION = '0.34.0'
6
6
  end
7
7
  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.33.1
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: 2024-06-11 00:00:00.000000000 Z
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.0'
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.5.5
112
- signing_key:
123
+ rubygems_version: 3.6.2
113
124
  specification_version: 4
114
- summary: rggen-default-register-map-0.33.1
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