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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rggen/builtins.rb +2 -1
  3. data/lib/rggen/builtins/bit_field/type.rb +3 -5
  4. data/lib/rggen/builtins/bit_field/types/ro.rb +5 -3
  5. data/lib/rggen/builtins/bit_field/types/rw.rb +5 -3
  6. data/lib/rggen/builtins/bit_field/types/rwl_rwe.rb +5 -3
  7. data/lib/rggen/builtins/bit_field/types/w0c_w1c.erb +1 -1
  8. data/lib/rggen/builtins/bit_field/types/w0c_w1c.rb +11 -5
  9. data/lib/rggen/builtins/bit_field/types/w0s_w1s.rb +10 -6
  10. data/lib/rggen/builtins/global/array_port_format.rb +15 -0
  11. data/lib/rggen/builtins/global/unfold_sv_interface_port.rb +22 -0
  12. data/lib/rggen/builtins/register/type.rb +10 -4
  13. data/lib/rggen/builtins/register/types/external.rb +56 -5
  14. data/lib/rggen/builtins/register_block/clock_reset.rb +2 -2
  15. data/lib/rggen/builtins/register_block/host_if.rb +1 -1
  16. data/lib/rggen/builtins/register_block/host_ifs/apb.rb +44 -4
  17. data/lib/rggen/builtins/register_block/host_ifs/axi4lite.rb +76 -7
  18. data/lib/rggen/builtins/register_block/rtl_top.rb +17 -7
  19. data/lib/rggen/core_components.rb +3 -3
  20. data/lib/rggen/core_components/ral/item.rb +16 -15
  21. data/lib/rggen/core_components/rtl/component.rb +0 -4
  22. data/lib/rggen/core_components/rtl/item.rb +27 -32
  23. data/lib/rggen/core_components/verilog_utility.rb +6 -6
  24. data/lib/rggen/core_components/verilog_utility/class_definition.rb +11 -11
  25. data/lib/rggen/core_components/verilog_utility/identifier.rb +49 -17
  26. data/lib/rggen/core_components/verilog_utility/{interface_instantiation.rb → interface_instance.rb} +7 -3
  27. data/lib/rggen/core_components/verilog_utility/{interface_port_declaration.rb → interface_port.rb} +7 -3
  28. data/lib/rggen/core_components/verilog_utility/local_scope.rb +8 -4
  29. data/lib/rggen/core_components/verilog_utility/module_definition.rb +20 -9
  30. data/lib/rggen/core_components/verilog_utility/package_definition.rb +15 -23
  31. data/lib/rggen/core_components/verilog_utility/structure_definition.rb +7 -6
  32. data/lib/rggen/core_components/verilog_utility/variable.rb +115 -0
  33. data/lib/rggen/version.rb +2 -2
  34. data/rtl/compile.f +0 -3
  35. data/rtl/rggen_address_decoder.sv +2 -2
  36. data/rtl/rggen_bus_splitter.sv +2 -2
  37. data/rtl/rggen_external_register.sv +2 -2
  38. data/rtl/rggen_host_if_apb.sv +2 -2
  39. data/rtl/rggen_indirect_register.sv +3 -3
  40. data/sample/sample.json +3 -1
  41. data/sample/sample.yaml +2 -0
  42. data/sample/sample_0.sv +30 -42
  43. data/sample/sample_1.sv +13 -13
  44. data/sample/sample_setup.rb +2 -2
  45. data/setup/default.rb +2 -2
  46. metadata +7 -9
  47. data/lib/rggen/builtins/register_block/irq_controller.erb +0 -9
  48. data/lib/rggen/builtins/register_block/irq_controller.rb +0 -43
  49. data/lib/rggen/builtins/register_block/rtl_top.erb +0 -7
  50. data/lib/rggen/core_components/verilog_utility/declaration.rb +0 -76
  51. 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
- 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;
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),
@@ -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, :irq_controller]
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, :irq_controller]
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.7.2
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-14 00:00:00.000000000 Z
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/interface_instantiation.rb
249
- - lib/rggen/core_components/verilog_utility/interface_port_declaration.rb
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,9 +0,0 @@
1
- rggen_irq_controller #(
2
- .TOTAL_INTERRUPTS (<%= total_interrupts %>)
3
- ) u_irq_controller (
4
- .clk (<%= register_block.clock %>),
5
- .rst_n (<%= register_block.reset %>),
6
- .i_ier (<%= ier %>),
7
- .i_isr (<%= isr %>),
8
- .o_irq (<%= irq %>)
9
- );
@@ -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
@@ -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