rggen 0.4.4 → 0.5.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +1 -1
  3. data/README.md +3 -2
  4. data/c/rggen.h +17 -0
  5. data/lib/rggen.rb +7 -16
  6. data/lib/rggen/base/item_factory.rb +2 -0
  7. data/lib/rggen/builtins.rb +15 -13
  8. data/lib/rggen/builtins/bit_field/{reserved.rb → types/reserved.rb} +0 -0
  9. data/lib/rggen/builtins/bit_field/{ro.erb → types/ro.erb} +0 -0
  10. data/lib/rggen/builtins/bit_field/{ro.rb → types/ro.rb} +0 -0
  11. data/lib/rggen/builtins/bit_field/{rw.erb → types/rw.erb} +0 -0
  12. data/lib/rggen/builtins/bit_field/{rw.rb → types/rw.rb} +0 -0
  13. data/lib/rggen/builtins/bit_field/{rwl_rwe.erb → types/rwl_rwe.erb} +0 -0
  14. data/lib/rggen/builtins/bit_field/{rwl_rwe.rb → types/rwl_rwe.rb} +0 -0
  15. data/lib/rggen/builtins/bit_field/{w0c_w1c.erb → types/w0c_w1c.erb} +0 -0
  16. data/lib/rggen/builtins/bit_field/{w0c_w1c.rb → types/w0c_w1c.rb} +0 -0
  17. data/lib/rggen/builtins/bit_field/{w0s_w1s.erb → types/w0s_w1s.erb} +0 -0
  18. data/lib/rggen/builtins/bit_field/{w0s_w1s.rb → types/w0s_w1s.rb} +0 -0
  19. data/lib/rggen/builtins/bit_field/{wo.rb → types/wo.rb} +0 -0
  20. data/lib/rggen/builtins/register/address_decoder.erb +9 -9
  21. data/lib/rggen/builtins/register/address_decoder.rb +24 -24
  22. data/lib/rggen/builtins/register/array.rb +0 -22
  23. data/lib/rggen/builtins/register/bus_exporter.rb +10 -2
  24. data/lib/rggen/builtins/register/indirect_index_configurator.rb +54 -0
  25. data/lib/rggen/builtins/register/offset_address.rb +21 -15
  26. data/lib/rggen/builtins/register/read_data.rb +1 -1
  27. data/lib/rggen/builtins/register/reg_model.rb +5 -5
  28. data/lib/rggen/builtins/register/sub_block_model.rb +1 -1
  29. data/lib/rggen/builtins/register/type.rb +207 -0
  30. data/lib/rggen/builtins/register/types/external.rb +15 -0
  31. data/lib/rggen/builtins/register/types/indirect.rb +134 -0
  32. data/lib/rggen/builtins/register/uniqueness_validator.rb +10 -7
  33. data/lib/rggen/builtins/register_block/address_struct.rb +56 -0
  34. data/lib/rggen/builtins/register_block/c_header_file.rb +15 -0
  35. data/lib/rggen/builtins/register_block/{apb.erb → host_ifs/apb.erb} +0 -0
  36. data/lib/rggen/builtins/register_block/{apb.rb → host_ifs/apb.rb} +0 -0
  37. data/lib/rggen/builtins/register_block/{axi4lite.erb → host_ifs/axi4lite.erb} +0 -0
  38. data/lib/rggen/builtins/register_block/{axi4lite.rb → host_ifs/axi4lite.rb} +0 -0
  39. data/lib/rggen/builtins/register_block/ral_package.rb +6 -1
  40. data/lib/rggen/builtins/register_block/response_mux.rb +2 -2
  41. data/lib/rggen/builtins/register_block/top_module.rb +5 -1
  42. data/lib/rggen/core_components.rb +25 -0
  43. data/lib/rggen/core_components/c_header/item.rb +8 -0
  44. data/lib/rggen/core_components/c_header/setup.rb +19 -0
  45. data/lib/rggen/core_components/c_utility.rb +19 -0
  46. data/lib/rggen/core_components/c_utility/data_structure_definition.rb +62 -0
  47. data/lib/rggen/core_components/c_utility/source_file.rb +10 -0
  48. data/lib/rggen/core_components/c_utility/variable_declaration.rb +35 -0
  49. data/lib/rggen/core_components/code_utility.rb +56 -0
  50. data/lib/rggen/{output_base → core_components/code_utility}/code_block.rb +1 -1
  51. data/lib/rggen/{output_base → core_components/code_utility}/line.rb +1 -1
  52. data/lib/rggen/core_components/code_utility/source_file.rb +97 -0
  53. data/lib/rggen/core_components/erb_engine.rb +15 -0
  54. data/lib/rggen/core_components/ral/item.rb +2 -1
  55. data/lib/rggen/core_components/register_map/generic_map.rb +3 -1
  56. data/lib/rggen/core_components/rtl/item.rb +2 -1
  57. data/lib/rggen/core_components/verilog_utility.rb +69 -0
  58. data/lib/rggen/core_components/verilog_utility/class_definition.rb +56 -0
  59. data/lib/rggen/core_components/verilog_utility/declaration.rb +66 -0
  60. data/lib/rggen/core_components/verilog_utility/identifier.rb +27 -0
  61. data/lib/rggen/core_components/verilog_utility/module_definition.rb +71 -0
  62. data/lib/rggen/core_components/verilog_utility/package_definition.rb +65 -0
  63. data/lib/rggen/core_components/verilog_utility/source_file.rb +10 -0
  64. data/lib/rggen/core_components/verilog_utility/structure_definition.rb +50 -0
  65. data/lib/rggen/core_components/verilog_utility/subroutine_definition.rb +41 -0
  66. data/lib/rggen/core_extensions/facets.rb +5 -0
  67. data/lib/rggen/generator.rb +19 -5
  68. data/lib/rggen/input_base/item.rb +6 -6
  69. data/lib/rggen/output_base/code_generator.rb +36 -0
  70. data/lib/rggen/output_base/component.rb +27 -41
  71. data/lib/rggen/output_base/file_writer.rb +36 -0
  72. data/lib/rggen/output_base/item.rb +34 -100
  73. data/lib/rggen/output_base/template_engine.rb +24 -0
  74. data/lib/rggen/rggen_home.rb +3 -0
  75. data/lib/rggen/version.rb +2 -2
  76. data/ral/rggen_ral_block.svh +1 -1
  77. data/ral/rggen_ral_indirect_reg.svh +193 -0
  78. data/ral/rggen_ral_map.svh +20 -20
  79. data/ral/rggen_ral_pkg.sv +1 -1
  80. data/rtl/register/rggen_address_decoder.sv +14 -14
  81. data/sample/sample.csv +21 -22
  82. data/sample/sample.xls +0 -0
  83. data/sample/sample.xlsx +0 -0
  84. data/sample/sample_0.h +17 -0
  85. data/sample/sample_0.sv +92 -92
  86. data/sample/sample_0_ral_pkg.sv +8 -5
  87. data/sample/sample_1.h +9 -0
  88. data/sample/sample_1.sv +27 -27
  89. data/sample/sample_1_ral_pkg.sv +3 -0
  90. data/sample/sample_setup.rb +4 -2
  91. data/setup/default.rb +4 -2
  92. metadata +53 -36
  93. data/lib/rggen/builtins/register/accessibility.rb +0 -23
  94. data/lib/rggen/builtins/register/external.rb +0 -42
  95. data/lib/rggen/builtins/register/shadow.rb +0 -130
  96. data/lib/rggen/builtins/register/shadow_index_configurator.rb +0 -56
  97. data/lib/rggen/output_base/code_utility.rb +0 -50
  98. data/lib/rggen/output_base/template_utility.rb +0 -29
  99. data/lib/rggen/output_base/verilog_utility.rb +0 -69
  100. data/lib/rggen/output_base/verilog_utility/class_definition.rb +0 -58
  101. data/lib/rggen/output_base/verilog_utility/declaration.rb +0 -68
  102. data/lib/rggen/output_base/verilog_utility/identifier.rb +0 -29
  103. data/lib/rggen/output_base/verilog_utility/module_definition.rb +0 -73
  104. data/lib/rggen/output_base/verilog_utility/package_definition.rb +0 -67
  105. data/lib/rggen/output_base/verilog_utility/structure_definition.rb +0 -52
  106. data/lib/rggen/output_base/verilog_utility/subroutine_definition.rb +0 -43
  107. data/ral/rggen_ral_shadow_reg.svh +0 -193
