rggen-default-register-map 0.35.1 → 0.36.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: da15c54ac0f88727c273495d1749f677e28936aa45b1404096c82fedac672cee
4
- data.tar.gz: 232b41e263e95fc403edc6a4706af6e92654fa47a1d03219dccf12acc06e28fd
3
+ metadata.gz: ad030c257184d834491e0df892c25adecb637c48a487ca6dd30986e939ab23f8
4
+ data.tar.gz: 7516cc539e05d504c0459dfcbfde181edc8ed73579d6f01dfe49708c24a209ed
5
5
  SHA512:
6
- metadata.gz: 4c99a141c5c96d99a785cbd516a2b6af649c578f3ea342f713ae1e788517c8518288e6d8772563dbfac5717d70759e5b48184b7c999a1aa96c5137f8f2df6816
7
- data.tar.gz: 2bd114e1b7a0664b310d68f1eab0a13c391b53f5e3acca9ba8a25e56172023ad3d72c971d8c437e46e0e6365a863d0da14807ddf7d412bd8e1f1bc78df1f0989
6
+ metadata.gz: 72d36ba1054cede846ff838bc7a1191361a872366305c77d9e813e7f121e139cd9184fc5a30223c1c38e7f3ee03a1b2e414d1b5501bf0120333ecf6ea702ff37
7
+ data.tar.gz: e6023f5812804db2e401131a45bf364f7d59e2048167ef369b3707bf3ae4f1ac5fc9877a6a3fbcbf42311ee57052397e6d314c6d8f0cbc20c5090baacde2e88b
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2019-2025 Taichi Ishitani
3
+ Copyright (c) 2019-2026 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
@@ -2,8 +2,7 @@
2
2
  [![CI](https://github.com/rggen/rggen-default-register-map/workflows/CI/badge.svg)](https://github.com/rggen/rggen-default-register-map/actions?query=workflow%3ACI)
3
3
  [![Maintainability](https://qlty.sh/badges/4fe50039-28a8-4064-b224-2766eaf9e01f/maintainability.svg)](https://qlty.sh/gh/rggen/projects/rggen-default-register-map)
4
4
  [![codecov](https://codecov.io/gh/rggen/rggen-default-register-map/branch/master/graph/badge.svg)](https://codecov.io/gh/rggen/rggen-default-register-map)
5
- [![Gitter](https://badges.gitter.im/rggen/rggen.svg)](https://gitter.im/rggen/rggen?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
6
-
5
+ [![Discord](https://img.shields.io/discord/1406572699467124806?style=flat&logo=discord)](https://discord.com/invite/KWya83ZZxr)
7
6
 
8
7
  # RgGen::DefaultRegisterMap
9
8
 
@@ -32,13 +31,13 @@ Feedbacks, bug reports, questions and etc. are wellcome! You can post them by us
32
31
 
33
32
  * [GitHub Issue Tracker](https://github.com/rggen/rggen/issues)
34
33
  * [GitHub Discussions](https://github.com/rggen/rggen/discussions)
35
- * [Chat Room](https://gitter.im/rggen/rggen)
34
+ * [Discord](https://discord.com/invite/KWya83ZZxr)
36
35
  * [Mailing List](https://groups.google.com/d/forum/rggen)
37
36
  * [Mail](mailto:rggen@googlegroups.com)
38
37
 
39
38
  ## Copyright & License
40
39
 
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.
40
+ Copyright © 2019-2026 Taichi Ishitani. RgGen::DefaultRegisterMap is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
42
41
 
43
42
  ## Code of Conduct
44
43
 
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, :counter) do
4
+ register_map do
5
+ read_write
6
+ reference use: true, width: 1
7
+ initial_value require: true
8
+ end
9
+ end
@@ -3,7 +3,7 @@
3
3
  RgGen.define_simple_feature(:register, :offset_address) do
4
4
  register_map do
5
5
  property :offset_address, initial: -> { default_offset_address }
6
- property :expanded_offset_addresses, forward_to: :expand_addresses
6
+ property :expanded_offset_addresses, body: -> { expand_addresses }
7
7
  property :address_range, initial: -> { start_address..end_address }
8
8
  property :overlap?, body: ->(other) { overlap_address_range?(other, false) }
9
9
 
@@ -45,12 +45,12 @@ RgGen.define_simple_feature(:register, :offset_address) do
45
45
  end
46
46
  message do
47
47
  'offset address range overlaps with other offset address range: ' \
48
- "0x#{start_address(true).to_s(16)}-0x#{end_address(true).to_s(16)}"
48
+ "0x#{start_address(full: true).to_s(16)}-0x#{end_address(full: true).to_s(16)}"
49
49
  end
50
50
  end
51
51
 
52
52
  printable(:offset_address) do
53
- expand_addresses.map(&method(:format_address))
53
+ expand_addresses(printable_address: true).map(&method(:format_address))
54
54
  end
55
55
 
56
56
  private
@@ -60,22 +60,29 @@ RgGen.define_simple_feature(:register, :offset_address) do
60
60
  (previous_component.offset_address + previous_component.total_byte_size)
61
61
  end
62
62
 
63
- def start_address(full = false)
63
+ def start_address(full: false)
64
64
  full && expand_addresses.first || offset_address
65
65
  end
66
66
 
67
- def end_address(full = false)
68
- start_address(full) + register.total_byte_size - 1
67
+ def end_address(full: false)
68
+ start_address(full:) + register.total_byte_size - 1
69
69
  end
70
70
 
71
- def expand_addresses
71
+ def expand_addresses(printable_address: false)
72
72
  (register_file&.expanded_offset_addresses || [0])
73
- .product(expand_local_addresses).map(&:sum)
73
+ .product(expand_local_addresses(printable_address)).map(&:sum)
74
74
  end
75
75
 
76
- def expand_local_addresses
77
- width = shared_address? && 0 || register.entry_byte_size
78
- Array.new(register.count) { |i| offset_address + width * i }
76
+ def expand_local_addresses(printable_address)
77
+ count, width =
78
+ if !shared_address?
79
+ [register.count, register.entry_byte_size]
80
+ elsif printable_address
81
+ [1, 0]
82
+ else
83
+ [register.count, 0]
84
+ end
85
+ Array.new(count) { |i| offset_address + width * i }
79
86
  end
80
87
 
81
88
  def previous_component
@@ -29,10 +29,6 @@ RgGen.define_list_item_feature(:register, :type, :indirect) do
29
29
  def find_index_field(bit_fields)
30
30
  bit_fields.find { |bit_field| bit_field.full_name == name }
31
31
  end
32
-
33
- def to_s
34
- [name, value].compact.join(': ')
35
- end
36
32
  end
37
33
 
38
34
  property :index_entries
@@ -170,7 +166,14 @@ RgGen.define_list_item_feature(:register, :type, :indirect) do
170
166
  end
171
167
 
172
168
  printable(:index_bit_fields) do
173
- index_entries.map(&:to_s)
169
+ index_entries.map do |index|
170
+ if index.array_index?
171
+ value = array_index_value(index)
172
+ "#{index.name}: [0-#{value - 1}]"
173
+ else
174
+ "#{index.name}: #{index.value}"
175
+ end
176
+ end
174
177
  end
175
178
 
176
179
  private
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:register, :type, :maskable) do
4
+ register_map do
5
+ support_array_register
6
+
7
+ verify(:component) do
8
+ check_error do
9
+ register.bit_fields.each(&method(:check_assignment))
10
+ end
11
+ end
12
+
13
+ def check_assignment(bit_field)
14
+ (bit_field.sequence_size || 1).times do |i|
15
+ msb = bit_field.msb(i)
16
+ lsb = bit_field.lsb(i)
17
+ next unless in_mask_range?(msb, lsb)
18
+
19
+ error "bit field is assigned to upper half word: [#{msb}:#{lsb}]"
20
+ end
21
+ end
22
+
23
+ def in_mask_range?(msb, lsb)
24
+ width = register_block.bus_width
25
+ half_width = width / 2
26
+ (lsb..msb).any? { |bit| (bit % width) >= half_width }
27
+ end
28
+ end
29
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module DefaultRegisterMap
5
- VERSION = '0.35.1'
5
+ VERSION = '0.36.0'
6
6
  end
7
7
  end
@@ -1,9 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'erubi'
4
- if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.3.0')
5
- require 'facets/range/overlap'
6
- end
4
+ require 'facets/range/overlap' if Gem::Version.new(RUBY_VERSION) < Gem::Version.new('3.3.0')
7
5
 
8
6
  require_relative 'default_register_map/version'
9
7
  require_relative 'default_register_map/comment'
@@ -27,12 +25,14 @@ RgGen.setup_plugin :'rggen-default-register-map' do |plugin|
27
25
  'default_register_map/register/type',
28
26
  'default_register_map/register/type/external',
29
27
  'default_register_map/register/type/indirect',
28
+ 'default_register_map/register/type/maskable',
30
29
  'default_register_map/register/type/reserved',
31
30
  'default_register_map/register/type/rw',
32
31
  'default_register_map/register/comment',
33
32
  'default_register_map/bit_field/name',
34
33
  'default_register_map/bit_field/bit_assignment',
35
34
  'default_register_map/bit_field/type',
35
+ 'default_register_map/bit_field/type/counter',
36
36
  'default_register_map/bit_field/type/custom',
37
37
  'default_register_map/bit_field/type/rc',
38
38
  'default_register_map/bit_field/type/reserved',
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-default-register-map
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.35.1
4
+ version: 0.36.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-07-21 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: erubi
@@ -55,6 +55,7 @@ files:
55
55
  - lib/rggen/default_register_map/bit_field/name.rb
56
56
  - lib/rggen/default_register_map/bit_field/reference.rb
57
57
  - lib/rggen/default_register_map/bit_field/type.rb
58
+ - lib/rggen/default_register_map/bit_field/type/counter.rb
58
59
  - lib/rggen/default_register_map/bit_field/type/custom.rb
59
60
  - lib/rggen/default_register_map/bit_field/type/rc.rb
60
61
  - lib/rggen/default_register_map/bit_field/type/reserved.rb
@@ -86,6 +87,7 @@ files:
86
87
  - lib/rggen/default_register_map/register/type.rb
87
88
  - lib/rggen/default_register_map/register/type/external.rb
88
89
  - lib/rggen/default_register_map/register/type/indirect.rb
90
+ - lib/rggen/default_register_map/register/type/maskable.rb
89
91
  - lib/rggen/default_register_map/register/type/reserved.rb
90
92
  - lib/rggen/default_register_map/register/type/rw.rb
91
93
  - lib/rggen/default_register_map/register_block/bus_width.rb
@@ -113,14 +115,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
113
115
  requirements:
114
116
  - - ">="
115
117
  - !ruby/object:Gem::Version
116
- version: '3.1'
118
+ version: '3.2'
117
119
  required_rubygems_version: !ruby/object:Gem::Requirement
118
120
  requirements:
119
121
  - - ">="
120
122
  - !ruby/object:Gem::Version
121
123
  version: '0'
122
124
  requirements: []
123
- rubygems_version: 3.6.2
125
+ rubygems_version: 4.0.3
124
126
  specification_version: 4
125
- summary: rggen-default-register-map-0.35.1
127
+ summary: rggen-default-register-map-0.36.0
126
128
  test_files: []