rggen-verilog 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +1 -1
  3. data/README.md +1 -1
  4. data/lib/rggen/verilog/bit_field/type/rc_w0c_w1c_wc_woc.erb +2 -0
  5. data/lib/rggen/verilog/bit_field/type/{ro.erb → ro_rotrg.erb} +8 -4
  6. data/lib/rggen/verilog/bit_field/type/ro_rotrg.rb +38 -0
  7. data/lib/rggen/verilog/bit_field/type/rof.erb +5 -2
  8. data/lib/rggen/verilog/bit_field/type/rowo_rowotrg.erb +26 -0
  9. data/lib/rggen/verilog/bit_field/type/rowo_rowotrg.rb +48 -0
  10. data/lib/rggen/verilog/bit_field/type/rs_w0s_w1s_ws_wos.erb +3 -1
  11. data/lib/rggen/verilog/bit_field/type/{rw_w1_wo_wo1.erb → rw_rwtrg_w1.erb} +4 -2
  12. data/lib/rggen/verilog/bit_field/type/rw_rwtrg_w1.rb +43 -0
  13. data/lib/rggen/verilog/bit_field/type/rwc.erb +2 -0
  14. data/lib/rggen/verilog/bit_field/type/rwe_rwl.erb +2 -0
  15. data/lib/rggen/verilog/bit_field/type/rws.erb +2 -0
  16. data/lib/rggen/verilog/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.erb +2 -0
  17. data/lib/rggen/verilog/bit_field/type/w0t_w1t.erb +2 -0
  18. data/lib/rggen/verilog/bit_field/type/wo_wo1_wotrg.erb +27 -0
  19. data/lib/rggen/verilog/bit_field/type/wo_wo1_wotrg.rb +36 -0
  20. data/lib/rggen/verilog/bit_field/type/wrc_wrs.erb +2 -0
  21. data/lib/rggen/verilog/bit_field/verilog_top.rb +8 -6
  22. data/lib/rggen/verilog/register_block/protocol/wishbone.erb +35 -0
  23. data/lib/rggen/verilog/register_block/protocol/wishbone.rb +47 -0
  24. data/lib/rggen/verilog/register_block/verilog_top.rb +14 -1
  25. data/lib/rggen/verilog/setup.rb +1 -1
  26. data/lib/rggen/verilog/version.rb +1 -1
  27. data/lib/rggen/verilog.rb +5 -2
  28. metadata +18 -11
  29. data/lib/rggen/verilog/bit_field/type/ro.rb +0 -21
  30. data/lib/rggen/verilog/bit_field/type/rw_w1_wo_wo1.rb +0 -23
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eea0415f0d8ad111af37525833522c9f542d5815e56d954aa69e22f973096919
4
- data.tar.gz: cba5ff6f30efa182b035d62698d8017f3bda815e5eca1b2e5cbe093ba525a4b3
3
+ metadata.gz: 8a67c663d19ff7961ec27d7cd6ab19cedfe3fac30fa63b979ce49619a294f3d5
4
+ data.tar.gz: c4bdb45657ce7ab10bb5d5caa414f3e9159be3a0fc0b69f6206d06441d82aee3
5
5
  SHA512:
6
- metadata.gz: 687b5e2c1d2cdcf72bf6808c4ffcbf8fcc730fc6efd3ed47383650564be7809bd049f2c192b3e407f6f9bf020514046acd0a8365a6d6141c2844b24fbd4de0b7
7
- data.tar.gz: 6dcf31105b3e66e3d570e040457262e832d50e635f9ab1fdedf967ac03531655537561b4d8554fd7e36fe14c0037586e9068fa93b035fedf94e35d197d436a99
6
+ metadata.gz: 475653aadd4aa3f2fd7ba1ee6c0a8ff5630c8c0269b8a8107c765250f3f878af3f8297fbaec8b8ea6cf50803f89a01ccf23db587b78340e83bcf9047f302ccfe
7
+ data.tar.gz: 5cbe51368dccafd60e8d2a68c82293a54a83b88ec426966c537348e553d86ea8e4aa6e50ab4dd3ad8bbf1856b339030b0b9ed317f7c1615d3caa7e2a96e2491c
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020-2021 Taichi Ishitani
3
+ Copyright (c) 2020-2022 Taichi Ishitani
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -67,7 +67,7 @@ Feedbacks, bus reports, questions and etc. are welcome! You can post them bu usi
67
67
 