@@ -0,0 +1,24 @@
1
+ module RgGen
2
+ module OutputBase
3
+ class TemplateEngine
4
+ include Singleton
5
+
6
+ def process_template(context, path = nil, call_info = nil)
7
+ path ||= extract_template_path(call_info || caller[0])
8
+ render(context, templates[path])
9
+ end
10
+
11
+ private
12
+
13
+ def templates
14
+ @templates ||= Hash.new do |t, p|
15
+ t[p] = parse_template(p)
16
+ end
17
+ end
18
+
19
+ def extract_template_path(call_info)
20
+ File.ext(call_info[/^(.+?):\d/, 1], file_extension.to_s)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,3 @@
1
+ module RgGen
2
+ RGGEN_HOME = File.realpath(File.join(__dir__, '../..'))
3
+ end
data/lib/rggen/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module RgGen
2
2
  MAJOR = 0
3
- MINOR = 4
4
- TEENY = 4
3
+ MINOR = 5
4
+ TEENY = 1
5
5
  VERSION = "#{MAJOR}.#{MINOR}.#{TEENY}".freeze
6
6
  end
@@ -65,7 +65,7 @@ function void rggen_ral_block::lock_model();
65
65
  foreach (maps[i]) begin
66
66
  rggen_ral_map rggen_map;
