rggen 0.4.4 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +3 -2
  4. data/c/rggen.h +17 -0
  5. data/lib/rggen.rb +7 -16
  6. data/lib/rggen/base/item_factory.rb +2 -0
  7. data/lib/rggen/builtins.rb +15 -13
  8. data/lib/rggen/builtins/bit_field/{reserved.rb → types/reserved.rb} +0 -0
  9. data/lib/rggen/builtins/bit_field/{ro.erb → types/ro.erb} +0 -0
  10. data/lib/rggen/builtins/bit_field/{ro.rb → types/ro.rb} +0 -0
  11. data/lib/rggen/builtins/bit_field/{rw.erb → types/rw.erb} +0 -0
  12. data/lib/rggen/builtins/bit_field/{rw.rb → types/rw.rb} +0 -0
  13. data/lib/rggen/builtins/bit_field/{rwl_rwe.erb → types/rwl_rwe.erb} +0 -0
  14. data/lib/rggen/builtins/bit_field/{rwl_rwe.rb → types/rwl_rwe.rb} +0 -0
  15. data/lib/rggen/builtins/bit_field/{w0c_w1c.erb → types/w0c_w1c.erb} +0 -0
  16. data/lib/rggen/builtins/bit_field/{w0c_w1c.rb → types/w0c_w1c.rb} +0 -0
  17. data/lib/rggen/builtins/bit_field/{w0s_w1s.erb → types/w0s_w1s.erb} +0 -0
  18. data/lib/rggen/builtins/bit_field/{w0s_w1s.rb → types/w0s_w1s.rb} +0 -0
  19. data/lib/rggen/builtins/bit_field/{wo.rb → types/wo.rb} +0 -0
  20. data/lib/rggen/builtins/register/address_decoder.erb +9 -9
  21. data/lib/rggen/builtins/register/address_decoder.rb +24 -24
  22. data/lib/rggen/builtins/register/array.rb +0 -22
  23. data/lib/rggen/builtins/register/bus_exporter.rb +10 -2
  24. data/lib/rggen/builtins/register/indirect_index_configurator.rb +54 -0
  25. data/lib/rggen/builtins/register/offset_address.rb +21 -15
  26. data/lib/rggen/builtins/register/read_data.rb +1 -1
  27. data/lib/rggen/builtins/register/reg_model.rb +5 -5
  28. data/lib/rggen/builtins/register/sub_block_model.rb +1 -1
  29. data/lib/rggen/builtins/register/type.rb +207 -0
  30. data/lib/rggen/builtins/register/types/external.rb +15 -0
  31. data/lib/rggen/builtins/register/types/indirect.rb +134 -0
  32. data/lib/rggen/builtins/register/uniqueness_validator.rb +10 -7
  33. data/lib/rggen/builtins/register_block/address_struct.rb +56 -0
  34. data/lib/rggen/builtins/register_block/c_header_file.rb +15 -0
  35. data/lib/rggen/builtins/register_block/{apb.erb → host_ifs/apb.erb} +0 -0
  36. data/lib/rggen/builtins/register_block/{apb.rb → host_ifs/apb.rb} +0 -0
  37. data/lib/rggen/builtins/register_block/{axi4lite.erb → host_ifs/axi4lite.erb} +0 -0
  38. data/lib/rggen/builtins/register_block/{axi4lite.rb → host_ifs/axi4lite.rb} +0 -0
  39. data/lib/rggen/builtins/register_block/ral_package.rb +6 -1
  40. data/lib/rggen/builtins/register_block/response_mux.rb +2 -2
  41. data/lib/rggen/builtins/register_block/top_module.rb +5 -1
  42. data/lib/rggen/core_components.rb +25 -0
  43. data/lib/rggen/core_components/c_header/item.rb +8 -0
  44. data/lib/rggen/core_components/c_header/setup.rb +19 -0
  45. data/lib/rggen/core_components/c_utility.rb +19 -0
  46. data/lib/rggen/core_components/c_utility/data_structure_definition.rb +62 -0
  47. data/lib/rggen/core_components/c_utility/source_file.rb +10 -0
  48. data/lib/rggen/core_components/c_utility/variable_declaration.rb +35 -0
  49. data/lib/rggen/core_components/code_utility.rb +56 -0
  50. data/lib/rggen/{output_base → core_components/code_utility}/code_block.rb +1 -1
  51. data/lib/rggen/{output_base → core_components/code_utility}/line.rb +1 -1
  52. data/lib/rggen/core_components/code_utility/source_file.rb +97 -0
  53. data/lib/rggen/core_components/erb_engine.rb +15 -0
  54. data/lib/rggen/core_components/ral/item.rb +2 -1
  55. data/lib/rggen/core_components/register_map/generic_map.rb +3 -1
  56. data/lib/rggen/core_components/rtl/item.rb +2 -1
  57. data/lib/rggen/core_components/verilog_utility.rb +69 -0
  58. data/lib/rggen/core_components/verilog_utility/class_definition.rb +56 -0
  59. data/lib/rggen/core_components/verilog_utility/declaration.rb +66 -0
  60. data/lib/rggen/core_components/verilog_utility/identifier.rb +27 -0
  61. data/lib/rggen/core_components/verilog_utility/module_definition.rb +71 -0
  62. data/lib/rggen/core_components/verilog_utility/package_definition.rb +65 -0
  63. data/lib/rggen/core_components/verilog_utility/source_file.rb +10 -0
  64. data/lib/rggen/core_components/verilog_utility/structure_definition.rb +50 -0
  65. data/lib/rggen/core_components/verilog_utility/subroutine_definition.rb +41 -0
  66. data/lib/rggen/core_extensions/facets.rb +5 -0
  67. data/lib/rggen/generator.rb +19 -5
  68. data/lib/rggen/input_base/item.rb +6 -6
  69. data/lib/rggen/output_base/code_generator.rb +36 -0
  70. data/lib/rggen/output_base/component.rb +27 -41
  71. data/lib/rggen/output_base/file_writer.rb +36 -0
  72. data/lib/rggen/output_base/item.rb +34 -100
  73. data/lib/rggen/output_base/template_engine.rb +24 -0
  74. data/lib/rggen/rggen_home.rb +3 -0
  75. data/lib/rggen/version.rb +2 -2
  76. data/ral/rggen_ral_block.svh +1 -1
  77. data/ral/rggen_ral_indirect_reg.svh +193 -0
  78. data/ral/rggen_ral_map.svh +20 -20
  79. data/ral/rggen_ral_pkg.sv +1 -1
  80. data/rtl/register/rggen_address_decoder.sv +14 -14
  81. data/sample/sample.csv +21 -22
  82. data/sample/sample.xls +0 -0
  83. data/sample/sample.xlsx +0 -0
  84. data/sample/sample_0.h +17 -0
  85. data/sample/sample_0.sv +92 -92
  86. data/sample/sample_0_ral_pkg.sv +8 -5
  87. data/sample/sample_1.h +9 -0
  88. data/sample/sample_1.sv +27 -27
  89. data/sample/sample_1_ral_pkg.sv +3 -0
  90. data/sample/sample_setup.rb +4 -2
  91. data/setup/default.rb +4 -2
  92. metadata +53 -36
  93. data/lib/rggen/builtins/register/accessibility.rb +0 -23
  94. data/lib/rggen/builtins/register/external.rb +0 -42
  95. data/lib/rggen/builtins/register/shadow.rb +0 -130
  96. data/lib/rggen/builtins/register/shadow_index_configurator.rb +0 -56
  97. data/lib/rggen/output_base/code_utility.rb +0 -50
  98. data/lib/rggen/output_base/template_utility.rb +0 -29
  99. data/lib/rggen/output_base/verilog_utility.rb +0 -69
  100. data/lib/rggen/output_base/verilog_utility/class_definition.rb +0 -58
  101. data/lib/rggen/output_base/verilog_utility/declaration.rb +0 -68
  102. data/lib/rggen/output_base/verilog_utility/identifier.rb +0 -29
  103. data/lib/rggen/output_base/verilog_utility/module_definition.rb +0 -73
  104. data/lib/rggen/output_base/verilog_utility/package_definition.rb +0 -67
  105. data/lib/rggen/output_base/verilog_utility/structure_definition.rb +0 -52
  106. data/lib/rggen/output_base/verilog_utility/subroutine_definition.rb +0 -43
  107. data/ral/rggen_ral_shadow_reg.svh +0 -193
