rggen-systemverilog 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: 5441e91c3aba911ffc939b52377fbe897b4b6d22eae77885a2d84c9ad039f514
4
- data.tar.gz: 0a6537fbd0bd1c6aca0bf386a01639ecaa9eb872aa7ab9a457cdf081c629b4e0
3
+ metadata.gz: c2a34fc0e11acfa4676aa94fb91a7cbeb70948f99e57010e8642a298f7ce3062
4
+ data.tar.gz: acae4d8983a442dd5227cc7c977c7cdfd5b1380289b8b8c15449a14477064de0
5
5
  SHA512:
6
- metadata.gz: 2512a43cb38779c6ba0180c5aea816708f9a085d7f6cb80d6ad4b2f7f4e387aa110451aeddc47c5df9b212343caa106e23cca671b068978dd49e36ac39dbf379
7
- data.tar.gz: c8a517c58dc5846adf3241d11abed8007e8e347ee0417a8603ff879661dfb50f5d49656130146bba2c27cd487e9a45880a98b7717b9bb0d59d7c1b5fcac19b6c
6
+ metadata.gz: e2ed272a3d8d45db50ff0bea82e8ee2e660eaa5e6b6320cd02960dd7c6f131f9e446c189ed54fa601dce2f4eabf1a687f1f2635db83c93be067c8affec870e50
7
+ data.tar.gz: 57dfbc1fe3c92b5a1b34063dea625d09274c208a606e452d2714ccc79279dc00efb5bcdcc32609a02d1bd4275f3dac359ae194f4783064f0b565671c13b0199e
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,7 +2,7 @@
2
2
  [![CI](https://github.com/rggen/rggen-systemverilog/workflows/CI/badge.svg)](https://github.com/rggen/rggen-systemverilog/actions?query=workflow%3ACI)
3
3
  [![Maintainability](https://qlty.sh/badges/1b06df23-43bd-413d-90f9-b98c565be895/maintainability.svg)](https://qlty.sh/gh/rggen/projects/rggen-systemverilog)
4
4
  [![codecov](https://codecov.io/gh/rggen/rggen-systemverilog/branch/master/graph/badge.svg)](https://codecov.io/gh/rggen/rggen-systemverilog)
5
- [![Gitter](https://badges.gitter.im/rggen/rggen.svg)](https://gitter.im/rggen/rggen?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
5
+ [![Discord](https://img.shields.io/discord/1406572699467124806?style=flat&logo=discord)](https://discord.com/invite/KWya83ZZxr)
6
6
 
7
7
  # RgGen::SystemVerilog
8
8
 
@@ -28,13 +28,13 @@ Feedbacks, bug reports, questions and etc. are wellcome! You can post them by us
28
28
 
29
29
  * [GitHub Issue Tracker](https://github.com/rggen/rggen/issues)
30
30
  * [GitHub Discussions](https://github.com/rggen/rggen/discussions)
31
- * [Chat Room](https://gitter.im/rggen/rggen)
31
+ * [Discord](https://discord.com/invite/KWya83ZZxr)
32
32
  * [Mailing List](https://groups.google.com/d/forum/rggen)
33
33
  * [Mail](mailto:rggen@googlegroups.com)
34
34
 
35
35
  ## Copyright & License
36
36
 
37
- Copyright © 2019-2025 Taichi Ishitani. RgGen::SystemVerilog is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
37
+ Copyright © 2019-2026 Taichi Ishitani. RgGen::SystemVerilog is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
38
38
 
39
39
  ## Code of Conduct
40
40
 
@@ -5,6 +5,7 @@ module RgGen
5
5
  module Common
6
6
  class Feature < Core::OutputBase::Feature
7
7
  include Common::Utility
8
+
8
9
  template_engine Core::OutputBase::ERBEngine
9
10
 
10
11
  EntityContext =
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:counter, :rwc, :rwhw, :rws]) do
4
+ sv_ral { access 'RW' }
5
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:register, :type, :maskable) do
4
+ sv_ral do
5
+ main_code :ral_package do
6
+ class_definition(model_name) do |sv_class|
7
+ sv_class.base 'rggen_ral_maskable_reg'
8
+ sv_class.variables variables
9
+ sv_class.body { model_body }
10
+ end
11
+ end
12
+
13
+ private
14
+
15
+ def model_body
16
+ process_template(File.join(__dir__, 'default.erb'))
17
+ end
18
+ end
19
+ end
@@ -22,13 +22,14 @@ RgGen.setup_plugin :'rggen-sv-ral' do |plugin|
22
22
  'ral/register/type',
23
23
  'ral/register/type/external',
24
24
  'ral/register/type/indirect',
25
+ 'ral/register/type/maskable',
25
26
  'ral/bit_field/type',
27
+ 'ral/bit_field/type/counter_rwc_rwhw_rws',
26
28
  'ral/bit_field/type/custom',
27
29
  'ral/bit_field/type/rof_rohw',
28
30
  'ral/bit_field/type/rotrg_rwtrg_wotrg',
29
31
  'ral/bit_field/type/row0trg_row1trg_w0trg_w1trg',
30
32
  'ral/bit_field/type/rowo_rowotrg',
31
- 'ral/bit_field/type/rwc_rwhw_rws',
32
33
  'ral/bit_field/type/rwe_rwl'
33
34
  ]
34
35
 
@@ -0,0 +1,16 @@
1
+ rggen_bit_field_counter #(
2
+ .WIDTH (<%= width %>),
3
+ .INITIAL_VALUE (<%= initial_value %>),
4
+ .UP_WIDTH (<%= up_width %>),
5
+ .DOWN_WIDTH (<%= down_width %>),
6
+ .WRAP_AROUND (<%= wrap_around %>),
7
+ .USE_CLEAR (<%= use_clear_value %>)
8
+ ) u_bit_field (
9
+ .i_clk (<%= clock %>),
10
+ .i_rst_n (<%= reset %>),
11
+ .bit_field_if (<%= bit_field_if %>),
12
+ .i_clear (<%= clear_signal %>),
13
+ .i_up (<%= up[loop_variables]%>),
14
+ .i_down (<%= down[loop_variables] %>),
15
+ .o_count (<%= count[loop_variables] %>)
16
+ );
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, :counter) do
4
+ sv_rtl do
5
+ build do
6
+ parameter :up_width, {
7
+ name: "#{full_name}_up_width".upcase,
8
+ data_type: :int, default: 1
9
+ }
10
+ parameter :down_width, {
11
+ name: "#{full_name}_down_width".upcase,
12
+ data_type: :int, default: 1
13
+ }
14
+ parameter :wrap_around, {
15
+ name: "#{full_name}_wrap_around".upcase,
16
+ data_type: :bit, default: 0
17
+ }
18
+ if external_clear?
19
+ parameter :use_clear, {
20
+ name: "#{full_name}_use_clear".upcase,
21
+ data_type: :bit, default: 1
22
+ }
23
+ end
24
+
25
+ input :up, {
26
+ name: "i_#{full_name}_up",
27
+ width: function_call(:rggen_clip_width, [up_width]), array_size:
28
+ }
29
+ input :down, {
30
+ name: "i_#{full_name}_down",
31
+ width: function_call(:rggen_clip_width, [down_width]), array_size:
32
+ }
33
+ if external_clear?
34
+ input :clear, {
35
+ name: "i_#{full_name}_clear", width: 1, array_size:
36
+ }
37
+ end
38
+ output :count, {
39
+ name: "o_#{full_name}", width:, array_size:
40
+ }
41
+ end
42
+
43
+ main_code :bit_field, from_template: true
44
+
45
+ private
46
+
47
+ def external_clear?
48
+ !bit_field.reference?
49
+ end
50
+
51
+ def use_clear_value
52
+ external_clear? && use_clear || 1
53
+ end
54
+
55
+ def clear_signal
56
+ reference_bit_field || clear[loop_variables]
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,14 @@
1
+ rggen_maskable_register #(
2
+ .READABLE (<%= readable %>),
3
+ .WRITABLE (<%= writable %>),
4
+ .ADDRESS_WIDTH (<%= address_width %>),
5
+ .OFFSET_ADDRESS (<%= offset_address %>),
6
+ .BUS_WIDTH (<%= bus_width %>),
7
+ .DATA_WIDTH (<%= width %>),
8
+ .VALUE_WIDTH (<%= value_width %>)
9
+ ) u_register (
10
+ .i_clk (<%= register_block.clock %>),
11
+ .i_rst_n (<%= register_block.reset %>),
12
+ .register_if (<%= register_if %>),
13
+ .bit_field_if (<%= bit_field_if %>)
14
+ );
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:register, :type, :maskable) do
4
+ sv_rtl do
5
+ main_code :register, from_template: true
6
+ end
7
+ end
@@ -6,13 +6,17 @@ RgGen.define_list_feature(:register_block, :protocol) do
6
6
  feature_registries << registry
7
7
  end
8
8
 
9
+ def no_rtl_writers?
10
+ feature_registries
11
+ .none? { |registry| registry.enabled_features.include?(:protocol) }
12
+ end
13
+
9
14
  def default_protocol
10
15
  available_protocols.first
11
16
  end
12
17
 
13
18
  def find_protocol(value)
14
- available_protocols
15
- .find { value.to_sym.casecmp?(_1) }
19
+ available_protocols.find { value.to_sym.casecmp?(_1) }
16
20
  end
17
21
 
18
22
  private
@@ -23,7 +27,7 @@ RgGen.define_list_feature(:register_block, :protocol) do
23
27
 
24
28
  def available_protocols
25
29
  feature_registries
26
- .map { |registry| registry.enabled_features(:protocol) }
30
+ .filter_map { |registry| registry.enabled_features(:protocol) }
27
31
  .inject(:&)
28
32
  end
29
33
  end
@@ -39,6 +43,14 @@ RgGen.define_list_feature(:register_block, :protocol) do
39
43
 
40
44
  factory do
41
45
  convert_value do |value, position|
46
+ find_protocol(value, position)
47
+ end
48
+
49
+ private
50
+
51
+ def find_protocol(value, position)
52
+ return if shared_context.no_rtl_writers?
53
+
42
54
  shared_context.find_protocol(value) ||
43
55
  (error "unknown protocol: #{value.inspect}", position)
44
56
  end
@@ -54,13 +66,21 @@ RgGen.define_list_feature(:register_block, :protocol) do
54
66
 
55
67
  factory do
56
68
  default_value do |position|
57
- shared_context.default_protocol ||
58
- (error 'no protocols are available', position)
69
+ default_protocol(position)
59
70
  end
60
71
 
61
72
  def target_feature_key(data)
62
73
  data.value
63
74
  end
75
+
76
+ private
77
+
78
+ def default_protocol(position)
79
+ return if shared_context.no_rtl_writers?
80
+
81
+ shared_context.default_protocol ||
82
+ (error 'no protocols are available', position)
83
+ end
64
84
  end
65
85
  end
66
86
 
@@ -33,9 +33,11 @@ RgGen.setup_plugin :'rggen-sv-rtl' do |plugin|
33
33
  'rtl/register/type',
34
34
  'rtl/register/type/external',
35
35
  'rtl/register/type/indirect',
36
+ 'rtl/register/type/maskable',
36
37
  'rtl/register/type/rw',
37
38
  'rtl/bit_field/sv_rtl_top',
38
39
  'rtl/bit_field/type',
40
+ 'rtl/bit_field/type/counter',
39
41
  'rtl/bit_field/type/custom',
40
42
  'rtl/bit_field/type/rc_w0c_w1c_wc_woc',
41
43
  'rtl/bit_field/type/ro_rotrg',
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module SystemVerilog
5
- VERSION = '0.35.1'
5
+ VERSION = '0.36.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-systemverilog
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-06-01 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies: []
12
12
  description: 'SystemVerilog RTL and UVM RAL model generators for RgGen.
13
13
 
@@ -40,12 +40,12 @@ files:
40
40
  - lib/rggen/systemverilog/common/utility/structure_definition.rb
41
41
  - lib/rggen/systemverilog/ral.rb
42
42
  - lib/rggen/systemverilog/ral/bit_field/type.rb
43
+ - lib/rggen/systemverilog/ral/bit_field/type/counter_rwc_rwhw_rws.rb
43
44
  - lib/rggen/systemverilog/ral/bit_field/type/custom.rb
44
45
  - lib/rggen/systemverilog/ral/bit_field/type/rof_rohw.rb
45
46
  - lib/rggen/systemverilog/ral/bit_field/type/rotrg_rwtrg_wotrg.rb
46
47
  - lib/rggen/systemverilog/ral/bit_field/type/row0trg_row1trg_w0trg_w1trg.rb
47
48
  - lib/rggen/systemverilog/ral/bit_field/type/rowo_rowotrg.rb
48
- - lib/rggen/systemverilog/ral/bit_field/type/rwc_rwhw_rws.rb
49
49
  - lib/rggen/systemverilog/ral/bit_field/type/rwe_rwl.rb
50
50
  - lib/rggen/systemverilog/ral/feature.rb
51
51
  - lib/rggen/systemverilog/ral/register/type.rb
@@ -53,6 +53,7 @@ files:
53
53
  - lib/rggen/systemverilog/ral/register/type/external.rb
54
54
  - lib/rggen/systemverilog/ral/register/type/indirect.erb
55
55
  - lib/rggen/systemverilog/ral/register/type/indirect.rb
56
+ - lib/rggen/systemverilog/ral/register/type/maskable.rb
56
57
  - lib/rggen/systemverilog/ral/register_block/sv_ral_model.erb
57
58
  - lib/rggen/systemverilog/ral/register_block/sv_ral_model.rb
58
59
  - lib/rggen/systemverilog/ral/register_block/sv_ral_package.rb
@@ -64,6 +65,8 @@ files:
64
65
  - lib/rggen/systemverilog/rtl.rb
65
66
  - lib/rggen/systemverilog/rtl/bit_field/sv_rtl_top.rb
66
67
  - lib/rggen/systemverilog/rtl/bit_field/type.rb
68
+ - lib/rggen/systemverilog/rtl/bit_field/type/counter.erb
69
+ - lib/rggen/systemverilog/rtl/bit_field/type/counter.rb
67
70
  - lib/rggen/systemverilog/rtl/bit_field/type/custom.erb
68
71
  - lib/rggen/systemverilog/rtl/bit_field/type/custom.rb
69
72
  - lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.erb
@@ -111,6 +114,8 @@ files:
111
114
  - lib/rggen/systemverilog/rtl/register/type/external.rb
112
115
  - lib/rggen/systemverilog/rtl/register/type/indirect.erb
113
116
  - lib/rggen/systemverilog/rtl/register/type/indirect.rb
117
+ - lib/rggen/systemverilog/rtl/register/type/maskable.erb
118
+ - lib/rggen/systemverilog/rtl/register/type/maskable.rb
114
119
  - lib/rggen/systemverilog/rtl/register/type/rw.erb
115
120
  - lib/rggen/systemverilog/rtl/register/type/rw.rb
116
121
  - lib/rggen/systemverilog/rtl/register_block/protocol.rb
@@ -150,14 +155,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
150
155
  requirements:
151
156
  - - ">="
152
157
  - !ruby/object:Gem::Version
153
- version: '3.1'
158
+ version: '3.2'
154
159
  required_rubygems_version: !ruby/object:Gem::Requirement
155
160
  requirements:
156
161
  - - ">="
157
162
  - !ruby/object:Gem::Version
158
163
  version: '0'
159
164
  requirements: []
160
- rubygems_version: 3.6.2
165
+ rubygems_version: 4.0.3
161
166
  specification_version: 4
162
- summary: rggen-systemverilog-0.35.1
167
+ summary: rggen-systemverilog-0.36.0
163
168
  test_files: []
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_list_item_feature(:bit_field, :type, [:rwc, :rwhw, :rws]) do
4
- sv_ral { access 'RW' }
5
- end