67
67
  if ($cast(rggen_map, maps[i])) begin
68
- rggen_map.Xinit_shadow_reg_address_mapX();
68
+ rggen_map.Xinit_indirect_reg_address_mapX();
69
69
  end
70
70
  end
71
71
  end
@@ -0,0 +1,193 @@
1
+ `ifndef __RGGEN_RAL_INDIRECT_REG_SVH__
2
+ `define __RGGEN_RAL_INDIRECT_REG_SVH__
3
+ typedef class rggen_ral_indirect_reg_index;
4
+ typedef class rggen_ral_indirect_reg_ftdr_seq;
5
+
6
+ class rggen_ral_indirect_reg extends rggen_ral_reg;
7
+ protected rggen_ral_indirect_reg_index indirect_reg_indexes[$];
8
+
9
+ extern function new(string name, int unsigned n_bits, int has_coverage);
10
+
11
+ extern function void configure(
12
+ uvm_object cfg,
13
+ uvm_reg_block blk_parent,
14
+ uvm_reg_file regfile_parent,
15
+ int indexes[$],
16
+ string hdl_path = ""
17
+ );
18
+
19
+ extern virtual function uvm_reg_frontdoor create_frontdoor();
20
+ extern virtual function bit is_active();
21
+
22
+ extern protected virtual function void configure_indirect_indexes();
23
+ extern protected function void set_indirect_index(string reg_name, string field_name, uvm_reg_data_t value);
24
+ endclass
25
+
26
+ function rggen_ral_indirect_reg::new(string name, int unsigned n_bits, int has_coverage);
27
+ super.new(name, n_bits, has_coverage);
28
+ endfunction
29
+
30
+ function void rggen_ral_indirect_reg::configure(
31
+ uvm_object cfg,
32
+ uvm_reg_block blk_parent,
33
+ uvm_reg_file regfile_parent,
34
+ int indexes[$],
35
+ string hdl_path
36
+ );
37
+ super.configure(cfg, blk_parent, regfile_parent, indexes, hdl_path);
38
+ configure_indirect_indexes();
39
+ endfunction
40
+
41
+ function uvm_reg_frontdoor rggen_ral_indirect_reg::create_frontdoor();
42
+ rggen_ral_indirect_reg_ftdr_seq fd = new(indirect_reg_indexes);
43
+ return fd;
44
+ endfunction
45
+
46
+ function bit rggen_ral_indirect_reg::is_active();
47
+ foreach (indirect_reg_indexes[i]) begin
48
+ if (!indirect_reg_indexes[i].is_matched()) begin
49
+ return 0;
50
+ end
51
+ end
52
+ return 1;
53
+ endfunction
54
+
55
+ function void rggen_ral_indirect_reg::configure_indirect_indexes();
56
+ endfunction
57
+
58
+ function void rggen_ral_indirect_reg::set_indirect_index(string reg_name, string field_name, uvm_reg_data_t value);
59
+ rggen_ral_indirect_reg_index indirect_reg_index;
60
+ indirect_reg_index = new(this, reg_name, field_name, value);
61
+ indirect_reg_indexes.push_back(indirect_reg_index);
62
+ endfunction
63
+
64
+ class rggen_ral_indirect_reg_index;
65
+ protected rggen_ral_indirect_reg indirect_reg;
66
+ protected string reg_name;
67
+ protected string field_name;
68
+ protected uvm_reg_data_t value;
69
+ protected uvm_reg index_reg;
70
+ protected uvm_reg_field index_field;
71
+
72
+ extern function new(
73
+ rggen_ral_indirect_reg indirect_reg,
74
+ string reg_name,
75
+ string field_name,
76
+ uvm_reg_data_t value
77
+ );
78
+
79
+ extern virtual function bit is_matched();
80
+ extern virtual function void set(string fname = "", int lineno = 0);
81
+ extern virtual function uvm_reg get_index_reg();
82
+ extern virtual function uvm_reg_field get_index_field();
83
+ endclass
84
+
85
+ function rggen_ral_indirect_reg_index::new(
86
+ rggen_ral_indirect_reg indirect_reg,
87
+ string reg_name,
88
+ string field_name,
89
+ uvm_reg_data_t value
90
+ );
91
+ this.indirect_reg = indirect_reg;
92
+ this.reg_name = reg_name;
93
+ this.field_name = field_name;
94
+ this.value = value;
95
+ endfunction
96
+
97
+ function bit rggen_ral_indirect_reg_index::is_matched();
98
+ void'(get_index_field());
99
+ return (index_field.value == value) ? 1 : 0;
100
+ endfunction
101
+
102
+ function void rggen_ral_indirect_reg_index::set(string fname = "", int lineno = 0);
103
+ void'(get_index_field());
104
+ index_field.set(value, fname, lineno);
105
+ endfunction
106
+
107
+ function uvm_reg rggen_ral_indirect_reg_index::get_index_reg();
108
+ if (index_reg == null) begin
109
+ uvm_reg_block parent_block;
110
+ parent_block = indirect_reg.get_parent();
111
+ index_reg = parent_block.get_reg_by_name(reg_name);
112
+ if (index_reg == null) begin
113
+ `uvm_fatal("rggen_ral_indirect_reg_index", $sformatf("Unable to locate index register: %s", reg_name))
114
+ return null;
115
+ end
116
+ end
117
+ return index_reg;
118
+ endfunction
119
+
120
+ function uvm_reg_field rggen_ral_indirect_reg_index::get_index_field();
121
+ if (index_field == null) begin
122
+ void'(get_index_reg());
123
+ index_field = index_reg.get_field_by_name(field_name);
124
+ if (index_field == null) begin
125
+ `uvm_fatal("rggen_ral_indirect_reg_index", $sformatf("Unable to locate index field: %s", field_name))
126
+ return null;
127
+ end
128
+ end
129
+ return index_field;
130
+ endfunction
131
+
132
+ class rggen_ral_indirect_reg_ftdr_seq extends uvm_reg_frontdoor;
133
+ protected rggen_ral_indirect_reg_index indirect_indexes[$];
134
+ protected bit index_regs[uvm_reg];
135
+
136
+ extern function new(ref rggen_ral_indirect_reg_index indirect_indexes[$]);
137
+
138
+ extern virtual task body();
139
+ extern task update_index_regs(ref uvm_status_e status);
140
+ endclass
141
+
142
+ function rggen_ral_indirect_reg_ftdr_seq::new(ref rggen_ral_indirect_reg_index indirect_indexes[$]);
143
+ super.new("rggen_ral_indirect_reg_ftdr_seq");
144
+ foreach (indirect_indexes[i]) begin
145
+ this.indirect_indexes.push_back(indirect_indexes[i]);
146
+ end
147
+ endfunction
148
+
149
+ task rggen_ral_indirect_reg_ftdr_seq::body();
150
+ uvm_status_e status;
151
+ update_index_regs(status);
152
+ if (status == UVM_NOT_OK) begin
153
+ `uvm_warning("rggen_ral_indirect_reg_ftdr_seq", "Updating index registers failed")
154
+ rw_info.status = status;
155
+ return;
156
+ end
157
+ if (rw_info.kind == UVM_WRITE) begin
158
+ rw_info.local_map.do_write(rw_info);
159
+ end
160
+ else begin
161
+ rw_info.local_map.do_read(rw_info);
162
+ end
163
+ endtask
164
+
165
+ task rggen_ral_indirect_reg_ftdr_seq::update_index_regs(ref uvm_status_e status);
166
+ if (index_regs.size() == 0) begin
167
+ foreach (indirect_indexes[i]) begin
168
+ uvm_reg index_reg = indirect_indexes[i].get_index_reg();
169
+ if (!index_regs.exists(index_reg)) begin
170
+ index_regs[index_reg] = 1;
171
+ end
172
+ end
173
+ end
174
+ foreach (indirect_indexes[i]) begin
175
+ indirect_indexes[i].set(rw_info.fname, rw_info.lineno);
176
+ end
177
+ foreach (index_regs[index_reg]) begin
178
+ index_reg.update(
179
+ status,
180
+ rw_info.path,
181
+ rw_info.map,
182
+ rw_info.parent,
183
+ rw_info.prior,
184
+ rw_info.extension,
185
+ rw_info.fname,
186
+ rw_info.lineno
187
+ );
188
+ if (status == UVM_NOT_OK) begin
189
+ return;
190
+ end
191
+ end
192
+ endtask
193
+ `endif
@@ -1,7 +1,7 @@
1
1
  `ifndef __RGGEN_RAL_MAP_SVH__
2
2
  `define __RGGEN_RAL_MAP_SVH__