68
68
  ## Copyright & License
69
69
 
70
- Copyright © 2020-2021 Taichi Ishitani. RgGen::Verilog is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
70
+ Copyright © 2020-2022 Taichi Ishitani. RgGen::Verilog is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
71
71
 
72
72
  ## Code of Conduct
73
73
 
@@ -13,6 +13,8 @@ rggen_bit_field #(
13
13
  .i_sw_write_data (<%= bit_field_write_data %>),
14
14
  .o_sw_read_data (<%= bit_field_read_data %>),
15
15
  .o_sw_value (<%= bit_field_value %>),
16
+ .o_write_trigger (),
17
+ .o_read_trigger (),
16
18
  .i_hw_write_enable (1'b0),
17
19
  .i_hw_write_data (<%= fill_0(width) %>),
18
20
  .i_hw_set (<%= set[loop_variables] %>),
@@ -1,9 +1,11 @@
1
1
  rggen_bit_field #(
2
- .WIDTH (<%= width %>),
3
- .STORAGE (0)
2
+ .WIDTH (<%= width %>),
3
+ .STORAGE (0),
4
+ .EXTERNAL_READ_DATA (1),
5
+ .TRIGGER (<%= trigger %>)
4
6
  ) u_bit_field (
5
- .i_clk (1'b0),
6
- .i_rst_n (1'b0),
7
+ .i_clk (<%= clock %>),
8
+ .i_rst_n (<%= reset %>),
7
9
  .i_sw_valid (<%= bit_field_valid %>),
8
10
  .i_sw_read_mask (<%= bit_field_read_mask %>),
9
11
  .i_sw_write_enable (1'b0),
@@ -11,6 +13,8 @@ rggen_bit_field #(
11
13
  .i_sw_write_data (<%= bit_field_write_data %>),
12
14
  .o_sw_read_data (<%= bit_field_read_data %>),
13
15
  .o_sw_value (<%= bit_field_value %>),
16
+ .o_write_trigger (),
17
+ .o_read_trigger (<%= read_trigger_signal %>),
14
18
  .i_hw_write_enable (1'b0),
15
19
  .i_hw_write_data (<%= fill_0(width) %>),
16
20
  .i_hw_set (<%= fill_0(width) %>),
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:ro, :rotrg]) do
4
+ verilog do
5
+ build do
6
+ unless bit_field.reference?
7
+ input :value_in, {
8
+ name: "i_#{full_name}", width: width, array_size: array_size
9
+ }
10
+ end
11
+ if rotrg?
12
+ output :read_trigger, {
13
+ name: "o_#{full_name}_read_trigger", width: 1, array_size: array_size
14
+ }
15
+ end
16
+ end
17
+
18
+ main_code :bit_field, from_template: true
19
+
20
+ private
21
+
22
+ def rotrg?
23
+ bit_field.type == :rotrg
24
+ end
25
+
26
+ def trigger
27
+ rotrg? && 1 || 0
28
+ end
29
+
30
+ def read_trigger_signal
31
+ rotrg? && read_trigger[loop_variables] || nil
32
+ end
33
+
34
+ def reference_or_value_in
35
+ reference_bit_field || value_in[loop_variables]
36
+ end
37
+ end
38
+ end
@@ -1,6 +1,7 @@
1
1
  rggen_bit_field #(
2
- .WIDTH (<%= width %>),
3
- .STORAGE (0)
2
+ .WIDTH (<%= width %>),
3
+ .STORAGE (0),
4
+ .EXTERNAL_READ_DATA (1)
4
5
  ) u_bit_field (
5
6
  .i_clk (1'b0),
6
7
  .i_rst_n (1'b0),
@@ -11,6 +12,8 @@ rggen_bit_field #(
11
12
  .i_sw_write_data (<%= bit_field_write_data %>),
12
13
  .o_sw_read_data (<%= bit_field_read_data %>),
13
14
  .o_sw_value (<%= bit_field_value %>),
15
+ .o_write_trigger (),
16
+ .o_read_trigger (),
14
17
  .i_hw_write_enable (1'b0),
15
18
  .i_hw_write_data (<%= fill_0(width) %>),
16
19
  .i_hw_set (<%= fill_0(width) %>),
@@ -0,0 +1,26 @@
1
+ rggen_bit_field #(
2
+ .WIDTH (<%= width %>),
3
+ .INITIAL_VALUE (<%= initial_value %>),
4
+ .EXTERNAL_READ_DATA (1),
5
+ .TRIGGER (<%= trigger %>)
6
+ ) u_bit_field (
7
+ .i_clk (<%= clock %>),
8
+ .i_rst_n (<%= reset %>),
9
+ .i_sw_valid (<%= bit_field_valid %>),
10
+ .i_sw_read_mask (<%= bit_field_read_mask %>),
11
+ .i_sw_write_enable (1'b1),
12
+ .i_sw_write_mask (<%= bit_field_write_mask %>),
13
+ .i_sw_write_data (<%= bit_field_write_data %>),
14
+ .o_sw_read_data (<%= bit_field_read_data %>),
15
+ .o_sw_value (<%= bit_field_value %>),
16
+ .o_write_trigger (<%= write_trigger_signal %>),
17
+ .o_read_trigger (<%= read_trigger_signal %>),
18
+ .i_hw_write_enable (1'b0),
19
+ .i_hw_write_data (<%= fill_0(width) %>),
20
+ .i_hw_set (<%= fill_0(width) %>),
21
+ .i_hw_clear (<%= fill_0(width) %>),
22
+ .i_value (<%= reference_or_value_in %>),
23
+ .i_mask (<%= fill_1(width) %>),
24
+ .o_value (<%= value_out[loop_variables] %>),
25
+ .o_value_unmasked ()
26
+ );
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:rowo, :rowotrg]) do
4
+ verilog do
5
+ build do
6
+ output :value_out, {
7
+ name: "o_#{full_name}", width: width, array_size: array_size
8
+ }
9
+ unless bit_field.reference?
10
+ input :value_in, {
11
+ name: "i_#{full_name}", width: width, array_size: array_size
12
+ }
13
+ end
14
+ if rowotrg?
15
+ output :write_trigger, {
16
+ name: "o_#{full_name}_write_trigger", width: 1, array_size: array_size
17
+ }
18
+ output :read_trigger, {
19
+ name: "o_#{full_name}_read_trigger", width: 1, array_size: array_size
20
+ }
21
+ end
22
+ end
23
+
24
+ main_code :bit_field, from_template: true
25
+
26
+ private
27
+
28
+ def rowotrg?
29
+ bit_field.type == :rowotrg
30
+ end
31
+
32
+ def trigger
33
+ rowotrg? && 1 || 0
34
+ end
35
+
36
+ def write_trigger_signal
37
+ rowotrg? && write_trigger[loop_variables] || nil
38
+ end
39
+
40
+ def read_trigger_signal
41
+ rowotrg? && read_trigger[loop_variables] || nil
42
+ end
43
+
44
+ def reference_or_value_in
45
+ reference_bit_field || value_in[loop_variables]
46
+ end
47
+ end
48
+ end
@@ -13,12 +13,14 @@ rggen_bit_field #(
13
13
  .i_sw_write_data (<%= bit_field_write_data %>),
14
14
  .o_sw_read_data (<%= bit_field_read_data %>),
15
15
  .o_sw_value (<%= bit_field_value %>),
16
+ .o_write_trigger (),
17
+ .o_read_trigger (),
16
18
  .i_hw_write_enable (1'b0),
17
19
  .i_hw_write_data (<%= fill_0(width) %>),
18
20
  .i_hw_set (<%= fill_0(width) %>),
19
21
  .i_hw_clear (<%= clear[loop_variables] %>),
20
22
  .i_value (<%= fill_0(width) %>),
21
- .i_mask (<%= mask %>),
23
+ .i_mask (<%= fill_1(width) %>),
22
24
  .o_value (<%= value_out[loop_variables] %>),
23
25
  .o_value_unmasked ()
24
26
  );
@@ -1,8 +1,8 @@
1
1
  rggen_bit_field #(
2
2
  .WIDTH (<%= width %>),
3
3
  .INITIAL_VALUE (<%= initial_value %>),
4
- .SW_READ_ACTION (<%= read_action %>),
5
- .SW_WRITE_ONCE (<%= write_once %>)
4
+ .SW_WRITE_ONCE (<%= write_once %>),
5
+ .TRIGGER (<%= trigger %>)
6
6
  ) u_bit_field (
7
7
  .i_clk (<%= clock %>),
8
8
  .i_rst_n (<%= reset %>),
@@ -13,6 +13,8 @@ rggen_bit_field #(
13
13
  .i_sw_write_data (<%= bit_field_write_data %>),
14
14
  .o_sw_read_data (<%= bit_field_read_data %>),
15
15
  .o_sw_value (<%= bit_field_value %>),
16
+ .o_write_trigger (<%= write_trigger_signal %>),
17
+ .o_read_trigger (<%= read_trigger_signal %>),
16
18
  .i_hw_write_enable (1'b0),
17
19
  .i_hw_write_data (<%= fill_0(width) %>),
18
20
  .i_hw_set (<%= fill_0(width) %>),
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:rw, :rwtrg, :w1]) do
4
+ verilog do
5
+ build do
6
+ output :value_out, {
7
+ name: "o_#{full_name}", width: width, array_size: array_size
8
+ }
9
+ if rwtrg?
10
+ output :write_trigger, {
11
+ name: "o_#{full_name}_write_trigger", width: 1, array_size: array_size
12
+ }
13
+ output :read_trigger, {
14
+ name: "o_#{full_name}_read_trigger", width: 1, array_size: array_size
15
+ }
16
+ end
17
+ end
18
+
19
+ main_code :bit_field, from_template: true
20
+
21
+ private
22
+
23
+ def rwtrg?
24
+ bit_field.type == :rwtrg
25
+ end
26
+
27
+ def write_once
28
+ bit_field.type == :w1 && 1 || 0
29
+ end
30
+
31
+ def trigger
32
+ rwtrg? && 1 || 0
33
+ end
34
+
35
+ def write_trigger_signal
36
+ rwtrg? && write_trigger[loop_variables] || nil
37
+ end
38
+
39
+ def read_trigger_signal
40
+ rwtrg? && read_trigger[loop_variables] || nil
41
+ end
42
+ end
43
+ end
@@ -12,6 +12,8 @@ rggen_bit_field #(
12
12
  .i_sw_write_data (<%= bit_field_write_data %>),
13
13
  .o_sw_read_data (<%= bit_field_read_data %>),
14
14
  .o_sw_value (<%= bit_field_value %>),
15
+ .o_write_trigger (),
16
+ .o_read_trigger (),
15
17
  .i_hw_write_enable (1'b0),
16
18
  .i_hw_write_data (<%= fill_0(width) %>),
17
19
  .i_hw_set (<%= fill_0(width) %>),
@@ -12,6 +12,8 @@ rggen_bit_field #(
12
12
  .i_sw_write_data (<%= bit_field_write_data %>),
13
13
  .o_sw_read_data (<%= bit_field_read_data %>),
14
14
  .o_sw_value (<%= bit_field_value %>),
15
+ .o_write_trigger (),
16
+ .o_read_trigger (),
15
17
  .i_hw_write_enable (1'b0),
16
18
  .i_hw_write_data (<%= fill_0(width) %>),
17
19
  .i_hw_set (<%= fill_0(width) %>),
@@ -11,6 +11,8 @@ rggen_bit_field #(
11
11
  .i_sw_write_data (<%= bit_field_write_data %>),
12
12
  .o_sw_read_data (<%= bit_field_read_data %>),
13
13
  .o_sw_value (<%= bit_field_value %>),
14
+ .o_write_trigger (),
15
+ .o_read_trigger (),
14
16
  .i_hw_write_enable (<%= set_signal %>),
15
17
  .i_hw_write_data (<%= value_in[loop_variables] %>),
16
18
  .i_hw_set (<%= fill_0(width) %>),
@@ -13,6 +13,8 @@ rggen_bit_field #(
13
13
  .i_sw_write_data (<%= bit_field_write_data %>),
14
14
  .o_sw_read_data (<%= bit_field_read_data %>),
15
15
  .o_sw_value (<%= bit_field_value %>),
16
+ .o_write_trigger (),
17
+ .o_read_trigger (),
16
18
  .i_hw_write_enable (1'b0),
17
19
  .i_hw_write_data (<%= fill_0(width) %>),
18
20
  .i_hw_set (<%= fill_0(width) %>),
@@ -12,6 +12,8 @@ rggen_bit_field #(
12
12
  .i_sw_write_data (<%= bit_field_write_data %>),
13
13
  .o_sw_read_data (<%= bit_field_read_data %>),
14
14
  .o_sw_value (<%= bit_field_value %>),
15
+ .o_write_trigger (),
16
+ .o_read_trigger (),
15
17
  .i_hw_write_enable (1'b0),
16
18
  .i_hw_write_data (<%= fill_0(width) %>),
17
19
  .i_hw_set (<%= fill_0(width) %>),
@@ -0,0 +1,27 @@
1
+ rggen_bit_field #(
2
+ .WIDTH (<%= width %>),
3
+ .INITIAL_VALUE (<%= initial_value %>),
4
+ .SW_READ_ACTION (`RGGEN_READ_NONE),
5
+ .SW_WRITE_ONCE (<%= write_once %>),
6
+ .TRIGGER (<%= trigger %>)
7
+ ) u_bit_field (
8
+ .i_clk (<%= clock %>),
9
+ .i_rst_n (<%= reset %>),
10
+ .i_sw_valid (<%= bit_field_valid %>),
11
+ .i_sw_read_mask (<%= bit_field_read_mask %>),
12
+ .i_sw_write_enable (1'b1),
13
+ .i_sw_write_mask (<%= bit_field_write_mask %>),
14
+ .i_sw_write_data (<%= bit_field_write_data %>),
15
+ .o_sw_read_data (<%= bit_field_read_data %>),
16
+ .o_sw_value (<%= bit_field_value %>),
17
+ .o_write_trigger (<%= write_trigger_signal %>),
18
+ .o_read_trigger (),
19
+ .i_hw_write_enable (1'b0),
20
+ .i_hw_write_data (<%= fill_0(width) %>),
21
+ .i_hw_set (<%= fill_0(width) %>),
22
+ .i_hw_clear (<%= fill_0(width) %>),
23
+ .i_value (<%= fill_0(width) %>),
24
+ .i_mask (<%= fill_1(width) %>),
25
+ .o_value (<%= value_out[loop_variables] %>),
26
+ .o_value_unmasked ()
27
+ );
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, [:wo, :wo1, :wotrg]) do
4
+ verilog do
5
+ build do
6
+ output :value_out, {
7
+ name: "o_#{full_name}", width: width, array_size: array_size
8
+ }
9
+ if wotrg?
10
+ output :write_trigger, {
11
+ name: "o_#{full_name}_write_trigger", width: 1, array_size: array_size
12
+ }
13
+ end
14
+ end
15
+
16
+ main_code :bit_field, from_template: true
17
+
18
+ private
19
+
20
+ def wotrg?
21
+ bit_field.type == :wotrg
22
+ end
23
+
24
+ def write_once
25
+ bit_field.type == :wo1 && 1 || 0
26
+ end
27
+
28
+ def trigger
29
+ wotrg? && 1 || 0
30
+ end
31
+
32
+ def write_trigger_signal
33
+ wotrg? && write_trigger[loop_variables] || nil
34
+ end
35
+ end
36
+ end
@@ -12,6 +12,8 @@ rggen_bit_field #(
12
12
  .i_sw_write_data (<%= bit_field_write_data %>),
13
13
  .o_sw_read_data (<%= bit_field_read_data %>),
14
14
  .o_sw_value (<%= bit_field_value %>),
15
+ .o_write_trigger (),
16
+ .o_read_trigger (),
15
17
  .i_hw_write_enable (1'b0),
16
18
  .i_hw_write_data (<%= fill_0(width) %>),
17
19
  .i_hw_set (<%= fill_0(width) %>),
@@ -60,7 +60,7 @@ RgGen.define_simple_feature(:bit_field, :verilog_top) do
60
60
  if !bit_field.initial_value_array?
61
61
  sized_initial_value
62
62
  elsif bit_field.fixed_initial_value?
63
- concat(sized_initial_values)
63
+ merged_initial_values
64
64
  else
65
65
  repeat(bit_field.sequence_size, sized_initial_value)
66
66
  end
@@ -70,11 +70,13 @@ RgGen.define_simple_feature(:bit_field, :verilog_top) do
70
70
  hex(bit_field.register_map.initial_value, bit_field.width)
71
71
  end
72
72
 
73
- def sized_initial_values
74
- bit_field
75
- .initial_values
76
- .reverse
77
- .map { |v| hex(v, bit_field.width) }
73
+ def merged_initial_values
74
+ value =
75
+ bit_field
76
+ .initial_values
77
+ .map.with_index { |v, i| v << (i * bit_field.width) }
78
+ .inject(:|)
79
+ hex(value, bit_field.width * bit_field.sequence_size)
78
80
  end
79
81
 
80
82
  def loop_size
@@ -0,0 +1,35 @@
1
+ rggen_wishbone_adapter #(
2
+ .ADDRESS_WIDTH (<%= address_width %>),
3
+ .LOCAL_ADDRESS_WIDTH (<%= local_address_width %>),
4
+ .BUS_WIDTH (<%= bus_width %>),
5
+ .REGISTERS (<%= total_registers %>),
6
+ .PRE_DECODE (<%= pre_decode %>),
7
+ .BASE_ADDRESS (<%= base_address %>),
8
+ .BYTE_SIZE (<%= byte_size %>),
9
+ .ERROR_STATUS (<%= error_status %>),
10
+ .DEFAULT_READ_DATA (<%= default_read_data %>),
11
+ .USE_STALL (<%= use_stall %>)
12
+ ) u_adapter (
13
+ .i_clk (<%= register_block.clock %>),
14
+ .i_rst_n (<%= register_block.reset %>),
15
+ .i_wb_cyc (<%= wb_cyc %>),
16
+ .i_wb_stb (<%= wb_stb %>),
17
+ .o_wb_stall (<%= wb_stall %>),
18
+ .i_wb_adr (<%= wb_adr %>),
19
+ .i_wb_we (<%= wb_we %>),
20
+ .i_wb_dat (<%= wb_dat_i %>),
21
+ .i_wb_sel (<%= wb_sel %>),
22
+ .o_wb_ack (<%= wb_ack %>),
23
+ .o_wb_err (<%= wb_err %>),
24
+ .o_wb_rty (<%= wb_rty %>),
25
+ .o_wb_dat (<%= wb_dat_o %>),
26
+ .o_register_valid (<%= register_block.register_valid %>),
27
+ .o_register_access (<%= register_block.register_access %>),
28
+ .o_register_address (<%= register_block.register_address %>),
29
+ .o_register_write_data (<%= register_block.register_write_data %>),
30
+ .o_register_strobe (<%= register_block.register_strobe %>),
31
+ .i_register_active (<%= register_block.register_active %>),
32
+ .i_register_ready (<%= register_block.register_ready %>),
33
+ .i_register_status (<%= register_block.register_status %>),
34
+ .i_register_read_data (<%= register_block.register_read_data %>)
35
+ );
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:register_block, :protocol, :wishbone) do
4
+ verilog do
5
+ build do
6
+ parameter :use_stall, {
7
+ name: 'USE_STALL', default: 1
8
+ }
9
+
10
+ input :wb_cyc, {
11
+ name: 'i_wb_cyc', width: 1
12
+ }
13
+ input :wb_stb, {
14
+ name: 'i_wb_stb', width: 1
15
+ }
16
+ output :wb_stall, {
17
+ name: 'o_wb_stall', width: 1
18
+ }
19
+ input :wb_adr, {
20
+ name: 'i_wb_adr', width: address_width
21
+ }
22
+ input :wb_we, {
23
+ name: 'i_wb_we', width: 1
24
+ }
25
+ input :wb_dat_i, {
26
+ name: 'i_wb_dat', width: bus_width
27
+ }
28
+ input :wb_sel, {
29
+ name: 'i_wb_sel', width: bus_width / 8
30
+ }
31
+ output :wb_ack, {
32
+ name: 'o_wb_ack', width: 1
33
+ }
34
+ output :wb_err, {
35
+ name: 'o_wb_err', width: 1
36
+ }
37
+ output :wb_rty, {
38
+ name: 'o_wb_rty', width: 1
39
+ }
40
+ output :wb_dat_o, {
41
+ name: 'o_wb_dat', width: bus_width
42
+ }
43
+ end
44
+
45
+ main_code :register_block, from_template: true
46
+ end
47
+ end
@@ -88,7 +88,20 @@ RgGen.define_simple_feature(:register_block, :verilog_top) do
88
88
  end
89
89
 
90
90
  def ports
91
- register_block.declarations[:port]
91
+ register_block
92
+ .declarations[:port]
93
+ .yield_self(&method(:sort_port_declarations))
94
+ end
95
+
96
+ def sort_port_declarations(declarations)
97
+ declarations
98
+ .partition(&method(:clock_or_reset?))
99
+ .flatten
100
+ end
101
+
102
+ def clock_or_reset?(declaration)
103
+ [clock.to_s, reset.to_s]
104
+ .any? { |port_name| declaration.include?(port_name) }
92
105
  end
93
106
 
94
107
  def variables
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'rggen/verilog'
4
- require 'rggen/systemverilog/rtl/setup'
5
4
 
6
5
  RgGen.register_plugin RgGen::Verilog do |builder|
6
+ builder.load_plugin 'rggen/systemverilog/rtl/setup'
7
7
  builder.enable :register_block, [:verilog_top]
8
8
  builder.enable :register_file, [:verilog_top]
9
9
  builder.enable :register, [:verilog_top]
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module Verilog
5
- VERSION = '0.3.0'
5
+ VERSION = '0.4.0'
6
6
  end
7
7
  end
data/lib/rggen/verilog.rb CHANGED
@@ -21,16 +21,18 @@ module RgGen
21
21
  plugin.files [
22
22
  'verilog/bit_field/type',
23
23
  'verilog/bit_field/type/rc_w0c_w1c_wc_woc',
24
- 'verilog/bit_field/type/ro',
24
+ 'verilog/bit_field/type/ro_rotrg',
25
25
  'verilog/bit_field/type/rof',
26
+ 'verilog/bit_field/type/rowo_rowotrg',
26
27
  'verilog/bit_field/type/rs_w0s_w1s_ws_wos',
27
- 'verilog/bit_field/type/rw_w1_wo_wo1',
28
+ 'verilog/bit_field/type/rw_rwtrg_w1',
28
29
  'verilog/bit_field/type/rwc',
29
30
  'verilog/bit_field/type/rwe_rwl',
30
31
  'verilog/bit_field/type/rws',
31
32
  'verilog/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc',
32
33
  'verilog/bit_field/type/w0t_w1t',
33
34
  'verilog/bit_field/type/w0trg_w1trg',
35
+ 'verilog/bit_field/type/wo_wo1_wotrg',
34
36
  'verilog/bit_field/type/wrc_wrs',
35
37
  'verilog/bit_field/verilog_top',
36
38
  'verilog/register/type',
@@ -40,6 +42,7 @@ module RgGen
40
42
  'verilog/register_block/protocol',
41
43
  'verilog/register_block/protocol/apb',
42
44
  'verilog/register_block/protocol/axi4lite',
45
+ 'verilog/register_block/protocol/wishbone',
43
46
  'verilog/register_block/verilog_top',
44
47
  'verilog/register_file/verilog_top'
45
48
  ]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-verilog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-28 00:00:00.000000000 Z
11
+ date: 2022-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rggen-systemverilog
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 0.25.0
19
+ version: 0.26.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 0.25.0
26
+ version: 0.26.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -52,14 +52,16 @@ files:
52
52
  - lib/rggen/verilog/bit_field/type.rb
53
53
  - lib/rggen/verilog/bit_field/type/rc_w0c_w1c_wc_woc.erb
54
54
  - lib/rggen/verilog/bit_field/type/rc_w0c_w1c_wc_woc.rb
55
- - lib/rggen/verilog/bit_field/type/ro.erb
56
- - lib/rggen/verilog/bit_field/type/ro.rb
55
+ - lib/rggen/verilog/bit_field/type/ro_rotrg.erb
56
+ - lib/rggen/verilog/bit_field/type/ro_rotrg.rb
57
57
  - lib/rggen/verilog/bit_field/type/rof.erb
58
58
  - lib/rggen/verilog/bit_field/type/rof.rb
59
+ - lib/rggen/verilog/bit_field/type/rowo_rowotrg.erb
60
+ - lib/rggen/verilog/bit_field/type/rowo_rowotrg.rb
59
61
  - lib/rggen/verilog/bit_field/type/rs_w0s_w1s_ws_wos.erb
60
62
  - lib/rggen/verilog/bit_field/type/rs_w0s_w1s_ws_wos.rb
61
- - lib/rggen/verilog/bit_field/type/rw_w1_wo_wo1.erb
62
- - lib/rggen/verilog/bit_field/type/rw_w1_wo_wo1.rb
63
+ - lib/rggen/verilog/bit_field/type/rw_rwtrg_w1.erb
64
+ - lib/rggen/verilog/bit_field/type/rw_rwtrg_w1.rb
63
65
  - lib/rggen/verilog/bit_field/type/rwc.erb
64
66
  - lib/rggen/verilog/bit_field/type/rwc.rb
65
67
  - lib/rggen/verilog/bit_field/type/rwe_rwl.erb
@@ -72,6 +74,8 @@ files:
72
74
  - lib/rggen/verilog/bit_field/type/w0t_w1t.rb
73
75
  - lib/rggen/verilog/bit_field/type/w0trg_w1trg.erb
74
76
  - lib/rggen/verilog/bit_field/type/w0trg_w1trg.rb
77
+ - lib/rggen/verilog/bit_field/type/wo_wo1_wotrg.erb
78
+ - lib/rggen/verilog/bit_field/type/wo_wo1_wotrg.rb
75
79
  - lib/rggen/verilog/bit_field/type/wrc_wrs.erb
76
80
  - lib/rggen/verilog/bit_field/type/wrc_wrs.rb
77
81
  - lib/rggen/verilog/bit_field/verilog_top.rb
@@ -90,6 +94,8 @@ files:
90
94
  - lib/rggen/verilog/register_block/protocol/apb.rb
91
95
  - lib/rggen/verilog/register_block/protocol/axi4lite.erb
92
96
  - lib/rggen/verilog/register_block/protocol/axi4lite.rb
97
+ - lib/rggen/verilog/register_block/protocol/wishbone.erb
98
+ - lib/rggen/verilog/register_block/protocol/wishbone.rb
93
99
  - lib/rggen/verilog/register_block/verilog_macros.erb
94
100
  - lib/rggen/verilog/register_block/verilog_top.rb
95
101
  - lib/rggen/verilog/register_file/verilog_top.rb
@@ -103,6 +109,7 @@ licenses:
103
109
  metadata:
104
110
  bug_tracker_uri: https://github.com/rggen/rggen-verilog/issues
105
111
  mailing_list_uri: https://groups.google.com/d/forum/rggen
112
+ rubygems_mfa_required: 'true'
106
113
  source_code_uri: https://github.com/rggen/rggen-verilog
107
114
  wiki_uri: https://github.com/rggen/rggen/wiki
108
115
  post_install_message:
@@ -113,15 +120,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
113
120
  requirements:
114
121
  - - ">="
115
122
  - !ruby/object:Gem::Version
116
- version: '2.5'
123
+ version: '2.6'
117
124
  required_rubygems_version: !ruby/object:Gem::Requirement
118
125
  requirements:
119
126
  - - ">="
120
127
  - !ruby/object:Gem::Version
121
128
  version: '0'
122
129
  requirements: []
123
- rubygems_version: 3.2.3
130
+ rubygems_version: 3.3.3
124
131
  signing_key:
125
132
  specification_version: 4
126
- summary: rggen-verilog-0.3.0
133
+ summary: rggen-verilog-0.4.0
127
134
  test_files: []
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- RgGen.define_list_item_feature(:bit_field, :type, :ro) do
4
- verilog do
5
- build do
6
- unless bit_field.reference?
7
- input :value_in, {
8
- name: "i_#{full_name}", width: width, array_size: array_size
9
- }
10
- end
11
- end
12
-
13
- main_code :bit_field, from_template: true
14
-
15
- private
16
-
17
- def reference_or_value_in
18
- bit_field.reference? && reference_bit_field || value_in[loop_variables]
19
- end
20
- end
21
- end
@@ -1,23 +0,0 @@
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 read_action
16
- bit_field.readable? && '`RGGEN_READ_DEFAULT' || '`RGGEN_READ_NONE'
17
- end
18
-
19
- def write_once
20
- [:w1, :wo1].include?(bit_field.type) && 1 || 0
21
- end
22
- end
23
- end