rggen 0.7.2 → 0.8.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/lib/rggen/builtins.rb +2 -1
- data/lib/rggen/builtins/bit_field/type.rb +3 -5
- data/lib/rggen/builtins/bit_field/types/ro.rb +5 -3
- data/lib/rggen/builtins/bit_field/types/rw.rb +5 -3
- data/lib/rggen/builtins/bit_field/types/rwl_rwe.rb +5 -3
- data/lib/rggen/builtins/bit_field/types/w0c_w1c.erb +1 -1
- data/lib/rggen/builtins/bit_field/types/w0c_w1c.rb +11 -5
- data/lib/rggen/builtins/bit_field/types/w0s_w1s.rb +10 -6
- data/lib/rggen/builtins/global/array_port_format.rb +15 -0
- data/lib/rggen/builtins/global/unfold_sv_interface_port.rb +22 -0
- data/lib/rggen/builtins/register/type.rb +10 -4
- data/lib/rggen/builtins/register/types/external.rb +56 -5
- data/lib/rggen/builtins/register_block/clock_reset.rb +2 -2
- data/lib/rggen/builtins/register_block/host_if.rb +1 -1
- data/lib/rggen/builtins/register_block/host_ifs/apb.rb +44 -4
- data/lib/rggen/builtins/register_block/host_ifs/axi4lite.rb +76 -7
- data/lib/rggen/builtins/register_block/rtl_top.rb +17 -7
- data/lib/rggen/core_components.rb +3 -3
- data/lib/rggen/core_components/ral/item.rb +16 -15
- data/lib/rggen/core_components/rtl/component.rb +0 -4
- data/lib/rggen/core_components/rtl/item.rb +27 -32
- data/lib/rggen/core_components/verilog_utility.rb +6 -6
- data/lib/rggen/core_components/verilog_utility/class_definition.rb +11 -11
- data/lib/rggen/core_components/verilog_utility/identifier.rb +49 -17
- data/lib/rggen/core_components/verilog_utility/{interface_instantiation.rb → interface_instance.rb} +7 -3
- data/lib/rggen/core_components/verilog_utility/{interface_port_declaration.rb → interface_port.rb} +7 -3
- data/lib/rggen/core_components/verilog_utility/local_scope.rb +8 -4
- data/lib/rggen/core_components/verilog_utility/module_definition.rb +20 -9
- data/lib/rggen/core_components/verilog_utility/package_definition.rb +15 -23
- data/lib/rggen/core_components/verilog_utility/structure_definition.rb +7 -6
- data/lib/rggen/core_components/verilog_utility/variable.rb +115 -0
- data/lib/rggen/version.rb +2 -2
- data/rtl/compile.f +0 -3
- data/rtl/rggen_address_decoder.sv +2 -2
- data/rtl/rggen_bus_splitter.sv +2 -2
- data/rtl/rggen_external_register.sv +2 -2
- data/rtl/rggen_host_if_apb.sv +2 -2
- data/rtl/rggen_indirect_register.sv +3 -3
- data/sample/sample.json +3 -1
- data/sample/sample.yaml +2 -0
- data/sample/sample_0.sv +30 -42
- data/sample/sample_1.sv +13 -13
- data/sample/sample_setup.rb +2 -2
- data/setup/default.rb +2 -2
- metadata +7 -9
- data/lib/rggen/builtins/register_block/irq_controller.erb +0 -9
- data/lib/rggen/builtins/register_block/irq_controller.rb +0 -43
- data/lib/rggen/builtins/register_block/rtl_top.erb +0 -7
- data/lib/rggen/core_components/verilog_utility/declaration.rb +0 -76
- data/rtl/rggen_irq_controller.sv +0 -21
data/sample/sample_1.sv
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
module sample_1 (
|
2
|
-
input clk,
|
3
|
-
input rst_n,
|
2
|
+
input logic clk,
|
3
|
+
input logic rst_n,
|
4
4
|
rggen_apb_if.slave apb_if,
|
5
|
-
output [15:0] o_bit_field_0_0,
|
6
|
-
input [15:0] i_bit_field_0_1,
|
7
|
-
output [31:0] o_bit_field_1_0,
|
8
|
-
input i_bit_field_2_0,
|
9
|
-
output o_bit_field_2_1
|
5
|
+
output logic [15:0] o_bit_field_0_0,
|
6
|
+
input logic [15:0] i_bit_field_0_1,
|
7
|
+
output logic [31:0] o_bit_field_1_0,
|
8
|
+
input logic i_bit_field_2_0,
|
9
|
+
output logic o_bit_field_2_1
|
10
10
|
);
|
11
11
|
rggen_register_if #(7, 32) register_if[3]();
|
12
12
|
`define rggen_connect_bit_field_if(RIF, FIF, MSB, LSB) \
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
13
|
+
assign FIF.read_access = RIF.read_access; \
|
14
|
+
assign FIF.write_access = RIF.write_access; \
|
15
|
+
assign FIF.write_data = RIF.write_data[MSB:LSB]; \
|
16
|
+
assign FIF.write_mask = RIF.write_mask[MSB:LSB]; \
|
17
|
+
assign RIF.value[MSB:LSB] = FIF.value; \
|
18
|
+
assign RIF.read_data[MSB:LSB] = FIF.read_data;
|
19
19
|
rggen_host_if_apb #(
|
20
20
|
.LOCAL_ADDRESS_WIDTH (7),
|
21
21
|
.DATA_WIDTH (32),
|
data/sample/sample_setup.rb
CHANGED
@@ -8,13 +8,13 @@ define_list_item :register_block, :host_if, :bar do
|
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
enable :global , [:data_width, :address_width]
|
11
|
+
enable :global , [:data_width, :address_width, :array_port_format, :unfold_sv_interface_port]
|
12
12
|
enable :register_block, [:name, :base_address]
|
13
13
|
enable :register , [:offset_address, :name, :array, :type, :uniquness_validator]
|
14
14
|
enable :register , :type, [:indirect, :external]
|
15
15
|
enable :bit_field , [:bit_assignment, :name, :type, :initial_value, :reference]
|
16
16
|
enable :bit_field , :type, [:rw, :ro, :w0c, :w1c, :w0s, :w1s, :rwl, :rwe, :foo, :reserved]
|
17
|
-
enable :register_block, [:top_module, :clock_reset, :host_if
|
17
|
+
enable :register_block, [:top_module, :clock_reset, :host_if]
|
18
18
|
enable :register_block, :host_if, [:apb, :bar]
|
19
19
|
enable :register , :rtl_top
|
20
20
|
enable :bit_field , :rtl_top
|
data/setup/default.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
enable :global , [:data_width, :address_width]
|
1
|
+
enable :global , [:data_width, :address_width, :array_port_format, :unfold_sv_interface_port]
|
2
2
|
enable :register_block, [:name, :byte_size]
|
3
3
|
enable :register , [:offset_address, :name, :array, :type, :uniquness_validator]
|
4
4
|
enable :register , :type, [:indirect, :external]
|
5
5
|
enable :bit_field , [:bit_assignment, :name, :type, :initial_value, :reference]
|
6
6
|
enable :bit_field , :type, [:rw, :ro, :w0c, :w1c, :w0s, :w1s, :rwl, :rwe, :reserved]
|
7
|
-
enable :register_block, [:rtl_top, :clock_reset, :host_if
|
7
|
+
enable :register_block, [:rtl_top, :clock_reset, :host_if]
|
8
8
|
enable :register_block, :host_if, [:apb, :axi4lite]
|
9
9
|
enable :register , :rtl_top
|
10
10
|
enable :bit_field , :rtl_top
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rggen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.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-01-
|
11
|
+
date: 2019-01-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: erubi
|
@@ -163,7 +163,9 @@ files:
|
|
163
163
|
- lib/rggen/builtins/bit_field/types/w0s_w1s.rb
|
164
164
|
- lib/rggen/builtins/bit_field/types/wo.rb
|
165
165
|
- lib/rggen/builtins/global/address_width.rb
|
166
|
+
- lib/rggen/builtins/global/array_port_format.rb
|
166
167
|
- lib/rggen/builtins/global/data_width.rb
|
168
|
+
- lib/rggen/builtins/global/unfold_sv_interface_port.rb
|
167
169
|
- lib/rggen/builtins/loaders/configuration/json_loader.rb
|
168
170
|
- lib/rggen/builtins/loaders/configuration/yaml_loader.rb
|
169
171
|
- lib/rggen/builtins/loaders/register_map/csv_loader.rb
|
@@ -198,11 +200,8 @@ files:
|
|
198
200
|
- lib/rggen/builtins/register_block/host_ifs/apb.rb
|
199
201
|
- lib/rggen/builtins/register_block/host_ifs/axi4lite.erb
|
200
202
|
- lib/rggen/builtins/register_block/host_ifs/axi4lite.rb
|
201
|
-
- lib/rggen/builtins/register_block/irq_controller.erb
|
202
|
-
- lib/rggen/builtins/register_block/irq_controller.rb
|
203
203
|
- lib/rggen/builtins/register_block/name.rb
|
204
204
|
- lib/rggen/builtins/register_block/ral_package.rb
|
205
|
-
- lib/rggen/builtins/register_block/rtl_top.erb
|
206
205
|
- lib/rggen/builtins/register_block/rtl_top.rb
|
207
206
|
- lib/rggen/builtins/register_block/sub_model_creator.rb
|
208
207
|
- lib/rggen/commands.rb
|
@@ -243,16 +242,16 @@ files:
|
|
243
242
|
- lib/rggen/core_components/rtl/setup.rb
|
244
243
|
- lib/rggen/core_components/verilog_utility.rb
|
245
244
|
- lib/rggen/core_components/verilog_utility/class_definition.rb
|
246
|
-
- lib/rggen/core_components/verilog_utility/declaration.rb
|
247
245
|
- lib/rggen/core_components/verilog_utility/identifier.rb
|
248
|
-
- lib/rggen/core_components/verilog_utility/
|
249
|
-
- lib/rggen/core_components/verilog_utility/
|
246
|
+
- lib/rggen/core_components/verilog_utility/interface_instance.rb
|
247
|
+
- lib/rggen/core_components/verilog_utility/interface_port.rb
|
250
248
|
- lib/rggen/core_components/verilog_utility/local_scope.rb
|
251
249
|
- lib/rggen/core_components/verilog_utility/module_definition.rb
|
252
250
|
- lib/rggen/core_components/verilog_utility/package_definition.rb
|
253
251
|
- lib/rggen/core_components/verilog_utility/source_file.rb
|
254
252
|
- lib/rggen/core_components/verilog_utility/structure_definition.rb
|
255
253
|
- lib/rggen/core_components/verilog_utility/subroutine_definition.rb
|
254
|
+
- lib/rggen/core_components/verilog_utility/variable.rb
|
256
255
|
- lib/rggen/core_extensions/array.rb
|
257
256
|
- lib/rggen/core_extensions/facets.rb
|
258
257
|
- lib/rggen/core_extensions/forwardable.rb
|
@@ -304,7 +303,6 @@ files:
|
|
304
303
|
- rtl/rggen_host_if_apb.sv
|
305
304
|
- rtl/rggen_host_if_axi4lite.sv
|
306
305
|
- rtl/rggen_indirect_register.sv
|
307
|
-
- rtl/rggen_irq_controller.sv
|
308
306
|
- rtl/rggen_register_base.sv
|
309
307
|
- rtl/rggen_register_if.sv
|
310
308
|
- rtl/rggen_rtl_pkg.sv
|
@@ -1,43 +0,0 @@
|
|
1
|
-
simple_item :register_block, :irq_controller do
|
2
|
-
rtl do
|
3
|
-
available? { register_block.source.bit_fields.any?(&:irq?) }
|
4
|
-
|
5
|
-
build do
|
6
|
-
output :register_block, :irq, width: 1 , name: 'o_irq'
|
7
|
-
logic :register_block, :ier, width: total_interrupts
|
8
|
-
logic :register_block, :isr, width: total_interrupts
|
9
|
-
end
|
10
|
-
|
11
|
-
generate_code :register_block do |code|
|
12
|
-
code << assign_ier << nl
|
13
|
-
code << assign_isr << nl
|
14
|
-
code << process_template
|
15
|
-
end
|
16
|
-
|
17
|
-
def assign_ier
|
18
|
-
assign(ier, concat(ier_fields.map(&:value)))
|
19
|
-
end
|
20
|
-
|
21
|
-
def assign_isr
|
22
|
-
assign(isr, concat(isr_fields.map(&:value)))
|
23
|
-
end
|
24
|
-
|
25
|
-
def isr_fields
|
26
|
-
@isr_fields ||= register_block.bit_fields.select(&:irq?)
|
27
|
-
end
|
28
|
-
|
29
|
-
def ier_fields
|
30
|
-
@ier_fields ||= isr_fields.each_with_object([]) do |isr_field, fields|
|
31
|
-
fields << find_ier_field(isr_field.reference)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def find_ier_field(reference)
|
36
|
-
register_block.bit_fields.find_by(name: reference.name)
|
37
|
-
end
|
38
|
-
|
39
|
-
def total_interrupts
|
40
|
-
@total_interrupts ||= isr_fields.sum(0, &:width)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
@@ -1,7 +0,0 @@
|
|
1
|
-
`define rggen_connect_bit_field_if(RIF, FIF, MSB, LSB) \
|
2
|
-
assign FIF.read_access = RIF.read_access; \
|
3
|
-
assign FIF.write_access = RIF.write_access; \
|
4
|
-
assign FIF.write_data = RIF.write_data[MSB:LSB]; \
|
5
|
-
assign FIF.write_mask = RIF.write_mask[MSB:LSB]; \
|
6
|
-
assign RIF.value[MSB:LSB] = FIF.value; \
|
7
|
-
assign RIF.read_data[MSB:LSB] = FIF.read_data;
|
@@ -1,76 +0,0 @@
|
|
1
|
-
module RgGen
|
2
|
-
module VerilogUtility
|
3
|
-
class Declaration
|
4
|
-
def initialize(declation_type, attributes)
|
5
|
-
@declation_type = declation_type
|
6
|
-
@attributes = attributes
|
7
|
-
end
|
8
|
-
|
9
|
-
def to_s
|
10
|
-
code_snippets.join(' ')
|
11
|
-
end
|
12
|
-
|
13
|
-
private
|
14
|
-
|
15
|
-
def code_snippets
|
16
|
-
[
|
17
|
-
random_or_direction_or_parameter_type,
|
18
|
-
data_type,
|
19
|
-
width,
|
20
|
-
identifier,
|
21
|
-
default_value_assignment
|
22
|
-
].select(&:itself)
|
23
|
-
end
|
24
|
-
|
25
|
-
def random_or_direction_or_parameter_type
|
26
|
-
{
|
27
|
-
variable: @attributes[:random] && :rand,
|
28
|
-
port: @attributes[:direction],
|
29
|
-
parameter: @attributes[:parameter_type]
|
30
|
-
}[@declation_type]
|
31
|
-
end
|
32
|
-
|
33
|
-
def data_type
|
34
|
-
@attributes[:data_type]
|
35
|
-
end
|
36
|
-
|
37
|
-
def width
|
38
|
-
return unless vector?
|
39
|
-
return "[#{@attributes[:width]}-1:0]" unless numerical_width?
|
40
|
-
"[#{(@attributes[:width] || 1) - 1}:0]"
|
41
|
-
end
|
42
|
-
|
43
|
-
def identifier
|
44
|
-
"#{@attributes[:name]}#{dimensions}"
|
45
|
-
end
|
46
|
-
|
47
|
-
def dimensions
|
48
|
-
return unless @attributes[:dimensions]
|
49
|
-
@attributes[:dimensions].map { |dimension| "[#{dimension}]" }.join
|
50
|
-
end
|
51
|
-
|
52
|
-
def default_value_assignment
|
53
|
-
return unless @attributes[:default]
|
54
|
-
"= #{@attributes[:default]}"
|
55
|
-
end
|
56
|
-
|
57
|
-
def parameter?
|
58
|
-
@declation_type == :parameter
|
59
|
-
end
|
60
|
-
|
61
|
-
def vector?
|
62
|
-
return true if @attributes[:vector]
|
63
|
-
return false unless @attributes[:width]
|
64
|
-
return true unless numerical_width?
|
65
|
-
return true if parameter?
|
66
|
-
@attributes[:width] > 1
|
67
|
-
end
|
68
|
-
|
69
|
-
def numerical_width?
|
70
|
-
return true unless @attributes[:width]
|
71
|
-
return true if Integer === @attributes[:width]
|
72
|
-
false
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
end
|
data/rtl/rggen_irq_controller.sv
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
module rggen_irq_controller #(
|
2
|
-
parameter TOTAL_INTERRUPTS = 1
|
3
|
-
)(
|
4
|
-
input clk,
|
5
|
-
input rst_n,
|
6
|
-
input [TOTAL_INTERRUPTS-1:0] i_ier,
|
7
|
-
input [TOTAL_INTERRUPTS-1:0] i_isr,
|
8
|
-
output o_irq
|
9
|
-
);
|
10
|
-
logic irq;
|
11
|
-
|
12
|
-
assign o_irq = irq;
|
13
|
-
always_ff @(posedge clk or negedge rst_n) begin
|
14
|
-
if (!rst_n) begin
|
15
|
-
irq <= 1'b0;
|
16
|
-
end
|
17
|
-
else begin
|
18
|
-
irq <= |(i_ier & i_isr);
|
19
|
-
end
|
20
|
-
end
|
21
|
-
endmodule
|