rggen 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. checksums.yaml +7 -0
  2. data/.rubocop.yml +7 -0
  3. data/.rubocop_todo.yml +91 -0
  4. data/CODE_OF_CONDUCT.md +49 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +31 -0
  7. data/bin/rggen +6 -0
  8. data/lib/rggen/base/component.rb +27 -0
  9. data/lib/rggen/base/component_factory.rb +46 -0
  10. data/lib/rggen/base/hierarchical_accessors.rb +87 -0
  11. data/lib/rggen/base/hierarchical_item_accessors.rb +79 -0
  12. data/lib/rggen/base/item.rb +24 -0
  13. data/lib/rggen/base/item_factory.rb +20 -0
  14. data/lib/rggen/builder/builder.rb +69 -0
  15. data/lib/rggen/builder/category.rb +52 -0
  16. data/lib/rggen/builder/component_entry.rb +50 -0
  17. data/lib/rggen/builder/component_store.rb +42 -0
  18. data/lib/rggen/builder/input_component_store.rb +25 -0
  19. data/lib/rggen/builder/item_store.rb +89 -0
  20. data/lib/rggen/builder/list_item_entry.rb +81 -0
  21. data/lib/rggen/builder/output_component_store.rb +13 -0
  22. data/lib/rggen/builder/simple_item_entry.rb +33 -0
  23. data/lib/rggen/builtins/bit_field/bit_assignment.rb +39 -0
  24. data/lib/rggen/builtins/bit_field/field_model_creation.rb +25 -0
  25. data/lib/rggen/builtins/bit_field/field_model_declaration.rb +9 -0
  26. data/lib/rggen/builtins/bit_field/initial_value.rb +36 -0
  27. data/lib/rggen/builtins/bit_field/name.rb +26 -0
  28. data/lib/rggen/builtins/bit_field/reference.rb +42 -0
  29. data/lib/rggen/builtins/bit_field/reserved.rb +9 -0
  30. data/lib/rggen/builtins/bit_field/ro.rb +19 -0
  31. data/lib/rggen/builtins/bit_field/rw.erb +13 -0
  32. data/lib/rggen/builtins/bit_field/rw.rb +25 -0
  33. data/lib/rggen/builtins/bit_field/type.rb +205 -0
  34. data/lib/rggen/builtins/bit_field/wo.rb +5 -0
  35. data/lib/rggen/builtins/global/address_width.rb +17 -0
  36. data/lib/rggen/builtins/global/data_width.rb +20 -0
  37. data/lib/rggen/builtins/loaders/configuration/json_loader.rb +7 -0
  38. data/lib/rggen/builtins/loaders/configuration/yaml_loader.rb +7 -0
  39. data/lib/rggen/builtins/loaders/register_map/csv_loader.rb +14 -0
  40. data/lib/rggen/builtins/loaders/register_map/xls_loader.rb +19 -0
  41. data/lib/rggen/builtins/loaders/register_map/xlsx_ods_loader.rb +24 -0
  42. data/lib/rggen/builtins/register/accessibility.rb +23 -0
  43. data/lib/rggen/builtins/register/address_decoder.erb +16 -0
  44. data/lib/rggen/builtins/register/address_decoder.rb +92 -0
  45. data/lib/rggen/builtins/register/array.rb +133 -0
  46. data/lib/rggen/builtins/register/field_model_creator.rb +10 -0
  47. data/lib/rggen/builtins/register/field_model_declarations.rb +7 -0
  48. data/lib/rggen/builtins/register/name.rb +26 -0
  49. data/lib/rggen/builtins/register/offset_address.rb +55 -0
  50. data/lib/rggen/builtins/register/read_data.rb +36 -0
  51. data/lib/rggen/builtins/register/reg_model_constructor.rb +17 -0
  52. data/lib/rggen/builtins/register/reg_model_creation.rb +64 -0
  53. data/lib/rggen/builtins/register/reg_model_declaration.rb +13 -0
  54. data/lib/rggen/builtins/register/reg_model_definition.rb +22 -0
  55. data/lib/rggen/builtins/register/shadow.rb +130 -0
  56. data/lib/rggen/builtins/register/shadow_index_configurator.rb +53 -0
  57. data/lib/rggen/builtins/register/uniqueness_validator.rb +48 -0
  58. data/lib/rggen/builtins/register_block/apb.erb +27 -0
  59. data/lib/rggen/builtins/register_block/apb.rb +20 -0
  60. data/lib/rggen/builtins/register_block/base_address.rb +64 -0
  61. data/lib/rggen/builtins/register_block/block_model_constructor.rb +14 -0
  62. data/lib/rggen/builtins/register_block/block_model_default_map_creator.rb +39 -0
  63. data/lib/rggen/builtins/register_block/block_model_definition.rb +18 -0
  64. data/lib/rggen/builtins/register_block/byte_size.rb +37 -0
  65. data/lib/rggen/builtins/register_block/clock_reset.rb +8 -0
  66. data/lib/rggen/builtins/register_block/host_if.rb +46 -0
  67. data/lib/rggen/builtins/register_block/module_definition.rb +13 -0
  68. data/lib/rggen/builtins/register_block/name.rb +26 -0
  69. data/lib/rggen/builtins/register_block/ral_package_definition.rb +19 -0
  70. data/lib/rggen/builtins/register_block/reg_model_creator.rb +14 -0
  71. data/lib/rggen/builtins/register_block/reg_model_declarations.rb +7 -0
  72. data/lib/rggen/builtins/register_block/response_mux.erb +14 -0
  73. data/lib/rggen/builtins/register_block/response_mux.rb +16 -0
  74. data/lib/rggen/builtins/register_block/signal_declarations.rb +9 -0
  75. data/lib/rggen/builtins.rb +52 -0
  76. data/lib/rggen/commands.rb +23 -0
  77. data/lib/rggen/core_components/configuration/configuration_factory.rb +23 -0
  78. data/lib/rggen/core_components/configuration/item_factory.rb +13 -0
  79. data/lib/rggen/core_components/configuration/raise_error.rb +11 -0
  80. data/lib/rggen/core_components/configuration/setup.rb +14 -0
  81. data/lib/rggen/core_components/ral/item.rb +16 -0
  82. data/lib/rggen/core_components/ral/setup.rb +19 -0
  83. data/lib/rggen/core_components/register_map/bit_field_factory.rb +11 -0
  84. data/lib/rggen/core_components/register_map/component.rb +12 -0
  85. data/lib/rggen/core_components/register_map/generic_map.rb +69 -0
  86. data/lib/rggen/core_components/register_map/item.rb +22 -0
  87. data/lib/rggen/core_components/register_map/item_factory.rb +13 -0
  88. data/lib/rggen/core_components/register_map/loader.rb +13 -0
  89. data/lib/rggen/core_components/register_map/raise_error.rb +17 -0
  90. data/lib/rggen/core_components/register_map/register_block_factory.rb +29 -0
  91. data/lib/rggen/core_components/register_map/register_factory.rb +18 -0
  92. data/lib/rggen/core_components/register_map/register_map_factory.rb +21 -0
  93. data/lib/rggen/core_components/register_map/setup.rb +33 -0
  94. data/lib/rggen/core_components/rtl/component.rb +28 -0
  95. data/lib/rggen/core_components/rtl/item.rb +83 -0
  96. data/lib/rggen/core_components/rtl/setup.rb +19 -0
  97. data/lib/rggen/core_components.rb +23 -0
  98. data/lib/rggen/core_extensions/facets.rb +17 -0
  99. data/lib/rggen/core_extensions/forwardable.rb +26 -0
  100. data/lib/rggen/core_extensions/integer.rb +5 -0
  101. data/lib/rggen/core_extensions/math.rb +7 -0
  102. data/lib/rggen/exceptions.rb +22 -0
  103. data/lib/rggen/generator.rb +185 -0
  104. data/lib/rggen/input_base/component.rb +19 -0
  105. data/lib/rggen/input_base/component_factory.rb +58 -0
  106. data/lib/rggen/input_base/item.rb +170 -0
  107. data/lib/rggen/input_base/item_factory.rb +13 -0
  108. data/lib/rggen/input_base/loader.rb +14 -0
  109. data/lib/rggen/input_base/regexp_patterns.rb +29 -0
  110. data/lib/rggen/output_base/code_block.rb +72 -0
  111. data/lib/rggen/output_base/code_utility.rb +44 -0
  112. data/lib/rggen/output_base/component.rb +88 -0
  113. data/lib/rggen/output_base/component_factory.rb +32 -0
  114. data/lib/rggen/output_base/item.rb +175 -0
  115. data/lib/rggen/output_base/item_factory.rb +6 -0
  116. data/lib/rggen/output_base/line.rb +28 -0
  117. data/lib/rggen/output_base/template_utility.rb +29 -0
  118. data/lib/rggen/output_base/verilog_utility/class_definition.rb +23 -0
  119. data/lib/rggen/output_base/verilog_utility/declaration.rb +70 -0
  120. data/lib/rggen/output_base/verilog_utility/identifier.rb +29 -0
  121. data/lib/rggen/output_base/verilog_utility/module_definition.rb +47 -0
  122. data/lib/rggen/output_base/verilog_utility/package_definition.rb +67 -0
  123. data/lib/rggen/output_base/verilog_utility/structure_definition.rb +52 -0
  124. data/lib/rggen/output_base/verilog_utility/subroutine_definition.rb +43 -0
  125. data/lib/rggen/output_base/verilog_utility.rb +66 -0
  126. data/lib/rggen/version.rb +6 -0
  127. data/lib/rggen.rb +65 -0
  128. data/ral/compile.f +4 -0
  129. data/ral/rggen_ral_block.svh +84 -0
  130. data/ral/rggen_ral_field.svh +47 -0
  131. data/ral/rggen_ral_macros.svh +22 -0
  132. data/ral/rggen_ral_map.svh +124 -0
  133. data/ral/rggen_ral_pkg.sv +14 -0
  134. data/ral/rggen_ral_reg.svh +52 -0
  135. data/ral/rggen_ral_shadow_reg.svh +188 -0
  136. data/rggen.gemspec +45 -0
  137. data/rtl/bit_field/rggen_bit_field_rw.sv +28 -0
  138. data/rtl/register/rggen_address_decoder.sv +49 -0
  139. data/rtl/register_block/rggen_host_if_apb.sv +40 -0
  140. data/rtl/register_block/rggen_response_mux.sv +82 -0
  141. data/sample/sample.csv +14 -0
  142. data/sample/sample.json +4 -0
  143. data/sample/sample.xls +0 -0
  144. data/sample/sample.xlsx +0 -0
  145. data/sample/sample.yaml +2 -0
  146. data/sample/sample_0.sv +285 -0
  147. data/sample/sample_0_ral_pkg.sv +99 -0
  148. data/sample/sample_1.sv +172 -0
  149. data/sample/sample_1_ral_pkg.sv +53 -0
  150. data/sample/sample_setup.rb +21 -0
  151. data/setup/default.rb +11 -0
  152. metadata +296 -0
