rggen-systemverilog 0.19.0 → 0.23.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rggen/systemverilog/common.rb +2 -2
  3. data/lib/rggen/systemverilog/common/component.rb +2 -6
  4. data/lib/rggen/systemverilog/common/feature.rb +39 -26
  5. data/lib/rggen/systemverilog/common/utility.rb +4 -0
  6. data/lib/rggen/systemverilog/common/utility/interface_port.rb +7 -3
  7. data/lib/rggen/systemverilog/common/utility/local_scope.rb +2 -2
  8. data/lib/rggen/systemverilog/common/utility/structure_definition.rb +1 -3
  9. data/lib/rggen/systemverilog/ral.rb +6 -1
  10. data/lib/rggen/systemverilog/ral/bit_field/type.rb +15 -10
  11. data/lib/rggen/systemverilog/ral/bit_field/type/rwe_rwl.rb +1 -11
  12. data/lib/rggen/systemverilog/ral/feature.rb +4 -4
  13. data/lib/rggen/systemverilog/ral/register/type.rb +10 -52
  14. data/lib/rggen/systemverilog/ral/register/type/default.erb +1 -1
  15. data/lib/rggen/systemverilog/ral/register/type/external.rb +6 -10
  16. data/lib/rggen/systemverilog/ral/register/type/indirect.erb +3 -3
  17. data/lib/rggen/systemverilog/ral/register/type/indirect.rb +5 -2
  18. data/lib/rggen/systemverilog/ral/register_block/sv_ral_model.erb +8 -0
  19. data/lib/rggen/systemverilog/ral/register_block/sv_ral_model.rb +36 -0
  20. data/lib/rggen/systemverilog/ral/register_block/sv_ral_package.rb +1 -32
  21. data/lib/rggen/systemverilog/ral/register_common.rb +46 -0
  22. data/lib/rggen/systemverilog/ral/register_file/sv_ral_model.erb +8 -0
  23. data/lib/rggen/systemverilog/ral/register_file/sv_ral_model.rb +57 -0
  24. data/lib/rggen/systemverilog/ral/setup.rb +3 -2
  25. data/lib/rggen/systemverilog/rtl.rb +12 -5
  26. data/lib/rggen/systemverilog/rtl/bit_field/sv_rtl_top.rb +34 -19
  27. data/lib/rggen/systemverilog/rtl/bit_field/type.rb +1 -5
  28. data/lib/rggen/systemverilog/rtl/bit_field/type/{rc_w0c_w1c.erb → rc_w0c_w1c_wc_woc.erb} +2 -1
  29. data/lib/rggen/systemverilog/rtl/bit_field/type/{rc_w0c_w1c.rb → rc_w0c_w1c_wc_woc.rb} +11 -10
  30. data/lib/rggen/systemverilog/rtl/bit_field/type/ro.rb +1 -1
  31. data/lib/rggen/systemverilog/rtl/bit_field/type/{rs_w0s_w1s.erb → rs_w0s_w1s_ws_wos.erb} +2 -1
  32. data/lib/rggen/systemverilog/rtl/bit_field/type/{rs_w0s_w1s.rb → rs_w0s_w1s_ws_wos.rb} +10 -9
  33. data/lib/rggen/systemverilog/rtl/bit_field/type/rw_w1_wo_wo1.rb +1 -1
  34. data/lib/rggen/systemverilog/rtl/bit_field/type/rwc.rb +2 -2
  35. data/lib/rggen/systemverilog/rtl/bit_field/type/rwe.rb +2 -2
  36. data/lib/rggen/systemverilog/rtl/bit_field/type/rwl.rb +2 -2
  37. data/lib/rggen/systemverilog/rtl/bit_field/type/rws.rb +3 -3
  38. data/lib/rggen/systemverilog/rtl/bit_field/type/{w0crs_w1crs.erb → w0crs_w1crs_wcrs.erb} +1 -1
  39. data/lib/rggen/systemverilog/rtl/bit_field/type/{w0crs_w1crs.rb → w0crs_w1crs_wcrs.rb} +4 -4
  40. data/lib/rggen/systemverilog/rtl/bit_field/type/{w0src_w1src.erb → w0src_w1src_wsrc.erb} +1 -1
  41. data/lib/rggen/systemverilog/rtl/bit_field/type/{w0src_w1src.rb → w0src_w1src_wsrc.rb} +4 -4
  42. data/lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.erb +10 -0
  43. data/lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.rb +20 -0
  44. data/lib/rggen/systemverilog/rtl/bit_field/type/w0trg_w1trg.rb +1 -1
  45. data/lib/rggen/systemverilog/rtl/bit_field/type/wrc_wrs.erb +9 -0
  46. data/lib/rggen/systemverilog/rtl/bit_field/type/wrc_wrs.rb +14 -0
  47. data/lib/rggen/systemverilog/rtl/feature.rb +12 -16
  48. data/lib/rggen/systemverilog/rtl/partial_sum.rb +29 -0
  49. data/lib/rggen/systemverilog/rtl/register/sv_rtl_top.rb +10 -47
  50. data/lib/rggen/systemverilog/rtl/register/type.rb +25 -1
  51. data/lib/rggen/systemverilog/rtl/register/type/external.rb +10 -10
  52. data/lib/rggen/systemverilog/rtl/register/type/indirect.rb +3 -3
  53. data/lib/rggen/systemverilog/rtl/register_block/protocol.rb +17 -7
  54. data/lib/rggen/systemverilog/rtl/register_block/protocol/apb.erb +9 -5
  55. data/lib/rggen/systemverilog/rtl/register_block/protocol/apb.rb +13 -14
  56. data/lib/rggen/systemverilog/rtl/register_block/protocol/axi4lite.erb +11 -6
  57. data/lib/rggen/systemverilog/rtl/register_block/protocol/axi4lite.rb +53 -30
  58. data/lib/rggen/systemverilog/rtl/register_block/sv_rtl_top.rb +11 -10
  59. data/lib/rggen/systemverilog/rtl/register_file/sv_rtl_top.rb +30 -0
  60. data/lib/rggen/systemverilog/rtl/register_index.rb +112 -0
  61. data/lib/rggen/systemverilog/rtl/setup.rb +2 -1
  62. data/lib/rggen/systemverilog/version.rb +1 -1
  63. metadata +23 -12
  64. data/lib/rggen/systemverilog/ral/register_block/sv_ral_block_model.erb +0 -11
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ RgGen.define_simple_feature(:register_file, :sv_rtl_top) do
4
+ sv_rtl do
5
+ include RgGen::SystemVerilog::RTL::RegisterIndex
6
+
7
+ main_code :register_file do
8
+ local_scope("g_#{register_file.name}") do |scope|
9
+ scope.top_scope top_scope?
10
+ scope.loop_size loop_size
11
+ scope.body(&method(:body_code))
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def top_scope?
18
+ register_file(:upper).nil?
19
+ end
20
+
21
+ def loop_size
22
+ (register_file.array? || nil) &&
23
+ local_loop_variables.zip(register_file.array_size).to_h
24
+ end
25
+
26
+ def body_code(code)
27
+ register_file.generate_code(code, :register_file, :top_down, 1)
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,112 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgGen
4
+ module SystemVerilog
5
+ module RTL
6
+ module RegisterIndex
7
+ include PartialSum
8
+
9
+ EXPORTED_METHODS = [
10
+ :loop_variables, :local_loop_variables,
11
+ :local_index, :local_indices,
12
+ :index, :inside_roop?
13
+ ].freeze
14
+
15
+ def self.included(feature)
16
+ feature.module_eval do
17
+ EXPORTED_METHODS.each { |m| export m }
18
+
19
+ pre_build do
20
+ @base_index = files_and_registers.sum(&:count)
21
+ end
22
+ end
23
+ end
24
+
25
+ def loop_variables
26
+ (inside_roop? || nil) &&
27
+ [*upper_register_file&.loop_variables, *local_loop_variables]
28
+ end
29
+
30
+ def local_loop_variables
31
+ (component.array? || nil) &&
32
+ begin
33
+ start_depth = (upper_register_file&.loop_variables&.size || 0) + 1
34
+ Array.new(component.array_size.size) do |i|
35
+ create_identifier(loop_index(i + start_depth))
36
+ end
37
+ end
38
+ end
39
+
40
+ def local_index
41
+ (component.array? || nil) &&
42
+ local_index_coefficients
43
+ .zip(local_loop_variables)
44
+ .map { |operands| product(operands, false) }
45
+ .join('+')
46
+ end
47
+
48
+ def local_indices
49
+ [*upper_register_file&.local_indices, local_index]
50
+ end
51
+
52
+ def index(offset_or_offsets = nil)
53
+ operands = index_operands(offset_or_offsets)
54
+ partial_indices = partial_sums(operands)
55
+ if partial_indices.empty? || partial_indices.all?(&method(:integer?))
56
+ partial_indices.sum
57
+ else
58
+ partial_indices.join('+')
59
+ end
60
+ end
61
+
62
+ def inside_roop?
63
+ component.array? || upper_register_file&.inside_roop? || false
64
+ end
65
+
66
+ private
67
+
68
+ def upper_register_file
69
+ component.register_file
70
+ end
71
+
72
+ def local_index_coefficients
73
+ coefficients = []
74
+ component.array_size.reverse.inject(1) do |total, size|
75
+ coefficients.unshift(total)
76
+ total * size
77
+ end
78
+ coefficients
79
+ end
80
+
81
+ def index_operands(offset_or_offsets)
82
+ offsets = offset_or_offsets && Array(offset_or_offsets)
83
+ [
84
+ *upper_register_file&.index(offsets&.slice(0..-2)),
85
+ @base_index,
86
+ *local_register_index(offsets&.slice(-1))
87
+ ]
88
+ end
89
+
90
+ def local_register_index(offset)
91
+ (component.array? || nil) &&
92
+ begin
93
+ operands = [component.count(false), offset || local_index]
94
+ product(operands, true)
95
+ end
96
+ end
97
+
98
+ def product(operands, need_bracket)
99
+ if operands.all?(&method(:integer?))
100
+ operands.reduce(:*)
101
+ elsif operands.first == 1
102
+ operands.last
103
+ elsif need_bracket
104
+ "#{operands.first}*(#{operands.last})"
105
+ else
106
+ operands.join('*')
107
+ end
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -2,12 +2,13 @@
2
2
 
