rggen-systemverilog 0.23.1 → 0.24.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +1 -1
  4. data/lib/rggen/systemverilog/common.rb +0 -22
  5. data/lib/rggen/systemverilog/common/feature.rb +2 -2
  6. data/lib/rggen/systemverilog/common/utility.rb +4 -0
  7. data/lib/rggen/systemverilog/ral.rb +20 -28
  8. data/lib/rggen/systemverilog/ral/bit_field/type.rb +1 -1
  9. data/lib/rggen/systemverilog/ral/setup.rb +1 -1
  10. data/lib/rggen/systemverilog/rtl.rb +36 -45
  11. data/lib/rggen/systemverilog/rtl/bit_field/type.rb +1 -2
  12. data/lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.erb +17 -14
  13. data/lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.rb +19 -9
  14. data/lib/rggen/systemverilog/rtl/bit_field/type/reserved.erb +17 -2
  15. data/lib/rggen/systemverilog/rtl/bit_field/type/ro.erb +15 -4
  16. data/lib/rggen/systemverilog/rtl/bit_field/type/rof.erb +15 -4
  17. data/lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos.erb +17 -12
  18. data/lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos.rb +18 -7
  19. data/lib/rggen/systemverilog/rtl/bit_field/type/rw_w1_wo_wo1.erb +15 -7
  20. data/lib/rggen/systemverilog/rtl/bit_field/type/rw_w1_wo_wo1.rb +2 -2
  21. data/lib/rggen/systemverilog/rtl/bit_field/type/rwc.erb +15 -7
  22. data/lib/rggen/systemverilog/rtl/bit_field/type/rwe.erb +16 -8
  23. data/lib/rggen/systemverilog/rtl/bit_field/type/rwl.erb +16 -8
  24. data/lib/rggen/systemverilog/rtl/bit_field/type/rws.erb +13 -7
  25. data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.erb +19 -0
  26. data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.rb +37 -0
  27. data/lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.erb +16 -8
  28. data/lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.rb +5 -2
  29. data/lib/rggen/systemverilog/rtl/bit_field/type/wrc_wrs.erb +15 -6
  30. data/lib/rggen/systemverilog/rtl/bit_field/type/wrc_wrs.rb +9 -0
  31. data/lib/rggen/systemverilog/rtl/register_block/protocol/axi4lite.rb +29 -27
  32. data/lib/rggen/systemverilog/rtl/setup.rb +1 -1
  33. data/lib/rggen/systemverilog/version.rb +1 -1
  34. metadata +6 -22
  35. data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs_wcrs.erb +0 -10
  36. data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs_wcrs.rb +0 -21
  37. data/lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src_wsrc.erb +0 -10
  38. data/lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src_wsrc.rb +0 -21
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0674114b0b928f20b2d1cb809eddac46617f4386d35dd4ef44de793817943fd1
4
- data.tar.gz: e8afca21a640eff2ce8f6cfc8058b9b96e87bba16351335c610e01e78a28fe91
3
+ metadata.gz: 2cfff9e2a346d5c02dc5a6401e8b36fdd15d20b9d4d4030b5fcc56880521ccd4
4
+ data.tar.gz: 75bd4c611fa964f30df059fe39d547daf688322ed1076654744381dc38a67068
5
5
  SHA512:
6
- metadata.gz: 52b28ccde37f6a73d570cd7b27fdf6e58c33622c8dce631915c200c272063b19e8c6a513fa286cc6017b96bab8579ac1c6a66d96bf937f45d730cdfa24613e27
7
- data.tar.gz: daa6d28c95470347433adb1853e1d78c1b28b19722275e1e21523bfe13d19621753d0c11b454e97643fc189b48cfd717d3292beb7003b44a1220ae2c0eeb0cff
6
+ metadata.gz: 3c5e0b0b5c3352532161411d2ce6e8ca8728231377c7453953a1c1804b8c08bd134ba487264d7a63c192744278184de7923f598dfbde80096a41b6040467af45
7
+ data.tar.gz: 37a27563ccee405d16d2778728e186331bdb9a7711b73d017eb1bf3fd4479000c2bf54621dbab43b903897755a05026a3c7ae25cb68b1624cef63a250bf3eda0
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2019-2020 Taichi Ishitani
3
+ Copyright (c) 2019-2021 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
@@ -34,7 +34,7 @@ Feedbacks, bug reports, questions and etc. are wellcome! You can post them by us
34
34
 
35
35
  ## Copyright & License
36
36
 
37
- Copyright © 2019-2020 Taichi Ishitani. RgGen::SystemVerilog is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
37
+ Copyright © 2019-2021 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
 
@@ -1,6 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'docile'
4
3
  require 'facets/kernel/attr_singleton'
5
4
 
6
5
  require_relative 'version'
@@ -21,24 +20,3 @@ require_relative 'common/utility'
21
20
  require_relative 'common/component'
22
21
  require_relative 'common/feature'
23
22
  require_relative 'common/factories'
24
-
25
- module RgGen
26
- module SystemVerilog
27
- module Common
28
- def self.register_component(builder, name, feature_class)
29
- builder.output_component_registry(name) do
30
- register_component [
31
- :root, :register_block, :register_file, :register, :bit_field
32
- ] do |category|
33
- component Component, ComponentFactory
34
- feature feature_class, FeatureFactory if category != :root
35
- end
36
- end
37
- end
38
-
39
- def self.load_features(features, root)
40
- features.each { |feature| require File.join(root, feature) }
41
- end
42
- end
43
- end
44
- end
@@ -8,7 +8,7 @@ module RgGen
8
8
  template_engine Core::OutputBase::ERBEngine
