rggen-verilog 0.1.0
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 +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/LICENSE +21 -0
- data/README.md +74 -0
- data/lib/rggen/verilog.rb +64 -0
- data/lib/rggen/verilog/bit_field/type.rb +85 -0
- data/lib/rggen/verilog/bit_field/type/rc_w0c_w1c_wc_woc.erb +21 -0
- data/lib/rggen/verilog/bit_field/type/rc_w0c_w1c_wc_woc.rb +40 -0
- data/lib/rggen/verilog/bit_field/type/reserved.erb +10 -0
- data/lib/rggen/verilog/bit_field/type/reserved.rb +7 -0
- data/lib/rggen/verilog/bit_field/type/ro.erb +11 -0
- data/lib/rggen/verilog/bit_field/type/ro.rb +21 -0
- data/lib/rggen/verilog/bit_field/type/rof.erb +11 -0
- data/lib/rggen/verilog/bit_field/type/rof.rb +7 -0
- data/lib/rggen/verilog/bit_field/type/rs_w0s_w1s_ws_wos.erb +19 -0
- data/lib/rggen/verilog/bit_field/type/rs_w0s_w1s_ws_wos.rb +31 -0
- data/lib/rggen/verilog/bit_field/type/rw_w1_wo_wo1.erb +16 -0
- data/lib/rggen/verilog/bit_field/type/rw_w1_wo_wo1.rb +23 -0
- data/lib/rggen/verilog/bit_field/type/rwc.erb +15 -0
- data/lib/rggen/verilog/bit_field/type/rwc.rb +24 -0
- data/lib/rggen/verilog/bit_field/type/rwe.erb +15 -0
- data/lib/rggen/verilog/bit_field/type/rwe.rb +24 -0
- data/lib/rggen/verilog/bit_field/type/rwl.erb +15 -0
- data/lib/rggen/verilog/bit_field/type/rwl.rb +24 -0
- data/lib/rggen/verilog/bit_field/type/rws.erb +16 -0
- data/lib/rggen/verilog/bit_field/type/rws.rb +27 -0
- data/lib/rggen/verilog/bit_field/type/w0crs_w1crs_wcrs.erb +15 -0
- data/lib/rggen/verilog/bit_field/type/w0crs_w1crs_wcrs.rb +20 -0
- data/lib/rggen/verilog/bit_field/type/w0src_w1src_wsrc.erb +15 -0
- data/lib/rggen/verilog/bit_field/type/w0src_w1src_wsrc.rb +20 -0
- data/lib/rggen/verilog/bit_field/type/w0t_w1t.erb +15 -0
- data/lib/rggen/verilog/bit_field/type/w0t_w1t.rb +19 -0
- data/lib/rggen/verilog/bit_field/type/w0trg_w1trg.erb +14 -0
- data/lib/rggen/verilog/bit_field/type/w0trg_w1trg.rb +19 -0
- data/lib/rggen/verilog/bit_field/type/wrc_wrs.erb +14 -0
- data/lib/rggen/verilog/bit_field/type/wrc_wrs.rb +13 -0
- data/lib/rggen/verilog/bit_field/verilog_top.rb +89 -0
- data/lib/rggen/verilog/component.rb +7 -0
- data/lib/rggen/verilog/factories.rb +11 -0
- data/lib/rggen/verilog/feature.rb +35 -0
- data/lib/rggen/verilog/register/type.rb +101 -0
- data/lib/rggen/verilog/register/type/default.erb +29 -0
- data/lib/rggen/verilog/register/type/external.erb +27 -0
- data/lib/rggen/verilog/register/type/external.rb +45 -0
- data/lib/rggen/verilog/register/type/indirect.erb +31 -0
- data/lib/rggen/verilog/register/type/indirect.rb +18 -0
- data/lib/rggen/verilog/register/verilog_top.rb +58 -0
- data/lib/rggen/verilog/register_block/protocol.rb +51 -0
- data/lib/rggen/verilog/register_block/protocol/apb.erb +33 -0
- data/lib/rggen/verilog/register_block/protocol/apb.rb +40 -0
- data/lib/rggen/verilog/register_block/protocol/axi4lite.erb +48 -0
- data/lib/rggen/verilog/register_block/protocol/axi4lite.rb +92 -0
- data/lib/rggen/verilog/register_block/verilog_macros.erb +4 -0
- data/lib/rggen/verilog/register_block/verilog_top.rb +104 -0
- data/lib/rggen/verilog/register_file/verilog_top.rb +30 -0
- data/lib/rggen/verilog/setup.rb +11 -0
- data/lib/rggen/verilog/utility.rb +13 -0
- data/lib/rggen/verilog/utility/local_scope.rb +15 -0
- data/lib/rggen/verilog/version.rb +7 -0
- metadata +133 -0
@@ -0,0 +1,11 @@
|
|
1
|
+
rggen_bit_field_ro #(
|
2
|
+
.WIDTH (<%= width %>)
|
3
|
+
) u_bit_field (
|
4
|
+
.i_bit_field_valid (<%= bit_field_valid %>),
|
5
|
+
.i_bit_field_read_mask (<%= bit_field_read_mask %>),
|
6
|
+
.i_bit_field_write_mask (<%= bit_field_write_mask %>),
|
7
|
+
.i_bit_field_write_data (<%= bit_field_write_data %>),
|
8
|
+
.o_bit_field_read_data (<%= bit_field_read_data %>),
|
9
|
+
.o_bit_field_value (<%= bit_field_value %>),
|
10
|
+
.i_value (<%= initial_value %>)
|
11
|
+
);
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<%= module_name %> #(
|
2
|
+
<% if bit_field.type != :rs %>
|
3
|
+
.SET_VALUE (<%= set_value %>),
|
4
|
+
.WRITE_ONLY (<%= write_only %>),
|
5
|
+
<% end %>
|
6
|
+
.WIDTH (<%= width %>),
|
7
|
+
.INITIAL_VALUE (<%= initial_value %>)
|
8
|
+
) u_bit_field (
|
9
|
+
.i_clk (<%= clock %>),
|
10
|
+
.i_rst_n (<%= reset %>),
|
11
|
+
.i_bit_field_valid (<%= bit_field_valid %>),
|
12
|
+
.i_bit_field_read_mask (<%= bit_field_read_mask %>),
|
13
|
+
.i_bit_field_write_mask (<%= bit_field_write_mask %>),
|
14
|
+
.i_bit_field_write_data (<%= bit_field_write_data %>),
|
15
|
+
.o_bit_field_read_data (<%= bit_field_read_data %>),
|
16
|
+
.o_bit_field_value (<%= bit_field_value %>),
|
17
|
+
.i_clear (<%= clear[loop_variables] %>),
|
18
|
+
.o_value (<%= value_out[loop_variables] %>)
|
19
|
+
);
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_list_item_feature(:bit_field, :type, [:rs, :w0s, :w1s, :ws, :wos]) do
|
4
|
+
verilog do
|
5
|
+
build do
|
6
|
+
input :clear, {
|
7
|
+
name: "i_#{full_name}_clear", width: width, array_size: array_size
|
8
|
+
}
|
9
|
+
output :value_out, {
|
10
|
+
name: "o_#{full_name}", width: width, array_size: array_size
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
main_code :bit_field, from_template: true
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def module_name
|
19
|
+
bit_field.type == :rs && 'rggen_bit_field_rs' || 'rggen_bit_field_w01s_ws_wos'
|
20
|
+
end
|
21
|
+
|
22
|
+
def set_value
|
23
|
+
value = { w0s: 0b00, w1s: 0b01, ws: 0b10, wos: 0b10 }[bit_field.type]
|
24
|
+
bin(value, 2)
|
25
|
+
end
|
26
|
+
|
27
|
+
def write_only
|
28
|
+
bit_field.write_only? && 1 || 0
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
rggen_bit_field_rw_wo #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>),
|
4
|
+
.WRITE_ONLY (<%= write_only %>),
|
5
|
+
.WRITE_ONCE (<%= write_once %>)
|
6
|
+
) u_bit_field (
|
7
|
+
.i_clk (<%= clock %>),
|
8
|
+
.i_rst_n (<%= reset %>),
|
9
|
+
.i_bit_field_valid (<%= bit_field_valid %>),
|
10
|
+
.i_bit_field_read_mask (<%= bit_field_read_mask %>),
|
11
|
+
.i_bit_field_write_mask (<%= bit_field_write_mask %>),
|
12
|
+
.i_bit_field_write_data (<%= bit_field_write_data %>),
|
13
|
+
.o_bit_field_read_data (<%= bit_field_read_data %>),
|
14
|
+
.o_bit_field_value (<%= bit_field_value %>),
|
15
|
+
.o_value (<%= value_out[loop_variables] %>)
|
16
|
+
);
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_list_item_feature(:bit_field, :type, [:rw, :w1, :wo, :wo1]) do
|
4
|
+
verilog do
|
5
|
+
build do
|
6
|
+
output :value_out, {
|
7
|
+
name: "o_#{full_name}", width: width, array_size: array_size
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
main_code :bit_field, from_template: true
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def write_only
|
16
|
+
bit_field.write_only? && 1 || 0
|
17
|
+
end
|
18
|
+
|
19
|
+
def write_once
|
20
|
+
[:w1, :wo1].include?(bit_field.type) && 1 || 0
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
rggen_bit_field_rwc #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>)
|
4
|
+
) u_bit_field (
|
5
|
+
.i_clk (<%= clock %>),
|
6
|
+
.i_rst_n (<%= reset %>),
|
7
|
+
.i_bit_field_valid (<%= bit_field_valid %>),
|
8
|
+
.i_bit_field_read_mask (<%= bit_field_read_mask %>),
|
9
|
+
.i_bit_field_write_mask (<%= bit_field_write_mask %>),
|
10
|
+
.i_bit_field_write_data (<%= bit_field_write_data %>),
|
11
|
+
.o_bit_field_read_data (<%= bit_field_read_data %>),
|
12
|
+
.o_bit_field_value (<%= bit_field_value %>),
|
13
|
+
.i_clear (<%= clear_signal %>),
|
14
|
+
.o_value (<%= value_out[loop_variables] %>)
|
15
|
+
);
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_list_item_feature(:bit_field, :type, :rwc) do
|
4
|
+
verilog do
|
5
|
+
build do
|
6
|
+
unless bit_field.reference?
|
7
|
+
input :clear, {
|
8
|
+
name: "i_#{full_name}_clear", width: 1, array_size: array_size
|
9
|
+
}
|
10
|
+
end
|
11
|
+
output :value_out, {
|
12
|
+
name: "o_#{full_name}", width: width, array_size: array_size
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
main_code :bit_field, from_template: true
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def clear_signal
|
21
|
+
reference_bit_field || clear[loop_variables]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
rggen_bit_field_rwe #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>)
|
4
|
+
) u_bit_field (
|
5
|
+
.i_clk (<%= clock %>),
|
6
|
+
.i_rst_n (<%= reset %>),
|
7
|
+
.i_bit_field_valid (<%= bit_field_valid %>),
|
8
|
+
.i_bit_field_read_mask (<%= bit_field_read_mask %>),
|
9
|
+
.i_bit_field_write_mask (<%= bit_field_write_mask %>),
|
10
|
+
.i_bit_field_write_data (<%= bit_field_write_data %>),
|
11
|
+
.o_bit_field_read_data (<%= bit_field_read_data %>),
|
12
|
+
.o_bit_field_value (<%= bit_field_value %>),
|
13
|
+
.i_enable (<%= enable_signal %>),
|
14
|
+
.o_value (<%= value_out[loop_variables] %>)
|
15
|
+
);
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_list_item_feature(:bit_field, :type, :rwe) do
|
4
|
+
verilog do
|
5
|
+
build do
|
6
|
+
unless bit_field.reference?
|
7
|
+
input :enable, {
|
8
|
+
name: "i_#{full_name}_enable", width: 1, array_size: array_size
|
9
|
+
}
|
10
|
+
end
|
11
|
+
output :value_out, {
|
12
|
+
name: "o_#{full_name}", width: width, array_size: array_size
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
main_code :bit_field, from_template: true
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def enable_signal
|
21
|
+
reference_bit_field || enable[loop_variables]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
rggen_bit_field_rwl #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>)
|
4
|
+
) u_bit_field (
|
5
|
+
.i_clk (<%= clock %>),
|
6
|
+
.i_rst_n (<%= reset %>),
|
7
|
+
.i_bit_field_valid (<%= bit_field_valid %>),
|
8
|
+
.i_bit_field_read_mask (<%= bit_field_read_mask %>),
|
9
|
+
.i_bit_field_write_mask (<%= bit_field_write_mask %>),
|
10
|
+
.i_bit_field_write_data (<%= bit_field_write_data %>),
|
11
|
+
.o_bit_field_read_data (<%= bit_field_read_data %>),
|
12
|
+
.o_bit_field_value (<%= bit_field_value %>),
|
13
|
+
.i_lock (<%= lock_signal %>),
|
14
|
+
.o_value (<%= value_out[loop_variables] %>)
|
15
|
+
);
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_list_item_feature(:bit_field, :type, :rwl) do
|
4
|
+
verilog do
|
5
|
+
build do
|
6
|
+
unless bit_field.reference?
|
7
|
+
input :lock, {
|
8
|
+
name: "i_#{full_name}_lock", width: 1, array_size: array_size
|
9
|
+
}
|
10
|
+
end
|
11
|
+
output :value_out, {
|
12
|
+
name: "o_#{full_name}", width: width, array_size: array_size
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
main_code :bit_field, from_template: true
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def lock_signal
|
21
|
+
reference_bit_field || lock[loop_variables]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
rggen_bit_field_rws #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>)
|
4
|
+
) u_bit_field (
|
5
|
+
.i_clk (<%= clock %>),
|
6
|
+
.i_rst_n (<%= reset %>),
|
7
|
+
.i_bit_field_valid (<%= bit_field_valid %>),
|
8
|
+
.i_bit_field_read_mask (<%= bit_field_read_mask %>),
|
9
|
+
.i_bit_field_write_mask (<%= bit_field_write_mask %>),
|
10
|
+
.i_bit_field_write_data (<%= bit_field_write_data %>),
|
11
|
+
.o_bit_field_read_data (<%= bit_field_read_data %>),
|
12
|
+
.o_bit_field_value (<%= bit_field_value %>),
|
13
|
+
.i_set (<%= set_signal %>),
|
14
|
+
.i_value (<%= value_in[loop_variables] %>),
|
15
|
+
.o_value (<%= value_out[loop_variables] %>)
|
16
|
+
);
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_list_item_feature(:bit_field, :type, :rws) do
|
4
|
+
verilog do
|
5
|
+
build do
|
6
|
+
unless bit_field.reference?
|
7
|
+
input :set, {
|
8
|
+
name: "i_#{full_name}_set", width: 1, array_size: array_size
|
9
|
+
}
|
10
|
+
end
|
11
|
+
input :value_in, {
|
12
|
+
name: "i_#{full_name}", width: width, array_size: array_size
|
13
|
+
}
|
14
|
+
output :value_out, {
|
15
|
+
name: "o_#{full_name}", width: width, array_size: array_size
|
16
|
+
}
|
17
|
+
end
|
18
|
+
|
19
|
+
main_code :bit_field, from_template: true
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def set_signal
|
24
|
+
reference_bit_field || set[loop_variables]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
rggen_bit_field_w01crs_wcrs #(
|
2
|
+
.CLEAR_VALUE (<%= clear_value %>),
|
3
|
+
.WIDTH (<%= width %>),
|
4
|
+
.INITIAL_VALUE (<%= initial_value %>)
|
5
|
+
) u_bit_field (
|
6
|
+
.i_clk (<%= clock %>),
|
7
|
+
.i_rst_n (<%= reset %>),
|
8
|
+
.i_bit_field_valid (<%= bit_field_valid %>),
|
9
|
+
.i_bit_field_read_mask (<%= bit_field_read_mask %>),
|
10
|
+
.i_bit_field_write_mask (<%= bit_field_write_mask %>),
|
11
|
+
.i_bit_field_write_data (<%= bit_field_write_data %>),
|
12
|
+
.o_bit_field_read_data (<%= bit_field_read_data %>),
|
13
|
+
.o_bit_field_value (<%= bit_field_value %>),
|
14
|
+
.o_value (<%= value_out[loop_variables] %>)
|
15
|
+
);
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_list_item_feature(:bit_field, :type, [:w0crs, :w1crs, :wcrs]) do
|
4
|
+
verilog do
|
5
|
+
build do
|
6
|
+
output :value_out, {
|
7
|
+
name: "o_#{full_name}", width: width, array_size: array_size
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
main_code :bit_field, from_template: true
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def clear_value
|
16
|
+
value = { w0crs: 0b00, w1crs: 0b01, wcrs: 0b10 }[bit_field.type]
|
17
|
+
bin(value, 2)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
rggen_bit_field_w01src_wsrc #(
|
2
|
+
.SET_VALUE (<%= set_value %>),
|
3
|
+
.WIDTH (<%= width %>),
|
4
|
+
.INITIAL_VALUE (<%= initial_value %>)
|
5
|
+
) u_bit_field (
|
6
|
+
.i_clk (<%= clock %>),
|
7
|
+
.i_rst_n (<%= reset %>),
|
8
|
+
.i_bit_field_valid (<%= bit_field_valid %>),
|
9
|
+
.i_bit_field_read_mask (<%= bit_field_read_mask %>),
|
10
|
+
.i_bit_field_write_mask (<%= bit_field_write_mask %>),
|
11
|
+
.i_bit_field_write_data (<%= bit_field_write_data %>),
|
12
|
+
.o_bit_field_read_data (<%= bit_field_read_data %>),
|
13
|
+
.o_bit_field_value (<%= bit_field_value %>),
|
14
|
+
.o_value (<%= value_out[loop_variables] %>)
|
15
|
+
);
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_list_item_feature(:bit_field, :type, [:w0src, :w1src, :wsrc]) do
|
4
|
+
verilog do
|
5
|
+
build do
|
6
|
+
output :value_out, {
|
7
|
+
name: "o_#{full_name}", width: width, array_size: array_size
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
main_code :bit_field, from_template: true
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def set_value
|
16
|
+
value = { w0src: 0b00, w1src: 0b01, wsrc: 0b10 }[bit_field.type]
|
17
|
+
bin(value, 2)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
rggen_bit_field_w01t #(
|
2
|
+
.TOGGLE_VALUE (<%= toggle_value %>),
|
3
|
+
.WIDTH (<%= width %>),
|
4
|
+
.INITIAL_VALUE (<%= initial_value %>)
|
5
|
+
) u_bit_field (
|
6
|
+
.i_clk (<%= clock %>),
|
7
|
+
.i_rst_n (<%= reset %>),
|
8
|
+
.i_bit_field_valid (<%= bit_field_valid %>),
|
9
|
+
.i_bit_field_read_mask (<%= bit_field_read_mask %>),
|
10
|
+
.i_bit_field_write_mask (<%= bit_field_write_mask %>),
|
11
|
+
.i_bit_field_write_data (<%= bit_field_write_data %>),
|
12
|
+
.o_bit_field_read_data (<%= bit_field_read_data %>),
|
13
|
+
.o_bit_field_value (<%= bit_field_value %>),
|
14
|
+
.o_value (<%= value_out[loop_variables] %>)
|
15
|
+
);
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_list_item_feature(:bit_field, :type, [:w0t, :w1t]) do
|
4
|
+
verilog do
|
5
|
+
build do
|
6
|
+
output :value_out, {
|
7
|
+
name: "o_#{full_name}", width: width, array_size: array_size
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
main_code :bit_field, from_template: true
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def toggle_value
|
16
|
+
bin({ w0t: 0, w1t: 1 }[bit_field.type], 1)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
rggen_bit_field_w01trg #(
|
2
|
+
.TRIGGER_VALUE (<%= trigger_value %>),
|
3
|
+
.WIDTH (<%= width %>)
|
4
|
+
) u_bit_field (
|
5
|
+
.i_clk (<%= clock %>),
|
6
|
+
.i_rst_n (<%= reset %>),
|
7
|
+
.i_bit_field_valid (<%= bit_field_valid %>),
|
8
|
+
.i_bit_field_read_mask (<%= bit_field_read_mask %>),
|
9
|
+
.i_bit_field_write_mask (<%= bit_field_write_mask %>),
|
10
|
+
.i_bit_field_write_data (<%= bit_field_write_data %>),
|
11
|
+
.o_bit_field_read_data (<%= bit_field_read_data %>),
|
12
|
+
.o_bit_field_value (<%= bit_field_value %>),
|
13
|
+
.o_trigger (<%= trigger[loop_variables] %>)
|
14
|
+
);
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_list_item_feature(:bit_field, :type, [:w0trg, :w1trg]) do
|
4
|
+
verilog do
|
5
|
+
build do
|
6
|
+
output :trigger, {
|
7
|
+
name: "o_#{full_name}_trigger", width: width, array_size: array_size
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
main_code :bit_field, from_template: true
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def trigger_value
|
16
|
+
bin({ w0trg: 0, w1trg: 1 }[bit_field.type], 1)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
rggen_bit_field_<%= bit_field.type %> #(
|
2
|
+
.WIDTH (<%= width %>),
|
3
|
+
.INITIAL_VALUE (<%= initial_value %>)
|
4
|
+
) u_bit_field (
|
5
|
+
.i_clk (<%= clock %>),
|
6
|
+
.i_rst_n (<%= reset %>),
|
7
|
+
.i_bit_field_valid (<%= bit_field_valid %>),
|
8
|
+
.i_bit_field_read_mask (<%= bit_field_read_mask %>),
|
9
|
+
.i_bit_field_write_mask (<%= bit_field_write_mask %>),
|
10
|
+
.i_bit_field_write_data (<%= bit_field_write_data %>),
|
11
|
+
.o_bit_field_read_data (<%= bit_field_read_data %>),
|
12
|
+
.o_bit_field_value (<%= bit_field_value %>),
|
13
|
+
.o_value (<%= value_out[loop_variables] %>)
|
14
|
+
);
|