rggen-systemverilog 0.11.1 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +2 -8
  3. data/lib/rggen/systemverilog.rb +3 -47
  4. data/lib/rggen/systemverilog/common.rb +44 -0
  5. data/lib/rggen/systemverilog/common/component.rb +25 -0
  6. data/lib/rggen/systemverilog/common/factories.rb +13 -0
  7. data/lib/rggen/systemverilog/common/feature.rb +78 -0
  8. data/lib/rggen/systemverilog/common/utility.rb +95 -0
  9. data/lib/rggen/systemverilog/common/utility/class_definition.rb +45 -0
  10. data/lib/rggen/systemverilog/common/utility/data_object.rb +131 -0
  11. data/lib/rggen/systemverilog/common/utility/function_definition.rb +47 -0
  12. data/lib/rggen/systemverilog/common/utility/identifier.rb +114 -0
  13. data/lib/rggen/systemverilog/common/utility/interface_instance.rb +57 -0
  14. data/lib/rggen/systemverilog/common/utility/interface_port.rb +51 -0
  15. data/lib/rggen/systemverilog/common/utility/local_scope.rb +64 -0
  16. data/lib/rggen/systemverilog/common/utility/module_definition.rb +76 -0
  17. data/lib/rggen/systemverilog/common/utility/package_definition.rb +61 -0
  18. data/lib/rggen/systemverilog/common/utility/source_file.rb +16 -0
  19. data/lib/rggen/systemverilog/common/utility/structure_definition.rb +39 -0
  20. data/lib/rggen/systemverilog/ral.rb +38 -0
  21. data/lib/rggen/systemverilog/ral/bit_field/type.rb +83 -0
  22. data/lib/rggen/systemverilog/ral/bit_field/type/reserved_rof.rb +5 -0
  23. data/lib/rggen/systemverilog/ral/bit_field/type/rwc_rwe_rwl.rb +23 -0
  24. data/lib/rggen/systemverilog/ral/bit_field/type/w0trg_w1trg.rb +7 -0
  25. data/lib/rggen/systemverilog/ral/feature.rb +26 -0
  26. data/lib/rggen/systemverilog/ral/register/type.rb +154 -0
  27. data/lib/rggen/systemverilog/ral/register/type/default.erb +8 -0
  28. data/lib/rggen/systemverilog/ral/register/type/external.rb +27 -0
  29. data/lib/rggen/systemverilog/ral/register/type/indirect.erb +13 -0
  30. data/lib/rggen/systemverilog/ral/register/type/indirect.rb +35 -0
  31. data/lib/rggen/systemverilog/ral/register_block/sv_ral_block_model.erb +11 -0
  32. data/lib/rggen/systemverilog/ral/register_block/sv_ral_package.rb +65 -0
  33. data/lib/rggen/systemverilog/ral/setup.rb +7 -0
  34. data/lib/rggen/systemverilog/rtl.rb +50 -0
  35. data/lib/rggen/systemverilog/rtl/bit_field/sv_rtl_top.rb +89 -0
  36. data/lib/rggen/systemverilog/rtl/bit_field/type.rb +62 -0
  37. data/lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c.erb +15 -0
  38. data/lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c.rb +59 -0
  39. data/lib/rggen/systemverilog/rtl/bit_field/type/reserved.erb +3 -0
  40. data/lib/rggen/systemverilog/rtl/bit_field/type/reserved.rb +7 -0
  41. data/lib/rggen/systemverilog/rtl/bit_field/type/ro.erb +6 -0
  42. data/lib/rggen/systemverilog/rtl/bit_field/type/ro.rb +22 -0
  43. data/lib/rggen/systemverilog/rtl/bit_field/type/rof.erb +6 -0
  44. data/lib/rggen/systemverilog/rtl/bit_field/type/rof.rb +7 -0
  45. data/lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s.erb +13 -0
  46. data/lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s.rb +32 -0
  47. data/lib/rggen/systemverilog/rtl/bit_field/type/rw_wo.erb +9 -0
  48. data/lib/rggen/systemverilog/rtl/bit_field/type/rw_wo.rb +14 -0
  49. data/lib/rggen/systemverilog/rtl/bit_field/type/rwc_rwe_rwl.erb +16 -0
  50. data/lib/rggen/systemverilog/rtl/bit_field/type/rwc_rwe_rwl.rb +61 -0
  51. data/lib/rggen/systemverilog/rtl/bit_field/type/w0trg_w1trg.erb +9 -0
  52. data/lib/rggen/systemverilog/rtl/bit_field/type/w0trg_w1trg.rb +20 -0
  53. data/lib/rggen/systemverilog/rtl/feature.rb +48 -0
  54. data/lib/rggen/systemverilog/rtl/global/array_port_format.rb +19 -0
  55. data/lib/rggen/systemverilog/rtl/global/fold_sv_interface_port.rb +24 -0
  56. data/lib/rggen/systemverilog/rtl/register/sv_rtl_top.rb +82 -0
  57. data/lib/rggen/systemverilog/rtl/register/type.rb +65 -0
  58. data/lib/rggen/systemverilog/rtl/register/type/default.erb +15 -0
  59. data/lib/rggen/systemverilog/rtl/register/type/external.erb +11 -0
  60. data/lib/rggen/systemverilog/rtl/register/type/external.rb +91 -0
  61. data/lib/rggen/systemverilog/rtl/register/type/indirect.erb +17 -0
  62. data/lib/rggen/systemverilog/rtl/register/type/indirect.rb +40 -0
  63. data/lib/rggen/systemverilog/rtl/register_block/protocol.rb +100 -0
  64. data/lib/rggen/systemverilog/rtl/register_block/protocol/apb.erb +10 -0
  65. data/lib/rggen/systemverilog/rtl/register_block/protocol/apb.rb +89 -0
  66. data/lib/rggen/systemverilog/rtl/register_block/protocol/axi4lite.erb +11 -0
  67. data/lib/rggen/systemverilog/rtl/register_block/protocol/axi4lite.rb +125 -0
  68. data/lib/rggen/systemverilog/rtl/register_block/sv_rtl_macros.erb +9 -0
  69. data/lib/rggen/systemverilog/rtl/register_block/sv_rtl_top.rb +86 -0
  70. data/lib/rggen/systemverilog/rtl/setup.rb +13 -0
  71. data/lib/rggen/systemverilog/version.rb +1 -1
  72. metadata +70 -20
  73. data/lib/rggen/systemverilog/component.rb +0 -23
  74. data/lib/rggen/systemverilog/factories.rb +0 -11
  75. data/lib/rggen/systemverilog/feature.rb +0 -76
  76. data/lib/rggen/systemverilog/feature_ral.rb +0 -24
  77. data/lib/rggen/systemverilog/feature_rtl.rb +0 -46
  78. data/lib/rggen/systemverilog/utility.rb +0 -93
  79. data/lib/rggen/systemverilog/utility/class_definition.rb +0 -43
  80. data/lib/rggen/systemverilog/utility/data_object.rb +0 -129
  81. data/lib/rggen/systemverilog/utility/function_definition.rb +0 -45
  82. data/lib/rggen/systemverilog/utility/identifier.rb +0 -112
  83. data/lib/rggen/systemverilog/utility/interface_instance.rb +0 -55
  84. data/lib/rggen/systemverilog/utility/interface_port.rb +0 -49
  85. data/lib/rggen/systemverilog/utility/local_scope.rb +0 -62
  86. data/lib/rggen/systemverilog/utility/module_definition.rb +0 -74
  87. data/lib/rggen/systemverilog/utility/package_definition.rb +0 -59
  88. data/lib/rggen/systemverilog/utility/source_file.rb +0 -14
  89. data/lib/rggen/systemverilog/utility/structure_definition.rb +0 -37
