rggen-veryl 0.5.2 → 0.7.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: cad5389b85d457e5d6adc888974bcd91347238caa68270a306680785ebb133c0
4
- data.tar.gz: da0507974523b3d60a6abc8505d7c033896d7cff0fc3d81cc0cd7505e514ec19
3
+ metadata.gz: a47c80d1142919e860bc28b472ddc02cdd89a7e754a9b78c7f22fe93e3dc61f5
4
+ data.tar.gz: f5427babe12355d28fc496a026643205dfee522825895a18271a172740f47c78
5
5
  SHA512:
6
- metadata.gz: f179f2b8eaaa0cdea034b0694f8319e2e7ace6d60a737c183fd6fe77da7ad62d84dda21ce942156f22cd3f7c294e1ed684dd14f6a849fc65ec88ccd7e9618ea6
7
- data.tar.gz: bc8ba074f1f2e472426a9f84f70f4d60a6ebe014e119fb6304b8315641d260bc8f18fac9f3345e2aeb5f55d2bd685ffd033875a881c5ad0142e13f25db37448a
6
+ metadata.gz: 288086355ea542c937f0d9da430535ec5e2f66fda168fc2f760c38eb9961abc77dad05f8ad4e4342932e1c490233a574e776630f43d29db0b8fa3a6f3c0c48fc
7
+ data.tar.gz: e6362d1bcc9ea49dd52092b26e5c955b1c12a5273b88f727bff469419e7e812be5b0cba3c1d2ba3cb99b9736f3e5c9647e2b36a7a87a7261753255a563da0172
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2024-2025 Taichi Ishitani
3
+ Copyright (c) 2024-2026 Taichi Ishitani
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
  [![CI](https://github.com/rggen/rggen-veryl/actions/workflows/ci.yml/badge.svg)](https://github.com/rggen/rggen-veryl/actions/workflows/ci.yml)
3
3
  [![Maintainability](https://qlty.sh/badges/7537364e-4631-4c9a-b873-5bceb9418ed0/maintainability.svg)](https://qlty.sh/gh/rggen/projects/rggen-veryl)
4
4
  [![codecov](https://codecov.io/gh/rggen/rggen-veryl/graph/badge.svg?token=iYlaqhSjat)](https://codecov.io/gh/rggen/rggen-veryl)
5
- [![Gitter](https://badges.gitter.im/rggen/rggen.svg)](https://gitter.im/rggen/rggen?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
5
+ [![Discord](https://img.shields.io/discord/1406572699467124806?style=flat&logo=discord)](https://discord.com/invite/KWya83ZZxr)
6
6
 
7
7
  # RgGen::Veryl
8
8
 
@@ -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
- "rggen" = { github = "rggen/rggen-veryl-rtl", version = "0.5.0" }
46
+ "rggen" = { github = "rggen/rggen-veryl-rtl", version = "0.7.0" }
47
47
  ```
48
48
 
49
49
  ## Contact
@@ -52,13 +52,13 @@ Feedbacks, bus reports, questions and etc. are welcome! You can post them by usi
52
52
 
53
53
  * [GitHub Issue Tracker](https://github.com/rggen/rggen/issues)
54
54
  * [GitHub Discussions](https://github.com/rggen/rggen/discussions)
55
- * [Chat Room](https://gitter.im/rggen/rggen)
55
+ * [Discord](https://discord.com/invite/KWya83ZZxr)
56
56
  * [Mailing List](https://groups.google.com/d/forum/rggen)
57
57
  * [Mail](mailto:rggen@googlegroups.com)
58
58
 
59
59
  ## Copyright & License
60
60
 
61
- Copyright © 2024-2025 Taichi Ishitani. RgGen::Veryl is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
61
+ Copyright © 2024-2026 Taichi Ishitani. RgGen::Veryl is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
62
62
 
63
63
  ## Code of Conduct
64
64
 
@@ -0,0 +1,16 @@
1
+ inst u_bit_field: rggen::rggen_bit_field_counter #(
2
+ WIDTH : <%= width %>,
3
+ INITIAL_VALUE: <%= initial_value %>,
4
+ UP_WIDTH : <%= up_width %>,
5
+ DOWN_WIDTH : <%= down_width %>,
6
+ WRAP_AROUND : <%= wrap_around %>,
7
+ USE_CLEAR : <%= use_clear_value %>,
8
+ )(
9
+ i_clk : <%= clock %>,
10
+ i_rst : <%= reset %>,
11
+ bit_field_if: <%= bit_field_if %>,
12
+ i_clear : <%= clear_signal %>,
13
+ i_up : <%= up[loop_variables] %>,
14
+ i_down : <%= down[loop_variables] %>,
15
+ o_count : <%= count[loop_variables] %>,
16
+ );
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, :counter) do
4
+ veryl do
5
+ build do
6
+ param :up_width, {
7
+ name: "#{full_name}_up_width".upcase, type: :u32, default: 1
8
+ }
9
+ param :down_width, {
10
+ name: "#{full_name}_down_width".upcase, type: :u32, default: 1
11
+ }
12
+ param :wrap_around, {
13
+ name: "#{full_name}_wrap_around".upcase, type: :bbool, default: false
14
+ }
15
+ if external_clear?
16
+ param :use_clear, {
17
+ name: "#{full_name}_use_clear".upcase, type: :bbool, default: true
18
+ }
19
+ end
20
+
21
+ input :up, {
22
+ name: "i_#{full_name}_up",
23
+ width: function_call(:clip_width, [up_width]), array_size:
24
+ }
25
+ input :down, {
26
+ name: "i_#{full_name}_down",
27
+ width: function_call(:clip_width, [down_width]), array_size:
28
+ }
29
+ if external_clear?
30
+ input :clear, {
31
+ name: "i_#{full_name}_clear", width: 1, array_size:
32
+ }
33
+ end
34
+ output :count, {
35
+ name: "o_#{full_name}", width:, array_size:
36
+ }
37
+ end
38
+
39
+ main_code :bit_field, from_template: true
40
+
41
+ private
42
+
43
+ def external_clear?
44
+ !bit_field.reference?
45
+ end
46
+
47
+ def use_clear_value
48
+ !external_clear? || use_clear
49
+ end
50
+
51
+ def clear_signal
52
+ reference_bit_field || clear[loop_variables]
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,15 @@
1
+ inst u_register: rggen::rggen_maskable_register #(
2
+ READABLE: <%= readable? %>,
3
+ WRITABLE: <%= writable? %>,
4
+ ADDRESS_WIDTH: <%= address_width %>,
5
+ OFFSET_ADDRESS: <%= offset_address %>,
6
+ BUS_WIDTH: <%= bus_width %>,
7
+ DATA_WIDTH: <%= width %>,
8
+ VALUE_WIDTH: <%= value_width %>,
9
+ VALID_BITS: <%= valid_bits %>
10
+ )(
11
+ i_clk: <%= register_block.clock %>,
12
+ i_rst: <%= register_block.reset %>,
13
+ register_if: <%= register_if %>,
14
+ bit_field_if: <%= bit_field_if %>
15
+ );
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:register, :type, :maskable) do
4
+ veryl do
5
+ main_code :register, from_template: true
6
+ end
7
+ 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: :bool, default: true
10
+ name: 'WRITE_FIRST', type: :bbool, 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: :bool, default: false
10
+ name: 'USE_READ_STROBE', type: :bbool, 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: :bool, default: false
13
+ name: 'PRE_DECODE', type: :bbool, 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: :bool, default: false
19
+ name: 'ERROR_STATUS', type: :bbool, 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: :bool, default: false
25
+ name: 'INSERT_SLICER', type: :bbool, default: false
26
26
  }
27
27
  end
28
28
 
@@ -25,6 +25,7 @@ RgGen.define_simple_feature(:register_block, :veryl_top) do
25
25
  code << module_definition(register_block.name) do |m|
26
26
  m.attributes attributes
27
27
  m.package_imports packages
28
+ m.generics generics
28
29
  m.params params
29
30
  m.ports ports
30
31
  m.variables variables
@@ -48,13 +49,17 @@ RgGen.define_simple_feature(:register_block, :veryl_top) do
48
49
  end
49
50
 
50
51
  def attributes
51
- { fmt: :skip }
52
+ { fmt: :skip, allow: :unassign_variable }
52
53
  end
53
54
 
54
55
  def packages
55
56
  ['rggen::rggen_rtl_pkg', *register_block.package_imports(:register_block)]
56
57
  end
57
58
 
59
+ def generics
60
+ register_block.declarations[:generic]
61
+ end
62
+
58
63
  def params
59
64
  register_block.declarations[:parameter]
60
65
  end
@@ -5,16 +5,14 @@ module RgGen
5
5
  module RegisterMap
6
6
  module KeywordChecker
7
7
  VERYL_KEYWORDS = [
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'
8
+ 'alias', 'always_comb', 'always_ff', 'assign', 'as', 'bind', 'bit', 'block', 'bbool', 'lbool', 'case',
9
+ 'clock', 'clock_posedge', 'clock_negedge', 'connect', 'const', 'converse', 'default', 'else', 'embed',
10
+ 'enum', 'f32', 'f64', 'false', 'final', 'for', 'function', 'i8', 'i16', 'i32', 'i64', 'if_reset', 'if',
11
+ 'import', 'include', 'initial', 'inout', 'input', 'inside', 'inst', 'interface', 'in', 'let', 'logic',
12
+ 'lsb', 'modport', 'module', 'msb', 'output', 'outside', 'package', 'param', 'proto', 'pub', 'repeat',
13
+ 'reset', 'reset_async_high', 'reset_async_low', 'reset_sync_high', 'reset_sync_low', 'return', 'rev',
14
+ 'break', 'same', 'signed', 'step', 'string', 'struct', 'switch', 'tri', 'true', 'type', 'u8', 'u16', 'u32',
15
+ 'u64', 'union', 'unsafe', 'var'
18
16
  ].freeze
19
17
 
20
18
  def self.included(klass)
@@ -4,6 +4,8 @@ module RgGen
4
4
  module Veryl
5
5
  module Utility
6
6
  class Modport < SystemVerilog::Common::Utility::InterfacePort
7
+ define_attribute :generics
8
+
7
9
  def declaration
8
10
  [
9
11
  "#{name}:",
@@ -15,7 +17,13 @@ module RgGen
15
17
  private
16
18
 
17
19
  def port_type
18
- "#{@interface_type}::#{@modport_name}#{array_size_notation}"
20
+ "#{@interface_type}#{generics_notation}::#{@modport_name}#{array_size_notation}"
21
+ end
22
+
23
+ def generics_notation
24
+ return unless @generics
25
+
26
+ "::<#{@generics.join(', ')}>"
19
27
  end
20
28
 
21
29
  def array_size_notation
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module Veryl
5
- VERSION = '0.5.2'
5
+ VERSION = '0.7.0'
6
6
  end
7
7
  end
data/lib/rggen/veryl.rb CHANGED
@@ -36,9 +36,11 @@ RgGen.setup_plugin :'rggen-veryl' do |plugin|
36
36
  'veryl/register/type',
37
37
  'veryl/register/type/external',
38
38
  'veryl/register/type/indirect',
39
+ 'veryl/register/type/maskable',
39
40
  'veryl/register/type/rw',
40
41
  'veryl/bit_field/veryl_top',
41
42
  'veryl/bit_field/type',
43
+ 'veryl/bit_field/type/counter',
42
44
  'veryl/bit_field/type/custom',
43
45
  'veryl/bit_field/type/rc_w0c_w1c_wc_woc',
44
46
  'veryl/bit_field/type/ro_rotrg',
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.5.2
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-08-04 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rggen-systemverilog
@@ -15,14 +15,14 @@ dependencies:
15
15
  requirements:
16
16
  - - ">="
17
17
  - !ruby/object:Gem::Version
18
- version: 0.35.1
18
+ version: 0.36.0
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - ">="
24
24
  - !ruby/object:Gem::Version
25
- version: 0.35.1
25
+ version: 0.36.0
26
26
  description: Veryl writer plugin for RgGen
27
27
  email:
28
28
  - rggen@googlegroups.com
@@ -36,6 +36,8 @@ files:
36
36
  - lib/rggen/veryl.rb
37
37
  - lib/rggen/veryl/bit_field/common.erb
38
38
  - lib/rggen/veryl/bit_field/type.rb
39
+ - lib/rggen/veryl/bit_field/type/counter.erb
40
+ - lib/rggen/veryl/bit_field/type/counter.rb
39
41
  - lib/rggen/veryl/bit_field/type/custom.erb
40
42
  - lib/rggen/veryl/bit_field/type/custom.rb
41
43
  - lib/rggen/veryl/bit_field/type/rc_w0c_w1c_wc_woc.erb
@@ -82,6 +84,8 @@ files:
82
84
  - lib/rggen/veryl/register/type/external.rb
83
85
  - lib/rggen/veryl/register/type/indirect.erb
84
86
  - lib/rggen/veryl/register/type/indirect.rb
87
+ - lib/rggen/veryl/register/type/maskable.erb
88
+ - lib/rggen/veryl/register/type/maskable.rb
85
89
  - lib/rggen/veryl/register/type/rw.erb
86
90
  - lib/rggen/veryl/register/type/rw.rb
87
91
  - lib/rggen/veryl/register/veryl_top.rb
@@ -123,14 +127,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
123
127
  requirements:
124
128
  - - ">="
125
129
  - !ruby/object:Gem::Version
126
- version: '3.1'
130
+ version: '3.2'
127
131
  required_rubygems_version: !ruby/object:Gem::Requirement
128
132
  requirements:
129
133
  - - ">="
130
134
  - !ruby/object:Gem::Version
131
135
  version: '0'
132
136
  requirements: []
133
- rubygems_version: 3.6.2
137
+ rubygems_version: 4.0.3
134
138
  specification_version: 4
135
- summary: rggen-veryl-0.5.2
139
+ summary: rggen-veryl-0.7.0
136
140
  test_files: []