rggen 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
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