rggen-systemverilog 0.26.0 → 0.27.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6093eea4b475c6dddb948d2b0bb5053705cc64f38a5603c925d0ab04029e0978
4
- data.tar.gz: e2c07ce7eb68f15c9e4d2dbd0f83d7a74dbcb92ba292ba1fae8830c4ca147cb0
3
+ metadata.gz: b163ec13c4940ca6d489739aaae909dd3d189627eff20383cef519537bade127
4
+ data.tar.gz: 6bdfd55721b6e7c1a7250eed73cb5ca6ce1a2dba28d57e134b06b601397afabe
5
5
  SHA512:
6
- metadata.gz: 2d460b5eecdc50fbae20514b7f814fd98774b6dcb05ab72df2936301a9218870609eb1236b13f9a305d1882f001360eb84537b083c5323d2fde475fe170ffaed
7
- data.tar.gz: 4ea6fb47189ec224f30701198d9a51de4ab68cbc2a601b048ad23b1edcda1308214218fd456550c2e8d085c3575ab2aeec7e58c43d6337dba81111c0e8f0b07f
6
+ metadata.gz: f8327405b12e0d43ab8801772b85efd57f0a71f856f0f07efec961d97c7b70c4bacee05968303a41178201e9b90a16b289af24b23a71cb403ed5949fbeba0251
7
+ data.tar.gz: be673375b40e9d4c8241be45a4feb8ee4a09d815bc4ecd0926759f058dea021e8588b270de22408f8a34fa8cb5f50772f51addc47b3cfa60dba0c858064bccbd
data/README.md CHANGED
@@ -27,7 +27,8 @@ $ gem isntall rggen-systemverilog
27
27
 
28
28
  Feedbacks, bug reports, questions and etc. are wellcome! You can post them by using following ways:
29
29
 