3
3
  class rggen_ral_map extends uvm_reg_map;
4
- protected rggen_ral_shadow_reg m_shadow_regs_by_offset[uvm_reg_addr_t][$];
4
+ protected rggen_ral_indirect_reg m_indirect_regs_by_offset[uvm_reg_addr_t][$];
5
5
 
6
6
  extern function new(string name = "rggen_ral_map");
7
7
 
@@ -17,7 +17,7 @@ class rggen_ral_map extends uvm_reg_map;
17
17
 
18
18
  extern virtual function uvm_reg get_reg_by_offset(uvm_reg_addr_t offset, bit read = 1);
19
19
 
20
- extern function void Xinit_shadow_reg_address_mapX();
20
+ extern function void Xinit_indirect_reg_address_mapX();
21
21
 
22
22
  `uvm_object_utils(rggen_ral_map)
23
23
  endclass
@@ -33,13 +33,13 @@ function void rggen_ral_map::add_reg(
33
33
  bit unmapped,
34
34
  uvm_reg_frontdoor frontdoor
35
35
  );
36
- rggen_ral_reg rggen_reg;
37
- rggen_ral_shadow_reg rggen_shadow_reg;
36
+ rggen_ral_reg rggen_reg;
37
+ rggen_ral_indirect_reg rggen_indirect_reg;
38
38
 
39
39
  if ((frontdoor == null) && $cast(rggen_reg, rg)) begin
40
40
  frontdoor = rggen_reg.create_frontdoor();
41
41
  end
42
- if ($cast(rggen_shadow_reg, rg)) begin
42
+ if ($cast(rggen_indirect_reg, rg)) begin
43
43
  unmapped = 1;
44
44
  end
45
45
  super.add_reg(rg, offset, rights, unmapped, frontdoor);
@@ -51,7 +51,7 @@ function void rggen_ral_map::set_base_addr(uvm_reg_addr_t offset);
51
51
  bit locked = parent_block.is_locked();
52
52
  super.set_base_addr(offset);
53
53
  if ((parent_map == null) && locked) begin
54
- Xinit_shadow_reg_address_mapX();
54
+ Xinit_indirect_reg_address_mapX();
55
55
  end
56
56
  endfunction
57
57
 
@@ -63,7 +63,7 @@ function void rggen_ral_map::set_submap_offset(uvm_reg_map submap, uvm_reg_addr_
63
63
  uvm_reg_map root_map = get_root_map();
64
64
  rggen_ral_map rggen_map;
65
65
  if ($cast(rggen_map, root_map)) begin
66
- rggen_map.Xinit_shadow_reg_address_mapX();
66
+ rggen_map.Xinit_indirect_reg_address_mapX();
67
67
  end
68
68
  end
69
69
  endfunction
@@ -71,10 +71,10 @@ endfunction
71
71
  function uvm_reg rggen_ral_map::get_reg_by_offset(uvm_reg_addr_t offset, bit read);
72
72
  uvm_reg rg = super.get_reg_by_offset(offset, read);
73
73
  uvm_reg_block parent = get_parent();
74
- if ((rg == null) && parent.is_locked() && m_shadow_regs_by_offset.exists(offset)) begin
75
- foreach (m_shadow_regs_by_offset[offset][i]) begin
76
- if (m_shadow_regs_by_offset[offset][i].is_active()) begin
77
- rg = m_shadow_regs_by_offset[offset][i];
74
+ if ((rg == null) && parent.is_locked() && m_indirect_regs_by_offset.exists(offset)) begin
75
+ foreach (m_indirect_regs_by_offset[offset][i]) begin
76
+ if (m_indirect_regs_by_offset[offset][i].is_active()) begin
77
+ rg = m_indirect_regs_by_offset[offset][i];
78
78
  break;
79
79
  end
80
80
  end
@@ -82,7 +82,7 @@ function uvm_reg rggen_ral_map::get_reg_by_offset(uvm_reg_addr_t offset, bit rea
82
82
  return rg;
83
83
  endfunction
84
84
 
85
- function void rggen_ral_map::Xinit_shadow_reg_address_mapX();
85
+ function void rggen_ral_map::Xinit_indirect_reg_address_mapX();
86
86
  uvm_reg_map top_map;
87
87
  rggen_ral_map top_rggen_map;
88
88
  uvm_reg_map submaps[$];
@@ -90,7 +90,7 @@ function void rggen_ral_map::Xinit_shadow_reg_address_mapX();
90
90
 
91
91
  top_map = get_root_map();
92
92
  if (top_map == this) begin
93
- m_shadow_regs_by_offset.delete();
93
+ m_indirect_regs_by_offset.delete();
94
94
  end
95
95
  if (!$cast(top_rggen_map, top_map)) begin
96
96
  return;
@@ -100,24 +100,24 @@ function void rggen_ral_map::Xinit_shadow_reg_address_mapX();
100
100
  foreach (submaps[i]) begin
101
101
  rggen_ral_map rggen_map;
102
102
  if ($cast(rggen_map, submaps[i])) begin
103
- rggen_map.Xinit_shadow_reg_address_mapX();
103
+ rggen_map.Xinit_indirect_reg_address_mapX();
104
104
  end
105
105
  end
106
106
 
107
107
  get_registers(regs, UVM_NO_HIER);
108
108
  foreach (regs[i]) begin
109
- rggen_ral_shadow_reg shadow_reg;
110
- uvm_reg_map_info map_info;
109
+ rggen_ral_indirect_reg indirect_reg;
110
+ uvm_reg_map_info map_info;
111
111
 
112
- if (!$cast(shadow_reg, regs[i])) begin
112
+ if (!$cast(indirect_reg, regs[i])) begin
113
113
  continue;
114
114
  end
115
115
 
116
- map_info = get_reg_map_info(shadow_reg);
116
+ map_info = get_reg_map_info(indirect_reg);
117
117
  map_info.unmapped = 0;
118
- void'(get_physical_addresses(map_info.offset, 0, shadow_reg.get_n_bytes(), map_info.addr));
118
+ void'(get_physical_addresses(map_info.offset, 0, indirect_reg.get_n_bytes(), map_info.addr));
119
119
  foreach (map_info.addr[j]) begin
120
- top_rggen_map.m_shadow_regs_by_offset[map_info.addr[j]].push_back(shadow_reg);
120
+ top_rggen_map.m_indirect_regs_by_offset[map_info.addr[j]].push_back(indirect_reg);
121
121
  end
122
122
  end
123
123
  endfunction
data/ral/rggen_ral_pkg.sv CHANGED
@@ -8,7 +8,7 @@ package rggen_ral_pkg;
8
8
  `include "rggen_ral_field.svh"