3
3
  require 'rggen/systemverilog/rtl'
4
4
 
5
- RgGen.setup :'rggen-sv-rtl', RgGen::SystemVerilog::RTL do |builder|
5
+ RgGen.setup RgGen::SystemVerilog::RTL do |builder|
6
6
  builder.enable :global, [
7
7
  :array_port_format, :fold_sv_interface_port
8
8
  ]
9
9
  builder.enable :register_block, [:sv_rtl_top, :protocol]
10
10
  builder.enable :register_block, :protocol, [:apb, :axi4lite]
11
+ builder.enable :register_file, [:sv_rtl_top]
11
12
  builder.enable :register, [:sv_rtl_top]
12
13
  builder.enable :bit_field, [:sv_rtl_top]
13
14
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RgGen
4
4
  module SystemVerilog
5
- VERSION = '0.19.0'
5
+ VERSION = '0.23.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rggen-systemverilog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.0
4
+ version: 0.23.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: 2020-02-17 00:00:00.000000000 Z
11
+ date: 2020-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: docile
@@ -93,22 +93,26 @@ files:
93
93
  - lib/rggen/systemverilog/ral/register/type/external.rb
94
94
  - lib/rggen/systemverilog/ral/register/type/indirect.erb
95
95
  - lib/rggen/systemverilog/ral/register/type/indirect.rb
