rggen 0.7.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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