rggen 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rubocop.yml +7 -0
- data/.rubocop_todo.yml +91 -0
- data/CODE_OF_CONDUCT.md +49 -0
- data/LICENSE.txt +21 -0
- data/README.md +31 -0
- data/bin/rggen +6 -0
- data/lib/rggen/base/component.rb +27 -0
- data/lib/rggen/base/component_factory.rb +46 -0
- data/lib/rggen/base/hierarchical_accessors.rb +87 -0
- data/lib/rggen/base/hierarchical_item_accessors.rb +79 -0
- data/lib/rggen/base/item.rb +24 -0
- data/lib/rggen/base/item_factory.rb +20 -0
- data/lib/rggen/builder/builder.rb +69 -0
- data/lib/rggen/builder/category.rb +52 -0
- data/lib/rggen/builder/component_entry.rb +50 -0
- data/lib/rggen/builder/component_store.rb +42 -0
- data/lib/rggen/builder/input_component_store.rb +25 -0
- data/lib/rggen/builder/item_store.rb +89 -0
- data/lib/rggen/builder/list_item_entry.rb +81 -0
- data/lib/rggen/builder/output_component_store.rb +13 -0
- data/lib/rggen/builder/simple_item_entry.rb +33 -0
- data/lib/rggen/builtins/bit_field/bit_assignment.rb +39 -0
- data/lib/rggen/builtins/bit_field/field_model_creation.rb +25 -0
- data/lib/rggen/builtins/bit_field/field_model_declaration.rb +9 -0
- data/lib/rggen/builtins/bit_field/initial_value.rb +36 -0
- data/lib/rggen/builtins/bit_field/name.rb +26 -0
- data/lib/rggen/builtins/bit_field/reference.rb +42 -0
- data/lib/rggen/builtins/bit_field/reserved.rb +9 -0
- data/lib/rggen/builtins/bit_field/ro.rb +19 -0
- data/lib/rggen/builtins/bit_field/rw.erb +13 -0
- data/lib/rggen/builtins/bit_field/rw.rb +25 -0
- data/lib/rggen/builtins/bit_field/type.rb +205 -0
- data/lib/rggen/builtins/bit_field/wo.rb +5 -0
- data/lib/rggen/builtins/global/address_width.rb +17 -0
- data/lib/rggen/builtins/global/data_width.rb +20 -0
- data/lib/rggen/builtins/loaders/configuration/json_loader.rb +7 -0
- data/lib/rggen/builtins/loaders/configuration/yaml_loader.rb +7 -0
- data/lib/rggen/builtins/loaders/register_map/csv_loader.rb +14 -0
- data/lib/rggen/builtins/loaders/register_map/xls_loader.rb +19 -0
- data/lib/rggen/builtins/loaders/register_map/xlsx_ods_loader.rb +24 -0
- data/lib/rggen/builtins/register/accessibility.rb +23 -0
- data/lib/rggen/builtins/register/address_decoder.erb +16 -0
- data/lib/rggen/builtins/register/address_decoder.rb +92 -0
- data/lib/rggen/builtins/register/array.rb +133 -0
- data/lib/rggen/builtins/register/field_model_creator.rb +10 -0
- data/lib/rggen/builtins/register/field_model_declarations.rb +7 -0
- data/lib/rggen/builtins/register/name.rb +26 -0
- data/lib/rggen/builtins/register/offset_address.rb +55 -0
- data/lib/rggen/builtins/register/read_data.rb +36 -0
- data/lib/rggen/builtins/register/reg_model_constructor.rb +17 -0
- data/lib/rggen/builtins/register/reg_model_creation.rb +64 -0
- data/lib/rggen/builtins/register/reg_model_declaration.rb +13 -0
- data/lib/rggen/builtins/register/reg_model_definition.rb +22 -0
- data/lib/rggen/builtins/register/shadow.rb +130 -0
- data/lib/rggen/builtins/register/shadow_index_configurator.rb +53 -0
- data/lib/rggen/builtins/register/uniqueness_validator.rb +48 -0
- data/lib/rggen/builtins/register_block/apb.erb +27 -0
- data/lib/rggen/builtins/register_block/apb.rb +20 -0
- data/lib/rggen/builtins/register_block/base_address.rb +64 -0
- data/lib/rggen/builtins/register_block/block_model_constructor.rb +14 -0
- data/lib/rggen/builtins/register_block/block_model_default_map_creator.rb +39 -0
- data/lib/rggen/builtins/register_block/block_model_definition.rb +18 -0
- data/lib/rggen/builtins/register_block/byte_size.rb +37 -0
- data/lib/rggen/builtins/register_block/clock_reset.rb +8 -0
- data/lib/rggen/builtins/register_block/host_if.rb +46 -0
- data/lib/rggen/builtins/register_block/module_definition.rb +13 -0
- data/lib/rggen/builtins/register_block/name.rb +26 -0
- data/lib/rggen/builtins/register_block/ral_package_definition.rb +19 -0
- data/lib/rggen/builtins/register_block/reg_model_creator.rb +14 -0
- data/lib/rggen/builtins/register_block/reg_model_declarations.rb +7 -0
- data/lib/rggen/builtins/register_block/response_mux.erb +14 -0
- data/lib/rggen/builtins/register_block/response_mux.rb +16 -0
- data/lib/rggen/builtins/register_block/signal_declarations.rb +9 -0
- data/lib/rggen/builtins.rb +52 -0
- data/lib/rggen/commands.rb +23 -0
- data/lib/rggen/core_components/configuration/configuration_factory.rb +23 -0
- data/lib/rggen/core_components/configuration/item_factory.rb +13 -0
- data/lib/rggen/core_components/configuration/raise_error.rb +11 -0
- data/lib/rggen/core_components/configuration/setup.rb +14 -0
- data/lib/rggen/core_components/ral/item.rb +16 -0
- data/lib/rggen/core_components/ral/setup.rb +19 -0
- data/lib/rggen/core_components/register_map/bit_field_factory.rb +11 -0
- data/lib/rggen/core_components/register_map/component.rb +12 -0
- data/lib/rggen/core_components/register_map/generic_map.rb +69 -0
- data/lib/rggen/core_components/register_map/item.rb +22 -0
- data/lib/rggen/core_components/register_map/item_factory.rb +13 -0
- data/lib/rggen/core_components/register_map/loader.rb +13 -0
- data/lib/rggen/core_components/register_map/raise_error.rb +17 -0
- data/lib/rggen/core_components/register_map/register_block_factory.rb +29 -0
- data/lib/rggen/core_components/register_map/register_factory.rb +18 -0
- data/lib/rggen/core_components/register_map/register_map_factory.rb +21 -0
- data/lib/rggen/core_components/register_map/setup.rb +33 -0
- data/lib/rggen/core_components/rtl/component.rb +28 -0
- data/lib/rggen/core_components/rtl/item.rb +83 -0
- data/lib/rggen/core_components/rtl/setup.rb +19 -0
- data/lib/rggen/core_components.rb +23 -0
- data/lib/rggen/core_extensions/facets.rb +17 -0
- data/lib/rggen/core_extensions/forwardable.rb +26 -0
- data/lib/rggen/core_extensions/integer.rb +5 -0
- data/lib/rggen/core_extensions/math.rb +7 -0
- data/lib/rggen/exceptions.rb +22 -0
- data/lib/rggen/generator.rb +185 -0
- data/lib/rggen/input_base/component.rb +19 -0
- data/lib/rggen/input_base/component_factory.rb +58 -0
- data/lib/rggen/input_base/item.rb +170 -0
- data/lib/rggen/input_base/item_factory.rb +13 -0
- data/lib/rggen/input_base/loader.rb +14 -0
- data/lib/rggen/input_base/regexp_patterns.rb +29 -0
- data/lib/rggen/output_base/code_block.rb +72 -0
- data/lib/rggen/output_base/code_utility.rb +44 -0
- data/lib/rggen/output_base/component.rb +88 -0
- data/lib/rggen/output_base/component_factory.rb +32 -0
- data/lib/rggen/output_base/item.rb +175 -0
- data/lib/rggen/output_base/item_factory.rb +6 -0
- data/lib/rggen/output_base/line.rb +28 -0
- data/lib/rggen/output_base/template_utility.rb +29 -0
- data/lib/rggen/output_base/verilog_utility/class_definition.rb +23 -0
- data/lib/rggen/output_base/verilog_utility/declaration.rb +70 -0
- data/lib/rggen/output_base/verilog_utility/identifier.rb +29 -0
- data/lib/rggen/output_base/verilog_utility/module_definition.rb +47 -0
- data/lib/rggen/output_base/verilog_utility/package_definition.rb +67 -0
- data/lib/rggen/output_base/verilog_utility/structure_definition.rb +52 -0
- data/lib/rggen/output_base/verilog_utility/subroutine_definition.rb +43 -0
- data/lib/rggen/output_base/verilog_utility.rb +66 -0
- data/lib/rggen/version.rb +6 -0
- data/lib/rggen.rb +65 -0
- data/ral/compile.f +4 -0
- data/ral/rggen_ral_block.svh +84 -0
- data/ral/rggen_ral_field.svh +47 -0
- data/ral/rggen_ral_macros.svh +22 -0
- data/ral/rggen_ral_map.svh +124 -0
- data/ral/rggen_ral_pkg.sv +14 -0
- data/ral/rggen_ral_reg.svh +52 -0
- data/ral/rggen_ral_shadow_reg.svh +188 -0
- data/rggen.gemspec +45 -0
- data/rtl/bit_field/rggen_bit_field_rw.sv +28 -0
- data/rtl/register/rggen_address_decoder.sv +49 -0
- data/rtl/register_block/rggen_host_if_apb.sv +40 -0
- data/rtl/register_block/rggen_response_mux.sv +82 -0
- data/sample/sample.csv +14 -0
- data/sample/sample.json +4 -0
- data/sample/sample.xls +0 -0
- data/sample/sample.xlsx +0 -0
- data/sample/sample.yaml +2 -0
- data/sample/sample_0.sv +285 -0
- data/sample/sample_0_ral_pkg.sv +99 -0
- data/sample/sample_1.sv +172 -0
- data/sample/sample_1_ral_pkg.sv +53 -0
- data/sample/sample_setup.rb +21 -0
- data/setup/default.rb +11 -0
- metadata +296 -0
data/sample/sample_0.sv
ADDED
@@ -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
|
data/sample/sample_1.sv
ADDED
@@ -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]
|