rggen 0.3.3 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +27 -17
- data/lib/rggen/base/component.rb +5 -1
- data/lib/rggen/base/component_factory.rb +12 -5
- data/lib/rggen/base/item.rb +19 -9
- data/lib/rggen/base/item_factory.rb +9 -5
- data/lib/rggen/builtins.rb +12 -15
- data/lib/rggen/builtins/bit_field/{field_model_creation.rb → field_model.rb} +12 -3
- data/lib/rggen/builtins/register/accessibility.rb +3 -3
- data/lib/rggen/builtins/register/address_decoder.rb +1 -1
- data/lib/rggen/builtins/register/array.rb +30 -28
- data/lib/rggen/builtins/register/bus_exporter.erb +28 -0
- data/lib/rggen/builtins/register/bus_exporter.rb +44 -0
- data/lib/rggen/builtins/register/{reg_model_constructor.rb → constructor.rb} +1 -1
- data/lib/rggen/builtins/register/external.rb +42 -0
- data/lib/rggen/builtins/register/field_model_creator.rb +5 -1
- data/lib/rggen/builtins/register/read_data.rb +4 -0
- data/lib/rggen/builtins/register/reg_model.rb +92 -0
- data/lib/rggen/builtins/register/shadow_index_configurator.rb +5 -1
- data/lib/rggen/builtins/register/sub_block_model.rb +34 -0
- data/lib/rggen/builtins/register_block/apb.erb +1 -0
- data/lib/rggen/builtins/register_block/axi4lite.erb +1 -0
- data/lib/rggen/builtins/register_block/{block_model_definition.rb → block_model.rb} +4 -2
- data/lib/rggen/builtins/register_block/{block_model_constructor.rb → constructor.rb} +1 -1
- data/lib/rggen/builtins/register_block/{block_model_default_map_creator.rb → default_map_creator.rb} +1 -1
- data/lib/rggen/builtins/register_block/host_if.rb +1 -0
- data/lib/rggen/builtins/register_block/{ral_package_definition.rb → ral_package.rb} +1 -1
- data/lib/rggen/builtins/register_block/response_mux.erb +15 -11
- data/lib/rggen/builtins/register_block/response_mux.rb +35 -4
- data/lib/rggen/builtins/register_block/sub_model_creator.rb +14 -0
- data/lib/rggen/builtins/register_block/top_module.rb +16 -0
- data/lib/rggen/core_components.rb +2 -0
- data/lib/rggen/core_components/configuration/item_factory.rb +1 -1
- data/lib/rggen/core_components/ral/component.rb +24 -0
- data/lib/rggen/core_components/ral/item.rb +50 -5
- data/lib/rggen/core_components/ral/setup.rb +1 -1
- data/lib/rggen/core_components/register_map/bit_field_factory.rb +1 -1
- data/lib/rggen/core_components/register_map/component.rb +4 -1
- data/lib/rggen/core_components/register_map/component_factory.rb +9 -0
- data/lib/rggen/core_components/register_map/item.rb +9 -7
- data/lib/rggen/core_components/register_map/item_factory.rb +2 -2
- data/lib/rggen/core_components/register_map/register_block_factory.rb +1 -1
- data/lib/rggen/core_components/register_map/register_factory.rb +1 -1
- data/lib/rggen/core_components/register_map/register_map_factory.rb +1 -1
- data/lib/rggen/core_components/rtl/item.rb +1 -1
- data/lib/rggen/input_base/component.rb +9 -0
- data/lib/rggen/output_base/code_utility.rb +6 -0
- data/lib/rggen/output_base/component.rb +1 -0
- data/lib/rggen/output_base/item_factory.rb +3 -0
- data/lib/rggen/output_base/verilog_utility/class_definition.rb +35 -0
- data/lib/rggen/output_base/verilog_utility/declaration.rb +11 -4
- data/lib/rggen/output_base/verilog_utility/identifier.rb +1 -1
- data/lib/rggen/output_base/verilog_utility/module_definition.rb +33 -7
- data/lib/rggen/version.rb +2 -2
- data/ral/rggen_ral_block.svh +3 -8
- data/ral/rggen_ral_macros.svh +9 -2
- data/rtl/register/rggen_bus_exporter.sv +96 -0
- data/rtl/register_block/rggen_host_if_apb.sv +2 -0
- data/rtl/register_block/rggen_host_if_axi4lite.sv +7 -1
- data/rtl/register_block/rggen_response_mux.sv +53 -23
- data/sample/sample.csv +15 -14
- data/sample/sample.xls +0 -0
- data/sample/sample.xlsx +0 -0
- data/sample/sample_0.sv +77 -14
- data/sample/sample_0_ral_pkg.sv +6 -2
- data/sample/sample_1.sv +17 -11
- data/sample/sample_1_ral_pkg.sv +1 -1
- data/sample/sample_setup.rb +6 -6
- data/setup/default.rb +6 -6
- metadata +20 -19
- data/lib/rggen/builtins/bit_field/field_model_declaration.rb +0 -9
- data/lib/rggen/builtins/register/field_model_declarations.rb +0 -7
- data/lib/rggen/builtins/register/reg_model_creation.rb +0 -64
- data/lib/rggen/builtins/register/reg_model_declaration.rb +0 -13
- data/lib/rggen/builtins/register/reg_model_definition.rb +0 -22
- data/lib/rggen/builtins/register_block/module_definition.rb +0 -13
- data/lib/rggen/builtins/register_block/reg_model_creator.rb +0 -14
- data/lib/rggen/builtins/register_block/reg_model_declarations.rb +0 -7
- data/lib/rggen/builtins/register_block/signal_declarations.rb +0 -9
@@ -9,6 +9,7 @@ require_relative 'core_components/register_map/loader'
|
|
9
9
|
require_relative 'core_components/register_map/raise_error'
|
10
10
|
require_relative 'core_components/register_map/component'
|
11
11
|
require_relative 'core_components/register_map/item'
|
12
|
+
require_relative 'core_components/register_map/component_factory'
|
12
13
|
require_relative 'core_components/register_map/register_map_factory'
|
13
14
|
require_relative 'core_components/register_map/register_block_factory'
|
14
15
|
require_relative 'core_components/register_map/register_factory'
|
@@ -20,5 +21,6 @@ require_relative 'core_components/rtl/component'
|
|
20
21
|
require_relative 'core_components/rtl/item'
|
21
22
|
require_relative 'core_components/rtl/setup'
|
22
23
|
|
24
|
+
require_relative 'core_components/ral/component'
|
23
25
|
require_relative 'core_components/ral/item'
|
24
26
|
require_relative 'core_components/ral/setup'
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module RgGen
|
2
|
+
module RAL
|
3
|
+
class Component < OutputBase::Component
|
4
|
+
def build
|
5
|
+
super
|
6
|
+
@items.each do |item|
|
7
|
+
def_object_delegators(item, *item.identifiers)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def variable_declarations(domain)
|
12
|
+
[*@items, *@children].flat_map do |item_or_child|
|
13
|
+
item_or_child.variable_declarations(domain)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def parameter_declarations(domain)
|
18
|
+
[*@items, *@children].flat_map do |item_or_child|
|
19
|
+
item_or_child.parameter_declarations(domain)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -3,13 +3,58 @@ module RgGen
|
|
3
3
|
class Item < OutputBase::Item
|
4
4
|
use_verilog_utility
|
5
5
|
|
6
|
+
def initialize(owner)
|
7
|
+
super(owner)
|
8
|
+
@identifiers = []
|
9
|
+
@variable_declarations = Hash.new { |h, d| h[d] = [] }
|
10
|
+
@parameter_declarations = Hash.new { |h, d| h[d] = [] }
|
11
|
+
end
|
12
|
+
|
13
|
+
attr_reader :identifiers
|
14
|
+
|
15
|
+
class << self
|
16
|
+
private
|
17
|
+
|
18
|
+
def define_declaration_method(method_name)
|
19
|
+
define_method(method_name) do |domain, handle_name, attributes = {}|
|
20
|
+
attributes[:name] ||= handle_name
|
21
|
+
add_identifier(handle_name, attributes[:name])
|
22
|
+
add_declaration(method_name, domain, attributes)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
define_declaration_method :variable
|
28
|
+
define_declaration_method :parameter
|
29
|
+
|
30
|
+
def variable_declarations(domain = nil)
|
31
|
+
return @variable_declarations if domain.nil?
|
32
|
+
@variable_declarations[domain]
|
33
|
+
end
|
34
|
+
|
35
|
+
def parameter_declarations(domain = nil)
|
36
|
+
return @parameter_declarations if domain.nil?
|
37
|
+
@parameter_declarations[domain]
|
38
|
+
end
|
39
|
+
|
6
40
|
private
|
7
41
|
|
8
|
-
def
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
42
|
+
def add_identifier(handle_name, name)
|
43
|
+
create_identifier(name).tap do |i|
|
44
|
+
instance_variable_set(handle_name.variablize, i)
|
45
|
+
attr_singleton_reader(handle_name)
|
46
|
+
identifiers << handle_name
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def add_declaration(type, domain, attributes)
|
51
|
+
create_declaration(type, attributes).tap do |d|
|
52
|
+
declarations = {
|
53
|
+
variable: @variable_declarations,
|
54
|
+
parameter: @parameter_declarations
|
55
|
+
}.fetch(type)
|
56
|
+
declarations[domain] << d
|
57
|
+
end
|
13
58
|
end
|
14
59
|
end
|
15
60
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module RgGen
|
2
2
|
module RegisterMap
|
3
|
-
class BitFieldFactory <
|
3
|
+
class BitFieldFactory < ComponentFactory
|
4
4
|
def create_active_items(bit_field, configuration, cells)
|
5
5
|
active_item_factories.each_value.with_index do |factory, index|
|
6
6
|
create_item(factory, bit_field, configuration, cells[index])
|
@@ -3,10 +3,13 @@ module RgGen
|
|
3
3
|
class Component < InputBase::Component
|
4
4
|
include Base::HierarchicalAccessors
|
5
5
|
|
6
|
-
def initialize(parent)
|
6
|
+
def initialize(parent, configuration)
|
7
7
|
super(parent)
|
8
|
+
@configuration = configuration
|
8
9
|
define_hierarchical_accessors
|
9
10
|
end
|
11
|
+
|
12
|
+
attr_reader :configuration
|
10
13
|
end
|
11
14
|
end
|
12
15
|
end
|
@@ -4,7 +4,6 @@ module RgGen
|
|
4
4
|
include Base::HierarchicalItemAccessors
|
5
5
|
include RaiseError
|
6
6
|
|
7
|
-
attr_reader :configuration
|
8
7
|
attr_reader :position
|
9
8
|
|
10
9
|
def initialize(owner)
|
@@ -12,12 +11,15 @@ module RgGen
|
|
12
11
|
define_hierarchical_item_accessors
|
13
12
|
end
|
14
13
|
|
15
|
-
def build(
|
16
|
-
@
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
14
|
+
def build(cell)
|
15
|
+
@position = cell.position
|
16
|
+
super(cell.value)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def configuration
|
22
|
+
@owner.configuration
|
21
23
|
end
|
22
24
|
end
|
23
25
|
end
|
@@ -5,8 +5,8 @@ module RgGen
|
|
5
5
|
|
6
6
|
def create(component, configuration, cell = nil)
|
7
7
|
convert_cell_value(cell)
|
8
|
-
create_item(component, cell)
|
9
|
-
item.build(
|
8
|
+
create_item(component, cell) do |item|
|
9
|
+
item.build(cell) unless cell.nil?
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module RgGen
|
2
2
|
module RegisterMap
|
3
|
-
class RegisterBlockFactory <
|
3
|
+
class RegisterBlockFactory < ComponentFactory
|
4
4
|
def create_active_items(register_block, configuration, sheet)
|
5
5
|
active_item_factories.each_value.with_index do |factory, index|
|
6
6
|
cell = sheet[index, 2]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module RgGen
|
2
2
|
module RegisterMap
|
3
|
-
class RegisterFactory <
|
3
|
+
class RegisterFactory < ComponentFactory
|
4
4
|
def create_active_items(register, configuration, rows)
|
5
5
|
active_item_factories.each_value.with_index do |factory, index|
|
6
6
|
create_item(factory, register, configuration, rows.first[index])
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module RgGen
|
2
2
|
module RegisterMap
|
3
|
-
class RegisterMapFactory <
|
3
|
+
class RegisterMapFactory < ComponentFactory
|
4
4
|
def create_children(register_map, configuration, map)
|
5
5
|
map.sheets.each do |sheet|
|
6
6
|
create_child(register_map, configuration, sheet)
|
@@ -25,7 +25,7 @@ module RgGen
|
|
25
25
|
|
26
26
|
def define_declaration_method(method_name)
|
27
27
|
define_method(method_name) do |handle_name, attributes = {}|
|
28
|
-
attributes[:name] ||= handle_name
|
28
|
+
attributes[:name] ||= handle_name
|
29
29
|
add_identifier(handle_name, attributes[:name])
|
30
30
|
add_declaration(method_name, attributes)
|
31
31
|
end
|
@@ -1,6 +1,15 @@
|
|
1
1
|
module RgGen
|
2
2
|
module InputBase
|
3
3
|
class Component < Base::Component
|
4
|
+
def initialize(parent)
|
5
|
+
super(parent)
|
6
|
+
@need_children = true
|
7
|
+
end
|
8
|
+
|
9
|
+
def need_no_children
|
10
|
+
@need_children = false
|
11
|
+
end
|
12
|
+
|
4
13
|
def add_item(item)
|
5
14
|
super(item)
|
6
15
|
def_object_delegators(@items.last, *item.fields)
|
@@ -36,6 +36,12 @@ module RgGen
|
|
36
36
|
code_block.indent -= indent_size
|
37
37
|
end
|
38
38
|
|
39
|
+
def wrap(code_block, head, tail, &block)
|
40
|
+
code_block << head
|
41
|
+
block.call if block_given?
|
42
|
+
code_block << tail
|
43
|
+
end
|
44
|
+
|
39
45
|
def loop_index(level)
|
40
46
|
level.times.with_object('i') { |_, index| index.next! }
|
41
47
|
end
|
@@ -3,12 +3,20 @@ module RgGen
|
|
3
3
|
module VerilogUtility
|
4
4
|
class ClassDefinition < StructureDefinition
|
5
5
|
attr_setter :base
|
6
|
+
attr_setter :parameters
|
7
|
+
attr_setter :variables
|
8
|
+
|
9
|
+
def to_code
|
10
|
+
bodies.unshift(variables_declarations) if variables?
|
11
|
+
super
|
12
|
+
end
|
6
13
|
|
7
14
|
private
|
8
15
|
|
9
16
|
def header_code
|
10
17
|
code_block do |code|
|
11
18
|
code << :class << space << @name
|
19
|
+
paraemter_declarations(code) if parameters?
|
12
20
|
code << space <<:extends << space << @base unless @base.nil?
|
13
21
|
code << semicolon
|
14
22
|
end
|
@@ -17,6 +25,33 @@ module RgGen
|
|
17
25
|
def footer_code
|
18
26
|
:endclass
|
19
27
|
end
|
28
|
+
|
29
|
+
def parameters?
|
30
|
+
!(@parameters.nil? || @parameters.empty?)
|
31
|
+
end
|
32
|
+
|
33
|
+
def variables?
|
34
|
+
!(@variables.nil? || @variables.empty?)
|
35
|
+
end
|
36
|
+
|
37
|
+
def paraemter_declarations(code)
|
38
|
+
wrap(code, '#(', ')') do
|
39
|
+
indent(code, 2) do
|
40
|
+
@parameters.each_with_index do |d, i|
|
41
|
+
code << comma << nl if i > 0
|
42
|
+
code << d
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def variables_declarations
|
49
|
+
lambda do |code|
|
50
|
+
variables.each do |variable|
|
51
|
+
code << variable << semicolon << nl
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
20
55
|
end
|
21
56
|
end
|
22
57
|
end
|
@@ -30,7 +30,7 @@ module RgGen
|
|
30
30
|
when :port
|
31
31
|
@attributes[:direction] || ''
|
32
32
|
when :parameter
|
33
|
-
@attributes[:parameter_type]
|
33
|
+
@attributes[:parameter_type] || ''
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -39,9 +39,7 @@ module RgGen
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def width
|
42
|
-
|
43
|
-
return '' if (variable? || port?) && @attributes[:width] == 1
|
44
|
-
"[#{@attributes[:width] - 1}:0]"
|
42
|
+
(vector? && "[#{(@attributes[:width] || 1) - 1}:0]") || ''
|
45
43
|
end
|
46
44
|
|
47
45
|
def identifier
|
@@ -64,6 +62,15 @@ module RgGen
|
|
64
62
|
def port?
|
65
63
|
@declation_type == :port
|
66
64
|
end
|
65
|
+
|
66
|
+
def parameter?
|
67
|
+
@declation_type == :parameter
|
68
|
+
end
|
69
|
+
|
70
|
+
def vector?
|
71
|
+
return true if @attributes[:vector]
|
72
|
+
@attributes[:width] && (parameter? || (@attributes[:width] > 1))
|
73
|
+
end
|
67
74
|
end
|
68
75
|
end
|
69
76
|
end
|
@@ -4,6 +4,12 @@ module RgGen
|
|
4
4
|
class ModuleDefinition < StructureDefinition
|
5
5
|
attr_setter :parameters
|
6
6
|
attr_setter :ports
|
7
|
+
attr_setter :signals
|
8
|
+
|
9
|
+
def to_code
|
10
|
+
bodies.unshift(signal_declarations) if signals?
|
11
|
+
super
|
12
|
+
end
|
7
13
|
|
8
14
|
private
|
9
15
|
|
@@ -20,17 +26,37 @@ module RgGen
|
|
20
26
|
:endmodule
|
21
27
|
end
|
22
28
|
|
29
|
+
def parameters?
|
30
|
+
!(@parameters.nil? || @parameters.empty?)
|
31
|
+
end
|
32
|
+
|
33
|
+
def ports?
|
34
|
+
!(@ports.nil? || @ports.empty?)
|
35
|
+
end
|
36
|
+
|
37
|
+
def signals?
|
38
|
+
!(@signals.nil? || @signals.empty?)
|
39
|
+
end
|
40
|
+
|
23
41
|
def parameter_declarations(code)
|
24
|
-
return
|
25
|
-
code
|
26
|
-
|
27
|
-
|
42
|
+
return unless parameters?
|
43
|
+
wrap(code, '#(', ')') do
|
44
|
+
declarations(@parameters, code)
|
45
|
+
end
|
28
46
|
end
|
29
47
|
|
30
48
|
def port_declarations(code)
|
31
|
-
code
|
32
|
-
|
33
|
-
|
49
|
+
wrap(code, '(', ')') do
|
50
|
+
declarations(@ports, code) if ports?
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def signal_declarations
|
55
|
+
lambda do |code|
|
56
|
+
signals.each do |signal|
|
57
|
+
code << signal << semicolon << nl
|
58
|
+
end
|
59
|
+
end
|
34
60
|
end
|
35
61
|
|
36
62
|
def declarations(list, code)
|