rggen-systemverilog 0.21.0 → 0.24.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) 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 -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/common/utility/identifier.rb +19 -15
  8. data/lib/rggen/systemverilog/ral.rb +20 -26
  9. data/lib/rggen/systemverilog/ral/bit_field/type.rb +1 -1
  10. data/lib/rggen/systemverilog/ral/setup.rb +1 -1
  11. data/lib/rggen/systemverilog/rtl.rb +39 -41
  12. data/lib/rggen/systemverilog/rtl/bit_field/sv_rtl_top.rb +10 -46
  13. data/lib/rggen/systemverilog/rtl/bit_field/type.rb +1 -2
  14. data/lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.erb +19 -0
  15. data/lib/rggen/systemverilog/rtl/bit_field/type/{rc_w0c_w1c.rb → rc_w0c_w1c_wc_woc.rb} +22 -11
  16. data/lib/rggen/systemverilog/rtl/bit_field/type/reserved.erb +17 -2
  17. data/lib/rggen/systemverilog/rtl/bit_field/type/ro.erb +15 -4
  18. data/lib/rggen/systemverilog/rtl/bit_field/type/rof.erb +15 -4
  19. data/lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos.erb +19 -0
  20. data/lib/rggen/systemverilog/rtl/bit_field/type/{rs_w0s_w1s.rb → rs_w0s_w1s_ws_wos.rb} +21 -9
  21. data/lib/rggen/systemverilog/rtl/bit_field/type/rw_w1_wo_wo1.erb +15 -7
  22. data/lib/rggen/systemverilog/rtl/bit_field/type/rw_w1_wo_wo1.rb +2 -2
  23. data/lib/rggen/systemverilog/rtl/bit_field/type/rwc.erb +15 -7
  24. data/lib/rggen/systemverilog/rtl/bit_field/type/rwe.erb +16 -8
  25. data/lib/rggen/systemverilog/rtl/bit_field/type/rwl.erb +16 -8
  26. data/lib/rggen/systemverilog/rtl/bit_field/type/rws.erb +13 -7
  27. data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.erb +19 -0
  28. data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.rb +37 -0
  29. data/lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.erb +18 -0
  30. data/lib/rggen/systemverilog/rtl/bit_field/type/{w0src_w1src.rb → w0t_w1t.rb} +6 -4
  31. data/lib/rggen/systemverilog/rtl/bit_field/type/wrc_wrs.erb +18 -0
  32. data/lib/rggen/systemverilog/rtl/bit_field/type/{w0crs_w1crs.rb → wrc_wrs.rb} +6 -4
  33. data/lib/rggen/systemverilog/rtl/bit_field_index.rb +53 -0
  34. data/lib/rggen/systemverilog/rtl/indirect_index.rb +35 -0
  35. data/lib/rggen/systemverilog/rtl/register/type.rb +1 -56
  36. data/lib/rggen/systemverilog/rtl/register/type/external.rb +0 -4
  37. data/lib/rggen/systemverilog/rtl/register/type/indirect.rb +2 -26
  38. data/lib/rggen/systemverilog/rtl/register_block/protocol.rb +14 -8
  39. data/lib/rggen/systemverilog/rtl/register_block/protocol/axi4lite.erb +1 -0
  40. data/lib/rggen/systemverilog/rtl/register_block/protocol/axi4lite.rb +55 -28
  41. data/lib/rggen/systemverilog/rtl/register_block/sv_rtl_top.rb +1 -1
  42. data/lib/rggen/systemverilog/rtl/register_index.rb +4 -4
  43. data/lib/rggen/systemverilog/rtl/register_type.rb +68 -0
  44. data/lib/rggen/systemverilog/rtl/setup.rb +1 -1
  45. data/lib/rggen/systemverilog/version.rb +1 -1
  46. metadata +17 -26
  47. data/lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c.erb +0 -15
  48. data/lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s.erb +0 -13
  49. data/lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs.erb +0 -10
  50. data/lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src.erb +0 -10
@@ -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
+ );
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RgGen.define_list_item_feature(:bit_field, :type, [:rc, :w0c, :w1c]) do
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:rc, :w0c, :w1c, :wc, :woc]) do
4
4
  sv_rtl do
5
5
  build do
6
6
  input :set, {
@@ -23,21 +23,32 @@ RgGen.define_list_item_feature(:bit_field, :type, [:rc, :w0c, :w1c]) do
23
23
 
24
24
  private
25
25
 
26
- def module_name
27
- if bit_field.type == :rc
28
- 'rggen_bit_field_rc'
29
- else
30
- 'rggen_bit_field_w01c'
31
- end
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]
32
44
  end
33
45
 
34
- def clear_value
35
- bin({ w0c: 0, w1c: 1 }[bit_field.type], 1)
46
+ def write_enable
47
+ bit_field.writable? && all_bits_1 || all_bits_0
36
48
  end
37
49
 
38
50
  def value_out_unmasked
39
- (bit_field.reference? || nil) &&
40
- value_unmasked[loop_variables]
51
+ (bit_field.reference? || nil) && value_unmasked[loop_variables]
41
52
  end
42
53
  end
43
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
  );
@@ -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
+ );
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RgGen.define_list_item_feature(:bit_field, :type, [:rs, :w0s, :w1s]) do
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:rs, :w0s, :w1s, :ws, :wos]) do
4
4
  sv_rtl do
5
5
  build do
6
6
  input :clear, {
@@ -17,16 +17,28 @@ RgGen.define_list_item_feature(:bit_field, :type, [:rs, :w0s, :w1s]) do
17
17
 
18
18
  private
19
19
 
20
- def module_name
21
- if bit_field.type == :rs
22
- 'rggen_bit_field_rs'
23
- else
24
- 'rggen_bit_field_w01s'
25
- end
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]
26
28
  end
27
29
 
28
- def set_value
29
- bin({ w0s: 0, w1s: 1 }[bit_field.type], 1)
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
30
42
  end
31
43
  end
32
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
@@ -0,0 +1,18 @@
1
+ rggen_bit_field #(
2
+ .WIDTH (<%= width %>),
3
+ .INITIAL_VALUE (<%= initial_value %>),
4
+ .SW_WRITE_ACTION (<%= write_action %>)
5
+ ) u_bit_field (
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 ()
18
+ );
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- RgGen.define_list_item_feature(:bit_field, :type, [:w0src, :w1src]) do
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:w0t, :w1t]) do
4
4
  sv_rtl do
5
5
  build do
6
6
  output :value_out, {
@@ -13,9 +13,11 @@ RgGen.define_list_item_feature(:bit_field, :type, [:w0src, :w1src]) do
13
13
 
14
14
  private
15
15
 
16
- def set_value
17
- value = (bit_field.type == :w0src && 0) || 1
18
- bin(value, 1)
16
+ def write_action
17
+ {
18
+ w0t: 'RGGEN_WRITE_0_TOGGLE',
19
+ w1t: 'RGGEN_WRITE_1_TOGGLE'
20
+ }[bit_field.type]
19
21
  end
20
22
  end
21
23
  end