rggen-veryl 0.3.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 921880c7d144cdd7dbb3c2cc585dc1e4c1bf31031b361708e841ba4865b8f71c
4
- data.tar.gz: '06838b3a4664045b2a8a9e2cd03f18aac6abfa587f383b02eb99c77566ec2bd5'
3
+ metadata.gz: d92c6db46e4bebb4c853f1a4a4599eed524a1d77a8cc6f7b62b65f282e032497
4
+ data.tar.gz: ae35fde024ba27dd80292c61504c39b4535bbea71d406f2bd357df1f4d6a9f51
5
5
  SHA512:
6
- metadata.gz: 535eb8b33c42bbe55d3b1823bcab2828f1c2fe5d1254cde7c3fe665b515efe4a3ecc35d319ecd90baa1f5488e29aa8450ad31de2111ddf664aa6b12458106f5e
7
- data.tar.gz: 2787dba578e8fbefd0f92f9c340720a5b138b4164dee4d544deca4ef14415ff40e503e65829a794c73b1b12322468541341afe292d8f38f1c266273fb92de1ca
6
+ metadata.gz: d5b4c108e8df2ee9773b98c27afd706f6b52a34b519179fbd37e83736bb631915e2145cbb137dd920680fdbb8fa3b866cb5cc3dcaff5215488ab9c6aa869520b
7
+ data.tar.gz: 2749d7b449e9c7488786c9fda5a45724dd2eedb20255435466934deeb7f3ef0e097020b941f34a7c481736fb4a53a0c12e52e601e006f34c4b220804d003d308
data/README.md CHANGED
@@ -43,7 +43,7 @@ You need to add this repository to the `[dependencies]` section in your `Veryl.t
43
43
 
44
44
  ```toml
45
45
  [dependencies]
