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