rggen 0.4.0 → 0.4.1

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +18 -14
  3. data/lib/rggen/builder/category.rb +15 -4
  4. data/lib/rggen/builtins.rb +3 -0
  5. data/lib/rggen/builtins/bit_field/field_model.rb +6 -2
  6. data/lib/rggen/builtins/bit_field/reserved.rb +1 -0
  7. data/lib/rggen/builtins/bit_field/ro.erb +6 -0
  8. data/lib/rggen/builtins/bit_field/ro.rb +8 -7
  9. data/lib/rggen/builtins/bit_field/type.rb +14 -0
  10. data/lib/rggen/builtins/bit_field/w0c_w1c.erb +15 -0
  11. data/lib/rggen/builtins/bit_field/w0c_w1c.rb +26 -0
  12. data/lib/rggen/builtins/bit_field/w0s_w1s.erb +15 -0
  13. data/lib/rggen/builtins/bit_field/w0s_w1s.rb +34 -0
  14. data/lib/rggen/builtins/register/address_decoder.erb +0 -2
  15. data/lib/rggen/builtins/register/address_decoder.rb +0 -8
  16. data/lib/rggen/builtins/register/reg_model.rb +18 -2
  17. data/lib/rggen/builtins/register/shadow_index_configurator.rb +4 -2
  18. data/lib/rggen/builtins/register/sub_block_model.rb +1 -1
  19. data/lib/rggen/builtins/register_block/default_map_creator.rb +1 -1
  20. data/lib/rggen/builtins/register_block/irq_controller.erb +9 -0
  21. data/lib/rggen/builtins/register_block/irq_controller.rb +44 -0
  22. data/lib/rggen/output_base/component.rb +5 -4
  23. data/lib/rggen/output_base/verilog_utility.rb +4 -0
  24. data/lib/rggen/version.rb +1 -1
  25. data/ral/rggen_ral_block.svh +4 -0
  26. data/ral/rggen_ral_macros.svh +10 -9
  27. data/ral/rggen_ral_map.svh +3 -3
  28. data/ral/rggen_ral_reg.svh +4 -0
  29. data/rtl/bit_field/rggen_bit_field_ro.sv +8 -0
  30. data/rtl/bit_field/rggen_bit_field_w0c_w1c.sv +36 -0
  31. data/rtl/bit_field/rggen_bit_field_w0s_w1s.sv +36 -0
  32. data/rtl/register/rggen_address_decoder.sv +1 -19
  33. data/rtl/register_block/rggen_irq_controller.sv +21 -0
  34. data/sample/sample.csv +20 -15
  35. data/sample/sample.xls +0 -0
  36. data/sample/sample.xlsx +0 -0
  37. data/sample/sample_0.sv +167 -45
  38. data/sample/sample_0_ral_pkg.sv +45 -19
  39. data/sample/sample_1.sv +12 -8
  40. data/sample/sample_1_ral_pkg.sv +8 -8
  41. data/sample/sample_setup.rb +2 -2
  42. data/setup/default.rb +2 -2
  43. metadata +13 -2
@@ -3,16 +3,17 @@ module RgGen
3
3
  class Component < Base::Component
4
4
  include Base::HierarchicalAccessors
5
5
 
6
- def initialize(parent, configuration, register_map)
6
+ def initialize(parent, configuration, source)
7
7
  super(parent)
8
8
  define_hierarchical_accessors
9
9
  @configuration = configuration
10
- @register_map = register_map
11
- @need_children = register_map.need_children?
12
- def_delegators(:@register_map, *@register_map.fields)
10
+ @source = source
11
+ @need_children = source.need_children?
12
+ def_delegators(:source, *source.fields)
13
13
  end
14
14
 
15
15
  attr_reader :configuration
16
+ attr_reader :source
16
17
  attr_writer :output_directory
17
18
 
18
19
  def add_item(item)
@@ -36,6 +36,10 @@ module RgGen
36
36
  "assign #{lhs} = #{rhs};"
37
37
  end
38
38
 