9
9
  `include "rggen_ral_field_rwl_rwe.svh"
10
10
  `include "rggen_ral_reg.svh"
11
- `include "rggen_ral_shadow_reg.svh"
11
+ `include "rggen_ral_indirect_reg.svh"
12
12
  `include "rggen_ral_map.svh"
13
13
  `include "rggen_ral_block.svh"
14
14
  endpackage
@@ -1,19 +1,19 @@
1
1
  module rggen_address_decoder #(
2
- parameter ADDRESS_WIDTH = 16,
3
- parameter START_ADDRESS = 'h00,
4
- parameter END_ADDRESS = 'h00,
5
- parameter USE_SHADOW_INDEX = 0,
6
- parameter SHADOW_INDEX_WIDTH = 1,
7
- parameter SHADOW_INDEX_VALUE = 'h00
2
+ parameter ADDRESS_WIDTH = 16,
3
+ parameter START_ADDRESS = 'h00,
4
+ parameter END_ADDRESS = 'h00,
5
+ parameter INDIRECT_REGISTER = 0,
6
+ parameter INDIRECT_INDEX_WIDTH = 1,
7
+ parameter INDIRECT_INDEX_VALUE = 'h00
8
8
  )(
9
- input [ADDRESS_WIDTH-1:0] i_address,
10
- input [SHADOW_INDEX_WIDTH-1:0] i_shadow_index,
11
- output o_select
9
+ input [ADDRESS_WIDTH-1:0] i_address,
10
+ input [INDIRECT_INDEX_WIDTH-1:0] i_indirect_index,
11
+ output o_select
12
12
  );