9
9
 
10
10
  EntityContext =
11
- Struct.new(:entity_type, :method, :declaration_type, :default_layer)
11
+ Struct.new(:entity_type, :method_name, :declaration_type, :default_layer)
12
12
 
13
13
  class << self
14
14
  private
@@ -58,7 +58,7 @@ module RgGen
58
58
 
59
59
  def create_entity(context, name, attributes, &block)
60
60
  merged_attributes = { name: name }.merge(Hash(attributes))
61
- __send__(context.method, context.entity_type, merged_attributes, &block)
61
+ __send__(context.method_name, context.entity_type, merged_attributes, &block)
62
62
  end
63
63
 
64
64
  def add_entity(context, entity, name, layer)
@@ -45,6 +45,10 @@ module RgGen
45
45
  end
46
46
  end
47
47
 
48
+ def all_bits_1
49
+ "'1"
50
+ end
51
+
48
52
  def all_bits_0
49
53
  "'0"
50
54
  end
@@ -7,37 +7,29 @@ require_relative 'ral/register_common'
7
7
  module RgGen
8
8
  module SystemVerilog
9
9
  module RAL
10
- PLUGIN_NAME = :'rggen-sv-ral'
10
+ extend Core::Plugin
11
11
 
12
- FEATURES = [
13
- 'ral/bit_field/type',
14
- 'ral/bit_field/type/reserved_rof',
15
- 'ral/bit_field/type/rwc_rws',
16
- 'ral/bit_field/type/rwe_rwl',
17
- 'ral/bit_field/type/w0trg_w1trg',
18
- 'ral/register/type',
19
- 'ral/register/type/external',
20
- 'ral/register/type/indirect',
21
- 'ral/register_block/sv_ral_model',
22
- 'ral/register_block/sv_ral_package',
23
- 'ral/register_file/sv_ral_model'
24
- ].freeze
12
+ setup_plugin :'rggen-sv-ral' do |plugin|
13
+ plugin.version SystemVerilog::VERSION
25
14
 
26
- def self.version
27
- SystemVerilog::VERSION
28
- end
29
-
30
- def self.register_component(builder)
31
- Common.register_component(builder, :sv_ral, Feature)
32
- end
33
-
34
- def self.load_features
35
- Common.load_features(FEATURES, __dir__)
36
- end
15
+ plugin.register_component :sv_ral do
16
+ component Common::Component, Common::ComponentFactory
17
+ feature Feature, Common::FeatureFactory
18
+ end
37
19
 
38
- def self.default_setup(builder)
39
- register_component(builder)
40
- load_features
20
+ plugin.files [
21
+ 'ral/bit_field/type',
22
+ 'ral/bit_field/type/reserved_rof',
23
+ 'ral/bit_field/type/rwc_rws',
24
+ 'ral/bit_field/type/rwe_rwl',
25
+ 'ral/bit_field/type/w0trg_w1trg',
26
+ 'ral/register/type',
27
+ 'ral/register/type/external',
28
+ 'ral/register/type/indirect',
29
+ 'ral/register_block/sv_ral_model',
30
+ 'ral/register_block/sv_ral_package',
31
+ 'ral/register_file/sv_ral_model'
32
+ ]
41
33
  end
42
34
  end
43
35
  end
@@ -29,7 +29,7 @@ RgGen.define_list_feature(:bit_field, :type) do
29
29
 
30
30
  def model_name
31
31
  name = helper.model_name
32
- name&.is_a?(Proc) && instance_eval(&name) || name || :rggen_ral_field
32
+ name.is_a?(Proc) && instance_eval(&name) || name || :rggen_ral_field
33
33
  end
34
34
 
35
35
  def constructors
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'rggen/systemverilog/ral'
4
4
 
5
- RgGen.setup RgGen::SystemVerilog::RAL do |builder|
5
+ RgGen.register_plugin RgGen::SystemVerilog::RAL do |builder|
6
6
  builder.enable :register_block, [:sv_ral_model, :sv_ral_package]
7
7
  builder.enable :register_file, [:sv_ral_model]
8
8
  end
@@ -11,54 +11,45 @@ require_relative 'rtl/bit_field_index'
11
11
  module RgGen
12
12
  module SystemVerilog
13
13
  module RTL
14
- PLUGIN_NAME = :'rggen-sv-rtl'
14
+ extend Core::Plugin
15
15
 
16
- FEATURES = [
17
- 'rtl/bit_field/sv_rtl_top',
18
- 'rtl/bit_field/type',
19
- 'rtl/bit_field/type/rc_w0c_w1c_wc_woc',
20
- 'rtl/bit_field/type/reserved',
21
- 'rtl/bit_field/type/ro',
22
- 'rtl/bit_field/type/rof',
23
- 'rtl/bit_field/type/rs_w0s_w1s_ws_wos',
24
- 'rtl/bit_field/type/rw_w1_wo_wo1',
25
- 'rtl/bit_field/type/rwc',
26
- 'rtl/bit_field/type/rwe',
27
- 'rtl/bit_field/type/rwl',
28
- 'rtl/bit_field/type/rws',
29
- 'rtl/bit_field/type/w0crs_w1crs_wcrs',
30
- 'rtl/bit_field/type/w0src_w1src_wsrc',
31
- 'rtl/bit_field/type/w0t_w1t',
32
- 'rtl/bit_field/type/w0trg_w1trg',
33
- 'rtl/bit_field/type/wrc_wrs',
34
- 'rtl/global/array_port_format',
35
- 'rtl/global/fold_sv_interface_port',
36
- 'rtl/register/sv_rtl_top',
37
- 'rtl/register/type',
38
- 'rtl/register/type/external',
39
- 'rtl/register/type/indirect',
40
- 'rtl/register_block/protocol',
41
- 'rtl/register_block/protocol/apb',
42
- 'rtl/register_block/protocol/axi4lite',
43
- 'rtl/register_block/sv_rtl_top',
44
- 'rtl/register_file/sv_rtl_top'
45
- ].freeze
16
+ setup_plugin :'rggen-sv-rtl' do |plugin|
17
+ plugin.version SystemVerilog::VERSION
46
18
 