96
- - lib/rggen/systemverilog/ral/register_block/sv_ral_block_model.erb
96
+ - lib/rggen/systemverilog/ral/register_block/sv_ral_model.erb
97
+ - lib/rggen/systemverilog/ral/register_block/sv_ral_model.rb
97
98
  - lib/rggen/systemverilog/ral/register_block/sv_ral_package.rb
99
+ - lib/rggen/systemverilog/ral/register_common.rb
100
+ - lib/rggen/systemverilog/ral/register_file/sv_ral_model.erb
101
+ - lib/rggen/systemverilog/ral/register_file/sv_ral_model.rb
98
102
  - lib/rggen/systemverilog/ral/setup.rb
99
103
  - lib/rggen/systemverilog/rtl.rb
100
104
  - lib/rggen/systemverilog/rtl/bit_field/sv_rtl_top.rb
101
105
  - lib/rggen/systemverilog/rtl/bit_field/type.rb
102
- - lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c.erb
103
- - lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c.rb
106
+ - lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.erb
107
+ - lib/rggen/systemverilog/rtl/bit_field/type/rc_w0c_w1c_wc_woc.rb
104
108
  - lib/rggen/systemverilog/rtl/bit_field/type/reserved.erb
105
109
  - lib/rggen/systemverilog/rtl/bit_field/type/reserved.rb
