rggen-verilog 0.3.1 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (31) 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 +2 -0
  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/type/default.erb +0 -1
  23. data/lib/rggen/verilog/register/type/indirect.erb +0 -1
  24. data/lib/rggen/verilog/register/type.rb +12 -0
  25. data/lib/rggen/verilog/register_block/protocol/wishbone.erb +35 -0
  26. data/lib/rggen/verilog/register_block/protocol/wishbone.rb +47 -0
  27. data/lib/rggen/verilog/version.rb +1 -1
  28. data/lib/rggen/verilog.rb +5 -2
  29. metadata +18 -11
  30. data/lib/rggen/verilog/bit_field/type/ro.rb +0 -21
  31. 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: 7071aa165eea26e8fc35de9ce6fd6a026aa5def4b29075d709f2d3db6ad74f89
4
- data.tar.gz: e805e0399138162446f3e5d3ea5b49a95b15167792acf650f142a14d9f3f53a3
3
+ metadata.gz: 69bdb147ee2667a46190e137d12ddb6846ebd91465e7bc6e5cb2b352a6cbbb15
4
+ data.tar.gz: 8e799e3a709c59913b267d05155eb00383c780764ecd6fc57e4a556b274fc752
5
5
  SHA512:
6
- metadata.gz: fc56d7ab4db650083dd5f7269e29c0341095a37bf1230b3f0d469ae78eaee6f8422fe868240017fa327502d1f6e497da4aec643c5e10a9d1dceaa37e0f5dbf53
7
- data.tar.gz: e285f84c954580f58eabed0e40a709d9bf1f76e3b2f96cafc8588f0807aecd379d983e621eb9e21c80a8b8eaaf60eaaa79998aa7d3cf2b783ba8c2c28981c84f
6
+ metadata.gz: bdb1c0c8bb75d07d4437cd206af4287c4cdb7e6651ec0d2e3e5f1a33a3a2b433ec3dad571a4788d3c4d3284b2d9f5901fe8759e1ae5f0ce912312c0f3ab2a4ae
7
+ data.tar.gz: e0020b2c399628bbf6263f2f3f2051204d9e72546fe35fd3df8b3f7947e445e0513fa09c4aaaa5686935b06b287545378a05e506310c4c240cee355a91cfdcd5
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,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) %>),
@@ -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
@@ -5,7 +5,6 @@ rggen_default_register #(
5
5
  .OFFSET_ADDRESS (<%= offset_address %>),
6
6
  .BUS_WIDTH (<%= bus_width %>),
7
7
  .DATA_WIDTH (<%= width %>),
8
- .VALID_BITS (<%= valid_bits %>),
9
8
  .REGISTER_INDEX (<%= register_index %>)
10
9
  ) u_register (
11
10
  .i_clk (<%= clock %>),
@@ -5,7 +5,6 @@ rggen_indirect_register #(
5
5
  .OFFSET_ADDRESS (<%= offset_address %>),
6
6
  .BUS_WIDTH (<%= bus_width %>),
7
7
  .DATA_WIDTH (<%= width %>),
8
- .VALID_BITS (<%= valid_bits %>),
9
8
  .INDIRECT_INDEX_WIDTH (<%= index_width %>),
10
9
  .INDIRECT_INDEX_VALUE (<%= concat(index_values) %>)
11
10
  ) u_register (
@@ -5,6 +5,11 @@ RgGen.define_list_feature(:register, :type) do
5
5
  base_feature do
6
6
  include RgGen::SystemVerilog::RTL::RegisterType
7
7
 
8
+ pre_code :register do |code|
9
+ register.bit_fields.empty? ||
10
+ (code << tie_off_unused_signals << nl)
11
+ end
12
+
8
13
  private
9
14
 
10
15
  def clock
@@ -78,6 +83,13 @@ RgGen.define_list_feature(:register, :type) do
78
83
  def bit_field_value
79
84
  register.bit_field_value
80
85
  end
86
+
87
+ def tie_off_unused_signals
88
+ macro_call(
89
+ 'rggen_tie_off_unused_signals',
90
+ [width, valid_bits, bit_field_read_data, bit_field_value]
91
+ )
92
+ end
81
93
  end
82
94
 
83
95
  default_feature do
@@ -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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module Verilog
5
- VERSION = '0.3.1'
5
+ VERSION = '0.4.1'
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.1
4
+ version: 0.4.1
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-05-16 00:00:00.000000000 Z
11
+ date: 2022-06-07 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.1
133
+ summary: rggen-verilog-0.4.1
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