47
- def self.version
48
- SystemVerilog::VERSION
49
- end
50
-
51
- def self.register_component(builder)
52
- Common.register_component(builder, :sv_rtl, Feature)
53
- end
54
-
55
- def self.load_features
56
- Common.load_features(FEATURES, __dir__)
57
- end
19
+ plugin.register_component :sv_rtl do
20
+ component Common::Component, Common::ComponentFactory
21
+ feature Feature, Common::FeatureFactory
22
+ end
58
23
 
59
- def self.default_setup(builder)
60
- register_component(builder)
61
- load_features
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/reserved',
29
+ 'rtl/bit_field/type/ro',
30
+ 'rtl/bit_field/type/rof',
31
+ 'rtl/bit_field/type/rs_w0s_w1s_ws_wos',
32
+ 'rtl/bit_field/type/rw_w1_wo_wo1',
33
+ 'rtl/bit_field/type/rwc',
34
+ 'rtl/bit_field/type/rwe',
35
+ 'rtl/bit_field/type/rwl',
36
+ 'rtl/bit_field/type/rws',
37
+ 'rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc',
38
+ 'rtl/bit_field/type/w0t_w1t',
39
+ 'rtl/bit_field/type/w0trg_w1trg',
40
+ 'rtl/bit_field/type/wrc_wrs',
41
+ 'rtl/global/array_port_format',
42
+ 'rtl/global/fold_sv_interface_port',
43
+ 'rtl/register/sv_rtl_top',
44
+ 'rtl/register/type',
45
+ 'rtl/register/type/external',
46
+ 'rtl/register/type/indirect',
47
+ 'rtl/register_block/protocol',
48
+ 'rtl/register_block/protocol/apb',
49
+ 'rtl/register_block/protocol/axi4lite',
50
+ 'rtl/register_block/sv_rtl_top',
51
+ 'rtl/register_file/sv_rtl_top'
52
+ ]
62
53
  end
63
54
  end
64
55
  end
@@ -35,8 +35,7 @@ RgGen.define_list_feature(:bit_field, :type) do
35
35
  end
36
36
 
37
37
  def mask
38
- reference_bit_field ||
39
- hex(2**bit_field.width - 1, bit_field.width)
38
+ reference_bit_field || all_bits_1
40
39
  end
41
40
 
42
41
  def reference_bit_field