39
+ def subroutine_call(subroutine, arguments = nil)
40
+ "#{subroutine}(#{Array(arguments).join(', ')})"
41
+ end
42
+
39
43
  def concat(expression, *other_expressions)
40
44
  expressions = Array[expression, *other_expressions]
41
45
  "{#{expressions.join(', ')}}"
@@ -1,6 +1,6 @@
1
1
  module RgGen
2
2
  MAJOR = 0
3
3
  MINOR = 4
4
- TEENY = 0
4
+ TEENY = 1
5
5
  VERSION = "#{MAJOR}.#{MINOR}.#{TEENY}".freeze
6
6
  end
@@ -14,6 +14,7 @@ class rggen_ral_block extends uvm_reg_block;
14
14
  uvm_endianness_e endian,
15
15
  bit byte_addressing = 1
16
16
  );
17
+ extern virtual function void build();
17
18
  extern virtual function void lock_model();
18
19
 
19
20
  extern protected virtual function void set_cfg(uvm_object cfg);
@@ -28,6 +29,9 @@ endfunction
28
29
  function void rggen_ral_block::configure(uvm_object cfg, uvm_reg_block parent, string hdl_path);
29
30
  set_cfg(cfg);
30
31
  super.configure(parent, hdl_path);
32
+ endfunction
33
+
34
+ function void rggen_ral_block::build();
31
35
  if (default_map == null) begin
32
36
  default_map = create_default_map();
33
37
  end
@@ -1,21 +1,21 @@
1
1
  `ifndef __RGGEN_RAL_MACROS_SVH__
2
2
  `define __RGGEN_RAL_MACROS_SVH__
3
3
 
4
- `define rggen_ral_create_field_model(handle, name, width, lsb, access, volatile, reset, has_reset) \
4
+ `define rggen_ral_create_field_model(handle, name, width, lsb, access, volatile, reset, has_reset, hdl_path) \
5
5
  begin \
6
+ string __hdl_path = hdl_path; \
6
7
  handle = new(name); \
7
8
  handle.configure(this.cfg, this, width, lsb, access, volatile, reset, has_reset, 1, 1); \
9
+ if (__hdl_path.len() > 0) begin \
10
+ this.add_hdl_path_slice(__hdl_path, lsb, width); \
11
+ end \
8
12
  end
9
13
 
10
- `define rggen_ral_create_reg_model(handle, base_name, array_index, offset_address, rights, unmapped) \
14
+ `define rggen_ral_create_reg_model(handle, name, array_index, offset_address, rights, unmapped, hdl_path) \
11
15
  begin \
12
- string __instance_name = base_name; \
13
- int __array_index[$] = array_index; \
14
- foreach (__array_index[__i]) begin \
15
- $sformat(__instance_name, "%s[%0d]", __instance_name, __array_index[__i]); \
16
- end \
17
- handle = new(__instance_name); \
18
- handle.configure(this.cfg, this, null, array_index); \
16
+ handle = new(name); \
17
+ handle.configure(this.cfg, this, null, array_index, hdl_path); \
18
+ handle.build(); \
19
19
  default_map.add_reg(handle, offset_address, rights, unmapped); \
20
20
  end
21
21
 
@@ -23,6 +23,7 @@ end
23
23
  begin \
24
24
  handle = new(name); \
25
25
  handle.configure(this.cfg, this, ""); \
26
+ handle.build(); \
26
27
  default_map.add_submap(handle.default_map, offset_address); \
27
28
  end
28
29
 
