rggen-systemverilog 0.22.0 → 0.25.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +2 -2
  4. data/lib/rggen/systemverilog/common.rb +0 -24
  5. data/lib/rggen/systemverilog/common/factories.rb +1 -1
  6. data/lib/rggen/systemverilog/common/feature.rb +3 -3
  7. data/lib/rggen/systemverilog/common/utility.rb +5 -1
  8. data/lib/rggen/systemverilog/common/utility/class_definition.rb +12 -4
  9. data/lib/rggen/systemverilog/common/utility/data_object.rb +1 -2
  10. data/lib/rggen/systemverilog/common/utility/function_definition.rb +16 -4
  11. data/lib/rggen/systemverilog/common/utility/identifier.rb +32 -23
  12. data/lib/rggen/systemverilog/common/utility/local_scope.rb +9 -7
  13. data/lib/rggen/systemverilog/common/utility/module_definition.rb +12 -4
  14. data/lib/rggen/systemverilog/common/utility/package_definition.rb +4 -4
  15. data/lib/rggen/systemverilog/ral.rb +20 -28
  16. data/lib/rggen/systemverilog/ral/bit_field/type.rb +2 -2
  17. data/lib/rggen/systemverilog/ral/bit_field/type/rof.rb +5 -0
  18. data/lib/rggen/systemverilog/ral/setup.rb +1 -1
  19. data/lib/rggen/systemverilog/rtl.rb +37 -44
  20. data/lib/rggen/systemverilog/rtl/bit_field/sv_rtl_top.rb +11 -47
  21. data/lib/rggen/systemverilog/rtl/bit_field/type.rb +1 -2
  22. data/lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.erb +19 -0
  23. data/lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.rb +54 -0
  24. data/lib/rggen/systemverilog/rtl/bit_field/type/ro.erb +15 -4
  25. data/lib/rggen/systemverilog/rtl/bit_field/type/ro.rb +1 -1
  26. data/lib/rggen/systemverilog/rtl/bit_field/type/rof.erb +15 -4
  27. data/lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos.erb +19 -0
  28. data/lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos.rb +44 -0
  29. data/lib/rggen/systemverilog/rtl/bit_field/type/rw_w1_wo_wo1.erb +15 -7
  30. data/lib/rggen/systemverilog/rtl/bit_field/type/rw_w1_wo_wo1.rb +3 -3
  31. data/lib/rggen/systemverilog/rtl/bit_field/type/rwc.erb +15 -7
  32. data/lib/rggen/systemverilog/rtl/bit_field/type/rwc.rb +2 -2
  33. data/lib/rggen/systemverilog/rtl/bit_field/type/rwe_rwl.erb +18 -0
  34. data/lib/rggen/systemverilog/rtl/bit_field/type/rwe_rwl.rb +34 -0
  35. data/lib/rggen/systemverilog/rtl/bit_field/type/rws.erb +13 -7
  36. data/lib/rggen/systemverilog/rtl/bit_field/type/rws.rb +3 -3
  37. data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.erb +19 -0
  38. data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.rb +37 -0
  39. data/lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.erb +16 -8
  40. data/lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.rb +6 -3
  41. data/lib/rggen/systemverilog/rtl/bit_field/type/w0trg_w1trg.rb +1 -1
  42. data/lib/rggen/systemverilog/rtl/bit_field/type/wrc_wrs.erb +18 -0
  43. data/lib/rggen/systemverilog/rtl/bit_field/type/{w0src_w1src.rb → wrc_wrs.rb} +7 -5
  44. data/lib/rggen/systemverilog/rtl/bit_field_index.rb +52 -0
  45. data/lib/rggen/systemverilog/rtl/feature.rb +8 -6
  46. data/lib/rggen/systemverilog/rtl/indirect_index.rb +35 -0
  47. data/lib/rggen/systemverilog/rtl/partial_sum.rb +5 -6
  48. data/lib/rggen/systemverilog/rtl/register/type.rb +1 -56
  49. data/lib/rggen/systemverilog/rtl/register/type/external.rb +8 -20
  50. data/lib/rggen/systemverilog/rtl/register/type/indirect.rb +2 -26
  51. data/lib/rggen/systemverilog/rtl/register_block/protocol.rb +14 -8
  52. data/lib/rggen/systemverilog/rtl/register_block/protocol/apb.rb +10 -10
  53. data/lib/rggen/systemverilog/rtl/register_block/protocol/axi4lite.rb +52 -50
  54. data/lib/rggen/systemverilog/rtl/register_block/sv_rtl_top.rb +3 -7
  55. data/lib/rggen/systemverilog/rtl/register_index.rb +17 -15
  56. data/lib/rggen/systemverilog/rtl/register_type.rb +69 -0
  57. data/lib/rggen/systemverilog/rtl/setup.rb +1 -1
  58. data/lib/rggen/systemverilog/version.rb +1 -1
  59. metadata +19 -48
  60. data/lib/rggen/systemverilog/ral/bit_field/type/reserved_rof.rb +0 -5
  61. data/lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c.erb +0 -15
  62. data/lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c.rb +0 -43
  63. data/lib/rggen/systemverilog/rtl/bit_field/type/reserved.erb +0 -3
  64. data/lib/rggen/systemverilog/rtl/bit_field/type/reserved.rb +0 -7
  65. data/lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s.erb +0 -13
  66. data/lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s.rb +0 -32
  67. data/lib/rggen/systemverilog/rtl/bit_field/type/rwe.erb +0 -10
  68. data/lib/rggen/systemverilog/rtl/bit_field/type/rwe.rb +0 -26
  69. data/lib/rggen/systemverilog/rtl/bit_field/type/rwl.erb +0 -10
  70. data/lib/rggen/systemverilog/rtl/bit_field/type/rwl.rb +0 -26
  71. data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs.erb +0 -10
  72. data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs.rb +0 -21
  73. data/lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src.erb +0 -10