data/sample/sample.xls CHANGED
Binary file
data/sample/sample.xlsx CHANGED
Binary file
data/sample/sample_0.h ADDED
@@ -0,0 +1,17 @@
1
+ #ifndef SAMPLE_0_H
2
+ #define SAMPLE_0_H
3
+ #include "rggen.h"
4
+ typedef struct {
5
+ rggen_uint32 register_0;
6
+ rggen_uint32 register_1;
7
+ rggen_uint32 register_2;
8
+ rggen_uint32 register_3;
9
+ rggen_uint32 register_4[4];
10
+ rggen_uint32 register_5;
11
+ rggen_uint32 register_6;
12
+ rggen_uint32 register_7;
13
+ rggen_uint32 register_8;
14
+ rggen_uint32 __dummy_0[20];
15
+ RGGEN_EXTERNAL_REGISTERS(128, REGISTER_9) register_9;
16
+ } s_sample_0_address_struct;
17
+ #endif
data/sample/sample_0.sv CHANGED
@@ -65,7 +65,7 @@ module sample_0 (
65
65
  logic [31:0] bit_field_3_0_value;
66
66
  logic [15:0] bit_field_4_0_value[4];
67
67
  logic [15:0] bit_field_4_1_value[4];
68
- logic [32:0] register_5_shadow_index[2][4];
68
+ logic [32:0] register_5_indirect_index[2][4];
69
69
  logic [15:0] bit_field_5_0_value[2][4];
70
70
  logic [15:0] bit_field_5_1_value[2][4];
71
71
  logic bit_field_6_0_value;
@@ -132,16 +132,16 @@ module sample_0 (
132
132
  .o_irq (o_irq)
133
133
  );
134
134
  rggen_address_decoder #(
135
- .ADDRESS_WIDTH (6),
136
- .START_ADDRESS (6'h00),
137
- .END_ADDRESS (6'h00),
138
- .USE_SHADOW_INDEX (0),
139
- .SHADOW_INDEX_WIDTH (1),
140
- .SHADOW_INDEX_VALUE (1'h0)
135
+ .ADDRESS_WIDTH (6),
136
+ .START_ADDRESS (6'h00),
137
+ .END_ADDRESS (6'h00),
138
+ .INDIRECT_REGISTER (0),
139
+ .INDIRECT_INDEX_WIDTH (1),
140
+ .INDIRECT_INDEX_VALUE (1'h0)
141
141
  ) u_register_0_address_decoder (
142
- .i_address (address[7:2]),
143
- .i_shadow_index (1'h0),
144
- .o_select (register_select[0])
142
+ .i_address (address[7:2]),
143
+ .i_indirect_index (1'h0),
144
+ .o_select (register_select[0])
145
145
  );
146
146
  assign register_read_data[0] = {bit_field_0_0_value, bit_field_0_1_value};
147
147
  assign o_bit_field_0_0 = bit_field_0_0_value;
@@ -173,16 +173,16 @@ module sample_0 (
173
173
  .o_value (bit_field_0_1_value)
174
174
  );
175
175
  rggen_address_decoder #(
176
- .ADDRESS_WIDTH (6),
177
- .START_ADDRESS (6'h01),
178
- .END_ADDRESS (6'h01),
179
- .USE_SHADOW_INDEX (0),
180
- .SHADOW_INDEX_WIDTH (1),
181
- .SHADOW_INDEX_VALUE (1'h0)
176
+ .ADDRESS_WIDTH (6),
177
+ .START_ADDRESS (6'h01),
178
+ .END_ADDRESS (6'h01),
179
+ .INDIRECT_REGISTER (0),
180
+ .INDIRECT_INDEX_WIDTH (1),
181
+ .INDIRECT_INDEX_VALUE (1'h0)
182
182
  ) u_register_1_address_decoder (
183
- .i_address (address[7:2]),
184
- .i_shadow_index (1'h0),
185
- .o_select (register_select[1])
183
+ .i_address (address[7:2]),
184
+ .i_indirect_index (1'h0),
185
+ .o_select (register_select[1])
186
186
  );
187
187
  assign register_read_data[1] = {bit_field_1_0_value};
188
188
  assign o_bit_field_1_0 = bit_field_1_0_value;
@@ -200,16 +200,16 @@ module sample_0 (
200
200
  .o_value (bit_field_1_0_value)
201
201
  );
202
202
  rggen_address_decoder #(
203
- .ADDRESS_WIDTH (6),
204
- .START_ADDRESS (6'h02),
205
- .END_ADDRESS (6'h02),
206
- .USE_SHADOW_INDEX (0),
207
- .SHADOW_INDEX_WIDTH (1),
208
- .SHADOW_INDEX_VALUE (1'h0)
203
+ .ADDRESS_WIDTH (6),
204
+ .START_ADDRESS (6'h02),
205
+ .END_ADDRESS (6'h02),
206
+ .INDIRECT_REGISTER (0),
207
+ .INDIRECT_INDEX_WIDTH (1),
208
+ .INDIRECT_INDEX_VALUE (1'h0)
209
209
  ) u_register_2_address_decoder (
210
- .i_address (address[7:2]),
211
- .i_shadow_index (1'h0),
212
- .o_select (register_select[2])
210
+ .i_address (address[7:2]),
211
+ .i_indirect_index (1'h0),
212
+ .o_select (register_select[2])
213
213
  );
214
214
  assign register_read_data[2] = {15'h0000, bit_field_2_0_value, 15'h0000, bit_field_2_1_value};
215
215
  rggen_bit_field_ro #(
@@ -233,16 +233,16 @@ module sample_0 (
233
233
  .o_value (bit_field_2_1_value)
234
234
  );
235
235
  rggen_address_decoder #(
236
- .ADDRESS_WIDTH (6),
237
- .START_ADDRESS (6'h03),
238
- .END_ADDRESS (6'h03),
239
- .USE_SHADOW_INDEX (0),
240
- .SHADOW_INDEX_WIDTH (1),
241
- .SHADOW_INDEX_VALUE (1'h0)
236
+ .ADDRESS_WIDTH (6),
237
+ .START_ADDRESS (6'h03),
238
+ .END_ADDRESS (6'h03),
239
+ .INDIRECT_REGISTER (0),
240
+ .INDIRECT_INDEX_WIDTH (1),
241
+ .INDIRECT_INDEX_VALUE (1'h0)
242
242
  ) u_register_3_address_decoder (
243
- .i_address (address[7:2]),
244
- .i_shadow_index (1'h0),
245
- .o_select (register_select[3])
243
+ .i_address (address[7:2]),
244
+ .i_indirect_index (1'h0),
245
+ .o_select (register_select[3])
246
246
  );
247
247
  assign register_read_data[3] = {bit_field_3_0_value};
248
248
  rggen_bit_field_ro #(
@@ -255,16 +255,16 @@ module sample_0 (
255
255
  genvar g_i;
256
256
  for (g_i = 0;g_i < 4;g_i++) begin : g
257
257
  rggen_address_decoder #(
258
- .ADDRESS_WIDTH (6),
259
- .START_ADDRESS (6'h04 + g_i),
260
- .END_ADDRESS (6'h04 + g_i),
261
- .USE_SHADOW_INDEX (0),
262
- .SHADOW_INDEX_WIDTH (1),
263
- .SHADOW_INDEX_VALUE (1'h0)
258
+ .ADDRESS_WIDTH (6),
259
+ .START_ADDRESS (6'h04 + g_i),
260
+ .END_ADDRESS (6'h04 + g_i),
261
+ .INDIRECT_REGISTER (0),
262
+ .INDIRECT_INDEX_WIDTH (1),
263
+ .INDIRECT_INDEX_VALUE (1'h0)
264
264
  ) u_register_4_address_decoder (
265
- .i_address (address[7:2]),
266
- .i_shadow_index (1'h0),
267
- .o_select (register_select[4+g_i])
265
+ .i_address (address[7:2]),
266
+ .i_indirect_index (1'h0),
267
+ .o_select (register_select[4+g_i])
268
268
  );
269
269
  assign register_read_data[4+g_i] = {bit_field_4_0_value[g_i], bit_field_4_1_value[g_i]};
270
270
  rggen_bit_field_ro #(
@@ -293,18 +293,18 @@ module sample_0 (
293
293
  genvar g_i, g_j;
294
294
  for (g_i = 0;g_i < 2;g_i++) begin : g
295
295
  for (g_j = 0;g_j < 4;g_j++) begin : g
296
- assign register_5_shadow_index[g_i][g_j] = {bit_field_2_1_value, bit_field_0_0_value, bit_field_0_1_value};
296
+ assign register_5_indirect_index[g_i][g_j] = {bit_field_2_1_value, bit_field_0_0_value, bit_field_0_1_value};
297
297
  rggen_address_decoder #(
298
- .ADDRESS_WIDTH (6),
299
- .START_ADDRESS (6'h08),
300
- .END_ADDRESS (6'h08),
301
- .USE_SHADOW_INDEX (1),
302
- .SHADOW_INDEX_WIDTH (33),
303
- .SHADOW_INDEX_VALUE ({1'h1, g_i[15:0], g_j[15:0]})
298
+ .ADDRESS_WIDTH (6),
299
+ .START_ADDRESS (6'h08),
300
+ .END_ADDRESS (6'h08),
301
+ .INDIRECT_REGISTER (1),
302
+ .INDIRECT_INDEX_WIDTH (33),
303
+ .INDIRECT_INDEX_VALUE ({1'h1, g_i[15:0], g_j[15:0]})
304
304
  ) u_register_5_address_decoder (
305
- .i_address (address[7:2]),
306
- .i_shadow_index (register_5_shadow_index[g_i][g_j]),
307
- .o_select (register_select[8+4*g_i+g_j])
305
+ .i_address (address[7:2]),
306
+ .i_indirect_index (register_5_indirect_index[g_i][g_j]),
307
+ .o_select (register_select[8+4*g_i+g_j])
308
308
  );
309
309
  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]};
310
310
  rggen_bit_field_ro #(
@@ -331,16 +331,16 @@ module sample_0 (
331
331
  end
332
332
  end endgenerate
333
333
  rggen_address_decoder #(
334
- .ADDRESS_WIDTH (6),
335
- .START_ADDRESS (6'h09),
336
- .END_ADDRESS (6'h09),
337
- .USE_SHADOW_INDEX (0),
338
- .SHADOW_INDEX_WIDTH (1),
339
- .SHADOW_INDEX_VALUE (1'h0)
334
+ .ADDRESS_WIDTH (6),
335
+ .START_ADDRESS (6'h09),
336
+ .END_ADDRESS (6'h09),
337
+ .INDIRECT_REGISTER (0),
338
+ .INDIRECT_INDEX_WIDTH (1),
339
+ .INDIRECT_INDEX_VALUE (1'h0)
340
340
  ) u_register_6_address_decoder (
341
- .i_address (address[7:2]),
342
- .i_shadow_index (1'h0),
343
- .o_select (register_select[16])
341
+ .i_address (address[7:2]),
342
+ .i_indirect_index (1'h0),
343
+ .o_select (register_select[16])
344
344
  );
345
345
  assign register_read_data[16] = {23'h000000, bit_field_6_0_value, 7'h00, bit_field_6_1_value};
346
346
  rggen_bit_field_w01s_w01c #(
@@ -376,16 +376,16 @@ module sample_0 (
376
376
  .o_value (bit_field_6_1_value)
377
377
  );
378
378
  rggen_address_decoder #(
379
- .ADDRESS_WIDTH (6),
380
- .START_ADDRESS (6'h0a),
381
- .END_ADDRESS (6'h0a),
382
- .USE_SHADOW_INDEX (0),
383
- .SHADOW_INDEX_WIDTH (1),
384
- .SHADOW_INDEX_VALUE (1'h0)
379
+ .ADDRESS_WIDTH (6),
380
+ .START_ADDRESS (6'h0a),
381
+ .END_ADDRESS (6'h0a),
382
+ .INDIRECT_REGISTER (0),
383
+ .INDIRECT_INDEX_WIDTH (1),
384
+ .INDIRECT_INDEX_VALUE (1'h0)
385
385
  ) u_register_7_address_decoder (
386
- .i_address (address[7:2]),
387
- .i_shadow_index (1'h0),
388
- .o_select (register_select[17])
386
+ .i_address (address[7:2]),
387
+ .i_indirect_index (1'h0),
388
+ .o_select (register_select[17])
389
389
  );
390
390
  assign register_read_data[17] = {23'h000000, bit_field_7_0_value, 7'h00, bit_field_7_1_value};
391
391
  assign o_bit_field_7_0 = bit_field_7_0_value;
@@ -423,16 +423,16 @@ module sample_0 (
423
423
  .o_value (bit_field_7_1_value)
424
424
  );
425
425
  rggen_address_decoder #(
426
- .ADDRESS_WIDTH (6),
427
- .START_ADDRESS (6'h0b),
428
- .END_ADDRESS (6'h0b),
429
- .USE_SHADOW_INDEX (0),
430
- .SHADOW_INDEX_WIDTH (1),
431
- .SHADOW_INDEX_VALUE (1'h0)
426
+ .ADDRESS_WIDTH (6),
427
+ .START_ADDRESS (6'h0b),
428
+ .END_ADDRESS (6'h0b),
429
+ .INDIRECT_REGISTER (0),
430
+ .INDIRECT_INDEX_WIDTH (1),
431
+ .INDIRECT_INDEX_VALUE (1'h0)
432
432
  ) u_register_8_address_decoder (
433
- .i_address (address[7:2]),
434
- .i_shadow_index (1'h0),
435
- .o_select (register_select[18])
433
+ .i_address (address[7:2]),
434
+ .i_indirect_index (1'h0),
435
+ .o_select (register_select[18])
436
436
  );
437
437
  assign register_read_data[18] = {bit_field_8_0_value, bit_field_8_1_value};
438
438
  assign o_bit_field_8_0 = bit_field_8_0_value;
@@ -468,16 +468,16 @@ module sample_0 (
468
468
  .o_value (bit_field_8_1_value)
469
469
  );
470
470
  rggen_address_decoder #(
471
- .ADDRESS_WIDTH (6),
472
- .START_ADDRESS (6'h20),
473
- .END_ADDRESS (6'h3f),
474
- .USE_SHADOW_INDEX (0),
475
- .SHADOW_INDEX_WIDTH (1),
476
- .SHADOW_INDEX_VALUE (1'h0)
471
+ .ADDRESS_WIDTH (6),
472
+ .START_ADDRESS (6'h20),
473
+ .END_ADDRESS (6'h3f),
474
+ .INDIRECT_REGISTER (0),
475
+ .INDIRECT_INDEX_WIDTH (1),
476
+ .INDIRECT_INDEX_VALUE (1'h0)
477
477
  ) u_register_9_address_decoder (
478
- .i_address (address[7:2]),
479
- .i_shadow_index (1'h0),
480
- .o_select (register_select[19])
478
+ .i_address (address[7:2]),
479
+ .i_indirect_index (1'h0),
480
+ .o_select (register_select[19])
481
481
  );
482
482
  assign external_register_select[0] = register_select[19];
483
483
  rggen_bus_exporter #(
@@ -1,3 +1,5 @@
1
+ `ifndef SAMPLE_0_RAL_PKG_SV
2
+ `define SAMPLE_0_RAL_PKG_SV
1
3
  package sample_0_ral_pkg;
2
4
  import uvm_pkg::*;
3
5
  import rggen_ral_pkg::*;
@@ -54,7 +56,7 @@ package sample_0_ral_pkg;
54
56
  `rggen_ral_create_field_model(bit_field_4_1, "bit_field_4_1", 16, 0, "RW", 0, 16'h0000, 1, "u_bit_field_4_1.value")
55
57
  endfunction
56
58
  endclass
57
- class register_5_reg_model extends rggen_ral_shadow_reg;
59
+ class register_5_reg_model extends rggen_ral_indirect_reg;
58
60
  rand rggen_ral_field bit_field_5_0;
59
61
  rand rggen_ral_field bit_field_5_1;
60
62
  function new(string name = "register_5");
@@ -64,10 +66,10 @@ package sample_0_ral_pkg;
64
66
  `rggen_ral_create_field_model(bit_field_5_0, "bit_field_5_0", 16, 16, "RO", 0, 16'h0000, 0, "u_bit_field_5_0.i_value")
65
67
  `rggen_ral_create_field_model(bit_field_5_1, "bit_field_5_1", 16, 0, "RW", 0, 16'h0000, 1, "u_bit_field_5_1.value")
66
68
  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]);
69
+ function void configure_indirect_indexes();
70
+ set_indirect_index("register_2", "bit_field_2_1", 1);
71
+ set_indirect_index("register_0", "bit_field_0_0", indexes[0]);
72
+ set_indirect_index("register_0", "bit_field_0_1", indexes[1]);
71
73
  endfunction
72
74
  endclass
73
75
  class register_6_reg_model extends rggen_ral_reg;
@@ -140,3 +142,4 @@ package sample_0_ral_pkg;
140
142
  endfunction
141
143
  endclass
142
144
  endpackage
145
+ `endif
data/sample/sample_1.h ADDED
@@ -0,0 +1,9 @@
1
+ #ifndef SAMPLE_1_H
2
+ #define SAMPLE_1_H
3
+ #include "rggen.h"
4
+ typedef struct {
5
+ rggen_uint32 register_0;
6
+ rggen_uint32 register_1;
7
+ rggen_uint32 register_2;
8
+ } s_sample_1_address_struct;
9
+ #endif
data/sample/sample_1.sv CHANGED
@@ -81,16 +81,16 @@ module sample_1 (
81
81
  .i_external_register_status ('{2'b00})
82
82
  );
83
83
  rggen_address_decoder #(
84
- .ADDRESS_WIDTH (5),
85
- .START_ADDRESS (5'h00),
86
- .END_ADDRESS (5'h00),
87
- .USE_SHADOW_INDEX (0),
88
- .SHADOW_INDEX_WIDTH (1),
89
- .SHADOW_INDEX_VALUE (1'h0)
84
+ .ADDRESS_WIDTH (5),
85
+ .START_ADDRESS (5'h00),
86
+ .END_ADDRESS (5'h00),
87
+ .INDIRECT_REGISTER (0),
88
+ .INDIRECT_INDEX_WIDTH (1),
89
+ .INDIRECT_INDEX_VALUE (1'h0)
90
90
  ) u_register_0_address_decoder (
91
- .i_address (address[6:2]),
92
- .i_shadow_index (1'h0),
93
- .o_select (register_select[0])
91
+ .i_address (address[6:2]),
92
+ .i_indirect_index (1'h0),
93
+ .o_select (register_select[0])
94
94
  );
95
95
  assign register_read_data[0] = {bit_field_0_0_value, bit_field_0_1_value};
96
96
  assign o_bit_field_0_0 = bit_field_0_0_value;
@@ -114,16 +114,16 @@ module sample_1 (
114
114
  .o_value (bit_field_0_1_value)
115
115
  );
116
116
  rggen_address_decoder #(
117
- .ADDRESS_WIDTH (5),
118
- .START_ADDRESS (5'h01),
119
- .END_ADDRESS (5'h01),
120
- .USE_SHADOW_INDEX (0),
121
- .SHADOW_INDEX_WIDTH (1),
122
- .SHADOW_INDEX_VALUE (1'h0)
117
+ .ADDRESS_WIDTH (5),
118
+ .START_ADDRESS (5'h01),
119
+ .END_ADDRESS (5'h01),
120
+ .INDIRECT_REGISTER (0),
121
+ .INDIRECT_INDEX_WIDTH (1),
122
+ .INDIRECT_INDEX_VALUE (1'h0)
123
123
  ) u_register_1_address_decoder (
124
- .i_address (address[6:2]),
125
- .i_shadow_index (1'h0),
126
- .o_select (register_select[1])
124
+ .i_address (address[6:2]),
125
+ .i_indirect_index (1'h0),
126
+ .o_select (register_select[1])
127
127
  );
128
128
  assign register_read_data[1] = {bit_field_1_0_value};
129
129
  assign o_bit_field_1_0 = bit_field_1_0_value;
@@ -141,16 +141,16 @@ module sample_1 (
141
141
  .o_value (bit_field_1_0_value)
142
142
  );
143
143
  rggen_address_decoder #(
144
- .ADDRESS_WIDTH (5),
145
- .START_ADDRESS (5'h02),
146
- .END_ADDRESS (5'h02),
147
- .USE_SHADOW_INDEX (0),
148
- .SHADOW_INDEX_WIDTH (1),
149
- .SHADOW_INDEX_VALUE (1'h0)
144
+ .ADDRESS_WIDTH (5),
145
+ .START_ADDRESS (5'h02),
146
+ .END_ADDRESS (5'h02),
147
+ .INDIRECT_REGISTER (0),
148
+ .INDIRECT_INDEX_WIDTH (1),
149
+ .INDIRECT_INDEX_VALUE (1'h0)
150
150
  ) u_register_2_address_decoder (
151
- .i_address (address[6:2]),
152
- .i_shadow_index (1'h0),
153
- .o_select (register_select[2])
151
+ .i_address (address[6:2]),
152
+ .i_indirect_index (1'h0),
153
+ .o_select (register_select[2])
154
154
  );
155
155
  assign register_read_data[2] = {15'h0000, bit_field_2_0_value, 15'h0000, bit_field_2_1_value};
156
156
  rggen_bit_field_ro #(
@@ -1,3 +1,5 @@
1
+ `ifndef SAMPLE_1_RAL_PKG_SV
2
+ `define SAMPLE_1_RAL_PKG_SV
1
3
  package sample_1_ral_pkg;
2
4
  import uvm_pkg::*;
3
5
  import rggen_ral_pkg::*;
@@ -51,3 +53,4 @@ package sample_1_ral_pkg;
51
53
  endfunction
52
54
  endclass
53
55
  endpackage
56
+ `endif
@@ -10,12 +10,14 @@ end
10
10
 
11
11
  enable :global , [:data_width, :address_width]
12
12
  enable :register_block, [:name, :base_address]
13
- enable :register , [:offset_address, :name, :array, :shadow, :external, :accessibility, :uniquness_validator]
13
+ enable :register , [:offset_address, :name, :array, :type, :uniquness_validator]
14
+ enable :register , :type, [:indirect, :external]
14
15
  enable :bit_field , [:bit_assignment, :name, :type, :initial_value, :reference]
15
16
  enable :bit_field , :type, [:rw, :ro, :w0c, :w1c, :w0s, :w1s, :rwl, :rwe, :foo, :reserved]
16
17
  enable :register_block, [:top_module, :clock_reset, :host_if, :response_mux, :irq_controller]
17
18
  enable :register_block, :host_if, [:apb, :bar]
18
19
  enable :register , [:address_decoder, :read_data, :bus_exporter]
19
20
  enable :register_block, [:ral_package, :block_model, :constructor, :sub_model_creator, :default_map_creator]
20
- enable :register , [:reg_model, :constructor, :field_model_creator, :shadow_index_configurator, :sub_block_model]
21
+ enable :register , [:reg_model, :constructor, :field_model_creator, :indirect_index_configurator, :sub_block_model]
21
22
  enable :bit_field , :field_model
23
+ enable :register_block, [:c_header_file, :address_struct]
data/setup/default.rb CHANGED
@@ -1,11 +1,13 @@
1
1
  enable :global , [:data_width, :address_width]
2
2
  enable :register_block, [:name, :byte_size]
3
- enable :register , [:offset_address, :name, :array, :shadow, :external, :accessibility, :uniquness_validator]
3
+ enable :register , [:offset_address, :name, :array, :type, :uniquness_validator]
4
+ enable :register , :type, [:indirect, :external]
4
5
  enable :bit_field , [:bit_assignment, :name, :type, :initial_value, :reference]
5
6
  enable :bit_field , :type, [:rw, :ro, :w0c, :w1c, :w0s, :w1s, :rwl, :rwe, :reserved]
6
7
  enable :register_block, [:top_module, :clock_reset, :host_if, :response_mux, :irq_controller]
7
8
  enable :register_block, :host_if, [:apb, :axi4lite]
8
9
  enable :register , [:address_decoder, :read_data, :bus_exporter]
9
10
  enable :register_block, [:ral_package, :block_model, :constructor, :sub_model_creator, :default_map_creator]
10
- enable :register , [:reg_model, :constructor, :field_model_creator, :shadow_index_configurator, :sub_block_model]
11
+ enable :register , [:reg_model, :constructor, :field_model_creator, :indirect_index_configurator, :sub_block_model]
11
12
  enable :bit_field , :field_model
13
+ enable :register_block, [:c_header_file, :address_struct]