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.
- checksums.yaml +4 -4
- data/README.md +18 -14
- data/lib/rggen/builder/category.rb +15 -4
- data/lib/rggen/builtins.rb +3 -0
- data/lib/rggen/builtins/bit_field/field_model.rb +6 -2
- data/lib/rggen/builtins/bit_field/reserved.rb +1 -0
- data/lib/rggen/builtins/bit_field/ro.erb +6 -0
- data/lib/rggen/builtins/bit_field/ro.rb +8 -7
- data/lib/rggen/builtins/bit_field/type.rb +14 -0
- data/lib/rggen/builtins/bit_field/w0c_w1c.erb +15 -0
- data/lib/rggen/builtins/bit_field/w0c_w1c.rb +26 -0
- data/lib/rggen/builtins/bit_field/w0s_w1s.erb +15 -0
- data/lib/rggen/builtins/bit_field/w0s_w1s.rb +34 -0
- data/lib/rggen/builtins/register/address_decoder.erb +0 -2
- data/lib/rggen/builtins/register/address_decoder.rb +0 -8
- data/lib/rggen/builtins/register/reg_model.rb +18 -2
- data/lib/rggen/builtins/register/shadow_index_configurator.rb +4 -2
- data/lib/rggen/builtins/register/sub_block_model.rb +1 -1
- data/lib/rggen/builtins/register_block/default_map_creator.rb +1 -1
- data/lib/rggen/builtins/register_block/irq_controller.erb +9 -0
- data/lib/rggen/builtins/register_block/irq_controller.rb +44 -0
- data/lib/rggen/output_base/component.rb +5 -4
- data/lib/rggen/output_base/verilog_utility.rb +4 -0
- data/lib/rggen/version.rb +1 -1
- data/ral/rggen_ral_block.svh +4 -0
- data/ral/rggen_ral_macros.svh +10 -9
- data/ral/rggen_ral_map.svh +3 -3
- data/ral/rggen_ral_reg.svh +4 -0
- data/rtl/bit_field/rggen_bit_field_ro.sv +8 -0
- data/rtl/bit_field/rggen_bit_field_w0c_w1c.sv +36 -0
- data/rtl/bit_field/rggen_bit_field_w0s_w1s.sv +36 -0
- data/rtl/register/rggen_address_decoder.sv +1 -19
- data/rtl/register_block/rggen_irq_controller.sv +21 -0
- data/sample/sample.csv +20 -15
- data/sample/sample.xls +0 -0
- data/sample/sample.xlsx +0 -0
- data/sample/sample_0.sv +167 -45
- data/sample/sample_0_ral_pkg.sv +45 -19
- data/sample/sample_1.sv +12 -8
- data/sample/sample_1_ral_pkg.sv +8 -8
- data/sample/sample_setup.rb +2 -2
- data/setup/default.rb +2 -2
- 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,
|
6
|
+
def initialize(parent, configuration, source)
|
7
7
|
super(parent)
|
8
8
|
define_hierarchical_accessors
|
9
9
|
@configuration = configuration
|
10
|
-
@
|
11
|
-
@need_children =
|
12
|
-
def_delegators(
|
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(', ')}}"
|
data/lib/rggen/version.rb
CHANGED
data/ral/rggen_ral_block.svh
CHANGED
@@ -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
|
data/ral/rggen_ral_macros.svh
CHANGED
@@ -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,
|
14
|
+
`define rggen_ral_create_reg_model(handle, name, array_index, offset_address, rights, unmapped, hdl_path) \
|
11
15
|
begin \
|
12
|
-
|
13
|
-
|
14
|
-
|
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
|
|
data/ral/rggen_ral_map.svh
CHANGED
@@ -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
|
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
|
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
|
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
|
data/ral/rggen_ral_reg.svh
CHANGED
@@ -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,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
|
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
|
data/sample/sample.csv
CHANGED
@@ -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
|
-
,
|
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
|
+
,,,,,,,,,,,
|
data/sample/sample.xls
CHANGED
Binary file
|
data/sample/sample.xlsx
CHANGED
Binary file
|
data/sample/sample_0.sv
CHANGED
@@ -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
|
-
|
25
|
-
|
26
|
-
output
|
27
|
-
|
28
|
-
output
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
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 [
|
45
|
-
logic [31:0] register_read_data[
|
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 (
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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'
|
314
|
-
.END_ADDRESS (6'
|
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
|
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
|
-
)
|
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[
|
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[
|
464
|
+
.o_read_data (register_read_data[18]),
|
343
465
|
.o_status (external_register_status[0]),
|
344
|
-
.o_valid (
|
345
|
-
.o_write (
|
346
|
-
.o_read (
|
347
|
-
.o_address (
|
348
|
-
.o_strobe (
|
349
|
-
.o_write_data (
|
350
|
-
.i_ready (
|
351
|
-
.i_read_data (
|
352
|
-
.i_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
|