@@ -29,12 +29,12 @@ 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
36
36
  (bit_field.sequence_size&.times || [nil]).map do |index|
37
- macro_call(:rggen_ral_create_field, arguments(index))
37
+ macro_call('rggen_ral_create_field', arguments(index))
38
38
  end
39
39
  end
40
40
 
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, :rof) do
4
+ sv_ral { access 'RO' }
5
+ end
@@ -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
@@ -4,57 +4,50 @@ require_relative 'common'
4
4
  require_relative 'rtl/feature'
5
5
  require_relative 'rtl/partial_sum'
6
6
  require_relative 'rtl/register_index'
7
+ require_relative 'rtl/register_type'
8
+ require_relative 'rtl/indirect_index'
9
+ require_relative 'rtl/bit_field_index'
7
10
 
8
11
  module RgGen
9
12
  module SystemVerilog
10
13
  module RTL
11
- PLUGIN_NAME = :'rggen-sv-rtl'
14
+ extend Core::Plugin
12
15
 
13
- FEATURES = [
14
- 'rtl/bit_field/sv_rtl_top',
15
- 'rtl/bit_field/type',
16
- 'rtl/bit_field/type/rc_w0c_w1c',
17
- 'rtl/bit_field/type/reserved',
18
- 'rtl/bit_field/type/ro',
19
- 'rtl/bit_field/type/rof',
20
- 'rtl/bit_field/type/rs_w0s_w1s',
21
- 'rtl/bit_field/type/rw_w1_wo_wo1',
22
- 'rtl/bit_field/type/rwc',
23
- 'rtl/bit_field/type/rwe',
24
- 'rtl/bit_field/type/rwl',
25
- 'rtl/bit_field/type/rws',
26
- 'rtl/bit_field/type/w0crs_w1crs',
27
- 'rtl/bit_field/type/w0src_w1src',
28
- 'rtl/bit_field/type/w0t_w1t',
29
- 'rtl/bit_field/type/w0trg_w1trg',
30
- 'rtl/global/array_port_format',
31
- 'rtl/global/fold_sv_interface_port',
32
- 'rtl/register/sv_rtl_top',
33
- 'rtl/register/type',
34
- 'rtl/register/type/external',
35
- 'rtl/register/type/indirect',
36
- 'rtl/register_block/protocol',
37
- 'rtl/register_block/protocol/apb',
38
- 'rtl/register_block/protocol/axi4lite',
39
- 'rtl/register_block/sv_rtl_top',
40
- 'rtl/register_file/sv_rtl_top'
41
- ].freeze
16
+ setup_plugin :'rggen-sv-rtl' do |plugin|
17
+ plugin.version SystemVerilog::VERSION
42
18
 
