rggen 0.8.2 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (269) hide show
  1. checksums.yaml +4 -4
  2. data/CODE_OF_CONDUCT.md +54 -29
  3. data/{LICENSE.txt → LICENSE} +1 -1
  4. data/README.md +65 -56
  5. data/lib/rggen.rb +4 -63
  6. data/lib/rggen/built_in.rb +53 -0
  7. data/lib/rggen/built_in/bit_field/bit_assignment.rb +108 -0
  8. data/lib/rggen/built_in/bit_field/comment.rb +16 -0
  9. data/lib/rggen/built_in/bit_field/initial_value.rb +45 -0
  10. data/lib/rggen/built_in/bit_field/name.rb +39 -0
  11. data/lib/rggen/built_in/bit_field/reference.rb +100 -0
  12. data/lib/rggen/built_in/bit_field/sv_rtl_top.rb +87 -0
  13. data/lib/rggen/built_in/bit_field/type.rb +279 -0
  14. data/lib/rggen/built_in/bit_field/type/rc_w0c_w1c.erb +15 -0
  15. data/lib/rggen/built_in/bit_field/type/rc_w0c_w1c.rb +68 -0
  16. data/lib/rggen/built_in/bit_field/type/reserved.erb +3 -0
  17. data/lib/rggen/built_in/bit_field/type/reserved.rb +16 -0
  18. data/lib/rggen/built_in/bit_field/type/ro.erb +6 -0
  19. data/lib/rggen/built_in/bit_field/type/ro.rb +34 -0
  20. data/lib/rggen/built_in/bit_field/type/rof.erb +6 -0
  21. data/lib/rggen/built_in/bit_field/type/rof.rb +17 -0
  22. data/lib/rggen/built_in/bit_field/type/rs_w0s_w1s.erb +13 -0
  23. data/lib/rggen/built_in/bit_field/type/rs_w0s_w1s.rb +52 -0
  24. data/lib/rggen/built_in/bit_field/type/rw_wo.erb +9 -0
  25. data/lib/rggen/built_in/bit_field/type/rw_wo.rb +33 -0
  26. data/lib/rggen/built_in/bit_field/type/rwe_rwl.erb +14 -0
  27. data/lib/rggen/built_in/bit_field/type/rwe_rwl.rb +39 -0
  28. data/lib/rggen/built_in/global/address_width.rb +32 -0
  29. data/lib/rggen/built_in/global/array_port_format.rb +19 -0
  30. data/lib/rggen/built_in/global/bus_width.rb +33 -0
  31. data/lib/rggen/built_in/global/fold_sv_interface_port.rb +24 -0
  32. data/lib/rggen/built_in/register/name.rb +34 -0
  33. data/lib/rggen/built_in/register/offset_address.rb +96 -0
  34. data/lib/rggen/built_in/register/size.rb +49 -0
  35. data/lib/rggen/built_in/register/sv_rtl_top.rb +82 -0
  36. data/lib/rggen/built_in/register/type.rb +374 -0
  37. data/lib/rggen/built_in/register/type/default_sv_ral.erb +8 -0
  38. data/lib/rggen/built_in/register/type/default_sv_rtl.erb +15 -0
  39. data/lib/rggen/built_in/register/type/external.erb +11 -0
  40. data/lib/rggen/built_in/register/type/external.rb +141 -0
  41. data/lib/rggen/built_in/register/type/indirect.rb +329 -0
  42. data/lib/rggen/built_in/register/type/indirect_sv_ral.erb +13 -0
  43. data/lib/rggen/built_in/register/type/indirect_sv_rtl.erb +17 -0
  44. data/lib/rggen/built_in/register_block/byte_size.rb +59 -0
  45. data/lib/rggen/built_in/register_block/name.rb +36 -0
  46. data/lib/rggen/built_in/register_block/protocol.rb +71 -0
  47. data/lib/rggen/built_in/register_block/protocol/apb.erb +10 -0
  48. data/lib/rggen/built_in/register_block/protocol/apb.rb +113 -0
  49. data/lib/rggen/built_in/register_block/protocol/axi4lite.erb +11 -0
  50. data/lib/rggen/built_in/register_block/protocol/axi4lite.rb +167 -0
  51. data/lib/rggen/built_in/register_block/sv_ral_block_model.erb +11 -0
  52. data/lib/rggen/built_in/register_block/sv_ral_package.rb +58 -0
  53. data/lib/rggen/built_in/register_block/sv_rtl_macros.erb +9 -0
  54. data/lib/rggen/built_in/register_block/sv_rtl_top.rb +87 -0
  55. data/lib/rggen/built_in/version.rb +7 -0
  56. data/lib/rggen/default_setup_file.rb +6 -0
  57. data/lib/rggen/setup/default.rb +26 -0
  58. data/lib/rggen/version.rb +5 -4
  59. data/sample/block_0.rb +85 -0
  60. data/sample/block_0.sv +601 -0
  61. data/sample/block_0.xlsx +0 -0
  62. data/sample/block_0.yml +94 -0
  63. data/sample/block_0_ral_pkg.sv +174 -0
  64. data/sample/block_1.rb +22 -0
  65. data/sample/block_1.sv +136 -0
  66. data/sample/block_1.xlsx +0 -0
  67. data/sample/block_1.yml +26 -0
  68. data/sample/block_1_ral_pkg.sv +68 -0
  69. data/sample/config.json +5 -0
  70. data/sample/config.yml +3 -0
  71. metadata +96 -270
  72. data/bin/rggen +0 -6
  73. data/c_header/LICENSE +0 -21
  74. data/c_header/rggen.h +0 -17
  75. data/lib/rggen/base/component.rb +0 -31
  76. data/lib/rggen/base/component_factory.rb +0 -53
  77. data/lib/rggen/base/hierarchical_accessors.rb +0 -87
  78. data/lib/rggen/base/hierarchical_item_accessors.rb +0 -79
  79. data/lib/rggen/base/internal_struct.rb +0 -28
  80. data/lib/rggen/base/item.rb +0 -35
  81. data/lib/rggen/base/item_factory.rb +0 -25
  82. data/lib/rggen/builder/builder.rb +0 -69
  83. data/lib/rggen/builder/category.rb +0 -63
  84. data/lib/rggen/builder/component_entry.rb +0 -50
  85. data/lib/rggen/builder/component_store.rb +0 -42
  86. data/lib/rggen/builder/input_component_store.rb +0 -25
  87. data/lib/rggen/builder/item_store.rb +0 -89
  88. data/lib/rggen/builder/list_item_entry.rb +0 -81
  89. data/lib/rggen/builder/output_component_store.rb +0 -13
  90. data/lib/rggen/builder/simple_item_entry.rb +0 -33
  91. data/lib/rggen/builtins.rb +0 -55
  92. data/lib/rggen/builtins/bit_field/bit_assignment.rb +0 -39
  93. data/lib/rggen/builtins/bit_field/field_model.rb +0 -38
  94. data/lib/rggen/builtins/bit_field/initial_value.rb +0 -36
  95. data/lib/rggen/builtins/bit_field/name.rb +0 -26
  96. data/lib/rggen/builtins/bit_field/reference.rb +0 -40
  97. data/lib/rggen/builtins/bit_field/rtl_top.rb +0 -11
  98. data/lib/rggen/builtins/bit_field/type.rb +0 -244
  99. data/lib/rggen/builtins/bit_field/types/reserved.erb +0 -6
  100. data/lib/rggen/builtins/bit_field/types/reserved.rb +0 -18
  101. data/lib/rggen/builtins/bit_field/types/ro.erb +0 -6
  102. data/lib/rggen/builtins/bit_field/types/ro.rb +0 -22
  103. data/lib/rggen/builtins/bit_field/types/rw.erb +0 -9
  104. data/lib/rggen/builtins/bit_field/types/rw.rb +0 -23
  105. data/lib/rggen/builtins/bit_field/types/rwl_rwe.erb +0 -11
  106. data/lib/rggen/builtins/bit_field/types/rwl_rwe.rb +0 -54
  107. data/lib/rggen/builtins/bit_field/types/w0c_w1c.erb +0 -12
  108. data/lib/rggen/builtins/bit_field/types/w0c_w1c.rb +0 -33
  109. data/lib/rggen/builtins/bit_field/types/w0s_w1s.erb +0 -12
  110. data/lib/rggen/builtins/bit_field/types/w0s_w1s.rb +0 -33
  111. data/lib/rggen/builtins/bit_field/types/wo.rb +0 -5
  112. data/lib/rggen/builtins/global/address_width.rb +0 -17
  113. data/lib/rggen/builtins/global/array_port_format.rb +0 -15
  114. data/lib/rggen/builtins/global/data_width.rb +0 -20
  115. data/lib/rggen/builtins/global/unfold_sv_interface_port.rb +0 -22
  116. data/lib/rggen/builtins/loaders/configuration/json_loader.rb +0 -7
  117. data/lib/rggen/builtins/loaders/configuration/yaml_loader.rb +0 -7
  118. data/lib/rggen/builtins/loaders/register_map/csv_loader.rb +0 -12
  119. data/lib/rggen/builtins/loaders/register_map/xls_loader.rb +0 -17
  120. data/lib/rggen/builtins/loaders/register_map/xlsx_ods_loader.rb +0 -21
  121. data/lib/rggen/builtins/register/array.rb +0 -30
  122. data/lib/rggen/builtins/register/constructor.rb +0 -17
  123. data/lib/rggen/builtins/register/field_model_creator.rb +0 -14
  124. data/lib/rggen/builtins/register/indirect_index_configurator.rb +0 -54
  125. data/lib/rggen/builtins/register/name.rb +0 -26
  126. data/lib/rggen/builtins/register/offset_address.rb +0 -61
  127. data/lib/rggen/builtins/register/reg_model.rb +0 -107
  128. data/lib/rggen/builtins/register/rtl_top.rb +0 -68
  129. data/lib/rggen/builtins/register/sub_block_model.rb +0 -34
  130. data/lib/rggen/builtins/register/type.rb +0 -283
  131. data/lib/rggen/builtins/register/types/default.erb +0 -10
  132. data/lib/rggen/builtins/register/types/external.erb +0 -11
  133. data/lib/rggen/builtins/register/types/external.rb +0 -77
  134. data/lib/rggen/builtins/register/types/indirect.erb +0 -13
  135. data/lib/rggen/builtins/register/types/indirect.rb +0 -175
  136. data/lib/rggen/builtins/register/uniqueness_validator.rb +0 -51
  137. data/lib/rggen/builtins/register_block/address_struct.rb +0 -56
  138. data/lib/rggen/builtins/register_block/base_address.rb +0 -64
  139. data/lib/rggen/builtins/register_block/block_model.rb +0 -20
  140. data/lib/rggen/builtins/register_block/byte_size.rb +0 -37
  141. data/lib/rggen/builtins/register_block/c_header_file.rb +0 -15
  142. data/lib/rggen/builtins/register_block/clock_reset.rb +0 -8
  143. data/lib/rggen/builtins/register_block/constructor.rb +0 -14
  144. data/lib/rggen/builtins/register_block/default_map_creator.rb +0 -39
  145. data/lib/rggen/builtins/register_block/host_if.rb +0 -64
  146. data/lib/rggen/builtins/register_block/host_ifs/apb.erb +0 -10
  147. data/lib/rggen/builtins/register_block/host_ifs/apb.rb +0 -64
  148. data/lib/rggen/builtins/register_block/host_ifs/axi4lite.erb +0 -11
  149. data/lib/rggen/builtins/register_block/host_ifs/axi4lite.rb +0 -93
  150. data/lib/rggen/builtins/register_block/name.rb +0 -26
  151. data/lib/rggen/builtins/register_block/ral_package.rb +0 -24
  152. data/lib/rggen/builtins/register_block/rtl_top.rb +0 -38
  153. data/lib/rggen/builtins/register_block/sub_model_creator.rb +0 -14
  154. data/lib/rggen/commands.rb +0 -23
  155. data/lib/rggen/core_components.rb +0 -54
  156. data/lib/rggen/core_components/c_header/item.rb +0 -8
  157. data/lib/rggen/core_components/c_header/setup.rb +0 -19
  158. data/lib/rggen/core_components/c_utility.rb +0 -19
  159. data/lib/rggen/core_components/c_utility/data_structure_definition.rb +0 -60
  160. data/lib/rggen/core_components/c_utility/source_file.rb +0 -10
  161. data/lib/rggen/core_components/c_utility/variable_declaration.rb +0 -35
  162. data/lib/rggen/core_components/code_utility.rb +0 -56
  163. data/lib/rggen/core_components/code_utility/code_block.rb +0 -72
  164. data/lib/rggen/core_components/code_utility/line.rb +0 -28
  165. data/lib/rggen/core_components/code_utility/source_file.rb +0 -97
  166. data/lib/rggen/core_components/configuration/configuration_factory.rb +0 -23
  167. data/lib/rggen/core_components/configuration/item.rb +0 -11
  168. data/lib/rggen/core_components/configuration/item_factory.rb +0 -20
  169. data/lib/rggen/core_components/configuration/raise_error.rb +0 -11
  170. data/lib/rggen/core_components/configuration/setup.rb +0 -14
  171. data/lib/rggen/core_components/erb_engine.rb +0 -15
  172. data/lib/rggen/core_components/ral/component.rb +0 -24
  173. data/lib/rggen/core_components/ral/item.rb +0 -59
  174. data/lib/rggen/core_components/ral/setup.rb +0 -19
  175. data/lib/rggen/core_components/register_map/bit_field_factory.rb +0 -11
  176. data/lib/rggen/core_components/register_map/component.rb +0 -15
  177. data/lib/rggen/core_components/register_map/component_factory.rb +0 -9
  178. data/lib/rggen/core_components/register_map/generic_map.rb +0 -80
  179. data/lib/rggen/core_components/register_map/item.rb +0 -26
  180. data/lib/rggen/core_components/register_map/item_factory.rb +0 -26
  181. data/lib/rggen/core_components/register_map/loader.rb +0 -11
  182. data/lib/rggen/core_components/register_map/raise_error.rb +0 -17
  183. data/lib/rggen/core_components/register_map/register_block_factory.rb +0 -29
  184. data/lib/rggen/core_components/register_map/register_factory.rb +0 -18
  185. data/lib/rggen/core_components/register_map/register_map_factory.rb +0 -18
  186. data/lib/rggen/core_components/register_map/setup.rb +0 -33
  187. data/lib/rggen/core_components/rtl/component.rb +0 -24
  188. data/lib/rggen/core_components/rtl/item.rb +0 -82
  189. data/lib/rggen/core_components/rtl/setup.rb +0 -19
  190. data/lib/rggen/core_components/verilog_utility.rb +0 -88
  191. data/lib/rggen/core_components/verilog_utility/class_definition.rb +0 -56
  192. data/lib/rggen/core_components/verilog_utility/identifier.rb +0 -78
  193. data/lib/rggen/core_components/verilog_utility/interface_instance.rb +0 -37
  194. data/lib/rggen/core_components/verilog_utility/interface_port.rb +0 -33
  195. data/lib/rggen/core_components/verilog_utility/local_scope.rb +0 -75
  196. data/lib/rggen/core_components/verilog_utility/module_definition.rb +0 -82
  197. data/lib/rggen/core_components/verilog_utility/package_definition.rb +0 -57
  198. data/lib/rggen/core_components/verilog_utility/source_file.rb +0 -10
  199. data/lib/rggen/core_components/verilog_utility/structure_definition.rb +0 -51
  200. data/lib/rggen/core_components/verilog_utility/subroutine_definition.rb +0 -41
  201. data/lib/rggen/core_components/verilog_utility/variable.rb +0 -115
  202. data/lib/rggen/core_extensions/array.rb +0 -9
  203. data/lib/rggen/core_extensions/facets.rb +0 -22
  204. data/lib/rggen/core_extensions/forwardable.rb +0 -49
  205. data/lib/rggen/core_extensions/integer.rb +0 -5
  206. data/lib/rggen/core_extensions/math.rb +0 -7
  207. data/lib/rggen/core_extensions/roo.rb +0 -17
  208. data/lib/rggen/exceptions.rb +0 -28
  209. data/lib/rggen/generator.rb +0 -67
  210. data/lib/rggen/input_base/component.rb +0 -28
  211. data/lib/rggen/input_base/component_factory.rb +0 -58
  212. data/lib/rggen/input_base/item.rb +0 -171
  213. data/lib/rggen/input_base/item_factory.rb +0 -13
  214. data/lib/rggen/input_base/loader.rb +0 -23
  215. data/lib/rggen/input_base/regexp_patterns.rb +0 -29
  216. data/lib/rggen/option_switches.rb +0 -60
  217. data/lib/rggen/options.rb +0 -97
  218. data/lib/rggen/output_base/code_generator.rb +0 -36
  219. data/lib/rggen/output_base/component.rb +0 -78
  220. data/lib/rggen/output_base/component_factory.rb +0 -32
  221. data/lib/rggen/output_base/file_writer.rb +0 -36
  222. data/lib/rggen/output_base/item.rb +0 -110
  223. data/lib/rggen/output_base/item_factory.rb +0 -9
  224. data/lib/rggen/output_base/template_engine.rb +0 -24
  225. data/lib/rggen/rggen_home.rb +0 -3
  226. data/ral/LICENSE +0 -21
  227. data/ral/compile.f +0 -2
  228. data/ral/rggen_ral_block.svh +0 -83
  229. data/ral/rggen_ral_field.svh +0 -47
  230. data/ral/rggen_ral_field_rwl_rwe.svh +0 -158
  231. data/ral/rggen_ral_indirect_reg.svh +0 -193
  232. data/ral/rggen_ral_macros.svh +0 -27
  233. data/ral/rggen_ral_map.svh +0 -124
  234. data/ral/rggen_ral_pkg.sv +0 -15
  235. data/ral/rggen_ral_reg.svh +0 -88
  236. data/rtl/LICENSE +0 -21
  237. data/rtl/compile.f +0 -18
  238. data/rtl/rggen_address_decoder.sv +0 -23
  239. data/rtl/rggen_apb_if.sv +0 -41
  240. data/rtl/rggen_axi4lite_if.sv +0 -68
  241. data/rtl/rggen_bit_field_if.sv +0 -28
  242. data/rtl/rggen_bit_field_ro.sv +0 -9
  243. data/rtl/rggen_bit_field_rw.sv +0 -25
  244. data/rtl/rggen_bit_field_rwl_rwe.sv +0 -29
  245. data/rtl/rggen_bit_field_w01s_w01c.sv +0 -55
  246. data/rtl/rggen_bus_if.sv +0 -43
  247. data/rtl/rggen_bus_splitter.sv +0 -86
  248. data/rtl/rggen_default_register.sv +0 -15
  249. data/rtl/rggen_external_register.sv +0 -83
  250. data/rtl/rggen_host_if_apb.sv +0 -29
  251. data/rtl/rggen_host_if_axi4lite.sv +0 -161
  252. data/rtl/rggen_indirect_register.sv +0 -21
  253. data/rtl/rggen_register_base.sv +0 -57
  254. data/rtl/rggen_register_if.sv +0 -42
  255. data/rtl/rggen_rtl_pkg.sv +0 -23
  256. data/sample/LICENSE +0 -21
  257. data/sample/sample.csv +0 -21
  258. data/sample/sample.json +0 -6
  259. data/sample/sample.xls +0 -0
  260. data/sample/sample.xlsx +0 -0
  261. data/sample/sample.yaml +0 -4
  262. data/sample/sample_0.h +0 -17
  263. data/sample/sample_0.sv +0 -402
  264. data/sample/sample_0_ral_pkg.sv +0 -145
  265. data/sample/sample_1.h +0 -9
  266. data/sample/sample_1.sv +0 -128
  267. data/sample/sample_1_ral_pkg.sv +0 -56
  268. data/sample/sample_setup.rb +0 -24
  269. data/setup/default.rb +0 -14
