rggen 0.12.0 → 0.13.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.
Files changed (78) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +13 -2
  3. data/lib/rggen.rb +0 -1
  4. data/lib/rggen/default.rb +7 -0
  5. data/lib/rggen/default_setup_file.rb +1 -2
  6. data/lib/rggen/version.rb +1 -3
  7. metadata +25 -81
  8. data/lib/rggen/built_in.rb +0 -57
  9. data/lib/rggen/built_in/bit_field/bit_assignment.rb +0 -114
  10. data/lib/rggen/built_in/bit_field/comment.rb +0 -18
  11. data/lib/rggen/built_in/bit_field/initial_value.rb +0 -75
  12. data/lib/rggen/built_in/bit_field/name.rb +0 -41
  13. data/lib/rggen/built_in/bit_field/reference.rb +0 -139
  14. data/lib/rggen/built_in/bit_field/sv_rtl_top.rb +0 -89
  15. data/lib/rggen/built_in/bit_field/type.rb +0 -245
  16. data/lib/rggen/built_in/bit_field/type/rc_w0c_w1c.erb +0 -15
  17. data/lib/rggen/built_in/bit_field/type/rc_w0c_w1c.rb +0 -59
  18. data/lib/rggen/built_in/bit_field/type/reserved.erb +0 -3
  19. data/lib/rggen/built_in/bit_field/type/reserved.rb +0 -16
  20. data/lib/rggen/built_in/bit_field/type/ro.erb +0 -6
  21. data/lib/rggen/built_in/bit_field/type/ro.rb +0 -31
  22. data/lib/rggen/built_in/bit_field/type/rof.erb +0 -6
  23. data/lib/rggen/built_in/bit_field/type/rof.rb +0 -17
  24. data/lib/rggen/built_in/bit_field/type/rs_w0s_w1s.erb +0 -13
  25. data/lib/rggen/built_in/bit_field/type/rs_w0s_w1s.rb +0 -46
  26. data/lib/rggen/built_in/bit_field/type/rw_wo.erb +0 -9
  27. data/lib/rggen/built_in/bit_field/type/rw_wo.rb +0 -30
  28. data/lib/rggen/built_in/bit_field/type/rwc_rwe_rwl.erb +0 -16
  29. data/lib/rggen/built_in/bit_field/type/rwc_rwe_rwl.rb +0 -92
  30. data/lib/rggen/built_in/bit_field/type/w0trg_w1trg.erb +0 -9
  31. data/lib/rggen/built_in/bit_field/type/w0trg_w1trg.rb +0 -29
  32. data/lib/rggen/built_in/global/address_width.rb +0 -34
  33. data/lib/rggen/built_in/global/array_port_format.rb +0 -19
  34. data/lib/rggen/built_in/global/bus_width.rb +0 -35
  35. data/lib/rggen/built_in/global/fold_sv_interface_port.rb +0 -24
  36. data/lib/rggen/built_in/register/markdown.erb +0 -11
  37. data/lib/rggen/built_in/register/markdown.rb +0 -26
  38. data/lib/rggen/built_in/register/name.rb +0 -36
  39. data/lib/rggen/built_in/register/offset_address.rb +0 -106
  40. data/lib/rggen/built_in/register/size.rb +0 -95
  41. data/lib/rggen/built_in/register/sv_rtl_top.rb +0 -82
  42. data/lib/rggen/built_in/register/type.rb +0 -344
  43. data/lib/rggen/built_in/register/type/default_sv_ral.erb +0 -8
  44. data/lib/rggen/built_in/register/type/default_sv_rtl.erb +0 -15
  45. data/lib/rggen/built_in/register/type/external.erb +0 -11
  46. data/lib/rggen/built_in/register/type/external.rb +0 -128
  47. data/lib/rggen/built_in/register/type/indirect.rb +0 -327
  48. data/lib/rggen/built_in/register/type/indirect_sv_ral.erb +0 -13
  49. data/lib/rggen/built_in/register/type/indirect_sv_rtl.erb +0 -17
  50. data/lib/rggen/built_in/register_block/byte_size.rb +0 -61
  51. data/lib/rggen/built_in/register_block/markdown.erb +0 -8
  52. data/lib/rggen/built_in/register_block/markdown.rb +0 -36
  53. data/lib/rggen/built_in/register_block/name.rb +0 -38
  54. data/lib/rggen/built_in/register_block/protocol.rb +0 -100
  55. data/lib/rggen/built_in/register_block/protocol/apb.erb +0 -10
  56. data/lib/rggen/built_in/register_block/protocol/apb.rb +0 -89
  57. data/lib/rggen/built_in/register_block/protocol/axi4lite.erb +0 -11
  58. data/lib/rggen/built_in/register_block/protocol/axi4lite.rb +0 -125
  59. data/lib/rggen/built_in/register_block/sv_ral_block_model.erb +0 -11
  60. data/lib/rggen/built_in/register_block/sv_ral_package.rb +0 -65
  61. data/lib/rggen/built_in/register_block/sv_rtl_macros.erb +0 -9
  62. data/lib/rggen/built_in/register_block/sv_rtl_top.rb +0 -86
  63. data/lib/rggen/built_in/version.rb +0 -7
  64. data/lib/rggen/setup/default.rb +0 -30
  65. data/sample/block_0.md +0 -155
  66. data/sample/block_0.rb +0 -90
  67. data/sample/block_0.sv +0 -678
  68. data/sample/block_0.xlsx +0 -0
  69. data/sample/block_0.yml +0 -99
  70. data/sample/block_0_ral_pkg.sv +0 -184
  71. data/sample/block_1.md +0 -39
  72. data/sample/block_1.rb +0 -22
  73. data/sample/block_1.sv +0 -136
  74. data/sample/block_1.xlsx +0 -0
  75. data/sample/block_1.yml +0 -26
  76. data/sample/block_1_ral_pkg.sv +0 -68
  77. data/sample/config.json +0 -5
  78. data/sample/config.yml +0 -3