46
- "https://github.com/rggen/rggen-veryl-rtl" = "0.3.0"
46
+ "rggen" = { github = "rggen/rggen-veryl-rtl", version = "0.4.0" }
47
47
  ```
48
48
 
49
49
  ## Contact
@@ -3,10 +3,10 @@ inst u_bit_field: rggen::rggen_bit_field #(
3
3
  INITIAL_VALUE: <%= initial_value %>,
4
4
  SW_READ_ACTION: rggen_sw_action::<%= sw_read_action %>,
5
5
  SW_WRITE_ACTION: rggen_sw_action::<%= sw_write_action %>,
6
- SW_WRITE_ONCE: <%= write_once %>,
7
- STORAGE: <%= storage %>,
8
- EXTERNAL_READ_DATA: <%= external_read_data %>,
9
- TRIGGER: <%= trigger %>
6
+ SW_WRITE_ONCE: <%= write_once? %>,
7
+ STORAGE: <%= storage? %>,
8
+ EXTERNAL_READ_DATA: <%= external_read_data? %>,
9
+ TRIGGER: <%= trigger? %>
10
10
  )(
11
11
  i_clk: i_clk,
12
12
  i_rst: i_rst,
@@ -78,26 +78,18 @@ RgGen.define_list_item_feature(:bit_field, :type, :custom) do
78
78
  }[bit_field.sw_write]
79
79
  end
80
80
 
81
- def write_once
82
- bit_field.sw_write_once? && 1 || 0
81
+ def write_once?
82
+ bit_field.sw_write_once?
83
83
  end
84
84
 
85
- def storage
86
- external_read_data? && 0 || 1
87
- end
88
-
89
- def external_read_data
90
- external_read_data? && 1 || 0
85
+ def storage?
86
+ !external_read_data?
91
87
  end
92
88
 
93
89
  def trigger?
94
90
  bit_field.write_trigger? || bit_field.read_trigger?
95
91
  end
96
92
 
97
- def trigger
98
- trigger? && 1 || 0
99
- end
100
-
101
93
  def input_port(name)
102
94
  find_port(name, all_bits_0)
103
95
  end
@@ -1,9 +1,9 @@
1
1
  inst u_bit_field: rggen::rggen_bit_field #(
2
2
  WIDTH: <%= width %>,
3
3
  SW_WRITE_ACTION: rggen_sw_action::WRITE_NONE,
4
- STORAGE: 0,
5
- EXTERNAL_READ_DATA: 1,
6
- TRIGGER: <%= trigger %>
4
+ STORAGE: false,
5
+ EXTERNAL_READ_DATA: true,
6
+ TRIGGER: <%= rotrg? %>
7
7
  )(
8
8
  i_clk: <%= clock %>,
9
9
  i_rst: <%= reset %>,
@@ -23,10 +23,6 @@ RgGen.define_list_item_feature(:bit_field, :type, [:ro, :rotrg]) do
23
23
  bit_field.type == :rotrg
24
24
  end
25
25
 
26
- def trigger
27
- rotrg? && 1 || 0
28
- end
29
-
30
26
  def read_trigger_signal
31
27
  rotrg? && read_trigger[loop_variables] || unused
32
28
  end
@@ -1,11 +1,11 @@
1
1
  inst u_bit_field: rggen::rggen_bit_field #(
2
2
  WIDTH: <%= width %>,
3
3
  SW_WRITE_ACTION: rggen_sw_action::WRITE_NONE,
4
- STORAGE: 0,
5
- EXTERNAL_READ_DATA: 1
4
+ STORAGE: false,
5
+ EXTERNAL_READ_DATA: true
6
6
  )(
7
- i_clk: '0,
8
- i_rst: '0,
7
+ i_clk: <%= clock %>,
8
+ i_rst: <%= reset %>,
9
9
  bit_field_if: <%= bit_field_if %>,
10
10
  i_value: <%= initial_value %>
11
11
  );
@@ -1,8 +1,8 @@
1
1
  inst u_bit_field: rggen::rggen_bit_field #(
2
2
  WIDTH: <%= width %>,
3
3
  INITIAL_VALUE: <%= initial_value %>,
4
- EXTERNAL_READ_DATA: 1,
5
- TRIGGER: <%= trigger %>
4
+ EXTERNAL_READ_DATA: true,
5
+ TRIGGER: <%= rowotrg? %>
6
6
  )(
7
7
  i_clk: <%= clock %>,
8
8
  i_rst: <%= reset %>,
@@ -29,10 +29,6 @@ RgGen.define_list_item_feature(:bit_field, :type, [:rowo, :rowotrg]) do
29
29
  bit_field.type == :rowotrg
30
30
  end
31
31
 
32
- def trigger
33
- rowotrg? && 1 || 0
34
- end
35
-
36
32
  def write_trigger_signal
37
33
  rowotrg? && write_trigger[loop_variables] || unused
38
34
  end
@@ -1,8 +1,8 @@
1
1
  inst u_bit_field: rggen::rggen_bit_field #(
2
2
  WIDTH: <%= width %>,
3
3
  INITIAL_VALUE: <%= initial_value %>,
4
- SW_WRITE_ONCE: <%= write_once %>,
5
- TRIGGER: <%= trigger %>
4
+ SW_WRITE_ONCE: <%= write_once? %>,
5
+ TRIGGER: <%= rwtrg? %>
6
6
  )(
7
7
  i_clk: <%= clock %>,
8
8
  i_rst: <%= reset %>,
@@ -24,10 +24,6 @@ RgGen.define_list_item_feature(:bit_field, :type, [:rw, :rwtrg, :w1]) do
24
24
  bit_field.type == :rwtrg
25
25
  end
26
26
 
27
- def trigger
28
- rwtrg? && 1 || 0
29
- end
30
-
31
27
  def write_trigger_signal
32
28
  rwtrg? && write_trigger[loop_variables] || unused
33
29
  end
@@ -36,8 +32,8 @@ RgGen.define_list_item_feature(:bit_field, :type, [:rw, :rwtrg, :w1]) do
36
32
  rwtrg? && read_trigger[loop_variables] || unused
37
33
  end
38
34
 
39
- def write_once
40
- bit_field.type == :w1 && 1 || 0
35
+ def write_once?
36
+ bit_field.type == :w1
41
37
  end
42
38
  end
43
39
  end
@@ -2,8 +2,8 @@ inst u_bit_field: rggen::rggen_bit_field #(
2
2
  WIDTH: <%= width %>,
3
3
  INITIAL_VALUE: <%= initial_value %>,
4
4
  SW_READ_ACTION: rggen_sw_action::READ_NONE,
5
- SW_WRITE_ONCE: <%= write_once %>,
6
- TRIGGER: <%= trigger %>
5
+ SW_WRITE_ONCE: <%= write_once? %>,
6
+ TRIGGER: <%= wotrg? %>
7
7
  )(
8
8
  i_clk: <%= clock %>,
9
9
  i_rst: <%= reset %>,
@@ -21,16 +21,12 @@ RgGen.define_list_item_feature(:bit_field, :type, [:wo, :wo1, :wotrg]) do
21
21
  bit_field.type == :wotrg
22
22
  end
23
23
 
24
- def trigger
25
- wotrg? && 1 || 0
26
- end
27
-
28
24
  def write_trigger_signal
29
25
  wotrg? && write_trigger[loop_variables] || unused
30
26
  end
31
27
 
32
- def write_once
33
- bit_field.type == :wo1 && 1 || 0
28
+ def write_once?
29
+ bit_field.type == :wo1
34
30
  end
35
31
  end
36
32
  end
@@ -22,6 +22,10 @@ module RgGen
22
22
  Modport.new(attributes, &)
23
23
  end
24
24
 
25
+ def create_generic(_, attributes, &)
26
+ DataObject.new(:generic, attributes, &)
27
+ end
28
+
25
29
  def create_param(_, attributes, &)
26
30
  DataObject.new(:param, attributes, &)
27
31
  end
@@ -38,6 +42,7 @@ module RgGen
38
42
  define_entity :output, :create_port, :port, -> { register_block }
39
43
  define_entity :modport, :create_modport, :port, -> { register_block }
40
44
  define_entity :interface, :create_if_instance, :variable, -> { component }
45
+ define_entity :generic, :create_generic, :generic, -> { register_block }
41
46
  define_entity :param, :create_param, :parameter, -> { register_block }
42
47
  define_entity :const, :create_const, :parameter, -> { component }
43
48
  define_entity :var, :create_var, :variable, -> { component }
@@ -1,6 +1,6 @@
1
1
  inst u_register: rggen::rggen_default_register #(
2
- READABLE: <%= readable %>,
3
- WRITABLE: <%= writable %>,
2
+ READABLE: <%= readable? %>,
3
+ WRITABLE: <%= writable? %>,
4
4
  ADDRESS_WIDTH: <%= address_width %>,
5
5
  OFFSET_ADDRESS: <%= offset_address %>,
6
6
  BUS_WIDTH: <%= bus_width %>,
@@ -1,6 +1,6 @@
1
1
  inst u_register: rggen::rggen_indirect_register #(
2
- READABLE: <%= readable %>,
3
- WRITABLE: <%= writable %>,
2
+ READABLE: <%= readable? %>,
3
+ WRITABLE: <%= writable? %>,
4
4
  ADDRESS_WIDTH: <%= address_width %>,
5
5
  OFFSET_ADDRESS: <%= offset_address %>,
6
6
  BUS_WIDTH: <%= bus_width %>,
@@ -1,6 +1,6 @@
1
1
  inst u_register: rggen::rggen_default_register #(
2
- READABLE: 1,
3
- WRITABLE: 1,
2
+ READABLE: true,
3
+ WRITABLE: true,
4
4
  ADDRESS_WIDTH: <%= address_width %>,
5
5
  OFFSET_ADDRESS: <%= offset_address %>,
6
6
  BUS_WIDTH: <%= bus_width %>,
@@ -7,6 +7,14 @@ RgGen.define_list_feature(:register, :type) do
7
7
 
8
8
  private
9
9
 
10
+ def readable?
11
+ register.readable?
12
+ end
13
+
14
+ def writable?
15
+ register.writable?
16
+ end
17
+
10
18
  def register_if
11
19
  register_block.register_if[register.index]
12
20
  end
@@ -7,7 +7,7 @@ RgGen.define_list_item_feature(:register_block, :protocol, :axi4lite) do
7
7
  name: 'ID_WIDTH', type: :u32, default: 0
8
8
  }
9
9
  param :write_first, {
10
- name: 'WRITE_FIRST', type: :bit, default: 1
10
+ name: 'WRITE_FIRST', type: :bool, default: true
11
11
  }
12
12
  modport :axi4lite_if, {
13
13
  name: 'axi4lite_if',
@@ -7,7 +7,7 @@ RgGen.define_list_item_feature(:register_block, :protocol, :native) do
7
7
  name: 'STROBE_WIDTH', type: :u32, default: bus_width / 8
8
8
  }
9
9
  param :use_read_strobe, {
10
- name: 'USE_READ_STROBE', type: :bit, default: 0
10
+ name: 'USE_READ_STROBE', type: :bool, default: false
11
11
  }
12
12
  modport :csrbus_if, {
13
13
  name: 'csrbus_if',
@@ -10,19 +10,19 @@ RgGen.define_list_feature(:register_block, :protocol) do
10
10
  name: 'ADDRESS_WIDTH', type: :u32, default: local_address_width
11
11
  }
12
12
  param :pre_decode, {
13
- name: 'PRE_DECODE', type: :bit, default: 0
13
+ name: 'PRE_DECODE', type: :bool, default: false
14
14
  }
15
15
  param :base_address, {
16
16
  name: 'BASE_ADDRESS', type: :bit, width: address_width, default: all_bits_0
17
17
  }
18
18
  param :error_status, {
19
- name: 'ERROR_STATUS', type: :bit, default: 0
19
+ name: 'ERROR_STATUS', type: :bool, default: false
20
20
  }
21
21
  param :default_read_data, {
22
22
  name: 'DEFAULT_READ_DATA', type: :bit, width: bus_width, default: all_bits_0
23
23
  }
24
24
  param :insert_slicer, {
25
- name: 'INSERT_SLICER', type: :bit, default: 0
25
+ name: 'INSERT_SLICER', type: :bool, default: false
26
26
  }
27
27
  end
28
28
 
@@ -5,15 +5,16 @@ module RgGen
5
5
  module RegisterMap
6
6
  module KeywordChecker
7
7
  VERYL_KEYWORDS = [
8
- 'always_comb', 'always_ff', 'as', 'assign', 'bit', 'break', 'case', 'clock',
9
- 'clock_negedge', 'clock_posedge', 'const', 'default', 'else', 'embed', 'enum',
10
- 'export', 'f32', 'f64', 'final', 'for', 'function', 'i32', 'i64', 'if',
11
- 'if_reset', 'import', 'in', 'include', 'initial', 'inout', 'input', 'inside',
12
- 'inst', 'interface', 'let', 'local', 'logic', 'modport', 'module', 'output',
13
- 'outside', 'package', 'param', 'proto', 'pub', 'ref', 'repeat', 'reset',
14
- 'reset_async_high', 'reset_async_low', 'reset_sync_high', 'reset_sync_low',
15
- 'return', 'signed', 'step', 'struct', 'switch', 'tri', 'type', 'u32', 'u64',
16
- 'unsafe', 'var'
8
+ 'alias', 'always_comb', 'always_ff', 'assign', 'as', 'bit', 'bool', 'case',
9
+ 'clock', 'clock_posedge', 'clock_negedge', 'connect', 'const', 'converse',
10
+ 'default', 'else', 'embed', 'enum', 'f32', 'f64', 'false', 'final', 'for',
11
+ 'function', 'i32', 'i64', 'if_reset', 'if', 'import', 'include', 'initial',
12
+ 'inout', 'input', 'inside', 'inst', 'interface', 'in', 'let', 'logic', 'lsb',
13
+ 'modport', 'module', 'msb', 'output', 'outside', 'package', 'param', 'proto',
14
+ 'pub', 'repeat', 'reset', 'reset_async_high', 'reset_async_low',
15
+ 'reset_sync_high', 'reset_sync_low', 'return', 'break', 'same', 'signed',
16
+ 'step', 'string', 'struct', 'switch', 'tri', 'true', 'type', 'u32', 'u64',
17
+ 'union', 'unsafe', 'var'
17
18
  ].freeze
18
19
 
19
20
  def self.included(klass)
@@ -61,7 +61,7 @@ module RgGen
61
61
  end
62
62
 
63
63
  def emit_width?
64
- width && (!width.is_a?(Integer) || width >= 2)
64
+ (@object_type != :generic) && width && (!width.is_a?(Integer) || width >= 2)
65
65
  end
66
66
 
67
67
  def array_dimensions
@@ -71,7 +71,12 @@ module RgGen
71
71
  end
72
72
 
73
73
  def default_value
74
- "= #{default}" if @object_type in :param | :const
74
+ "= #{default}" if emit_default_value?
75
+ end
76
+
77
+ def emit_default_value?
78
+ instance_variable_defined?(:@default) &&
79
+ (@object_type in :generic | :param | :const)
75
80
  end
76
81
  end
77
82
  end
@@ -6,6 +6,7 @@ module RgGen
6
6
  class ModuleDefinition < SystemVerilog::Common::Utility::StructureDefinition
7
7
  define_attribute :name
8
8
  define_attribute :package_imports
9
+ define_attribute :generics
9
10
  define_attribute :params
10
11
  define_attribute :ports
11
12
  define_attribute :variables
@@ -15,6 +16,7 @@ module RgGen
15
16
  def header_code(code)
16
17
  package_import_declaration(code)
17
18
  module_header_begin(code)
19
+ generic_declarations(code)
18
20
  param_declarations(code)
19
21
  port_declarations(code)
20
22
  module_header_end(code)
@@ -27,7 +29,20 @@ module RgGen
27
29
  end
28
30
 
29
31
  def module_header_begin(code)
30
- code << "pub module #{name} "
32
+ code << "pub module #{name}"
33
+ code << ' ' unless include_generics?
34
+ end
35
+
36
+ def include_generics?
37
+ (generics&.size || 0).positive?
38
+ end
39
+
40
+ def generic_declarations(code)
41
+ return unless include_generics?
42
+
43
+ wrap(code, '::<', '>') do
44
+ add_declarations_to_header(code, generics)
45
+ end
31
46
  end
32
47
 
33
48
  def param_declarations(code)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module Veryl
5
- VERSION = '0.3.0'
5
+ VERSION = '0.4.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-veryl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-02-19 00:00:00.000000000 Z
10
+ date: 2025-04-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rggen-systemverilog
@@ -132,5 +132,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
132
132
  requirements: []
133
133
  rubygems_version: 3.6.2
134
134
  specification_version: 4
135
- summary: rggen-veryl-0.3.0
135
+ summary: rggen-veryl-0.4.0
136
136
  test_files: []