@@ -0,0 +1,9 @@
1
+ `ifndef rggen_connect_bit_field_if
2
+ `define rggen_connect_bit_field_if(RIF, FIF, LSB, WIDTH) \
3
+ assign FIF.valid = RIF.valid; \
4
+ assign FIF.read_mask = RIF.read_mask[LSB+:WIDTH]; \
5
+ assign FIF.write_mask = RIF.write_mask[LSB+:WIDTH]; \
6
+ assign FIF.write_data = RIF.write_data[LSB+:WIDTH]; \
7
+ assign RIF.read_data[LSB+:WIDTH] = FIF.read_data; \
8
+ assign RIF.value[LSB+:WIDTH] = FIF.value;
9
+ `endif
@@ -0,0 +1,86 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_simple_feature(:register_block, :sv_rtl_top) do
4
+ sv_rtl do
5
+ export :total_registers
6
+
7
+ build do
8
+ input :register_block, :clock, {
9
+ name: 'i_clk', data_type: :logic, width: 1
10
+ }
11
+ input :register_block, :reset, {
12
+ name: 'i_rst_n', data_type: :logic, width: 1
13
+ }
14
+ interface :register_block, :register_if, {
15
+ name: 'register_if', interface_type: 'rggen_register_if',
16
+ parameter_values: [address_width, bus_width, value_width],
17
+ array_size: [total_registers],
18
+ variables: ['value']
19
+ }
20
+ end
21
+
22
+ write_file '<%= register_block.name %>.sv' do |file|
23
+ file.body(&method(:body_code))
24
+ end
25
+
26
+ def total_registers
27
+ register_block
28
+ .registers
29
+ .map(&:count)
30
+ .inject(:+)
31
+ end
32
+
33
+ private
34
+
35
+ def address_width
36
+ register_block.local_address_width
37
+ end
38
+
39
+ def bus_width
40
+ configuration.bus_width
41
+ end
42
+
43
+ def value_width
44
+ register_block.registers.map(&:width).max
45
+ end
46
+
47
+ def body_code(code)
48
+ macro_definition(code)
49
+ sv_module_definition(code)
50
+ end
51
+
52
+ def macro_definition(code)
53
+ code << process_template(File.join(__dir__, 'sv_rtl_macros.erb'))
54
+ end
55
+
56
+ def sv_module_definition(code)
57
+ code << module_definition(register_block.name) do |sv_module|
58
+ sv_module.package_imports packages
59
+ sv_module.parameters parameters
60
+ sv_module.ports ports
61
+ sv_module.variables variables
62
+ sv_module.body(&method(:sv_module_body))
63
+ end
64
+ end
65
+
66
+ def packages
67
+ ['rggen_rtl_pkg', *register_block.package_imports(:register_block)]
68
+ end
69
+
70
+ def parameters
71
+ register_block.declarations(:register_block, :parameter)
72
+ end
73
+
74
+ def ports
75
+ register_block.declarations(:register_block, :port)
76
+ end
77
+
78
+ def variables
79
+ register_block.declarations(:register_block, :variable)
80
+ end
81
+
82
+ def sv_module_body(code)
83
+ register_block.generate_code(:register_block, :top_down, code)
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rggen/systemverilog/rtl'
4
+
5
+ RgGen.setup :'sv-rtl', RgGen::SystemVerilog::RTL do |builder|
6
+ builder.enable :global, [
7
+ :array_port_format, :fold_sv_interface_port
8
+ ]
9
+ builder.enable :register_block, [:sv_rtl_top, :protocol]
10
+ builder.enable :register_block, :protocol, [:apb, :axi4lite]
11
+ builder.enable :register, [:sv_rtl_top]
12
+ builder.enable :bit_field, [:sv_rtl_top]
13
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module SystemVerilog
5
- VERSION = '0.11.1'
5
+ VERSION = '0.13.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-systemverilog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.1
4
+ version: 0.13.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: 2019-08-19 00:00:00.000000000 Z
11
+ date: 2019-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docile
@@ -65,23 +65,73 @@ files:
65
65
  - LICENSE
66
66
  - README.md
67
67
  - lib/rggen/systemverilog.rb
68
- - lib/rggen/systemverilog/component.rb
69
- - lib/rggen/systemverilog/factories.rb
70
- - lib/rggen/systemverilog/feature.rb
71
- - lib/rggen/systemverilog/feature_ral.rb
72
- - lib/rggen/systemverilog/feature_rtl.rb
73
- - lib/rggen/systemverilog/utility.rb
74
- - lib/rggen/systemverilog/utility/class_definition.rb
75
- - lib/rggen/systemverilog/utility/data_object.rb
76
- - lib/rggen/systemverilog/utility/function_definition.rb
77
- - lib/rggen/systemverilog/utility/identifier.rb
78
- - lib/rggen/systemverilog/utility/interface_instance.rb
79
- - lib/rggen/systemverilog/utility/interface_port.rb
80
- - lib/rggen/systemverilog/utility/local_scope.rb
81
- - lib/rggen/systemverilog/utility/module_definition.rb
82
- - lib/rggen/systemverilog/utility/package_definition.rb
83
- - lib/rggen/systemverilog/utility/source_file.rb
84
- - lib/rggen/systemverilog/utility/structure_definition.rb
68
+ - lib/rggen/systemverilog/common.rb
69
+ - lib/rggen/systemverilog/common/component.rb
70
+ - lib/rggen/systemverilog/common/factories.rb
71
+ - lib/rggen/systemverilog/common/feature.rb
72
+ - lib/rggen/systemverilog/common/utility.rb
73
+ - lib/rggen/systemverilog/common/utility/class_definition.rb
74
+ - lib/rggen/systemverilog/common/utility/data_object.rb
75
+ - lib/rggen/systemverilog/common/utility/function_definition.rb
76
+ - lib/rggen/systemverilog/common/utility/identifier.rb
77
+ - lib/rggen/systemverilog/common/utility/interface_instance.rb
78
+ - lib/rggen/systemverilog/common/utility/interface_port.rb
79
+ - lib/rggen/systemverilog/common/utility/local_scope.rb
80
+ - lib/rggen/systemverilog/common/utility/module_definition.rb
81
+ - lib/rggen/systemverilog/common/utility/package_definition.rb
82
+ - lib/rggen/systemverilog/common/utility/source_file.rb
83
+ - lib/rggen/systemverilog/common/utility/structure_definition.rb
84
+ - lib/rggen/systemverilog/ral.rb
85
+ - lib/rggen/systemverilog/ral/bit_field/type.rb
86
+ - lib/rggen/systemverilog/ral/bit_field/type/reserved_rof.rb
87
+ - lib/rggen/systemverilog/ral/bit_field/type/rwc_rwe_rwl.rb
88
+ - lib/rggen/systemverilog/ral/bit_field/type/w0trg_w1trg.rb
89
+ - lib/rggen/systemverilog/ral/feature.rb
90
+ - lib/rggen/systemverilog/ral/register/type.rb
91
+ - lib/rggen/systemverilog/ral/register/type/default.erb
92
+ - lib/rggen/systemverilog/ral/register/type/external.rb
93
+ - lib/rggen/systemverilog/ral/register/type/indirect.erb
94
+ - lib/rggen/systemverilog/ral/register/type/indirect.rb
95
+ - lib/rggen/systemverilog/ral/register_block/sv_ral_block_model.erb
96
+ - lib/rggen/systemverilog/ral/register_block/sv_ral_package.rb
97
+ - lib/rggen/systemverilog/ral/setup.rb
98
+ - lib/rggen/systemverilog/rtl.rb
99
+ - lib/rggen/systemverilog/rtl/bit_field/sv_rtl_top.rb
100
+ - lib/rggen/systemverilog/rtl/bit_field/type.rb
101
+ - lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c.erb
102
+ - lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c.rb
103
+ - lib/rggen/systemverilog/rtl/bit_field/type/reserved.erb
104
+ - lib/rggen/systemverilog/rtl/bit_field/type/reserved.rb
105
+ - lib/rggen/systemverilog/rtl/bit_field/type/ro.erb
106
+ - lib/rggen/systemverilog/rtl/bit_field/type/ro.rb
107
+ - lib/rggen/systemverilog/rtl/bit_field/type/rof.erb
108
+ - lib/rggen/systemverilog/rtl/bit_field/type/rof.rb
109
+ - lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s.erb
110
+ - lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s.rb
111
+ - lib/rggen/systemverilog/rtl/bit_field/type/rw_wo.erb
112
+ - lib/rggen/systemverilog/rtl/bit_field/type/rw_wo.rb
113
+ - lib/rggen/systemverilog/rtl/bit_field/type/rwc_rwe_rwl.erb
114
+ - lib/rggen/systemverilog/rtl/bit_field/type/rwc_rwe_rwl.rb
115
+ - lib/rggen/systemverilog/rtl/bit_field/type/w0trg_w1trg.erb
116
+ - lib/rggen/systemverilog/rtl/bit_field/type/w0trg_w1trg.rb
117
+ - lib/rggen/systemverilog/rtl/feature.rb
118
+ - lib/rggen/systemverilog/rtl/global/array_port_format.rb
119
+ - lib/rggen/systemverilog/rtl/global/fold_sv_interface_port.rb
120
+ - lib/rggen/systemverilog/rtl/register/sv_rtl_top.rb
121
+ - lib/rggen/systemverilog/rtl/register/type.rb
122
+ - lib/rggen/systemverilog/rtl/register/type/default.erb
123
+ - lib/rggen/systemverilog/rtl/register/type/external.erb
124
+ - lib/rggen/systemverilog/rtl/register/type/external.rb
125
+ - lib/rggen/systemverilog/rtl/register/type/indirect.erb
126
+ - lib/rggen/systemverilog/rtl/register/type/indirect.rb
127
+ - lib/rggen/systemverilog/rtl/register_block/protocol.rb
128
+ - lib/rggen/systemverilog/rtl/register_block/protocol/apb.erb
129
+ - lib/rggen/systemverilog/rtl/register_block/protocol/apb.rb
130
+ - lib/rggen/systemverilog/rtl/register_block/protocol/axi4lite.erb
131
+ - lib/rggen/systemverilog/rtl/register_block/protocol/axi4lite.rb
132
+ - lib/rggen/systemverilog/rtl/register_block/sv_rtl_macros.erb
133
+ - lib/rggen/systemverilog/rtl/register_block/sv_rtl_top.rb
134
+ - lib/rggen/systemverilog/rtl/setup.rb
85
135
  - lib/rggen/systemverilog/version.rb
86
136
  homepage: https://github.com/rggen/rggen-systemverilog
87
137
  licenses:
@@ -109,5 +159,5 @@ requirements: []
109
159
  rubygems_version: 3.0.3
110
160
  signing_key:
111
161
  specification_version: 4
112
- summary: rggen-systemverilog-0.11.1
162
+ summary: rggen-systemverilog-0.13.0
113
163
  test_files: []
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RgGen
4
- module SystemVerilog
5
- class Component < Core::OutputBase::Component
6
- def declarations(domain, type)
7
- body = ->(r) { r.declarations(domain, type) }
8
- [
9
- @features.each_value.map(&body),
10
- @children.map(&body)
11
- ].flatten
12
- end
13
-
14
- def package_imports(domain)
15
- body = ->(r) { r.package_imports(domain) }
16
- [
17
- @features.each_value.map(&body),
18
- @children.map(&body)
19
- ].flatten.uniq
20
- end
21
- end
22
- end
23
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RgGen
4
- module SystemVerilog
5
- class ComponentFactory < Core::OutputBase::ComponentFactory
6
- end
7
-
8
- class FeatureFactory < Core::OutputBase::FeatureFactory
9
- end
10
- end
11
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RgGen
4
- module SystemVerilog
5
- class Feature < Core::OutputBase::Feature
6
- include Utility
7
- template_engine Core::OutputBase::ERBEngine
8
-
9
- EntityContext =
10
- Struct.new(:entity_type, :creation_method, :declaration_type)
11
-
12
- class << self
13
- private
14
-
15
- def define_entity(entity_type, creation_method, declaration_type)
16
- context =
17
- EntityContext.new(entity_type, creation_method, declaration_type)
18
- define_method(entity_type) do |domain, name, **attributes, &block|
19
- entity =
20
- create_entity(context, { name: name }.merge(attributes), block)
21
- add_entity(entity, context, domain, name)
22
- end
23
- end
24
- end
25
-
26
- def declarations(domain, type)
27
- @declarations[domain][type]
28
- end
29
-
30
- def package_imports(domain)
31
- @package_imports[domain]
32
- end
33
-
34
- private
35
-
36
- def post_initialize
37
- super
38
- @declarations = Hash.new do |h0, k0|
39
- h0[k0] = Hash.new { |h1, k1| h1[k1] = [] }
40
- end
41
- @package_imports = Hash.new { |h, k| h[k] = [] }
42
- end
43
-
44
- def create_entity(context, attributes, block)
45
- creation_method = context.creation_method
46
- entity_type = context.entity_type
47
- __send__(creation_method, entity_type, attributes, block)
48
- end
49
-
50
- def add_entity(entity, context, domain, name)
51
- add_declaration(context, domain, entity.declaration)
52
- add_identifier(name, entity.identifier)
53
- end
54
-
55
- def add_declaration(context, domain, declaration)
56
- declaration_type = context.declaration_type
57
- @declarations[domain][declaration_type] << declaration
58
- end
59
-
60
- def add_identifier(name, identifier)
61
- instance_variable_set("@#{name}", identifier)
62
- attr_singleton_reader(name)
63
- export(name)
64
- end
65
-
66
- def import_package(domain, package)
67
- @package_imports[domain].include?(package) ||
68
- (@package_imports[domain] << package)
69
- end
70
-
71
- def import_packages(domain, packages)
72
- Array(packages).each { |package| import_package(domain, package) }
73
- end
74
- end
75
- end
76
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RgGen
4
- module SystemVerilog
5
- class FeatureRAL < Feature
6
- private
7
-
8
- def create_variable(_, attributes, block)
9
- DataObject.new(
10
- :variable, attributes.merge(array_format: :unpacked), &block
11
- )
12
- end
13
-
14
- def create_parameter(_, attributes, block)
15
- DataObject.new(
16
- :parameter, attributes, &block
17
- )
18
- end
19
-
20
- define_entity :variable, :create_variable, :variable
21
- define_entity :parameter, :create_parameter, :parameter
22
- end
23
- end
24
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RgGen
4
- module SystemVerilog
5
- class FeatureRTL < Feature
6
- private
7
-
8
- def create_variable(data_type, attributes, block)
9
- DataObject.new(
10
- :variable, attributes.merge(data_type: data_type), &block
11
- )
12
- end
13
-
14
- def create_interface(_, attributes, block)
15
- InterfaceInstance.new(attributes, &block)
16
- end
17
-
18
- def create_argument(direction, attributes, block)
19
- DataObject.new(
20
- :argument, attributes.merge(direction: direction), &block
21
- )
22
- end
23
-
24
- def create_interface_port(_, attributes, block)
25
- InterfacePort.new(attributes, &block)
26
- end
27
-
28
- def create_parameter(_, attributes, block)
29
- DataObject.new(
30
- :parameter, attributes.merge(parameter_type: :parameter), &block
31
- )
32
- end
33
-
34
- [
35
- [:logic, :create_variable, :variable],
36
- [:interface, :create_interface, :variable],
37
- [:input, :create_argument, :port],
38
- [:output, :create_argument, :port],
39
- [:interface_port, :create_interface_port, :port],
40
- [:parameter, :create_parameter, :parameter]
41
- ].each do |entity, creation_method, declaration_type|
42
- define_entity(entity, creation_method, declaration_type)
43
- end
44
- end
45
- end
46
- end
@@ -1,93 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RgGen
4
- module SystemVerilog
5
- module Utility
6
- include Core::Utility::CodeUtility
7
-
8
- def create_blank_file(path)
9
- SourceFile.new(path)
10
- end
11
-
12
- private
13
-
14
- def create_identifier(name)
15
- Identifier.new(name)
16
- end
17
-
18
- def assign(lhs, rhs)
19
- "assign #{lhs} = #{rhs};"
20
- end
21
-
22
- def concat(expressions)
23
- "{#{Array(expressions).join(', ')}}"
24
- end
25
-
26
- def array(expressions)
27
- "'#{concat(expressions)}"
28
- end
29
-
30
- def function_call(name, expressions = nil)
31
- "#{name}(#{Array(expressions).join(', ')})"
32
- end
33
-
34
- def macro_call(name, expressions = nil)
35
- if (expression_array = Array(expressions)).empty?
36
- "`#{name}"
37
- else
38
- "`#{name}(#{expression_array.join(', ')})"
39
- end
40
- end
41
-
42
- def bin(value, width = nil)
43
- if width
44
- width = bit_width(value, width)
45
- format("%d'b%0*b", width, width, value)
46
- else
47
- format("'b%b", value)
48
- end
49
- end
50
-
51
- def dec(value, width = nil)
52
- if width
53
- width = bit_width(value, width)
54
- format("%0d'd%d", width, value)
55
- else
56
- format("'d%d", value)
57
- end
58
- end
59
-
60
- def hex(value, width = nil)
61
- if width
62
- width = bit_width(value, width)
63
- print_width = (width + 3) / 4
64
- format("%0d'h%0*x", width, print_width, value)
65
- else
66
- format("'h%x", value)
67
- end
68
- end
69
-
70
- def bit_width(value, width)
71
- bit_length = value.bit_length
72
- bit_length = 1 if bit_length.zero?
73
- [width, bit_length].max
74
- end
75
-
76
- def argument(name, **attribute)
77
- DataObject.new(:argument, attribute.merge(name: name)).declaration
78
- end
79
-
80
- {
81
- class_definition: ClassDefinition,
82
- function_definition: FunctionDefinition,
83
- local_scope: LocalScope,
84
- module_definition: ModuleDefinition,
85
- package_definition: PackageDefinition
86
- }.each do |method_name, definition|
87
- define_method(method_name) do |name, **attributes, &block|
88
- definition.new(attributes.merge(name: name), &block).to_code
89
- end
90
- end
91
- end
92
- end
93
- end