@@ -61,7 +61,7 @@ function void rggen_ral_map::set_submap_offset(uvm_reg_map submap, uvm_reg_addr_
61
61
  super.set_submap_offset(submap, offset);
62
62
  if ((submap != null) && locked) begin
63
63
  uvm_reg_map root_map = get_root_map();
64
- rggen_ral_map rggen_map;
64
+ rggen_ral_map rggen_map;
65
65
  if ($cast(rggen_map, root_map)) begin
66
66
  rggen_map.Xinit_shadow_reg_address_mapX();
67
67
  end
@@ -84,7 +84,7 @@ endfunction
84
84
 
85
85
  function void rggen_ral_map::Xinit_shadow_reg_address_mapX();
86
86
  uvm_reg_map top_map;
87
- rggen_ral_map top_rggen_map;
87
+ rggen_ral_map top_rggen_map;
88
88
  uvm_reg_map submaps[$];
89
89
  uvm_reg regs[$];
90
90
 
@@ -98,7 +98,7 @@ function void rggen_ral_map::Xinit_shadow_reg_address_mapX();
98
98
 
99
99
  get_submaps(submaps, UVM_NO_HIER);
100
100
  foreach (submaps[i]) begin
101
- rggen_ral_map rggen_map;
101
+ rggen_ral_map rggen_map;
102
102
  if ($cast(rggen_map, submaps[i])) begin
103
103
  rggen_map.Xinit_shadow_reg_address_mapX();
104
104
  end
@@ -13,6 +13,7 @@ class rggen_ral_reg extends uvm_reg;
13
13
  int indexes[$],
14
14
  string hdl_path = ""
15
15
  );
16
+ extern virtual function void build();
16
17
 
17
18
  extern virtual function uvm_reg_frontdoor create_frontdoor();
18
19
 
@@ -36,6 +37,9 @@ function void rggen_ral_reg::configure(
36
37
  end
37
38
  set_cfg(cfg);
38
39
  super.configure(blk_parent, regfile_parent, hdl_path);
40
+ endfunction
41
+
42
+ function void rggen_ral_reg::build();
39
43
  create_fields();
40
44
  endfunction
41
45
 
@@ -0,0 +1,8 @@
1
+ module rggen_bit_field_ro #(
2
+ parameter WIDTH = 1
3
+ )(
4
+ input [WIDTH-1:0] i_value,
5
+ output [WIDTH-1:0] o_value
6
+ );
7
+ assign o_value = i_value;
8
+ endmodule
@@ -0,0 +1,36 @@
1
+ module rggen_bit_field_w0c_w1c #(
2
+ parameter WIDTH = 1,
3
+ parameter INITIAL_VALUE = 1'b0,
4
+ parameter CLEAR_VALUE = 1'b0
5
+ )(
6
+ input clk,
7
+ input rst_n,
8
+ input [WIDTH-1:0] i_set,
9
+ input i_command_valid,
10
+ input i_select,
11
+ input i_write,
12
+ input [WIDTH-1:0] i_write_data,
13
+ input [WIDTH-1:0] i_write_mask,
14
+ output [WIDTH-1:0] o_value
15
+ );
16
+ logic [WIDTH-1:0] value;
17
+ logic write_valid;
18
+
19
+ assign o_value = value;
20
+ assign write_valid = (i_command_valid && i_select && i_write) ? 1'b1 : 1'b0;
21
+ always_ff @(posedge clk or negedge rst_n) begin
22
+ if (!rst_n) begin
23
+ value <= INITIAL_VALUE;
24
+ end
25
+ else begin
26
+ for (int i = 0;i < WIDTH;i++) begin
27
+ if (i_set[i]) begin
28
+ value[i] <= 1'b1;
29
+ end
30
+ else if (write_valid && i_write_mask[i] && (i_write_data[i] == CLEAR_VALUE)) begin
31
+ value[i] <= 1'b0;
32
+ end
33
+ end
34
+ end
35
+ end
36
+ endmodule
@@ -0,0 +1,36 @@
1
+ module rggen_bit_field_w0s_w1s #(
2
+ parameter WIDTH = 1,
3
+ parameter INITIAL_VALUE = 1'b0,
4
+ parameter SET_VALUE = 1'b0
5
+ )(
6
+ input clk,
7
+ input rst_n,
8
+ input [WIDTH-1:0] i_clear,
9
+ input i_command_valid,
10
+ input i_select,
11
+ input i_write,
12
+ input [WIDTH-1:0] i_write_data,
13
+ input [WIDTH-1:0] i_write_mask,
14
+ output [WIDTH-1:0] o_value
15
+ );
16
+ logic [WIDTH-1:0] value;
17
+ logic write_valid;
18
+
19
+ assign o_value = value;
20
+ assign write_valid = (i_command_valid && i_select && i_write) ? 1'b1 : 1'b0;
21
+ always_ff @(posedge clk or negedge rst_n) begin
22
+ if (!rst_n) begin
23
+ value <= INITIAL_VALUE;
24
+ end
25
+ else begin
26
+ for (int i = 0;i < WIDTH;i++) begin
27
+ if (write_valid && i_write_mask[i] && (i_write_data[i] == SET_VALUE)) begin
28
+ value[i] <= 1'b1;
29
+ end
30
+ else if (i_clear[i]) begin
31
+ value[i] <= 1'b0;
32
+ end
33
+ end
34
+ end
35
+ end
36
+ endmodule
@@ -1,6 +1,4 @@
1
1
  module rggen_address_decoder #(
