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
@@ -1,9 +0,0 @@
1
- module rggen_bit_field_ro #(
2
- parameter int WIDTH = 1
3
- )(
4
- rggen_bit_field_if.slave bit_field_if,
5
- input logic [WIDTH-1:0] i_value
6
- );
7
- assign bit_field_if.value = i_value;
8
- assign bit_field_if.read_data = i_value;
9
- endmodule
@@ -1,25 +0,0 @@
1
- module rggen_bit_field_rw #(
2
- parameter int WIDTH = 1,
3
- parameter bit [WIDTH-1:0] INITIAL_VALUE = '0
4
- )(
5
- input logic clk,
6
- input logic rst_n,
7
- rggen_bit_field_if.slave bit_field_if,
8
- output logic [WIDTH-1:0] o_value
9
- );
10
- logic [WIDTH-1:0] value;
11
-
12
- assign o_value = value;
13
- assign bit_field_if.value = value;
14
- assign bit_field_if.read_data = value;
15
-
16
- always_ff @(posedge clk, negedge rst_n) begin
17
- if (!rst_n) begin
18
- value <= INITIAL_VALUE;
19
- end
20
- else if (bit_field_if.write_access) begin
21
- value <= (value & (~bit_field_if.write_mask))
22
- | (bit_field_if.write_data & bit_field_if.write_mask );
23
- end
24
- end
25
- endmodule
@@ -1,29 +0,0 @@
1
- module rggen_bit_field_rwl_rwe
2
- import rggen_rtl_pkg::*;
3
- #(
4
- parameter rggen_rwle_mode MODE = RGGEN_LOCK_MODE,
5
- parameter int WIDTH = 1,
6
- parameter bit [WIDTH-1:0] INITIAL_VALUE = '0
7
- )(
8
- input logic clk,
9
- input logic rst_n,
10
- input logic i_lock_or_enable,
11
- rggen_bit_field_if.slave bit_field_if,
12
- output logic [WIDTH-1:0] o_value
13
- );
14
- logic [WIDTH-1:0] value;
15
-
16
- assign o_value = value;
17
- assign bit_field_if.value = value;
18
- assign bit_field_if.read_data = value;
19
-
20
- always_ff @(posedge clk, negedge rst_n) begin
21
- if (!rst_n) begin
22
- value <= INITIAL_VALUE;
23
- end
24
- else if ((i_lock_or_enable == MODE) && bit_field_if.write_access) begin
25
- value <= (value & (~bit_field_if.write_mask))
26
- | (bit_field_if.write_data & bit_field_if.write_mask );
27
- end
28
- end
29
- endmodule
@@ -1,55 +0,0 @@
1
- module rggen_bit_field_w01s_w01c
2
- import rggen_rtl_pkg::*;
3
- #(
4
- parameter rggen_rwsc_mode MODE = RGGEN_SET_MODE,
5
- parameter bit SET_CLEAR_VALUE = 1'b0,
6
- parameter int WIDTH = 1,
7
- parameter bit [WIDTH-1:0] INITIAL_VALUE = '0
8
- )(
9
- input logic clk,
10
- input logic rst_n,
11
- input logic [WIDTH-1:0] i_set_or_clear,
12
- rggen_bit_field_if.slave bit_field_if,
13
- output logic [WIDTH-1:0] o_value
14
- );
15
- logic [WIDTH-1:0] value;
16
-
17
- assign o_value = value;
18
- assign bit_field_if.value[WIDTH-1:0] = value;
19
- assign bit_field_if.read_data[WIDTH-1:0] = value;
20
-
21
- always_ff @(posedge clk, negedge rst_n) begin
22
- if (!rst_n) begin
23
- value <= INITIAL_VALUE;
24
- end
25
- else begin
26
- value <= get_next_value();
27
- end
28
- end
29
-
30
- function automatic logic [WIDTH-1:0] get_next_value();
31
- logic [WIDTH-1:0] write_data;
32
- logic [WIDTH-1:0] write_mask;
33
- logic [WIDTH-1:0] control_value;
34
- logic [WIDTH-1:0] set;
35
- logic [WIDTH-1:0] clear;
36
-
37
- write_data = bit_field_if.write_data;
38
- write_mask = bit_field_if.write_mask;
39
- if (bit_field_if.write_access) begin
40
- control_value = write_mask & ((SET_CLEAR_VALUE) ? write_data : ~write_data);
41
- end
42
- else begin
43
- control_value = '0;
44
- end
45
- if (MODE == RGGEN_SET_MODE) begin
46
- set = control_value;
47
- clear = i_set_or_clear;
48
- end
49
- else begin
50
- set = i_set_or_clear;
51
- clear = control_value;
52
- end
53
- return set | (value & (~clear));
54
- endfunction
55
- endmodule
data/rtl/rggen_bus_if.sv DELETED
@@ -1,43 +0,0 @@
1
- interface rggen_bus_if #(
2
- parameter int ADDRESS_WIDTH = 16,
3
- parameter int DATA_WIDTH = 32
4
- )();
5
- import rggen_rtl_pkg::*;
6
-
7
- logic request;
8
- logic [ADDRESS_WIDTH-1:0] address;
9
- rggen_direction direction;
10
- logic [DATA_WIDTH-1:0] write_data;
11
- logic [DATA_WIDTH/8-1:0] write_strobe;
12
- logic done;
13
- logic read_done;
14
- logic write_done;
15
- logic [DATA_WIDTH-1:0] read_data;
16
- rggen_status status;
17
-
18
- modport master (
19
- output request,
20
- output address,
21
- output direction,
22
- output write_data,
23
- output write_strobe,
24
- input done,
25
- input read_done,
26
- input write_done,
27
- input read_data,
28
- input status
29
- );
30
-
31
- modport slave (
32
- input request,
33
- input address,
34
- input direction,
35
- input write_data,
36
- input write_strobe,
37
- output done,
38
- output read_done,
39
- output write_done,
40
- output read_data,
41
- output status
42
- );
43
- endinterface
@@ -1,86 +0,0 @@
1
- module rggen_bus_splitter #(
2
- parameter int DATA_WIDTH = 32,
3
- parameter int TOTAL_REGISTERS = 1
4
- )(
5
- input logic clk,
6
- input logic rst_n,
7
- rggen_bus_if.slave bus_if,
8
- rggen_register_if.master register_if[TOTAL_REGISTERS]
9
- );
10
- import rggen_rtl_pkg::*;
11
-
12
- localparam int STATUS_WIDTH = $bits(rggen_status);
13
-
14
- logic [TOTAL_REGISTERS-1:0] select;
15
- logic [TOTAL_REGISTERS-1:0] ready;
16
- logic response_ready;
17
- logic register_selected;
18
- logic done;
19
- logic [DATA_WIDTH-1:0] selected_read_data;
20
- rggen_status selected_status;
21
- genvar g_i, g_j;
22
-
23
- generate for (g_i = 0;g_i < TOTAL_REGISTERS;++g_i) begin : g
24
- assign register_if[g_i].request = bus_if.request;
25
- assign register_if[g_i].address = bus_if.address;
26
- assign register_if[g_i].direction = bus_if.direction;
27
- assign register_if[g_i].write_data = bus_if.write_data;
28
- assign register_if[g_i].write_strobe = bus_if.write_strobe;
29
- assign select[g_i] = register_if[g_i].select;
30
- assign ready[g_i] = register_if[g_i].ready;
31
- end endgenerate
32
-
33
- assign bus_if.done = done;
34
- assign response_ready = |ready;
35
- assign register_selected = |select;
36
- always_ff @(posedge clk, negedge rst_n) begin
37
- if (!rst_n) begin
38
- done <= '0;
39
- bus_if.read_done <= '0;
40
- bus_if.write_done <= '0;
41
- bus_if.read_data <= '0;
42
- bus_if.status <= RGGEN_OKAY;
43
- end
44
- else if (bus_if.request && (response_ready || (!register_selected)) && (!done)) begin
45
- done <= '1;
46
- bus_if.read_done <= (bus_if.direction == RGGEN_READ ) ? '1 : '0;
47
- bus_if.write_done <= (bus_if.direction == RGGEN_WRITE) ? '1 : '0;
48
- if (register_selected) begin
49
- bus_if.read_data <= selected_read_data;
50
- bus_if.status <= selected_status;
51
- end
52
- else begin
53
- bus_if.read_data <= '0;
54
- bus_if.status <= RGGEN_SLAVE_ERROR;
55
- end
56
- end
57
- else begin
58
- done <= '0;
59
- bus_if.read_done <= '0;
60
- bus_if.write_done <= '0;
61
- bus_if.read_data <= '0;
62
- bus_if.status <= RGGEN_OKAY;
63
- end
64
- end
65
-
66
- // Response Selection
67
- generate if (1) begin : read_data_selection
68
- for (g_i = 0;g_i < DATA_WIDTH;++g_i) begin : g
69
- logic [TOTAL_REGISTERS-1:0] temp;
70
- assign selected_read_data[g_i] = |temp;
71
- for (g_j = 0;g_j < TOTAL_REGISTERS;++g_j) begin : g
72
- assign temp[g_j] = register_if[g_j].read_data[g_i] & register_if[g_j].select;
73
- end
74
- end
75
- end endgenerate
76
-
77
- generate if (1) begin : status_selection
78
- for (g_i = 0;g_i < STATUS_WIDTH;++g_i) begin : g
79
- logic [TOTAL_REGISTERS-1:0] temp;
80
- assign selected_status[g_i] = |temp;
81
- for (g_j = 0;g_j < TOTAL_REGISTERS;++g_j) begin : g
82
- assign temp[g_j] = register_if[g_j].status[g_i] & register_if[g_j].select;
83
- end
84
- end
85
- end endgenerate
86
- endmodule
@@ -1,15 +0,0 @@
1
- module rggen_default_register #(
2
- parameter int ADDRESS_WIDTH = 16,
3
- parameter bit [ADDRESS_WIDTH-1:0] START_ADDRESS = '0,
4
- parameter bit [ADDRESS_WIDTH-1:0] END_ADDRESS = '0,
5
- parameter int DATA_WIDTH = 32,
6
- parameter bit [DATA_WIDTH-1:0] VALID_BITS = '0
7
- )(
8
- rggen_register_if.slave register_if,
9
- rggen_bit_field_if.master bit_field_if
10
- );
11
- rggen_register_base #(
12
- ADDRESS_WIDTH, START_ADDRESS, END_ADDRESS,
13
- DATA_WIDTH, VALID_BITS
14
- ) u_register_base (register_if, bit_field_if, 1'b1);
15
- endmodule
@@ -1,83 +0,0 @@
1
- module rggen_external_register #(
2
- parameter int ADDRESS_WIDTH = 16,
3
- parameter bit [ADDRESS_WIDTH-1:0] START_ADDRESS = '0,
4
- parameter bit [ADDRESS_WIDTH-1:0] END_ADDRESS = '0,
5
- parameter int DATA_WIDTH = 32
6
- )(
7
- input logic clk,
8
- input logic rst_n,
9
- rggen_register_if.slave register_if,
10
- rggen_bus_if.master bus_if
11
- );
12
- import rggen_rtl_pkg::*;
13
-
14
- localparam int EXTERNAL_SIZE = END_ADDRESS - START_ADDRESS + 1;
15
- localparam int EXTERNAL_ADDRESS_WIDTH = $clog2(EXTERNAL_SIZE);
16
-
17
- logic address_match;
18
- logic request;
19
- logic [EXTERNAL_ADDRESS_WIDTH-1:0] address;
20
- rggen_direction direction;
21
- logic [DATA_WIDTH-1:0] write_data;
22
- logic [DATA_WIDTH/8-1:0] write_strobe;
23
- logic access_done;
24
-
25
- rggen_address_decoder #(
26
- ADDRESS_WIDTH, START_ADDRESS, END_ADDRESS, DATA_WIDTH
27
- ) u_address_decoder (register_if.address, address_match);
28
-
29
- always_ff @(posedge clk, negedge rst_n) begin
30
- if (!rst_n) begin
31
- access_done <= '0;
32
- end
33
- else if (request && bus_if.done) begin
34
- access_done <= '1;
35
- end
36
- else begin
37
- access_done <= '0;
38
- end
39
- end
40
-
41
- // Local -> External
42
- assign bus_if.request = request;
43
- assign bus_if.address = address;
44
- assign bus_if.direction = direction;
45
- assign bus_if.write_data = write_data;
46
- assign bus_if.write_strobe = write_strobe;
47
- always_ff @(posedge clk, negedge rst_n) begin
48
- if (!rst_n) begin
49
- request <= '0;
50
- address <= '0;
51
- direction <= RGGEN_READ;
52
- write_data <= '0;
53
- write_strobe <= '0;
54
- end
55
- else if (request && bus_if.done) begin
56
- request <= '0;
57
- address <= '0;
58
- direction <= RGGEN_READ;
59
- write_data <= '0;
60
- write_strobe <= '0;
61
- end
62
- else if (register_if.request && address_match && (!request) && (!access_done)) begin
63
- request <= '1;
64
- address <= calc_address(register_if.address);
65
- direction <= register_if.direction;
66
- write_data <= register_if.write_data;
67
- write_strobe <= register_if.write_strobe;
68
- end
69
- end
70
-
71
- function automatic logic [EXTERNAL_ADDRESS_WIDTH-1:0] calc_address(input [ADDRESS_WIDTH-1:0] address);
72
- logic [ADDRESS_WIDTH-1:0] external_address;
73
- external_address = address - START_ADDRESS;
74
- return external_address[EXTERNAL_ADDRESS_WIDTH-1:0];
75
- endfunction
76
-
77
- // External -> Local
78
- assign register_if.select = address_match;
79
- assign register_if.ready = bus_if.done;
80
- assign register_if.value = bus_if.read_data;
81
- assign register_if.read_data = bus_if.read_data;
82
- assign register_if.status = bus_if.status;
83
- endmodule
@@ -1,29 +0,0 @@
1
- module rggen_host_if_apb #(
2
- parameter int LOCAL_ADDRESS_WIDTH = 16,
3
- parameter int DATA_WIDTH = 32,
4
- parameter int TOTAL_REGISTERS = 1
5
- )(
6
- input logic clk,
7
- input logic rst_n,
8
- rggen_apb_if.slave apb_if,
9
- rggen_register_if.master register_if[TOTAL_REGISTERS]
10
- );
11
- import rggen_rtl_pkg::*;
12
-
13
- rggen_bus_if #(LOCAL_ADDRESS_WIDTH, DATA_WIDTH) bus_if();
14
-
15
- assign apb_if.pready = bus_if.done;
16
- assign apb_if.prdata = bus_if.read_data;
17
- assign apb_if.pslverr = bus_if.status[1];
18
- assign bus_if.request = apb_if.psel;
19
- assign bus_if.address = apb_if.paddr[LOCAL_ADDRESS_WIDTH-1:0];
20
- assign bus_if.direction = rggen_direction'(apb_if.pwrite);
21
- assign bus_if.write_data = apb_if.pwdata;
22
- assign bus_if.write_strobe = apb_if.pstrb;
23
-
24
- rggen_bus_splitter #(
25
- DATA_WIDTH, TOTAL_REGISTERS
26
- ) u_bus_splitter (
27
- clk, rst_n, bus_if, register_if
28
- );
29
- endmodule
@@ -1,161 +0,0 @@
1
- module rggen_host_if_axi4lite
2
- import rggen_rtl_pkg::*;
3
- #(
4
- parameter int LOCAL_ADDRESS_WIDTH = 16,
5
- parameter int DATA_WIDTH = 32,
6
- parameter int TOTAL_REGISTERS = 1,
7
- parameter rggen_direction ACCESS_PRIORITY = RGGEN_WRITE
8
- )(
9
- input logic clk,
10
- input logic rst_n,
11
- rggen_axi4lite_if.slave axi4lite_if,
12
- rggen_register_if.master register_if[TOTAL_REGISTERS]
13
- );
14
- typedef enum logic [4:0] {
15
- IDLE = 5'b00001,
16
- WRITE_IN_PROGRESS = 5'b00010,
17
- WAIT_FOR_BREADY = 5'b00100,
18
- READ_IN_PROGRESS = 5'b01000,
19
- WAIT_FOR_RREADY = 5'b10000
20
- } e_state;
21
-
22
- rggen_bus_if #(LOCAL_ADDRESS_WIDTH, DATA_WIDTH) bus_if();
23
- e_state state;
24
-
25
- //--------------------------------------------------------------
26
- // AXI4 Lite
27
- //--------------------------------------------------------------
28
- logic write_request;
29
- logic valid_write_request;
30
- logic write_request_ack;
31
- logic read_request;
32
- logic valid_read_request;
33
- logic read_request_ack;
34
- logic [DATA_WIDTH-1:0] read_data;
35
- rggen_status status;
36
-
37
- assign axi4lite_if.awready = write_request_ack;
38
- assign axi4lite_if.wready = write_request_ack;
39
- assign axi4lite_if.bvalid = state[2];
40
- assign axi4lite_if.bresp = status;
41
- assign axi4lite_if.arready = read_request_ack;
42
- assign axi4lite_if.rvalid = state[4];
43
- assign axi4lite_if.rdata = read_data;
44
- assign axi4lite_if.rresp = status;
45
-
46
- assign write_request = (axi4lite_if.awvalid && axi4lite_if.wvalid) ? '1 : '0;
47
- assign read_request = axi4lite_if.arvalid;
48
-
49
- generate if (ACCESS_PRIORITY == RGGEN_WRITE) begin
50
- assign valid_write_request = (state[0]) ? write_request : '0;
51
- assign valid_read_request = (state[0] && (!valid_write_request)) ? read_request : '0;
52
- end
53
- else begin
54
- assign valid_write_request = (state[0] && (!valid_read_request)) ? write_request : '0;
55
- assign valid_read_request = (state[0]) ? read_request : '0;
56
- end endgenerate
57
-
58
- always_ff @(posedge clk, negedge rst_n) begin
59
- if (!rst_n) begin
60
- write_request_ack <= '0;
61
- read_request_ack <= '0;
62
- end
63
- else begin
64
- write_request_ack <= valid_write_request;
65
- read_request_ack <= valid_read_request;
66
- end
67
- end
68
-
69
- always_ff @(posedge clk, negedge rst_n) begin
70
- if (!rst_n) begin
71
- read_data <= '0;
72
- status <= RGGEN_OKAY;
73
- end
74
- else if ((state[1] || state[3]) && bus_if.done) begin
75
- read_data <= bus_if.read_data;
76
- status <= bus_if.status;
77
- end
78
- end
79
-
80
- //--------------------------------------------------------------
81
- // Bus IF
82
- //--------------------------------------------------------------
83
- rggen_direction direction;
84
- logic [LOCAL_ADDRESS_WIDTH-1:0] address;
85
- logic [DATA_WIDTH-1:0] write_data;
86
- logic [DATA_WIDTH/8-1:0] write_strobe;
87
-
88
- assign bus_if.request = (state[1] || state[3]) ? '1 : '0;
89
- assign bus_if.direction = direction;
90
- assign bus_if.address = address;
91
- assign bus_if.write_data = write_data;
92
- assign bus_if.write_strobe = write_strobe;
93
-
94
- always_ff @(posedge clk, negedge rst_n) begin
95
- if (!rst_n) begin
96
- direction <= RGGEN_READ;
97
- address <= '0;
98
- write_data <= '0;
99
- write_strobe <= '0;
100
- end
101
- else if (state[0]) begin
102
- if (valid_write_request) begin
103
- direction <= RGGEN_WRITE;
104
- address <= axi4lite_if.awaddr;
105
- write_data <= axi4lite_if.wdata;
106
- write_strobe <= axi4lite_if.wstrb;
107
- end
108
- else if (valid_read_request) begin
109
- direction <= RGGEN_READ;
110
- address <= axi4lite_if.araddr;
111
- end
112
- end
113
- end
114
-
115
- rggen_bus_splitter #(
116
- DATA_WIDTH, TOTAL_REGISTERS
117
- ) u_bus_splitter (
118
- clk, rst_n, bus_if, register_if
119
- );
120
-
121
- //--------------------------------------------------------------
122
- // State Machine
123
- //--------------------------------------------------------------
124
- always_ff @(posedge clk, negedge rst_n) begin
125
- if (!rst_n) begin
126
- state <= IDLE;
127
- end
128
- else begin
129
- case (state)
130
- IDLE: begin
131
- if (valid_write_request) begin
132
- state <= WRITE_IN_PROGRESS;
133
- end
134
- else if (valid_read_request) begin
135
- state <= READ_IN_PROGRESS;
136
- end
137
- end
138
- WRITE_IN_PROGRESS: begin
139
- if (bus_if.write_done) begin
140
- state <= WAIT_FOR_BREADY;
141
- end
142
- end
143
- WAIT_FOR_BREADY: begin
144
- if (axi4lite_if.bready) begin
145
- state <= IDLE;
146
- end
147
- end
148
- READ_IN_PROGRESS: begin
149
- if (bus_if.read_done) begin
150
- state <= WAIT_FOR_RREADY;
151
- end
152
- end
153
- WAIT_FOR_RREADY: begin
154
- if (axi4lite_if.rready) begin
155
- state <= IDLE;
156
- end
157
- end
158
- endcase
159
- end
160
- end
161
- endmodule