rggen-verilog 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) 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 → rtl/bit_field}/type/custom.erb +0 -0
  5. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/custom.rb +1 -1
  6. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rc_w0c_w1c_wc_woc.erb +0 -0
  7. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rc_w0c_w1c_wc_woc.rb +1 -1
  8. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/ro_rotrg.erb +0 -0
  9. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/ro_rotrg.rb +1 -1
  10. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rof.erb +0 -0
  11. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rof.rb +1 -1
  12. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rol.erb +0 -0
  13. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rol.rb +1 -1
  14. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/row0trg_row1trg.erb +0 -0
  15. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/row0trg_row1trg.rb +1 -1
  16. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rowo_rowotrg.erb +0 -0
  17. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rowo_rowotrg.rb +1 -1
  18. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rs_w0s_w1s_ws_wos.erb +0 -0
  19. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rs_w0s_w1s_ws_wos.rb +1 -1
  20. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rw_rwtrg_w1.erb +0 -0
  21. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rw_rwtrg_w1.rb +1 -1
  22. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rwc.erb +0 -0
  23. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rwc.rb +1 -1
  24. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rwe_rwl.erb +0 -0
  25. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rwe_rwl.rb +1 -1
  26. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rws.erb +0 -0
  27. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/rws.rb +1 -1
  28. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.erb +0 -0
  29. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.rb +1 -1
  30. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/w0t_w1t.erb +0 -0
  31. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/w0t_w1t.rb +1 -1
  32. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/w0trg_w1trg.erb +0 -0
  33. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/w0trg_w1trg.rb +1 -1
  34. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/wo_wo1_wotrg.erb +0 -0
  35. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/wo_wo1_wotrg.rb +1 -1
  36. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/wrc_wrs.erb +0 -0
  37. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type/wrc_wrs.rb +1 -1
  38. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/type.rb +1 -1
  39. data/lib/rggen/verilog/{bit_field → rtl/bit_field}/verilog_top.rb +1 -1
  40. data/lib/rggen/verilog/rtl/component.rb +9 -0
  41. data/lib/rggen/verilog/rtl/feature.rb +37 -0
  42. data/lib/rggen/verilog/{register → rtl/register}/type/default.erb +0 -0
  43. data/lib/rggen/verilog/{register → rtl/register}/type/external.erb +0 -0
  44. data/lib/rggen/verilog/{register → rtl/register}/type/external.rb +1 -1
  45. data/lib/rggen/verilog/{register → rtl/register}/type/indirect.erb +0 -0
  46. data/lib/rggen/verilog/{register → rtl/register}/type/indirect.rb +1 -1
  47. data/lib/rggen/verilog/{register → rtl/register}/type.rb +1 -1
  48. data/lib/rggen/verilog/{register → rtl/register}/verilog_top.rb +1 -1
  49. data/lib/rggen/verilog/{register_block → rtl/register_block}/protocol/apb.erb +0 -0
  50. data/lib/rggen/verilog/{register_block → rtl/register_block}/protocol/apb.rb +1 -1
  51. data/lib/rggen/verilog/{register_block → rtl/register_block}/protocol/axi4lite.erb +0 -0
  52. data/lib/rggen/verilog/{register_block → rtl/register_block}/protocol/axi4lite.rb +1 -1
  53. data/lib/rggen/verilog/{register_block → rtl/register_block}/protocol/wishbone.erb +0 -0
  54. data/lib/rggen/verilog/{register_block → rtl/register_block}/protocol/wishbone.rb +1 -1
  55. data/lib/rggen/verilog/{register_block → rtl/register_block}/protocol.rb +1 -1
  56. data/lib/rggen/verilog/{register_block → rtl/register_block}/verilog_macros.erb +0 -0
  57. data/lib/rggen/verilog/{register_block → rtl/register_block}/verilog_top.rb +1 -1
  58. data/lib/rggen/verilog/{register_file → rtl/register_file}/verilog_top.rb +1 -1
  59. data/lib/rggen/verilog/rtl_header/bit_field/verilog_rtl_header.rb +31 -0
  60. data/lib/rggen/verilog/rtl_header/component.rb +13 -0
  61. data/lib/rggen/verilog/rtl_header/feature.rb +26 -0
  62. data/lib/rggen/verilog/rtl_header/register/verilog_rtl_header.rb +62 -0
  63. data/lib/rggen/verilog/rtl_header/register_block/verilog_rtl_header.rb +10 -0
  64. data/lib/rggen/verilog/version.rb +1 -1
  65. data/lib/rggen/verilog.rb +49 -34
  66. metadata +67 -62
  67. data/lib/rggen/verilog/component.rb +0 -7
  68. data/lib/rggen/verilog/feature.rb +0 -35
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d2331d0936befbf916933eba253c1c47f0c4550e6bdbdf6e3905b629256e7a3c
4
- data.tar.gz: 11c778698a897a4f3362fc8123bda08b77654de08b1ac533915a5f846fad3884
3
+ metadata.gz: e74fcb34c71a5d9cdfa75d2ce6ee033ef65550e5cf3a225c2357d5e9beb2905f
4
+ data.tar.gz: 7a109f65cbaddd4abe24ee50e0cefde064e1b4f8036294d66e8ab5d770e5a67a
5
5
  SHA512:
6
- metadata.gz: 1cf7e45a00cc5c333393ae18a09acacc262dfecebb8c2d3d7a2de6633de1da9f1c71dafca41bae4732097888ca421c16ae43df0563583265f9e641d96251fe2f
7
- data.tar.gz: 5a61bd68a631f85e8aaa9ab666a72ac366c1d979479638cad454a6b28ff5de36892c02f1fb37d902cb6aab9a75f606050538c9a5e1001db53e2179e3f0236fe7
6
+ metadata.gz: 8b55c739e1a881baee014a5bc73521ba6066eb13a2a38e72b016e4debfaab4e4b6417e80ce11643e3350fda393a6f77d469c0d7758c77876bcb12bf4266ed66f
7
+ data.tar.gz: c507b06be435d72c0c22633b9bbd756427dfa921ed50d78ff6dfe8de64aca7b623be5d114ff1047d4ebb448628ea300bbcaf24319ef0655a5519d6f2bb8a75e4
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020-2022 Taichi Ishitani
3
+ Copyright (c) 2020-2023 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
@@ -68,7 +68,7 @@ Feedbacks, bus reports, questions and etc. are welcome! You can post them bu usi
68
68
 
69
69
  ## Copyright & License
70
70
 
71
- 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
+ Copyright © 2020-2023 Taichi Ishitani. RgGen::Verilog is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
72
72
 
73
73
  ## Code of Conduct
74
74
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, :custom) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  if external_read_data?
7
7
  input :value_in, {
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, [:rc, :w0c, :w1c, :wc, :woc]) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  input :set, {
7
7
  name: "i_#{full_name}_set", width: width, array_size: array_size
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, [:ro, :rotrg]) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  unless bit_field.reference?
7
7
  input :value_in, {
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, :rof) do
4
- verilog do
4
+ verilog_rtl do
5
5
  main_code :bit_field, from_template: true
6
6
  end