2
- parameter READABLE = 1,
3
- parameter WRITABLE = 1,
4
2
  parameter ADDRESS_WIDTH = 16,
5
3
  parameter START_ADDRESS = 'h00,
6
4
  parameter END_ADDRESS = 'h00,
@@ -14,14 +12,10 @@ module rggen_address_decoder #(
14
12
  input [SHADOW_INDEX_WIDTH-1:0] i_shadow_index,
15
13
  output o_select
16
14
  );
17
- localparam READ_ONLY = (READABLE && (!WRITABLE)) ? 1 : 0;
18
- localparam WRITE_ONLY = (WRITABLE && (!READABLE)) ? 1 : 0;
19
-
20
- logic match;
21
15
  logic match_address;
22
16
  logic match_shadow_index;
23
17
 
24
- assign match = (match_address && match_shadow_index) ? 1'b1 : 1'b0;
18
+ assign o_select = (match_address && match_shadow_index) ? 1'b1 : 1'b0;
25
19
 
26
20
  generate
27
21
  if (START_ADDRESS == END_ADDRESS) begin
@@ -42,16 +36,4 @@ module rggen_address_decoder #(
42
36
  assign match_shadow_index = 1'b1;
43
37
  end
44
38
  endgenerate
45
-
46
- generate
47
- if (READ_ONLY) begin
48
- assign o_select = (match && i_read) ? 1'b1 : 1'b0;
49
- end
50
- else if (WRITE_ONLY) begin
51
- assign o_select = (match && i_write) ? 1'b1 : 1'b0;
52
- end
53
- else begin
54
- assign o_select = match;
55
- end
56
- endgenerate
57
39
  endmodule