43
- def self.version
44
- SystemVerilog::VERSION
45
- end
46
-
47
- def self.register_component(builder)
48
- Common.register_component(builder, :sv_rtl, Feature)
49
- end
50
-
51
- def self.load_features
52
- Common.load_features(FEATURES, __dir__)
53
- end
19
+ plugin.register_component :sv_rtl do
20
+ component Common::Component, Common::ComponentFactory
21
+ feature Feature, Common::FeatureFactory
22
+ end
54
23
 
55
- def self.default_setup(builder)
56
- register_component(builder)
57
- 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/ro',
29
+ 'rtl/bit_field/type/rof',
30
+ 'rtl/bit_field/type/rs_w0s_w1s_ws_wos',
31
+ 'rtl/bit_field/type/rw_w1_wo_wo1',
32
+ 'rtl/bit_field/type/rwc',
33
+ 'rtl/bit_field/type/rwe_rwl',
34
+ 'rtl/bit_field/type/rws',
35
+ 'rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc',
36
+ 'rtl/bit_field/type/w0t_w1t',
37
+ 'rtl/bit_field/type/w0trg_w1trg',
38
+ 'rtl/bit_field/type/wrc_wrs',
39
+ 'rtl/global/array_port_format',
40
+ 'rtl/global/fold_sv_interface_port',
41
+ 'rtl/register/sv_rtl_top',
42
+ 'rtl/register/type',
43
+ 'rtl/register/type/external',
44
+ 'rtl/register/type/indirect',
45
+ 'rtl/register_block/protocol',
46
+ 'rtl/register_block/protocol/apb',
47
+ 'rtl/register_block/protocol/axi4lite',
48
+ 'rtl/register_block/sv_rtl_top',
49
+ 'rtl/register_file/sv_rtl_top'
50
+ ]
58
51
  end
59
52
  end
60
53
  end
@@ -2,10 +2,8 @@
2
2
 
3
3
  RgGen.define_simple_feature(:bit_field, :sv_rtl_top) do
4
4
  sv_rtl do
5
- export :local_index
6
- export :local_indices
7
- export :loop_variables
8
- export :array_size
5
+ include RgGen::SystemVerilog::RTL::BitFieldIndex
6
+
9
7
  export :value
10
8
 
11
9
  build do
@@ -13,13 +11,13 @@ RgGen.define_simple_feature(:bit_field, :sv_rtl_top) do
13
11
  localparam :initial_value, {
14
12
  name: initial_value_name, data_type: :bit, width: bit_field.width,
15
13
  array_size: initial_value_size, array_format: initial_value_format,
16
- default: initial_value_lhs
14
+ default: initial_value_rhs
17
15
  }
18
16
  elsif initial_value?
19
17
  parameter :initial_value, {
20
18
  name: initial_value_name, data_type: :bit, width: bit_field.width,
21
19
  array_size: initial_value_size, array_format: initial_value_format,
22
- default: initial_value_lhs
20
+ default: initial_value_rhs
23
21
  }
24
22
  end