@@ -1,15 +0,0 @@
1
- <%= module_name %> #(
2
- <% if [:w0c, :w1c].include?(bit_field.type) %>
3
- .CLEAR_VALUE (<%= clear_value %>),
4
- <% end %>
5
- .WIDTH (<%= width %>),
6
- .INITIAL_VALUE (<%= initial_value %>)
7
- ) u_bit_field (
8
- .i_clk (<%= register_block.clock %>),
9
- .i_rst_n (<%= register_block.reset%>),
10
- .bit_field_if (<%= bit_field_if %>),
11
- .i_set (<%= set[loop_variables] %>),
12
- .i_mask (<%= mask %>),
13
- .o_value (<%= value_out[loop_variables] %>),
14
- .o_value_unmasked (<%= value_out_unmasked %>)
15
- );
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_list_item_feature(:bit_field, :type, :rc) do
4
- register_map do
5
- read_only
6
- reference use: true
7
- initial_value require: true
8
- end
9
- end
10
-
11
- RgGen.define_list_item_feature(:bit_field, :type, [:w0c, :w1c]) do
12
- register_map do
13
- read_write
14
- reference use: true
15
- initial_value require: true
16
- end
17
- end
18
-
19
- RgGen.define_list_item_feature(:bit_field, :type, [:rc, :w0c, :w1c]) do
20
- sv_rtl do
21
- build do
22
- input :register_block, :set, {
23
- name: "i_#{full_name}_set", data_type: :logic, width: width,
24
- array_size: array_size, array_format: array_port_format
25
- }
26
- output :register_block, :value_out, {
27
- name: "o_#{full_name}", data_type: :logic, width: width,
28
- array_size: array_size, array_format: array_port_format
29
- }
30
- if bit_field.reference?
31
- output :register_block, :value_unmasked, {
32
- name: "o_#{full_name}_unmasked", data_type: :logic, width: width,
33
- array_size: array_size, array_format: array_port_format
34
- }
35
- end
36
- end
37
-
38
- main_code :bit_field, from_template: true
39
-
40
- private
41
-
42
- def module_name
43
- if bit_field.type == :rc
44
- 'rggen_bit_field_rc'
45
- else
46
- 'rggen_bit_field_w01c'
47
- end
48
- end
49
-
50
- def clear_value
51
- bin({ w0c: 0, w1c: 1 }[bit_field.type], 1)
52
- end
53
-
54
- def value_out_unmasked
55
- (bit_field.reference? || nil) &&
56
- value_unmasked[loop_variables]
57
- end
58
- end
59
- end
@@ -1,3 +0,0 @@
1
- rggen_bit_field_reserved u_bit_field (
2
- .bit_field_if (<%= bit_field_if %>)
3
- );
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_list_item_feature(:bit_field, :type, :reserved) do
4
- register_map do
5
- reserved
6
- non_volatile
7
- end
8
-
9
- sv_rtl do
10
- main_code :bit_field, from_template: true
11
- end
12
-
13
- sv_ral do
14
- access 'RO'
15
- end
16
- end
@@ -1,6 +0,0 @@
1
- rggen_bit_field_ro #(
2
- .WIDTH (<%= width %>)
3
- ) u_bit_field (
4
- .bit_field_if (<%= bit_field_if %>),
5
- .i_value (<%= reference_or_value_in %>)
6
- );
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_list_item_feature(:bit_field, :type, :ro) do
4
- register_map do
5
- read_only
6
- reference use: true
7
- end
8
-
9
- sv_rtl do
10
- build do
11
- unless bit_field.reference?
12
- input :register_block, :value_in, {
13
- name: "i_#{full_name}", data_type: :logic, width: width,
14
- array_size: array_size, array_format: array_port_format
15
- }
16
- end
17
- end
18
-
19
- main_code :bit_field, from_template: true
20
-
21
- private
22
-
23
- def reference_or_value_in
24
- if bit_field.reference?
25
- reference_bit_field
26
- else
27
- value_in[loop_variables]
28
- end
29
- end
30
- end
31
- end
@@ -1,6 +0,0 @@
1
- rggen_bit_field_ro #(
2
- .WIDTH (<%= width %>)
3
- ) u_bit_field (
4
- .bit_field_if (<%= bit_field_if %>),
5
- .i_value (<%= initial_value %>)
6
- );
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_list_item_feature(:bit_field, :type, :rof) do
4
- register_map do
5
- read_only
6
- non_volatile
7
- initial_value require: true
8
- end
9
-
10
- sv_rtl do
11
- main_code :bit_field, from_template: true
12
- end
13
-
14
- sv_ral do
15
- access 'RO'
16
- end
17
- end
@@ -1,13 +0,0 @@
1
- <%= module_name %> #(
2
- <% if [:w0s, :w1s].include?(bit_field.type) %>
3
- .SET_VALUE (<%= set_value %>),
4
- <% end %>
5
- .WIDTH (<%= width %>),
6
- .INITIAL_VALUE (<%= initial_value %>)
7
- ) u_bit_field (
8
- .i_clk (<%= register_block.clock %>),
9
- .i_rst_n (<%= register_block.reset %>),
10
- .bit_field_if (<%= bit_field_if %>),
11
- .i_clear (<%= clear[loop_variables] %>),
12
- .o_value (<%= value_out[loop_variables] %>)
13
- );
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_list_item_feature(:bit_field, :type, :rs) do
4
- register_map do
5
- read_only
6
- initial_value require: true
7
- end
8
- end
9
-
10
- RgGen.define_list_item_feature(:bit_field, :type, [:w0s, :w1s]) do
11
- register_map do
12
- read_write
13
- initial_value require: true
14
- end
15
- end
16
-
17
- RgGen.define_list_item_feature(:bit_field, :type, [:rs, :w0s, :w1s]) do
18
- sv_rtl do
19
- build do
20
- input :register_block, :clear, {
21
- name: "i_#{full_name}_clear", data_type: :logic, width: width,
22
- array_size: array_size, array_format: array_port_format
23
- }
24
- output :register_block, :value_out, {
25
- name: "o_#{full_name}", data_type: :logic, width: width,
26
- array_size: array_size, array_format: array_port_format
27
- }
28
- end
29
-
30
- main_code :bit_field, from_template: true
31
-
32
- private
33
-
34
- def module_name
35
- if bit_field.type == :rs
36
- 'rggen_bit_field_rs'
37
- else
38
- 'rggen_bit_field_w01s'
39
- end
40
- end
41
-
42
- def set_value
43
- bin({ w0s: 0, w1s: 1 }[bit_field.type], 1)
44
- end
45
- end
46
- end
@@ -1,9 +0,0 @@
1
- rggen_bit_field_<%= bit_field.type %> #(
2
- .WIDTH (<%= width %>),
3
- .INITIAL_VALUE (<%= initial_value %>)
4
- ) u_bit_field (
5
- .i_clk (<%= register_block.clock %>),
6
- .i_rst_n (<%= register_block.reset %>),
7
- .bit_field_if (<%= bit_field_if %>),
8
- .o_value (<%= value_out[loop_variables] %>)
9
- );
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_list_item_feature(:bit_field, :type, :rw) do
4
- register_map do
5
- read_write
6
- non_volatile
7
- initial_value require: true
8
- end
9
- end
10
-
11
- RgGen.define_list_item_feature(:bit_field, :type, :wo) do
12
- register_map do
13
- write_only
14
- non_volatile
15
- initial_value require: true
16
- end
17
- end
18
-
19
- RgGen.define_list_item_feature(:bit_field, :type, [:rw, :wo]) do
20
- sv_rtl do
21
- build do
22
- output :register_block, :value_out, {
23
- name: "o_#{full_name}", data_type: :logic, width: width,
24
- array_size: array_size, array_format: array_port_format
25
- }
26
- end
27
-
28
- main_code :bit_field, from_template: true
29
- end
30
- end
@@ -1,16 +0,0 @@
1
- rggen_bit_field_<%= bit_field.type %> #(
2
- .WIDTH (<%= width %>),
3
- .INITIAL_VALUE (<%= initial_value %>)
4
- ) u_bit_field (
5
- .i_clk (<%= register_block.clock %>),
6
- .i_rst_n (<%= register_block.reset %>),
7
- .bit_field_if (<%= bit_field_if %>),
8
- <% if bit_field.type == :rwc %>
9
- .i_clear (<%= control_signal %>),
10
- <% elsif bit_field.type == :rwe %>
11
- .i_enable (<%= control_signal %>),
12
- <% else %>
13
- .i_lock (<%= control_signal %>),
14
- <% end %>
15
- .o_value (<%= value_out[loop_variables] %>)
16
- );
@@ -1,92 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_list_item_feature(:bit_field, :type, [:rwc, :rwe, :rwl]) do
4
- register_map do
5
- read_write
6
- volatile? { bit_field.type == :rwc || !bit_field.reference? }
7
- initial_value require: true
8
- reference use: true, width: 1
9
- end
10
-
11
- sv_rtl do
12
- build do
13
- if clear_port?
14
- input :register_block, :clear, {
15
- name: "i_#{full_name}_clear", data_type: :logic, width: 1,
16
- array_size: array_size, array_format: array_port_format
17
- }
18
- end
19
- if enable_port?
20
- input :register_block, :enable, {
21
- name: "i_#{full_name}_enable", data_type: :logic, width: 1,
22
- array_size: array_size, array_format: array_port_format
23
- }
24
- end
25
- if lock_port?
26
- input :register_block, :lock, {
27
- name: "i_#{full_name}_lock", data_type: :logic, width: 1,
28
- array_size: array_size, array_format: array_port_format
29
- }
30
- end
31
- output :register_block, :value_out, {
32
- name: "o_#{full_name}", data_type: :logic, width: width,
33
- array_size: array_size, array_format: array_port_format
34
- }
35
- end
36
-
37
- main_code :bit_field, from_template: true
38
-
39
- private
40
-
41
- def clear_port?
42
- bit_field.type == :rwc && !bit_field.reference?
43
- end
44
-
45
- def enable_port?
46
- bit_field.type == :rwe && !bit_field.reference?
47
- end
48
-
49
- def lock_port?
50
- bit_field.type == :rwl && !bit_field.reference?
51
- end
52
-
53
- def control_signal
54
- reference_bit_field || control_port[loop_variables]
55
- end
56
-
57
- def control_port
58
- case bit_field.type
59
- when :rwc
60
- clear
61
- when :rwe
62
- enable
63
- when :rwl
64
- lock
65
- end
66
- end
67
- end
68
- end
69
-
70
- RgGen.define_list_item_feature(:bit_field, :type, :rwc) do
71
- sv_ral do
72
- access 'RW'
73
- end
74
- end
75
-
76
- RgGen.define_list_item_feature(:bit_field, :type, [:rwe, :rwl]) do
77
- sv_ral do
78
- model_name do
79
- "rggen_ral_#{bit_field.type}_field #(#{reference_names})"
80
- end
81
-
82
- private
83
-
84
- def reference_names
85
- reference = bit_field.reference
86
- register = reference&.register
87
- [register&.name, reference&.name]
88
- .map { |name| string(name) }
89
- .join(', ')
90
- end
91
- end
92
- end
@@ -1,9 +0,0 @@
1
- rggen_bit_field_w01trg #(
2
- .TRIGGER_VALUE (<%= trigger_value %>),
3
- .WIDTH (<%= width %>)
4
- ) u_bit_field (
5
- .i_clk (<%= register_block.clock %>),
6
- .i_rst_n (<%= register_block.reset %>),
7
- .bit_field_if (<%= bit_field_if %>),
8
- .o_trigger (<%= trigger[loop_variables] %>)
9
- );
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_list_item_feature(:bit_field, :type, [:w0trg, :w1trg]) do
4
- register_map do
5
- write_only
6
- non_volatile
7
- end
8
-
9
- sv_rtl do
10
- build do
11
- output :register_block, :trigger, {
12
- name: "o_#{full_name}_trigger", data_type: :logic, width: width,
13
- array_size: array_size, array_format: array_port_format
14
- }
15
- end
16
-
17
- main_code :bit_field, from_template: true
18
-
19
- private
20
-
21
- def trigger_value
22
- bin({ w0trg: 0, w1trg: 1 }[bit_field.type], 1)
23
- end
24
- end
25
-
26
- sv_ral do
27
- model_name { "rggen_ral_#{bit_field.type}_field" }
28
- end
29
- end
@@ -1,34 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_simple_feature(:global, :address_width) do
4
- configuration do
5
- property :address_width, default: 32
6
-
7
- build do |value|
8
- @address_width =
9
- begin
10
- Integer(value)
11
- rescue ArgumentError, TypeError
12
- error "cannot convert #{value.inspect} into address width"
13
- end
14
- end
15
-
16
- verify(:component) do
17
- error_condition { address_width < min_address_width }
18
- message do
19
- 'input address width is less than minimum address width: ' \
20
- "address width #{address_width} " \
21
- "minimum address width #{min_address_width}"
22
- end
23
- end
24
-
25
- printable :address_width
26
-
27
- private
28
-
29
- def min_address_width
30
- byte_width = configuration.byte_width
31
- byte_width == 1 ? 1 : (byte_width - 1).bit_length
32
- end
33
- end
34
- end