@@ -0,0 +1,285 @@
1
+ module sample_0 (
2
+ input clk,
3
+ input rst_n,
4
+ input [15:0] i_paddr,
5
+ input [2:0] i_pprot,
6
+ input i_psel,
7
+ input i_penable,
8
+ input i_pwrite,
9
+ input [31:0] i_pwdata,
10
+ input [3:0] i_pstrb,
11
+ output o_pready,
12
+ output [31:0] o_prdata,
13
+ output o_pslverr,
14
+ output [15:0] o_bit_field_0_0,
15
+ output [15:0] o_bit_field_0_1,
16
+ output [31:0] o_bit_field_1_0,
17
+ input i_bit_field_2_0,
18
+ output o_bit_field_2_1,
19
+ input [31:0] i_bit_field_3_0,
20
+ input [15:0] i_bit_field_4_0[4],
21
+ output [15:0] o_bit_field_4_1[4],
22
+ input [15:0] i_bit_field_5_0[2][4],
23
+ output [15:0] o_bit_field_5_1[2][4]
24
+ );
25
+ logic command_valid;
26
+ logic write;
27
+ logic read;
28
+ logic [7:0] address;
29
+ logic [31:0] write_data;
30
+ logic [31:0] write_mask;
31
+ logic response_ready;
32
+ logic [31:0] read_data;
33
+ logic [1:0] status;
34
+ logic [15:0] register_select;
35
+ logic [31:0] register_read_data[16];
36
+ logic [15:0] bit_field_0_0_value;
37
+ logic [15:0] bit_field_0_1_value;
38
+ logic [31:0] bit_field_1_0_value;
39
+ logic bit_field_2_0_value;
40
+ logic bit_field_2_1_value;
41
+ logic [31:0] bit_field_3_0_value;
42
+ logic [15:0] bit_field_4_0_value[4];
43
+ logic [15:0] bit_field_4_1_value[4];
44
+ logic [32:0] register_5_shadow_index[2][4];
45
+ logic [15:0] bit_field_5_0_value[2][4];
46
+ logic [15:0] bit_field_5_1_value[2][4];
47
+ rggen_host_if_apb #(
48
+ .DATA_WIDTH (32),
49
+ .HOST_ADDRESS_WIDTH (16),
50
+ .LOCAL_ADDRESS_WIDTH (8)
51
+ ) u_host_if (
52
+ .clk (clk),
53
+ .rst_n (rst_n),
54
+ .i_paddr (i_paddr),
55
+ .i_pprot (i_pprot),
56
+ .i_psel (i_psel),
57
+ .i_penable (i_penable),
58
+ .i_pwrite (i_pwrite),
59
+ .i_pwdata (i_pwdata),
60
+ .i_pstrb (i_pstrb),
61
+ .o_pready (o_pready),
62
+ .o_prdata (o_prdata),
63
+ .o_pslverr (o_pslverr),
64
+ .o_command_valid (command_valid),
65
+ .o_write (write),
66
+ .o_read (read),
67
+ .o_address (address),
68
+ .o_write_data (write_data),
69
+ .o_write_mask (write_mask),
70
+ .i_response_ready (response_ready),
71
+ .i_read_data (read_data),
72
+ .i_status (status)
73
+ );
74
+ rggen_response_mux #(
75
+ .DATA_WIDTH (32),
76
+ .TOTAL_REGISTERS (16)
77
+ ) u_response_mux (
78
+ .clk (clk),
79
+ .rst_n (rst_n),
80
+ .i_command_valid (command_valid),
81
+ .i_read (read),
82
+ .o_response_ready (response_ready),
83
+ .o_read_data (read_data),
84
+ .o_status (status),
85
+ .i_register_select (register_select),
86
+ .i_register_read_data (register_read_data)
87
+ );
88
+ rggen_address_decoder #(
89
+ .READABLE (1),
90
+ .WRITABLE (1),
91
+ .ADDRESS_WIDTH (6),
92
+ .START_ADDRESS (6'h00),
93
+ .END_ADDRESS (6'h00),
94
+ .USE_SHADOW_INDEX (0),
95
+ .SHADOW_INDEX_WIDTH (1),
96
+ .SHADOW_INDEX_VALUE (1'h0)
97
+ ) u_register_0_address_decoder (
98
+ .i_read (read),
99
+ .i_write (write),
100
+ .i_address (address[7:2]),
101
+ .i_shadow_index (1'h0),
102
+ .o_select (register_select[0])
103
+ );
104
+ assign register_read_data[0] = {bit_field_0_0_value, bit_field_0_1_value};
105
+ assign o_bit_field_0_0 = bit_field_0_0_value;
106
+ rggen_bit_field_rw #(
107
+ .WIDTH (16),
108
+ .INITIAL_VALUE (16'h0000)
109
+ ) u_bit_field_0_0 (
110
+ .clk (clk),
111
+ .rst_n (rst_n),
112
+ .i_command_valid (command_valid),
113
+ .i_select (register_select[0]),
114
+ .i_write (write),
115
+ .i_write_data (write_data[31:16]),
116
+ .i_write_mask (write_mask[31:16]),
117
+ .o_value (bit_field_0_0_value)
118
+ );
119
+ assign o_bit_field_0_1 = bit_field_0_1_value;
120
+ rggen_bit_field_rw #(
121
+ .WIDTH (16),
122
+ .INITIAL_VALUE (16'h0000)
123
+ ) u_bit_field_0_1 (
124
+ .clk (clk),
125
+ .rst_n (rst_n),
126
+ .i_command_valid (command_valid),
127
+ .i_select (register_select[0]),
128
+ .i_write (write),
129
+ .i_write_data (write_data[15:0]),
130
+ .i_write_mask (write_mask[15:0]),
131
+ .o_value (bit_field_0_1_value)
132
+ );
133
+ rggen_address_decoder #(
134
+ .READABLE (1),
135
+ .WRITABLE (1),
136
+ .ADDRESS_WIDTH (6),
137
+ .START_ADDRESS (6'h01),
138
+ .END_ADDRESS (6'h01),
139
+ .USE_SHADOW_INDEX (0),
140
+ .SHADOW_INDEX_WIDTH (1),
141
+ .SHADOW_INDEX_VALUE (1'h0)
142
+ ) u_register_1_address_decoder (
143
+ .i_read (read),
144
+ .i_write (write),
145
+ .i_address (address[7:2]),
146
+ .i_shadow_index (1'h0),
147
+ .o_select (register_select[1])
148
+ );
149
+ assign register_read_data[1] = {bit_field_1_0_value};
150
+ assign o_bit_field_1_0 = bit_field_1_0_value;
151
+ rggen_bit_field_rw #(
152
+ .WIDTH (32),
153
+ .INITIAL_VALUE (32'h00000000)
154
+ ) u_bit_field_1_0 (
155
+ .clk (clk),
156
+ .rst_n (rst_n),
157
+ .i_command_valid (command_valid),
158
+ .i_select (register_select[1]),
159
+ .i_write (write),
160
+ .i_write_data (write_data[31:0]),
161
+ .i_write_mask (write_mask[31:0]),
162
+ .o_value (bit_field_1_0_value)
163
+ );
164
+ rggen_address_decoder #(
165
+ .READABLE (1),
166
+ .WRITABLE (1),
167
+ .ADDRESS_WIDTH (6),
168
+ .START_ADDRESS (6'h02),
169
+ .END_ADDRESS (6'h02),
170
+ .USE_SHADOW_INDEX (0),
171
+ .SHADOW_INDEX_WIDTH (1),
172
+ .SHADOW_INDEX_VALUE (1'h0)
173
+ ) u_register_2_address_decoder (
174
+ .i_read (read),
175
+ .i_write (write),
176
+ .i_address (address[7:2]),
177
+ .i_shadow_index (1'h0),
178
+ .o_select (register_select[2])
179
+ );
180
+ assign register_read_data[2] = {15'h0000, bit_field_2_0_value, 15'h0000, bit_field_2_1_value};
181
+ assign bit_field_2_0_value = i_bit_field_2_0;
182
+ assign o_bit_field_2_1 = bit_field_2_1_value;
183
+ rggen_bit_field_rw #(
184
+ .WIDTH (1),
185
+ .INITIAL_VALUE (1'h0)
186
+ ) u_bit_field_2_1 (
187
+ .clk (clk),
188
+ .rst_n (rst_n),
189
+ .i_command_valid (command_valid),
190
+ .i_select (register_select[2]),
191
+ .i_write (write),
192
+ .i_write_data (write_data[0]),
193
+ .i_write_mask (write_mask[0]),
194
+ .o_value (bit_field_2_1_value)
195
+ );
196
+ rggen_address_decoder #(
197
+ .READABLE (1),
198
+ .WRITABLE (0),
199
+ .ADDRESS_WIDTH (6),
200
+ .START_ADDRESS (6'h03),
201
+ .END_ADDRESS (6'h03),
202
+ .USE_SHADOW_INDEX (0),
203
+ .SHADOW_INDEX_WIDTH (1),
204
+ .SHADOW_INDEX_VALUE (1'h0)
205
+ ) u_register_3_address_decoder (
206
+ .i_read (read),
207
+ .i_write (write),
208
+ .i_address (address[7:2]),
209
+ .i_shadow_index (1'h0),
210
+ .o_select (register_select[3])
211
+ );
212
+ assign register_read_data[3] = {bit_field_3_0_value};
213
+ assign bit_field_3_0_value = i_bit_field_3_0;
214
+ for (genvar g_i = 0;g_i < 4;g_i++) begin : gen_register_4_0
215
+ rggen_address_decoder #(
216
+ .READABLE (1),
217
+ .WRITABLE (1),
218
+ .ADDRESS_WIDTH (6),
219
+ .START_ADDRESS (6'h04 + g_i),
220
+ .END_ADDRESS (6'h04 + g_i),
221
+ .USE_SHADOW_INDEX (0),
222
+ .SHADOW_INDEX_WIDTH (1),
223
+ .SHADOW_INDEX_VALUE (1'h0)
224
+ ) u_register_4_address_decoder (
225
+ .i_read (read),
226
+ .i_write (write),
227
+ .i_address (address[7:2]),
228
+ .i_shadow_index (1'h0),
229
+ .o_select (register_select[4+g_i])
230
+ );
231
+ assign register_read_data[4+g_i] = {bit_field_4_0_value[g_i], bit_field_4_1_value[g_i]};
232
+ assign bit_field_4_0_value[g_i] = i_bit_field_4_0[g_i];
233
+ assign o_bit_field_4_1[g_i] = bit_field_4_1_value[g_i];
234
+ rggen_bit_field_rw #(
235
+ .WIDTH (16),
236
+ .INITIAL_VALUE (16'h0000)
237
+ ) u_bit_field_4_1 (
238
+ .clk (clk),
239
+ .rst_n (rst_n),
240
+ .i_command_valid (command_valid),
241
+ .i_select (register_select[4+g_i]),
242
+ .i_write (write),
243
+ .i_write_data (write_data[15:0]),
244
+ .i_write_mask (write_mask[15:0]),
245
+ .o_value (bit_field_4_1_value[g_i])
246
+ );
247
+ end
248
+ for (genvar g_i = 0;g_i < 2;g_i++) begin : gen_register_5_0
249
+ for (genvar g_j = 0;g_j < 4;g_j++) begin : gen_register_5_1
250
+ assign register_5_shadow_index[g_i][g_j] = {bit_field_2_1_value, bit_field_0_0_value, bit_field_0_1_value};
251
+ rggen_address_decoder #(
252
+ .READABLE (1),
253
+ .WRITABLE (1),
254
+ .ADDRESS_WIDTH (6),
255
+ .START_ADDRESS (6'h08),
256
+ .END_ADDRESS (6'h08),
257
+ .USE_SHADOW_INDEX (1),
258
+ .SHADOW_INDEX_WIDTH (33),
259
+ .SHADOW_INDEX_VALUE ({1'h1, g_i[15:0], g_j[15:0]})
260
+ ) u_register_5_address_decoder (
261
+ .i_read (read),
262
+ .i_write (write),
263
+ .i_address (address[7:2]),
264
+ .i_shadow_index (register_5_shadow_index[g_i][g_j]),
265
+ .o_select (register_select[8+4*g_i+g_j])
266
+ );
267
+ assign register_read_data[8+4*g_i+g_j] = {bit_field_5_0_value[g_i][g_j], bit_field_5_1_value[g_i][g_j]};
268
+ assign bit_field_5_0_value[g_i][g_j] = i_bit_field_5_0[g_i][g_j];
269
+ assign o_bit_field_5_1[g_i][g_j] = bit_field_5_1_value[g_i][g_j];
270
+ rggen_bit_field_rw #(
271
+ .WIDTH (16),
272
+ .INITIAL_VALUE (16'h0000)
273
+ ) u_bit_field_5_1 (
274
+ .clk (clk),
275
+ .rst_n (rst_n),
276
+ .i_command_valid (command_valid),
277
+ .i_select (register_select[8+4*g_i+g_j]),
278
+ .i_write (write),
279
+ .i_write_data (write_data[15:0]),
280
+ .i_write_mask (write_mask[15:0]),
281
+ .o_value (bit_field_5_1_value[g_i][g_j])
282
+ );
283
+ end
284
+ end
285
+ endmodule
@@ -0,0 +1,99 @@
1
+ package sample_0_ral_pkg;
2
+ import uvm_pkg::*;
3
+ import rggen_ral_pkg::*;
4
+ `include "uvm_macros.svh"
5
+ `include "rggen_ral_macros.svh"
6
+ class register_0_reg_model extends rggen_ral_reg;
7
+ rand rggen_ral_field bit_field_0_0;
8
+ rand rggen_ral_field bit_field_0_1;
9
+ function new(string name = "register_0");
10
+ super.new(name, 32, 0);
11
+ endfunction
12
+ function void create_fields();
13
+ `rggen_ral_create_field_model(bit_field_0_0, "bit_field_0_0", 16, 16, "RW", 0, 16'h0000, 1)
14
+ `rggen_ral_create_field_model(bit_field_0_1, "bit_field_0_1", 16, 0, "RW", 0, 16'h0000, 1)
15
+ endfunction
16
+ endclass
17
+ class register_1_reg_model extends rggen_ral_reg;
18
+ rand rggen_ral_field bit_field_1_0;
19
+ function new(string name = "register_1");
20
+ super.new(name, 32, 0);
21
+ endfunction
22
+ function void create_fields();
23
+ `rggen_ral_create_field_model(bit_field_1_0, "bit_field_1_0", 32, 0, "RW", 0, 32'h00000000, 1)
24
+ endfunction
25
+ endclass
26
+ class register_2_reg_model extends rggen_ral_reg;
27
+ rand rggen_ral_field bit_field_2_0;
28
+ rand rggen_ral_field bit_field_2_1;
29
+ function new(string name = "register_2");
30
+ super.new(name, 24, 0);
31
+ endfunction
32
+ function void create_fields();
33
+ `rggen_ral_create_field_model(bit_field_2_0, "bit_field_2_0", 1, 16, "RO", 0, 1'h0, 0)
34
+ `rggen_ral_create_field_model(bit_field_2_1, "bit_field_2_1", 1, 0, "RW", 0, 1'h0, 1)
35
+ endfunction
36
+ endclass
37
+ class register_3_reg_model extends rggen_ral_reg;
38
+ rand rggen_ral_field bit_field_3_0;
39
+ function new(string name = "register_3");
40
+ super.new(name, 32, 0);
41
+ endfunction
42
+ function void create_fields();
43
+ `rggen_ral_create_field_model(bit_field_3_0, "bit_field_3_0", 32, 0, "RO", 0, 32'h00000000, 0)
44
+ endfunction
45
+ endclass
46
+ class register_4_reg_model extends rggen_ral_reg;
47
+ rand rggen_ral_field bit_field_4_0;
48
+ rand rggen_ral_field bit_field_4_1;
49
+ function new(string name = "register_4");
50
+ super.new(name, 32, 0);
51
+ endfunction
52
+ function void create_fields();
53
+ `rggen_ral_create_field_model(bit_field_4_0, "bit_field_4_0", 16, 16, "RO", 0, 16'h0000, 0)
54
+ `rggen_ral_create_field_model(bit_field_4_1, "bit_field_4_1", 16, 0, "RW", 0, 16'h0000, 1)
55
+ endfunction
56
+ endclass
57
+ class register_5_reg_model extends rggen_ral_shadow_reg;
58
+ rand rggen_ral_field bit_field_5_0;
59
+ rand rggen_ral_field bit_field_5_1;
60
+ function new(string name = "register_5");
61
+ super.new(name, 32, 0);
62
+ endfunction
63
+ function void create_fields();
64
+ `rggen_ral_create_field_model(bit_field_5_0, "bit_field_5_0", 16, 16, "RO", 0, 16'h0000, 0)
65
+ `rggen_ral_create_field_model(bit_field_5_1, "bit_field_5_1", 16, 0, "RW", 0, 16'h0000, 1)
66
+ endfunction
67
+ function void configure_shadow_indexes();
68
+ set_shadow_index("register_2", "bit_field_2_1", 1);
69
+ set_shadow_index("register_0", "bit_field_0_0", indexes[0]);
70
+ set_shadow_index("register_0", "bit_field_0_1", indexes[1]);
71
+ endfunction
72
+ endclass
73
+ class sample_0_block_model extends rggen_ral_block;
74
+ rand register_0_reg_model register_0;
75
+ rand register_1_reg_model register_1;
76
+ rand register_2_reg_model register_2;
77
+ rand register_3_reg_model register_3;
78
+ rand register_4_reg_model register_4[4];
79
+ rand register_5_reg_model register_5[2][4];
80
+ function new(string name = "sample_0");
81
+ super.new(name);
82
+ endfunction
83
+ function void create_registers();
84
+ `rggen_ral_create_reg_model(register_0, "register_0", '{}, 8'h00, "RW", 0)
85
+ `rggen_ral_create_reg_model(register_1, "register_1", '{}, 8'h04, "RW", 0)
86
+ `rggen_ral_create_reg_model(register_2, "register_2", '{}, 8'h08, "RW", 0)
87
+ `rggen_ral_create_reg_model(register_3, "register_3", '{}, 8'h0c, "RO", 0)
88
+ foreach (register_4[i]) begin
89
+ `rggen_ral_create_reg_model(register_4[i], "register_4", '{i}, 8'h10 + 4 * i, "RW", 0)
90
+ end
91
+ foreach (register_5[i, j]) begin
92
+ `rggen_ral_create_reg_model(register_5[i][j], "register_5", '{i, j}, 8'h20, "RW", 1)
93
+ end
94
+ endfunction
95
+ function uvm_reg_map create_default_map();
96
+ return create_map("default_map", 0, 4, UVM_LITTLE_ENDIAN, 1);
97
+ endfunction
98
+ endclass
99
+ endpackage
@@ -0,0 +1,172 @@
1
+ module sample_1 (
2
+ input clk,
3
+ input rst_n,
4
+ input [15:0] i_paddr,
5
+ input [2:0] i_pprot,
6
+ input i_psel,
7
+ input i_penable,
8
+ input i_pwrite,
9
+ input [31:0] i_pwdata,
10
+ input [3:0] i_pstrb,
11
+ output o_pready,
12
+ output [31:0] o_prdata,
13
+ output o_pslverr,
14
+ output [15:0] o_bit_field_0_0,
15
+ input [15:0] i_bit_field_0_1,
16
+ output [31:0] o_bit_field_1_0,
17
+ input i_bit_field_2_0,
18
+ output o_bit_field_2_1
19
+ );
20
+ logic command_valid;
21
+ logic write;
22
+ logic read;
23
+ logic [6:0] address;
24
+ logic [31:0] write_data;
25
+ logic [31:0] write_mask;
26
+ logic response_ready;
27
+ logic [31:0] read_data;
28
+ logic [1:0] status;
29
+ logic [2:0] register_select;
30
+ logic [31:0] register_read_data[3];
31
+ logic [15:0] bit_field_0_0_value;
32
+ logic [15:0] bit_field_0_1_value;
33
+ logic [31:0] bit_field_1_0_value;
34
+ logic bit_field_2_0_value;
35
+ logic bit_field_2_1_value;
36
+ rggen_host_if_apb #(
37
+ .DATA_WIDTH (32),
38
+ .HOST_ADDRESS_WIDTH (16),
39
+ .LOCAL_ADDRESS_WIDTH (7)
40
+ ) u_host_if (
41
+ .clk (clk),
42
+ .rst_n (rst_n),
43
+ .i_paddr (i_paddr),
44
+ .i_pprot (i_pprot),
45
+ .i_psel (i_psel),
46
+ .i_penable (i_penable),
47
+ .i_pwrite (i_pwrite),
48
+ .i_pwdata (i_pwdata),
49
+ .i_pstrb (i_pstrb),
50
+ .o_pready (o_pready),
51
+ .o_prdata (o_prdata),
52
+ .o_pslverr (o_pslverr),
53
+ .o_command_valid (command_valid),
54
+ .o_write (write),
55
+ .o_read (read),
56
+ .o_address (address),
57
+ .o_write_data (write_data),
58
+ .o_write_mask (write_mask),
59
+ .i_response_ready (response_ready),
60
+ .i_read_data (read_data),
61
+ .i_status (status)
62
+ );
63
+ rggen_response_mux #(
64
+ .DATA_WIDTH (32),
65
+ .TOTAL_REGISTERS (3)
66
+ ) u_response_mux (
67
+ .clk (clk),
68
+ .rst_n (rst_n),
69
+ .i_command_valid (command_valid),
70
+ .i_read (read),
71
+ .o_response_ready (response_ready),
72
+ .o_read_data (read_data),
73
+ .o_status (status),
74
+ .i_register_select (register_select),
75
+ .i_register_read_data (register_read_data)
76
+ );
77
+ rggen_address_decoder #(
78
+ .READABLE (1),
79
+ .WRITABLE (1),
80
+ .ADDRESS_WIDTH (5),
81
+ .START_ADDRESS (5'h00),
82
+ .END_ADDRESS (5'h00),
83
+ .USE_SHADOW_INDEX (0),
84
+ .SHADOW_INDEX_WIDTH (1),
85
+ .SHADOW_INDEX_VALUE (1'h0)
86
+ ) u_register_0_address_decoder (
87
+ .i_read (read),
88
+ .i_write (write),
89
+ .i_address (address[6:2]),
90
+ .i_shadow_index (1'h0),
91
+ .o_select (register_select[0])
92
+ );
93
+ assign register_read_data[0] = {bit_field_0_0_value, bit_field_0_1_value};
94
+ assign o_bit_field_0_0 = bit_field_0_0_value;
95
+ rggen_bit_field_rw #(
96
+ .WIDTH (16),
97
+ .INITIAL_VALUE (16'h0000)
98
+ ) u_bit_field_0_0 (
99
+ .clk (clk),
100
+ .rst_n (rst_n),
101
+ .i_command_valid (command_valid),
102
+ .i_select (register_select[0]),
103
+ .i_write (write),
104
+ .i_write_data (write_data[31:16]),
105
+ .i_write_mask (write_mask[31:16]),
106
+ .o_value (bit_field_0_0_value)
107
+ );
108
+ assign bit_field_0_1_value = i_bit_field_0_1;
109
+ rggen_address_decoder #(
110
+ .READABLE (1),
111
+ .WRITABLE (1),
112
+ .ADDRESS_WIDTH (5),
113
+ .START_ADDRESS (5'h01),
114
+ .END_ADDRESS (5'h01),
115
+ .USE_SHADOW_INDEX (0),
116
+ .SHADOW_INDEX_WIDTH (1),
117
+ .SHADOW_INDEX_VALUE (1'h0)
118
+ ) u_register_1_address_decoder (
119
+ .i_read (read),
120
+ .i_write (write),
121
+ .i_address (address[6:2]),
122
+ .i_shadow_index (1'h0),
123
+ .o_select (register_select[1])
124
+ );
125
+ assign register_read_data[1] = {bit_field_1_0_value};
126
+ assign o_bit_field_1_0 = bit_field_1_0_value;
127
+ rggen_bit_field_rw #(
128
+ .WIDTH (32),
129
+ .INITIAL_VALUE (32'h00000000)
130
+ ) u_bit_field_1_0 (
131
+ .clk (clk),
132
+ .rst_n (rst_n),
133
+ .i_command_valid (command_valid),
134
+ .i_select (register_select[1]),
135
+ .i_write (write),
136
+ .i_write_data (write_data[31:0]),
137
+ .i_write_mask (write_mask[31:0]),
138
+ .o_value (bit_field_1_0_value)
139
+ );
140
+ rggen_address_decoder #(
141
+ .READABLE (1),
142
+ .WRITABLE (1),
143
+ .ADDRESS_WIDTH (5),
144
+ .START_ADDRESS (5'h02),
145
+ .END_ADDRESS (5'h02),
146
+ .USE_SHADOW_INDEX (0),
147
+ .SHADOW_INDEX_WIDTH (1),
148
+ .SHADOW_INDEX_VALUE (1'h0)
149
+ ) u_register_2_address_decoder (
150
+ .i_read (read),
151
+ .i_write (write),
152
+ .i_address (address[6:2]),
153
+ .i_shadow_index (1'h0),
154
+ .o_select (register_select[2])
155
+ );
156
+ assign register_read_data[2] = {15'h0000, bit_field_2_0_value, 15'h0000, bit_field_2_1_value};
157
+ assign bit_field_2_0_value = i_bit_field_2_0;
158
+ assign o_bit_field_2_1 = bit_field_2_1_value;
159
+ rggen_bit_field_rw #(
160
+ .WIDTH (1),
161
+ .INITIAL_VALUE (1'h0)
162
+ ) u_bit_field_2_1 (
163
+ .clk (clk),
164
+ .rst_n (rst_n),
165
+ .i_command_valid (command_valid),
166
+ .i_select (register_select[2]),
167
+ .i_write (write),
168
+ .i_write_data (write_data[0]),
169
+ .i_write_mask (write_mask[0]),
170
+ .o_value (bit_field_2_1_value)
171
+ );
172
+ endmodule
@@ -0,0 +1,53 @@
1
+ package sample_1_ral_pkg;
2
+ import uvm_pkg::*;
3
+ import rggen_ral_pkg::*;
4
+ `include "uvm_macros.svh"
5
+ `include "rggen_ral_macros.svh"
6
+ class register_0_reg_model extends rggen_ral_reg;
7
+ rand rggen_ral_field bit_field_0_0;
8
+ rand rggen_ral_field bit_field_0_1;
9
+ function new(string name = "register_0");
10
+ super.new(name, 32, 0);
11
+ endfunction
12
+ function void create_fields();
13
+ `rggen_ral_create_field_model(bit_field_0_0, "bit_field_0_0", 16, 16, "RW", 0, 16'h0000, 1)
14
+ `rggen_ral_create_field_model(bit_field_0_1, "bit_field_0_1", 16, 0, "RO", 0, 16'h0000, 0)
15
+ endfunction
16
+ endclass
17
+ class register_1_reg_model extends rggen_ral_reg;
18
+ rand rggen_ral_field bit_field_1_0;
19
+ function new(string name = "register_1");
20
+ super.new(name, 32, 0);
21
+ endfunction
22
+ function void create_fields();
23
+ `rggen_ral_create_field_model(bit_field_1_0, "bit_field_1_0", 32, 0, "RW", 0, 32'h00000000, 1)
24
+ endfunction
25
+ endclass
26
+ class register_2_reg_model extends rggen_ral_reg;
27
+ rand rggen_ral_field bit_field_2_0;
28
+ rand rggen_ral_field bit_field_2_1;
29
+ function new(string name = "register_2");
30
+ super.new(name, 24, 0);
31
+ endfunction
32
+ function void create_fields();
33
+ `rggen_ral_create_field_model(bit_field_2_0, "bit_field_2_0", 1, 16, "RO", 0, 1'h0, 0)
34
+ `rggen_ral_create_field_model(bit_field_2_1, "bit_field_2_1", 1, 0, "RW", 0, 1'h0, 1)
35
+ endfunction
36
+ endclass
37
+ class sample_1_block_model extends rggen_ral_block;
38
+ rand register_0_reg_model register_0;
39
+ rand register_1_reg_model register_1;
40
+ rand register_2_reg_model register_2;
41
+ function new(string name = "sample_1");
42
+ super.new(name);
43
+ endfunction
44
+ function void create_registers();
45
+ `rggen_ral_create_reg_model(register_0, "register_0", '{}, 7'h00, "RW", 0)
46
+ `rggen_ral_create_reg_model(register_1, "register_1", '{}, 7'h04, "RW", 0)
47
+ `rggen_ral_create_reg_model(register_2, "register_2", '{}, 7'h08, "RW", 0)
48
+ endfunction
49
+ function uvm_reg_map create_default_map();
50
+ return create_map("default_map", 0, 4, UVM_LITTLE_ENDIAN, 1);
51
+ endfunction
52
+ endclass
53
+ endpackage
@@ -0,0 +1,21 @@
1
+ define_list_item :bit_field, :type, :foo do
2
+ register_map do
3
+ end
4
+ end
5
+
6
+ define_list_item :register_block, :host_if, :bar do
7
+ rtl do
8
+ end
9
+ end
10
+
11
+ enable :global , [:data_width, :address_width]
12
+ enable :register_block, [:name, :base_address]
13
+ enable :register , [:offset_address, :name, :array, :shadow, :accessibility, :uniquness_validator]
14
+ enable :bit_field , [:bit_assignment, :name, :type, :initial_value, :reference]
15
+ enable :bit_field , :type, [:rw, :ro, :foo, :reserved]
16
+ enable :register_block, [:module_definition, :signal_declarations, :clock_reset, :host_if, :response_mux]
17
+ enable :register_block, :host_if, [:apb, :bar]
18
+ enable :register , [:address_decoder, :read_data]
19
+ enable :register_block, [:ral_package_definition, :block_model_definition, :reg_model_declarations, :block_model_constructor, :reg_model_creator, :block_model_default_map_creator]
20
+ enable :register , [:reg_model_definition, :field_model_declarations, :reg_model_constructor, :field_model_creator, :shadow_index_configurator, :reg_model_declaration, :reg_model_creation]
21
+ enable :bit_field , [:field_model_declaration, :field_model_creation]
data/setup/default.rb ADDED
@@ -0,0 +1,11 @@
1
+ enable :global , [:data_width, :address_width]
2
+ enable :register_block, [:name, :byte_size]
3
+ enable :register , [:offset_address, :name, :array, :shadow, :accessibility, :uniquness_validator]
4
+ enable :bit_field , [:bit_assignment, :name, :type, :initial_value, :reference]
5
+ enable :bit_field , :type, [:rw, :ro, :reserved]
6
+ enable :register_block, [:module_definition, :signal_declarations, :clock_reset, :host_if, :response_mux]
7
+ enable :register_block, :host_if, [:apb]
8
+ enable :register , [:address_decoder, :read_data]
9
+ enable :register_block, [:ral_package_definition, :block_model_definition, :reg_model_declarations, :block_model_constructor, :reg_model_creator, :block_model_default_map_creator]
10
+ enable :register , [:reg_model_definition, :field_model_declarations, :reg_model_constructor, :field_model_creator, :shadow_index_configurator, :reg_model_declaration, :reg_model_creation]
11
+ enable :bit_field , [:field_model_declaration, :field_model_creation]