106
110
  - lib/rggen/systemverilog/rtl/bit_field/type/ro.erb
107
111
  - lib/rggen/systemverilog/rtl/bit_field/type/ro.rb
108
112
  - lib/rggen/systemverilog/rtl/bit_field/type/rof.erb
109
113
  - lib/rggen/systemverilog/rtl/bit_field/type/rof.rb
110
- - lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s.erb
111
- - lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s.rb
114
+ - lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos.erb
115
+ - lib/rggen/systemverilog/rtl/bit_field/type/rs_w0s_w1s_ws_wos.rb
112
116
  - lib/rggen/systemverilog/rtl/bit_field/type/rw_w1_wo_wo1.erb
113
117
  - lib/rggen/systemverilog/rtl/bit_field/type/rw_w1_wo_wo1.rb
114
118
  - lib/rggen/systemverilog/rtl/bit_field/type/rwc.erb
@@ -119,15 +123,20 @@ files:
119
123
  - lib/rggen/systemverilog/rtl/bit_field/type/rwl.rb
120
124
  - lib/rggen/systemverilog/rtl/bit_field/type/rws.erb
121
125
  - lib/rggen/systemverilog/rtl/bit_field/type/rws.rb
122
- - lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs.erb
123
- - lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs.rb
124
- - lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src.erb
125
- - lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src.rb
126
+ - lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs_wcrs.erb
127
+ - lib/rggen/systemverilog/rtl/bit_field/type/w0crs_w1crs_wcrs.rb
128
+ - lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src_wsrc.erb
129
+ - lib/rggen/systemverilog/rtl/bit_field/type/w0src_w1src_wsrc.rb
130
+ - lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.erb
131
+ - lib/rggen/systemverilog/rtl/bit_field/type/w0t_w1t.rb
126
132
  - lib/rggen/systemverilog/rtl/bit_field/type/w0trg_w1trg.erb
127
133
  - lib/rggen/systemverilog/rtl/bit_field/type/w0trg_w1trg.rb
134
+ - lib/rggen/systemverilog/rtl/bit_field/type/wrc_wrs.erb
135
+ - lib/rggen/systemverilog/rtl/bit_field/type/wrc_wrs.rb
128
136
  - lib/rggen/systemverilog/rtl/feature.rb
129
137
  - lib/rggen/systemverilog/rtl/global/array_port_format.rb
130
138
  - lib/rggen/systemverilog/rtl/global/fold_sv_interface_port.rb
139
+ - lib/rggen/systemverilog/rtl/partial_sum.rb
131
140
  - lib/rggen/systemverilog/rtl/register/sv_rtl_top.rb
132
141
  - lib/rggen/systemverilog/rtl/register/type.rb
133
142
  - lib/rggen/systemverilog/rtl/register/type/default.erb
@@ -142,6 +151,8 @@ files:
142
151
  - lib/rggen/systemverilog/rtl/register_block/protocol/axi4lite.rb
143
152
  - lib/rggen/systemverilog/rtl/register_block/sv_rtl_macros.erb
144
153
  - lib/rggen/systemverilog/rtl/register_block/sv_rtl_top.rb
154
+ - lib/rggen/systemverilog/rtl/register_file/sv_rtl_top.rb
155
+ - lib/rggen/systemverilog/rtl/register_index.rb
145
156
  - lib/rggen/systemverilog/rtl/setup.rb
146
157
  - lib/rggen/systemverilog/version.rb
147
158
  homepage: https://github.com/rggen/rggen-systemverilog
@@ -170,5 +181,5 @@ requirements: []
170
181
  rubygems_version: 3.1.2
171
182
  signing_key:
172
183
  specification_version: 4
173
- summary: rggen-systemverilog-0.19.0
184
+ summary: rggen-systemverilog-0.23.0
174
185
  test_files: []
@@ -1,11 +0,0 @@
1
- function new(string name);
2
- super.new(name);
3
- endfunction
4
- function void build();
5
- <% reg_model_constructors.each do |constructor| %>
6
- <%= constructor %>
7
- <% end %>
8
- endfunction
9
- function uvm_reg_map create_default_map();
10
- return create_map("default_map", 0, <%= byte_width %>, UVM_LITTLE_ENDIAN, 1);
11
- endfunction