rggen-verilog 0.13.2 → 0.14.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: 4105d04ab8fdf1f61be7c31990787f0ae958be57e2d48515acab1ac60b2cc0c2
4
- data.tar.gz: 40d832e964954e3a4c63845da7681b11148cfd55a92c92ccb113adb592b1d20e
3
+ metadata.gz: 0f5310ae59af4bc91fc3357c4bca794f233eddda779db0ce9508adb155c8d41d
4
+ data.tar.gz: f735ba4dcf866cf4b5f1879953edb02ead037017cc077edb7167df4e20794942
5
5
  SHA512:
6
- metadata.gz: 80c6f6f16f795937c82ab336f92288dc64e3963a1f8ce5d7f4fa21b44a361a5546d28bf66292a61b04e5f3b0a6316d414f58c6cc32d6119571f6f4f25eea0e61
7
- data.tar.gz: 2a92fe6b184b2a8e4003ab2e6ca7b5d97ef10b2f99a8801b9524b6a0c2a6a35292eef1461c8d52ce2f0f36f15542480fc74b53bb20744c5e70983730c67ca93b
6
+ metadata.gz: f73d0171b6eda65b09ce537aa08f89ec6c8a7c3b9050b84a63fada31db0713c09d93db91c0976420c4ec901320de813916f08fc8663df10dccf40dfc3c12e9e6
7
+ data.tar.gz: a88359f0e2b1b472d4b6e7798b0f0a93fc5258f36e96f7241886b7011cf62054005e3348de6d6d7744f5fca0e98b8f6e9f6f41f97c4be3fb75772e48533cbab9
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020-2025 Taichi Ishitani
3
+ Copyright (c) 2020-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-verilog/workflows/CI/badge.svg)](https://github.com/rggen/rggen-verilog/actions?query=workflow%3ACI)
3
3
  [![Maintainability](https://qlty.sh/badges/93f1f04b-d863-4f44-a968-2f2721a8f3de/maintainability.svg)](https://qlty.sh/gh/rggen/projects/rggen-verilog)
4
4
  [![codecov](https://codecov.io/gh/rggen/rggen-verilog/branch/master/graph/badge.svg)](https://codecov.io/gh/rggen/rggen-verilog)
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::Verilog
8
8
 
@@ -62,13 +62,13 @@ Feedbacks, bus reports, questions and etc. are welcome! You can post them bu usi
62
62
 
63
63
  * [GitHub Issue Tracker](https://github.com/rggen/rggen/issues)
64
64
  * [GitHub Discussions](https://github.com/rggen/rggen/discussions)
65
- * [Chat Room](https://gitter.im/rggen/rggen)
65
+ * [Discord](https://discord.com/invite/KWya83ZZxr)
66
66
  * [Mailing List](https://groups.google.com/d/forum/rggen)
67
67
  * [Mail](mailto:rggen@googlegroups.com)
68
68
 
69
69
  ## Copyright & License
70
70
 
71
- Copyright © 2020-2025 Taichi Ishitani. RgGen::Verilog is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
71
+ Copyright © 2020-2026 Taichi Ishitani. RgGen::Verilog is licensed under the [MIT License](https://opensource.org/licenses/MIT), see [LICENSE](LICENSE) for futher details.
72
72
 
73
73
  ## Code of Conduct
74
74
 
@@ -0,0 +1,21 @@
1
+ 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
+ ) u_bit_field (
9
+ .i_clk (<%= clock %>),
10
+ .i_rst_n (<%= reset %>),
11
+ .i_sw_read_valid (<%= bit_field_read_valid %>),
12
+ .i_sw_write_valid (<%= bit_field_write_valid %>),
13
+ .i_sw_mask (<%= bit_field_mask %>),
14
+ .i_sw_write_data (<%= bit_field_write_data %>),
15
+ .o_sw_read_data (<%= bit_field_read_data %>),
16
+ .o_sw_value (<%= bit_field_value %>),
17
+ .i_clear (<%= clear_signal %>),
18
+ .i_up (<%= up[loop_variables] %>),
19
+ .i_down (<%= down[loop_variables] %>),
20
+ .o_count (<%= count[loop_variables] %>)
21
+ );
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:bit_field, :type, :counter) do
4
+ verilog_rtl do
5
+ build do
6
+ parameter :up_width, {
7
+ name: "#{full_name}_up_width".upcase, default: 1
8
+ }
9
+ parameter :up_port_width, {
10
+ name: "#{full_name}_up_port_width".upcase,
11
+ default: macro_call(:rggen_clip_width, up_width)
12
+ }
13
+ parameter :down_width, {
14
+ name: "#{full_name}_down_width".upcase, default: 1
15
+ }
16
+ parameter :down_port_width, {
17
+ name: "#{full_name}_down_port_width".upcase,
18
+ default: macro_call(:rggen_clip_width, down_width)
19
+ }
20
+ parameter :wrap_around, {
21
+ name: "#{full_name}_wrap_around".upcase, default: 0
22
+ }
23
+ if external_clear?
24
+ parameter :use_clear, {
25
+ name: "#{full_name}_use_clear".upcase, default: 1
26
+ }
27
+ end
28
+
29
+ input :up, {
30
+ name: "i_#{full_name}_up",
31
+ width: up_port_width, array_size:
32
+ }
33
+ input :down, {
34
+ name: "i_#{full_name}_down",
35
+ width: down_port_width, array_size:
36
+ }
37
+ if external_clear?
38
+ input :clear, {
39
+ name: "i_#{full_name}_clear", width: 1, array_size:
40
+ }
41
+ end
42
+ output :count, {
43
+ name: "o_#{full_name}", width:, array_size:
44
+ }
45
+ end
46
+
47
+ main_code :bit_field, from_template: true
48
+
49
+ private
50
+
51
+ def external_clear?
52
+ !bit_field.reference?
53
+ end
54
+
55
+ def use_clear_value
56
+ external_clear? && use_clear || 1
57
+ end
58
+
59
+ def clear_signal
60
+ reference_bit_field || clear[loop_variables]
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,27 @@
1
+ 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
+ ) u_register (
9
+ .i_clk (<%= clock %>),
10
+ .i_rst_n (<%= reset %>),
11
+ .i_register_valid (<%= register_valid %>),
12
+ .i_register_access (<%= register_access %>),
13
+ .i_register_address (<%= register_address %>),
14
+ .i_register_write_data (<%= register_write_data %>),
15
+ .i_register_strobe (<%= register_strobe %>),
16
+ .o_register_active (<%= register_active %>),
17
+ .o_register_ready (<%= register_ready %>),
18
+ .o_register_status (<%= register_status %>),
19
+ .o_register_read_data (<%= register_read_data %>),
20
+ .o_register_value (<%= register_value %>),
21
+ .o_bit_field_read_valid (<%= bit_field_read_valid %>),
22
+ .o_bit_field_write_valid (<%= bit_field_write_valid %>),
23
+ .o_bit_field_mask (<%= bit_field_mask %>),
24
+ .o_bit_field_write_data (<%= bit_field_write_data %>),
25
+ .i_bit_field_read_data (<%= bit_field_read_data %>),
26
+ .i_bit_field_value (<%= bit_field_value %>)
27
+ );
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_list_item_feature(:register, :type, :maskable) do
4
+ verilog_rtl do
5
+ main_code :register, from_template: true
6
+ end
7
+ end
@@ -17,7 +17,7 @@ RgGen.define_list_item_feature(:register_block, :protocol, :axi4lite) do
17
17
  name: 'o_awready', width: 1
18
18
  }
19
19
  input :awid, {
20
- name: 'i_awid', width: id_width_value
20
+ name: 'i_awid', width: macro_call(:rggen_clip_width, id_width)
21
21
  }
22
22
  input :awaddr, {
23
23
  name: 'i_awaddr', width: address_width
@@ -44,7 +44,7 @@ RgGen.define_list_item_feature(:register_block, :protocol, :axi4lite) do
44
44
  name: 'i_bready', width: 1
45
45
  }
46
46
  output :bid, {
47
- name: 'o_bid', width: id_width_value
47
+ name: 'o_bid', width: macro_call(:rggen_clip_width, id_width)
48
48
  }
49
49
  output :bresp, {
50
50
  name: 'o_bresp', width: 2
@@ -56,7 +56,7 @@ RgGen.define_list_item_feature(:register_block, :protocol, :axi4lite) do
56
56
  name: 'o_arready', width: 1
57
57
  }
58
58
  input :arid, {
59
- name: 'i_arid', width: id_width_value
59
+ name: 'i_arid', width: macro_call(:rggen_clip_width, id_width)
60
60
  }
61
61
  input :araddr, {
62
62
  name: 'i_araddr', width: address_width
@@ -71,7 +71,7 @@ RgGen.define_list_item_feature(:register_block, :protocol, :axi4lite) do
71
71
  name: 'i_rready', width: 1
72
72
  }
73
73
  output :rid, {
74
- name: 'o_rid', width: id_width_value
74
+ name: 'o_rid', width: macro_call(:rggen_clip_width, id_width)
75
75
  }
76
76
  output :rdata, {
77
77
  name: 'o_rdata', width: bus_width
@@ -82,11 +82,5 @@ RgGen.define_list_item_feature(:register_block, :protocol, :axi4lite) do
82
82
  end
83
83
 
84
84
  main_code :register_block, from_template: true
85
-
86
- private
87
-
88
- def id_width_value
89
- "((#{id_width} == 0) ? 1 : #{id_width})"
90
- end
91
85
  end
92
86
  end
@@ -20,6 +20,10 @@ module RgGen
20
20
  def width_cast(expression, _width)
21
21
  expression
22
22
  end
23
+
24
+ def macro_call(macro_name, args)
25
+ function_call("`#{macro_name}", args)
26
+ end
23
27
  end
24
28
  end
25
29
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module Verilog
5
- VERSION = '0.13.2'
5
+ VERSION = '0.14.0'
6
6
  end
7
7
  end
data/lib/rggen/verilog.rb CHANGED
@@ -34,9 +34,11 @@ RgGen.setup_plugin :'rggen-verilog' do |plugin|
34
34
  'verilog/rtl/register/type',
35
35
  'verilog/rtl/register/type/external',
36
36
  'verilog/rtl/register/type/indirect',
37
+ 'verilog/rtl/register/type/maskable',
37
38
  'verilog/rtl/register/type/rw',
38
39
  'verilog/rtl/bit_field/verilog_top',
39
40
  'verilog/rtl/bit_field/type',
41
+ 'verilog/rtl/bit_field/type/counter',
40
42
  'verilog/rtl/bit_field/type/custom',
41
43
  'verilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc',
42
44
  'verilog/rtl/bit_field/type/ro_rotrg',
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-verilog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.2
4
+ version: 0.14.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taichi Ishitani
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-07-21 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: Verilog write plugin for RgGen
27
27
  email:
28
28
  - rggen@googlegroups.com
@@ -38,6 +38,8 @@ files:
38
38
  - lib/rggen/verilog/register_map/keyword_checker.rb
39
39
  - lib/rggen/verilog/register_map/name.rb
40
40
  - lib/rggen/verilog/rtl/bit_field/type.rb
41
+ - lib/rggen/verilog/rtl/bit_field/type/counter.erb
42
+ - lib/rggen/verilog/rtl/bit_field/type/counter.rb
41
43
  - lib/rggen/verilog/rtl/bit_field/type/custom.erb
42
44
  - lib/rggen/verilog/rtl/bit_field/type/custom.rb
43
45
  - lib/rggen/verilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.erb
@@ -83,6 +85,8 @@ files:
83
85
  - lib/rggen/verilog/rtl/register/type/external.rb
84
86
  - lib/rggen/verilog/rtl/register/type/indirect.erb
85
87
  - lib/rggen/verilog/rtl/register/type/indirect.rb
88
+ - lib/rggen/verilog/rtl/register/type/maskable.erb
89
+ - lib/rggen/verilog/rtl/register/type/maskable.rb
86
90
  - lib/rggen/verilog/rtl/register/type/rw.erb
87
91
  - lib/rggen/verilog/rtl/register/type/rw.rb
88
92
  - lib/rggen/verilog/rtl/register/verilog_top.rb
@@ -124,14 +128,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
124
128
  requirements:
125
129
  - - ">="
126
130
  - !ruby/object:Gem::Version
127
- version: '3.1'
131
+ version: '3.2'
128
132
  required_rubygems_version: !ruby/object:Gem::Requirement
129
133
  requirements:
130
134
  - - ">="
131
135
  - !ruby/object:Gem::Version
132
136
  version: '0'
133
137
  requirements: []
134
- rubygems_version: 3.6.2
138
+ rubygems_version: 4.0.3
135
139
  specification_version: 4
136
- summary: rggen-verilog-0.13.2
140
+ summary: rggen-verilog-0.14.0
137
141
  test_files: []