rggen 0.4.2 → 0.4.3
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.
- checksums.yaml +4 -4
- data/README.md +1 -0
- data/lib/rggen.rb +1 -0
- data/lib/rggen/builtins/bit_field/reference.rb +1 -3
- data/lib/rggen/builtins/bit_field/rwl_rwe.rb +1 -3
- data/lib/rggen/builtins/bit_field/w0c_w1c.erb +6 -5
- data/lib/rggen/builtins/bit_field/w0c_w1c.rb +1 -1
- data/lib/rggen/builtins/bit_field/w0s_w1s.erb +6 -5
- data/lib/rggen/builtins/bit_field/w0s_w1s.rb +1 -1
- data/lib/rggen/builtins/register/address_decoder.erb +0 -2
- data/lib/rggen/builtins/register/address_decoder.rb +3 -5
- data/lib/rggen/builtins/register/read_data.rb +1 -1
- data/lib/rggen/builtins/register/reg_model.rb +1 -2
- data/lib/rggen/builtins/register/shadow.rb +3 -3
- data/lib/rggen/builtins/register/shadow_index_configurator.rb +1 -4
- data/lib/rggen/builtins/register_block/irq_controller.rb +3 -3
- data/lib/rggen/core_extensions/array.rb +9 -0
- data/lib/rggen/output_base/verilog_utility.rb +4 -5
- data/lib/rggen/version.rb +1 -1
- data/rtl/bit_field/rggen_bit_field_common.svh +15 -0
- data/rtl/bit_field/rggen_bit_field_rw.sv +5 -6
- data/rtl/bit_field/rggen_bit_field_rwl_rwe.sv +24 -5
- data/rtl/bit_field/rggen_bit_field_w01s_w01c.sv +67 -0
- data/rtl/compile.f +1 -0
- data/rtl/register/rggen_address_decoder.sv +0 -2
- data/sample/sample_0.sv +24 -40
- data/sample/sample_1.sv +0 -6
- metadata +5 -4
- data/rtl/bit_field/rggen_bit_field_w0c_w1c.sv +0 -36
- data/rtl/bit_field/rggen_bit_field_w0s_w1s.sv +0 -36
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1ba0218ce7f598b273e2c24a9ddfb965b53cfbb0
|
4
|
+
data.tar.gz: 8f8595953d40b2818c11535f6d17e181c64ee37d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6cd72549ff84a9901c866890b6d685fbc528619e898fb012043e71dc7b3dc9a45c36e332ccfb29790c005caa928294c45ee6c0649f5c477425694163793510ae
|
7
|
+
data.tar.gz: 53d5e50d624edc590be59916889603e12552a2ffc876d80b6780616cdb1278ca70d2ba0910520735e82cd11b077f599b96870b1732daf44baeac24d5ada1e591
|
data/README.md
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
[](https://badge.fury.io/rb/rggen)
|
2
2
|
[](https://travis-ci.org/taichi-ishitani/rggen)
|
3
|
+
[](https://dependencyci.com/github/taichi-ishitani/rggen)
|
3
4
|
[](https://codeclimate.com/github/taichi-ishitani/rggen)
|
4
5
|
[](https://codeclimate.com/github/taichi-ishitani/rggen/coverage)
|
5
6
|
[](https://gitter.im/taichi-ishitani/rggen?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
data/lib/rggen.rb
CHANGED
@@ -10,6 +10,7 @@ module RgGen
|
|
10
10
|
|
11
11
|
require_relative 'rggen/exceptions'
|
12
12
|
|
13
|
+
require_relative 'rggen/core_extensions/array'
|
13
14
|
require_relative 'rggen/core_extensions/facets'
|
14
15
|
require_relative 'rggen/core_extensions/forwardable'
|
15
16
|
require_relative 'rggen/core_extensions/integer'
|
@@ -34,9 +34,7 @@ simple_item :bit_field, :reference do
|
|
34
34
|
|
35
35
|
def find_reference
|
36
36
|
return nil unless has_reference?
|
37
|
-
@found_reference
|
38
|
-
bit_field.name == @reference
|
39
|
-
end
|
37
|
+
@found_reference ||= register_block.bit_fields.find_by(name: @reference)
|
40
38
|
end
|
41
39
|
end
|
42
40
|
end
|
@@ -1,11 +1,12 @@
|
|
1
|
-
|
2
|
-
.WIDTH
|
3
|
-
.INITIAL_VALUE
|
4
|
-
.
|
1
|
+
rggen_bit_field_w01s_w01c #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>),
|
4
|
+
.SET_MODE (0),
|
5
|
+
.SET_CLEAR_VALUE (<%= clear_value %>)
|
5
6
|
) u_<%= name%> (
|
6
7
|
.clk (<%= register_block.clock %>),
|
7
8
|
.rst_n (<%= register_block.reset %>),
|
8
|
-
.
|
9
|
+
.i_set_or_clear (<%= set[loop_variables] %>),
|
9
10
|
.i_command_valid (<%= register_block.host_if.command_valid %>),
|
10
11
|
.i_select (<%= register_block.register_select[index] %>),
|
11
12
|
.i_write (<%= register_block.host_if.write %>),
|
@@ -1,11 +1,12 @@
|
|
1
|
-
|
2
|
-
.WIDTH
|
3
|
-
.INITIAL_VALUE
|
4
|
-
.
|
1
|
+
rggen_bit_field_w01s_w01c #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>),
|
4
|
+
.SET_MODE (1),
|
5
|
+
.SET_CLEAR_VALUE (<%= set_value %>)
|
5
6
|
) u_<%= name %> (
|
6
7
|
.clk (<%= register_block.clock %>),
|
7
8
|
.rst_n (<%= register_block.reset %>),
|
8
|
-
.
|
9
|
+
.i_set_or_clear (<%= clear[loop_variables] %>),
|
9
10
|
.i_command_valid (<%= register_block.host_if.command_valid %>),
|
10
11
|
.i_select (<%= register_block.register_select[index] %>),
|
11
12
|
.i_write (<%= register_block.host_if.write %>),
|
@@ -6,8 +6,6 @@ rggen_address_decoder #(
|
|
6
6
|
.SHADOW_INDEX_WIDTH (<%= shadow_index_width %>),
|
7
7
|
.SHADOW_INDEX_VALUE (<%= shadow_index_value %>)
|
8
8
|
) u_<%= register.name%>_address_decoder (
|
9
|
-
.i_read (<%= register_block.host_if.read %>),
|
10
|
-
.i_write (<%= register_block.host_if.write %>),
|
11
9
|
.i_address (<%= register_block.host_if.address[local_address_width - 1, address_lsb] %>),
|
12
10
|
.i_shadow_index (<%= (shadow? && shadow_index[loop_variables]) || shadow_index_value %>),
|
13
11
|
.o_select (<%= register_block.register_select[register.index] %>)
|
@@ -43,7 +43,7 @@ simple_item :register, :address_decoder do
|
|
43
43
|
def shadow_index_assignment
|
44
44
|
assign(
|
45
45
|
shadow_index[register.loop_variables],
|
46
|
-
concat(
|
46
|
+
concat(shadow_index_fields.map(&:value))
|
47
47
|
)
|
48
48
|
end
|
49
49
|
|
@@ -58,14 +58,12 @@ simple_item :register, :address_decoder do
|
|
58
58
|
|
59
59
|
def shadow_index_value
|
60
60
|
return hex(0, 1) unless shadow?
|
61
|
-
concat(
|
61
|
+
concat(shadow_index_values)
|
62
62
|
end
|
63
63
|
|
64
64
|
def shadow_index_fields
|
65
65
|
@shadow_index_fields ||= shadow_indexes.map do |index|
|
66
|
-
register_block.bit_fields.
|
67
|
-
bit_field.name == index.name
|
68
|
-
end
|
66
|
+
register_block.bit_fields.find_by(name: index.name)
|
69
67
|
end
|
70
68
|
end
|
71
69
|
|
@@ -121,9 +121,9 @@ simple_item :register, :shadow do
|
|
121
121
|
|
122
122
|
def shadow_index_bit_field
|
123
123
|
@shadow_index_bit_field ||= Hash.new do |hash, index_name|
|
124
|
-
hash[index_name] = register_block.bit_fields.
|
125
|
-
|
126
|
-
|
124
|
+
hash[index_name] = register_block.bit_fields.find_by(
|
125
|
+
name: index_name, reserved?: false
|
126
|
+
)
|
127
127
|
end
|
128
128
|
end
|
129
129
|
end
|
@@ -33,10 +33,7 @@ simple_item :register, :shadow_index_configurator do
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def fild_parent_register(index_name)
|
36
|
-
|
37
|
-
bit_field.name == index_name
|
38
|
-
end
|
39
|
-
index_field.register
|
36
|
+
register_block.bit_fields.find_by(name: index_name).register
|
40
37
|
end
|
41
38
|
|
42
39
|
def index_name(shadow_index)
|
@@ -20,11 +20,11 @@ simple_item :register_block, :irq_controller do
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def assign_ier
|
23
|
-
assign(ier, concat(
|
23
|
+
assign(ier, concat(ier_fields.map(&:value)))
|
24
24
|
end
|
25
25
|
|
26
26
|
def assign_isr
|
27
|
-
assign(isr, concat(
|
27
|
+
assign(isr, concat(isr_fields.map(&:value)))
|
28
28
|
end
|
29
29
|
|
30
30
|
def isr_fields
|
@@ -38,7 +38,7 @@ simple_item :register_block, :irq_controller do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
def find_ier_field(reference)
|
41
|
-
register_block.bit_fields.
|
41
|
+
register_block.bit_fields.find_by(name: reference.name)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
@@ -40,13 +40,12 @@ module RgGen
|
|
40
40
|
"#{subroutine}(#{Array(arguments).join(', ')})"
|
41
41
|
end
|
42
42
|
|
43
|
-
def concat(
|
44
|
-
|
45
|
-
"{#{expressions.join(', ')}}"
|
43
|
+
def concat(expression_or_expressions)
|
44
|
+
"{#{Array(expression_or_expressions).join(', ')}}"
|
46
45
|
end
|
47
46
|
|
48
|
-
def array(
|
49
|
-
"'#{concat(
|
47
|
+
def array(expression_or_expressions)
|
48
|
+
"'#{concat(expression_or_expressions)}"
|
50
49
|
end
|
51
50
|
|
52
51
|
def string(expression)
|
data/lib/rggen/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
function automatic logic is_write_access(
|
2
|
+
input command_valid,
|
3
|
+
input select,
|
4
|
+
input write
|
5
|
+
);
|
6
|
+
return (command_valid && select && write) ? 1'b1 : 1'b0;
|
7
|
+
endfunction
|
8
|
+
|
9
|
+
function automatic logic [WIDTH-1:0] get_write_data(
|
10
|
+
input [WIDTH-1:0] current_data,
|
11
|
+
input [WIDTH-1:0] write_data,
|
12
|
+
input [WIDTH-1:0] write_mask
|
13
|
+
);
|
14
|
+
return (current_data & (~write_mask)) | (write_data & write_mask);
|
15
|
+
endfunction
|
@@ -11,18 +11,17 @@ module rggen_bit_field_rw #(
|
|
11
11
|
input [WIDTH-1:0] i_write_mask,
|
12
12
|
output [WIDTH-1:0] o_value
|
13
13
|
);
|
14
|
-
|
14
|
+
`include "rggen_bit_field_common.svh"
|
15
|
+
|
15
16
|
logic [WIDTH-1:0] value;
|
16
17
|
|
17
|
-
assign o_value
|
18
|
-
assign write_data = (i_write_data & ( i_write_mask))
|
19
|
-
| (value & (~i_write_mask));
|
18
|
+
assign o_value = value;
|
20
19
|
always_ff @(posedge clk or negedge rst_n) begin
|
21
20
|
if (!rst_n) begin
|
22
21
|
value <= INITIAL_VALUE;
|
23
22
|
end
|
24
|
-
else if (i_command_valid
|
25
|
-
value <=
|
23
|
+
else if (is_write_access(i_command_valid, i_select, i_write)) begin
|
24
|
+
value <= get_write_data(value, i_write_data, i_write_mask);
|
26
25
|
end
|
27
26
|
end
|
28
27
|
endmodule
|
@@ -13,18 +13,37 @@ module rggen_bit_field_rwl_rwe #(
|
|
13
13
|
input [WIDTH-1:0] i_write_mask,
|
14
14
|
output [WIDTH-1:0] o_value
|
15
15
|
);
|
16
|
+
`include "rggen_bit_field_common.svh"
|
17
|
+
|
16
18
|
logic [WIDTH-1:0] value;
|
17
|
-
logic writable;
|
18
19
|
|
19
20
|
assign o_value = value;
|
20
|
-
assign writable = (LOCK_MODE) ? !i_lock_or_enable : i_lock_or_enable;
|
21
21
|
always_ff @(posedge clk or negedge rst_n) begin
|
22
22
|
if (!rst_n) begin
|
23
23
|
value <= INITIAL_VALUE;
|
24
24
|
end
|
25
|
-
else if (
|
26
|
-
|
27
|
-
|
25
|
+
else if (
|
26
|
+
can_write(i_lock_or_enable, i_command_valid, i_select, i_write)
|
27
|
+
) begin
|
28
|
+
value <= get_write_data(value, i_write_data, i_write_mask);
|
28
29
|
end
|
29
30
|
end
|
31
|
+
|
32
|
+
function automatic logic can_write(
|
33
|
+
input lock_or_enable,
|
34
|
+
input command_valid,
|
35
|
+
input select,
|
36
|
+
input write
|
37
|
+
);
|
38
|
+
if (LOCK_MODE) begin
|
39
|
+
return (
|
40
|
+
(!lock_or_enable) && is_write_access(command_valid, select, write)
|
41
|
+
) ? 1'b1 : 1'b0;
|
42
|
+
end
|
43
|
+
else begin
|
44
|
+
return (
|
45
|
+
lock_or_enable && is_write_access(command_valid, select, write)
|
46
|
+
) ? 1'b1 : 1'b0;
|
47
|
+
end
|
48
|
+
endfunction
|
30
49
|
endmodule
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module rggen_bit_field_w01s_w01c #(
|
2
|
+
parameter WIDTH = 1,
|
3
|
+
parameter INITIAL_VALUE = 0,
|
4
|
+
parameter SET_MODE = 1,
|
5
|
+
parameter SET_CLEAR_VALUE = 0
|
6
|
+
)(
|
7
|
+
input clk,
|
8
|
+
input rst_n,
|
9
|
+
input [WIDTH-1:0] i_set_or_clear,
|
10
|
+
input i_command_valid,
|
11
|
+
input i_select,
|
12
|
+
input i_write,
|
13
|
+
input [WIDTH-1:0] i_write_data,
|
14
|
+
input [WIDTH-1:0] i_write_mask,
|
15
|
+
output [WIDTH-1:0] o_value
|
16
|
+
);
|
17
|
+
`include "rggen_bit_field_common.svh"
|
18
|
+
|
19
|
+
logic [WIDTH-1:0] value;
|
20
|
+
|
21
|
+
assign o_value = value;
|
22
|
+
always_ff @(posedge clk or negedge rst_n) begin
|
23
|
+
if (!rst_n) begin
|
24
|
+
value <= INITIAL_VALUE;
|
25
|
+
end
|
26
|
+
else begin
|
27
|
+
value <= get_next_value(
|
28
|
+
i_set_or_clear,
|
29
|
+
value,
|
30
|
+
i_command_valid,
|
31
|
+
i_select,
|
32
|
+
i_write,
|
33
|
+
i_write_mask,
|
34
|
+
i_write_data
|
35
|
+
);
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
function automatic logic [WIDTH-1:0] get_next_value(
|
40
|
+
input [WIDTH-1:0] set_or_clear,
|
41
|
+
input [WIDTH-1:0] current_value,
|
42
|
+
input command_valid,
|
43
|
+
input select,
|
44
|
+
input write,
|
45
|
+
input [WIDTH-1:0] write_mask,
|
46
|
+
input [WIDTH-1:0] write_data
|
47
|
+
);
|
48
|
+
logic [WIDTH-1:0] control_value;
|
49
|
+
logic [WIDTH-1:0] set;
|
50
|
+
logic [WIDTH-1:0] clear;
|
51
|
+
if (is_write_access(command_valid, select, write)) begin
|
52
|
+
control_value = write_mask & ((SET_CLEAR_VALUE) ? write_data : ~write_data);
|
53
|
+
end
|
54
|
+
else begin
|
55
|
+
control_value = '0;
|
56
|
+
end
|
57
|
+
if (SET_MODE) begin
|
58
|
+
set = control_value;
|
59
|
+
clear = set_or_clear;
|
60
|
+
end
|
61
|
+
else begin
|
62
|
+
set = set_or_clear;
|
63
|
+
clear = control_value;
|
64
|
+
end
|
65
|
+
return set | (current_value & (~clear));
|
66
|
+
endfunction
|
67
|
+
endmodule
|
data/rtl/compile.f
CHANGED
data/sample/sample_0.sv
CHANGED
@@ -139,8 +139,6 @@ module sample_0 (
|
|
139
139
|
.SHADOW_INDEX_WIDTH (1),
|
140
140
|
.SHADOW_INDEX_VALUE (1'h0)
|
141
141
|
) u_register_0_address_decoder (
|
142
|
-
.i_read (read),
|
143
|
-
.i_write (write),
|
144
142
|
.i_address (address[7:2]),
|
145
143
|
.i_shadow_index (1'h0),
|
146
144
|
.o_select (register_select[0])
|
@@ -182,8 +180,6 @@ module sample_0 (
|
|
182
180
|
.SHADOW_INDEX_WIDTH (1),
|
183
181
|
.SHADOW_INDEX_VALUE (1'h0)
|
184
182
|
) u_register_1_address_decoder (
|
185
|
-
.i_read (read),
|
186
|
-
.i_write (write),
|
187
183
|
.i_address (address[7:2]),
|
188
184
|
.i_shadow_index (1'h0),
|
189
185
|
.o_select (register_select[1])
|
@@ -211,8 +207,6 @@ module sample_0 (
|
|
211
207
|
.SHADOW_INDEX_WIDTH (1),
|
212
208
|
.SHADOW_INDEX_VALUE (1'h0)
|
213
209
|
) u_register_2_address_decoder (
|
214
|
-
.i_read (read),
|
215
|
-
.i_write (write),
|
216
210
|
.i_address (address[7:2]),
|
217
211
|
.i_shadow_index (1'h0),
|
218
212
|
.o_select (register_select[2])
|
@@ -246,8 +240,6 @@ module sample_0 (
|
|
246
240
|
.SHADOW_INDEX_WIDTH (1),
|
247
241
|
.SHADOW_INDEX_VALUE (1'h0)
|
248
242
|
) u_register_3_address_decoder (
|
249
|
-
.i_read (read),
|
250
|
-
.i_write (write),
|
251
243
|
.i_address (address[7:2]),
|
252
244
|
.i_shadow_index (1'h0),
|
253
245
|
.o_select (register_select[3])
|
@@ -270,8 +262,6 @@ module sample_0 (
|
|
270
262
|
.SHADOW_INDEX_WIDTH (1),
|
271
263
|
.SHADOW_INDEX_VALUE (1'h0)
|
272
264
|
) u_register_4_address_decoder (
|
273
|
-
.i_read (read),
|
274
|
-
.i_write (write),
|
275
265
|
.i_address (address[7:2]),
|
276
266
|
.i_shadow_index (1'h0),
|
277
267
|
.o_select (register_select[4+g_i])
|
@@ -312,8 +302,6 @@ module sample_0 (
|
|
312
302
|
.SHADOW_INDEX_WIDTH (33),
|
313
303
|
.SHADOW_INDEX_VALUE ({1'h1, g_i[15:0], g_j[15:0]})
|
314
304
|
) u_register_5_address_decoder (
|
315
|
-
.i_read (read),
|
316
|
-
.i_write (write),
|
317
305
|
.i_address (address[7:2]),
|
318
306
|
.i_shadow_index (register_5_shadow_index[g_i][g_j]),
|
319
307
|
.o_select (register_select[8+4*g_i+g_j])
|
@@ -350,21 +338,20 @@ module sample_0 (
|
|
350
338
|
.SHADOW_INDEX_WIDTH (1),
|
351
339
|
.SHADOW_INDEX_VALUE (1'h0)
|
352
340
|
) u_register_6_address_decoder (
|
353
|
-
.i_read (read),
|
354
|
-
.i_write (write),
|
355
341
|
.i_address (address[7:2]),
|
356
342
|
.i_shadow_index (1'h0),
|
357
343
|
.o_select (register_select[16])
|
358
344
|
);
|
359
345
|
assign register_read_data[16] = {23'h000000, bit_field_6_0_value, 7'h00, bit_field_6_1_value};
|
360
|
-
|
361
|
-
.WIDTH
|
362
|
-
.INITIAL_VALUE
|
363
|
-
.
|
346
|
+
rggen_bit_field_w01s_w01c #(
|
347
|
+
.WIDTH (1),
|
348
|
+
.INITIAL_VALUE (1'h0),
|
349
|
+
.SET_MODE (0),
|
350
|
+
.SET_CLEAR_VALUE (0)
|
364
351
|
) u_bit_field_6_0 (
|
365
352
|
.clk (clk),
|
366
353
|
.rst_n (rst_n),
|
367
|
-
.
|
354
|
+
.i_set_or_clear (i_bit_field_6_0_set),
|
368
355
|
.i_command_valid (command_valid),
|
369
356
|
.i_select (register_select[16]),
|
370
357
|
.i_write (write),
|
@@ -372,14 +359,15 @@ module sample_0 (
|
|
372
359
|
.i_write_mask (write_mask[8]),
|
373
360
|
.o_value (bit_field_6_0_value)
|
374
361
|
);
|
375
|
-
|
376
|
-
.WIDTH
|
377
|
-
.INITIAL_VALUE
|
378
|
-
.
|
362
|
+
rggen_bit_field_w01s_w01c #(
|
363
|
+
.WIDTH (1),
|
364
|
+
.INITIAL_VALUE (1'h0),
|
365
|
+
.SET_MODE (0),
|
366
|
+
.SET_CLEAR_VALUE (1)
|
379
367
|
) u_bit_field_6_1 (
|
380
368
|
.clk (clk),
|
381
369
|
.rst_n (rst_n),
|
382
|
-
.
|
370
|
+
.i_set_or_clear (i_bit_field_6_1_set),
|
383
371
|
.i_command_valid (command_valid),
|
384
372
|
.i_select (register_select[16]),
|
385
373
|
.i_write (write),
|
@@ -395,22 +383,21 @@ module sample_0 (
|
|
395
383
|
.SHADOW_INDEX_WIDTH (1),
|
396
384
|
.SHADOW_INDEX_VALUE (1'h0)
|
397
385
|
) u_register_7_address_decoder (
|
398
|
-
.i_read (read),
|
399
|
-
.i_write (write),
|
400
386
|
.i_address (address[7:2]),
|
401
387
|
.i_shadow_index (1'h0),
|
402
388
|
.o_select (register_select[17])
|
403
389
|
);
|
404
390
|
assign register_read_data[17] = {23'h000000, bit_field_7_0_value, 7'h00, bit_field_7_1_value};
|
405
391
|
assign o_bit_field_7_0 = bit_field_7_0_value;
|
406
|
-
|
407
|
-
.WIDTH
|
408
|
-
.INITIAL_VALUE
|
409
|
-
.
|
392
|
+
rggen_bit_field_w01s_w01c #(
|
393
|
+
.WIDTH (1),
|
394
|
+
.INITIAL_VALUE (1'h0),
|
395
|
+
.SET_MODE (1),
|
396
|
+
.SET_CLEAR_VALUE (0)
|
410
397
|
) u_bit_field_7_0 (
|
411
398
|
.clk (clk),
|
412
399
|
.rst_n (rst_n),
|
413
|
-
.
|
400
|
+
.i_set_or_clear (i_bit_field_7_0_clear),
|
414
401
|
.i_command_valid (command_valid),
|
415
402
|
.i_select (register_select[17]),
|
416
403
|
.i_write (write),
|
@@ -419,14 +406,15 @@ module sample_0 (
|
|
419
406
|
.o_value (bit_field_7_0_value)
|
420
407
|
);
|
421
408
|
assign o_bit_field_7_1 = bit_field_7_1_value;
|
422
|
-
|
423
|
-
.WIDTH
|
424
|
-
.INITIAL_VALUE
|
425
|
-
.
|
409
|
+
rggen_bit_field_w01s_w01c #(
|
410
|
+
.WIDTH (1),
|
411
|
+
.INITIAL_VALUE (1'h0),
|
412
|
+
.SET_MODE (1),
|
413
|
+
.SET_CLEAR_VALUE (1)
|
426
414
|
) u_bit_field_7_1 (
|
427
415
|
.clk (clk),
|
428
416
|
.rst_n (rst_n),
|
429
|
-
.
|
417
|
+
.i_set_or_clear (i_bit_field_7_1_clear),
|
430
418
|
.i_command_valid (command_valid),
|
431
419
|
.i_select (register_select[17]),
|
432
420
|
.i_write (write),
|
@@ -442,8 +430,6 @@ module sample_0 (
|
|
442
430
|
.SHADOW_INDEX_WIDTH (1),
|
443
431
|
.SHADOW_INDEX_VALUE (1'h0)
|
444
432
|
) u_register_8_address_decoder (
|
445
|
-
.i_read (read),
|
446
|
-
.i_write (write),
|
447
433
|
.i_address (address[7:2]),
|
448
434
|
.i_shadow_index (1'h0),
|
449
435
|
.o_select (register_select[18])
|
@@ -489,8 +475,6 @@ module sample_0 (
|
|
489
475
|
.SHADOW_INDEX_WIDTH (1),
|
490
476
|
.SHADOW_INDEX_VALUE (1'h0)
|
491
477
|
) u_register_9_address_decoder (
|
492
|
-
.i_read (read),
|
493
|
-
.i_write (write),
|
494
478
|
.i_address (address[7:2]),
|
495
479
|
.i_shadow_index (1'h0),
|
496
480
|
.o_select (register_select[19])
|
data/sample/sample_1.sv
CHANGED
@@ -88,8 +88,6 @@ module sample_1 (
|
|
88
88
|
.SHADOW_INDEX_WIDTH (1),
|
89
89
|
.SHADOW_INDEX_VALUE (1'h0)
|
90
90
|
) u_register_0_address_decoder (
|
91
|
-
.i_read (read),
|
92
|
-
.i_write (write),
|
93
91
|
.i_address (address[6:2]),
|
94
92
|
.i_shadow_index (1'h0),
|
95
93
|
.o_select (register_select[0])
|
@@ -123,8 +121,6 @@ module sample_1 (
|
|
123
121
|
.SHADOW_INDEX_WIDTH (1),
|
124
122
|
.SHADOW_INDEX_VALUE (1'h0)
|
125
123
|
) u_register_1_address_decoder (
|
126
|
-
.i_read (read),
|
127
|
-
.i_write (write),
|
128
124
|
.i_address (address[6:2]),
|
129
125
|
.i_shadow_index (1'h0),
|
130
126
|
.o_select (register_select[1])
|
@@ -152,8 +148,6 @@ module sample_1 (
|
|
152
148
|
.SHADOW_INDEX_WIDTH (1),
|
153
149
|
.SHADOW_INDEX_VALUE (1'h0)
|
154
150
|
) u_register_2_address_decoder (
|
155
|
-
.i_read (read),
|
156
|
-
.i_write (write),
|
157
151
|
.i_address (address[6:2]),
|
158
152
|
.i_shadow_index (1'h0),
|
159
153
|
.o_select (register_select[2])
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rggen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Taichi Ishitani
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: baby_erubis
|
@@ -227,6 +227,7 @@ files:
|
|
227
227
|
- lib/rggen/core_components/rtl/component.rb
|
228
228
|
- lib/rggen/core_components/rtl/item.rb
|
229
229
|
- lib/rggen/core_components/rtl/setup.rb
|
230
|
+
- lib/rggen/core_extensions/array.rb
|
230
231
|
- lib/rggen/core_extensions/facets.rb
|
231
232
|
- lib/rggen/core_extensions/forwardable.rb
|
232
233
|
- lib/rggen/core_extensions/integer.rb
|
@@ -265,11 +266,11 @@ files:
|
|
265
266
|
- ral/rggen_ral_pkg.sv
|
266
267
|
- ral/rggen_ral_reg.svh
|
267
268
|
- ral/rggen_ral_shadow_reg.svh
|
269
|
+
- rtl/bit_field/rggen_bit_field_common.svh
|
268
270
|
- rtl/bit_field/rggen_bit_field_ro.sv
|
269
271
|
- rtl/bit_field/rggen_bit_field_rw.sv
|
270
272
|
- rtl/bit_field/rggen_bit_field_rwl_rwe.sv
|
271
|
-
- rtl/bit_field/
|
272
|
-
- rtl/bit_field/rggen_bit_field_w0s_w1s.sv
|
273
|
+
- rtl/bit_field/rggen_bit_field_w01s_w01c.sv
|
273
274
|
- rtl/compile.f
|
274
275
|
- rtl/register/rggen_address_decoder.sv
|
275
276
|
- rtl/register/rggen_bus_exporter.sv
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module rggen_bit_field_w0c_w1c #(
|
2
|
-
parameter WIDTH = 1,
|
3
|
-
parameter INITIAL_VALUE = 1'b0,
|
4
|
-
parameter CLEAR_VALUE = 1'b0
|
5
|
-
)(
|
6
|
-
input clk,
|
7
|
-
input rst_n,
|
8
|
-
input [WIDTH-1:0] i_set,
|
9
|
-
input i_command_valid,
|
10
|
-
input i_select,
|
11
|
-
input i_write,
|
12
|
-
input [WIDTH-1:0] i_write_data,
|
13
|
-
input [WIDTH-1:0] i_write_mask,
|
14
|
-
output [WIDTH-1:0] o_value
|
15
|
-
);
|
16
|
-
logic [WIDTH-1:0] value;
|
17
|
-
logic write_valid;
|
18
|
-
|
19
|
-
assign o_value = value;
|
20
|
-
assign write_valid = (i_command_valid && i_select && i_write) ? 1'b1 : 1'b0;
|
21
|
-
always_ff @(posedge clk or negedge rst_n) begin
|
22
|
-
if (!rst_n) begin
|
23
|
-
value <= INITIAL_VALUE;
|
24
|
-
end
|
25
|
-
else begin
|
26
|
-
for (int i = 0;i < WIDTH;i++) begin
|
27
|
-
if (i_set[i]) begin
|
28
|
-
value[i] <= 1'b1;
|
29
|
-
end
|
30
|
-
else if (write_valid && i_write_mask[i] && (i_write_data[i] == CLEAR_VALUE)) begin
|
31
|
-
value[i] <= 1'b0;
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
endmodule
|
@@ -1,36 +0,0 @@
|
|
1
|
-
module rggen_bit_field_w0s_w1s #(
|
2
|
-
parameter WIDTH = 1,
|
3
|
-
parameter INITIAL_VALUE = 1'b0,
|
4
|
-
parameter SET_VALUE = 1'b0
|
5
|
-
)(
|
6
|
-
input clk,
|
7
|
-
input rst_n,
|
8
|
-
input [WIDTH-1:0] i_clear,
|
9
|
-
input i_command_valid,
|
10
|
-
input i_select,
|
11
|
-
input i_write,
|
12
|
-
input [WIDTH-1:0] i_write_data,
|
13
|
-
input [WIDTH-1:0] i_write_mask,
|
14
|
-
output [WIDTH-1:0] o_value
|
15
|
-
);
|
16
|
-
logic [WIDTH-1:0] value;
|
17
|
-
logic write_valid;
|
18
|
-
|
19
|
-
assign o_value = value;
|
20
|
-
assign write_valid = (i_command_valid && i_select && i_write) ? 1'b1 : 1'b0;
|
21
|
-
always_ff @(posedge clk or negedge rst_n) begin
|
22
|
-
if (!rst_n) begin
|
23
|
-
value <= INITIAL_VALUE;
|
24
|
-
end
|
25
|
-
else begin
|
26
|
-
for (int i = 0;i < WIDTH;i++) begin
|
27
|
-
if (write_valid && i_write_mask[i] && (i_write_data[i] == SET_VALUE)) begin
|
28
|
-
value[i] <= 1'b1;
|
29
|
-
end
|
30
|
-
else if (i_clear[i]) begin
|
31
|
-
value[i] <= 1'b0;
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
endmodule
|