rggen 0.12.0 → 0.13.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -2
- data/lib/rggen.rb +0 -1
- data/lib/rggen/default.rb +7 -0
- data/lib/rggen/default_setup_file.rb +1 -2
- data/lib/rggen/version.rb +1 -3
- metadata +25 -81
- data/lib/rggen/built_in.rb +0 -57
- data/lib/rggen/built_in/bit_field/bit_assignment.rb +0 -114
- data/lib/rggen/built_in/bit_field/comment.rb +0 -18
- data/lib/rggen/built_in/bit_field/initial_value.rb +0 -75
- data/lib/rggen/built_in/bit_field/name.rb +0 -41
- data/lib/rggen/built_in/bit_field/reference.rb +0 -139
- data/lib/rggen/built_in/bit_field/sv_rtl_top.rb +0 -89
- data/lib/rggen/built_in/bit_field/type.rb +0 -245
- data/lib/rggen/built_in/bit_field/type/rc_w0c_w1c.erb +0 -15
- data/lib/rggen/built_in/bit_field/type/rc_w0c_w1c.rb +0 -59
- data/lib/rggen/built_in/bit_field/type/reserved.erb +0 -3
- data/lib/rggen/built_in/bit_field/type/reserved.rb +0 -16
- data/lib/rggen/built_in/bit_field/type/ro.erb +0 -6
- data/lib/rggen/built_in/bit_field/type/ro.rb +0 -31
- data/lib/rggen/built_in/bit_field/type/rof.erb +0 -6
- data/lib/rggen/built_in/bit_field/type/rof.rb +0 -17
- data/lib/rggen/built_in/bit_field/type/rs_w0s_w1s.erb +0 -13
- data/lib/rggen/built_in/bit_field/type/rs_w0s_w1s.rb +0 -46
- data/lib/rggen/built_in/bit_field/type/rw_wo.erb +0 -9
- data/lib/rggen/built_in/bit_field/type/rw_wo.rb +0 -30
- data/lib/rggen/built_in/bit_field/type/rwc_rwe_rwl.erb +0 -16
- data/lib/rggen/built_in/bit_field/type/rwc_rwe_rwl.rb +0 -92
- data/lib/rggen/built_in/bit_field/type/w0trg_w1trg.erb +0 -9
- data/lib/rggen/built_in/bit_field/type/w0trg_w1trg.rb +0 -29
- data/lib/rggen/built_in/global/address_width.rb +0 -34
- data/lib/rggen/built_in/global/array_port_format.rb +0 -19
- data/lib/rggen/built_in/global/bus_width.rb +0 -35
- data/lib/rggen/built_in/global/fold_sv_interface_port.rb +0 -24
- data/lib/rggen/built_in/register/markdown.erb +0 -11
- data/lib/rggen/built_in/register/markdown.rb +0 -26
- data/lib/rggen/built_in/register/name.rb +0 -36
- data/lib/rggen/built_in/register/offset_address.rb +0 -106
- data/lib/rggen/built_in/register/size.rb +0 -95
- data/lib/rggen/built_in/register/sv_rtl_top.rb +0 -82
- data/lib/rggen/built_in/register/type.rb +0 -344
- data/lib/rggen/built_in/register/type/default_sv_ral.erb +0 -8
- data/lib/rggen/built_in/register/type/default_sv_rtl.erb +0 -15
- data/lib/rggen/built_in/register/type/external.erb +0 -11
- data/lib/rggen/built_in/register/type/external.rb +0 -128
- data/lib/rggen/built_in/register/type/indirect.rb +0 -327
- data/lib/rggen/built_in/register/type/indirect_sv_ral.erb +0 -13
- data/lib/rggen/built_in/register/type/indirect_sv_rtl.erb +0 -17
- data/lib/rggen/built_in/register_block/byte_size.rb +0 -61
- data/lib/rggen/built_in/register_block/markdown.erb +0 -8
- data/lib/rggen/built_in/register_block/markdown.rb +0 -36
- data/lib/rggen/built_in/register_block/name.rb +0 -38
- data/lib/rggen/built_in/register_block/protocol.rb +0 -100
- data/lib/rggen/built_in/register_block/protocol/apb.erb +0 -10
- data/lib/rggen/built_in/register_block/protocol/apb.rb +0 -89
- data/lib/rggen/built_in/register_block/protocol/axi4lite.erb +0 -11
- data/lib/rggen/built_in/register_block/protocol/axi4lite.rb +0 -125
- data/lib/rggen/built_in/register_block/sv_ral_block_model.erb +0 -11
- data/lib/rggen/built_in/register_block/sv_ral_package.rb +0 -65
- data/lib/rggen/built_in/register_block/sv_rtl_macros.erb +0 -9
- data/lib/rggen/built_in/register_block/sv_rtl_top.rb +0 -86
- data/lib/rggen/built_in/version.rb +0 -7
- data/lib/rggen/setup/default.rb +0 -30
- data/sample/block_0.md +0 -155
- data/sample/block_0.rb +0 -90
- data/sample/block_0.sv +0 -678
- data/sample/block_0.xlsx +0 -0
- data/sample/block_0.yml +0 -99
- data/sample/block_0_ral_pkg.sv +0 -184
- data/sample/block_1.md +0 -39
- data/sample/block_1.rb +0 -22
- data/sample/block_1.sv +0 -136
- data/sample/block_1.xlsx +0 -0
- data/sample/block_1.yml +0 -26
- data/sample/block_1_ral_pkg.sv +0 -68
- data/sample/config.json +0 -5
- data/sample/config.yml +0 -3
@@ -1,15 +0,0 @@
|
|
1
|
-
<%= module_name %> #(
|
2
|
-
<% if [:w0c, :w1c].include?(bit_field.type) %>
|
3
|
-
.CLEAR_VALUE (<%= clear_value %>),
|
4
|
-
<% end %>
|
5
|
-
.WIDTH (<%= width %>),
|
6
|
-
.INITIAL_VALUE (<%= initial_value %>)
|
7
|
-
) u_bit_field (
|
8
|
-
.i_clk (<%= register_block.clock %>),
|
9
|
-
.i_rst_n (<%= register_block.reset%>),
|
10
|
-
.bit_field_if (<%= bit_field_if %>),
|
11
|
-
.i_set (<%= set[loop_variables] %>),
|
12
|
-
.i_mask (<%= mask %>),
|
13
|
-
.o_value (<%= value_out[loop_variables] %>),
|
14
|
-
.o_value_unmasked (<%= value_out_unmasked %>)
|
15
|
-
);
|
@@ -1,59 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RgGen.define_list_item_feature(:bit_field, :type, :rc) do
|
4
|
-
register_map do
|
5
|
-
read_only
|
6
|
-
reference use: true
|
7
|
-
initial_value require: true
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
RgGen.define_list_item_feature(:bit_field, :type, [:w0c, :w1c]) do
|
12
|
-
register_map do
|
13
|
-
read_write
|
14
|
-
reference use: true
|
15
|
-
initial_value require: true
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
RgGen.define_list_item_feature(:bit_field, :type, [:rc, :w0c, :w1c]) do
|
20
|
-
sv_rtl do
|
21
|
-
build do
|
22
|
-
input :register_block, :set, {
|
23
|
-
name: "i_#{full_name}_set", data_type: :logic, width: width,
|
24
|
-
array_size: array_size, array_format: array_port_format
|
25
|
-
}
|
26
|
-
output :register_block, :value_out, {
|
27
|
-
name: "o_#{full_name}", data_type: :logic, width: width,
|
28
|
-
array_size: array_size, array_format: array_port_format
|
29
|
-
}
|
30
|
-
if bit_field.reference?
|
31
|
-
output :register_block, :value_unmasked, {
|
32
|
-
name: "o_#{full_name}_unmasked", data_type: :logic, width: width,
|
33
|
-
array_size: array_size, array_format: array_port_format
|
34
|
-
}
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
main_code :bit_field, from_template: true
|
39
|
-
|
40
|
-
private
|
41
|
-
|
42
|
-
def module_name
|
43
|
-
if bit_field.type == :rc
|
44
|
-
'rggen_bit_field_rc'
|
45
|
-
else
|
46
|
-
'rggen_bit_field_w01c'
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def clear_value
|
51
|
-
bin({ w0c: 0, w1c: 1 }[bit_field.type], 1)
|
52
|
-
end
|
53
|
-
|
54
|
-
def value_out_unmasked
|
55
|
-
(bit_field.reference? || nil) &&
|
56
|
-
value_unmasked[loop_variables]
|
57
|
-
end
|
58
|
-
end
|
59
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RgGen.define_list_item_feature(:bit_field, :type, :reserved) do
|
4
|
-
register_map do
|
5
|
-
reserved
|
6
|
-
non_volatile
|
7
|
-
end
|
8
|
-
|
9
|
-
sv_rtl do
|
10
|
-
main_code :bit_field, from_template: true
|
11
|
-
end
|
12
|
-
|
13
|
-
sv_ral do
|
14
|
-
access 'RO'
|
15
|
-
end
|
16
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RgGen.define_list_item_feature(:bit_field, :type, :ro) do
|
4
|
-
register_map do
|
5
|
-
read_only
|
6
|
-
reference use: true
|
7
|
-
end
|
8
|
-
|
9
|
-
sv_rtl do
|
10
|
-
build do
|
11
|
-
unless bit_field.reference?
|
12
|
-
input :register_block, :value_in, {
|
13
|
-
name: "i_#{full_name}", data_type: :logic, width: width,
|
14
|
-
array_size: array_size, array_format: array_port_format
|
15
|
-
}
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
main_code :bit_field, from_template: true
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def reference_or_value_in
|
24
|
-
if bit_field.reference?
|
25
|
-
reference_bit_field
|
26
|
-
else
|
27
|
-
value_in[loop_variables]
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RgGen.define_list_item_feature(:bit_field, :type, :rof) do
|
4
|
-
register_map do
|
5
|
-
read_only
|
6
|
-
non_volatile
|
7
|
-
initial_value require: true
|
8
|
-
end
|
9
|
-
|
10
|
-
sv_rtl do
|
11
|
-
main_code :bit_field, from_template: true
|
12
|
-
end
|
13
|
-
|
14
|
-
sv_ral do
|
15
|
-
access 'RO'
|
16
|
-
end
|
17
|
-
end
|
@@ -1,13 +0,0 @@
|
|
1
|
-
<%= module_name %> #(
|
2
|
-
<% if [:w0s, :w1s].include?(bit_field.type) %>
|
3
|
-
.SET_VALUE (<%= set_value %>),
|
4
|
-
<% end %>
|
5
|
-
.WIDTH (<%= width %>),
|
6
|
-
.INITIAL_VALUE (<%= initial_value %>)
|
7
|
-
) u_bit_field (
|
8
|
-
.i_clk (<%= register_block.clock %>),
|
9
|
-
.i_rst_n (<%= register_block.reset %>),
|
10
|
-
.bit_field_if (<%= bit_field_if %>),
|
11
|
-
.i_clear (<%= clear[loop_variables] %>),
|
12
|
-
.o_value (<%= value_out[loop_variables] %>)
|
13
|
-
);
|
@@ -1,46 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RgGen.define_list_item_feature(:bit_field, :type, :rs) do
|
4
|
-
register_map do
|
5
|
-
read_only
|
6
|
-
initial_value require: true
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
RgGen.define_list_item_feature(:bit_field, :type, [:w0s, :w1s]) do
|
11
|
-
register_map do
|
12
|
-
read_write
|
13
|
-
initial_value require: true
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
RgGen.define_list_item_feature(:bit_field, :type, [:rs, :w0s, :w1s]) do
|
18
|
-
sv_rtl do
|
19
|
-
build do
|
20
|
-
input :register_block, :clear, {
|
21
|
-
name: "i_#{full_name}_clear", data_type: :logic, width: width,
|
22
|
-
array_size: array_size, array_format: array_port_format
|
23
|
-
}
|
24
|
-
output :register_block, :value_out, {
|
25
|
-
name: "o_#{full_name}", data_type: :logic, width: width,
|
26
|
-
array_size: array_size, array_format: array_port_format
|
27
|
-
}
|
28
|
-
end
|
29
|
-
|
30
|
-
main_code :bit_field, from_template: true
|
31
|
-
|
32
|
-
private
|
33
|
-
|
34
|
-
def module_name
|
35
|
-
if bit_field.type == :rs
|
36
|
-
'rggen_bit_field_rs'
|
37
|
-
else
|
38
|
-
'rggen_bit_field_w01s'
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def set_value
|
43
|
-
bin({ w0s: 0, w1s: 1 }[bit_field.type], 1)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
rggen_bit_field_<%= bit_field.type %> #(
|
2
|
-
.WIDTH (<%= width %>),
|
3
|
-
.INITIAL_VALUE (<%= initial_value %>)
|
4
|
-
) u_bit_field (
|
5
|
-
.i_clk (<%= register_block.clock %>),
|
6
|
-
.i_rst_n (<%= register_block.reset %>),
|
7
|
-
.bit_field_if (<%= bit_field_if %>),
|
8
|
-
.o_value (<%= value_out[loop_variables] %>)
|
9
|
-
);
|
@@ -1,30 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RgGen.define_list_item_feature(:bit_field, :type, :rw) do
|
4
|
-
register_map do
|
5
|
-
read_write
|
6
|
-
non_volatile
|
7
|
-
initial_value require: true
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
RgGen.define_list_item_feature(:bit_field, :type, :wo) do
|
12
|
-
register_map do
|
13
|
-
write_only
|
14
|
-
non_volatile
|
15
|
-
initial_value require: true
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
RgGen.define_list_item_feature(:bit_field, :type, [:rw, :wo]) do
|
20
|
-
sv_rtl do
|
21
|
-
build do
|
22
|
-
output :register_block, :value_out, {
|
23
|
-
name: "o_#{full_name}", data_type: :logic, width: width,
|
24
|
-
array_size: array_size, array_format: array_port_format
|
25
|
-
}
|
26
|
-
end
|
27
|
-
|
28
|
-
main_code :bit_field, from_template: true
|
29
|
-
end
|
30
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
rggen_bit_field_<%= bit_field.type %> #(
|
2
|
-
.WIDTH (<%= width %>),
|
3
|
-
.INITIAL_VALUE (<%= initial_value %>)
|
4
|
-
) u_bit_field (
|
5
|
-
.i_clk (<%= register_block.clock %>),
|
6
|
-
.i_rst_n (<%= register_block.reset %>),
|
7
|
-
.bit_field_if (<%= bit_field_if %>),
|
8
|
-
<% if bit_field.type == :rwc %>
|
9
|
-
.i_clear (<%= control_signal %>),
|
10
|
-
<% elsif bit_field.type == :rwe %>
|
11
|
-
.i_enable (<%= control_signal %>),
|
12
|
-
<% else %>
|
13
|
-
.i_lock (<%= control_signal %>),
|
14
|
-
<% end %>
|
15
|
-
.o_value (<%= value_out[loop_variables] %>)
|
16
|
-
);
|
@@ -1,92 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RgGen.define_list_item_feature(:bit_field, :type, [:rwc, :rwe, :rwl]) do
|
4
|
-
register_map do
|
5
|
-
read_write
|
6
|
-
volatile? { bit_field.type == :rwc || !bit_field.reference? }
|
7
|
-
initial_value require: true
|
8
|
-
reference use: true, width: 1
|
9
|
-
end
|
10
|
-
|
11
|
-
sv_rtl do
|
12
|
-
build do
|
13
|
-
if clear_port?
|
14
|
-
input :register_block, :clear, {
|
15
|
-
name: "i_#{full_name}_clear", data_type: :logic, width: 1,
|
16
|
-
array_size: array_size, array_format: array_port_format
|
17
|
-
}
|
18
|
-
end
|
19
|
-
if enable_port?
|
20
|
-
input :register_block, :enable, {
|
21
|
-
name: "i_#{full_name}_enable", data_type: :logic, width: 1,
|
22
|
-
array_size: array_size, array_format: array_port_format
|
23
|
-
}
|
24
|
-
end
|
25
|
-
if lock_port?
|
26
|
-
input :register_block, :lock, {
|
27
|
-
name: "i_#{full_name}_lock", data_type: :logic, width: 1,
|
28
|
-
array_size: array_size, array_format: array_port_format
|
29
|
-
}
|
30
|
-
end
|
31
|
-
output :register_block, :value_out, {
|
32
|
-
name: "o_#{full_name}", data_type: :logic, width: width,
|
33
|
-
array_size: array_size, array_format: array_port_format
|
34
|
-
}
|
35
|
-
end
|
36
|
-
|
37
|
-
main_code :bit_field, from_template: true
|
38
|
-
|
39
|
-
private
|
40
|
-
|
41
|
-
def clear_port?
|
42
|
-
bit_field.type == :rwc && !bit_field.reference?
|
43
|
-
end
|
44
|
-
|
45
|
-
def enable_port?
|
46
|
-
bit_field.type == :rwe && !bit_field.reference?
|
47
|
-
end
|
48
|
-
|
49
|
-
def lock_port?
|
50
|
-
bit_field.type == :rwl && !bit_field.reference?
|
51
|
-
end
|
52
|
-
|
53
|
-
def control_signal
|
54
|
-
reference_bit_field || control_port[loop_variables]
|
55
|
-
end
|
56
|
-
|
57
|
-
def control_port
|
58
|
-
case bit_field.type
|
59
|
-
when :rwc
|
60
|
-
clear
|
61
|
-
when :rwe
|
62
|
-
enable
|
63
|
-
when :rwl
|
64
|
-
lock
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
RgGen.define_list_item_feature(:bit_field, :type, :rwc) do
|
71
|
-
sv_ral do
|
72
|
-
access 'RW'
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
RgGen.define_list_item_feature(:bit_field, :type, [:rwe, :rwl]) do
|
77
|
-
sv_ral do
|
78
|
-
model_name do
|
79
|
-
"rggen_ral_#{bit_field.type}_field #(#{reference_names})"
|
80
|
-
end
|
81
|
-
|
82
|
-
private
|
83
|
-
|
84
|
-
def reference_names
|
85
|
-
reference = bit_field.reference
|
86
|
-
register = reference&.register
|
87
|
-
[register&.name, reference&.name]
|
88
|
-
.map { |name| string(name) }
|
89
|
-
.join(', ')
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
@@ -1,9 +0,0 @@
|
|
1
|
-
rggen_bit_field_w01trg #(
|
2
|
-
.TRIGGER_VALUE (<%= trigger_value %>),
|
3
|
-
.WIDTH (<%= width %>)
|
4
|
-
) u_bit_field (
|
5
|
-
.i_clk (<%= register_block.clock %>),
|
6
|
-
.i_rst_n (<%= register_block.reset %>),
|
7
|
-
.bit_field_if (<%= bit_field_if %>),
|
8
|
-
.o_trigger (<%= trigger[loop_variables] %>)
|
9
|
-
);
|
@@ -1,29 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RgGen.define_list_item_feature(:bit_field, :type, [:w0trg, :w1trg]) do
|
4
|
-
register_map do
|
5
|
-
write_only
|
6
|
-
non_volatile
|
7
|
-
end
|
8
|
-
|
9
|
-
sv_rtl do
|
10
|
-
build do
|
11
|
-
output :register_block, :trigger, {
|
12
|
-
name: "o_#{full_name}_trigger", data_type: :logic, width: width,
|
13
|
-
array_size: array_size, array_format: array_port_format
|
14
|
-
}
|
15
|
-
end
|
16
|
-
|
17
|
-
main_code :bit_field, from_template: true
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def trigger_value
|
22
|
-
bin({ w0trg: 0, w1trg: 1 }[bit_field.type], 1)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
sv_ral do
|
27
|
-
model_name { "rggen_ral_#{bit_field.type}_field" }
|
28
|
-
end
|
29
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
RgGen.define_simple_feature(:global, :address_width) do
|
4
|
-
configuration do
|
5
|
-
property :address_width, default: 32
|
6
|
-
|
7
|
-
build do |value|
|
8
|
-
@address_width =
|
9
|
-
begin
|
10
|
-
Integer(value)
|
11
|
-
rescue ArgumentError, TypeError
|
12
|
-
error "cannot convert #{value.inspect} into address width"
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
verify(:component) do
|
17
|
-
error_condition { address_width < min_address_width }
|
18
|
-
message do
|
19
|
-
'input address width is less than minimum address width: ' \
|
20
|
-
"address width #{address_width} " \
|
21
|
-
"minimum address width #{min_address_width}"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
printable :address_width
|
26
|
-
|
27
|
-
private
|
28
|
-
|
29
|
-
def min_address_width
|
30
|
-
byte_width = configuration.byte_width
|
31
|
-
byte_width == 1 ? 1 : (byte_width - 1).bit_length
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|