rggen 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
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