30
- * [GitHub Issue Tracker](https://github.com/rggen/rggen-systemverilog/issues)
30
+ * [GitHub Issue Tracker](https://github.com/rggen/rggen/issues)
31
+ * [GitHub Discussions](https://github.com/rggen/rggen/discussions)
31
32
  * [Chat Room](https://gitter.im/rggen/rggen)
32
33
  * [Mailing List](https://groups.google.com/d/forum/rggen)
33
34
  * [Mail](mailto:rggen@googlegroups.com)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RgGen.define_list_item_feature(:bit_field, :type, [:w0trg, :w1trg]) do
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:row0trg, :row1trg, :w0trg, :w1trg]) do
4
4
  sv_ral do
5
5
  model_name { "rggen_ral_#{bit_field.type}_field" }
6
6
  end
@@ -4,35 +4,29 @@ require_relative 'common'
4
4
  require_relative 'ral/feature'
5
5
  require_relative 'ral/register_common'
6
6
 
7
- module RgGen
8
- module SystemVerilog
9
- module RAL
10
- extend Core::Plugin
7
+ RgGen.setup_plugin :'rggen-sv-ral' do |plugin|
8
+ plugin.version RgGen::SystemVerilog::VERSION
11
9
 
12
- setup_plugin :'rggen-sv-ral' do |plugin|
13
- plugin.version SystemVerilog::VERSION
14
-
15
- plugin.register_component :sv_ral do
16
- component Common::Component, Common::ComponentFactory
17
- feature Feature, Common::FeatureFactory
18
- end
19
-
20
- plugin.files [
21
- 'ral/bit_field/type',
22
- 'ral/bit_field/type/rof',
23
- 'ral/bit_field/type/rotrg_rwtrg_wotrg',
24
- 'ral/bit_field/type/rowo_rowotrg',
25
- 'ral/bit_field/type/rwc_rws',
26
- 'ral/bit_field/type/rwe_rwl',
27
- 'ral/bit_field/type/w0trg_w1trg',
28
- 'ral/register/type',
29
- 'ral/register/type/external',
30
- 'ral/register/type/indirect',
31
- 'ral/register_block/sv_ral_model',
32
- 'ral/register_block/sv_ral_package',
33
- 'ral/register_file/sv_ral_model'
34
- ]
35
- end
36
- end
10
+ plugin.register_component :sv_ral do
11
+ component RgGen::SystemVerilog::Common::Component,
12
+ RgGen::SystemVerilog::Common::ComponentFactory
13
+ feature RgGen::SystemVerilog::RAL::Feature,
14
+ RgGen::SystemVerilog::Common::FeatureFactory
37
15
  end
16
+
17
+ plugin.files [
18
+ 'ral/register_block/sv_ral_package',
19
+ 'ral/register_block/sv_ral_model',
20
+ 'ral/register_file/sv_ral_model',
21
+ 'ral/register/type',
22
+ 'ral/register/type/external',
23
+ 'ral/register/type/indirect',
24
+ 'ral/bit_field/type',
25
+ 'ral/bit_field/type/rof',
26
+ 'ral/bit_field/type/rotrg_rwtrg_wotrg',
27
+ 'ral/bit_field/type/row0trg_row1trg_w0trg_w1trg',
28
+ 'ral/bit_field/type/rowo_rowotrg',
29
+ 'ral/bit_field/type/rwc_rws',
30
+ 'ral/bit_field/type/rwe_rwl'
31
+ ]
38
32
  end
@@ -36,10 +36,6 @@ RgGen.define_simple_feature(:bit_field, :sv_rtl_top) do
36
36
  end
37
37
  end
38
38
 
39
- pre_code :bit_field do |code|
40
- code << bit_field_if_connection << nl
41
- end
42
-
43
39
  def value(offsets = nil, width = nil)
44
40
  value_lsb = bit_field.lsb(offsets&.last || local_index)
45
41
  value_width = width || bit_field.width
@@ -113,17 +109,5 @@ RgGen.define_simple_feature(:bit_field, :sv_rtl_top) do
113
109
  def body_code(code)
114
110
  bit_field.generate_code(code, :bit_field, :top_down)
115
111
  end
116
-
117
- def bit_field_if_connection
118
- macro_call(
119
- 'rggen_connect_bit_field_if',
120
- [
121
- register.bit_field_if,
122
- bit_field.bit_field_sub_if,
123
- bit_field.lsb(local_index),
124
- bit_field.width
125
- ]
126
- )
127
- end
128
112
  end
129
113
  end
@@ -0,0 +1,10 @@
1
+ rggen_bit_field_w01trg #(
2
+ .TRIGGER_VALUE (<%= trigger_value %>),
3
+ .WIDTH (<%= width %>)
4
+ ) u_bit_field (
5
+ .i_clk (<%= clock %>),
6
+ .i_rst_n (<%= reset %>),
7
+ .bit_field_if (<%= bit_field_if %>),
8
+ .i_value (<%= reference_or_value_in %>),
9
+ .o_trigger (<%= trigger[loop_variables] %>)
10
+ );
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:row0trg, :row1trg]) do
4
+ sv_rtl do
5
+ build do
6
+ unless bit_field.reference?
7
+ input :value_in, {
8
+ name: "i_#{full_name}", width: width,
9
+ array_size: array_size, array_format: array_port_format
10
+ }
11
+ end
12
+ output :trigger, {
13
+ name: "o_#{full_name}_trigger", width: width,
14
+ array_size: array_size, array_format: array_port_format
15
+ }
16
+ end
17
+
18
+ main_code :bit_field, from_template: true
19
+
20
+ private
21
+
22
+ def trigger_value
23
+ bin({ row0trg: 0, row1trg: 1 }[bit_field.type], 1)
24
+ end
25
+
26
+ def reference_or_value_in
27
+ reference_bit_field || value_in[loop_variables]
28
+ end
29
+ end
30
+ end
@@ -5,5 +5,6 @@ rggen_bit_field_w01trg #(
5
5
  .i_clk (<%= clock %>),
6
6
  .i_rst_n (<%= reset %>),
7
7
  .bit_field_if (<%= bit_field_if %>),
8
+ .i_value ('0),
8
9
  .o_trigger (<%= trigger[loop_variables] %>)
9
10
  );
@@ -3,6 +3,10 @@
3
3
  RgGen.define_list_feature(:bit_field, :type) do
4
4
  sv_rtl do
5
5
  base_feature do
6
+ pre_code :bit_field do |code|
7
+ code << bit_field_if_connection << nl
8
+ end
9
+
6
10
  private
7
11
 
8
12
  def array_port_format
@@ -17,6 +21,10 @@ RgGen.define_list_feature(:bit_field, :type) do
17
21
  bit_field.width
18
22
  end
19
23
 
24
+ def lsb
25
+ bit_field.lsb(bit_field.local_index)
26
+ end
27
+
20
28
  def clock
