rggen-systemverilog 0.28.0 → 0.29.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/lib/rggen/systemverilog/common/utility/package_definition.rb +12 -4
- data/lib/rggen/systemverilog/rtl.rb +14 -0
- data/lib/rggen/systemverilog/rtl_package/bit_field/sv_rtl_package.rb +65 -0
- data/lib/rggen/systemverilog/rtl_package/feature.rb +28 -0
- data/lib/rggen/systemverilog/rtl_package/register/sv_rtl_package.rb +83 -0
- data/lib/rggen/systemverilog/rtl_package/register_block/sv_rtl_package.rb +25 -0
- data/lib/rggen/systemverilog/version.rb +1 -1
- metadata +9 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e5fc548cd3c93e80580efc9d2027ce309b9a6e8900078f3f5bf8bb157357e53
|
4
|
+
data.tar.gz: 4fb5af7f5ad76f4938406a553fe425767e2fc363ce79b79b07213fd292535efb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34cc65c49e1510303e8ca8ed7d16b941bfd331d66188602ecdf41a61cc9b1b0a627f56d33c3ba6b44b0c2e56ca1c44a896893ad3d82070a72b5cfb913e5a28b5
|
7
|
+
data.tar.gz: 55600c8bf365ffbbc2d8cc6b020e6cb13c33ebb91f49253d53cef0c5a7a5df86d639a61cc0a1eb2aa5d2a36d86530236e837735721da55def694c2a1c19c9d74
|
data/LICENSE
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
The MIT License (MIT)
|
2
2
|
|
3
|
-
Copyright (c) 2019-
|
3
|
+
Copyright (c) 2019-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
@@ -35,7 +35,7 @@ Feedbacks, bug reports, questions and etc. are wellcome! You can post them by us
|
|
35
35
|
|
36
36
|
## Copyright & License
|
37
37
|
|
38
|
-
Copyright © 2019-
|
38
|
+
Copyright © 2019-2023 Taichi Ishitani. RgGen::SystemVerilog is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
|
39
39
|
|
40
40
|
## Code of Conduct
|
41
41
|
|
@@ -8,6 +8,7 @@ module RgGen
|
|
8
8
|
define_attribute :name
|
9
9
|
define_attribute :package_imports
|
10
10
|
define_attribute :include_files
|
11
|
+
define_attribute :parameters
|
11
12
|
|
12
13
|
def package_imports(packages)
|
13
14
|
@package_imports ||= []
|
@@ -36,21 +37,28 @@ module RgGen
|
|
36
37
|
def pre_body_code(code)
|
37
38
|
package_import_declaration(code)
|
38
39
|
file_include_directives(code)
|
40
|
+
parameter_declarations(code)
|
39
41
|
end
|
40
42
|
|
41
43
|
def package_import_declaration(code)
|
42
44
|
declarations =
|
43
|
-
|
44
|
-
|
45
|
-
|
45
|
+
@package_imports
|
46
|
+
&.map { |package| ['import', space, package, '::*'] }
|
47
|
+
declarations &&
|
48
|
+
add_declarations_to_body(code, declarations)
|
46
49
|
end
|
47
50
|
|
48
51
|
def file_include_directives(code)
|
49
|
-
|
52
|
+
@include_files&.each do |file|
|
50
53
|
code << ['`include', space, string(file), nl]
|
51
54
|
end
|
52
55
|
end
|
53
56
|
|
57
|
+
def parameter_declarations(code)
|
58
|
+
parameters &&
|
59
|
+
add_declarations_to_body(code, parameters)
|
60
|
+
end
|
61
|
+
|
54
62
|
def footer_code
|
55
63
|
'endpackage'
|
56
64
|
end
|
@@ -7,6 +7,7 @@ require_relative 'rtl/register_index'
|
|
7
7
|
require_relative 'rtl/register_type'
|
8
8
|
require_relative 'rtl/indirect_index'
|
9
9
|
require_relative 'rtl/bit_field_index'
|
10
|
+
require_relative 'rtl_package/feature'
|
10
11
|
|
11
12
|
RgGen.setup_plugin :'rggen-sv-rtl' do |plugin|
|
12
13
|
plugin.version RgGen::SystemVerilog::VERSION
|
@@ -50,4 +51,17 @@ RgGen.setup_plugin :'rggen-sv-rtl' do |plugin|
|
|
50
51
|
'rtl/bit_field/type/wo_wo1_wotrg',
|
51
52
|
'rtl/bit_field/type/wrc_wrs'
|
52
53
|
]
|
54
|
+
|
55
|
+
plugin.register_component :sv_rtl_package do
|
56
|
+
component RgGen::SystemVerilog::Common::Component,
|
57
|
+
RgGen::SystemVerilog::Common::ComponentFactory
|
58
|
+
feature RgGen::SystemVerilog::RTLPackage::Feature,
|
59
|
+
RgGen::SystemVerilog::Common::FeatureFactory
|
60
|
+
end
|
61
|
+
|
62
|
+
plugin.files [
|
63
|
+
'rtl_package/bit_field/sv_rtl_package',
|
64
|
+
'rtl_package/register/sv_rtl_package',
|
65
|
+
'rtl_package/register_block/sv_rtl_package'
|
66
|
+
]
|
53
67
|
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_simple_feature(:bit_field, :sv_rtl_package) do
|
4
|
+
sv_rtl_package do
|
5
|
+
build do
|
6
|
+
localparam :__width, {
|
7
|
+
name: "#{full_name}_bit_width",
|
8
|
+
data_type: :int, default: bit_field.width
|
9
|
+
}
|
10
|
+
localparam :__mask, {
|
11
|
+
name: "#{full_name}_bit_mask",
|
12
|
+
data_type: :bit, width: bit_field.width, default: mask_value
|
13
|
+
}
|
14
|
+
define_offset_localparam
|
15
|
+
define_label_localparams
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def mask_value
|
21
|
+
hex((1 << bit_field.width) - 1, bit_field.width)
|
22
|
+
end
|
23
|
+
|
24
|
+
def define_offset_localparam
|
25
|
+
if bit_field.sequential?
|
26
|
+
define_sequential_offset_localparam
|
27
|
+
else
|
28
|
+
define_single_offset_localparam
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def define_sequential_offset_localparam
|
33
|
+
size = bit_field.sequence_size
|
34
|
+
localparam :__offset, {
|
35
|
+
name: "#{full_name}_bit_offset",
|
36
|
+
data_type: :int, array_size: [size], default: offset_value(size)
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
def offset_value(size)
|
41
|
+
array(Array.new(size, &bit_field.method(:lsb)))
|
42
|
+
end
|
43
|
+
|
44
|
+
def define_single_offset_localparam
|
45
|
+
localparam :__offset, {
|
46
|
+
name: "#{full_name}_bit_offset",
|
47
|
+
data_type: :int, default: bit_field.lsb
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
def define_label_localparams
|
52
|
+
bit_field.labels
|
53
|
+
.each { |label| define_label_localparam(label) }
|
54
|
+
end
|
55
|
+
|
56
|
+
def define_label_localparam(label)
|
57
|
+
identifier = "label_#{label.name}".downcase.to_sym
|
58
|
+
value = hex(label.value, bit_field.width)
|
59
|
+
localparam identifier, {
|
60
|
+
name: "#{full_name}_#{label.name}",
|
61
|
+
data_type: :bit, width: bit_field.width, default: value
|
62
|
+
}
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RgGen
|
4
|
+
module SystemVerilog
|
5
|
+
module RTLPackage
|
6
|
+
class Feature < Common::Feature
|
7
|
+
private
|
8
|
+
|
9
|
+
def full_name(separator = '_')
|
10
|
+
component.full_name(separator)
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_parameter(parameter_type, attributes, &block)
|
14
|
+
attributes =
|
15
|
+
attributes.merge(
|
16
|
+
parameter_type: parameter_type, array_format: :unpacked,
|
17
|
+
name: attributes[:name].upcase
|
18
|
+
)
|
19
|
+
DataObject.new(
|
20
|
+
:parameter, attributes, &block
|
21
|
+
)
|
22
|
+
end
|
23
|
+
|
24
|
+
define_entity :localparam, :create_parameter, :parameter, -> { register_block }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_simple_feature(:register, :sv_rtl_package) do
|
4
|
+
sv_rtl_package do
|
5
|
+
build do
|
6
|
+
localparam :__byte_width, {
|
7
|
+
name: "#{full_name}_byte_width",
|
8
|
+
data_type: :int, default: register.byte_width
|
9
|
+
}
|
10
|
+
localparam :__byte_size, {
|
11
|
+
name: "#{full_name}_byte_size",
|
12
|
+
data_type: :int, default: register.byte_size(hierarchical: true)
|
13
|
+
}
|
14
|
+
define_array_size_localparam
|
15
|
+
define_offset_localparams
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def define_array_size_localparam
|
21
|
+
return unless array?
|
22
|
+
|
23
|
+
list = array_size_list
|
24
|
+
localparam :__array_size, {
|
25
|
+
name: "#{full_name}_array_size",
|
26
|
+
data_type: :int, array_size: [list.size], default: array(list)
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
def define_offset_localparams
|
31
|
+
if array?
|
32
|
+
define_array_offset_localparams
|
33
|
+
else
|
34
|
+
define_single_offset_localparam
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def define_array_offset_localparams
|
39
|
+
width = register_block.local_address_width
|
40
|
+
size_list = array_size_list
|
41
|
+
value_list = group_address_list(address_list, size_list).first
|
42
|
+
localparam :__offset, {
|
43
|
+
name: "#{full_name}_byte_offset",
|
44
|
+
data_type: :bit, width: width, array_size: size_list, default: value_list
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
48
|
+
def address_list
|
49
|
+
register
|
50
|
+
.expanded_offset_addresses
|
51
|
+
.map { |address| hex(address, register_block.local_address_width) }
|
52
|
+
end
|
53
|
+
|
54
|
+
def group_address_list(address_list, size_list)
|
55
|
+
list =
|
56
|
+
if size_list.size > 1
|
57
|
+
group_address_list(address_list, size_list[1..])
|
58
|
+
else
|
59
|
+
address_list
|
60
|
+
end
|
61
|
+
list
|
62
|
+
.each_slice(size_list.first)
|
63
|
+
.map(&method(:array))
|
64
|
+
end
|
65
|
+
|
66
|
+
def define_single_offset_localparam
|
67
|
+
width = register_block.local_address_width
|
68
|
+
value = address_list.first
|
69
|
+
localparam :__offset, {
|
70
|
+
name: "#{full_name}_byte_offset",
|
71
|
+
data_type: :bit, width: width, default: value
|
72
|
+
}
|
73
|
+
end
|
74
|
+
|
75
|
+
def array?
|
76
|
+
register.array?(hierarchical: true)
|
77
|
+
end
|
78
|
+
|
79
|
+
def array_size_list
|
80
|
+
register.array_size(hierarchical: true)
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RgGen.define_simple_feature(:register_block, :sv_rtl_package) do
|
4
|
+
sv_rtl_package do
|
5
|
+
write_file '<%= package_name %>.sv' do |file|
|
6
|
+
file.body { sv_rtl_package_definition }
|
7
|
+
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def sv_rtl_package_definition
|
12
|
+
package_definition(package_name) do |package|
|
13
|
+
package.parameters parameters
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def package_name
|
18
|
+
"#{register_block.name}_rtl_pkg"
|
19
|
+
end
|
20
|
+
|
21
|
+
def parameters
|
22
|
+
register_block.declarations[:parameter]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
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.
|
4
|
+
version: 0.29.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:
|
11
|
+
date: 2023-01-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -135,6 +135,10 @@ files:
|
|
135
135
|
- lib/rggen/systemverilog/rtl/register_file/sv_rtl_top.rb
|
136
136
|
- lib/rggen/systemverilog/rtl/register_index.rb
|
137
137
|
- lib/rggen/systemverilog/rtl/register_type.rb
|
138
|
+
- lib/rggen/systemverilog/rtl_package/bit_field/sv_rtl_package.rb
|
139
|
+
- lib/rggen/systemverilog/rtl_package/feature.rb
|
140
|
+
- lib/rggen/systemverilog/rtl_package/register/sv_rtl_package.rb
|
141
|
+
- lib/rggen/systemverilog/rtl_package/register_block/sv_rtl_package.rb
|
138
142
|
- lib/rggen/systemverilog/version.rb
|
139
143
|
homepage: https://github.com/rggen/rggen-systemverilog
|
140
144
|
licenses:
|
@@ -153,15 +157,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
157
|
requirements:
|
154
158
|
- - ">="
|
155
159
|
- !ruby/object:Gem::Version
|
156
|
-
version: '2.
|
160
|
+
version: '2.7'
|
157
161
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
162
|
requirements:
|
159
163
|
- - ">="
|
160
164
|
- !ruby/object:Gem::Version
|
161
165
|
version: '0'
|
162
166
|
requirements: []
|
163
|
-
rubygems_version: 3.
|
167
|
+
rubygems_version: 3.4.1
|
164
168
|
signing_key:
|
165
169
|
specification_version: 4
|
166
|
-
summary: rggen-systemverilog-0.
|
170
|
+
summary: rggen-systemverilog-0.29.0
|
167
171
|
test_files: []
|