rggen 0.3.0

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