@@ -0,0 +1,11 @@
1
+ function new(string name);
2
+ super.new(name);
3
+ endfunction
4
+ function void build();
5
+ <% reg_model_constructors.each do |constructor| %>
6
+ <%= constructor %>
7
+ <% end %>
8
+ endfunction
9
+ function uvm_reg_map create_default_map();
10
+ return create_map("default_map", 0, <%= byte_width %>, UVM_LITTLE_ENDIAN, 1);
11
+ endfunction
@@ -0,0 +1,58 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_simple_feature(:register_block, :sv_ral_package) do
4
+ sv_ral do
5
+ write_file '<%= package_name %>.sv' do |file|
6
+ file.body do
7
+ package_definition(package_name) do |package|
8
+ package.package_imports [
9
+ 'uvm_pkg', 'rggen_ral_pkg'
10
+ ]
11
+ package.include_files [
12
+ 'uvm_macros.svh', 'rggen_ral_macros.svh'
13
+ ]
14
+ package.body do |code|
15
+ register_block.generate_code(:ral_package, :bottom_up, code)
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ main_code :ral_package do
22
+ class_definition(model_name) do |sv_class|
23
+ sv_class.base 'rggen_ral_block'
24
+ sv_class.parameters parameters
25
+ sv_class.variables variables
26
+ sv_class.body do
27
+ process_template(File.join(__dir__, 'sv_ral_block_model.erb'))
28
+ end
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def package_name
35
+ "#{register_block.name}_ral_pkg"
36
+ end
37
+
38
+ def model_name
39
+ "#{register_block.name}_block_model"
40
+ end
41
+
42
+ def parameters
43
+ register_block.declarations(:register_block, :parameter)
44
+ end
45
+
46
+ def variables
47
+ register_block.declarations(:register_block, :variable)
48
+ end
49
+
50
+ def reg_model_constructors
51
+ register_block.registers.flat_map(&:constructors)
52
+ end
53
+
54
+ def byte_width
55
+ configuration.byte_width
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,9 @@
1
+ `ifndef rggen_connect_bit_field_if
2
+ `define rggen_connect_bit_field_if(RIF, FIF, LSB, WIDTH) \
3
+ assign FIF.valid = RIF.valid; \
4
+ assign FIF.read_mask = RIF.read_mask[LSB+:WIDTH]; \
5
+ assign FIF.write_mask = RIF.write_mask[LSB+:WIDTH]; \
6
+ assign FIF.write_data = RIF.write_data[LSB+:WIDTH]; \
7
+ assign RIF.read_data[LSB+:WIDTH] = FIF.read_data; \
8
+ assign RIF.value[LSB+:WIDTH] = FIF.value;
9
+ `endif
@@ -0,0 +1,87 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_simple_feature(:register_block, :sv_rtl_top) do
4
+ sv_rtl do
5
+ export :total_registers
6
+
7
+ build do
8
+ input :register_block, :clock, {
9
+ name: 'i_clk',
10
+ data_type: :logic,
11
+ width: 1
12
+ }
13
+ input :register_block, :reset, {
14
+ name: 'i_rst_n',
15
+ data_type: :logic,
16
+ width: 1
17
+ }
18
+ interface :register_block, :register_if, {
19
+ name: 'register_if',
20
+ interface_type: 'rggen_register_if',
21
+ parameter_values: [address_width, bus_width, value_width],
22
+ array_size: [total_registers],
23
+ variables: ['value']
24
+ }
25
+ end
26
+
27
+ write_file '<%= register_block.name %>.sv' do |file|
28
+ file.body(&method(:body_code))
29
+ end
30
+
31
+ def total_registers
32
+ register_block
33
+ .registers
34
+ .map(&:count)
35
+ .inject(:+)
36
+ end
37
+
38
+ private
39
+
40
+ def address_width
41
+ register_block.local_address_width
42
+ end
43
+
44
+ def bus_width
45
+ configuration.bus_width
46
+ end
47
+
48
+ def value_width
49
+ register_block.registers.map(&:width).max
50
+ end
51
+
52
+ def body_code(code)
53
+ macro_definition(code)
54
+ sv_module_definition(code)
55
+ end
56
+
57
+ def macro_definition(code)
58
+ code << process_template(File.join(__dir__, 'sv_rtl_macros.erb'))
59
+ end
60
+
61
+ def sv_module_definition(code)
62
+ code << module_definition(register_block.name) do |sv_module|
63
+ sv_module.package_imports [:rggen_rtl_pkg]
64
+ sv_module.parameters parameters
65
+ sv_module.ports ports
66
+ sv_module.variables variables
67
+ sv_module.body(&method(:sv_module_body))
68
+ end
69
+ end
70
+
71
+ def parameters
72
+ register_block.declarations(:register_block, :parameter)
73
+ end
74
+
75
+ def ports
76
+ register_block.declarations(:register_block, :port)
77
+ end
78
+
79
+ def variables
80
+ register_block.declarations(:register_block, :variable)
81
+ end
82
+
83
+ def sv_module_body(code)
84
+ register_block.generate_code(:register_block, :top_down, code)
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module BuiltIn
5
+ VERSION = '0.9.0'
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ DEFAULT_SETUP_FILE =
5
+ File.expand_path('setup/default.rb', __dir__).freeze
6
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rggen/systemverilog'
4
+ require 'rggen/built_in'
5
+ require 'rggen/spreadsheet_loader'
6
+
7
+ RgGen.enable :global, [
8
+ :bus_width, :address_width, :array_port_format, :fold_sv_interface_port
9
+ ]
10
+
11
+ RgGen.enable :register_block, [:name, :byte_size]
12
+ RgGen.enable :register, [:name, :offset_address, :size, :type]
13
+ RgGen.enable :register, :type, [:external, :indirect]
14
+ RgGen.enable :bit_field, [
15
+ :name, :bit_assignment, :type, :initial_value, :reference, :comment
16
+ ]
17
+ RgGen.enable :bit_field, :type, [
18
+ :rc, :reserved, :ro, :rof, :rs, :rw, :rwe, :rwl, :w0c, :w1c, :w0s, :w1s, :wo
19
+ ]
20
+
21
+ RgGen.enable :register_block, [:sv_rtl_top, :protocol]
22
+ RgGen.enable :register_block, :protocol, [:apb, :axi4lite]
23
+ RgGen.enable :register, [:sv_rtl_top]
24
+ RgGen.enable :bit_field, [:sv_rtl_top]
25
+
26
+ RgGen.enable :register_block, [:sv_ral_package]
data/lib/rggen/version.rb CHANGED
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'built_in/version'
4
+
1
5
  module RgGen
2
- MAJOR = 0
3
- MINOR = 8
4
- TEENY = 2
5
- VERSION = "#{MAJOR}.#{MINOR}.#{TEENY}".freeze
6
+ VERSION = BuiltIn::VERSION
6
7
  end
data/sample/block_0.rb ADDED
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ register_block {
4
+ name 'block_0'
5
+ byte_size 256
6
+
7
+ register {
8
+ name 'register_0'
9
+ offset_address 0x00
10
+ bit_field { name 'bit_field_0'; bit_assignment lsb: 0 , width: 4; type :rw; initial_value 0 }
11
+ bit_field { name 'bit_field_1'; bit_assignment lsb: 4 , width: 4; type :rw; initial_value 0 }
12
+ bit_field { name 'bit_field_2'; bit_assignment lsb: 8 , width: 1; type :rw; initial_value 0 }
13
+ }
14
+
15
+ register {
16
+ name 'register_1'
17
+ offset_address 0x04
18
+ bit_field { name 'bit_field_0'; bit_assignment lsb: 0 , width: 4; type :ro }
19
+ bit_field { name 'bit_field_1'; bit_assignment lsb: 8 , width: 4; type :ro }
20
+ bit_field { name 'bit_field_2'; bit_assignment lsb: 16, width: 8; type :rof; initial_value 0xab }
21
+ bit_field { name 'bit_field_3'; bit_assignment lsb: 24, width: 8; type :reserved }
22
+ }
23
+
24
+ register {
25
+ name 'register_2'
26
+ offset_address 0x04
27
+ bit_field { name 'bit_field_0'; bit_assignment lsb: 0, width: 4; type :wo; initial_value 0 }
28
+ bit_field { name 'bit_field_1'; bit_assignment lsb: 8, width: 4; type :wo; initial_value 0 }
29
+ }
30
+
31
+ register {
32
+ name 'register_3'
33
+ offset_address 0x08
34
+ bit_field { name 'bit_field_0'; bit_assignment lsb: 0 , width: 4; type :rc; initial_value 0 }
35
+ bit_field { name 'bit_field_1'; bit_assignment lsb: 8 , width: 4; type :rc; initial_value 0; reference 'register_0.bit_field_0' }
36
+ bit_field { name 'bit_field_2'; bit_assignment lsb: 12, width: 4; type :ro; reference 'register_3.bit_field_1' }
37
+ bit_field { name 'bit_field_3'; bit_assignment lsb: 16, width: 4; type :rs; initial_value 0 }
38
+ }
39
+
40
+ register {
41
+ name 'register_4'
42
+ offset_address 0x0C
43
+ bit_field { name 'bit_field_0'; bit_assignment lsb: 0 , width: 8; type :rwe; initial_value 0; reference 'register_0.bit_field_2' }
44
+ bit_field { name 'bit_field_1'; bit_assignment lsb: 16, width: 8; type :rwl; initial_value 0; reference 'register_0.bit_field_2' }
45
+ }
46
+
47
+ register {
48
+ name 'register_5'
49
+ offset_address 0x10
50
+ bit_field { name 'bit_field_0'; bit_assignment lsb: 0 , width: 4; type :w0c; initial_value 0 }
51
+ bit_field { name 'bit_field_1'; bit_assignment lsb: 4 , width: 4; type :w0c; initial_value 0; reference 'register_0.bit_field_0' }
52
+ bit_field { name 'bit_field_2'; bit_assignment lsb: 8 , width: 4; type :ro ; reference 'register_5.bit_field_1' }
53
+ bit_field { name 'bit_field_3'; bit_assignment lsb: 12, width: 4; type :w1c; initial_value 0 }
54
+ bit_field { name 'bit_field_4'; bit_assignment lsb: 16, width: 4; type :w1c; initial_value 0; reference 'register_0.bit_field_0' }
55
+ bit_field { name 'bit_field_5'; bit_assignment lsb: 20, width: 4; type :ro ; reference 'register_5.bit_field_4' }
56
+ bit_field { name 'bit_field_6'; bit_assignment lsb: 24, width: 4; type :w0s; initial_value 0 }
57
+ bit_field { name 'bit_field_7'; bit_assignment lsb: 28, width: 4; type :w1s; initial_value 0 }
58
+ }
59
+
60
+ register {
61
+ name 'register_6'
62
+ offset_address 0x20
63
+ size 4
64
+ # bit assignments: [7:0] [23:16] [39:32] [55:48]
65
+ bit_field { name 'bit_field_0'; bit_assignment lsb: 0, width: 8, sequence_size: 4, step: 16; type :rw; initial_value 0 }
66
+ # bit assignments: [15:8] [31:24] [47:40] [63:56]
67
+ bit_field { name 'bit_field_1'; bit_assignment lsb: 8, width: 8, sequence_size: 4, step: 16; type :rw; initial_value 0 }
68
+ }
69
+
70
+ register {
71
+ name 'register_7'
72
+ offset_address 0x40
73
+ size [2, 4]
74
+ type [:indirect, 'register_0.bit_field_0', 'register_0.bit_field_1', ['register_0.bit_field_2', 1]]
75
+ bit_field { name 'bit_field_0'; bit_assignment lsb: 0, width: 8, sequence_size: 4, step: 16; type :rw; initial_value 0 }
76
+ bit_field { name 'bit_field_1'; bit_assignment lsb: 8, width: 8, sequence_size: 4, step: 16; type :rw; initial_value 0 }
77
+ }
78
+
79
+ register {
80
+ name 'register_8'
81
+ offset_address 0x80
82
+ size 32
83
+ type :external
84
+ }
85
+ }
data/sample/block_0.sv ADDED
@@ -0,0 +1,601 @@
1
+ `ifndef rggen_connect_bit_field_if
2
+ `define rggen_connect_bit_field_if(RIF, FIF, LSB, WIDTH) \
3
+ assign FIF.valid = RIF.valid; \
4
+ assign FIF.read_mask = RIF.read_mask[LSB+:WIDTH]; \
5
+ assign FIF.write_mask = RIF.write_mask[LSB+:WIDTH]; \
6
+ assign FIF.write_data = RIF.write_data[LSB+:WIDTH]; \
7
+ assign RIF.read_data[LSB+:WIDTH] = FIF.read_data; \
8
+ assign RIF.value[LSB+:WIDTH] = FIF.value;
9
+ `endif
10
+ module block_0
11
+ import rggen_rtl_pkg::*;
12
+ (
13
+ input logic i_clk,
14
+ input logic i_rst_n,
15
+ rggen_apb_if.slave apb_if,
16
+ output logic [3:0] o_register_0_bit_field_0,
17
+ output logic [3:0] o_register_0_bit_field_1,
18
+ output logic o_register_0_bit_field_2,
19
+ input logic [3:0] i_register_1_bit_field_0,
20
+ input logic [3:0] i_register_1_bit_field_1,
21
+ output logic [3:0] o_register_2_bit_field_0,
22
+ output logic [3:0] o_register_2_bit_field_1,
23
+ input logic [3:0] i_register_3_bit_field_0_set,
24
+ output logic [3:0] o_register_3_bit_field_0,
25
+ input logic [3:0] i_register_3_bit_field_1_set,
26
+ output logic [3:0] o_register_3_bit_field_1,
27
+ output logic [3:0] o_register_3_bit_field_1_unmasked,
28
+ input logic [3:0] i_register_3_bit_field_3_clear,
29
+ output logic [3:0] o_register_3_bit_field_3,
30
+ output logic [7:0] o_register_4_bit_field_0,
31
+ output logic [7:0] o_register_4_bit_field_1,
32
+ input logic [3:0] i_register_5_bit_field_0_set,
33
+ output logic [3:0] o_register_5_bit_field_0,
34
+ input logic [3:0] i_register_5_bit_field_1_set,
35
+ output logic [3:0] o_register_5_bit_field_1,
36
+ output logic [3:0] o_register_5_bit_field_1_unmasked,
37
+ input logic [3:0] i_register_5_bit_field_3_set,
38
+ output logic [3:0] o_register_5_bit_field_3,
39
+ input logic [3:0] i_register_5_bit_field_4_set,
40
+ output logic [3:0] o_register_5_bit_field_4,
41
+ output logic [3:0] o_register_5_bit_field_4_unmasked,
42
+ input logic [3:0] i_register_5_bit_field_6_clear,
43
+ output logic [3:0] o_register_5_bit_field_6,
44
+ input logic [3:0] i_register_5_bit_field_7_clear,
45
+ output logic [3:0] o_register_5_bit_field_7,
46
+ output logic [3:0][3:0][7:0] o_register_6_bit_field_0,
47
+ output logic [3:0][3:0][7:0] o_register_6_bit_field_1,
48
+ output logic [1:0][3:0][3:0][7:0] o_register_7_bit_field_0,
49
+ output logic [1:0][3:0][3:0][7:0] o_register_7_bit_field_1,
50
+ rggen_bus_if.master register_8_bus_if
51
+ );
52
+ rggen_register_if #(8, 32, 64) register_if[19]();
53
+ rggen_apb_adapter #(
54
+ .ADDRESS_WIDTH (8),
55
+ .BUS_WIDTH (32),
56
+ .REGISTERS (19)
57
+ ) u_adapter (
58
+ .i_clk (i_clk),
59
+ .i_rst_n (i_rst_n),
60
+ .apb_if (apb_if),
61
+ .register_if (register_if)
62
+ );
63
+ generate if (1) begin : g_register_0
64
+ rggen_bit_field_if #(32) bit_field_if();
65
+ rggen_default_register #(
66
+ .READABLE (1),
67
+ .WRITABLE (1),
68
+ .ADDRESS_WIDTH (8),
69
+ .OFFSET_ADDRESS (8'h00),
70
+ .BUS_WIDTH (32),
71
+ .DATA_WIDTH (32),
72
+ .VALID_BITS (32'h000001ff),
73
+ .REGISTER_INDEX (0)
74
+ ) u_register (
75
+ .i_clk (i_clk),
76
+ .i_rst_n (i_rst_n),
77
+ .register_if (register_if[0]),
78
+ .bit_field_if (bit_field_if)
79
+ );
80
+ if (1) begin : g_bit_field_0
81
+ rggen_bit_field_if #(4) bit_field_sub_if();
82
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 0, 4)
83
+ rggen_bit_field_rw #(
84
+ .WIDTH (4),
85
+ .INITIAL_VALUE (4'h0)
86
+ ) u_bit_field (
87
+ .i_clk (i_clk),
88
+ .i_rst_n (i_rst_n),
89
+ .bit_field_if (bit_field_sub_if),
90
+ .o_value (o_register_0_bit_field_0)
91
+ );
92
+ end
93
+ if (1) begin : g_bit_field_1
94
+ rggen_bit_field_if #(4) bit_field_sub_if();
95
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 4, 4)
96
+ rggen_bit_field_rw #(
97
+ .WIDTH (4),
98
+ .INITIAL_VALUE (4'h0)
99
+ ) u_bit_field (
100
+ .i_clk (i_clk),
101
+ .i_rst_n (i_rst_n),
102
+ .bit_field_if (bit_field_sub_if),
103
+ .o_value (o_register_0_bit_field_1)
104
+ );
105
+ end
106
+ if (1) begin : g_bit_field_2
107
+ rggen_bit_field_if #(1) bit_field_sub_if();
108
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 8, 1)
109
+ rggen_bit_field_rw #(
110
+ .WIDTH (1),
111
+ .INITIAL_VALUE (1'h0)
112
+ ) u_bit_field (
113
+ .i_clk (i_clk),
114
+ .i_rst_n (i_rst_n),
115
+ .bit_field_if (bit_field_sub_if),
116
+ .o_value (o_register_0_bit_field_2)
117
+ );
118
+ end
119
+ end endgenerate
120
+ generate if (1) begin : g_register_1
121
+ rggen_bit_field_if #(32) bit_field_if();
122
+ rggen_default_register #(
123
+ .READABLE (1),
124
+ .WRITABLE (0),
125
+ .ADDRESS_WIDTH (8),
126
+ .OFFSET_ADDRESS (8'h04),
127
+ .BUS_WIDTH (32),
128
+ .DATA_WIDTH (32),
129
+ .VALID_BITS (32'hffff0f0f),
130
+ .REGISTER_INDEX (0)
131
+ ) u_register (
132
+ .i_clk (i_clk),
133
+ .i_rst_n (i_rst_n),
134
+ .register_if (register_if[1]),
135
+ .bit_field_if (bit_field_if)
136
+ );
137
+ if (1) begin : g_bit_field_0
138
+ rggen_bit_field_if #(4) bit_field_sub_if();
139
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 0, 4)
140
+ rggen_bit_field_ro #(
141
+ .WIDTH (4)
142
+ ) u_bit_field (
143
+ .bit_field_if (bit_field_sub_if),
144
+ .i_value (i_register_1_bit_field_0)
145
+ );
146
+ end
147
+ if (1) begin : g_bit_field_1
148
+ rggen_bit_field_if #(4) bit_field_sub_if();
149
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 8, 4)
150
+ rggen_bit_field_ro #(
151
+ .WIDTH (4)
152
+ ) u_bit_field (
153
+ .bit_field_if (bit_field_sub_if),
154
+ .i_value (i_register_1_bit_field_1)
155
+ );
156
+ end
157
+ if (1) begin : g_bit_field_2
158
+ rggen_bit_field_if #(8) bit_field_sub_if();
159
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 16, 8)
160
+ rggen_bit_field_ro #(
161
+ .WIDTH (8)
162
+ ) u_bit_field (
163
+ .bit_field_if (bit_field_sub_if),
164
+ .i_value (8'hab)
165
+ );
166
+ end
167
+ if (1) begin : g_bit_field_3
168
+ rggen_bit_field_if #(8) bit_field_sub_if();
169
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 24, 8)
170
+ rggen_bit_field_reserved u_bit_field (
171
+ .bit_field_if (bit_field_sub_if)
172
+ );
173
+ end
174
+ end endgenerate
175
+ generate if (1) begin : g_register_2
176
+ rggen_bit_field_if #(32) bit_field_if();
177
+ rggen_default_register #(
178
+ .READABLE (0),
179
+ .WRITABLE (1),
180
+ .ADDRESS_WIDTH (8),
181
+ .OFFSET_ADDRESS (8'h04),
182
+ .BUS_WIDTH (32),
183
+ .DATA_WIDTH (32),
184
+ .VALID_BITS (32'h00000f0f),
185
+ .REGISTER_INDEX (0)
186
+ ) u_register (
187
+ .i_clk (i_clk),
188
+ .i_rst_n (i_rst_n),
189
+ .register_if (register_if[2]),
190
+ .bit_field_if (bit_field_if)
191
+ );
192
+ if (1) begin : g_bit_field_0
193
+ rggen_bit_field_if #(4) bit_field_sub_if();
194
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 0, 4)
195
+ rggen_bit_field_wo #(
196
+ .WIDTH (4),
197
+ .INITIAL_VALUE (4'h0)
198
+ ) u_bit_field (
199
+ .i_clk (i_clk),
200
+ .i_rst_n (i_rst_n),
201
+ .bit_field_if (bit_field_sub_if),
202
+ .o_value (o_register_2_bit_field_0)
203
+ );
204
+ end
205
+ if (1) begin : g_bit_field_1
206
+ rggen_bit_field_if #(4) bit_field_sub_if();
207
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 8, 4)
208
+ rggen_bit_field_wo #(
209
+ .WIDTH (4),
210
+ .INITIAL_VALUE (4'h0)
211
+ ) u_bit_field (
212
+ .i_clk (i_clk),
213
+ .i_rst_n (i_rst_n),
214
+ .bit_field_if (bit_field_sub_if),
215
+ .o_value (o_register_2_bit_field_1)
216
+ );
217
+ end
218
+ end endgenerate
219
+ generate if (1) begin : g_register_3
220
+ rggen_bit_field_if #(32) bit_field_if();
221
+ rggen_default_register #(
222
+ .READABLE (1),
223
+ .WRITABLE (0),
224
+ .ADDRESS_WIDTH (8),
225
+ .OFFSET_ADDRESS (8'h08),
226
+ .BUS_WIDTH (32),
227
+ .DATA_WIDTH (32),
228
+ .VALID_BITS (32'h000fff0f),
229
+ .REGISTER_INDEX (0)
230
+ ) u_register (
231
+ .i_clk (i_clk),
232
+ .i_rst_n (i_rst_n),
233
+ .register_if (register_if[3]),
234
+ .bit_field_if (bit_field_if)
235
+ );
236
+ if (1) begin : g_bit_field_0
237
+ rggen_bit_field_if #(4) bit_field_sub_if();
238
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 0, 4)
239
+ rggen_bit_field_rc #(
240
+ .WIDTH (4),
241
+ .INITIAL_VALUE (4'h0)
242
+ ) u_bit_field (
243
+ .i_clk (i_clk),
244
+ .i_rst_n (i_rst_n),
245
+ .bit_field_if (bit_field_sub_if),
246
+ .i_set (i_register_3_bit_field_0_set),
247
+ .i_mask (4'hf),
248
+ .o_value (o_register_3_bit_field_0),
249
+ .o_value_unmasked ()
250
+ );
251
+ end
252
+ if (1) begin : g_bit_field_1
253
+ rggen_bit_field_if #(4) bit_field_sub_if();
254
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 8, 4)
255
+ rggen_bit_field_rc #(
256
+ .WIDTH (4),
257
+ .INITIAL_VALUE (4'h0)
258
+ ) u_bit_field (
259
+ .i_clk (i_clk),
260
+ .i_rst_n (i_rst_n),
261
+ .bit_field_if (bit_field_sub_if),
262
+ .i_set (i_register_3_bit_field_1_set),
263
+ .i_mask (register_if[0].value[0+:4]),
264
+ .o_value (o_register_3_bit_field_1),
265
+ .o_value_unmasked (o_register_3_bit_field_1_unmasked)
266
+ );
267
+ end
268
+ if (1) begin : g_bit_field_2
269
+ rggen_bit_field_if #(4) bit_field_sub_if();
270
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 12, 4)
271
+ rggen_bit_field_ro #(
272
+ .WIDTH (4)
273
+ ) u_bit_field (
274
+ .bit_field_if (bit_field_sub_if),
275
+ .i_value (register_if[3].value[8+:4])
276
+ );
277
+ end
278
+ if (1) begin : g_bit_field_3
279
+ rggen_bit_field_if #(4) bit_field_sub_if();
280
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 16, 4)
281
+ rggen_bit_field_rs #(
282
+ .WIDTH (4),
283
+ .INITIAL_VALUE (4'h0)
284
+ ) u_bit_field (
285
+ .i_clk (i_clk),
286
+ .i_rst_n (i_rst_n),
287
+ .bit_field_if (bit_field_sub_if),
288
+ .i_clear (i_register_3_bit_field_3_clear),
289
+ .o_value (o_register_3_bit_field_3)
290
+ );
291
+ end
292
+ end endgenerate
293
+ generate if (1) begin : g_register_4
294
+ rggen_bit_field_if #(32) bit_field_if();
295
+ rggen_default_register #(
296
+ .READABLE (1),
297
+ .WRITABLE (1),
298
+ .ADDRESS_WIDTH (8),
299
+ .OFFSET_ADDRESS (8'h0c),
300
+ .BUS_WIDTH (32),
301
+ .DATA_WIDTH (32),
302
+ .VALID_BITS (32'h00ff00ff),
303
+ .REGISTER_INDEX (0)
304
+ ) u_register (
305
+ .i_clk (i_clk),
306
+ .i_rst_n (i_rst_n),
307
+ .register_if (register_if[4]),
308
+ .bit_field_if (bit_field_if)
309
+ );
310
+ if (1) begin : g_bit_field_0
311
+ rggen_bit_field_if #(8) bit_field_sub_if();
312
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 0, 8)
313
+ rggen_bit_field_rwe #(
314
+ .WIDTH (8),
315
+ .INITIAL_VALUE (8'h00)
316
+ ) u_bit_field (
317
+ .i_clk (i_clk),
318
+ .i_rst_n (i_rst_n),
319
+ .bit_field_if (bit_field_sub_if),
320
+ .i_enable (register_if[0].value[8+:1]),
321
+ .o_value (o_register_4_bit_field_0)
322
+ );
323
+ end
324
+ if (1) begin : g_bit_field_1
325
+ rggen_bit_field_if #(8) bit_field_sub_if();
326
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 16, 8)
327
+ rggen_bit_field_rwl #(
328
+ .WIDTH (8),
329
+ .INITIAL_VALUE (8'h00)
330
+ ) u_bit_field (
331
+ .i_clk (i_clk),
332
+ .i_rst_n (i_rst_n),
333
+ .bit_field_if (bit_field_sub_if),
334
+ .i_lock (register_if[0].value[8+:1]),
335
+ .o_value (o_register_4_bit_field_1)
336
+ );
337
+ end
338
+ end endgenerate
339
+ generate if (1) begin : g_register_5
340
+ rggen_bit_field_if #(32) bit_field_if();
341
+ rggen_default_register #(
342
+ .READABLE (1),
343
+ .WRITABLE (1),
344
+ .ADDRESS_WIDTH (8),
345
+ .OFFSET_ADDRESS (8'h10),
346
+ .BUS_WIDTH (32),
347
+ .DATA_WIDTH (32),
348
+ .VALID_BITS (32'hffffffff),
349
+ .REGISTER_INDEX (0)
350
+ ) u_register (
351
+ .i_clk (i_clk),
352
+ .i_rst_n (i_rst_n),
353
+ .register_if (register_if[5]),
354
+ .bit_field_if (bit_field_if)
355
+ );
356
+ if (1) begin : g_bit_field_0
357
+ rggen_bit_field_if #(4) bit_field_sub_if();
358
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 0, 4)
359
+ rggen_bit_field_w01c #(
360
+ .CLEAR_VALUE (1'b0),
361
+ .WIDTH (4),
362
+ .INITIAL_VALUE (4'h0)
363
+ ) u_bit_field (
364
+ .i_clk (i_clk),
365
+ .i_rst_n (i_rst_n),
366
+ .bit_field_if (bit_field_sub_if),
367
+ .i_set (i_register_5_bit_field_0_set),
368
+ .i_mask (4'hf),
369
+ .o_value (o_register_5_bit_field_0),
370
+ .o_value_unmasked ()
371
+ );
372
+ end
373
+ if (1) begin : g_bit_field_1
374
+ rggen_bit_field_if #(4) bit_field_sub_if();
375
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 4, 4)
376
+ rggen_bit_field_w01c #(
377
+ .CLEAR_VALUE (1'b0),
378
+ .WIDTH (4),
379
+ .INITIAL_VALUE (4'h0)
380
+ ) u_bit_field (
381
+ .i_clk (i_clk),
382
+ .i_rst_n (i_rst_n),
383
+ .bit_field_if (bit_field_sub_if),
384
+ .i_set (i_register_5_bit_field_1_set),
385
+ .i_mask (register_if[0].value[0+:4]),
386
+ .o_value (o_register_5_bit_field_1),
387
+ .o_value_unmasked (o_register_5_bit_field_1_unmasked)
388
+ );
389
+ end
390
+ if (1) begin : g_bit_field_2
391
+ rggen_bit_field_if #(4) bit_field_sub_if();
392
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 8, 4)
393
+ rggen_bit_field_ro #(
394
+ .WIDTH (4)
395
+ ) u_bit_field (
396
+ .bit_field_if (bit_field_sub_if),
397
+ .i_value (register_if[5].value[4+:4])
398
+ );
399
+ end
400
+ if (1) begin : g_bit_field_3
401
+ rggen_bit_field_if #(4) bit_field_sub_if();
402
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 12, 4)
403
+ rggen_bit_field_w01c #(
404
+ .CLEAR_VALUE (1'b1),
405
+ .WIDTH (4),
406
+ .INITIAL_VALUE (4'h0)
407
+ ) u_bit_field (
408
+ .i_clk (i_clk),
409
+ .i_rst_n (i_rst_n),
410
+ .bit_field_if (bit_field_sub_if),
411
+ .i_set (i_register_5_bit_field_3_set),
412
+ .i_mask (4'hf),
413
+ .o_value (o_register_5_bit_field_3),
414
+ .o_value_unmasked ()
415
+ );
416
+ end
417
+ if (1) begin : g_bit_field_4
418
+ rggen_bit_field_if #(4) bit_field_sub_if();
419
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 16, 4)
420
+ rggen_bit_field_w01c #(
421
+ .CLEAR_VALUE (1'b1),
422
+ .WIDTH (4),
423
+ .INITIAL_VALUE (4'h0)
424
+ ) u_bit_field (
425
+ .i_clk (i_clk),
426
+ .i_rst_n (i_rst_n),
427
+ .bit_field_if (bit_field_sub_if),
428
+ .i_set (i_register_5_bit_field_4_set),
429
+ .i_mask (register_if[0].value[0+:4]),
430
+ .o_value (o_register_5_bit_field_4),
431
+ .o_value_unmasked (o_register_5_bit_field_4_unmasked)
432
+ );
433
+ end
434
+ if (1) begin : g_bit_field_5
435
+ rggen_bit_field_if #(4) bit_field_sub_if();
436
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 20, 4)
437
+ rggen_bit_field_ro #(
438
+ .WIDTH (4)
439
+ ) u_bit_field (
440
+ .bit_field_if (bit_field_sub_if),
441
+ .i_value (register_if[5].value[16+:4])
442
+ );
443
+ end
444
+ if (1) begin : g_bit_field_6
445
+ rggen_bit_field_if #(4) bit_field_sub_if();
446
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 24, 4)
447
+ rggen_bit_field_w01s #(
448
+ .SET_VALUE (1'b0),
449
+ .WIDTH (4),
450
+ .INITIAL_VALUE (4'h0)
451
+ ) u_bit_field (
452
+ .i_clk (i_clk),
453
+ .i_rst_n (i_rst_n),
454
+ .bit_field_if (bit_field_sub_if),
455
+ .i_clear (i_register_5_bit_field_6_clear),
456
+ .o_value (o_register_5_bit_field_6)
457
+ );
458
+ end
459
+ if (1) begin : g_bit_field_7
460
+ rggen_bit_field_if #(4) bit_field_sub_if();
461
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 28, 4)
462
+ rggen_bit_field_w01s #(
463
+ .SET_VALUE (1'b1),
464
+ .WIDTH (4),
465
+ .INITIAL_VALUE (4'h0)
466
+ ) u_bit_field (
467
+ .i_clk (i_clk),
468
+ .i_rst_n (i_rst_n),
469
+ .bit_field_if (bit_field_sub_if),
470
+ .i_clear (i_register_5_bit_field_7_clear),
471
+ .o_value (o_register_5_bit_field_7)
472
+ );
473
+ end
474
+ end endgenerate
475
+ generate if (1) begin : g_register_6
476
+ genvar i;
477
+ for (i = 0;i < 4;++i) begin : g
478
+ rggen_bit_field_if #(64) bit_field_if();
479
+ rggen_default_register #(
480
+ .READABLE (1),
481
+ .WRITABLE (1),
482
+ .ADDRESS_WIDTH (8),
483
+ .OFFSET_ADDRESS (8'h20),
484
+ .BUS_WIDTH (32),
485
+ .DATA_WIDTH (64),
486
+ .VALID_BITS (64'hffffffffffffffff),
487
+ .REGISTER_INDEX (i)
488
+ ) u_register (
489
+ .i_clk (i_clk),
490
+ .i_rst_n (i_rst_n),
491
+ .register_if (register_if[6+i]),
492
+ .bit_field_if (bit_field_if)
493
+ );
494
+ if (1) begin : g_bit_field_0
495
+ genvar j;
496
+ for (j = 0;j < 4;++j) begin : g
497
+ rggen_bit_field_if #(8) bit_field_sub_if();
498
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 0+16*j, 8)
499
+ rggen_bit_field_rw #(
500
+ .WIDTH (8),
501
+ .INITIAL_VALUE (8'h00)
502
+ ) u_bit_field (
503
+ .i_clk (i_clk),
504
+ .i_rst_n (i_rst_n),
505
+ .bit_field_if (bit_field_sub_if),
506
+ .o_value (o_register_6_bit_field_0[i][j])
507
+ );
508
+ end
509
+ end
510
+ if (1) begin : g_bit_field_1
511
+ genvar j;
512
+ for (j = 0;j < 4;++j) begin : g
513
+ rggen_bit_field_if #(8) bit_field_sub_if();
514
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 8+16*j, 8)
515
+ rggen_bit_field_rw #(
516
+ .WIDTH (8),
517
+ .INITIAL_VALUE (8'h00)
518
+ ) u_bit_field (
519
+ .i_clk (i_clk),
520
+ .i_rst_n (i_rst_n),
521
+ .bit_field_if (bit_field_sub_if),
522
+ .o_value (o_register_6_bit_field_1[i][j])
523
+ );
524
+ end
525
+ end
526
+ end
527
+ end endgenerate
528
+ generate if (1) begin : g_register_7
529
+ genvar i;
530
+ genvar j;
531
+ for (i = 0;i < 2;++i) begin : g
532
+ for (j = 0;j < 4;++j) begin : g
533
+ logic [8:0] indirect_index;
534
+ rggen_bit_field_if #(64) bit_field_if();
535
+ assign indirect_index = {register_if[0].value[0+:4], register_if[0].value[4+:4], register_if[0].value[8+:1]};
536
+ rggen_indirect_register #(
537
+ .READABLE (1),
538
+ .WRITABLE (1),
539
+ .ADDRESS_WIDTH (8),
540
+ .OFFSET_ADDRESS (8'h40),
541
+ .BUS_WIDTH (32),
542
+ .DATA_WIDTH (64),
543
+ .VALID_BITS (64'hffffffffffffffff),
544
+ .INDIRECT_INDEX_WIDTH (9),
545
+ .INDIRECT_INDEX_VALUE ({i[0+:4], j[0+:4], 1'h1})
546
+ ) u_register (
547
+ .i_clk (i_clk),
548
+ .i_rst_n (i_rst_n),
549
+ .register_if (register_if[10+4*i+j]),
550
+ .i_indirect_index (indirect_index),
551
+ .bit_field_if (bit_field_if)
552
+ );
553
+ if (1) begin : g_bit_field_0
554
+ genvar k;
555
+ for (k = 0;k < 4;++k) begin : g
556
+ rggen_bit_field_if #(8) bit_field_sub_if();
557
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 0+16*k, 8)
558
+ rggen_bit_field_rw #(
559
+ .WIDTH (8),
560
+ .INITIAL_VALUE (8'h00)
561
+ ) u_bit_field (
562
+ .i_clk (i_clk),
563
+ .i_rst_n (i_rst_n),
564
+ .bit_field_if (bit_field_sub_if),
565
+ .o_value (o_register_7_bit_field_0[i][j][k])
566
+ );
567
+ end
568
+ end
569
+ if (1) begin : g_bit_field_1
570
+ genvar k;
571
+ for (k = 0;k < 4;++k) begin : g
572
+ rggen_bit_field_if #(8) bit_field_sub_if();
573
+ `rggen_connect_bit_field_if(bit_field_if, bit_field_sub_if, 8+16*k, 8)
574
+ rggen_bit_field_rw #(
575
+ .WIDTH (8),
576
+ .INITIAL_VALUE (8'h00)
577
+ ) u_bit_field (
578
+ .i_clk (i_clk),
579
+ .i_rst_n (i_rst_n),
580
+ .bit_field_if (bit_field_sub_if),
581
+ .o_value (o_register_7_bit_field_1[i][j][k])
582
+ );
583
+ end
584
+ end
585
+ end
586
+ end
587
+ end endgenerate
588
+ generate if (1) begin : g_register_8
589
+ rggen_external_register #(
590
+ .ADDRESS_WIDTH (8),
591
+ .BUS_WIDTH (32),
592
+ .START_ADDRESS (8'h80),
593
+ .END_ADDRESS (8'hff)
594
+ ) u_register (
595
+ .i_clk (i_clk),
596
+ .i_rst_n (i_rst_n),
597
+ .register_if (register_if[18]),
598
+ .bus_if (register_8_bus_if)
599
+ );
600
+ end endgenerate
601
+ endmodule