21
29
  register_block.clock
22
30
  end
@@ -52,6 +60,13 @@ RgGen.define_list_feature(:bit_field, :type) do
52
60
  def loop_variables
53
61
  bit_field.loop_variables
54
62
  end
63
+
64
+ def bit_field_if_connection
65
+ macro_call(
66
+ 'rggen_connect_bit_field_if',
67
+ [register.bit_field_if, bit_field_if, lsb, width]
68
+ )
69
+ end
55
70
  end
56
71
 
57
72
  factory do
@@ -5,7 +5,6 @@ rggen_default_register #(
5
5
  .OFFSET_ADDRESS (<%= offset_address %>),
6
6
  .BUS_WIDTH (<%= bus_width %>),
7
7
  .DATA_WIDTH (<%= width %>),
8
- .VALID_BITS (<%= valid_bits %>),
9
8
  .REGISTER_INDEX (<%= register_index %>)
10
9
  ) u_register (
11
10
  .i_clk (<%= register_block.clock %>),
@@ -5,7 +5,6 @@ rggen_indirect_register #(
5
5
  .OFFSET_ADDRESS (<%= offset_address %>),
6
6
  .BUS_WIDTH (<%= bus_width %>),
7
7
  .DATA_WIDTH (<%= width %>),
8
- .VALID_BITS (<%= valid_bits %>),
9
8
  .INDIRECT_INDEX_WIDTH (<%= index_width %>),
10
9
  .INDIRECT_INDEX_VALUE (<%= concat(index_values) %>)
11
10
  ) u_register (
@@ -5,6 +5,11 @@ RgGen.define_list_feature(:register, :type) do
5
5
  base_feature do
6
6
  include RgGen::SystemVerilog::RTL::RegisterType
7
7
 
8
+ pre_code :register do |code|
9
+ register.bit_fields.empty? ||
10
+ (code << tie_off_unused_signals << nl)
11
+ end
12
+
8
13
  private
9
14
 
10
15
  def register_if
@@ -14,6 +19,13 @@ RgGen.define_list_feature(:register, :type) do
14
19
  def bit_field_if
15
20
  register.bit_field_if
16
21
  end
22
+
23
+ def tie_off_unused_signals
24
+ macro_call(
25
+ 'rggen_tie_off_unused_signals',
26
+ [width, valid_bits, bit_field_if]
27
+ )
28
+ end
17
29
  end
18
30
 
19
31
  default_feature do
@@ -8,7 +8,8 @@ RgGen.define_list_feature(:register_block, :protocol) do
8
8
 
9
9
  def available_protocols
10
10
  feature_registries
11
- .map(&method(:collect_available_protocols)).inject(:&)
11
+ .map { |registry| registry.enabled_features(:protocol) }
12
+ .inject(:&)
12
13
  end
13
14
 
14
15
  private
@@ -7,3 +7,15 @@
7
7
  assign RIF.read_data[LSB+:WIDTH] = FIF.read_data; \
8
8
  assign RIF.value[LSB+:WIDTH] = FIF.value;
9
9
  `endif
10
+ `ifndef rggen_tie_off_unused_signals
11
+ `define rggen_tie_off_unused_signals(WIDTH, VALID_BITS, RIF) \
12
+ if (1) begin : __g_tie_off \
13
+ genvar __i; \
14
+ for (__i = 0;__i < WIDTH;++__i) begin : g \
15
+ if (!(((VALID_BITS) >> __i) & 1'b1)) begin : g \
16
+ assign RIF.read_data[__i] = 1'b0; \
17
+ assign RIF.value[__i] = 1'b0; \
18
+ end \
19
+ end \
20
+ end
21
+ `endif
@@ -8,49 +8,44 @@ require_relative 'rtl/register_type'
8
8
  require_relative 'rtl/indirect_index'
9
9
  require_relative 'rtl/bit_field_index'
10
10
 
11
- module RgGen
12
- module SystemVerilog
13
- module RTL
14
- extend Core::Plugin
11
+ RgGen.setup_plugin :'rggen-sv-rtl' do |plugin|
12
+ plugin.version RgGen::SystemVerilog::VERSION
15
13
 
16
- setup_plugin :'rggen-sv-rtl' do |plugin|
17
- plugin.version SystemVerilog::VERSION
18
-
19
- plugin.register_component :sv_rtl do
20
- component Common::Component, Common::ComponentFactory
21
- feature Feature, Common::FeatureFactory
22
- end
23
-
24
- plugin.files [
25
- 'rtl/bit_field/sv_rtl_top',
26
- 'rtl/bit_field/type',
27
- 'rtl/bit_field/type/rc_w0c_w1c_wc_woc',
28
- 'rtl/bit_field/type/ro_rotrg',
29
- 'rtl/bit_field/type/rof',
30
- 'rtl/bit_field/type/rowo_rowotrg',
31
- 'rtl/bit_field/type/rs_w0s_w1s_ws_wos',
32
- 'rtl/bit_field/type/rw_rwtrg_w1',
33
- 'rtl/bit_field/type/rwc',
34
- 'rtl/bit_field/type/rwe_rwl',
35
- 'rtl/bit_field/type/rws',
36
- 'rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc',
37
- 'rtl/bit_field/type/w0t_w1t',
38
- 'rtl/bit_field/type/w0trg_w1trg',
39
- 'rtl/bit_field/type/wo_wo1_wotrg',
40
- 'rtl/bit_field/type/wrc_wrs',
41
- 'rtl/global/array_port_format',
42
- 'rtl/register/sv_rtl_top',
43
- 'rtl/register/type',
44
- 'rtl/register/type/external',
45
- 'rtl/register/type/indirect',
46
- 'rtl/register_block/protocol',
47
- 'rtl/register_block/protocol/apb',
48
- 'rtl/register_block/protocol/axi4lite',
49
- 'rtl/register_block/protocol/wishbone',
50
- 'rtl/register_block/sv_rtl_top',
51
- 'rtl/register_file/sv_rtl_top'
52
- ]
53
- end
54
- end
14
+ plugin.register_component :sv_rtl do
15
+ component RgGen::SystemVerilog::Common::Component,
16
+ RgGen::SystemVerilog::Common::ComponentFactory
17
+ feature RgGen::SystemVerilog::RTL::Feature,
18
+ RgGen::SystemVerilog::Common::FeatureFactory
55
19
  end
20
+
21
+ plugin.files [
22
+ 'rtl/global/array_port_format',
23
+ 'rtl/register_block/sv_rtl_top',
24
+ 'rtl/register_block/protocol',
25
+ 'rtl/register_block/protocol/apb',
26
+ 'rtl/register_block/protocol/axi4lite',
27
+ 'rtl/register_block/protocol/wishbone',
28
+ 'rtl/register_file/sv_rtl_top',
29
+ 'rtl/register/sv_rtl_top',
30
+ 'rtl/register/type',
31
+ 'rtl/register/type/external',
32
+ 'rtl/register/type/indirect',
33
+ 'rtl/bit_field/sv_rtl_top',
34
+ 'rtl/bit_field/type',
35
+ 'rtl/bit_field/type/rc_w0c_w1c_wc_woc',
36
+ 'rtl/bit_field/type/ro_rotrg',
37
+ 'rtl/bit_field/type/rof',
38
+ 'rtl/bit_field/type/row0trg_row1trg',
39
+ 'rtl/bit_field/type/rowo_rowotrg',
40
+ 'rtl/bit_field/type/rs_w0s_w1s_ws_wos',
41
+ 'rtl/bit_field/type/rw_rwtrg_w1',
42
+ 'rtl/bit_field/type/rwc',
43
+ 'rtl/bit_field/type/rwe_rwl',
44
+ 'rtl/bit_field/type/rws',
45
+ 'rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc',
46
+ 'rtl/bit_field/type/w0t_w1t',
47
+ 'rtl/bit_field/type/w0trg_w1trg',
48
+ 'rtl/bit_field/type/wo_wo1_wotrg',
49
+ 'rtl/bit_field/type/wrc_wrs'
50
+ ]
56
51
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module SystemVerilog
5
- VERSION = '0.26.0'
5
+ VERSION = '0.27.1'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-systemverilog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.26.0
4
+ version: 0.27.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-25 00:00:00.000000000 Z
11
+ date: 2022-08-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -57,10 +57,10 @@ files:
57
57
  - lib/rggen/systemverilog/ral/bit_field/type.rb
58
58
  - lib/rggen/systemverilog/ral/bit_field/type/rof.rb
59
59
  - lib/rggen/systemverilog/ral/bit_field/type/rotrg_rwtrg_wotrg.rb
60
+ - lib/rggen/systemverilog/ral/bit_field/type/row0trg_row1trg_w0trg_w1trg.rb
60
61
  - lib/rggen/systemverilog/ral/bit_field/type/rowo_rowotrg.rb
61
62
  - lib/rggen/systemverilog/ral/bit_field/type/rwc_rws.rb
62
63
  - lib/rggen/systemverilog/ral/bit_field/type/rwe_rwl.rb
63
- - lib/rggen/systemverilog/ral/bit_field/type/w0trg_w1trg.rb
64
64
  - lib/rggen/systemverilog/ral/feature.rb
65
65
  - lib/rggen/systemverilog/ral/register/type.rb
66
66
  - lib/rggen/systemverilog/ral/register/type/default.erb
@@ -73,7 +73,6 @@ files:
73
73
  - lib/rggen/systemverilog/ral/register_common.rb
74
74
  - lib/rggen/systemverilog/ral/register_file/sv_ral_model.erb
75
75
  - lib/rggen/systemverilog/ral/register_file/sv_ral_model.rb
76
- - lib/rggen/systemverilog/ral/setup.rb
77
76
  - lib/rggen/systemverilog/rtl.rb
78
77
  - lib/rggen/systemverilog/rtl/bit_field/sv_rtl_top.rb
79
78
  - lib/rggen/systemverilog/rtl/bit_field/type.rb
@@ -83,6 +82,8 @@ files:
83
82
  - lib/rggen/systemverilog/rtl/bit_field/type/ro_rotrg.rb
84
83
  - lib/rggen/systemverilog/rtl/bit_field/type/rof.erb
85
84
  - lib/rggen/systemverilog/rtl/bit_field/type/rof.rb
85
+ - lib/rggen/systemverilog/rtl/bit_field/type/row0trg_row1trg.erb
86
+ - lib/rggen/systemverilog/rtl/bit_field/type/row0trg_row1trg.rb
86
87
  - lib/rggen/systemverilog/rtl/bit_field/type/rowo_rowotrg.erb
87
88
  - lib/rggen/systemverilog/rtl/bit_field/type/rowo_rowotrg.rb
88
89
  - lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos.erb
@@ -129,13 +130,12 @@ files:
129
130
  - lib/rggen/systemverilog/rtl/register_file/sv_rtl_top.rb
130
131
  - lib/rggen/systemverilog/rtl/register_index.rb
131
132
  - lib/rggen/systemverilog/rtl/register_type.rb
132
- - lib/rggen/systemverilog/rtl/setup.rb
133
133
  - lib/rggen/systemverilog/version.rb
134
134
  homepage: https://github.com/rggen/rggen-systemverilog
135
135
  licenses:
136
136
  - MIT
137
137
  metadata:
138
- bug_tracker_uri: https://github.com/rggen/rggen-systemverilog/issues
138
+ bug_tracker_uri: https://github.com/rggen/rggen/issues
139
139
  mailing_list_uri: https://groups.google.com/d/forum/rggen
140
140
  rubygems_mfa_required: 'true'
141
141
  source_code_uri: https://github.com/rggen/rggen-systemverilog
@@ -155,8 +155,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
155
155
  - !ruby/object:Gem::Version
156
156
  version: '0'
157
157
  requirements: []
158
- rubygems_version: 3.3.3
158
+ rubygems_version: 3.3.7
159
159
  signing_key:
160
160
  specification_version: 4
161
- summary: rggen-systemverilog-0.26.0
161
+ summary: rggen-systemverilog-0.27.1
162
162
  test_files: []
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rggen/systemverilog/ral'
4
-
5
- RgGen.register_plugin RgGen::SystemVerilog::RAL do |builder|
6
- builder.enable :register_block, [:sv_ral_model, :sv_ral_package]
7
- builder.enable :register_file, [:sv_ral_model]
8
- end
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rggen/systemverilog/rtl'
4
-
5
- RgGen.register_plugin RgGen::SystemVerilog::RTL do |builder|
6
- builder.enable :global, [:array_port_format]
7
- builder.enable :register_block, [:sv_rtl_top, :protocol]
8
- builder.enable :register_block, :protocol, [:apb, :axi4lite, :wishbone]
9
- builder.enable :register_file, [:sv_rtl_top]
10
- builder.enable :register, [:sv_rtl_top]
11
- builder.enable :bit_field, [:sv_rtl_top]
12
- end