7
7
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, :rol) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  unless bit_field.reference?
7
7
  input :latch, {
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, [:row0trg, :row1trg]) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  unless bit_field.reference?
7
7
  input :value_in, {
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, [:rowo, :rowotrg]) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  output :value_out, {
7
7
  name: "o_#{full_name}", width: width, array_size: array_size
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, [:rs, :w0s, :w1s, :ws, :wos]) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  input :clear, {
7
7
  name: "i_#{full_name}_clear", width: width, array_size: array_size
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, [:rw, :rwtrg, :w1]) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  output :value_out, {
7
7
  name: "o_#{full_name}", width: width, array_size: array_size
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, :rwc) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  unless bit_field.reference?
7
7
  input :clear, {
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, [:rwe, :rwl]) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  unless bit_field.reference?
7
7
  input :control, {
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, :rws) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  unless bit_field.reference?
7
7
  input :set, {
@@ -3,7 +3,7 @@
3
3
  RgGen.define_list_item_feature(
4
4
  :bit_field, :type, [:w0crs, :w0src, :w1crs, :w1src, :wcrs, :wsrc]
5
5
  ) do
6
- verilog do
6
+ verilog_rtl do
7
7
  build do
8
8
  output :value_out, {
9
9
  name: "o_#{full_name}", width: width, array_size: array_size
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, [:w0t, :w1t]) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  output :value_out, {
7
7
  name: "o_#{full_name}", width: width, array_size: array_size
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, [:w0trg, :w1trg]) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  output :trigger, {
7
7
  name: "o_#{full_name}_trigger", width: width, array_size: array_size
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, [:wo, :wo1, :wotrg]) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  output :value_out, {
7
7
  name: "o_#{full_name}", width: width, array_size: array_size
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:bit_field, :type, [:wrc, :wrs]) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  output :value_out, {
7
7
  name: "o_#{full_name}", width: width, array_size: array_size
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_feature(:bit_field, :type) do
4
- verilog do
4
+ verilog_rtl do
5
5
  base_feature do
6
6
  private
7
7
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_simple_feature(:bit_field, :verilog_top) do
4
- verilog do
4
+ verilog_rtl do
5
5
  include RgGen::SystemVerilog::RTL::BitFieldIndex
6
6
 
7
7
  export :initial_value
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module Verilog
5
+ module RTL
6
+ Component = SystemVerilog::Common::Component
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module Verilog
5
+ module RTL
6
+ class Feature < SystemVerilog::RTL::Feature
7
+ include Utility
8
+
9
+ private
10
+
11
+ def create_variable(data_type, attributes, &block)
12
+ attributes = attributes.merge(array_format: :serialized)
13
+ super
14
+ end
15
+
16
+ def create_port(direction, attributes, &block)
17
+ attributes =
18
+ attributes
19
+ .except(:data_type)
20
+ .merge(direction: direction, array_format: :serialized)
21
+ DataObject.new(:argument, attributes, &block)
22
+ end
23
+
24
+ def create_parameter(parameter_type, attributes, &block)
25
+ attributes = attributes.merge(array_format: :serialized)
26
+ super
27
+ end
28
+
29
+ define_entity :wire, :create_variable, :variable, -> { component }
30
+
31
+ undef_method :interface
32
+ undef_method :interface_port
33
+ undef_method :localparam
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:register, :type, :external) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  output :external_valid, {
7
7
  name: "o_#{register.name}_valid", width: 1
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:register, :type, :indirect) do
4
- verilog do
4
+ verilog_rtl do
5
5
  include RgGen::SystemVerilog::RTL::IndirectIndex
6
6
 
7
7
  build do
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_feature(:register, :type) do
4
- verilog do
4
+ verilog_rtl do
5
5
  base_feature do
6
6
  include RgGen::SystemVerilog::RTL::RegisterType
7
7
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_simple_feature(:register, :verilog_top) do
4
- verilog do
4
+ verilog_rtl do
5
5
  include RgGen::SystemVerilog::RTL::RegisterIndex
6
6
 
7
7
  build do
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:register_block, :protocol, :apb) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  input :psel, {
7
7
  name: 'i_psel', width: 1
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:register_block, :protocol, :axi4lite) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  parameter :id_width, {
7
7
  name: 'ID_WIDTH', default: 0
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_item_feature(:register_block, :protocol, :wishbone) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  parameter :use_stall, {
7
7
  name: 'USE_STALL', default: 1
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_list_feature(:register_block, :protocol) do
4
- verilog do
4
+ verilog_rtl do
5
5
  shared_context.feature_registry(registry)
6
6
 
7
7
  base_feature do
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_simple_feature(:register_block, :verilog_top) do
4
- verilog do
4
+ verilog_rtl do
5
5
  build do
6
6
  input :clock, {
7
7
  name: 'i_clk', width: 1
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  RgGen.define_simple_feature(:register_file, :verilog_top) do
4
- verilog do
4
+ verilog_rtl do
5
5
  include RgGen::SystemVerilog::RTL::RegisterIndex
6
6
 
7
7
  main_code :register_file do
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_simple_feature(:bit_field, :verilog_rtl_header) do
4
+ verilog_rtl_header do
5
+ build do
6
+ define_macro("#{full_name}_bit_width", width)
7
+ define_macro("#{full_name}_bit_mask", mask)
8
+ define_offset_macro
9
+ end
10
+
11
+ private
12
+
13
+ def width
14
+ bit_field.width
15
+ end
16
+
17
+ def mask
18
+ hex((1 << width) - 1, width)
19
+ end
20
+
21
+ def define_offset_macro
22
+ if bit_field.sequential?
23
+ bit_field.sequence_size.times do |i|
24
+ define_macro("#{full_name}_bit_offset_#{i}", bit_field.lsb(i))
25
+ end
26
+ else
27
+ define_macro("#{full_name}_bit_offset", bit_field.lsb)
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module Verilog
5
+ module RTLHeader
6
+ class Component < SystemVerilog::Common::Component
7
+ def macro_definitions
8
+ [*@children, *@features.values].flat_map(&:macro_definitions)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module Verilog
5
+ module RTLHeader
6
+ class Feature < SystemVerilog::RTL::Feature
7
+ include Utility
8
+
9
+ def macro_definitions
10
+ @macro_definitions ||= []
11
+ end
12
+
13
+ private
14
+
15
+ def define_macro(name, value)
16
+ macro_definitions <<
17
+ Core::Utility::CodeUtility::MacroDefinition.new(name.upcase, value)
18
+ end
19
+
20
+ def full_name(separator = '_')
21
+ [register_block.name, component.full_name(separator)].join(separator)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_simple_feature(:register, :verilog_rtl_header) do
4
+ verilog_rtl_header do
5
+ build do
6
+ define_macro("#{full_name}_byte_width", byte_width)
7
+ define_macro("#{full_name}_byte_size", byte_size)
8
+ define_array_macros if array?
9
+ define_offset_address_macros
10
+ end
11
+
12
+ private
13
+
14
+ def byte_width
15
+ register.byte_width
16
+ end
17
+
18
+ def byte_size
19
+ register.byte_size(hierarchical: true)
20
+ end
21
+
22
+ def array?
23
+ register.array?(hierarchical: true)
24
+ end
25
+
26
+ def array_size
27
+ register.array_size(hierarchical: true)
28
+ end
29
+
30
+ def define_array_macros
31
+ size_list = array_size
32
+ define_macro("#{full_name}_array_dimension", size_list.size)
33
+ size_list.each_with_index do |size, i|
34
+ define_macro("#{full_name}_array_size_#{i}", size)
35
+ end
36
+ end
37
+
38
+ def define_offset_address_macros
39
+ if array?
40
+ address_list.zip(array_suffix) do |address, suffix|
41
+ define_macro("#{full_name}_byte_offset_#{suffix}", address)
42
+ end
43
+ else
44
+ define_macro("#{full_name}_byte_offset", address_list.first)
45
+ end
46
+ end
47
+
48
+ def address_list
49
+ width = register_block.local_address_width
50
+ register
51
+ .expanded_offset_addresses
52
+ .map { |address| hex(address, width) }
53
+ end
54
+
55
+ def array_suffix
56
+ array_size
57
+ .map { |size| (0...size).to_a }
58
+ .then { |list| list.first.product(*list[1..]) }
59
+ .map { |list| list.join('_') }
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_simple_feature(:register_block, :verilog_rtl_header) do
4
+ verilog_rtl_header do
5
+ write_file '<%= register_block.name %>.vh' do |f|
6
+ f.include_guard
7
+ f.macro_definitions register_block.macro_definitions
8
+ end
9
+ end
10
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module Verilog
5
- VERSION = '0.6.0'
5
+ VERSION = '0.7.0'
6
6
  end
7
7
  end
data/lib/rggen/verilog.rb CHANGED
@@ -4,49 +4,64 @@ require 'rggen/systemverilog/rtl'
4
4
  require_relative 'verilog/version'
5
5
  require_relative 'verilog/utility/local_scope'
6
6
  require_relative 'verilog/utility'
7
- require_relative 'verilog/component'
8
- require_relative 'verilog/feature'
7
+ require_relative 'verilog/rtl/component'
8
+ require_relative 'verilog/rtl/feature'
9
+ require_relative 'verilog/rtl_header/component'
10
+ require_relative 'verilog/rtl_header/feature'
9
11
  require_relative 'verilog/factories'
10
12
 
11
13
  RgGen.setup_plugin :'rggen-verilog' do |plugin|
12
14
  plugin.version RgGen::Verilog::VERSION
13
15
 
14
- plugin.register_component :verilog do
15
- component RgGen::Verilog::Component,
16
+ plugin.register_component :verilog_rtl do
17
+ component RgGen::Verilog::RTL::Component,
16
18
  RgGen::Verilog::ComponentFactory
17
- feature RgGen::Verilog::Feature,
19
+ feature RgGen::Verilog::RTL::Feature,
18
20
  RgGen::Verilog::FeatureFactory
19
21
  end
20
22
 
21
23
  plugin.files [
22
- 'verilog/register_block/verilog_top',
23
- 'verilog/register_block/protocol',
24
- 'verilog/register_block/protocol/apb',
25
- 'verilog/register_block/protocol/axi4lite',
26
- 'verilog/register_block/protocol/wishbone',
27
- 'verilog/register_file/verilog_top',
28
- 'verilog/register/verilog_top',
29
- 'verilog/register/type',
30
- 'verilog/register/type/external',
31
- 'verilog/register/type/indirect',
32
- 'verilog/bit_field/verilog_top',
33
- 'verilog/bit_field/type',
34
- 'verilog/bit_field/type/custom',
35
- 'verilog/bit_field/type/rc_w0c_w1c_wc_woc',
36
- 'verilog/bit_field/type/ro_rotrg',
37
- 'verilog/bit_field/type/rof',
38
- 'verilog/bit_field/type/rol',
39
- 'verilog/bit_field/type/row0trg_row1trg',
40
- 'verilog/bit_field/type/rowo_rowotrg',
41
- 'verilog/bit_field/type/rs_w0s_w1s_ws_wos',
42
- 'verilog/bit_field/type/rw_rwtrg_w1',
43
- 'verilog/bit_field/type/rwc',
44
- 'verilog/bit_field/type/rwe_rwl',
45
- 'verilog/bit_field/type/rws',
46
- 'verilog/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc',
47
- 'verilog/bit_field/type/w0t_w1t',
48
- 'verilog/bit_field/type/w0trg_w1trg',
49
- 'verilog/bit_field/type/wo_wo1_wotrg',
50
- 'verilog/bit_field/type/wrc_wrs'
24
+ 'verilog/rtl/register_block/verilog_top',
25
+ 'verilog/rtl/register_block/protocol',
26
+ 'verilog/rtl/register_block/protocol/apb',
27
+ 'verilog/rtl/register_block/protocol/axi4lite',
28
+ 'verilog/rtl/register_block/protocol/wishbone',
29
+ 'verilog/rtl/register_file/verilog_top',
30
+ 'verilog/rtl/register/verilog_top',
31
+ 'verilog/rtl/register/type',
32
+ 'verilog/rtl/register/type/external',
33
+ 'verilog/rtl/register/type/indirect',
34
+ 'verilog/rtl/bit_field/verilog_top',
35
+ 'verilog/rtl/bit_field/type',
36
+ 'verilog/rtl/bit_field/type/custom',
37
+ 'verilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc',
38
+ 'verilog/rtl/bit_field/type/ro_rotrg',
39
+ 'verilog/rtl/bit_field/type/rof',
40
+ 'verilog/rtl/bit_field/type/rol',
41
+ 'verilog/rtl/bit_field/type/row0trg_row1trg',
42
+ 'verilog/rtl/bit_field/type/rowo_rowotrg',
43
+ 'verilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos',
44
+ 'verilog/rtl/bit_field/type/rw_rwtrg_w1',
45
+ 'verilog/rtl/bit_field/type/rwc',
46
+ 'verilog/rtl/bit_field/type/rwe_rwl',
47
+ 'verilog/rtl/bit_field/type/rws',
48
+ 'verilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc',
49
+ 'verilog/rtl/bit_field/type/w0t_w1t',
50
+ 'verilog/rtl/bit_field/type/w0trg_w1trg',
51
+ 'verilog/rtl/bit_field/type/wo_wo1_wotrg',
52
+ 'verilog/rtl/bit_field/type/wrc_wrs'
53
+ ]
54
+
55
+ plugin.register_component :verilog_rtl_header do
56
+ component RgGen::Verilog::RTLHeader::Component,
57
+ RgGen::Verilog::ComponentFactory
58
+ feature RgGen::Verilog::RTLHeader::Feature,
59
+ RgGen::Verilog::FeatureFactory
60
+ end
61
+
62
+ plugin.files [
63
+ 'verilog/rtl_header/bit_field/verilog_rtl_header',
64
+ 'verilog/rtl_header/register/verilog_rtl_header',
65
+ 'verilog/rtl_header/register_block/verilog_rtl_header'
51
66
  ]
52
67
  end
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.6.0
4
+ version: 0.7.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: 2022-10-10 00:00:00.000000000 Z
11
+ date: 2023-01-02 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.28.0
19
+ version: 0.29.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.28.0
26
+ version: 0.29.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -49,62 +49,67 @@ files:
49
49
  - LICENSE
50
50
  - README.md
51
51
  - lib/rggen/verilog.rb
52
- - lib/rggen/verilog/bit_field/type.rb
53
- - lib/rggen/verilog/bit_field/type/custom.erb
54
- - lib/rggen/verilog/bit_field/type/custom.rb
55
- - lib/rggen/verilog/bit_field/type/rc_w0c_w1c_wc_woc.erb
56
- - lib/rggen/verilog/bit_field/type/rc_w0c_w1c_wc_woc.rb
57
- - lib/rggen/verilog/bit_field/type/ro_rotrg.erb
58
- - lib/rggen/verilog/bit_field/type/ro_rotrg.rb
59
- - lib/rggen/verilog/bit_field/type/rof.erb
60
- - lib/rggen/verilog/bit_field/type/rof.rb
61
- - lib/rggen/verilog/bit_field/type/rol.erb
62
- - lib/rggen/verilog/bit_field/type/rol.rb
63
- - lib/rggen/verilog/bit_field/type/row0trg_row1trg.erb
64
- - lib/rggen/verilog/bit_field/type/row0trg_row1trg.rb
65
- - lib/rggen/verilog/bit_field/type/rowo_rowotrg.erb
66
- - lib/rggen/verilog/bit_field/type/rowo_rowotrg.rb
67
- - lib/rggen/verilog/bit_field/type/rs_w0s_w1s_ws_wos.erb
68
- - lib/rggen/verilog/bit_field/type/rs_w0s_w1s_ws_wos.rb
69
- - lib/rggen/verilog/bit_field/type/rw_rwtrg_w1.erb
70
- - lib/rggen/verilog/bit_field/type/rw_rwtrg_w1.rb
71
- - lib/rggen/verilog/bit_field/type/rwc.erb
72
- - lib/rggen/verilog/bit_field/type/rwc.rb
73
- - lib/rggen/verilog/bit_field/type/rwe_rwl.erb
74
- - lib/rggen/verilog/bit_field/type/rwe_rwl.rb
75
- - lib/rggen/verilog/bit_field/type/rws.erb
76
- - lib/rggen/verilog/bit_field/type/rws.rb
77
- - lib/rggen/verilog/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.erb
78
- - lib/rggen/verilog/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.rb
79
- - lib/rggen/verilog/bit_field/type/w0t_w1t.erb
80
- - lib/rggen/verilog/bit_field/type/w0t_w1t.rb
81
- - lib/rggen/verilog/bit_field/type/w0trg_w1trg.erb
82
- - lib/rggen/verilog/bit_field/type/w0trg_w1trg.rb
83
- - lib/rggen/verilog/bit_field/type/wo_wo1_wotrg.erb
84
- - lib/rggen/verilog/bit_field/type/wo_wo1_wotrg.rb
85
- - lib/rggen/verilog/bit_field/type/wrc_wrs.erb
86
- - lib/rggen/verilog/bit_field/type/wrc_wrs.rb
87
- - lib/rggen/verilog/bit_field/verilog_top.rb
88
- - lib/rggen/verilog/component.rb
89
52
  - lib/rggen/verilog/factories.rb
90
- - lib/rggen/verilog/feature.rb
91
- - lib/rggen/verilog/register/type.rb
92
- - lib/rggen/verilog/register/type/default.erb
93
- - lib/rggen/verilog/register/type/external.erb
94
- - lib/rggen/verilog/register/type/external.rb
95
- - lib/rggen/verilog/register/type/indirect.erb
96
- - lib/rggen/verilog/register/type/indirect.rb
97
- - lib/rggen/verilog/register/verilog_top.rb
98
- - lib/rggen/verilog/register_block/protocol.rb
99
- - lib/rggen/verilog/register_block/protocol/apb.erb
100
- - lib/rggen/verilog/register_block/protocol/apb.rb
101
- - lib/rggen/verilog/register_block/protocol/axi4lite.erb
102
- - lib/rggen/verilog/register_block/protocol/axi4lite.rb
103
- - lib/rggen/verilog/register_block/protocol/wishbone.erb
104
- - lib/rggen/verilog/register_block/protocol/wishbone.rb
105
- - lib/rggen/verilog/register_block/verilog_macros.erb
106
- - lib/rggen/verilog/register_block/verilog_top.rb
107
- - lib/rggen/verilog/register_file/verilog_top.rb
53
+ - lib/rggen/verilog/rtl/bit_field/type.rb
54
+ - lib/rggen/verilog/rtl/bit_field/type/custom.erb
55
+ - lib/rggen/verilog/rtl/bit_field/type/custom.rb
56
+ - lib/rggen/verilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.erb
57
+ - lib/rggen/verilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.rb
58
+ - lib/rggen/verilog/rtl/bit_field/type/ro_rotrg.erb
59
+ - lib/rggen/verilog/rtl/bit_field/type/ro_rotrg.rb
60
+ - lib/rggen/verilog/rtl/bit_field/type/rof.erb
61
+ - lib/rggen/verilog/rtl/bit_field/type/rof.rb
62
+ - lib/rggen/verilog/rtl/bit_field/type/rol.erb
63
+ - lib/rggen/verilog/rtl/bit_field/type/rol.rb
64
+ - lib/rggen/verilog/rtl/bit_field/type/row0trg_row1trg.erb
65
+ - lib/rggen/verilog/rtl/bit_field/type/row0trg_row1trg.rb
66
+ - lib/rggen/verilog/rtl/bit_field/type/rowo_rowotrg.erb
67
+ - lib/rggen/verilog/rtl/bit_field/type/rowo_rowotrg.rb
68
+ - lib/rggen/verilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos.erb
69
+ - lib/rggen/verilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos.rb
70
+ - lib/rggen/verilog/rtl/bit_field/type/rw_rwtrg_w1.erb
71
+ - lib/rggen/verilog/rtl/bit_field/type/rw_rwtrg_w1.rb
72
+ - lib/rggen/verilog/rtl/bit_field/type/rwc.erb
73
+ - lib/rggen/verilog/rtl/bit_field/type/rwc.rb
74
+ - lib/rggen/verilog/rtl/bit_field/type/rwe_rwl.erb
75
+ - lib/rggen/verilog/rtl/bit_field/type/rwe_rwl.rb
76
+ - lib/rggen/verilog/rtl/bit_field/type/rws.erb
77
+ - lib/rggen/verilog/rtl/bit_field/type/rws.rb
78
+ - lib/rggen/verilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.erb
79
+ - lib/rggen/verilog/rtl/bit_field/type/w0crs_w0src_w1crs_w1src_wcrs_wsrc.rb
80
+ - lib/rggen/verilog/rtl/bit_field/type/w0t_w1t.erb
81
+ - lib/rggen/verilog/rtl/bit_field/type/w0t_w1t.rb
82
+ - lib/rggen/verilog/rtl/bit_field/type/w0trg_w1trg.erb
83
+ - lib/rggen/verilog/rtl/bit_field/type/w0trg_w1trg.rb
84
+ - lib/rggen/verilog/rtl/bit_field/type/wo_wo1_wotrg.erb
85
+ - lib/rggen/verilog/rtl/bit_field/type/wo_wo1_wotrg.rb
86
+ - lib/rggen/verilog/rtl/bit_field/type/wrc_wrs.erb
87
+ - lib/rggen/verilog/rtl/bit_field/type/wrc_wrs.rb
88
+ - lib/rggen/verilog/rtl/bit_field/verilog_top.rb
89
+ - lib/rggen/verilog/rtl/component.rb
90
+ - lib/rggen/verilog/rtl/feature.rb
91
+ - lib/rggen/verilog/rtl/register/type.rb
92
+ - lib/rggen/verilog/rtl/register/type/default.erb
93
+ - lib/rggen/verilog/rtl/register/type/external.erb
94
+ - lib/rggen/verilog/rtl/register/type/external.rb
95
+ - lib/rggen/verilog/rtl/register/type/indirect.erb
96
+ - lib/rggen/verilog/rtl/register/type/indirect.rb
97
+ - lib/rggen/verilog/rtl/register/verilog_top.rb
98
+ - lib/rggen/verilog/rtl/register_block/protocol.rb
99
+ - lib/rggen/verilog/rtl/register_block/protocol/apb.erb
100
+ - lib/rggen/verilog/rtl/register_block/protocol/apb.rb
101
+ - lib/rggen/verilog/rtl/register_block/protocol/axi4lite.erb
102
+ - lib/rggen/verilog/rtl/register_block/protocol/axi4lite.rb
103
+ - lib/rggen/verilog/rtl/register_block/protocol/wishbone.erb
104
+ - lib/rggen/verilog/rtl/register_block/protocol/wishbone.rb
105
+ - lib/rggen/verilog/rtl/register_block/verilog_macros.erb
106
+ - lib/rggen/verilog/rtl/register_block/verilog_top.rb
107
+ - lib/rggen/verilog/rtl/register_file/verilog_top.rb
108
+ - lib/rggen/verilog/rtl_header/bit_field/verilog_rtl_header.rb
109
+ - lib/rggen/verilog/rtl_header/component.rb
110
+ - lib/rggen/verilog/rtl_header/feature.rb
111
+ - lib/rggen/verilog/rtl_header/register/verilog_rtl_header.rb
112
+ - lib/rggen/verilog/rtl_header/register_block/verilog_rtl_header.rb
108
113
  - lib/rggen/verilog/utility.rb
109
114
  - lib/rggen/verilog/utility/local_scope.rb
110
115
  - lib/rggen/verilog/version.rb
@@ -125,15 +130,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
125
130
  requirements:
126
131
  - - ">="
127
132
  - !ruby/object:Gem::Version
128
- version: '2.6'
133
+ version: '2.7'
129
134
  required_rubygems_version: !ruby/object:Gem::Requirement
130
135
  requirements:
131
136
  - - ">="
132
137
  - !ruby/object:Gem::Version
133
138
  version: '0'
134
139
  requirements: []
135
- rubygems_version: 3.3.7
140
+ rubygems_version: 3.4.1
136
141
  signing_key:
137
142
  specification_version: 4
138
- summary: rggen-verilog-0.6.0
143
+ summary: rggen-verilog-0.7.0
139
144
  test_files: []
@@ -1,7 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RgGen
4
- module Verilog
5
- Component = SystemVerilog::Common::Component
6
- end
7
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RgGen
4
- module Verilog
5
- class Feature < SystemVerilog::RTL::Feature
6
- include Utility
7
-
8
- private
9
-
10
- def create_variable(data_type, attributes, &block)
11
- attributes = attributes.merge(array_format: :serialized)
12
- super
13
- end
14
-
15
- def create_port(direction, attributes, &block)
16
- attributes =
17
- attributes
18
- .except(:data_type)
19
- .merge(direction: direction, array_format: :serialized)
20
- DataObject.new(:argument, attributes, &block)
21
- end
22
-
23
- def create_parameter(parameter_type, attributes, &block)
24
- attributes = attributes.merge(array_format: :serialized)
25
- super
26
- end
27
-
28
- define_entity :wire, :create_variable, :variable, -> { component }
29
-
30
- undef_method :interface
31
- undef_method :interface_port
32
- undef_method :localparam
33
- end
34
- end
35
- end