13
13
  logic match_address;
14
- logic match_shadow_index;
14
+ logic match_indirect_index;
15
15
 
16
- assign o_select = (match_address && match_shadow_index) ? 1'b1 : 1'b0;
16
+ assign o_select = (match_address && match_indirect_index) ? 1'b1 : 1'b0;
17
17
 
18
18
  generate
19
19
  if (START_ADDRESS == END_ADDRESS) begin
@@ -27,11 +27,11 @@ module rggen_address_decoder #(
27
27
  endgenerate
28
28
 
29
29
  generate
30
- if (USE_SHADOW_INDEX) begin
31
- assign match_shadow_index = (i_shadow_index == SHADOW_INDEX_VALUE) ? 1'b1 : 1'b0;
30
+ if (INDIRECT_REGISTER) begin
31
+ assign match_indirect_index = (i_indirect_index == INDIRECT_INDEX_VALUE) ? 1'b1 : 1'b0;
32
32
  end
33
33
  else begin
34
- assign match_shadow_index = 1'b1;
34
+ assign match_indirect_index = 1'b1;
35
35
  end
36
36
  endgenerate
37
37
  endmodule
data/sample/sample.csv CHANGED
@@ -1,22 +1,21 @@
1
- ,block name,block_0,,,,,,,,,
2
- ,byte size,256,,,,,,,,,
3
- ,,,,,,,,,,,
4
- ,offset address,registe name,array dimension,shadow index,external,assignment,field name,type,initial value,reference,
5
- ,0x00,register_0,,,,[31:16],bit_field_0_0,rw,0,,
6
- ,,,,,,[15:0],bit_field_0_1,rw,0,,
7
- ,0x04,register_1,,,,[31:0],bit_field_1_0,rw,0,,
8
- ,0x08,register_2,,,,[16],bit_field_2_0,ro,,,
9
- ,,,,,,[0],bit_field_2_1,rw,0,,
10
- ,0x0C,register_3,,,,[31:0],bit_field_3_0,ro,,,
11
- ,0x10 - 0x1F,register_4,[4],,,[31:16],bit_field_4_0,ro,,,
12
- ,,,,,,[15:0],bit_field_4_1,rw,0,,
13
- ,0x20,register_5,"[2,4]","bit_field_2_1:1, bit_field_0_0, bit_field_0_1",,[31:16],bit_field_5_0,ro,,,
14
- ,,,,,,[15:0],bit_field_5_1,rw,0,,
15
- ,0x24,register_6,,,,[8],bit_field_6_0,w0c,0,bit_field_2_1,
16
- ,,,,,,[0],bit_field_6_1,w1c,0,bit_field_2_1,
17
- ,0x28,register_7,,,,[8],bit_field_7_0,w0s,0,,
18
- ,,,,,,[0],bit_field_7_1,w1s,0,,
19
- ,0x2C,register_8,,,,[31:16],bit_field_8_0,rwl,0,bit_field_2_1,
20
- ,,,,,,[15:0],bit_field_8_1,rwe,0,bit_field_2_1,
21
- ,0x80-0xFF,register_9,,,TRUE,,,,,,
22
- ,,,,,,,,,,,
1
+ ,block name,block_0,,,,,,,
2
+ ,byte size,256,,,,,,,
3
+ ,,,,,,,,,
4
+ ,offset address,registe name,array dimension,type,assignment,field name,type,initial value,reference
5
+ ,0x00,register_0,,,[31:16],bit_field_0_0,rw,0,
6
+ ,,,,,[15:0],bit_field_0_1,rw,0,
7
+ ,0x04,register_1,,,[31:0],bit_field_1_0,rw,0,
8
+ ,0x08,register_2,,,[16],bit_field_2_0,ro,,
9
+ ,,,,,[0],bit_field_2_1,rw,0,
10
+ ,0x0C,register_3,,,[31:0],bit_field_3_0,ro,,
11
+ ,0x10 - 0x1F,register_4,[4],,[31:16],bit_field_4_0,ro,,
12
+ ,,,,,[15:0],bit_field_4_1,rw,0,
13
+ ,0x20,register_5,"[2,4]","indirect: bit_field_2_1:1, bit_field_0_0, bit_field_0_1",[31:16],bit_field_5_0,ro,,
14
+ ,,,,,[15:0],bit_field_5_1,rw,0,
15
+ ,0x24,register_6,,,[8],bit_field_6_0,w0c,0,bit_field_2_1
16
+ ,,,,,[0],bit_field_6_1,w1c,0,bit_field_2_1
17
+ ,0x28,register_7,,,[8],bit_field_7_0,w0s,0,
18
+ ,,,,,[0],bit_field_7_1,w1s,0,
19
+ ,0x2C,register_8,,,[31:16],bit_field_8_0,rwl,0,bit_field_2_1
20
+ ,,,,,[15:0],bit_field_8_1,rwe,0,bit_field_2_1
21
+ ,0x80-0xFF,register_9,,external,,,,,