25
23
  interface :bit_field_sub_if, {
@@ -42,31 +40,8 @@ RgGen.define_simple_feature(:bit_field, :sv_rtl_top) do
42
40
  code << bit_field_if_connection << nl
43
41
  end
44
42
 
45
- def local_index
46
- (index_name = local_index_name) &&
47
- create_identifier(index_name)
48
- end
49
-
50
- def local_indices
51
- [*register.local_indices, local_index_name]
52
- end
53
-
54
- def loop_variables
55
- (inside_loop? || nil) &&
56
- [*register.loop_variables, local_index].compact
57
- end
58
-
59
- def array_size
60
- (inside_loop? || nil) &&
61
- [
62
- *register_files.flat_map(&:array_size),
63
- *register.array_size,
64
- *bit_field.sequence_size
65
- ].compact
66
- end
67
-
68
43
  def value(offsets = nil, width = nil)
69
- value_lsb = bit_field.lsb(offsets&.last || local_index_name)
44
+ value_lsb = bit_field.lsb(offsets&.last || local_index)
70
45
  value_width = width || bit_field.width
71
46
  register_if(offsets&.slice(0..-2)).value[value_lsb, value_width]
72
47
  end
@@ -77,14 +52,6 @@ RgGen.define_simple_feature(:bit_field, :sv_rtl_top) do
77
52
  define_method(m) { bit_field.__send__(__method__) }
78
53
  end
79
54
 
80
- def local_index_name
81
- (bit_field.sequential? || nil) &&
82
- begin
83
- depth = (register.loop_variables&.size || 0) + 1
84
- loop_index(depth)
85
- end
86
- end
87
-
88
55
  def register_if(offsets)
89
56
  index = register.index(offsets || register.local_indices)
90
57
  register_block.register_if[index]
@@ -106,11 +73,11 @@ RgGen.define_simple_feature(:bit_field, :sv_rtl_top) do
106
73
  configuration.array_port_format
107
74
  end
108
75
 
109
- def initial_value_lhs
110
- initial_value_array? && initial_value_array_lhs || sized_initial_value
76
+ def initial_value_rhs
77
+ initial_value_array? && initial_value_array_rhs || sized_initial_value
111
78
  end
112
79
 
113
- def initial_value_array_lhs
80
+ def initial_value_array_rhs
114
81
  if fixed_initial_value?
115
82
  array(sized_initial_values)
116
83
  elsif initial_value_format == :unpacked
@@ -129,12 +96,9 @@ RgGen.define_simple_feature(:bit_field, :sv_rtl_top) do
129
96
  bit_field.initial_values&.map { |v| hex(v, bit_field.width) }
130
97
  end
131
98
 
132
- def inside_loop?
133
- register.array? || bit_field.sequential?
134
- end
135
-
136
99
  def loop_size
137
- (loop_variable = local_index_name) &&
100
+ loop_variable = local_index
101
+ loop_variable &&
138
102
  { loop_variable => bit_field.sequence_size }
139
103
  end
140
104
 
@@ -152,7 +116,7 @@ RgGen.define_simple_feature(:bit_field, :sv_rtl_top) do
152
116
 
153
117
  def bit_field_if_connection
154
118
  macro_call(
155
- :rggen_connect_bit_field_if,
119
+ 'rggen_connect_bit_field_if',
156
120
  [
157
121
  register.bit_field_if,
158
122
  bit_field.bit_field_sub_if,
@@ -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
@@ -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 (<%= 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 %>)
19
+ );
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:rc, :w0c, :w1c, :wc, :woc]) do
4
+ sv_rtl do
5
+ build do
6
+ input :set, {
7
+ name: "i_#{full_name}_set", width: width,
8
+ array_size: array_size, array_format: array_port_format
9
+ }
10
+ output :value_out, {
11
+ name: "o_#{full_name}", width: width,
12
+ array_size: array_size, array_format: array_port_format
13
+ }
14
+ if bit_field.reference?
15
+ output :value_unmasked, {
16
+ name: "o_#{full_name}_unmasked", width: width,
17
+ array_size: array_size, array_format: array_port_format
18
+ }
19
+ end
20
+ end
21
+
22
+ main_code :bit_field, from_template: true
23
+
24
+ private
25
+
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]
34
+ end
35
+
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]
44
+ end
45
+
46
+ def write_enable
47
+ bit_field.writable? && all_bits_1 || all_bits_0
48
+ end
49
+
50
+ def value_out_unmasked
51
+ (bit_field.reference? || nil) && value_unmasked[loop_variables]
52
+ end
53
+ end
54
+ end
@@ -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
  );
@@ -5,7 +5,7 @@ RgGen.define_list_item_feature(:bit_field, :type, :ro) do
5
5
  build do
6
6
  unless bit_field.reference?
7
7
  input :value_in, {
8
- name: "i_#{full_name}", data_type: :logic, width: width,
8
+ name: "i_#{full_name}", width: width,
9
9
  array_size: array_size, array_format: array_port_format
10
10
  }
11
11
  end
@@ -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
  );
@@ -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 (<%= 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 ()
19
+ );
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:rs, :w0s, :w1s, :ws, :wos]) do
4
+ sv_rtl do
5
+ build do
6
+ input :clear, {
7
+ name: "i_#{full_name}_clear", width: width,
8
+ array_size: array_size, array_format: array_port_format
9
+ }
10
+ output :value_out, {
11
+ name: "o_#{full_name}", width: width,
12
+ array_size: array_size, array_format: array_port_format
13
+ }
14
+ end
15
+
16
+ main_code :bit_field, from_template: true
17
+
18
+ private
19
+
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]
28
+ end
29
+
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]
38
+ end
39
+
40
+ def write_enable
41
+ bit_field.writable? && all_bits_1 || all_bits_0
42
+ end
43
+ end
44
+ end