@@ -0,0 +1,21 @@
1
+ module rggen_irq_controller #(
2
+ parameter TOTAL_INTERRUPTS = 1
3
+ )(
4
+ input clk,
5
+ input rst_n,
6
+ input [TOTAL_INTERRUPTS-1:0] i_ier,
7
+ input [TOTAL_INTERRUPTS-1:0] i_isr,
8
+ output o_irq
9
+ );
10
+ logic irq;
11
+
12
+ assign o_irq = irq;
13
+ always_ff @(posedge clk or negedge rst_n) begin
14
+ if (!rst_n) begin
15
+ irq <= 1'b0;
16
+ end
17
+ else begin
18
+ irq <= |(i_ier & i_isr);
19
+ end
20
+ end
21
+ endmodule
@@ -1,15 +1,20 @@
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
- ,0x80-0xFF,register_6,,,true,,,,,
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
+ ,0x80-0xFF,register_8,,,TRUE,,,,,,
20
+ ,,,,,,,,,,,
Binary file
Binary file
@@ -11,6 +11,7 @@ module sample_0 (
11
11
  output o_pready,
12
12
  output [31:0] o_prdata,
13
13
  output o_pslverr,
14
+ output o_irq,
14
15
  output [15:0] o_bit_field_0_0,
15
16
  output [15:0] o_bit_field_0_1,
16
17
  output [31:0] o_bit_field_1_0,
@@ -21,15 +22,21 @@ module sample_0 (
21
22
  output [15:0] o_bit_field_4_1[4],
22
23
  input [15:0] i_bit_field_5_0[2][4],
23
24
  output [15:0] o_bit_field_5_1[2][4],
24
- output o_register_6_valid,
25
- output o_register_6_write,
26
- output o_register_6_read,
27
- output [6:0] o_register_6_address,
28
- output [3:0] o_register_6_strobe,
29
- output [31:0] o_register_6_write_data,
30
- input i_register_6_ready,
31
- input [1:0] i_register_6_status,
32
- input [31:0] i_register_6_read_data
25
+ input i_bit_field_6_0_set,
26
+ input i_bit_field_6_1_set,
27
+ output o_bit_field_7_0,
28
+ input i_bit_field_7_0_clear,
29
+ output o_bit_field_7_1,
30
+ input i_bit_field_7_1_clear,
31
+ output o_register_8_valid,
32
+ output o_register_8_write,
33
+ output o_register_8_read,
34
+ output [6:0] o_register_8_address,
35
+ output [3:0] o_register_8_strobe,
36
+ output [31:0] o_register_8_write_data,
37
+ input i_register_8_ready,
38
+ input [1:0] i_register_8_status,
39
+ input [31:0] i_register_8_read_data
33
40
  );
34
41
  logic command_valid;
35
42
  logic write;
@@ -41,11 +48,13 @@ module sample_0 (
41
48
  logic response_ready;
42
49
  logic [31:0] read_data;
43
50
  logic [1:0] status;
44
- logic [16:0] register_select;
45
- logic [31:0] register_read_data[17];
51
+ logic [18:0] register_select;
52
+ logic [31:0] register_read_data[19];
46
53
  logic [0:0] external_register_select;
47
54
  logic [0:0] external_register_ready;
48
55
  logic [1:0] external_register_status[1];
56
+ logic [1:0] ier;
57
+ logic [1:0] isr;
49
58
  logic [15:0] bit_field_0_0_value;
50
59
  logic [15:0] bit_field_0_1_value;
51
60
  logic [31:0] bit_field_1_0_value;
@@ -57,6 +66,10 @@ module sample_0 (
57
66
  logic [32:0] register_5_shadow_index[2][4];
58
67
  logic [15:0] bit_field_5_0_value[2][4];
59
68
  logic [15:0] bit_field_5_1_value[2][4];
69
+ logic bit_field_6_0_value;
70
+ logic bit_field_6_1_value;
71
+ logic bit_field_7_0_value;
72
+ logic bit_field_7_1_value;
60
73
  rggen_host_if_apb #(
61
74
  .DATA_WIDTH (32),
62
75
  .HOST_ADDRESS_WIDTH (16),
@@ -87,7 +100,7 @@ module sample_0 (
87
100
  );
88
101
  rggen_response_mux #(
89
102
  .DATA_WIDTH (32),
90
- .TOTAL_REGISTERS (17),
103
+ .TOTAL_REGISTERS (19),
91
104
  .TOTAL_EXTERNAL_REGISTERS (1)
92
105
  ) u_response_mux (
93
106
  .clk (clk),
@@ -103,9 +116,18 @@ module sample_0 (
103
116
  .i_external_register_ready (external_register_ready),
104
117
  .i_external_register_status (external_register_status)
105
118
  );
119
+ assign ier = {bit_field_2_1_value, bit_field_2_1_value};
120
+ assign isr = {bit_field_6_0_value, bit_field_6_1_value};
121
+ rggen_irq_controller #(
122
+ .TOTAL_INTERRUPTS (2)
123
+ ) u_irq_controller (
124
+ .clk (clk),
125
+ .rst_n (rst_n),
126
+ .i_ier (ier),
127
+ .i_isr (isr),
128
+ .o_irq (o_irq)
129
+ );
106
130
  rggen_address_decoder #(
107
- .READABLE (1),
108
- .WRITABLE (1),
109
131
  .ADDRESS_WIDTH (6),
110
132
  .START_ADDRESS (6'h00),
111
133
  .END_ADDRESS (6'h00),
@@ -149,8 +171,6 @@ module sample_0 (
149
171
  .o_value (bit_field_0_1_value)
150
172
  );
151
173
  rggen_address_decoder #(
152
- .READABLE (1),
153
- .WRITABLE (1),
154
174
  .ADDRESS_WIDTH (6),
155
175
  .START_ADDRESS (6'h01),
156
176
  .END_ADDRESS (6'h01),
@@ -180,8 +200,6 @@ module sample_0 (
180
200
  .o_value (bit_field_1_0_value)
181
201
  );
182
202
  rggen_address_decoder #(
183
- .READABLE (1),
184
- .WRITABLE (1),
185
203
  .ADDRESS_WIDTH (6),
186
204
  .START_ADDRESS (6'h02),
187
205
  .END_ADDRESS (6'h02),
@@ -196,7 +214,12 @@ module sample_0 (
196
214
  .o_select (register_select[2])
197
215
  );
198
216
  assign register_read_data[2] = {15'h0000, bit_field_2_0_value, 15'h0000, bit_field_2_1_value};
199
- assign bit_field_2_0_value = i_bit_field_2_0;
217
+ rggen_bit_field_ro #(
218
+ .WIDTH (1)
219
+ ) u_bit_field_2_0 (
220
+ .i_value (i_bit_field_2_0),
221
+ .o_value (bit_field_2_0_value)
222
+ );
200
223
  assign o_bit_field_2_1 = bit_field_2_1_value;
201
224
  rggen_bit_field_rw #(
202
225
  .WIDTH (1),
@@ -212,8 +235,6 @@ module sample_0 (
212
235
  .o_value (bit_field_2_1_value)
213
236
  );
214
237
  rggen_address_decoder #(
215
- .READABLE (1),
216
- .WRITABLE (0),
217
238
  .ADDRESS_WIDTH (6),
218
239
  .START_ADDRESS (6'h03),
219
240
  .END_ADDRESS (6'h03),
@@ -228,13 +249,16 @@ module sample_0 (
228
249
  .o_select (register_select[3])
229
250
  );
230
251
  assign register_read_data[3] = {bit_field_3_0_value};
231
- assign bit_field_3_0_value = i_bit_field_3_0;
252
+ rggen_bit_field_ro #(
253
+ .WIDTH (32)
254
+ ) u_bit_field_3_0 (
255
+ .i_value (i_bit_field_3_0),
256
+ .o_value (bit_field_3_0_value)
257
+ );
232
258
  generate if (1) begin : g_register_4
233
259
  genvar g_i;
234
260
  for (g_i = 0;g_i < 4;g_i++) begin : g
235
261
  rggen_address_decoder #(
236
- .READABLE (1),
237
- .WRITABLE (1),
238
262
  .ADDRESS_WIDTH (6),
239
263
  .START_ADDRESS (6'h04 + g_i),
240
264
  .END_ADDRESS (6'h04 + g_i),
@@ -249,7 +273,12 @@ module sample_0 (
249
273
  .o_select (register_select[4+g_i])
250
274
  );
251
275
  assign register_read_data[4+g_i] = {bit_field_4_0_value[g_i], bit_field_4_1_value[g_i]};
252
- assign bit_field_4_0_value[g_i] = i_bit_field_4_0[g_i];
276
+ rggen_bit_field_ro #(
277
+ .WIDTH (16)
278
+ ) u_bit_field_4_0 (
279
+ .i_value (i_bit_field_4_0[g_i]),
280
+ .o_value (bit_field_4_0_value[g_i])
281
+ );
253
282
  assign o_bit_field_4_1[g_i] = bit_field_4_1_value[g_i];
254
283
  rggen_bit_field_rw #(
255
284
  .WIDTH (16),
@@ -272,8 +301,6 @@ module sample_0 (
272
301
  for (g_j = 0;g_j < 4;g_j++) begin : g
273
302
  assign register_5_shadow_index[g_i][g_j] = {bit_field_2_1_value, bit_field_0_0_value, bit_field_0_1_value};
274
303
  rggen_address_decoder #(
275
- .READABLE (1),
276
- .WRITABLE (1),
277
304
  .ADDRESS_WIDTH (6),
278
305
  .START_ADDRESS (6'h08),
279
306
  .END_ADDRESS (6'h08),
@@ -288,7 +315,12 @@ module sample_0 (
288
315
  .o_select (register_select[8+4*g_i+g_j])
289
316
  );
290
317
  assign register_read_data[8+4*g_i+g_j] = {bit_field_5_0_value[g_i][g_j], bit_field_5_1_value[g_i][g_j]};
291
- assign bit_field_5_0_value[g_i][g_j] = i_bit_field_5_0[g_i][g_j];
318
+ rggen_bit_field_ro #(
319
+ .WIDTH (16)
320
+ ) u_bit_field_5_0 (
321
+ .i_value (i_bit_field_5_0[g_i][g_j]),
322
+ .o_value (bit_field_5_0_value[g_i][g_j])
323
+ );
292
324
  assign o_bit_field_5_1[g_i][g_j] = bit_field_5_1_value[g_i][g_j];
293
325
  rggen_bit_field_rw #(
294
326
  .WIDTH (16),
@@ -307,11 +339,9 @@ module sample_0 (
307
339
  end
308
340
  end endgenerate
309
341
  rggen_address_decoder #(
310
- .READABLE (1),
311
- .WRITABLE (1),
312
342
  .ADDRESS_WIDTH (6),
313
- .START_ADDRESS (6'h20),
314
- .END_ADDRESS (6'h3f),
343
+ .START_ADDRESS (6'h09),
344
+ .END_ADDRESS (6'h09),
315
345
  .USE_SHADOW_INDEX (0),
316
346
  .SHADOW_INDEX_WIDTH (1),
317
347
  .SHADOW_INDEX_VALUE (1'h0)
@@ -322,33 +352,125 @@ module sample_0 (
322
352
  .i_shadow_index (1'h0),
323
353
  .o_select (register_select[16])
324
354
  );
325
- assign external_register_select[0] = register_select[16];
355
+ assign register_read_data[16] = {23'h000000, bit_field_6_0_value, 7'h00, bit_field_6_1_value};
356
+ rggen_bit_field_w0c_w1c #(
357
+ .WIDTH (1),
358
+ .INITIAL_VALUE (1'h0),
359
+ .CLEAR_VALUE (1'b0)
360
+ ) u_bit_field_6_0 (
361
+ .clk (clk),
362
+ .rst_n (rst_n),
363
+ .i_set (i_bit_field_6_0_set),
364
+ .i_command_valid (command_valid),
365
+ .i_select (register_select[16]),
366
+ .i_write (write),
367
+ .i_write_data (write_data[8]),
368
+ .i_write_mask (write_mask[8]),
369
+ .o_value (bit_field_6_0_value)
370
+ );
371
+ rggen_bit_field_w0c_w1c #(
372
+ .WIDTH (1),
373
+ .INITIAL_VALUE (1'h0),
374
+ .CLEAR_VALUE (1'b1)
375
+ ) u_bit_field_6_1 (
376
+ .clk (clk),
377
+ .rst_n (rst_n),
378
+ .i_set (i_bit_field_6_1_set),
379
+ .i_command_valid (command_valid),
380
+ .i_select (register_select[16]),
381
+ .i_write (write),
382
+ .i_write_data (write_data[0]),
383
+ .i_write_mask (write_mask[0]),
384
+ .o_value (bit_field_6_1_value)
385
+ );
386
+ rggen_address_decoder #(
387
+ .ADDRESS_WIDTH (6),
388
+ .START_ADDRESS (6'h0a),
389
+ .END_ADDRESS (6'h0a),
390
+ .USE_SHADOW_INDEX (0),
391
+ .SHADOW_INDEX_WIDTH (1),
392
+ .SHADOW_INDEX_VALUE (1'h0)
393
+ ) u_register_7_address_decoder (
394
+ .i_read (read),
395
+ .i_write (write),
396
+ .i_address (address[7:2]),
397
+ .i_shadow_index (1'h0),
398
+ .o_select (register_select[17])
399
+ );
400
+ assign register_read_data[17] = {23'h000000, bit_field_7_0_value, 7'h00, bit_field_7_1_value};
401
+ assign o_bit_field_7_0 = bit_field_7_0_value;
402
+ rggen_bit_field_w0s_w1s #(
403
+ .WIDTH (1),
404
+ .INITIAL_VALUE (1'h0),
405
+ .SET_VALUE (1'b0)
406
+ ) u_bit_field_7_0 (
407
+ .clk (clk),
408
+ .rst_n (rst_n),
409
+ .i_clear (i_bit_field_7_0_clear),
410
+ .i_command_valid (command_valid),
411
+ .i_select (register_select[17]),
412
+ .i_write (write),
413
+ .i_write_data (write_data[8]),
414
+ .i_write_mask (write_mask[8]),
415
+ .o_value (bit_field_7_0_value)
416
+ );
417
+ assign o_bit_field_7_1 = bit_field_7_1_value;
418
+ rggen_bit_field_w0s_w1s #(
419
+ .WIDTH (1),
420
+ .INITIAL_VALUE (1'h0),
421
+ .SET_VALUE (1'b1)
422
+ ) u_bit_field_7_1 (
423
+ .clk (clk),
424
+ .rst_n (rst_n),
425
+ .i_clear (i_bit_field_7_1_clear),
426
+ .i_command_valid (command_valid),
427
+ .i_select (register_select[17]),
428
+ .i_write (write),
429
+ .i_write_data (write_data[0]),
430
+ .i_write_mask (write_mask[0]),
431
+ .o_value (bit_field_7_1_value)
432
+ );
433
+ rggen_address_decoder #(
434
+ .ADDRESS_WIDTH (6),
435
+ .START_ADDRESS (6'h20),
436
+ .END_ADDRESS (6'h3f),
437
+ .USE_SHADOW_INDEX (0),
438
+ .SHADOW_INDEX_WIDTH (1),
439
+ .SHADOW_INDEX_VALUE (1'h0)
440
+ ) u_register_8_address_decoder (
441
+ .i_read (read),
442
+ .i_write (write),
443
+ .i_address (address[7:2]),
444
+ .i_shadow_index (1'h0),
445
+ .o_select (register_select[18])
446
+ );
447
+ assign external_register_select[0] = register_select[18];
326
448
  rggen_bus_exporter #(
327
449
  .DATA_WIDTH (32),
328
450
  .LOCAL_ADDRESS_WIDTH (8),
329
451
  .EXTERNAL_ADDRESS_WIDTH (7),
330
452
  .START_ADDRESS (8'h80)
331
- ) u_register_6_bus_exporter (
453
+ ) u_register_8_bus_exporter (
332
454
  .clk (clk),
333
455
  .rst_n (rst_n),
334
456
  .i_valid (command_valid),
335
- .i_select (register_select[16]),
457
+ .i_select (register_select[18]),
336
458
  .i_write (write),
337
459
  .i_read (read),
338
460
  .i_address (address),
339
461
  .i_strobe (strobe),
340
462
  .i_write_data (write_data),
341
463
  .o_ready (external_register_ready[0]),
342
- .o_read_data (register_read_data[16]),
464
+ .o_read_data (register_read_data[18]),
343
465
  .o_status (external_register_status[0]),
344
- .o_valid (o_register_6_valid),
345
- .o_write (o_register_6_write),
346
- .o_read (o_register_6_read),
347
- .o_address (o_register_6_address),
348
- .o_strobe (o_register_6_strobe),
349
- .o_write_data (o_register_6_write_data),
350
- .i_ready (i_register_6_ready),
351
- .i_read_data (i_register_6_read_data),
352
- .i_status (i_register_6_status)
466
+ .o_valid (o_register_8_valid),
467
+ .o_write (o_register_8_write),
468
+ .o_read (o_register_8_read),
469
+ .o_address (o_register_8_address),
470
+ .o_strobe (o_register_8_strobe),
471
+ .o_write_data (o_register_8_write_data),
472
+ .i_ready (i_register_8_ready),
473
+ .i_read_data (i_register_8_read_data),
474
+ .i_status (i_register_8_status)
353
475
  );
354
476
  endmodule