@@ -1,16 +1,19 @@
1
- <%= module_name %> #(
2
- <% if bit_field.type != :rc %>
3
- .CLEAR_VALUE (<%= clear_value %>),
4
- .WRITE_ONLY (<%= write_only %>),
5
- <% end %>
6
- .WIDTH (<%= width %>),
7
- .INITIAL_VALUE (<%= initial_value %>)
1
+ rggen_bit_field #(
2
+ .WIDTH (<%= width %>),
3
+ .INITIAL_VALUE (<%= initial_value %>),
4
+ .SW_READ_ACTION (<%= read_action %>),
5
+ .SW_WRITE_ACTION (<%= write_action %>)
8
6
  ) u_bit_field (
9
- .i_clk (<%= clock %>),
10
- .i_rst_n (<%= reset%>),
11
- .bit_field_if (<%= bit_field_if %>),
12
- .i_set (<%= set[loop_variables] %>),
13
- .i_mask (<%= mask %>),
14
- .o_value (<%= value_out[loop_variables] %>),
15
- .o_value_unmasked (<%= value_out_unmasked %>)
7
+ .i_clk (<%= clock %>),
8
+ .i_rst_n (<%= reset %>),
9
+ .bit_field_if (<%= bit_field_if %>),
10
+ .i_sw_write_enable (<%= write_enable %>),
11
+ .i_hw_write_enable ('0),
12
+ .i_hw_write_data ('0),
13
+ .i_hw_set (<%= set[loop_variables] %>),
14
+ .i_hw_clear ('0),
15
+ .i_value ('0),
16
+ .i_mask (<%= mask %>),
17
+ .o_value (<%= value_out[loop_variables] %>),
18
+ .o_value_unmasked (<%= value_out_unmasked %>)
16
19
  );
@@ -23,22 +23,32 @@ RgGen.define_list_item_feature(:bit_field, :type, [:rc, :w0c, :w1c, :wc, :woc])
23
23
 
24
24
  private
25
25
 
26
- def module_name
27
- bit_field.type == :rc && 'rggen_bit_field_rc' || 'rggen_bit_field_w01c_wc_woc'
26
+ def read_action
27
+ {
28
+ rc: 'RGGEN_READ_CLEAR',
29
+ w0c: 'RGGEN_READ_DEFAULT',
30
+ w1c: 'RGGEN_READ_DEFAULT',
31
+ wc: 'RGGEN_READ_DEFAULT',
32
+ woc: 'RGGEN_READ_NONE'
33
+ }[bit_field.type]
28
34
  end
29
35
 
30
- def clear_value
31
- value = { w0c: 0b00, w1c: 0b01, wc: 0b10, woc: 0b10 }[bit_field.type]
32
- bin(value, 2)
36
+ def write_action
37
+ {
38
+ rc: 'RGGEN_WRITE_NONE',
39
+ w0c: 'RGGEN_WRITE_0_CLEAR',
40
+ w1c: 'RGGEN_WRITE_1_CLEAR',
41
+ wc: 'RGGEN_WRITE_CLEAR',
42
+ woc: 'RGGEN_WRITE_CLEAR'
43
+ }[bit_field.type]
33
44
  end
34
45
 
35
- def write_only
36
- bit_field.write_only? && 1 || 0
46
+ def write_enable
47
+ bit_field.writable? && all_bits_1 || all_bits_0
37
48
  end
38
49
 
39
50
  def value_out_unmasked
40
- (bit_field.reference? || nil) &&
41
- value_unmasked[loop_variables]
51
+ (bit_field.reference? || nil) && value_unmasked[loop_variables]
42
52
  end
43
53
  end
44
54
  end
@@ -1,3 +1,18 @@
1
- rggen_bit_field_reserved u_bit_field (
2
- .bit_field_if (<%= bit_field_if %>)
1
+ rggen_bit_field #(
2
+ .WIDTH (<%= width %>),
3
+ .SW_READ_ACTION (RGGEN_READ_NONE),
4
+ .STORAGE (0)
5
+ ) u_bit_field (
6
+ .i_clk ('0),
7
+ .i_rst_n ('0),
8
+ .bit_field_if (<%= bit_field_if %>),
9
+ .i_sw_write_enable ('0),
10
+ .i_hw_write_enable ('0),
11
+ .i_hw_write_data ('0),
12
+ .i_hw_set ('0),
13
+ .i_hw_clear ('0),
14
+ .i_value ('0),
15
+ .i_mask ('0),
16
+ .o_value (),
17
+ .o_value_unmasked ()
3
18
  );
@@ -1,6 +1,17 @@
1
- rggen_bit_field_ro #(
2
- .WIDTH (<%= width %>)
1
+ rggen_bit_field #(
2
+ .WIDTH (<%= width %>),
3
+ .STORAGE (0)
3
4
  ) u_bit_field (
4
- .bit_field_if (<%= bit_field_if %>),
5
- .i_value (<%= reference_or_value_in %>)
5
+ .i_clk ('0),
6
+ .i_rst_n ('0),
7
+ .bit_field_if (<%= bit_field_if %>),
8
+ .i_sw_write_enable ('0),
9
+ .i_hw_write_enable ('0),
10
+ .i_hw_write_data ('0),
11
+ .i_hw_set ('0),
12
+ .i_hw_clear ('0),
13
+ .i_value (<%= reference_or_value_in %>),
14
+ .i_mask ('1),
15
+ .o_value (),
16
+ .o_value_unmasked ()
6
17
  );
@@ -1,6 +1,17 @@
1
- rggen_bit_field_ro #(
2
- .WIDTH (<%= width %>)
1
+ rggen_bit_field #(
2
+ .WIDTH (<%= width %>),
3
+ .STORAGE (0)
3
4
  ) u_bit_field (
4
- .bit_field_if (<%= bit_field_if %>),
5
- .i_value (<%= initial_value %>)
5
+ .i_clk ('0),
6
+ .i_rst_n ('0),
7
+ .bit_field_if (<%= bit_field_if %>),
8
+ .i_sw_write_enable ('0),
9
+ .i_hw_write_enable ('0),
10
+ .i_hw_write_data ('0),
11
+ .i_hw_set ('0),
12
+ .i_hw_clear ('0),
13
+ .i_value (<%= initial_value %>),
14
+ .i_mask ('1),
15
+ .o_value (),
16
+ .o_value_unmasked ()
6
17
  );
@@ -1,14 +1,19 @@
1
- <%= module_name %> #(
2
- <% if bit_field.type != :rs %>
3
- .SET_VALUE (<%= set_value %>),
4
- .WRITE_ONLY (<%= write_only %>),
5
- <% end %>
6
- .WIDTH (<%= width %>),
7
- .INITIAL_VALUE (<%= initial_value %>)
1
+ rggen_bit_field #(
2
+ .WIDTH (<%= width %>),
3
+ .INITIAL_VALUE (<%= initial_value %>),
4
+ .SW_READ_ACTION (<%= read_action %>),
5
+ .SW_WRITE_ACTION (<%= write_action %>)
8
6
  ) u_bit_field (
9
- .i_clk (<%= clock %>),
10
- .i_rst_n (<%= reset %>),
11
- .bit_field_if (<%= bit_field_if %>),
12
- .i_clear (<%= clear[loop_variables] %>),
13
- .o_value (<%= value_out[loop_variables] %>)
7
+ .i_clk (<%= clock %>),
8
+ .i_rst_n (<%= reset %>),
9
+ .bit_field_if (<%= bit_field_if %>),
10
+ .i_sw_write_enable (<%= write_enable %>),
11
+ .i_hw_write_enable ('0),
12
+ .i_hw_write_data ('0),
13
+ .i_hw_set ('0),
14
+ .i_hw_clear (<%= clear[loop_variables] %>),
15
+ .i_value ('0),
16
+ .i_mask ('1),
17
+ .o_value (<%= value_out[loop_variables] %>),
18
+ .o_value_unmasked ()
14
19
  );
@@ -17,17 +17,28 @@ RgGen.define_list_item_feature(:bit_field, :type, [:rs, :w0s, :w1s, :ws, :wos])
17
17
 
18
18
  private
19
19
 
20
- def module_name
21
- bit_field.type == :rs && 'rggen_bit_field_rs' || 'rggen_bit_field_w01s_ws_wos'
20
+ def read_action
21
+ {
22
+ rs: 'RGGEN_READ_SET',
23
+ w0s: 'RGGEN_READ_DEFAULT',
24
+ w1s: 'RGGEN_READ_DEFAULT',
25
+ ws: 'RGGEN_READ_DEFAULT',
26
+ wos: 'RGGEN_READ_NONE'
27
+ }[bit_field.type]
22
28
  end
23
29
 
24
- def set_value
25
- value = { w0s: 0b00, w1s: 0b01, ws: 0b10, wos: 0b10 }[bit_field.type]
26
- bin(value, 2)
30
+ def write_action
31
+ {
32
+ rs: 'RGGEN_WRITE_NONE',
33
+ w0s: 'RGGEN_WRITE_0_SET',
34
+ w1s: 'RGGEN_WRITE_1_SET',
35
+ ws: 'RGGEN_WRITE_SET',
36
+ wos: 'RGGEN_WRITE_SET'
37
+ }[bit_field.type]
27
38
  end
28
39
 
29
- def write_only
30
- bit_field.write_only? && 1 || 0
40
+ def write_enable
41
+ bit_field.writable? && all_bits_1 || all_bits_0
31
42
  end
32
43
  end
33
44
  end
@@ -1,11 +1,19 @@
1
- rggen_bit_field_rw_wo #(
1
+ rggen_bit_field #(
2
2
  .WIDTH (<%= width %>),
3
3
  .INITIAL_VALUE (<%= initial_value %>),
4
- .WRITE_ONLY (<%= write_only %>),
5
- .WRITE_ONCE (<%= write_once %>)
4
+ .SW_READ_ACTION (<%= read_action %>),
5
+ .SW_WRITE_ONCE (<%= write_once %>)
6
6
  ) u_bit_field (
7
- .i_clk (<%= clock %>),
8
- .i_rst_n (<%= reset %>),
9
- .bit_field_if (<%= bit_field_if %>),
10
- .o_value (<%= value_out[loop_variables] %>)
7
+ .i_clk (<%= clock %>),
8
+ .i_rst_n (<%= reset %>),
9
+ .bit_field_if (<%= bit_field_if %>),
10
+ .i_sw_write_enable ('1),
11
+ .i_hw_write_enable ('0),
12
+ .i_hw_write_data ('0),
13
+ .i_hw_set ('0),
14
+ .i_hw_clear ('0),
15
+ .i_value ('0),
16
+ .i_mask ('1),
17
+ .o_value (<%= value_out[loop_variables] %>),
18
+ .o_value_unmasked ()
11
19
  );
@@ -13,8 +13,8 @@ RgGen.define_list_item_feature(:bit_field, :type, [:rw, :w1, :wo, :wo1]) do
13
13
 
14
14
  private
15
15
 
16
- def write_only
17
- bit_field.write_only? && 1 || 0
16
+ def read_action
17
+ bit_field.readable? && 'RGGEN_READ_DEFAULT' || 'RGGEN_READ_NONE'
18
18
  end
19
19
 
20
20
  def write_once
@@ -1,10 +1,18 @@
1
- rggen_bit_field_rwc #(
1
+ rggen_bit_field #(
2
2
  .WIDTH (<%= width %>),
3
- .INITIAL_VALUE (<%= initial_value %>)
3
+ .INITIAL_VALUE (<%= initial_value %>),
4
+ .HW_CLEAR_WIDTH (1)
4
5
  ) u_bit_field (
5
- .i_clk (<%= clock %>),
6
- .i_rst_n (<%= reset %>),
7
- .bit_field_if (<%= bit_field_if %>),
8
- .i_clear (<%= clear_signal %>),
9
- .o_value (<%= value_out[loop_variables] %>)
6
+ .i_clk (<%= clock %>),
7
+ .i_rst_n (<%= reset %>),
8
+ .bit_field_if (<%= bit_field_if %>),
9
+ .i_sw_write_enable ('1),
10
+ .i_hw_write_enable ('0),
11
+ .i_hw_write_data ('0),
12
+ .i_hw_set ('0),
13
+ .i_hw_clear (<%= clear_signal %>),
14
+ .i_value ('0),
15
+ .i_mask ('1),
16
+ .o_value (<%= value_out[loop_variables] %>),
17
+ .o_value_unmasked ()
10
18
  );
@@ -1,10 +1,18 @@
1
- rggen_bit_field_rwe #(
2
- .WIDTH (<%= width %>),
3
- .INITIAL_VALUE (<%= initial_value %>)
1
+ rggen_bit_field #(
2
+ .WIDTH (<%= width %>),
3
+ .INITIAL_VALUE (<%= initial_value %>),
4
+ .SW_WRITE_ENABLE_POLARITY (RGGEN_ACTIVE_HIGH)
4
5
  ) u_bit_field (
5
- .i_clk (<%= clock %>),
6
- .i_rst_n (<%= reset %>),
7
- .bit_field_if (<%= bit_field_if %>),
8
- .i_enable (<%= enable_signal %>),
9
- .o_value (<%= value_out[loop_variables] %>)
6
+ .i_clk (<%= clock %>),
7
+ .i_rst_n (<%= reset %>),
8
+ .bit_field_if (<%= bit_field_if %>),
9
+ .i_sw_write_enable (<%= enable_signal %>),
10
+ .i_hw_write_enable ('0),
11
+ .i_hw_write_data ('0),
12
+ .i_hw_set ('0),
13
+ .i_hw_clear ('0),
14
+ .i_value ('0),
15
+ .i_mask ('1),
16
+ .o_value (<%= value_out[loop_variables] %>),
17
+ .o_value_unmasked ()
10
18
  );
@@ -1,10 +1,18 @@
1
- rggen_bit_field_rwl #(
2
- .WIDTH (<%= width %>),
3
- .INITIAL_VALUE (<%= initial_value %>)
1
+ rggen_bit_field #(
2
+ .WIDTH (<%= width %>),
3
+ .INITIAL_VALUE (<%= initial_value %>),
4
+ .SW_WRITE_ENABLE_POLARITY (RGGEN_ACTIVE_LOW)
4
5
  ) u_bit_field (
5
- .i_clk (<%= clock %>),
6
- .i_rst_n (<%= reset %>),
7
- .bit_field_if (<%= bit_field_if %>),
8
- .i_lock (<%= lock_signal %>),
9
- .o_value (<%= value_out[loop_variables] %>)
6
+ .i_clk (<%= clock %>),
7
+ .i_rst_n (<%= reset %>),
8
+ .bit_field_if (<%= bit_field_if %>),
9
+ .i_sw_write_enable (<%= lock_signal %>),
10
+ .i_hw_write_enable ('0),
11
+ .i_hw_write_data ('0),
12
+ .i_hw_set ('0),
13
+ .i_hw_clear ('0),
14
+ .i_value ('0),
15
+ .i_mask ('1),
16
+ .o_value (<%= value_out[loop_variables] %>),
17
+ .o_value_unmasked ()
10
18
  );
@@ -1,11 +1,17 @@
1
- rggen_bit_field_rws #(
1
+ rggen_bit_field #(
2
2
  .WIDTH (<%= width %>),
3
3
  .INITIAL_VALUE (<%= initial_value %>)
4
4
  ) u_bit_field (
5
- .i_clk (<%= clock %>),
6
- .i_rst_n (<%= reset %>),
7
- .bit_field_if (<%= bit_field_if %>),
8
- .i_set (<%= set_signal %>),
9
- .i_value (<%= value_in[loop_variables] %>),
10
- .o_value (<%= value_out[loop_variables] %>)
5
+ .i_clk (<%= clock %>),
6
+ .i_rst_n (<%= reset %>),
7
+ .bit_field_if (<%= bit_field_if %>),
8
+ .i_sw_write_enable ('1),
9
+ .i_hw_write_enable (<%= set_signal %>),
10
+ .i_hw_write_data (<%= value_in[loop_variables] %>),
11
+ .i_hw_set ('0),
12
+ .i_hw_clear ('0),
13
+ .i_value ('0),
14
+ .i_mask ('1),
15
+ .o_value (<%= value_out[loop_variables] %>),
16
+ .o_value_unmasked ()
11
17
  );
@@ -0,0 +1,19 @@
1
+ rggen_bit_field #(
2
+ .WIDTH (<%= width %>),
3
+ .INITIAL_VALUE (<%= initial_value %>),
4
+ .SW_READ_ACTION (<%= read_action %>),
5
+ .SW_WRITE_ACTION (<%= write_action %>)
6
+ ) u_bit_field (
7
+ .i_clk (<%= clock %>),
8
+ .i_rst_n (<%= reset %>),
9
+ .bit_field_if (<%= bit_field_if %>),
10
+ .i_sw_write_enable ('1),
11
+ .i_hw_write_enable ('0),
12
+ .i_hw_write_data ('0),
13
+ .i_hw_set ('0),
14
+ .i_hw_clear ('0),
15
+ .i_value ('0),
16
+ .i_mask ('1),
17
+ .o_value (<%= value_out[loop_variables] %>),
18
+ .o_value_unmasked ()
19
+ );
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(
4
+ :bit_field, :type, [:w0crs, :w0src, :w1crs, :w1src, :wcrs, :wsrc]
5
+ ) do
6
+ sv_rtl do
7
+ build do
8
+ output :value_out, {
9
+ name: "o_#{full_name}", data_type: :logic, width: width,
10
+ array_size: array_size, array_format: array_port_format
11
+ }
12
+ end
13
+
14
+ main_code :bit_field, from_template: true
15
+
16
+ private
17
+
18
+ def read_action
19
+ read_set? && 'RGGEN_READ_SET' || 'RGGEN_READ_CLEAR'
20
+ end
21
+
22
+ def read_set?
23
+ [:w0crs, :w1crs, :wcrs].include?(bit_field.type)
24
+ end
25
+
26
+ def write_action
27
+ {
28
+ w0crs: 'RGGEN_WRITE_0_CLEAR',
29
+ w0src: 'RGGEN_WRITE_0_SET',
30
+ w1crs: 'RGGEN_WRITE_1_CLEAR',
31
+ w1src: 'RGGEN_WRITE_1_SET',
32
+ wcrs: 'RGGEN_WRITE_CLEAR',
33
+ wsrc: 'RGGEN_WRITE_SET'
34
+ }[bit_field.type]
35
+ end
36
+ end
37
+ end
@@ -1,10 +1,18 @@
1
- rggen_bit_field_w01t #(
2
- .TOGGLE_VALUE (<%= toggle_value %>),
3
- .WIDTH (<%= width %>),
4
- .INITIAL_VALUE (<%= initial_value %>)
1
+ rggen_bit_field #(
2
+ .WIDTH (<%= width %>),
3
+ .INITIAL_VALUE (<%= initial_value %>),
4
+ .SW_WRITE_ACTION (<%= write_action %>)
5
5
  ) u_bit_field (
6
- .i_clk (<%= clock %>),
7
- .i_rst_n (<%= reset %>),
8
- .bit_field_if (<%= bit_field_if %>),
9
- .o_value (<%= value_out[loop_variables] %>)
6
+ .i_clk (<%= clock %>),
7
+ .i_rst_n (<%= reset %>),
8
+ .bit_field_if (<%= bit_field_if %>),
9
+ .i_sw_write_enable ('1),
10
+ .i_hw_write_enable ('0),
11
+ .i_hw_write_data ('0),
12
+ .i_hw_set ('0),
13
+ .i_hw_clear ('0),
14
+ .i_value ('0),
15
+ .i_mask ('1),
16
+ .o_value (<%= value_out[loop_variables] %>),
17
+ .o_value_unmasked ()
10
18
  );
@@ -13,8 +13,11 @@ RgGen.define_list_item_feature(:bit_field, :type, [:w0t, :w1t]) do
13
13
 
14
14
  private
15
15
 
16
- def toggle_value
17
- bin({ w0t: 0, w1t: 1 }[bit_field.type], 1)
16
+ def write_action
17
+ {
18
+ w0t: 'RGGEN_WRITE_0_TOGGLE',
19
+ w1t: 'RGGEN_WRITE_1_TOGGLE'
20
+ }[bit_field.type]
18
21
  end
19
22
  end
20
23
  end
@@ -1,9 +1,18 @@
1
- rggen_bit_field_<%= bit_field.type %> #(
1
+ rggen_bit_field #(
2
2
  .WIDTH (<%= width %>),
3
- .INITIAL_VALUE (<%= initial_value %>)
3
+ .INITIAL_VALUE (<%= initial_value %>),
4
+ .SW_READ_ACTION (<%= read_action %>)
4
5
  ) u_bit_field (
5
- .i_clk (<%= clock %>),
6
- .i_rst_n (<%= reset %>),
7
- .bit_field_if (<%= bit_field_if %>),
8
- .o_value (<%= value_out[loop_variables] %>)
6
+ .i_clk (<%= clock %>),
7
+ .i_rst_n (<%= reset %>),
8
+ .bit_field_if (<%= bit_field_if %>),
9
+ .i_sw_write_enable ('1),
10
+ .i_hw_write_enable ('0),
11
+ .i_hw_write_data ('0),
12
+ .i_hw_set ('0),
13
+ .i_hw_clear ('0),
14
+ .i_value ('0),
15
+ .i_mask ('1),
16
+ .o_value (<%= value_out[loop_variables] %>),
17
+ .o_value_unmasked ()
9
18
  );
@@ -10,5 +10,14 @@ RgGen.define_list_item_feature(:bit_field, :type, [:wrc, :wrs]) do
10
10
  end
11
11
 
12
12
  main_code :bit_field, from_template: true
13
+
14
+ private
15
+
16
+ def read_action
17
+ {
18
+ wrc: 'RGGEN_READ_CLEAR',
19
+ wrs: 'RGGEN_READ_SET'
20
+ }[bit_field.type]
21
+ end
13
22
  end
14
23
  end
@@ -110,33 +110,7 @@ RgGen.define_list_item_feature(:register_block, :protocol, :axi4lite) do
110
110
 
111
111
  main_code :register_block, from_template: true
112
112
  main_code :register_block do |code|
113
- unless configuration.fold_sv_interface_port?
114
- [
115
- [axi4lite_if.awvalid, awvalid],
116
- [awready, axi4lite_if.awready],
117
- [axi4lite_if.awid, awid],
118
- [axi4lite_if.awaddr, awaddr],
119
- [axi4lite_if.awprot, awprot],
120
- [axi4lite_if.wvalid, wvalid],
121
- [wready, axi4lite_if.wready],
122
- [axi4lite_if.wdata, wdata],
123
- [axi4lite_if.wstrb, wstrb],
124
- [bvalid, axi4lite_if.bvalid],
125
- [axi4lite_if.bready, bready],
126
- [bid, axi4lite_if.bid],
127
- [bresp, axi4lite_if.bresp],
128
- [axi4lite_if.arvalid, arvalid],
129
- [arready, axi4lite_if.arready],
130
- [axi4lite_if.arid, arid],
131
- [axi4lite_if.araddr, araddr],
132
- [axi4lite_if.arprot, arprot],
133
- [rvalid, axi4lite_if.rvalid],
134
- [axi4lite_if.rready, rready],
135
- [rid, axi4lite_if.rid],
136
- [rdata, axi4lite_if.rdata],
137
- [rresp, axi4lite_if.rresp]
138
- ].each { |lhs, rhs| code << assign(lhs, rhs) << nl }
139
- end
113
+ configuration.fold_sv_interface_port? || assign_axi4lite_signals(code)
140
114
  end
141
115
 
142
116
  private
@@ -144,5 +118,33 @@ RgGen.define_list_item_feature(:register_block, :protocol, :axi4lite) do
144
118
  def id_port_width
145
119
  "((#{id_width}>0)?#{id_width}:1)"
146
120
  end
121
+
122
+ def assign_axi4lite_signals(code)
123
+ [
124
+ [axi4lite_if.awvalid, awvalid],
125
+ [awready, axi4lite_if.awready],
126
+ [axi4lite_if.awid, awid],
127
+ [axi4lite_if.awaddr, awaddr],
128
+ [axi4lite_if.awprot, awprot],
129
+ [axi4lite_if.wvalid, wvalid],
130
+ [wready, axi4lite_if.wready],
131
+ [axi4lite_if.wdata, wdata],
132
+ [axi4lite_if.wstrb, wstrb],
133
+ [bvalid, axi4lite_if.bvalid],
134
+ [axi4lite_if.bready, bready],
135
+ [bid, axi4lite_if.bid],
136
+ [bresp, axi4lite_if.bresp],
137
+ [axi4lite_if.arvalid, arvalid],
138
+ [arready, axi4lite_if.arready],
139
+ [axi4lite_if.arid, arid],
140
+ [axi4lite_if.araddr, araddr],
141
+ [axi4lite_if.arprot, arprot],
142
+ [rvalid, axi4lite_if.rvalid],
143
+ [axi4lite_if.rready, rready],
144
+ [rid, axi4lite_if.rid],
145
+ [rdata, axi4lite_if.rdata],
146
+ [rresp, axi4lite_if.rresp]
147
+ ].each { |lhs, rhs| code << assign(lhs, rhs) << nl }
148
+ end
147
149
  end
148
150
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'rggen/systemverilog/rtl'
4
4
 
5
- RgGen.setup RgGen::SystemVerilog::RTL do |builder|
5
+ RgGen.register_plugin RgGen::SystemVerilog::RTL do |builder|
6
6
  builder.enable :global, [
7
7
  :array_port_format, :fold_sv_interface_port
8
8
  ]
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module SystemVerilog
5
- VERSION = '0.23.1'
5
+ VERSION = '0.24.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,29 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-systemverilog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.1
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-24 00:00:00.000000000 Z
11
+ date: 2021-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
- - !ruby/object:Gem::Dependency
14
- name: docile
15
- requirement: !ruby/object:Gem::Requirement
16
- requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: 1.1.5
20
- type: :runtime
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
23
- requirements:
24
- - - ">="
25
- - !ruby/object:Gem::Version
26
- version: 1.1.5
27
13
  - !ruby/object:Gem::Dependency
28
14
  name: facets
29
15
  requirement: !ruby/object:Gem::Requirement
@@ -123,10 +109,8 @@ files:
123
109
  - lib/rggen/systemverilog/rtl/bit_field/type/rwl.rb
124
110
  - lib/rggen/systemverilog/rtl/bit_field/type/rws.erb
125
111
  - lib/rggen/systemverilog/rtl/bit_field/type/rws.rb
126
- - lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs_wcrs.erb
127
- - lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs_wcrs.rb
128
- - lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src_wsrc.erb
129
- - lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src_wsrc.rb
112
+ - lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.erb
113
+ - lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.rb
130
114
  - lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.erb
131
115
  - lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.rb
132
116
  - lib/rggen/systemverilog/rtl/bit_field/type/w0trg_w1trg.erb
@@ -181,8 +165,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
181
165
  - !ruby/object:Gem::Version
182
166
  version: '0'
183
167
  requirements: []
184
- rubygems_version: 3.1.2
168
+ rubygems_version: 3.2.3
185
169
  signing_key:
186
170
  specification_version: 4
187
- summary: rggen-systemverilog-0.23.1
171
+ summary: rggen-systemverilog-0.24.0
188
172
  test_files: []
@@ -1,10 +0,0 @@
1
- rggen_bit_field_w01crs_wcrs #(
2
- .CLEAR_VALUE (<%= clear_value %>),
3
- .WIDTH (<%= width %>),
4
- .INITIAL_VALUE (<%= initial_value %>)
5
- ) u_bit_field (
6
- .i_clk (<%= clock %>),
7
- .i_rst_n (<%= reset %>),
8
- .bit_field_if (<%= bit_field_if %>),
9
- .o_value (<%= value_out[loop_variables] %>)
10
- );
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_list_item_feature(:bit_field, :type, [:w0crs, :w1crs, :wcrs]) do
4
- sv_rtl do
5
- build do
6
- output :value_out, {
7
- name: "o_#{full_name}", data_type: :logic, width: width,
8
- array_size: array_size, array_format: array_port_format
9
- }
10
- end
11
-
12
- main_code :bit_field, from_template: true
13
-
14
- private
15
-
16
- def clear_value
17
- value = { w0crs: 0b00, w1crs: 0b01, wcrs: 0b10 }[bit_field.type]
18
- bin(value, 2)
19
- end
20
- end
21
- end
@@ -1,10 +0,0 @@
1
- rggen_bit_field_w01src_wsrc #(
2
- .SET_VALUE (<%= set_value %>),
3
- .WIDTH (<%= width %>),
4
- .INITIAL_VALUE (<%= initial_value %>)
5
- ) u_bit_field (
6
- .i_clk (<%= clock %>),
7
- .i_rst_n (<%= reset %>),
8
- .bit_field_if (<%= bit_field_if %>),
9
- .o_value (<%= value_out[loop_variables] %>)
10
- );
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_list_item_feature(:bit_field, :type, [:w0src, :w1src, :wsrc]) do
4
- sv_rtl do
5
- build do
6
- output :value_out, {
7
- name: "o_#{full_name}", data_type: :logic, width: width,
8
- array_size: array_size, array_format: array_port_format
9
- }
10
- end
11
-
12
- main_code :bit_field, from_template: true
13
-
14
- private
15
-
16
- def set_value
17
- value = { w0src: 0b00, w1src: 0b01, wsrc: 0b10 }[bit_field.type]
18
- bin(value, 2)
19
- end
20
- end
21
- end