[top/earlgrey] Generated codes for PINMUX
As templates and generation script are changed in previous commit, all
related generated codes are re-generated.
diff --git a/hw/top_earlgrey/doc/autogen/top_earlgrey.gen.hjson b/hw/top_earlgrey/doc/autogen/top_earlgrey.gen.hjson
index 100de00..6f3b94c 100644
--- a/hw/top_earlgrey/doc/autogen/top_earlgrey.gen.hjson
+++ b/hw/top_earlgrey/doc/autogen/top_earlgrey.gen.hjson
@@ -393,6 +393,29 @@
interrupt_list: []
scan: "false"
}
+ {
+ name: pinmux
+ type: pinmux
+ clock: main
+ clock_connections:
+ {
+ clk_i: main
+ }
+ reset_connections:
+ {
+ rst_ni: sys
+ }
+ base_addr: 0x40070000
+ generated: "true"
+ size: 0x1000
+ bus_device: tlul
+ bus_host: none
+ available_input_list: []
+ available_output_list: []
+ available_inout_list: []
+ interrupt_list: []
+ scan: "false"
+ }
]
memory:
[
@@ -475,6 +498,7 @@
aes
hmac
rv_plic
+ pinmux
]
dm_sba:
[
@@ -489,6 +513,7 @@
aes
hmac
rv_plic
+ pinmux
]
}
nodes:
@@ -637,6 +662,16 @@
pipeline_byp: "false"
pipeline: "true"
}
+ {
+ name: pinmux
+ type: device
+ clock: main
+ inst_type: pinmux
+ base_addr: 0x40070000
+ size_byte: 0x1000
+ pipeline_byp: "false"
+ pipeline: "true"
+ }
]
clock: main
}
@@ -774,6 +809,7 @@
]
pinmux:
{
+ num_mio: 32
dio_modules:
[
{
@@ -784,10 +820,10 @@
]
}
{
- name: uart.tx
+ name: uart
pad:
[
- ChA[0]
+ ChA[0..1]
]
}
]
@@ -852,9 +888,9 @@
]
}
{
- name: uart_tx
+ name: uart_rx
width: 1
- type: output
+ type: input
pad:
[
{
@@ -863,15 +899,20 @@
}
]
}
- ]
- inputs:
- [
{
- name: uart_rx
+ name: uart_tx
width: 1
- type: input
+ type: output
+ pad:
+ [
+ {
+ name: ChA
+ index: 1
+ }
+ ]
}
]
+ inputs: []
outputs: []
inouts:
[
diff --git a/hw/top_earlgrey/dv/env/chip_reg_block.sv b/hw/top_earlgrey/dv/env/chip_reg_block.sv
index 8a160f0..1b5d72e 100644
--- a/hw/top_earlgrey/dv/env/chip_reg_block.sv
+++ b/hw/top_earlgrey/dv/env/chip_reg_block.sv
@@ -5232,7 +5232,7 @@
p32 = dv_base_reg_field::type_id::create("p32");
p32.configure(
.parent(this),
- .size(1),
+ .size(32),
.lsb_pos(0),
.access("RO"),
.volatile(1),
@@ -5364,8 +5364,8 @@
p44 = dv_base_reg_field::type_id::create("p44");
p44.configure(
.parent(this),
- .size(1),
- .lsb_pos(12),
+ .size(32),
+ .lsb_pos(0),
.access("RO"),
.volatile(1),
.reset(32'h0),
@@ -5375,8 +5375,8 @@
p45 = dv_base_reg_field::type_id::create("p45");
p45.configure(
.parent(this),
- .size(1),
- .lsb_pos(13),
+ .size(32),
+ .lsb_pos(0),
.access("RO"),
.volatile(1),
.reset(32'h0),
@@ -5386,8 +5386,8 @@
p46 = dv_base_reg_field::type_id::create("p46");
p46.configure(
.parent(this),
- .size(1),
- .lsb_pos(14),
+ .size(32),
+ .lsb_pos(0),
.access("RO"),
.volatile(1),
.reset(32'h0),
@@ -5397,8 +5397,8 @@
p47 = dv_base_reg_field::type_id::create("p47");
p47.configure(
.parent(this),
- .size(1),
- .lsb_pos(15),
+ .size(32),
+ .lsb_pos(0),
.access("RO"),
.volatile(1),
.reset(32'h0),
@@ -5419,9 +5419,9 @@
p49 = dv_base_reg_field::type_id::create("p49");
p49.configure(
.parent(this),
- .size(1),
- .lsb_pos(17),
- .access("RO"),
+ .size(3),
+ .lsb_pos(1),
+ .access("RW"),
.volatile(1),
.reset(32'h0),
.has_reset(1),
@@ -5453,8 +5453,8 @@
p52.configure(
.parent(this),
.size(1),
- .lsb_pos(20),
- .access("RO"),
+ .lsb_pos(0),
+ .access("RW"),
.volatile(1),
.reset(32'h0),
.has_reset(1),
@@ -5464,8 +5464,8 @@
p53.configure(
.parent(this),
.size(1),
- .lsb_pos(21),
- .access("RO"),
+ .lsb_pos(1),
+ .access("RW"),
.volatile(1),
.reset(32'h0),
.has_reset(1),
@@ -5475,8 +5475,8 @@
p54.configure(
.parent(this),
.size(1),
- .lsb_pos(22),
- .access("RO"),
+ .lsb_pos(2),
+ .access("RW"),
.volatile(1),
.reset(32'h0),
.has_reset(1),
@@ -6590,8 +6590,8 @@
prio13 = dv_base_reg_field::type_id::create("prio13");
prio13.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(23),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -6620,8 +6620,8 @@
prio14 = dv_base_reg_field::type_id::create("prio14");
prio14.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(24),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -6650,8 +6650,8 @@
prio15 = dv_base_reg_field::type_id::create("prio15");
prio15.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(25),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -6680,8 +6680,8 @@
prio16 = dv_base_reg_field::type_id::create("prio16");
prio16.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(26),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -6710,8 +6710,8 @@
prio17 = dv_base_reg_field::type_id::create("prio17");
prio17.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(27),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -6740,8 +6740,8 @@
prio18 = dv_base_reg_field::type_id::create("prio18");
prio18.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(28),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -6770,8 +6770,8 @@
prio19 = dv_base_reg_field::type_id::create("prio19");
prio19.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(29),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -6800,8 +6800,8 @@
prio20 = dv_base_reg_field::type_id::create("prio20");
prio20.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(30),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -6830,8 +6830,8 @@
prio21 = dv_base_reg_field::type_id::create("prio21");
prio21.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(31),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -6860,7 +6860,7 @@
prio22 = dv_base_reg_field::type_id::create("prio22");
prio22.configure(
.parent(this),
- .size(2),
+ .size(1),
.lsb_pos(0),
.access("RW"),
.volatile(0),
@@ -6890,8 +6890,8 @@
prio23 = dv_base_reg_field::type_id::create("prio23");
prio23.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(1),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -6920,8 +6920,8 @@
prio24 = dv_base_reg_field::type_id::create("prio24");
prio24.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(2),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -6950,8 +6950,8 @@
prio25 = dv_base_reg_field::type_id::create("prio25");
prio25.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(3),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -6980,8 +6980,8 @@
prio26 = dv_base_reg_field::type_id::create("prio26");
prio26.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(4),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -7010,8 +7010,8 @@
prio27 = dv_base_reg_field::type_id::create("prio27");
prio27.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(5),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -7040,8 +7040,8 @@
prio28 = dv_base_reg_field::type_id::create("prio28");
prio28.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(6),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -7070,8 +7070,8 @@
prio29 = dv_base_reg_field::type_id::create("prio29");
prio29.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(7),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -7100,8 +7100,8 @@
prio30 = dv_base_reg_field::type_id::create("prio30");
prio30.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(8),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -7130,8 +7130,8 @@
prio31 = dv_base_reg_field::type_id::create("prio31");
prio31.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(9),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -7160,8 +7160,8 @@
prio32 = dv_base_reg_field::type_id::create("prio32");
prio32.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(10),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -7190,8 +7190,8 @@
prio33 = dv_base_reg_field::type_id::create("prio33");
prio33.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(11),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -7220,8 +7220,8 @@
prio34 = dv_base_reg_field::type_id::create("prio34");
prio34.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(12),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -7250,8 +7250,107 @@
prio35 = dv_base_reg_field::type_id::create("prio35");
prio35.configure(
.parent(this),
- .size(2),
- .lsb_pos(0),
+ .size(1),
+ .lsb_pos(13),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ le46 = dv_base_reg_field::type_id::create("le46");
+ le46.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(14),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ le47 = dv_base_reg_field::type_id::create("le47");
+ le47.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(15),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ le48 = dv_base_reg_field::type_id::create("le48");
+ le48.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(16),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ le49 = dv_base_reg_field::type_id::create("le49");
+ le49.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(17),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ le50 = dv_base_reg_field::type_id::create("le50");
+ le50.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ le51 = dv_base_reg_field::type_id::create("le51");
+ le51.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(19),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ le52 = dv_base_reg_field::type_id::create("le52");
+ le52.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(20),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ le53 = dv_base_reg_field::type_id::create("le53");
+ le53.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(21),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ le54 = dv_base_reg_field::type_id::create("le54");
+ le54.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(22),
.access("RW"),
.volatile(0),
.reset(32'h0),
@@ -8057,6 +8156,560 @@
e16 = dv_base_reg_field::type_id::create("e16");
e16.configure(
.parent(this),
+ .size(2),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : rv_plic_reg_prio45
+
+// Class: rv_plic_reg_prio46
+class rv_plic_reg_prio46 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field prio46;
+
+ `uvm_object_utils(rv_plic_reg_prio46)
+
+ function new(string name = "rv_plic_reg_prio46",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ prio46 = dv_base_reg_field::type_id::create("prio46");
+ prio46.configure(
+ .parent(this),
+ .size(2),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : rv_plic_reg_prio46
+
+// Class: rv_plic_reg_prio47
+class rv_plic_reg_prio47 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field prio47;
+
+ `uvm_object_utils(rv_plic_reg_prio47)
+
+ function new(string name = "rv_plic_reg_prio47",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ prio47 = dv_base_reg_field::type_id::create("prio47");
+ prio47.configure(
+ .parent(this),
+ .size(2),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : rv_plic_reg_prio47
+
+// Class: rv_plic_reg_prio48
+class rv_plic_reg_prio48 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field prio48;
+
+ `uvm_object_utils(rv_plic_reg_prio48)
+
+ function new(string name = "rv_plic_reg_prio48",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ prio48 = dv_base_reg_field::type_id::create("prio48");
+ prio48.configure(
+ .parent(this),
+ .size(2),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : rv_plic_reg_prio48
+
+// Class: rv_plic_reg_prio49
+class rv_plic_reg_prio49 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field prio49;
+
+ `uvm_object_utils(rv_plic_reg_prio49)
+
+ function new(string name = "rv_plic_reg_prio49",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ prio49 = dv_base_reg_field::type_id::create("prio49");
+ prio49.configure(
+ .parent(this),
+ .size(2),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : rv_plic_reg_prio49
+
+// Class: rv_plic_reg_prio50
+class rv_plic_reg_prio50 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field prio50;
+
+ `uvm_object_utils(rv_plic_reg_prio50)
+
+ function new(string name = "rv_plic_reg_prio50",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ prio50 = dv_base_reg_field::type_id::create("prio50");
+ prio50.configure(
+ .parent(this),
+ .size(2),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : rv_plic_reg_prio50
+
+// Class: rv_plic_reg_prio51
+class rv_plic_reg_prio51 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field prio51;
+
+ `uvm_object_utils(rv_plic_reg_prio51)
+
+ function new(string name = "rv_plic_reg_prio51",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ prio51 = dv_base_reg_field::type_id::create("prio51");
+ prio51.configure(
+ .parent(this),
+ .size(2),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : rv_plic_reg_prio51
+
+// Class: rv_plic_reg_prio52
+class rv_plic_reg_prio52 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field prio52;
+
+ `uvm_object_utils(rv_plic_reg_prio52)
+
+ function new(string name = "rv_plic_reg_prio52",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ prio52 = dv_base_reg_field::type_id::create("prio52");
+ prio52.configure(
+ .parent(this),
+ .size(2),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : rv_plic_reg_prio52
+
+// Class: rv_plic_reg_prio53
+class rv_plic_reg_prio53 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field prio53;
+
+ `uvm_object_utils(rv_plic_reg_prio53)
+
+ function new(string name = "rv_plic_reg_prio53",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ prio53 = dv_base_reg_field::type_id::create("prio53");
+ prio53.configure(
+ .parent(this),
+ .size(2),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e25 = dv_base_reg_field::type_id::create("e25");
+ e25.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(25),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e26 = dv_base_reg_field::type_id::create("e26");
+ e26.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(26),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e27 = dv_base_reg_field::type_id::create("e27");
+ e27.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(27),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e28 = dv_base_reg_field::type_id::create("e28");
+ e28.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(28),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e29 = dv_base_reg_field::type_id::create("e29");
+ e29.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(29),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e30 = dv_base_reg_field::type_id::create("e30");
+ e30.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(30),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e31 = dv_base_reg_field::type_id::create("e31");
+ e31.configure(
+ .parent(this),
+ .size(2),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : rv_plic_reg_prio54
+
+// Class: rv_plic_reg_ie00
+class rv_plic_reg_ie00 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field e0;
+ rand dv_base_reg_field e1;
+ rand dv_base_reg_field e2;
+ rand dv_base_reg_field e3;
+ rand dv_base_reg_field e4;
+ rand dv_base_reg_field e5;
+ rand dv_base_reg_field e6;
+ rand dv_base_reg_field e7;
+ rand dv_base_reg_field e8;
+ rand dv_base_reg_field e9;
+ rand dv_base_reg_field e10;
+ rand dv_base_reg_field e11;
+ rand dv_base_reg_field e12;
+ rand dv_base_reg_field e13;
+ rand dv_base_reg_field e14;
+ rand dv_base_reg_field e15;
+ rand dv_base_reg_field e16;
+ rand dv_base_reg_field e17;
+ rand dv_base_reg_field e18;
+ rand dv_base_reg_field e19;
+ rand dv_base_reg_field e20;
+ rand dv_base_reg_field e21;
+ rand dv_base_reg_field e22;
+ rand dv_base_reg_field e23;
+ rand dv_base_reg_field e24;
+ rand dv_base_reg_field e25;
+ rand dv_base_reg_field e26;
+ rand dv_base_reg_field e27;
+ rand dv_base_reg_field e28;
+ rand dv_base_reg_field e29;
+ rand dv_base_reg_field e30;
+ rand dv_base_reg_field e31;
+
+ `uvm_object_utils(rv_plic_reg_ie00)
+
+ function new(string name = "rv_plic_reg_ie00",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ e0 = dv_base_reg_field::type_id::create("e0");
+ e0.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e1 = dv_base_reg_field::type_id::create("e1");
+ e1.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(1),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e2 = dv_base_reg_field::type_id::create("e2");
+ e2.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(2),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e3 = dv_base_reg_field::type_id::create("e3");
+ e3.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(3),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e4 = dv_base_reg_field::type_id::create("e4");
+ e4.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(4),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e5 = dv_base_reg_field::type_id::create("e5");
+ e5.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(5),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e6 = dv_base_reg_field::type_id::create("e6");
+ e6.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e7 = dv_base_reg_field::type_id::create("e7");
+ e7.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(7),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e8 = dv_base_reg_field::type_id::create("e8");
+ e8.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(8),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e9 = dv_base_reg_field::type_id::create("e9");
+ e9.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(9),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e10 = dv_base_reg_field::type_id::create("e10");
+ e10.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(10),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e11 = dv_base_reg_field::type_id::create("e11");
+ e11.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(11),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e12 = dv_base_reg_field::type_id::create("e12");
+ e12.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e13 = dv_base_reg_field::type_id::create("e13");
+ e13.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(13),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e14 = dv_base_reg_field::type_id::create("e14");
+ e14.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(14),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e15 = dv_base_reg_field::type_id::create("e15");
+ e15.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(15),
+ .access("RW"),
+ .volatile(0),
+ .reset(32'h0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ e16 = dv_base_reg_field::type_id::create("e16");
+ e16.configure(
+ .parent(this),
.size(1),
.lsb_pos(16),
.access("RW"),
@@ -8148,84 +8801,7 @@
.size(1),
.lsb_pos(24),
.access("RW"),
- .volatile(0),
- .reset(32'h0),
- .has_reset(1),
- .is_rand(1),
- .individually_accessible(1));
- e25 = dv_base_reg_field::type_id::create("e25");
- e25.configure(
- .parent(this),
- .size(1),
- .lsb_pos(25),
- .access("RW"),
- .volatile(0),
- .reset(32'h0),
- .has_reset(1),
- .is_rand(1),
- .individually_accessible(1));
- e26 = dv_base_reg_field::type_id::create("e26");
- e26.configure(
- .parent(this),
- .size(1),
- .lsb_pos(26),
- .access("RW"),
- .volatile(0),
- .reset(32'h0),
- .has_reset(1),
- .is_rand(1),
- .individually_accessible(1));
- e27 = dv_base_reg_field::type_id::create("e27");
- e27.configure(
- .parent(this),
- .size(1),
- .lsb_pos(27),
- .access("RW"),
- .volatile(0),
- .reset(32'h0),
- .has_reset(1),
- .is_rand(1),
- .individually_accessible(1));
- e28 = dv_base_reg_field::type_id::create("e28");
- e28.configure(
- .parent(this),
- .size(1),
- .lsb_pos(28),
- .access("RW"),
- .volatile(0),
- .reset(32'h0),
- .has_reset(1),
- .is_rand(1),
- .individually_accessible(1));
- e29 = dv_base_reg_field::type_id::create("e29");
- e29.configure(
- .parent(this),
- .size(1),
- .lsb_pos(29),
- .access("RW"),
- .volatile(0),
- .reset(32'h0),
- .has_reset(1),
- .is_rand(1),
- .individually_accessible(1));
- e30 = dv_base_reg_field::type_id::create("e30");
- e30.configure(
- .parent(this),
- .size(1),
- .lsb_pos(30),
- .access("RW"),
- .volatile(0),
- .reset(32'h0),
- .has_reset(1),
- .is_rand(1),
- .individually_accessible(1));
- e31 = dv_base_reg_field::type_id::create("e31");
- e31.configure(
- .parent(this),
- .size(1),
- .lsb_pos(31),
- .access("RW"),
- .volatile(0),
+ .volatile(1),
.reset(32'h0),
.has_reset(1),
.is_rand(1),
@@ -8289,7 +8865,7 @@
.lsb_pos(1),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8300,7 +8876,7 @@
.lsb_pos(2),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8311,7 +8887,7 @@
.lsb_pos(3),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8322,7 +8898,7 @@
.lsb_pos(4),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8333,7 +8909,7 @@
.lsb_pos(5),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8344,7 +8920,7 @@
.lsb_pos(6),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8355,7 +8931,7 @@
.lsb_pos(7),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8366,7 +8942,7 @@
.lsb_pos(8),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8377,7 +8953,7 @@
.lsb_pos(9),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8388,7 +8964,7 @@
.lsb_pos(10),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8399,7 +8975,7 @@
.lsb_pos(11),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8410,7 +8986,7 @@
.lsb_pos(12),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8421,7 +8997,7 @@
.lsb_pos(13),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8432,7 +9008,7 @@
.lsb_pos(14),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8443,7 +9019,7 @@
.lsb_pos(15),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8454,7 +9030,7 @@
.lsb_pos(16),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8465,7 +9041,7 @@
.lsb_pos(17),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8476,7 +9052,7 @@
.lsb_pos(18),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8487,7 +9063,7 @@
.lsb_pos(19),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8498,7 +9074,7 @@
.lsb_pos(20),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8509,7 +9085,7 @@
.lsb_pos(21),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8520,7 +9096,7 @@
.lsb_pos(22),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8550,7 +9126,7 @@
.lsb_pos(0),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8580,7 +9156,7 @@
.lsb_pos(0),
.access("RW"),
.volatile(1),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -8610,7 +9186,7 @@
.lsb_pos(0),
.access("RW"),
.volatile(0),
- .reset(32'h0),
+ .reset(0),
.has_reset(1),
.is_rand(1),
.individually_accessible(1));
@@ -9088,6 +9664,1184 @@
endfunction : build
endclass : rv_plic_reg_block
+// Block: pinmux
+// Class: pinmux_reg_regen
+class pinmux_reg_regen extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field regen;
+
+ `uvm_object_utils(pinmux_reg_regen)
+
+ function new(string name = "pinmux_reg_regen",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ regen = dv_base_reg_field::type_id::create("regen");
+ regen.configure(
+ .parent(this),
+ .size(1),
+ .lsb_pos(0),
+ .access("W0C"),
+ .volatile(1),
+ .reset(1),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_regen
+
+// Class: pinmux_reg_periph_insel0
+class pinmux_reg_periph_insel0 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field in0;
+ rand dv_base_reg_field in1;
+ rand dv_base_reg_field in2;
+ rand dv_base_reg_field in3;
+ rand dv_base_reg_field in4;
+
+ `uvm_object_utils(pinmux_reg_periph_insel0)
+
+ function new(string name = "pinmux_reg_periph_insel0",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ in0 = dv_base_reg_field::type_id::create("in0");
+ in0.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in1 = dv_base_reg_field::type_id::create("in1");
+ in1.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in2 = dv_base_reg_field::type_id::create("in2");
+ in2.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in3 = dv_base_reg_field::type_id::create("in3");
+ in3.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in4 = dv_base_reg_field::type_id::create("in4");
+ in4.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(24),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_periph_insel0
+
+// Class: pinmux_reg_periph_insel1
+class pinmux_reg_periph_insel1 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field in5;
+ rand dv_base_reg_field in6;
+ rand dv_base_reg_field in7;
+ rand dv_base_reg_field in8;
+ rand dv_base_reg_field in9;
+
+ `uvm_object_utils(pinmux_reg_periph_insel1)
+
+ function new(string name = "pinmux_reg_periph_insel1",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ in5 = dv_base_reg_field::type_id::create("in5");
+ in5.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in6 = dv_base_reg_field::type_id::create("in6");
+ in6.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in7 = dv_base_reg_field::type_id::create("in7");
+ in7.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in8 = dv_base_reg_field::type_id::create("in8");
+ in8.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in9 = dv_base_reg_field::type_id::create("in9");
+ in9.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(24),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_periph_insel1
+
+// Class: pinmux_reg_periph_insel2
+class pinmux_reg_periph_insel2 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field in10;
+ rand dv_base_reg_field in11;
+ rand dv_base_reg_field in12;
+ rand dv_base_reg_field in13;
+ rand dv_base_reg_field in14;
+
+ `uvm_object_utils(pinmux_reg_periph_insel2)
+
+ function new(string name = "pinmux_reg_periph_insel2",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ in10 = dv_base_reg_field::type_id::create("in10");
+ in10.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in11 = dv_base_reg_field::type_id::create("in11");
+ in11.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in12 = dv_base_reg_field::type_id::create("in12");
+ in12.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in13 = dv_base_reg_field::type_id::create("in13");
+ in13.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in14 = dv_base_reg_field::type_id::create("in14");
+ in14.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(24),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_periph_insel2
+
+// Class: pinmux_reg_periph_insel3
+class pinmux_reg_periph_insel3 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field in15;
+ rand dv_base_reg_field in16;
+ rand dv_base_reg_field in17;
+ rand dv_base_reg_field in18;
+ rand dv_base_reg_field in19;
+
+ `uvm_object_utils(pinmux_reg_periph_insel3)
+
+ function new(string name = "pinmux_reg_periph_insel3",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ in15 = dv_base_reg_field::type_id::create("in15");
+ in15.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in16 = dv_base_reg_field::type_id::create("in16");
+ in16.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in17 = dv_base_reg_field::type_id::create("in17");
+ in17.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in18 = dv_base_reg_field::type_id::create("in18");
+ in18.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in19 = dv_base_reg_field::type_id::create("in19");
+ in19.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(24),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_periph_insel3
+
+// Class: pinmux_reg_periph_insel4
+class pinmux_reg_periph_insel4 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field in20;
+ rand dv_base_reg_field in21;
+ rand dv_base_reg_field in22;
+ rand dv_base_reg_field in23;
+ rand dv_base_reg_field in24;
+
+ `uvm_object_utils(pinmux_reg_periph_insel4)
+
+ function new(string name = "pinmux_reg_periph_insel4",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ in20 = dv_base_reg_field::type_id::create("in20");
+ in20.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in21 = dv_base_reg_field::type_id::create("in21");
+ in21.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in22 = dv_base_reg_field::type_id::create("in22");
+ in22.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in23 = dv_base_reg_field::type_id::create("in23");
+ in23.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in24 = dv_base_reg_field::type_id::create("in24");
+ in24.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(24),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_periph_insel4
+
+// Class: pinmux_reg_periph_insel5
+class pinmux_reg_periph_insel5 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field in25;
+ rand dv_base_reg_field in26;
+ rand dv_base_reg_field in27;
+ rand dv_base_reg_field in28;
+ rand dv_base_reg_field in29;
+
+ `uvm_object_utils(pinmux_reg_periph_insel5)
+
+ function new(string name = "pinmux_reg_periph_insel5",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ in25 = dv_base_reg_field::type_id::create("in25");
+ in25.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in26 = dv_base_reg_field::type_id::create("in26");
+ in26.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in27 = dv_base_reg_field::type_id::create("in27");
+ in27.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in28 = dv_base_reg_field::type_id::create("in28");
+ in28.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in29 = dv_base_reg_field::type_id::create("in29");
+ in29.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(24),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_periph_insel5
+
+// Class: pinmux_reg_periph_insel6
+class pinmux_reg_periph_insel6 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field in30;
+ rand dv_base_reg_field in31;
+
+ `uvm_object_utils(pinmux_reg_periph_insel6)
+
+ function new(string name = "pinmux_reg_periph_insel6",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ in30 = dv_base_reg_field::type_id::create("in30");
+ in30.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ in31 = dv_base_reg_field::type_id::create("in31");
+ in31.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(0),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_periph_insel6
+
+// Class: pinmux_reg_mio_outsel0
+class pinmux_reg_mio_outsel0 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field out0;
+ rand dv_base_reg_field out1;
+ rand dv_base_reg_field out2;
+ rand dv_base_reg_field out3;
+ rand dv_base_reg_field out4;
+
+ `uvm_object_utils(pinmux_reg_mio_outsel0)
+
+ function new(string name = "pinmux_reg_mio_outsel0",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ out0 = dv_base_reg_field::type_id::create("out0");
+ out0.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out1 = dv_base_reg_field::type_id::create("out1");
+ out1.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out2 = dv_base_reg_field::type_id::create("out2");
+ out2.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out3 = dv_base_reg_field::type_id::create("out3");
+ out3.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out4 = dv_base_reg_field::type_id::create("out4");
+ out4.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(24),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_mio_outsel0
+
+// Class: pinmux_reg_mio_outsel1
+class pinmux_reg_mio_outsel1 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field out5;
+ rand dv_base_reg_field out6;
+ rand dv_base_reg_field out7;
+ rand dv_base_reg_field out8;
+ rand dv_base_reg_field out9;
+
+ `uvm_object_utils(pinmux_reg_mio_outsel1)
+
+ function new(string name = "pinmux_reg_mio_outsel1",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ out5 = dv_base_reg_field::type_id::create("out5");
+ out5.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out6 = dv_base_reg_field::type_id::create("out6");
+ out6.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out7 = dv_base_reg_field::type_id::create("out7");
+ out7.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out8 = dv_base_reg_field::type_id::create("out8");
+ out8.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out9 = dv_base_reg_field::type_id::create("out9");
+ out9.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(24),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_mio_outsel1
+
+// Class: pinmux_reg_mio_outsel2
+class pinmux_reg_mio_outsel2 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field out10;
+ rand dv_base_reg_field out11;
+ rand dv_base_reg_field out12;
+ rand dv_base_reg_field out13;
+ rand dv_base_reg_field out14;
+
+ `uvm_object_utils(pinmux_reg_mio_outsel2)
+
+ function new(string name = "pinmux_reg_mio_outsel2",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ out10 = dv_base_reg_field::type_id::create("out10");
+ out10.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out11 = dv_base_reg_field::type_id::create("out11");
+ out11.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out12 = dv_base_reg_field::type_id::create("out12");
+ out12.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out13 = dv_base_reg_field::type_id::create("out13");
+ out13.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out14 = dv_base_reg_field::type_id::create("out14");
+ out14.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(24),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_mio_outsel2
+
+// Class: pinmux_reg_mio_outsel3
+class pinmux_reg_mio_outsel3 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field out15;
+ rand dv_base_reg_field out16;
+ rand dv_base_reg_field out17;
+ rand dv_base_reg_field out18;
+ rand dv_base_reg_field out19;
+
+ `uvm_object_utils(pinmux_reg_mio_outsel3)
+
+ function new(string name = "pinmux_reg_mio_outsel3",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ out15 = dv_base_reg_field::type_id::create("out15");
+ out15.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out16 = dv_base_reg_field::type_id::create("out16");
+ out16.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out17 = dv_base_reg_field::type_id::create("out17");
+ out17.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out18 = dv_base_reg_field::type_id::create("out18");
+ out18.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out19 = dv_base_reg_field::type_id::create("out19");
+ out19.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(24),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_mio_outsel3
+
+// Class: pinmux_reg_mio_outsel4
+class pinmux_reg_mio_outsel4 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field out20;
+ rand dv_base_reg_field out21;
+ rand dv_base_reg_field out22;
+ rand dv_base_reg_field out23;
+ rand dv_base_reg_field out24;
+
+ `uvm_object_utils(pinmux_reg_mio_outsel4)
+
+ function new(string name = "pinmux_reg_mio_outsel4",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ out20 = dv_base_reg_field::type_id::create("out20");
+ out20.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out21 = dv_base_reg_field::type_id::create("out21");
+ out21.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out22 = dv_base_reg_field::type_id::create("out22");
+ out22.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out23 = dv_base_reg_field::type_id::create("out23");
+ out23.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out24 = dv_base_reg_field::type_id::create("out24");
+ out24.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(24),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_mio_outsel4
+
+// Class: pinmux_reg_mio_outsel5
+class pinmux_reg_mio_outsel5 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field out25;
+ rand dv_base_reg_field out26;
+ rand dv_base_reg_field out27;
+ rand dv_base_reg_field out28;
+ rand dv_base_reg_field out29;
+
+ `uvm_object_utils(pinmux_reg_mio_outsel5)
+
+ function new(string name = "pinmux_reg_mio_outsel5",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ out25 = dv_base_reg_field::type_id::create("out25");
+ out25.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out26 = dv_base_reg_field::type_id::create("out26");
+ out26.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out27 = dv_base_reg_field::type_id::create("out27");
+ out27.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(12),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out28 = dv_base_reg_field::type_id::create("out28");
+ out28.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(18),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out29 = dv_base_reg_field::type_id::create("out29");
+ out29.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(24),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_mio_outsel5
+
+// Class: pinmux_reg_mio_outsel6
+class pinmux_reg_mio_outsel6 extends dv_base_reg;
+ // fields
+ rand dv_base_reg_field out30;
+ rand dv_base_reg_field out31;
+
+ `uvm_object_utils(pinmux_reg_mio_outsel6)
+
+ function new(string name = "pinmux_reg_mio_outsel6",
+ int unsigned n_bits = 32,
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, n_bits, has_coverage);
+ endfunction : new
+
+ virtual function void build();
+ // create fields
+ out30 = dv_base_reg_field::type_id::create("out30");
+ out30.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(0),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ out31 = dv_base_reg_field::type_id::create("out31");
+ out31.configure(
+ .parent(this),
+ .size(6),
+ .lsb_pos(6),
+ .access("RW"),
+ .volatile(0),
+ .reset(2),
+ .has_reset(1),
+ .is_rand(1),
+ .individually_accessible(1));
+ endfunction : build
+
+endclass : pinmux_reg_mio_outsel6
+
+// Class: pinmux_reg_block
+class pinmux_reg_block extends dv_base_reg_block;
+ // registers
+ rand pinmux_reg_regen regen;
+ rand pinmux_reg_periph_insel0 periph_insel0;
+ rand pinmux_reg_periph_insel1 periph_insel1;
+ rand pinmux_reg_periph_insel2 periph_insel2;
+ rand pinmux_reg_periph_insel3 periph_insel3;
+ rand pinmux_reg_periph_insel4 periph_insel4;
+ rand pinmux_reg_periph_insel5 periph_insel5;
+ rand pinmux_reg_periph_insel6 periph_insel6;
+ rand pinmux_reg_mio_outsel0 mio_outsel0;
+ rand pinmux_reg_mio_outsel1 mio_outsel1;
+ rand pinmux_reg_mio_outsel2 mio_outsel2;
+ rand pinmux_reg_mio_outsel3 mio_outsel3;
+ rand pinmux_reg_mio_outsel4 mio_outsel4;
+ rand pinmux_reg_mio_outsel5 mio_outsel5;
+ rand pinmux_reg_mio_outsel6 mio_outsel6;
+
+ `uvm_object_utils(pinmux_reg_block)
+
+ function new(string name = "pinmux_reg_block",
+ int has_coverage = UVM_NO_COVERAGE);
+ super.new(name, has_coverage);
+ endfunction : new
+
+ virtual function void build(uvm_reg_addr_t base_addr);
+ // create default map
+ this.default_map = create_map(.name("default_map"),
+ .base_addr(base_addr),
+ .n_bytes(4),
+ .endian(UVM_LITTLE_ENDIAN));
+
+ // create registers
+ regen = pinmux_reg_regen::type_id::create("regen");
+ regen.configure(.blk_parent(this));
+ regen.build();
+ default_map.add_reg(.rg(regen),
+ .offset(32'h0),
+ .rights("RW"));
+ periph_insel0 = pinmux_reg_periph_insel0::type_id::create("periph_insel0");
+ periph_insel0.configure(.blk_parent(this));
+ periph_insel0.build();
+ default_map.add_reg(.rg(periph_insel0),
+ .offset(32'h4),
+ .rights("RW"));
+ periph_insel1 = pinmux_reg_periph_insel1::type_id::create("periph_insel1");
+ periph_insel1.configure(.blk_parent(this));
+ periph_insel1.build();
+ default_map.add_reg(.rg(periph_insel1),
+ .offset(32'h8),
+ .rights("RW"));
+ periph_insel2 = pinmux_reg_periph_insel2::type_id::create("periph_insel2");
+ periph_insel2.configure(.blk_parent(this));
+ periph_insel2.build();
+ default_map.add_reg(.rg(periph_insel2),
+ .offset(32'hc),
+ .rights("RW"));
+ periph_insel3 = pinmux_reg_periph_insel3::type_id::create("periph_insel3");
+ periph_insel3.configure(.blk_parent(this));
+ periph_insel3.build();
+ default_map.add_reg(.rg(periph_insel3),
+ .offset(32'h10),
+ .rights("RW"));
+ periph_insel4 = pinmux_reg_periph_insel4::type_id::create("periph_insel4");
+ periph_insel4.configure(.blk_parent(this));
+ periph_insel4.build();
+ default_map.add_reg(.rg(periph_insel4),
+ .offset(32'h14),
+ .rights("RW"));
+ periph_insel5 = pinmux_reg_periph_insel5::type_id::create("periph_insel5");
+ periph_insel5.configure(.blk_parent(this));
+ periph_insel5.build();
+ default_map.add_reg(.rg(periph_insel5),
+ .offset(32'h18),
+ .rights("RW"));
+ periph_insel6 = pinmux_reg_periph_insel6::type_id::create("periph_insel6");
+ periph_insel6.configure(.blk_parent(this));
+ periph_insel6.build();
+ default_map.add_reg(.rg(periph_insel6),
+ .offset(32'h1c),
+ .rights("RW"));
+ mio_outsel0 = pinmux_reg_mio_outsel0::type_id::create("mio_outsel0");
+ mio_outsel0.configure(.blk_parent(this));
+ mio_outsel0.build();
+ default_map.add_reg(.rg(mio_outsel0),
+ .offset(32'h20),
+ .rights("RW"));
+ mio_outsel1 = pinmux_reg_mio_outsel1::type_id::create("mio_outsel1");
+ mio_outsel1.configure(.blk_parent(this));
+ mio_outsel1.build();
+ default_map.add_reg(.rg(mio_outsel1),
+ .offset(32'h24),
+ .rights("RW"));
+ mio_outsel2 = pinmux_reg_mio_outsel2::type_id::create("mio_outsel2");
+ mio_outsel2.configure(.blk_parent(this));
+ mio_outsel2.build();
+ default_map.add_reg(.rg(mio_outsel2),
+ .offset(32'h28),
+ .rights("RW"));
+ mio_outsel3 = pinmux_reg_mio_outsel3::type_id::create("mio_outsel3");
+ mio_outsel3.configure(.blk_parent(this));
+ mio_outsel3.build();
+ default_map.add_reg(.rg(mio_outsel3),
+ .offset(32'h2c),
+ .rights("RW"));
+ threshold0 = rv_plic_reg_threshold0::type_id::create("threshold0");
+ threshold0.configure(.blk_parent(this));
+ threshold0.build();
+ default_map.add_reg(.rg(threshold0),
+ .offset(32'h108),
+ .rights("RW"));
+ cc0 = rv_plic_reg_cc0::type_id::create("cc0");
+ cc0.configure(.blk_parent(this));
+ cc0.build();
+ default_map.add_reg(.rg(cc0),
+ .offset(32'h10c),
+ .rights("RW"));
+ msip0 = rv_plic_reg_msip0::type_id::create("msip0");
+ msip0.configure(.blk_parent(this));
+ msip0.build();
+ default_map.add_reg(.rg(msip0),
+ .offset(32'h110),
+ .rights("RW"));
+ endfunction : build
+
+endclass : rv_plic_reg_block
`endif
@@ -11193,6 +12947,7 @@
rand spi_device_reg_block spi_device;
rand flash_ctrl_reg_block flash_ctrl;
rand rv_timer_reg_block rv_timer;
+ rand aes_reg_block aes;
rand rv_plic_reg_block rv_plic;
rand aes_reg_block aes;
rand hmac_reg_block hmac;
@@ -11241,6 +12996,11 @@
rv_timer.build(.base_addr(base_addr + 32'h40080000));
default_map.add_submap(.child_map(rv_timer.default_map),
.offset(base_addr + 32'h40080000));
+ aes = aes_reg_block::type_id::create("aes");
+ aes.configure(.parent(this));
+ aes.build(.base_addr(base_addr + 32'h40110000));
+ default_map.add_submap(.child_map(aes.default_map),
+ .offset(base_addr + 32'h40110000));
rv_plic = rv_plic_reg_block::type_id::create("rv_plic");
rv_plic.configure(.parent(this));
rv_plic.build(.base_addr(base_addr + 32'h40090000));
diff --git a/hw/top_earlgrey/ip/pinmux/data/autogen/pinmux.hjson b/hw/top_earlgrey/ip/pinmux/data/autogen/pinmux.hjson
new file mode 100644
index 0000000..1669106
--- /dev/null
+++ b/hw/top_earlgrey/ip/pinmux/data/autogen/pinmux.hjson
@@ -0,0 +1,103 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// ------------------- W A R N I N G: A U T O - G E N E R A T E D C O D E !! -------------------//
+// PLEASE DO NOT HAND-EDIT THIS FILE. IT HAS BEEN AUTO-GENERATED WITH THE FOLLOWING COMMAND:
+// util/topgen.py -t hw/top_earlgrey/doc/top_earlgrey.hjson -o hw/top_earlgrey/
+
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+# PINMUX register template
+#
+# Parameter (given by python tool)
+# - n_periph_in: Number of peripheral inputs
+# - n_periph_out: Number of peripheral outputs
+# - n_mio_pads: Number of muxed IO pads
+#
+{
+ name: "PINMUX",
+ clock_primary: "clk_i",
+ bus_device: "tlul",
+ regwidth: "32",
+ param_list: [
+ { name: "NPeriphIn",
+ desc: "Number of peripheral inputs",
+ type: "int",
+ default: "32",
+ local: "true"
+ },
+ { name: "NPeriphOut",
+ desc: "Number of peripheral outputs",
+ type: "int",
+ default: "32",
+ local: "true"
+ },
+ { name: "NMioPads",
+ desc: "Number of muxed IO pads",
+ type: "int",
+ default: "32",
+ local: "true"
+ },
+ ],
+ registers: [
+ { name: "REGEN",
+ desc: '''
+ Register write enable for all control registers.
+ ''',
+ swaccess: "rw0c",
+ hwaccess: "none",
+ fields: [
+ {
+ bits: "0",
+ desc: ''' When true, all configuration registers can be modified.
+ When false, they become read-only. Defaults true, write zero to clear.
+ '''
+ resval: 1,
+ },
+ ]
+ },
+# inputs
+ { multireg: { name: "PERIPH_INSEL",
+ desc: "Mux select for peripheral inputs.",
+ count: "NPeriphIn",
+ swaccess: "rw",
+ hwaccess: "hro",
+ regwen: "REGEN",
+ cname: "IN",
+ fields: [
+ { bits: "5:0",
+ name: "IN",
+ desc: '''
+ 0: tie constantly to zero, 1: tie constantly to 1.
+ >=2: MIO pads (i.e., add 2 to the native MIO pad index).
+ '''
+ resval: 0
+ }
+ ]
+ }
+ },
+# outputs
+ { multireg: { name: "MIO_OUTSEL",
+ desc: "Mux select for MIO outputs.",
+ count: "NMioPads",
+ swaccess: "rw",
+ hwaccess: "hro",
+ regwen: "REGEN",
+ cname: "OUT",
+ fields: [
+ { bits: "5:0",
+ name: "OUT",
+ desc: '''
+ 0: tie constantly to zero, 1: tie constantly to 1. 2: high-Z
+ >=3: peripheral outputs (i.e., add 3 to the native peripheral pad index).
+ '''
+ resval: 2
+ }
+ ]
+ }
+ },
+ ],
+}
diff --git a/hw/top_earlgrey/ip/pinmux/rtl/autogen/pinmux_reg_pkg.sv b/hw/top_earlgrey/ip/pinmux/rtl/autogen/pinmux_reg_pkg.sv
new file mode 100644
index 0000000..1357aaa
--- /dev/null
+++ b/hw/top_earlgrey/ip/pinmux/rtl/autogen/pinmux_reg_pkg.sv
@@ -0,0 +1,96 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// Register Package auto-generated by `reggen` containing data structure
+
+package pinmux_reg_pkg;
+
+ // Param list
+ localparam int NPeriphIn = 32;
+ localparam int NPeriphOut = 32;
+ localparam int NMioPads = 32;
+
+/////////////////////////////////////////////////////////////////////
+// Typedefs for multiregs
+/////////////////////////////////////////////////////////////////////
+
+typedef struct packed {
+ logic [5:0] q;
+} pinmux_reg2hw_periph_insel_mreg_t;
+typedef struct packed {
+ logic [5:0] q;
+} pinmux_reg2hw_mio_outsel_mreg_t;
+
+
+/////////////////////////////////////////////////////////////////////
+// Register to internal design logic
+/////////////////////////////////////////////////////////////////////
+
+typedef struct packed {
+ pinmux_reg2hw_periph_insel_mreg_t [31:0] periph_insel; // [383:192]
+ pinmux_reg2hw_mio_outsel_mreg_t [31:0] mio_outsel; // [191:0]
+} pinmux_reg2hw_t;
+
+/////////////////////////////////////////////////////////////////////
+// Internal design logic to register
+/////////////////////////////////////////////////////////////////////
+
+
+ // Register Address
+ parameter PINMUX_REGEN_OFFSET = 6'h 0;
+ parameter PINMUX_PERIPH_INSEL0_OFFSET = 6'h 4;
+ parameter PINMUX_PERIPH_INSEL1_OFFSET = 6'h 8;
+ parameter PINMUX_PERIPH_INSEL2_OFFSET = 6'h c;
+ parameter PINMUX_PERIPH_INSEL3_OFFSET = 6'h 10;
+ parameter PINMUX_PERIPH_INSEL4_OFFSET = 6'h 14;
+ parameter PINMUX_PERIPH_INSEL5_OFFSET = 6'h 18;
+ parameter PINMUX_PERIPH_INSEL6_OFFSET = 6'h 1c;
+ parameter PINMUX_MIO_OUTSEL0_OFFSET = 6'h 20;
+ parameter PINMUX_MIO_OUTSEL1_OFFSET = 6'h 24;
+ parameter PINMUX_MIO_OUTSEL2_OFFSET = 6'h 28;
+ parameter PINMUX_MIO_OUTSEL3_OFFSET = 6'h 2c;
+ parameter PINMUX_MIO_OUTSEL4_OFFSET = 6'h 30;
+ parameter PINMUX_MIO_OUTSEL5_OFFSET = 6'h 34;
+ parameter PINMUX_MIO_OUTSEL6_OFFSET = 6'h 38;
+
+
+ // Register Index
+ typedef enum int {
+ PINMUX_REGEN,
+ PINMUX_PERIPH_INSEL0,
+ PINMUX_PERIPH_INSEL1,
+ PINMUX_PERIPH_INSEL2,
+ PINMUX_PERIPH_INSEL3,
+ PINMUX_PERIPH_INSEL4,
+ PINMUX_PERIPH_INSEL5,
+ PINMUX_PERIPH_INSEL6,
+ PINMUX_MIO_OUTSEL0,
+ PINMUX_MIO_OUTSEL1,
+ PINMUX_MIO_OUTSEL2,
+ PINMUX_MIO_OUTSEL3,
+ PINMUX_MIO_OUTSEL4,
+ PINMUX_MIO_OUTSEL5,
+ PINMUX_MIO_OUTSEL6
+ } pinmux_id_e;
+
+ // Register width information to check illegal writes
+ localparam logic [3:0] PINMUX_PERMIT [15] = '{
+ 4'b 0001, // index[ 0] PINMUX_REGEN
+ 4'b 1111, // index[ 1] PINMUX_PERIPH_INSEL0
+ 4'b 1111, // index[ 2] PINMUX_PERIPH_INSEL1
+ 4'b 1111, // index[ 3] PINMUX_PERIPH_INSEL2
+ 4'b 1111, // index[ 4] PINMUX_PERIPH_INSEL3
+ 4'b 1111, // index[ 5] PINMUX_PERIPH_INSEL4
+ 4'b 1111, // index[ 6] PINMUX_PERIPH_INSEL5
+ 4'b 0011, // index[ 7] PINMUX_PERIPH_INSEL6
+ 4'b 1111, // index[ 8] PINMUX_MIO_OUTSEL0
+ 4'b 1111, // index[ 9] PINMUX_MIO_OUTSEL1
+ 4'b 1111, // index[10] PINMUX_MIO_OUTSEL2
+ 4'b 1111, // index[11] PINMUX_MIO_OUTSEL3
+ 4'b 1111, // index[12] PINMUX_MIO_OUTSEL4
+ 4'b 1111, // index[13] PINMUX_MIO_OUTSEL5
+ 4'b 0011 // index[14] PINMUX_MIO_OUTSEL6
+ };
+endpackage
+
diff --git a/hw/top_earlgrey/ip/pinmux/rtl/autogen/pinmux_reg_top.sv b/hw/top_earlgrey/ip/pinmux/rtl/autogen/pinmux_reg_top.sv
new file mode 100644
index 0000000..4cd0466
--- /dev/null
+++ b/hw/top_earlgrey/ip/pinmux/rtl/autogen/pinmux_reg_top.sv
@@ -0,0 +1,2374 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+//
+// Register Top module auto-generated by `reggen`
+
+module pinmux_reg_top (
+ input clk_i,
+ input rst_ni,
+
+ // Below Regster interface can be changed
+ input tlul_pkg::tl_h2d_t tl_i,
+ output tlul_pkg::tl_d2h_t tl_o,
+ // To HW
+ output pinmux_reg_pkg::pinmux_reg2hw_t reg2hw, // Write
+
+ // Config
+ input devmode_i // If 1, explicit error return for unmapped register access
+);
+
+ import pinmux_reg_pkg::* ;
+
+ localparam AW = 6;
+ localparam DW = 32;
+ localparam DBW = DW/8; // Byte Width
+
+ // register signals
+ logic reg_we;
+ logic reg_re;
+ logic [AW-1:0] reg_addr;
+ logic [DW-1:0] reg_wdata;
+ logic [DBW-1:0] reg_be;
+ logic [DW-1:0] reg_rdata;
+ logic reg_error;
+
+ logic addrmiss, wr_err;
+
+ logic [DW-1:0] reg_rdata_next;
+
+ tlul_pkg::tl_h2d_t tl_reg_h2d;
+ tlul_pkg::tl_d2h_t tl_reg_d2h;
+
+ assign tl_reg_h2d = tl_i;
+ assign tl_o = tl_reg_d2h;
+
+ tlul_adapter_reg #(
+ .RegAw(AW),
+ .RegDw(DW)
+ ) u_reg_if (
+ .clk_i,
+ .rst_ni,
+
+ .tl_i (tl_reg_h2d),
+ .tl_o (tl_reg_d2h),
+
+ .we_o (reg_we),
+ .re_o (reg_re),
+ .addr_o (reg_addr),
+ .wdata_o (reg_wdata),
+ .be_o (reg_be),
+ .rdata_i (reg_rdata),
+ .error_i (reg_error)
+ );
+
+ assign reg_rdata = reg_rdata_next ;
+ assign reg_error = (devmode_i & addrmiss) | wr_err ;
+
+ // Define SW related signals
+ // Format: <reg>_<field>_{wd|we|qs}
+ // or <reg>_{wd|we|qs} if field == 1 or 0
+ logic regen_qs;
+ logic regen_wd;
+ logic regen_we;
+ logic [5:0] periph_insel0_in0_qs;
+ logic [5:0] periph_insel0_in0_wd;
+ logic periph_insel0_in0_we;
+ logic [5:0] periph_insel0_in1_qs;
+ logic [5:0] periph_insel0_in1_wd;
+ logic periph_insel0_in1_we;
+ logic [5:0] periph_insel0_in2_qs;
+ logic [5:0] periph_insel0_in2_wd;
+ logic periph_insel0_in2_we;
+ logic [5:0] periph_insel0_in3_qs;
+ logic [5:0] periph_insel0_in3_wd;
+ logic periph_insel0_in3_we;
+ logic [5:0] periph_insel0_in4_qs;
+ logic [5:0] periph_insel0_in4_wd;
+ logic periph_insel0_in4_we;
+ logic [5:0] periph_insel1_in5_qs;
+ logic [5:0] periph_insel1_in5_wd;
+ logic periph_insel1_in5_we;
+ logic [5:0] periph_insel1_in6_qs;
+ logic [5:0] periph_insel1_in6_wd;
+ logic periph_insel1_in6_we;
+ logic [5:0] periph_insel1_in7_qs;
+ logic [5:0] periph_insel1_in7_wd;
+ logic periph_insel1_in7_we;
+ logic [5:0] periph_insel1_in8_qs;
+ logic [5:0] periph_insel1_in8_wd;
+ logic periph_insel1_in8_we;
+ logic [5:0] periph_insel1_in9_qs;
+ logic [5:0] periph_insel1_in9_wd;
+ logic periph_insel1_in9_we;
+ logic [5:0] periph_insel2_in10_qs;
+ logic [5:0] periph_insel2_in10_wd;
+ logic periph_insel2_in10_we;
+ logic [5:0] periph_insel2_in11_qs;
+ logic [5:0] periph_insel2_in11_wd;
+ logic periph_insel2_in11_we;
+ logic [5:0] periph_insel2_in12_qs;
+ logic [5:0] periph_insel2_in12_wd;
+ logic periph_insel2_in12_we;
+ logic [5:0] periph_insel2_in13_qs;
+ logic [5:0] periph_insel2_in13_wd;
+ logic periph_insel2_in13_we;
+ logic [5:0] periph_insel2_in14_qs;
+ logic [5:0] periph_insel2_in14_wd;
+ logic periph_insel2_in14_we;
+ logic [5:0] periph_insel3_in15_qs;
+ logic [5:0] periph_insel3_in15_wd;
+ logic periph_insel3_in15_we;
+ logic [5:0] periph_insel3_in16_qs;
+ logic [5:0] periph_insel3_in16_wd;
+ logic periph_insel3_in16_we;
+ logic [5:0] periph_insel3_in17_qs;
+ logic [5:0] periph_insel3_in17_wd;
+ logic periph_insel3_in17_we;
+ logic [5:0] periph_insel3_in18_qs;
+ logic [5:0] periph_insel3_in18_wd;
+ logic periph_insel3_in18_we;
+ logic [5:0] periph_insel3_in19_qs;
+ logic [5:0] periph_insel3_in19_wd;
+ logic periph_insel3_in19_we;
+ logic [5:0] periph_insel4_in20_qs;
+ logic [5:0] periph_insel4_in20_wd;
+ logic periph_insel4_in20_we;
+ logic [5:0] periph_insel4_in21_qs;
+ logic [5:0] periph_insel4_in21_wd;
+ logic periph_insel4_in21_we;
+ logic [5:0] periph_insel4_in22_qs;
+ logic [5:0] periph_insel4_in22_wd;
+ logic periph_insel4_in22_we;
+ logic [5:0] periph_insel4_in23_qs;
+ logic [5:0] periph_insel4_in23_wd;
+ logic periph_insel4_in23_we;
+ logic [5:0] periph_insel4_in24_qs;
+ logic [5:0] periph_insel4_in24_wd;
+ logic periph_insel4_in24_we;
+ logic [5:0] periph_insel5_in25_qs;
+ logic [5:0] periph_insel5_in25_wd;
+ logic periph_insel5_in25_we;
+ logic [5:0] periph_insel5_in26_qs;
+ logic [5:0] periph_insel5_in26_wd;
+ logic periph_insel5_in26_we;
+ logic [5:0] periph_insel5_in27_qs;
+ logic [5:0] periph_insel5_in27_wd;
+ logic periph_insel5_in27_we;
+ logic [5:0] periph_insel5_in28_qs;
+ logic [5:0] periph_insel5_in28_wd;
+ logic periph_insel5_in28_we;
+ logic [5:0] periph_insel5_in29_qs;
+ logic [5:0] periph_insel5_in29_wd;
+ logic periph_insel5_in29_we;
+ logic [5:0] periph_insel6_in30_qs;
+ logic [5:0] periph_insel6_in30_wd;
+ logic periph_insel6_in30_we;
+ logic [5:0] periph_insel6_in31_qs;
+ logic [5:0] periph_insel6_in31_wd;
+ logic periph_insel6_in31_we;
+ logic [5:0] mio_outsel0_out0_qs;
+ logic [5:0] mio_outsel0_out0_wd;
+ logic mio_outsel0_out0_we;
+ logic [5:0] mio_outsel0_out1_qs;
+ logic [5:0] mio_outsel0_out1_wd;
+ logic mio_outsel0_out1_we;
+ logic [5:0] mio_outsel0_out2_qs;
+ logic [5:0] mio_outsel0_out2_wd;
+ logic mio_outsel0_out2_we;
+ logic [5:0] mio_outsel0_out3_qs;
+ logic [5:0] mio_outsel0_out3_wd;
+ logic mio_outsel0_out3_we;
+ logic [5:0] mio_outsel0_out4_qs;
+ logic [5:0] mio_outsel0_out4_wd;
+ logic mio_outsel0_out4_we;
+ logic [5:0] mio_outsel1_out5_qs;
+ logic [5:0] mio_outsel1_out5_wd;
+ logic mio_outsel1_out5_we;
+ logic [5:0] mio_outsel1_out6_qs;
+ logic [5:0] mio_outsel1_out6_wd;
+ logic mio_outsel1_out6_we;
+ logic [5:0] mio_outsel1_out7_qs;
+ logic [5:0] mio_outsel1_out7_wd;
+ logic mio_outsel1_out7_we;
+ logic [5:0] mio_outsel1_out8_qs;
+ logic [5:0] mio_outsel1_out8_wd;
+ logic mio_outsel1_out8_we;
+ logic [5:0] mio_outsel1_out9_qs;
+ logic [5:0] mio_outsel1_out9_wd;
+ logic mio_outsel1_out9_we;
+ logic [5:0] mio_outsel2_out10_qs;
+ logic [5:0] mio_outsel2_out10_wd;
+ logic mio_outsel2_out10_we;
+ logic [5:0] mio_outsel2_out11_qs;
+ logic [5:0] mio_outsel2_out11_wd;
+ logic mio_outsel2_out11_we;
+ logic [5:0] mio_outsel2_out12_qs;
+ logic [5:0] mio_outsel2_out12_wd;
+ logic mio_outsel2_out12_we;
+ logic [5:0] mio_outsel2_out13_qs;
+ logic [5:0] mio_outsel2_out13_wd;
+ logic mio_outsel2_out13_we;
+ logic [5:0] mio_outsel2_out14_qs;
+ logic [5:0] mio_outsel2_out14_wd;
+ logic mio_outsel2_out14_we;
+ logic [5:0] mio_outsel3_out15_qs;
+ logic [5:0] mio_outsel3_out15_wd;
+ logic mio_outsel3_out15_we;
+ logic [5:0] mio_outsel3_out16_qs;
+ logic [5:0] mio_outsel3_out16_wd;
+ logic mio_outsel3_out16_we;
+ logic [5:0] mio_outsel3_out17_qs;
+ logic [5:0] mio_outsel3_out17_wd;
+ logic mio_outsel3_out17_we;
+ logic [5:0] mio_outsel3_out18_qs;
+ logic [5:0] mio_outsel3_out18_wd;
+ logic mio_outsel3_out18_we;
+ logic [5:0] mio_outsel3_out19_qs;
+ logic [5:0] mio_outsel3_out19_wd;
+ logic mio_outsel3_out19_we;
+ logic [5:0] mio_outsel4_out20_qs;
+ logic [5:0] mio_outsel4_out20_wd;
+ logic mio_outsel4_out20_we;
+ logic [5:0] mio_outsel4_out21_qs;
+ logic [5:0] mio_outsel4_out21_wd;
+ logic mio_outsel4_out21_we;
+ logic [5:0] mio_outsel4_out22_qs;
+ logic [5:0] mio_outsel4_out22_wd;
+ logic mio_outsel4_out22_we;
+ logic [5:0] mio_outsel4_out23_qs;
+ logic [5:0] mio_outsel4_out23_wd;
+ logic mio_outsel4_out23_we;
+ logic [5:0] mio_outsel4_out24_qs;
+ logic [5:0] mio_outsel4_out24_wd;
+ logic mio_outsel4_out24_we;
+ logic [5:0] mio_outsel5_out25_qs;
+ logic [5:0] mio_outsel5_out25_wd;
+ logic mio_outsel5_out25_we;
+ logic [5:0] mio_outsel5_out26_qs;
+ logic [5:0] mio_outsel5_out26_wd;
+ logic mio_outsel5_out26_we;
+ logic [5:0] mio_outsel5_out27_qs;
+ logic [5:0] mio_outsel5_out27_wd;
+ logic mio_outsel5_out27_we;
+ logic [5:0] mio_outsel5_out28_qs;
+ logic [5:0] mio_outsel5_out28_wd;
+ logic mio_outsel5_out28_we;
+ logic [5:0] mio_outsel5_out29_qs;
+ logic [5:0] mio_outsel5_out29_wd;
+ logic mio_outsel5_out29_we;
+ logic [5:0] mio_outsel6_out30_qs;
+ logic [5:0] mio_outsel6_out30_wd;
+ logic mio_outsel6_out30_we;
+ logic [5:0] mio_outsel6_out31_qs;
+ logic [5:0] mio_outsel6_out31_wd;
+ logic mio_outsel6_out31_we;
+
+ // Register instances
+ // R[regen]: V(False)
+
+ prim_subreg #(
+ .DW (1),
+ .SWACCESS("W0C"),
+ .RESVAL (1'h1)
+ ) u_regen (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface
+ .we (regen_we),
+ .wd (regen_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (),
+
+ // to register interface (read)
+ .qs (regen_qs)
+ );
+
+
+
+ // Subregister 0 of Multireg periph_insel
+ // R[periph_insel0]: V(False)
+
+ // F[in0]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel0_in0 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel0_in0_we & regen_qs),
+ .wd (periph_insel0_in0_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[0].q ),
+
+ // to register interface (read)
+ .qs (periph_insel0_in0_qs)
+ );
+
+
+ // F[in1]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel0_in1 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel0_in1_we & regen_qs),
+ .wd (periph_insel0_in1_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[1].q ),
+
+ // to register interface (read)
+ .qs (periph_insel0_in1_qs)
+ );
+
+
+ // F[in2]: 17:12
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel0_in2 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel0_in2_we & regen_qs),
+ .wd (periph_insel0_in2_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[2].q ),
+
+ // to register interface (read)
+ .qs (periph_insel0_in2_qs)
+ );
+
+
+ // F[in3]: 23:18
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel0_in3 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel0_in3_we & regen_qs),
+ .wd (periph_insel0_in3_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[3].q ),
+
+ // to register interface (read)
+ .qs (periph_insel0_in3_qs)
+ );
+
+
+ // F[in4]: 29:24
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel0_in4 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel0_in4_we & regen_qs),
+ .wd (periph_insel0_in4_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[4].q ),
+
+ // to register interface (read)
+ .qs (periph_insel0_in4_qs)
+ );
+
+
+ // Subregister 5 of Multireg periph_insel
+ // R[periph_insel1]: V(False)
+
+ // F[in5]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel1_in5 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel1_in5_we & regen_qs),
+ .wd (periph_insel1_in5_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[5].q ),
+
+ // to register interface (read)
+ .qs (periph_insel1_in5_qs)
+ );
+
+
+ // F[in6]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel1_in6 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel1_in6_we & regen_qs),
+ .wd (periph_insel1_in6_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[6].q ),
+
+ // to register interface (read)
+ .qs (periph_insel1_in6_qs)
+ );
+
+
+ // F[in7]: 17:12
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel1_in7 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel1_in7_we & regen_qs),
+ .wd (periph_insel1_in7_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[7].q ),
+
+ // to register interface (read)
+ .qs (periph_insel1_in7_qs)
+ );
+
+
+ // F[in8]: 23:18
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel1_in8 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel1_in8_we & regen_qs),
+ .wd (periph_insel1_in8_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[8].q ),
+
+ // to register interface (read)
+ .qs (periph_insel1_in8_qs)
+ );
+
+
+ // F[in9]: 29:24
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel1_in9 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel1_in9_we & regen_qs),
+ .wd (periph_insel1_in9_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[9].q ),
+
+ // to register interface (read)
+ .qs (periph_insel1_in9_qs)
+ );
+
+
+ // Subregister 10 of Multireg periph_insel
+ // R[periph_insel2]: V(False)
+
+ // F[in10]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel2_in10 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel2_in10_we & regen_qs),
+ .wd (periph_insel2_in10_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[10].q ),
+
+ // to register interface (read)
+ .qs (periph_insel2_in10_qs)
+ );
+
+
+ // F[in11]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel2_in11 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel2_in11_we & regen_qs),
+ .wd (periph_insel2_in11_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[11].q ),
+
+ // to register interface (read)
+ .qs (periph_insel2_in11_qs)
+ );
+
+
+ // F[in12]: 17:12
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel2_in12 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel2_in12_we & regen_qs),
+ .wd (periph_insel2_in12_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[12].q ),
+
+ // to register interface (read)
+ .qs (periph_insel2_in12_qs)
+ );
+
+
+ // F[in13]: 23:18
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel2_in13 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel2_in13_we & regen_qs),
+ .wd (periph_insel2_in13_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[13].q ),
+
+ // to register interface (read)
+ .qs (periph_insel2_in13_qs)
+ );
+
+
+ // F[in14]: 29:24
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel2_in14 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel2_in14_we & regen_qs),
+ .wd (periph_insel2_in14_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[14].q ),
+
+ // to register interface (read)
+ .qs (periph_insel2_in14_qs)
+ );
+
+
+ // Subregister 15 of Multireg periph_insel
+ // R[periph_insel3]: V(False)
+
+ // F[in15]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel3_in15 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel3_in15_we & regen_qs),
+ .wd (periph_insel3_in15_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[15].q ),
+
+ // to register interface (read)
+ .qs (periph_insel3_in15_qs)
+ );
+
+
+ // F[in16]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel3_in16 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel3_in16_we & regen_qs),
+ .wd (periph_insel3_in16_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[16].q ),
+
+ // to register interface (read)
+ .qs (periph_insel3_in16_qs)
+ );
+
+
+ // F[in17]: 17:12
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel3_in17 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel3_in17_we & regen_qs),
+ .wd (periph_insel3_in17_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[17].q ),
+
+ // to register interface (read)
+ .qs (periph_insel3_in17_qs)
+ );
+
+
+ // F[in18]: 23:18
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel3_in18 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel3_in18_we & regen_qs),
+ .wd (periph_insel3_in18_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[18].q ),
+
+ // to register interface (read)
+ .qs (periph_insel3_in18_qs)
+ );
+
+
+ // F[in19]: 29:24
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel3_in19 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel3_in19_we & regen_qs),
+ .wd (periph_insel3_in19_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[19].q ),
+
+ // to register interface (read)
+ .qs (periph_insel3_in19_qs)
+ );
+
+
+ // Subregister 20 of Multireg periph_insel
+ // R[periph_insel4]: V(False)
+
+ // F[in20]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel4_in20 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel4_in20_we & regen_qs),
+ .wd (periph_insel4_in20_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[20].q ),
+
+ // to register interface (read)
+ .qs (periph_insel4_in20_qs)
+ );
+
+
+ // F[in21]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel4_in21 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel4_in21_we & regen_qs),
+ .wd (periph_insel4_in21_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[21].q ),
+
+ // to register interface (read)
+ .qs (periph_insel4_in21_qs)
+ );
+
+
+ // F[in22]: 17:12
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel4_in22 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel4_in22_we & regen_qs),
+ .wd (periph_insel4_in22_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[22].q ),
+
+ // to register interface (read)
+ .qs (periph_insel4_in22_qs)
+ );
+
+
+ // F[in23]: 23:18
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel4_in23 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel4_in23_we & regen_qs),
+ .wd (periph_insel4_in23_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[23].q ),
+
+ // to register interface (read)
+ .qs (periph_insel4_in23_qs)
+ );
+
+
+ // F[in24]: 29:24
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel4_in24 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel4_in24_we & regen_qs),
+ .wd (periph_insel4_in24_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[24].q ),
+
+ // to register interface (read)
+ .qs (periph_insel4_in24_qs)
+ );
+
+
+ // Subregister 25 of Multireg periph_insel
+ // R[periph_insel5]: V(False)
+
+ // F[in25]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel5_in25 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel5_in25_we & regen_qs),
+ .wd (periph_insel5_in25_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[25].q ),
+
+ // to register interface (read)
+ .qs (periph_insel5_in25_qs)
+ );
+
+
+ // F[in26]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel5_in26 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel5_in26_we & regen_qs),
+ .wd (periph_insel5_in26_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[26].q ),
+
+ // to register interface (read)
+ .qs (periph_insel5_in26_qs)
+ );
+
+
+ // F[in27]: 17:12
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel5_in27 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel5_in27_we & regen_qs),
+ .wd (periph_insel5_in27_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[27].q ),
+
+ // to register interface (read)
+ .qs (periph_insel5_in27_qs)
+ );
+
+
+ // F[in28]: 23:18
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel5_in28 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel5_in28_we & regen_qs),
+ .wd (periph_insel5_in28_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[28].q ),
+
+ // to register interface (read)
+ .qs (periph_insel5_in28_qs)
+ );
+
+
+ // F[in29]: 29:24
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel5_in29 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel5_in29_we & regen_qs),
+ .wd (periph_insel5_in29_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[29].q ),
+
+ // to register interface (read)
+ .qs (periph_insel5_in29_qs)
+ );
+
+
+ // Subregister 30 of Multireg periph_insel
+ // R[periph_insel6]: V(False)
+
+ // F[in30]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel6_in30 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel6_in30_we & regen_qs),
+ .wd (periph_insel6_in30_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[30].q ),
+
+ // to register interface (read)
+ .qs (periph_insel6_in30_qs)
+ );
+
+
+ // F[in31]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h0)
+ ) u_periph_insel6_in31 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (periph_insel6_in31_we & regen_qs),
+ .wd (periph_insel6_in31_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.periph_insel[31].q ),
+
+ // to register interface (read)
+ .qs (periph_insel6_in31_qs)
+ );
+
+
+
+
+ // Subregister 0 of Multireg mio_outsel
+ // R[mio_outsel0]: V(False)
+
+ // F[out0]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel0_out0 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel0_out0_we & regen_qs),
+ .wd (mio_outsel0_out0_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[0].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel0_out0_qs)
+ );
+
+
+ // F[out1]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel0_out1 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel0_out1_we & regen_qs),
+ .wd (mio_outsel0_out1_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[1].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel0_out1_qs)
+ );
+
+
+ // F[out2]: 17:12
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel0_out2 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel0_out2_we & regen_qs),
+ .wd (mio_outsel0_out2_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[2].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel0_out2_qs)
+ );
+
+
+ // F[out3]: 23:18
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel0_out3 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel0_out3_we & regen_qs),
+ .wd (mio_outsel0_out3_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[3].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel0_out3_qs)
+ );
+
+
+ // F[out4]: 29:24
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel0_out4 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel0_out4_we & regen_qs),
+ .wd (mio_outsel0_out4_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[4].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel0_out4_qs)
+ );
+
+
+ // Subregister 5 of Multireg mio_outsel
+ // R[mio_outsel1]: V(False)
+
+ // F[out5]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel1_out5 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel1_out5_we & regen_qs),
+ .wd (mio_outsel1_out5_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[5].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel1_out5_qs)
+ );
+
+
+ // F[out6]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel1_out6 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel1_out6_we & regen_qs),
+ .wd (mio_outsel1_out6_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[6].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel1_out6_qs)
+ );
+
+
+ // F[out7]: 17:12
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel1_out7 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel1_out7_we & regen_qs),
+ .wd (mio_outsel1_out7_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[7].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel1_out7_qs)
+ );
+
+
+ // F[out8]: 23:18
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel1_out8 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel1_out8_we & regen_qs),
+ .wd (mio_outsel1_out8_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[8].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel1_out8_qs)
+ );
+
+
+ // F[out9]: 29:24
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel1_out9 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel1_out9_we & regen_qs),
+ .wd (mio_outsel1_out9_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[9].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel1_out9_qs)
+ );
+
+
+ // Subregister 10 of Multireg mio_outsel
+ // R[mio_outsel2]: V(False)
+
+ // F[out10]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel2_out10 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel2_out10_we & regen_qs),
+ .wd (mio_outsel2_out10_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[10].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel2_out10_qs)
+ );
+
+
+ // F[out11]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel2_out11 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel2_out11_we & regen_qs),
+ .wd (mio_outsel2_out11_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[11].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel2_out11_qs)
+ );
+
+
+ // F[out12]: 17:12
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel2_out12 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel2_out12_we & regen_qs),
+ .wd (mio_outsel2_out12_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[12].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel2_out12_qs)
+ );
+
+
+ // F[out13]: 23:18
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel2_out13 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel2_out13_we & regen_qs),
+ .wd (mio_outsel2_out13_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[13].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel2_out13_qs)
+ );
+
+
+ // F[out14]: 29:24
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel2_out14 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel2_out14_we & regen_qs),
+ .wd (mio_outsel2_out14_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[14].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel2_out14_qs)
+ );
+
+
+ // Subregister 15 of Multireg mio_outsel
+ // R[mio_outsel3]: V(False)
+
+ // F[out15]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel3_out15 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel3_out15_we & regen_qs),
+ .wd (mio_outsel3_out15_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[15].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel3_out15_qs)
+ );
+
+
+ // F[out16]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel3_out16 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel3_out16_we & regen_qs),
+ .wd (mio_outsel3_out16_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[16].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel3_out16_qs)
+ );
+
+
+ // F[out17]: 17:12
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel3_out17 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel3_out17_we & regen_qs),
+ .wd (mio_outsel3_out17_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[17].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel3_out17_qs)
+ );
+
+
+ // F[out18]: 23:18
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel3_out18 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel3_out18_we & regen_qs),
+ .wd (mio_outsel3_out18_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[18].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel3_out18_qs)
+ );
+
+
+ // F[out19]: 29:24
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel3_out19 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel3_out19_we & regen_qs),
+ .wd (mio_outsel3_out19_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[19].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel3_out19_qs)
+ );
+
+
+ // Subregister 20 of Multireg mio_outsel
+ // R[mio_outsel4]: V(False)
+
+ // F[out20]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel4_out20 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel4_out20_we & regen_qs),
+ .wd (mio_outsel4_out20_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[20].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel4_out20_qs)
+ );
+
+
+ // F[out21]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel4_out21 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel4_out21_we & regen_qs),
+ .wd (mio_outsel4_out21_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[21].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel4_out21_qs)
+ );
+
+
+ // F[out22]: 17:12
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel4_out22 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel4_out22_we & regen_qs),
+ .wd (mio_outsel4_out22_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[22].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel4_out22_qs)
+ );
+
+
+ // F[out23]: 23:18
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel4_out23 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel4_out23_we & regen_qs),
+ .wd (mio_outsel4_out23_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[23].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel4_out23_qs)
+ );
+
+
+ // F[out24]: 29:24
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel4_out24 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel4_out24_we & regen_qs),
+ .wd (mio_outsel4_out24_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[24].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel4_out24_qs)
+ );
+
+
+ // Subregister 25 of Multireg mio_outsel
+ // R[mio_outsel5]: V(False)
+
+ // F[out25]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel5_out25 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel5_out25_we & regen_qs),
+ .wd (mio_outsel5_out25_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[25].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel5_out25_qs)
+ );
+
+
+ // F[out26]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel5_out26 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel5_out26_we & regen_qs),
+ .wd (mio_outsel5_out26_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[26].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel5_out26_qs)
+ );
+
+
+ // F[out27]: 17:12
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel5_out27 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel5_out27_we & regen_qs),
+ .wd (mio_outsel5_out27_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[27].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel5_out27_qs)
+ );
+
+
+ // F[out28]: 23:18
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel5_out28 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel5_out28_we & regen_qs),
+ .wd (mio_outsel5_out28_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[28].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel5_out28_qs)
+ );
+
+
+ // F[out29]: 29:24
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel5_out29 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel5_out29_we & regen_qs),
+ .wd (mio_outsel5_out29_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[29].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel5_out29_qs)
+ );
+
+
+ // Subregister 30 of Multireg mio_outsel
+ // R[mio_outsel6]: V(False)
+
+ // F[out30]: 5:0
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel6_out30 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel6_out30_we & regen_qs),
+ .wd (mio_outsel6_out30_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[30].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel6_out30_qs)
+ );
+
+
+ // F[out31]: 11:6
+ prim_subreg #(
+ .DW (6),
+ .SWACCESS("RW"),
+ .RESVAL (6'h2)
+ ) u_mio_outsel6_out31 (
+ .clk_i (clk_i ),
+ .rst_ni (rst_ni ),
+
+ // from register interface (qualified with register enable)
+ .we (mio_outsel6_out31_we & regen_qs),
+ .wd (mio_outsel6_out31_wd),
+
+ // from internal hardware
+ .de (1'b0),
+ .d ('0 ),
+
+ // to internal hardware
+ .qe (),
+ .q (reg2hw.mio_outsel[31].q ),
+
+ // to register interface (read)
+ .qs (mio_outsel6_out31_qs)
+ );
+
+
+
+
+
+ logic [14:0] addr_hit;
+ always_comb begin
+ addr_hit = '0;
+ addr_hit[ 0] = (reg_addr == PINMUX_REGEN_OFFSET);
+ addr_hit[ 1] = (reg_addr == PINMUX_PERIPH_INSEL0_OFFSET);
+ addr_hit[ 2] = (reg_addr == PINMUX_PERIPH_INSEL1_OFFSET);
+ addr_hit[ 3] = (reg_addr == PINMUX_PERIPH_INSEL2_OFFSET);
+ addr_hit[ 4] = (reg_addr == PINMUX_PERIPH_INSEL3_OFFSET);
+ addr_hit[ 5] = (reg_addr == PINMUX_PERIPH_INSEL4_OFFSET);
+ addr_hit[ 6] = (reg_addr == PINMUX_PERIPH_INSEL5_OFFSET);
+ addr_hit[ 7] = (reg_addr == PINMUX_PERIPH_INSEL6_OFFSET);
+ addr_hit[ 8] = (reg_addr == PINMUX_MIO_OUTSEL0_OFFSET);
+ addr_hit[ 9] = (reg_addr == PINMUX_MIO_OUTSEL1_OFFSET);
+ addr_hit[10] = (reg_addr == PINMUX_MIO_OUTSEL2_OFFSET);
+ addr_hit[11] = (reg_addr == PINMUX_MIO_OUTSEL3_OFFSET);
+ addr_hit[12] = (reg_addr == PINMUX_MIO_OUTSEL4_OFFSET);
+ addr_hit[13] = (reg_addr == PINMUX_MIO_OUTSEL5_OFFSET);
+ addr_hit[14] = (reg_addr == PINMUX_MIO_OUTSEL6_OFFSET);
+ end
+
+ assign addrmiss = (reg_re || reg_we) ? ~|addr_hit : 1'b0 ;
+
+ // Check sub-word write is permitted
+ always_comb begin
+ wr_err = 1'b0;
+ if (addr_hit[ 0] && reg_we && (PINMUX_PERMIT[ 0] != (PINMUX_PERMIT[ 0] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[ 1] && reg_we && (PINMUX_PERMIT[ 1] != (PINMUX_PERMIT[ 1] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[ 2] && reg_we && (PINMUX_PERMIT[ 2] != (PINMUX_PERMIT[ 2] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[ 3] && reg_we && (PINMUX_PERMIT[ 3] != (PINMUX_PERMIT[ 3] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[ 4] && reg_we && (PINMUX_PERMIT[ 4] != (PINMUX_PERMIT[ 4] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[ 5] && reg_we && (PINMUX_PERMIT[ 5] != (PINMUX_PERMIT[ 5] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[ 6] && reg_we && (PINMUX_PERMIT[ 6] != (PINMUX_PERMIT[ 6] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[ 7] && reg_we && (PINMUX_PERMIT[ 7] != (PINMUX_PERMIT[ 7] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[ 8] && reg_we && (PINMUX_PERMIT[ 8] != (PINMUX_PERMIT[ 8] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[ 9] && reg_we && (PINMUX_PERMIT[ 9] != (PINMUX_PERMIT[ 9] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[10] && reg_we && (PINMUX_PERMIT[10] != (PINMUX_PERMIT[10] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[11] && reg_we && (PINMUX_PERMIT[11] != (PINMUX_PERMIT[11] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[12] && reg_we && (PINMUX_PERMIT[12] != (PINMUX_PERMIT[12] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[13] && reg_we && (PINMUX_PERMIT[13] != (PINMUX_PERMIT[13] & reg_be))) wr_err = 1'b1 ;
+ if (addr_hit[14] && reg_we && (PINMUX_PERMIT[14] != (PINMUX_PERMIT[14] & reg_be))) wr_err = 1'b1 ;
+ end
+
+ assign regen_we = addr_hit[0] & reg_we & ~wr_err;
+ assign regen_wd = reg_wdata[0];
+
+ assign periph_insel0_in0_we = addr_hit[1] & reg_we & ~wr_err;
+ assign periph_insel0_in0_wd = reg_wdata[5:0];
+
+ assign periph_insel0_in1_we = addr_hit[1] & reg_we & ~wr_err;
+ assign periph_insel0_in1_wd = reg_wdata[11:6];
+
+ assign periph_insel0_in2_we = addr_hit[1] & reg_we & ~wr_err;
+ assign periph_insel0_in2_wd = reg_wdata[17:12];
+
+ assign periph_insel0_in3_we = addr_hit[1] & reg_we & ~wr_err;
+ assign periph_insel0_in3_wd = reg_wdata[23:18];
+
+ assign periph_insel0_in4_we = addr_hit[1] & reg_we & ~wr_err;
+ assign periph_insel0_in4_wd = reg_wdata[29:24];
+
+ assign periph_insel1_in5_we = addr_hit[2] & reg_we & ~wr_err;
+ assign periph_insel1_in5_wd = reg_wdata[5:0];
+
+ assign periph_insel1_in6_we = addr_hit[2] & reg_we & ~wr_err;
+ assign periph_insel1_in6_wd = reg_wdata[11:6];
+
+ assign periph_insel1_in7_we = addr_hit[2] & reg_we & ~wr_err;
+ assign periph_insel1_in7_wd = reg_wdata[17:12];
+
+ assign periph_insel1_in8_we = addr_hit[2] & reg_we & ~wr_err;
+ assign periph_insel1_in8_wd = reg_wdata[23:18];
+
+ assign periph_insel1_in9_we = addr_hit[2] & reg_we & ~wr_err;
+ assign periph_insel1_in9_wd = reg_wdata[29:24];
+
+ assign periph_insel2_in10_we = addr_hit[3] & reg_we & ~wr_err;
+ assign periph_insel2_in10_wd = reg_wdata[5:0];
+
+ assign periph_insel2_in11_we = addr_hit[3] & reg_we & ~wr_err;
+ assign periph_insel2_in11_wd = reg_wdata[11:6];
+
+ assign periph_insel2_in12_we = addr_hit[3] & reg_we & ~wr_err;
+ assign periph_insel2_in12_wd = reg_wdata[17:12];
+
+ assign periph_insel2_in13_we = addr_hit[3] & reg_we & ~wr_err;
+ assign periph_insel2_in13_wd = reg_wdata[23:18];
+
+ assign periph_insel2_in14_we = addr_hit[3] & reg_we & ~wr_err;
+ assign periph_insel2_in14_wd = reg_wdata[29:24];
+
+ assign periph_insel3_in15_we = addr_hit[4] & reg_we & ~wr_err;
+ assign periph_insel3_in15_wd = reg_wdata[5:0];
+
+ assign periph_insel3_in16_we = addr_hit[4] & reg_we & ~wr_err;
+ assign periph_insel3_in16_wd = reg_wdata[11:6];
+
+ assign periph_insel3_in17_we = addr_hit[4] & reg_we & ~wr_err;
+ assign periph_insel3_in17_wd = reg_wdata[17:12];
+
+ assign periph_insel3_in18_we = addr_hit[4] & reg_we & ~wr_err;
+ assign periph_insel3_in18_wd = reg_wdata[23:18];
+
+ assign periph_insel3_in19_we = addr_hit[4] & reg_we & ~wr_err;
+ assign periph_insel3_in19_wd = reg_wdata[29:24];
+
+ assign periph_insel4_in20_we = addr_hit[5] & reg_we & ~wr_err;
+ assign periph_insel4_in20_wd = reg_wdata[5:0];
+
+ assign periph_insel4_in21_we = addr_hit[5] & reg_we & ~wr_err;
+ assign periph_insel4_in21_wd = reg_wdata[11:6];
+
+ assign periph_insel4_in22_we = addr_hit[5] & reg_we & ~wr_err;
+ assign periph_insel4_in22_wd = reg_wdata[17:12];
+
+ assign periph_insel4_in23_we = addr_hit[5] & reg_we & ~wr_err;
+ assign periph_insel4_in23_wd = reg_wdata[23:18];
+
+ assign periph_insel4_in24_we = addr_hit[5] & reg_we & ~wr_err;
+ assign periph_insel4_in24_wd = reg_wdata[29:24];
+
+ assign periph_insel5_in25_we = addr_hit[6] & reg_we & ~wr_err;
+ assign periph_insel5_in25_wd = reg_wdata[5:0];
+
+ assign periph_insel5_in26_we = addr_hit[6] & reg_we & ~wr_err;
+ assign periph_insel5_in26_wd = reg_wdata[11:6];
+
+ assign periph_insel5_in27_we = addr_hit[6] & reg_we & ~wr_err;
+ assign periph_insel5_in27_wd = reg_wdata[17:12];
+
+ assign periph_insel5_in28_we = addr_hit[6] & reg_we & ~wr_err;
+ assign periph_insel5_in28_wd = reg_wdata[23:18];
+
+ assign periph_insel5_in29_we = addr_hit[6] & reg_we & ~wr_err;
+ assign periph_insel5_in29_wd = reg_wdata[29:24];
+
+ assign periph_insel6_in30_we = addr_hit[7] & reg_we & ~wr_err;
+ assign periph_insel6_in30_wd = reg_wdata[5:0];
+
+ assign periph_insel6_in31_we = addr_hit[7] & reg_we & ~wr_err;
+ assign periph_insel6_in31_wd = reg_wdata[11:6];
+
+ assign mio_outsel0_out0_we = addr_hit[8] & reg_we & ~wr_err;
+ assign mio_outsel0_out0_wd = reg_wdata[5:0];
+
+ assign mio_outsel0_out1_we = addr_hit[8] & reg_we & ~wr_err;
+ assign mio_outsel0_out1_wd = reg_wdata[11:6];
+
+ assign mio_outsel0_out2_we = addr_hit[8] & reg_we & ~wr_err;
+ assign mio_outsel0_out2_wd = reg_wdata[17:12];
+
+ assign mio_outsel0_out3_we = addr_hit[8] & reg_we & ~wr_err;
+ assign mio_outsel0_out3_wd = reg_wdata[23:18];
+
+ assign mio_outsel0_out4_we = addr_hit[8] & reg_we & ~wr_err;
+ assign mio_outsel0_out4_wd = reg_wdata[29:24];
+
+ assign mio_outsel1_out5_we = addr_hit[9] & reg_we & ~wr_err;
+ assign mio_outsel1_out5_wd = reg_wdata[5:0];
+
+ assign mio_outsel1_out6_we = addr_hit[9] & reg_we & ~wr_err;
+ assign mio_outsel1_out6_wd = reg_wdata[11:6];
+
+ assign mio_outsel1_out7_we = addr_hit[9] & reg_we & ~wr_err;
+ assign mio_outsel1_out7_wd = reg_wdata[17:12];
+
+ assign mio_outsel1_out8_we = addr_hit[9] & reg_we & ~wr_err;
+ assign mio_outsel1_out8_wd = reg_wdata[23:18];
+
+ assign mio_outsel1_out9_we = addr_hit[9] & reg_we & ~wr_err;
+ assign mio_outsel1_out9_wd = reg_wdata[29:24];
+
+ assign mio_outsel2_out10_we = addr_hit[10] & reg_we & ~wr_err;
+ assign mio_outsel2_out10_wd = reg_wdata[5:0];
+
+ assign mio_outsel2_out11_we = addr_hit[10] & reg_we & ~wr_err;
+ assign mio_outsel2_out11_wd = reg_wdata[11:6];
+
+ assign mio_outsel2_out12_we = addr_hit[10] & reg_we & ~wr_err;
+ assign mio_outsel2_out12_wd = reg_wdata[17:12];
+
+ assign mio_outsel2_out13_we = addr_hit[10] & reg_we & ~wr_err;
+ assign mio_outsel2_out13_wd = reg_wdata[23:18];
+
+ assign mio_outsel2_out14_we = addr_hit[10] & reg_we & ~wr_err;
+ assign mio_outsel2_out14_wd = reg_wdata[29:24];
+
+ assign mio_outsel3_out15_we = addr_hit[11] & reg_we & ~wr_err;
+ assign mio_outsel3_out15_wd = reg_wdata[5:0];
+
+ assign mio_outsel3_out16_we = addr_hit[11] & reg_we & ~wr_err;
+ assign mio_outsel3_out16_wd = reg_wdata[11:6];
+
+ assign mio_outsel3_out17_we = addr_hit[11] & reg_we & ~wr_err;
+ assign mio_outsel3_out17_wd = reg_wdata[17:12];
+
+ assign mio_outsel3_out18_we = addr_hit[11] & reg_we & ~wr_err;
+ assign mio_outsel3_out18_wd = reg_wdata[23:18];
+
+ assign mio_outsel3_out19_we = addr_hit[11] & reg_we & ~wr_err;
+ assign mio_outsel3_out19_wd = reg_wdata[29:24];
+
+ assign mio_outsel4_out20_we = addr_hit[12] & reg_we & ~wr_err;
+ assign mio_outsel4_out20_wd = reg_wdata[5:0];
+
+ assign mio_outsel4_out21_we = addr_hit[12] & reg_we & ~wr_err;
+ assign mio_outsel4_out21_wd = reg_wdata[11:6];
+
+ assign mio_outsel4_out22_we = addr_hit[12] & reg_we & ~wr_err;
+ assign mio_outsel4_out22_wd = reg_wdata[17:12];
+
+ assign mio_outsel4_out23_we = addr_hit[12] & reg_we & ~wr_err;
+ assign mio_outsel4_out23_wd = reg_wdata[23:18];
+
+ assign mio_outsel4_out24_we = addr_hit[12] & reg_we & ~wr_err;
+ assign mio_outsel4_out24_wd = reg_wdata[29:24];
+
+ assign mio_outsel5_out25_we = addr_hit[13] & reg_we & ~wr_err;
+ assign mio_outsel5_out25_wd = reg_wdata[5:0];
+
+ assign mio_outsel5_out26_we = addr_hit[13] & reg_we & ~wr_err;
+ assign mio_outsel5_out26_wd = reg_wdata[11:6];
+
+ assign mio_outsel5_out27_we = addr_hit[13] & reg_we & ~wr_err;
+ assign mio_outsel5_out27_wd = reg_wdata[17:12];
+
+ assign mio_outsel5_out28_we = addr_hit[13] & reg_we & ~wr_err;
+ assign mio_outsel5_out28_wd = reg_wdata[23:18];
+
+ assign mio_outsel5_out29_we = addr_hit[13] & reg_we & ~wr_err;
+ assign mio_outsel5_out29_wd = reg_wdata[29:24];
+
+ assign mio_outsel6_out30_we = addr_hit[14] & reg_we & ~wr_err;
+ assign mio_outsel6_out30_wd = reg_wdata[5:0];
+
+ assign mio_outsel6_out31_we = addr_hit[14] & reg_we & ~wr_err;
+ assign mio_outsel6_out31_wd = reg_wdata[11:6];
+
+ // Read data return
+ always_comb begin
+ reg_rdata_next = '0;
+ unique case (1'b1)
+ addr_hit[0]: begin
+ reg_rdata_next[0] = regen_qs;
+ end
+
+ addr_hit[1]: begin
+ reg_rdata_next[5:0] = periph_insel0_in0_qs;
+ reg_rdata_next[11:6] = periph_insel0_in1_qs;
+ reg_rdata_next[17:12] = periph_insel0_in2_qs;
+ reg_rdata_next[23:18] = periph_insel0_in3_qs;
+ reg_rdata_next[29:24] = periph_insel0_in4_qs;
+ end
+
+ addr_hit[2]: begin
+ reg_rdata_next[5:0] = periph_insel1_in5_qs;
+ reg_rdata_next[11:6] = periph_insel1_in6_qs;
+ reg_rdata_next[17:12] = periph_insel1_in7_qs;
+ reg_rdata_next[23:18] = periph_insel1_in8_qs;
+ reg_rdata_next[29:24] = periph_insel1_in9_qs;
+ end
+
+ addr_hit[3]: begin
+ reg_rdata_next[5:0] = periph_insel2_in10_qs;
+ reg_rdata_next[11:6] = periph_insel2_in11_qs;
+ reg_rdata_next[17:12] = periph_insel2_in12_qs;
+ reg_rdata_next[23:18] = periph_insel2_in13_qs;
+ reg_rdata_next[29:24] = periph_insel2_in14_qs;
+ end
+
+ addr_hit[4]: begin
+ reg_rdata_next[5:0] = periph_insel3_in15_qs;
+ reg_rdata_next[11:6] = periph_insel3_in16_qs;
+ reg_rdata_next[17:12] = periph_insel3_in17_qs;
+ reg_rdata_next[23:18] = periph_insel3_in18_qs;
+ reg_rdata_next[29:24] = periph_insel3_in19_qs;
+ end
+
+ addr_hit[5]: begin
+ reg_rdata_next[5:0] = periph_insel4_in20_qs;
+ reg_rdata_next[11:6] = periph_insel4_in21_qs;
+ reg_rdata_next[17:12] = periph_insel4_in22_qs;
+ reg_rdata_next[23:18] = periph_insel4_in23_qs;
+ reg_rdata_next[29:24] = periph_insel4_in24_qs;
+ end
+
+ addr_hit[6]: begin
+ reg_rdata_next[5:0] = periph_insel5_in25_qs;
+ reg_rdata_next[11:6] = periph_insel5_in26_qs;
+ reg_rdata_next[17:12] = periph_insel5_in27_qs;
+ reg_rdata_next[23:18] = periph_insel5_in28_qs;
+ reg_rdata_next[29:24] = periph_insel5_in29_qs;
+ end
+
+ addr_hit[7]: begin
+ reg_rdata_next[5:0] = periph_insel6_in30_qs;
+ reg_rdata_next[11:6] = periph_insel6_in31_qs;
+ end
+
+ addr_hit[8]: begin
+ reg_rdata_next[5:0] = mio_outsel0_out0_qs;
+ reg_rdata_next[11:6] = mio_outsel0_out1_qs;
+ reg_rdata_next[17:12] = mio_outsel0_out2_qs;
+ reg_rdata_next[23:18] = mio_outsel0_out3_qs;
+ reg_rdata_next[29:24] = mio_outsel0_out4_qs;
+ end
+
+ addr_hit[9]: begin
+ reg_rdata_next[5:0] = mio_outsel1_out5_qs;
+ reg_rdata_next[11:6] = mio_outsel1_out6_qs;
+ reg_rdata_next[17:12] = mio_outsel1_out7_qs;
+ reg_rdata_next[23:18] = mio_outsel1_out8_qs;
+ reg_rdata_next[29:24] = mio_outsel1_out9_qs;
+ end
+
+ addr_hit[10]: begin
+ reg_rdata_next[5:0] = mio_outsel2_out10_qs;
+ reg_rdata_next[11:6] = mio_outsel2_out11_qs;
+ reg_rdata_next[17:12] = mio_outsel2_out12_qs;
+ reg_rdata_next[23:18] = mio_outsel2_out13_qs;
+ reg_rdata_next[29:24] = mio_outsel2_out14_qs;
+ end
+
+ addr_hit[11]: begin
+ reg_rdata_next[5:0] = mio_outsel3_out15_qs;
+ reg_rdata_next[11:6] = mio_outsel3_out16_qs;
+ reg_rdata_next[17:12] = mio_outsel3_out17_qs;
+ reg_rdata_next[23:18] = mio_outsel3_out18_qs;
+ reg_rdata_next[29:24] = mio_outsel3_out19_qs;
+ end
+
+ addr_hit[12]: begin
+ reg_rdata_next[5:0] = mio_outsel4_out20_qs;
+ reg_rdata_next[11:6] = mio_outsel4_out21_qs;
+ reg_rdata_next[17:12] = mio_outsel4_out22_qs;
+ reg_rdata_next[23:18] = mio_outsel4_out23_qs;
+ reg_rdata_next[29:24] = mio_outsel4_out24_qs;
+ end
+
+ addr_hit[13]: begin
+ reg_rdata_next[5:0] = mio_outsel5_out25_qs;
+ reg_rdata_next[11:6] = mio_outsel5_out26_qs;
+ reg_rdata_next[17:12] = mio_outsel5_out27_qs;
+ reg_rdata_next[23:18] = mio_outsel5_out28_qs;
+ reg_rdata_next[29:24] = mio_outsel5_out29_qs;
+ end
+
+ addr_hit[14]: begin
+ reg_rdata_next[5:0] = mio_outsel6_out30_qs;
+ reg_rdata_next[11:6] = mio_outsel6_out31_qs;
+ end
+
+ default: begin
+ reg_rdata_next = '1;
+ end
+ endcase
+ end
+
+ // Assertions for Register Interface
+ `ASSERT_PULSE(wePulse, reg_we, clk_i, !rst_ni)
+ `ASSERT_PULSE(rePulse, reg_re, clk_i, !rst_ni)
+
+ `ASSERT(reAfterRv, $rose(reg_re || reg_we) |=> tl_o.d_valid, clk_i, !rst_ni)
+
+ `ASSERT(en2addrHit, (reg_we || reg_re) |-> $onehot0(addr_hit), clk_i, !rst_ni)
+
+ `ASSERT(reqParity, tl_reg_h2d.a_valid |-> tl_reg_h2d.a_user.parity_en == 1'b0, clk_i, !rst_ni)
+
+endmodule
diff --git a/hw/top_earlgrey/ip/rv_plic/doc/autogen/rv_plic.hjson b/hw/top_earlgrey/ip/rv_plic/doc/autogen/rv_plic.hjson
index 71a0a44..b58d56d 100644
--- a/hw/top_earlgrey/ip/rv_plic/doc/autogen/rv_plic.hjson
+++ b/hw/top_earlgrey/ip/rv_plic/doc/autogen/rv_plic.hjson
@@ -523,7 +523,7 @@
],
}
{ name: "CC0",
- desc: "Claim by read, complete by write for Target 0",
+ desc: "Claim interrupt by read, complete interrupt by write for Target 0. Value read/written is interrupt ID. Reading a value of 0 means no pending interrupts.",
swaccess: "rw",
hwaccess: "hrw",
hwext: "true",
@@ -534,7 +534,7 @@
],
}
{ name: "MSIP0",
- desc: "msip for Hart 0. Write 1 to here asserts msip_o[0]",
+ desc: "msip for Hart 0. Write 1 to here asserts software interrupt for Hart msip_o[0], write 0 to clear",
swaccess: "rw",
hwaccess: "hro",
fields: [
diff --git a/hw/top_earlgrey/ip/xbar/doc/autogen/xbar_main.gen.hjson b/hw/top_earlgrey/ip/xbar/doc/autogen/xbar_main.gen.hjson
index 3538267..9b26130 100644
--- a/hw/top_earlgrey/ip/xbar/doc/autogen/xbar_main.gen.hjson
+++ b/hw/top_earlgrey/ip/xbar/doc/autogen/xbar_main.gen.hjson
@@ -40,6 +40,7 @@
aes
hmac
rv_plic
+ pinmux
]
dm_sba:
[
@@ -54,6 +55,7 @@
aes
hmac
rv_plic
+ pinmux
]
}
nodes:
@@ -202,6 +204,16 @@
pipeline_byp: "false"
pipeline: "true"
}
+ {
+ name: pinmux
+ type: device
+ clock: main
+ inst_type: pinmux
+ base_addr: 0x40070000
+ size_byte: 0x1000
+ pipeline_byp: "false"
+ pipeline: "true"
+ }
]
clock: main
}
\ No newline at end of file
diff --git a/hw/top_earlgrey/ip/xbar/dv/autogen/xbar_main_bind.sv b/hw/top_earlgrey/ip/xbar/dv/autogen/xbar_main_bind.sv
index 42a772b..be3cd61 100644
--- a/hw/top_earlgrey/ip/xbar/dv/autogen/xbar_main_bind.sv
+++ b/hw/top_earlgrey/ip/xbar/dv/autogen/xbar_main_bind.sv
@@ -98,6 +98,12 @@
.h2d (tl_rv_plic_o),
.d2h (tl_rv_plic_i)
);
+ bind xbar_main tlul_assert tlul_assert_device_pinmux (
+ .clk_i (clk_main_i),
+ .rst_ni (rst_main_ni),
+ .h2d (tl_pinmux_o),
+ .d2h (tl_pinmux_i)
+ );
endmodule
diff --git a/hw/top_earlgrey/ip/xbar/rtl/autogen/tl_main_pkg.sv b/hw/top_earlgrey/ip/xbar/rtl/autogen/tl_main_pkg.sv
index 06205c1..84b2a90 100644
--- a/hw/top_earlgrey/ip/xbar/rtl/autogen/tl_main_pkg.sv
+++ b/hw/top_earlgrey/ip/xbar/rtl/autogen/tl_main_pkg.sv
@@ -18,6 +18,7 @@
localparam logic [31:0] ADDR_SPACE_HMAC = 32'h 40120000;
localparam logic [31:0] ADDR_SPACE_AES = 32'h 40110000;
localparam logic [31:0] ADDR_SPACE_RV_PLIC = 32'h 40090000;
+ localparam logic [31:0] ADDR_SPACE_PINMUX = 32'h 40070000;
localparam logic [31:0] ADDR_MASK_ROM = 32'h 00001fff;
localparam logic [31:0] ADDR_MASK_DEBUG_MEM = 32'h 00000fff;
@@ -31,9 +32,10 @@
localparam logic [31:0] ADDR_MASK_HMAC = 32'h 00000fff;
localparam logic [31:0] ADDR_MASK_AES = 32'h 00000fff;
localparam logic [31:0] ADDR_MASK_RV_PLIC = 32'h 00000fff;
+ localparam logic [31:0] ADDR_MASK_PINMUX = 32'h 00000fff;
localparam int N_HOST = 3;
- localparam int N_DEVICE = 12;
+ localparam int N_DEVICE = 13;
typedef enum int {
TlRom = 0,
@@ -47,7 +49,8 @@
TlRvTimer = 8,
TlHmac = 9,
TlAes = 10,
- TlRvPlic = 11
+ TlRvPlic = 11,
+ TlPinmux = 12
} tl_device_e;
typedef enum int {
diff --git a/hw/top_earlgrey/ip/xbar/rtl/autogen/xbar_main.sv b/hw/top_earlgrey/ip/xbar/rtl/autogen/xbar_main.sv
index 2ccd8ab..b866e6c 100644
--- a/hw/top_earlgrey/ip/xbar/rtl/autogen/xbar_main.sv
+++ b/hw/top_earlgrey/ip/xbar/rtl/autogen/xbar_main.sv
@@ -7,65 +7,69 @@
//
// Interconnect
// corei
-// -> s1n_15
-// -> sm1_16
-// -> rom
+// -> s1n_16
// -> sm1_17
-// -> debug_mem
+// -> rom
// -> sm1_18
-// -> ram_main
+// -> debug_mem
// -> sm1_19
+// -> ram_main
+// -> sm1_20
// -> eflash
// cored
-// -> s1n_20
-// -> sm1_16
-// -> rom
+// -> s1n_21
// -> sm1_17
-// -> debug_mem
-// -> sm1_18
-// -> ram_main
-// -> sm1_19
-// -> eflash
-// -> sm1_21
-// -> uart
-// -> sm1_22
-// -> gpio
-// -> sm1_23
-// -> spi_device
-// -> sm1_24
-// -> flash_ctrl
-// -> sm1_25
-// -> rv_timer
-// -> sm1_26
-// -> aes
-// -> sm1_27
-// -> hmac
-// -> sm1_28
-// -> rv_plic
-// dm_sba
-// -> s1n_29
-// -> sm1_16
// -> rom
// -> sm1_18
-// -> ram_main
+// -> debug_mem
// -> sm1_19
+// -> ram_main
+// -> sm1_20
// -> eflash
-// -> sm1_21
-// -> uart
// -> sm1_22
-// -> gpio
+// -> uart
// -> sm1_23
-// -> spi_device
+// -> gpio
// -> sm1_24
-// -> flash_ctrl
+// -> spi_device
// -> sm1_25
-// -> rv_timer
+// -> flash_ctrl
// -> sm1_26
-// -> aes
+// -> rv_timer
// -> sm1_27
-// -> hmac
+// -> aes
// -> sm1_28
+// -> hmac
+// -> sm1_29
// -> rv_plic
+// -> sm1_30
+// -> pinmux
+// dm_sba
+// -> s1n_31
+// -> sm1_17
+// -> rom
+// -> sm1_19
+// -> ram_main
+// -> sm1_20
+// -> eflash
+// -> sm1_22
+// -> uart
+// -> sm1_23
+// -> gpio
+// -> sm1_24
+// -> spi_device
+// -> sm1_25
+// -> flash_ctrl
+// -> sm1_26
+// -> rv_timer
+// -> sm1_27
+// -> aes
+// -> sm1_28
+// -> hmac
+// -> sm1_29
+// -> rv_plic
+// -> sm1_30
+// -> pinmux
module xbar_main (
input clk_main_i,
@@ -104,6 +108,8 @@
input tlul_pkg::tl_d2h_t tl_aes_i,
output tlul_pkg::tl_h2d_t tl_rv_plic_o,
input tlul_pkg::tl_d2h_t tl_rv_plic_i,
+ output tlul_pkg::tl_h2d_t tl_pinmux_o,
+ input tlul_pkg::tl_d2h_t tl_pinmux_i,
input scanmode_i
);
@@ -111,33 +117,26 @@
import tlul_pkg::*;
import tl_main_pkg::*;
- tl_h2d_t tl_s1n_15_us_h2d ;
- tl_d2h_t tl_s1n_15_us_d2h ;
+ tl_h2d_t tl_s1n_16_us_h2d ;
+ tl_d2h_t tl_s1n_16_us_d2h ;
- tl_h2d_t tl_s1n_15_ds_h2d [4];
- tl_d2h_t tl_s1n_15_ds_d2h [4];
+ tl_h2d_t tl_s1n_16_ds_h2d [4];
+ tl_d2h_t tl_s1n_16_ds_d2h [4];
// Create steering signal
- logic [2:0] dev_sel_s1n_15;
+ logic [2:0] dev_sel_s1n_16;
- tl_h2d_t tl_sm1_16_us_h2d [3];
- tl_d2h_t tl_sm1_16_us_d2h [3];
-
- tl_h2d_t tl_sm1_16_ds_h2d ;
- tl_d2h_t tl_sm1_16_ds_d2h ;
-
-
- tl_h2d_t tl_sm1_17_us_h2d [2];
- tl_d2h_t tl_sm1_17_us_d2h [2];
+ tl_h2d_t tl_sm1_17_us_h2d [3];
+ tl_d2h_t tl_sm1_17_us_d2h [3];
tl_h2d_t tl_sm1_17_ds_h2d ;
tl_d2h_t tl_sm1_17_ds_d2h ;
- tl_h2d_t tl_sm1_18_us_h2d [3];
- tl_d2h_t tl_sm1_18_us_d2h [3];
+ tl_h2d_t tl_sm1_18_us_h2d [2];
+ tl_d2h_t tl_sm1_18_us_d2h [2];
tl_h2d_t tl_sm1_18_ds_h2d ;
tl_d2h_t tl_sm1_18_ds_d2h ;
@@ -149,22 +148,22 @@
tl_h2d_t tl_sm1_19_ds_h2d ;
tl_d2h_t tl_sm1_19_ds_d2h ;
- tl_h2d_t tl_s1n_20_us_h2d ;
- tl_d2h_t tl_s1n_20_us_d2h ;
+
+ tl_h2d_t tl_sm1_20_us_h2d [3];
+ tl_d2h_t tl_sm1_20_us_d2h [3];
+
+ tl_h2d_t tl_sm1_20_ds_h2d ;
+ tl_d2h_t tl_sm1_20_ds_d2h ;
+
+ tl_h2d_t tl_s1n_21_us_h2d ;
+ tl_d2h_t tl_s1n_21_us_d2h ;
- tl_h2d_t tl_s1n_20_ds_h2d [12];
- tl_d2h_t tl_s1n_20_ds_d2h [12];
+ tl_h2d_t tl_s1n_21_ds_h2d [13];
+ tl_d2h_t tl_s1n_21_ds_d2h [13];
// Create steering signal
- logic [3:0] dev_sel_s1n_20;
-
-
- tl_h2d_t tl_sm1_21_us_h2d [2];
- tl_d2h_t tl_sm1_21_us_d2h [2];
-
- tl_h2d_t tl_sm1_21_ds_h2d ;
- tl_d2h_t tl_sm1_21_ds_d2h ;
+ logic [3:0] dev_sel_s1n_21;
tl_h2d_t tl_sm1_22_us_h2d [2];
@@ -215,213 +214,240 @@
tl_h2d_t tl_sm1_28_ds_h2d ;
tl_d2h_t tl_sm1_28_ds_d2h ;
- tl_h2d_t tl_s1n_29_us_h2d ;
- tl_d2h_t tl_s1n_29_us_d2h ;
+
+ tl_h2d_t tl_sm1_29_us_h2d [2];
+ tl_d2h_t tl_sm1_29_us_d2h [2];
+
+ tl_h2d_t tl_sm1_29_ds_h2d ;
+ tl_d2h_t tl_sm1_29_ds_d2h ;
- tl_h2d_t tl_s1n_29_ds_h2d [11];
- tl_d2h_t tl_s1n_29_ds_d2h [11];
+ tl_h2d_t tl_sm1_30_us_h2d [2];
+ tl_d2h_t tl_sm1_30_us_d2h [2];
+
+ tl_h2d_t tl_sm1_30_ds_h2d ;
+ tl_d2h_t tl_sm1_30_ds_d2h ;
+
+ tl_h2d_t tl_s1n_31_us_h2d ;
+ tl_d2h_t tl_s1n_31_us_d2h ;
+
+
+ tl_h2d_t tl_s1n_31_ds_h2d [12];
+ tl_d2h_t tl_s1n_31_ds_d2h [12];
// Create steering signal
- logic [3:0] dev_sel_s1n_29;
+ logic [3:0] dev_sel_s1n_31;
- assign tl_sm1_16_us_h2d[0] = tl_s1n_15_ds_h2d[0];
- assign tl_s1n_15_ds_d2h[0] = tl_sm1_16_us_d2h[0];
+ assign tl_sm1_17_us_h2d[0] = tl_s1n_16_ds_h2d[0];
+ assign tl_s1n_16_ds_d2h[0] = tl_sm1_17_us_d2h[0];
- assign tl_sm1_17_us_h2d[0] = tl_s1n_15_ds_h2d[1];
- assign tl_s1n_15_ds_d2h[1] = tl_sm1_17_us_d2h[0];
+ assign tl_sm1_18_us_h2d[0] = tl_s1n_16_ds_h2d[1];
+ assign tl_s1n_16_ds_d2h[1] = tl_sm1_18_us_d2h[0];
- assign tl_sm1_18_us_h2d[0] = tl_s1n_15_ds_h2d[2];
- assign tl_s1n_15_ds_d2h[2] = tl_sm1_18_us_d2h[0];
+ assign tl_sm1_19_us_h2d[0] = tl_s1n_16_ds_h2d[2];
+ assign tl_s1n_16_ds_d2h[2] = tl_sm1_19_us_d2h[0];
- assign tl_sm1_19_us_h2d[0] = tl_s1n_15_ds_h2d[3];
- assign tl_s1n_15_ds_d2h[3] = tl_sm1_19_us_d2h[0];
+ assign tl_sm1_20_us_h2d[0] = tl_s1n_16_ds_h2d[3];
+ assign tl_s1n_16_ds_d2h[3] = tl_sm1_20_us_d2h[0];
- assign tl_sm1_16_us_h2d[1] = tl_s1n_20_ds_h2d[0];
- assign tl_s1n_20_ds_d2h[0] = tl_sm1_16_us_d2h[1];
+ assign tl_sm1_17_us_h2d[1] = tl_s1n_21_ds_h2d[0];
+ assign tl_s1n_21_ds_d2h[0] = tl_sm1_17_us_d2h[1];
- assign tl_sm1_17_us_h2d[1] = tl_s1n_20_ds_h2d[1];
- assign tl_s1n_20_ds_d2h[1] = tl_sm1_17_us_d2h[1];
+ assign tl_sm1_18_us_h2d[1] = tl_s1n_21_ds_h2d[1];
+ assign tl_s1n_21_ds_d2h[1] = tl_sm1_18_us_d2h[1];
- assign tl_sm1_18_us_h2d[1] = tl_s1n_20_ds_h2d[2];
- assign tl_s1n_20_ds_d2h[2] = tl_sm1_18_us_d2h[1];
+ assign tl_sm1_19_us_h2d[1] = tl_s1n_21_ds_h2d[2];
+ assign tl_s1n_21_ds_d2h[2] = tl_sm1_19_us_d2h[1];
- assign tl_sm1_19_us_h2d[1] = tl_s1n_20_ds_h2d[3];
- assign tl_s1n_20_ds_d2h[3] = tl_sm1_19_us_d2h[1];
+ assign tl_sm1_20_us_h2d[1] = tl_s1n_21_ds_h2d[3];
+ assign tl_s1n_21_ds_d2h[3] = tl_sm1_20_us_d2h[1];
- assign tl_sm1_21_us_h2d[0] = tl_s1n_20_ds_h2d[4];
- assign tl_s1n_20_ds_d2h[4] = tl_sm1_21_us_d2h[0];
+ assign tl_sm1_22_us_h2d[0] = tl_s1n_21_ds_h2d[4];
+ assign tl_s1n_21_ds_d2h[4] = tl_sm1_22_us_d2h[0];
- assign tl_sm1_22_us_h2d[0] = tl_s1n_20_ds_h2d[5];
- assign tl_s1n_20_ds_d2h[5] = tl_sm1_22_us_d2h[0];
+ assign tl_sm1_23_us_h2d[0] = tl_s1n_21_ds_h2d[5];
+ assign tl_s1n_21_ds_d2h[5] = tl_sm1_23_us_d2h[0];
- assign tl_sm1_23_us_h2d[0] = tl_s1n_20_ds_h2d[6];
- assign tl_s1n_20_ds_d2h[6] = tl_sm1_23_us_d2h[0];
+ assign tl_sm1_24_us_h2d[0] = tl_s1n_21_ds_h2d[6];
+ assign tl_s1n_21_ds_d2h[6] = tl_sm1_24_us_d2h[0];
- assign tl_sm1_24_us_h2d[0] = tl_s1n_20_ds_h2d[7];
- assign tl_s1n_20_ds_d2h[7] = tl_sm1_24_us_d2h[0];
+ assign tl_sm1_25_us_h2d[0] = tl_s1n_21_ds_h2d[7];
+ assign tl_s1n_21_ds_d2h[7] = tl_sm1_25_us_d2h[0];
- assign tl_sm1_25_us_h2d[0] = tl_s1n_20_ds_h2d[8];
- assign tl_s1n_20_ds_d2h[8] = tl_sm1_25_us_d2h[0];
+ assign tl_sm1_26_us_h2d[0] = tl_s1n_21_ds_h2d[8];
+ assign tl_s1n_21_ds_d2h[8] = tl_sm1_26_us_d2h[0];
- assign tl_sm1_26_us_h2d[0] = tl_s1n_20_ds_h2d[9];
- assign tl_s1n_20_ds_d2h[9] = tl_sm1_26_us_d2h[0];
+ assign tl_sm1_27_us_h2d[0] = tl_s1n_21_ds_h2d[9];
+ assign tl_s1n_21_ds_d2h[9] = tl_sm1_27_us_d2h[0];
- assign tl_sm1_27_us_h2d[0] = tl_s1n_20_ds_h2d[10];
- assign tl_s1n_20_ds_d2h[10] = tl_sm1_27_us_d2h[0];
+ assign tl_sm1_28_us_h2d[0] = tl_s1n_21_ds_h2d[10];
+ assign tl_s1n_21_ds_d2h[10] = tl_sm1_28_us_d2h[0];
- assign tl_sm1_28_us_h2d[0] = tl_s1n_20_ds_h2d[11];
- assign tl_s1n_20_ds_d2h[11] = tl_sm1_28_us_d2h[0];
+ assign tl_sm1_29_us_h2d[0] = tl_s1n_21_ds_h2d[11];
+ assign tl_s1n_21_ds_d2h[11] = tl_sm1_29_us_d2h[0];
- assign tl_sm1_16_us_h2d[2] = tl_s1n_29_ds_h2d[0];
- assign tl_s1n_29_ds_d2h[0] = tl_sm1_16_us_d2h[2];
+ assign tl_sm1_30_us_h2d[0] = tl_s1n_21_ds_h2d[12];
+ assign tl_s1n_21_ds_d2h[12] = tl_sm1_30_us_d2h[0];
- assign tl_sm1_18_us_h2d[2] = tl_s1n_29_ds_h2d[1];
- assign tl_s1n_29_ds_d2h[1] = tl_sm1_18_us_d2h[2];
+ assign tl_sm1_17_us_h2d[2] = tl_s1n_31_ds_h2d[0];
+ assign tl_s1n_31_ds_d2h[0] = tl_sm1_17_us_d2h[2];
- assign tl_sm1_19_us_h2d[2] = tl_s1n_29_ds_h2d[2];
- assign tl_s1n_29_ds_d2h[2] = tl_sm1_19_us_d2h[2];
+ assign tl_sm1_19_us_h2d[2] = tl_s1n_31_ds_h2d[1];
+ assign tl_s1n_31_ds_d2h[1] = tl_sm1_19_us_d2h[2];
- assign tl_sm1_21_us_h2d[1] = tl_s1n_29_ds_h2d[3];
- assign tl_s1n_29_ds_d2h[3] = tl_sm1_21_us_d2h[1];
+ assign tl_sm1_20_us_h2d[2] = tl_s1n_31_ds_h2d[2];
+ assign tl_s1n_31_ds_d2h[2] = tl_sm1_20_us_d2h[2];
- assign tl_sm1_22_us_h2d[1] = tl_s1n_29_ds_h2d[4];
- assign tl_s1n_29_ds_d2h[4] = tl_sm1_22_us_d2h[1];
+ assign tl_sm1_22_us_h2d[1] = tl_s1n_31_ds_h2d[3];
+ assign tl_s1n_31_ds_d2h[3] = tl_sm1_22_us_d2h[1];
- assign tl_sm1_23_us_h2d[1] = tl_s1n_29_ds_h2d[5];
- assign tl_s1n_29_ds_d2h[5] = tl_sm1_23_us_d2h[1];
+ assign tl_sm1_23_us_h2d[1] = tl_s1n_31_ds_h2d[4];
+ assign tl_s1n_31_ds_d2h[4] = tl_sm1_23_us_d2h[1];
- assign tl_sm1_24_us_h2d[1] = tl_s1n_29_ds_h2d[6];
- assign tl_s1n_29_ds_d2h[6] = tl_sm1_24_us_d2h[1];
+ assign tl_sm1_24_us_h2d[1] = tl_s1n_31_ds_h2d[5];
+ assign tl_s1n_31_ds_d2h[5] = tl_sm1_24_us_d2h[1];
- assign tl_sm1_25_us_h2d[1] = tl_s1n_29_ds_h2d[7];
- assign tl_s1n_29_ds_d2h[7] = tl_sm1_25_us_d2h[1];
+ assign tl_sm1_25_us_h2d[1] = tl_s1n_31_ds_h2d[6];
+ assign tl_s1n_31_ds_d2h[6] = tl_sm1_25_us_d2h[1];
- assign tl_sm1_26_us_h2d[1] = tl_s1n_29_ds_h2d[8];
- assign tl_s1n_29_ds_d2h[8] = tl_sm1_26_us_d2h[1];
+ assign tl_sm1_26_us_h2d[1] = tl_s1n_31_ds_h2d[7];
+ assign tl_s1n_31_ds_d2h[7] = tl_sm1_26_us_d2h[1];
- assign tl_sm1_27_us_h2d[1] = tl_s1n_29_ds_h2d[9];
- assign tl_s1n_29_ds_d2h[9] = tl_sm1_27_us_d2h[1];
+ assign tl_sm1_27_us_h2d[1] = tl_s1n_31_ds_h2d[8];
+ assign tl_s1n_31_ds_d2h[8] = tl_sm1_27_us_d2h[1];
- assign tl_sm1_28_us_h2d[1] = tl_s1n_29_ds_h2d[10];
- assign tl_s1n_29_ds_d2h[10] = tl_sm1_28_us_d2h[1];
+ assign tl_sm1_28_us_h2d[1] = tl_s1n_31_ds_h2d[9];
+ assign tl_s1n_31_ds_d2h[9] = tl_sm1_28_us_d2h[1];
- assign tl_s1n_15_us_h2d = tl_corei_i;
- assign tl_corei_o = tl_s1n_15_us_d2h;
+ assign tl_sm1_29_us_h2d[1] = tl_s1n_31_ds_h2d[10];
+ assign tl_s1n_31_ds_d2h[10] = tl_sm1_29_us_d2h[1];
- assign tl_rom_o = tl_sm1_16_ds_h2d;
- assign tl_sm1_16_ds_d2h = tl_rom_i;
+ assign tl_sm1_30_us_h2d[1] = tl_s1n_31_ds_h2d[11];
+ assign tl_s1n_31_ds_d2h[11] = tl_sm1_30_us_d2h[1];
- assign tl_debug_mem_o = tl_sm1_17_ds_h2d;
- assign tl_sm1_17_ds_d2h = tl_debug_mem_i;
+ assign tl_s1n_16_us_h2d = tl_corei_i;
+ assign tl_corei_o = tl_s1n_16_us_d2h;
- assign tl_ram_main_o = tl_sm1_18_ds_h2d;
- assign tl_sm1_18_ds_d2h = tl_ram_main_i;
+ assign tl_rom_o = tl_sm1_17_ds_h2d;
+ assign tl_sm1_17_ds_d2h = tl_rom_i;
- assign tl_eflash_o = tl_sm1_19_ds_h2d;
- assign tl_sm1_19_ds_d2h = tl_eflash_i;
+ assign tl_debug_mem_o = tl_sm1_18_ds_h2d;
+ assign tl_sm1_18_ds_d2h = tl_debug_mem_i;
- assign tl_s1n_20_us_h2d = tl_cored_i;
- assign tl_cored_o = tl_s1n_20_us_d2h;
+ assign tl_ram_main_o = tl_sm1_19_ds_h2d;
+ assign tl_sm1_19_ds_d2h = tl_ram_main_i;
- assign tl_uart_o = tl_sm1_21_ds_h2d;
- assign tl_sm1_21_ds_d2h = tl_uart_i;
+ assign tl_eflash_o = tl_sm1_20_ds_h2d;
+ assign tl_sm1_20_ds_d2h = tl_eflash_i;
- assign tl_gpio_o = tl_sm1_22_ds_h2d;
- assign tl_sm1_22_ds_d2h = tl_gpio_i;
+ assign tl_s1n_21_us_h2d = tl_cored_i;
+ assign tl_cored_o = tl_s1n_21_us_d2h;
- assign tl_spi_device_o = tl_sm1_23_ds_h2d;
- assign tl_sm1_23_ds_d2h = tl_spi_device_i;
+ assign tl_uart_o = tl_sm1_22_ds_h2d;
+ assign tl_sm1_22_ds_d2h = tl_uart_i;
- assign tl_flash_ctrl_o = tl_sm1_24_ds_h2d;
- assign tl_sm1_24_ds_d2h = tl_flash_ctrl_i;
+ assign tl_gpio_o = tl_sm1_23_ds_h2d;
+ assign tl_sm1_23_ds_d2h = tl_gpio_i;
- assign tl_rv_timer_o = tl_sm1_25_ds_h2d;
- assign tl_sm1_25_ds_d2h = tl_rv_timer_i;
+ assign tl_spi_device_o = tl_sm1_24_ds_h2d;
+ assign tl_sm1_24_ds_d2h = tl_spi_device_i;
- assign tl_aes_o = tl_sm1_26_ds_h2d;
- assign tl_sm1_26_ds_d2h = tl_aes_i;
+ assign tl_flash_ctrl_o = tl_sm1_25_ds_h2d;
+ assign tl_sm1_25_ds_d2h = tl_flash_ctrl_i;
- assign tl_hmac_o = tl_sm1_27_ds_h2d;
- assign tl_sm1_27_ds_d2h = tl_hmac_i;
+ assign tl_rv_timer_o = tl_sm1_26_ds_h2d;
+ assign tl_sm1_26_ds_d2h = tl_rv_timer_i;
- assign tl_rv_plic_o = tl_sm1_28_ds_h2d;
- assign tl_sm1_28_ds_d2h = tl_rv_plic_i;
+ assign tl_aes_o = tl_sm1_27_ds_h2d;
+ assign tl_sm1_27_ds_d2h = tl_aes_i;
- assign tl_s1n_29_us_h2d = tl_dm_sba_i;
- assign tl_dm_sba_o = tl_s1n_29_us_d2h;
+ assign tl_hmac_o = tl_sm1_28_ds_h2d;
+ assign tl_sm1_28_ds_d2h = tl_hmac_i;
+
+ assign tl_rv_plic_o = tl_sm1_29_ds_h2d;
+ assign tl_sm1_29_ds_d2h = tl_rv_plic_i;
+
+ assign tl_pinmux_o = tl_sm1_30_ds_h2d;
+ assign tl_sm1_30_ds_d2h = tl_pinmux_i;
+
+ assign tl_s1n_31_us_h2d = tl_dm_sba_i;
+ assign tl_dm_sba_o = tl_s1n_31_us_d2h;
always_comb begin
// default steering to generate error response if address is not within the range
- dev_sel_s1n_15 = 3'd4;
- if ((tl_s1n_15_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
- dev_sel_s1n_15 = 3'd0;
- end else if ((tl_s1n_15_us_h2d.a_address & ~(ADDR_MASK_DEBUG_MEM)) == ADDR_SPACE_DEBUG_MEM) begin
- dev_sel_s1n_15 = 3'd1;
- end else if ((tl_s1n_15_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
- dev_sel_s1n_15 = 3'd2;
- end else if ((tl_s1n_15_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
- dev_sel_s1n_15 = 3'd3;
+ dev_sel_s1n_16 = 3'd4;
+ if ((tl_s1n_16_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
+ dev_sel_s1n_16 = 3'd0;
+ end else if ((tl_s1n_16_us_h2d.a_address & ~(ADDR_MASK_DEBUG_MEM)) == ADDR_SPACE_DEBUG_MEM) begin
+ dev_sel_s1n_16 = 3'd1;
+ end else if ((tl_s1n_16_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
+ dev_sel_s1n_16 = 3'd2;
+ end else if ((tl_s1n_16_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
+ dev_sel_s1n_16 = 3'd3;
end
end
always_comb begin
// default steering to generate error response if address is not within the range
- dev_sel_s1n_20 = 4'd12;
- if ((tl_s1n_20_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
- dev_sel_s1n_20 = 4'd0;
- end else if ((tl_s1n_20_us_h2d.a_address & ~(ADDR_MASK_DEBUG_MEM)) == ADDR_SPACE_DEBUG_MEM) begin
- dev_sel_s1n_20 = 4'd1;
- end else if ((tl_s1n_20_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
- dev_sel_s1n_20 = 4'd2;
- end else if ((tl_s1n_20_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
- dev_sel_s1n_20 = 4'd3;
- end else if ((tl_s1n_20_us_h2d.a_address & ~(ADDR_MASK_UART)) == ADDR_SPACE_UART) begin
- dev_sel_s1n_20 = 4'd4;
- end else if ((tl_s1n_20_us_h2d.a_address & ~(ADDR_MASK_GPIO)) == ADDR_SPACE_GPIO) begin
- dev_sel_s1n_20 = 4'd5;
- end else if ((tl_s1n_20_us_h2d.a_address & ~(ADDR_MASK_SPI_DEVICE)) == ADDR_SPACE_SPI_DEVICE) begin
- dev_sel_s1n_20 = 4'd6;
- end else if ((tl_s1n_20_us_h2d.a_address & ~(ADDR_MASK_FLASH_CTRL)) == ADDR_SPACE_FLASH_CTRL) begin
- dev_sel_s1n_20 = 4'd7;
- end else if ((tl_s1n_20_us_h2d.a_address & ~(ADDR_MASK_RV_TIMER)) == ADDR_SPACE_RV_TIMER) begin
- dev_sel_s1n_20 = 4'd8;
- end else if ((tl_s1n_20_us_h2d.a_address & ~(ADDR_MASK_AES)) == ADDR_SPACE_AES) begin
- dev_sel_s1n_20 = 4'd9;
- end else if ((tl_s1n_20_us_h2d.a_address & ~(ADDR_MASK_HMAC)) == ADDR_SPACE_HMAC) begin
- dev_sel_s1n_20 = 4'd10;
- end else if ((tl_s1n_20_us_h2d.a_address & ~(ADDR_MASK_RV_PLIC)) == ADDR_SPACE_RV_PLIC) begin
- dev_sel_s1n_20 = 4'd11;
+ dev_sel_s1n_21 = 4'd13;
+ if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
+ dev_sel_s1n_21 = 4'd0;
+ end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_DEBUG_MEM)) == ADDR_SPACE_DEBUG_MEM) begin
+ dev_sel_s1n_21 = 4'd1;
+ end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
+ dev_sel_s1n_21 = 4'd2;
+ end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
+ dev_sel_s1n_21 = 4'd3;
+ end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_UART)) == ADDR_SPACE_UART) begin
+ dev_sel_s1n_21 = 4'd4;
+ end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_GPIO)) == ADDR_SPACE_GPIO) begin
+ dev_sel_s1n_21 = 4'd5;
+ end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_SPI_DEVICE)) == ADDR_SPACE_SPI_DEVICE) begin
+ dev_sel_s1n_21 = 4'd6;
+ end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_FLASH_CTRL)) == ADDR_SPACE_FLASH_CTRL) begin
+ dev_sel_s1n_21 = 4'd7;
+ end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_RV_TIMER)) == ADDR_SPACE_RV_TIMER) begin
+ dev_sel_s1n_21 = 4'd8;
+ end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_AES)) == ADDR_SPACE_AES) begin
+ dev_sel_s1n_21 = 4'd9;
+ end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_HMAC)) == ADDR_SPACE_HMAC) begin
+ dev_sel_s1n_21 = 4'd10;
+ end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_RV_PLIC)) == ADDR_SPACE_RV_PLIC) begin
+ dev_sel_s1n_21 = 4'd11;
+ end else if ((tl_s1n_21_us_h2d.a_address & ~(ADDR_MASK_PINMUX)) == ADDR_SPACE_PINMUX) begin
+ dev_sel_s1n_21 = 4'd12;
end
end
always_comb begin
// default steering to generate error response if address is not within the range
- dev_sel_s1n_29 = 4'd11;
- if ((tl_s1n_29_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
- dev_sel_s1n_29 = 4'd0;
- end else if ((tl_s1n_29_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
- dev_sel_s1n_29 = 4'd1;
- end else if ((tl_s1n_29_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
- dev_sel_s1n_29 = 4'd2;
- end else if ((tl_s1n_29_us_h2d.a_address & ~(ADDR_MASK_UART)) == ADDR_SPACE_UART) begin
- dev_sel_s1n_29 = 4'd3;
- end else if ((tl_s1n_29_us_h2d.a_address & ~(ADDR_MASK_GPIO)) == ADDR_SPACE_GPIO) begin
- dev_sel_s1n_29 = 4'd4;
- end else if ((tl_s1n_29_us_h2d.a_address & ~(ADDR_MASK_SPI_DEVICE)) == ADDR_SPACE_SPI_DEVICE) begin
- dev_sel_s1n_29 = 4'd5;
- end else if ((tl_s1n_29_us_h2d.a_address & ~(ADDR_MASK_FLASH_CTRL)) == ADDR_SPACE_FLASH_CTRL) begin
- dev_sel_s1n_29 = 4'd6;
- end else if ((tl_s1n_29_us_h2d.a_address & ~(ADDR_MASK_RV_TIMER)) == ADDR_SPACE_RV_TIMER) begin
- dev_sel_s1n_29 = 4'd7;
- end else if ((tl_s1n_29_us_h2d.a_address & ~(ADDR_MASK_AES)) == ADDR_SPACE_AES) begin
- dev_sel_s1n_29 = 4'd8;
- end else if ((tl_s1n_29_us_h2d.a_address & ~(ADDR_MASK_HMAC)) == ADDR_SPACE_HMAC) begin
- dev_sel_s1n_29 = 4'd9;
- end else if ((tl_s1n_29_us_h2d.a_address & ~(ADDR_MASK_RV_PLIC)) == ADDR_SPACE_RV_PLIC) begin
- dev_sel_s1n_29 = 4'd10;
+ dev_sel_s1n_31 = 4'd12;
+ if ((tl_s1n_31_us_h2d.a_address & ~(ADDR_MASK_ROM)) == ADDR_SPACE_ROM) begin
+ dev_sel_s1n_31 = 4'd0;
+ end else if ((tl_s1n_31_us_h2d.a_address & ~(ADDR_MASK_RAM_MAIN)) == ADDR_SPACE_RAM_MAIN) begin
+ dev_sel_s1n_31 = 4'd1;
+ end else if ((tl_s1n_31_us_h2d.a_address & ~(ADDR_MASK_EFLASH)) == ADDR_SPACE_EFLASH) begin
+ dev_sel_s1n_31 = 4'd2;
+ end else if ((tl_s1n_31_us_h2d.a_address & ~(ADDR_MASK_UART)) == ADDR_SPACE_UART) begin
+ dev_sel_s1n_31 = 4'd3;
+ end else if ((tl_s1n_31_us_h2d.a_address & ~(ADDR_MASK_GPIO)) == ADDR_SPACE_GPIO) begin
+ dev_sel_s1n_31 = 4'd4;
+ end else if ((tl_s1n_31_us_h2d.a_address & ~(ADDR_MASK_SPI_DEVICE)) == ADDR_SPACE_SPI_DEVICE) begin
+ dev_sel_s1n_31 = 4'd5;
+ end else if ((tl_s1n_31_us_h2d.a_address & ~(ADDR_MASK_FLASH_CTRL)) == ADDR_SPACE_FLASH_CTRL) begin
+ dev_sel_s1n_31 = 4'd6;
+ end else if ((tl_s1n_31_us_h2d.a_address & ~(ADDR_MASK_RV_TIMER)) == ADDR_SPACE_RV_TIMER) begin
+ dev_sel_s1n_31 = 4'd7;
+ end else if ((tl_s1n_31_us_h2d.a_address & ~(ADDR_MASK_AES)) == ADDR_SPACE_AES) begin
+ dev_sel_s1n_31 = 4'd8;
+ end else if ((tl_s1n_31_us_h2d.a_address & ~(ADDR_MASK_HMAC)) == ADDR_SPACE_HMAC) begin
+ dev_sel_s1n_31 = 4'd9;
+ end else if ((tl_s1n_31_us_h2d.a_address & ~(ADDR_MASK_RV_PLIC)) == ADDR_SPACE_RV_PLIC) begin
+ dev_sel_s1n_31 = 4'd10;
+ end else if ((tl_s1n_31_us_h2d.a_address & ~(ADDR_MASK_PINMUX)) == ADDR_SPACE_PINMUX) begin
+ dev_sel_s1n_31 = 4'd11;
end
end
@@ -433,14 +459,14 @@
.DReqDepth ({4{4'h0}}),
.DRspDepth ({4{4'h0}}),
.N (4)
- ) u_s1n_15 (
+ ) u_s1n_16 (
.clk_i (clk_main_i),
.rst_ni (rst_main_ni),
- .tl_h_i (tl_s1n_15_us_h2d),
- .tl_h_o (tl_s1n_15_us_d2h),
- .tl_d_o (tl_s1n_15_ds_h2d),
- .tl_d_i (tl_s1n_15_ds_d2h),
- .dev_select (dev_sel_s1n_15)
+ .tl_h_i (tl_s1n_16_us_h2d),
+ .tl_h_o (tl_s1n_16_us_d2h),
+ .tl_d_o (tl_s1n_16_ds_h2d),
+ .tl_d_i (tl_s1n_16_ds_d2h),
+ .dev_select (dev_sel_s1n_16)
);
tlul_socket_m1 #(
.HReqDepth ({3{4'h0}}),
@@ -448,20 +474,6 @@
.DReqDepth (4'h0),
.DRspDepth (4'h0),
.M (3)
- ) u_sm1_16 (
- .clk_i (clk_main_i),
- .rst_ni (rst_main_ni),
- .tl_h_i (tl_sm1_16_us_h2d),
- .tl_h_o (tl_sm1_16_us_d2h),
- .tl_d_o (tl_sm1_16_ds_h2d),
- .tl_d_i (tl_sm1_16_ds_d2h)
- );
- tlul_socket_m1 #(
- .HReqPass (2'h0),
- .HRspPass (2'h0),
- .DReqPass (1'b0),
- .DRspPass (1'b0),
- .M (2)
) u_sm1_17 (
.clk_i (clk_main_i),
.rst_ni (rst_main_ni),
@@ -471,11 +483,11 @@
.tl_d_i (tl_sm1_17_ds_d2h)
);
tlul_socket_m1 #(
- .HReqDepth ({3{4'h0}}),
- .HRspDepth ({3{4'h0}}),
- .DReqDepth (4'h0),
- .DRspDepth (4'h0),
- .M (3)
+ .HReqPass (2'h0),
+ .HRspPass (2'h0),
+ .DReqPass (1'b0),
+ .DRspPass (1'b0),
+ .M (2)
) u_sm1_18 (
.clk_i (clk_main_i),
.rst_ni (rst_main_ni),
@@ -498,34 +510,34 @@
.tl_d_o (tl_sm1_19_ds_h2d),
.tl_d_i (tl_sm1_19_ds_d2h)
);
+ tlul_socket_m1 #(
+ .HReqDepth ({3{4'h0}}),
+ .HRspDepth ({3{4'h0}}),
+ .DReqDepth (4'h0),
+ .DRspDepth (4'h0),
+ .M (3)
+ ) u_sm1_20 (
+ .clk_i (clk_main_i),
+ .rst_ni (rst_main_ni),
+ .tl_h_i (tl_sm1_20_us_h2d),
+ .tl_h_o (tl_sm1_20_us_d2h),
+ .tl_d_o (tl_sm1_20_ds_h2d),
+ .tl_d_i (tl_sm1_20_ds_d2h)
+ );
tlul_socket_1n #(
.HReqDepth (4'h0),
.HRspDepth (4'h0),
- .DReqDepth ({12{4'h0}}),
- .DRspDepth ({12{4'h0}}),
- .N (12)
- ) u_s1n_20 (
+ .DReqDepth ({13{4'h0}}),
+ .DRspDepth ({13{4'h0}}),
+ .N (13)
+ ) u_s1n_21 (
.clk_i (clk_main_i),
.rst_ni (rst_main_ni),
- .tl_h_i (tl_s1n_20_us_h2d),
- .tl_h_o (tl_s1n_20_us_d2h),
- .tl_d_o (tl_s1n_20_ds_h2d),
- .tl_d_i (tl_s1n_20_ds_d2h),
- .dev_select (dev_sel_s1n_20)
- );
- tlul_socket_m1 #(
- .HReqPass (2'h0),
- .HRspPass (2'h0),
- .DReqPass (1'b0),
- .DRspPass (1'b0),
- .M (2)
- ) u_sm1_21 (
- .clk_i (clk_main_i),
- .rst_ni (rst_main_ni),
- .tl_h_i (tl_sm1_21_us_h2d),
- .tl_h_o (tl_sm1_21_us_d2h),
- .tl_d_o (tl_sm1_21_ds_h2d),
- .tl_d_i (tl_sm1_21_ds_d2h)
+ .tl_h_i (tl_s1n_21_us_h2d),
+ .tl_h_o (tl_s1n_21_us_d2h),
+ .tl_d_o (tl_s1n_21_ds_h2d),
+ .tl_d_i (tl_s1n_21_ds_d2h),
+ .dev_select (dev_sel_s1n_21)
);
tlul_socket_m1 #(
.HReqPass (2'h0),
@@ -625,20 +637,48 @@
.tl_d_o (tl_sm1_28_ds_h2d),
.tl_d_i (tl_sm1_28_ds_d2h)
);
+ tlul_socket_m1 #(
+ .HReqPass (2'h0),
+ .HRspPass (2'h0),
+ .DReqPass (1'b0),
+ .DRspPass (1'b0),
+ .M (2)
+ ) u_sm1_29 (
+ .clk_i (clk_main_i),
+ .rst_ni (rst_main_ni),
+ .tl_h_i (tl_sm1_29_us_h2d),
+ .tl_h_o (tl_sm1_29_us_d2h),
+ .tl_d_o (tl_sm1_29_ds_h2d),
+ .tl_d_i (tl_sm1_29_ds_d2h)
+ );
+ tlul_socket_m1 #(
+ .HReqPass (2'h0),
+ .HRspPass (2'h0),
+ .DReqPass (1'b0),
+ .DRspPass (1'b0),
+ .M (2)
+ ) u_sm1_30 (
+ .clk_i (clk_main_i),
+ .rst_ni (rst_main_ni),
+ .tl_h_i (tl_sm1_30_us_h2d),
+ .tl_h_o (tl_sm1_30_us_d2h),
+ .tl_d_o (tl_sm1_30_ds_h2d),
+ .tl_d_i (tl_sm1_30_ds_d2h)
+ );
tlul_socket_1n #(
.HReqPass (1'b0),
.HRspPass (1'b0),
- .DReqPass (11'h0),
- .DRspPass (11'h0),
- .N (11)
- ) u_s1n_29 (
+ .DReqPass (12'h0),
+ .DRspPass (12'h0),
+ .N (12)
+ ) u_s1n_31 (
.clk_i (clk_main_i),
.rst_ni (rst_main_ni),
- .tl_h_i (tl_s1n_29_us_h2d),
- .tl_h_o (tl_s1n_29_us_d2h),
- .tl_d_o (tl_s1n_29_ds_h2d),
- .tl_d_i (tl_s1n_29_ds_d2h),
- .dev_select (dev_sel_s1n_29)
+ .tl_h_i (tl_s1n_31_us_h2d),
+ .tl_h_o (tl_s1n_31_us_d2h),
+ .tl_d_o (tl_s1n_31_ds_h2d),
+ .tl_d_i (tl_s1n_31_ds_d2h),
+ .dev_select (dev_sel_s1n_31)
);
endmodule
diff --git a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
index 4c0452c..6d064bb 100644
--- a/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
+++ b/hw/top_earlgrey/rtl/autogen/top_earlgrey.sv
@@ -16,25 +16,20 @@
input jtag_td_i,
output jtag_td_o,
- // uart
- input cio_uart_rx_p2d_i,
- output cio_uart_tx_d2p_o,
- output cio_uart_tx_en_d2p_o,
- // gpio
- input [31:0] cio_gpio_gpio_p2d_i,
- output [31:0] cio_gpio_gpio_d2p_o,
- output [31:0] cio_gpio_gpio_en_d2p_o,
- // spi_device
- input cio_spi_device_sck_p2d_i,
- input cio_spi_device_csb_p2d_i,
- input cio_spi_device_mosi_p2d_i,
- output cio_spi_device_miso_d2p_o,
- output cio_spi_device_miso_en_d2p_o,
- // flash_ctrl
- // rv_timer
- // aes
- // hmac
- // rv_plic
+ // Multiplexed I/O
+ input [31:0] mio_in_i,
+ output logic [31:0] mio_out_o,
+ output logic [31:0] mio_oe_o,
+
+ // Dedicated I/O
+ input dio_spi_device_sck_i,
+ input dio_spi_device_csb_i,
+ input dio_spi_device_mosi_i,
+ output logic dio_spi_device_miso_o,
+ output logic dio_spi_device_miso_en_o,
+ input dio_uart_rx_i,
+ output logic dio_uart_tx_o,
+ output logic dio_uart_tx_en_o,
input scanmode_i // 1 for Scan
);
@@ -84,6 +79,8 @@
tl_d2h_t tl_hmac_d_d2h;
tl_h2d_t tl_rv_plic_d_h2d;
tl_d2h_t tl_rv_plic_d_d2h;
+ tl_h2d_t tl_pinmux_d_h2d;
+ tl_d2h_t tl_pinmux_d_d2h;
tl_h2d_t tl_rom_d_h2d;
tl_d2h_t tl_rom_d_d2h;
@@ -100,6 +97,32 @@
//clock wires declaration
logic main_clk;
+ // Signals
+ logic [31:0] m2p;
+ logic [31:0] p2m;
+ logic [31:0] p2m_en;
+ // uart
+ logic cio_uart_rx_p2d;
+ logic cio_uart_tx_d2p;
+ logic cio_uart_tx_en_d2p;
+ // gpio
+ logic [31:0] cio_gpio_gpio_p2d;
+ logic [31:0] cio_gpio_gpio_d2p;
+ logic [31:0] cio_gpio_gpio_en_d2p;
+ // spi_device
+ logic cio_spi_device_sck_p2d;
+ logic cio_spi_device_csb_p2d;
+ logic cio_spi_device_mosi_p2d;
+ logic cio_spi_device_miso_d2p;
+ logic cio_spi_device_miso_en_d2p;
+ // flash_ctrl
+ // rv_timer
+ // aes
+ // hmac
+ // rv_plic
+ // pinmux
+
+
logic [54:0] intr_vector;
// Interrupt source list
logic intr_uart_tx_watermark;
@@ -366,16 +389,22 @@
uart uart (
.tl_i (tl_uart_d_h2d),
.tl_o (tl_uart_d_d2h),
- .cio_rx_i (cio_uart_rx_p2d_i),
- .cio_tx_o (cio_uart_tx_d2p_o),
- .cio_tx_en_o (cio_uart_tx_en_d2p_o),
- .intr_tx_watermark_o (intr_uart_tx_watermark),
- .intr_rx_watermark_o (intr_uart_rx_watermark),
- .intr_tx_overflow_o (intr_uart_tx_overflow),
- .intr_rx_overflow_o (intr_uart_rx_overflow),
- .intr_rx_frame_err_o (intr_uart_rx_frame_err),
- .intr_rx_break_err_o (intr_uart_rx_break_err),
- .intr_rx_timeout_o (intr_uart_rx_timeout),
+
+ // Input
+ .cio_rx_i (cio_uart_rx_p2d),
+
+ // Output
+ .cio_tx_o (cio_uart_tx_d2p),
+ .cio_tx_en_o (cio_uart_tx_en_d2p),
+
+ // Interrupt
+ .intr_tx_watermark_o (intr_uart_tx_watermark),
+ .intr_rx_watermark_o (intr_uart_rx_watermark),
+ .intr_tx_overflow_o (intr_uart_tx_overflow),
+ .intr_rx_overflow_o (intr_uart_rx_overflow),
+ .intr_rx_frame_err_o (intr_uart_rx_frame_err),
+ .intr_rx_break_err_o (intr_uart_rx_break_err),
+ .intr_rx_timeout_o (intr_uart_rx_timeout),
.intr_rx_parity_err_o (intr_uart_rx_parity_err),
.clk_i (main_clk),
@@ -385,9 +414,15 @@
gpio gpio (
.tl_i (tl_gpio_d_h2d),
.tl_o (tl_gpio_d_d2h),
- .cio_gpio_i (cio_gpio_gpio_p2d_i),
- .cio_gpio_o (cio_gpio_gpio_d2p_o),
- .cio_gpio_en_o (cio_gpio_gpio_en_d2p_o),
+
+ // Input
+ .cio_gpio_i (cio_gpio_gpio_p2d),
+
+ // Output
+ .cio_gpio_o (cio_gpio_gpio_d2p),
+ .cio_gpio_en_o (cio_gpio_gpio_en_d2p),
+
+ // Interrupt
.intr_gpio_o (intr_gpio_gpio),
.clk_i (main_clk),
@@ -397,19 +432,26 @@
spi_device spi_device (
.tl_i (tl_spi_device_d_h2d),
.tl_o (tl_spi_device_d_d2h),
- .cio_sck_i (cio_spi_device_sck_p2d_i),
- .cio_csb_i (cio_spi_device_csb_p2d_i),
- .cio_mosi_i (cio_spi_device_mosi_p2d_i),
- .cio_miso_o (cio_spi_device_miso_d2p_o),
- .cio_miso_en_o (cio_spi_device_miso_en_d2p_o),
- .intr_rxf_o (intr_spi_device_rxf),
- .intr_rxlvl_o (intr_spi_device_rxlvl),
- .intr_txlvl_o (intr_spi_device_txlvl),
- .intr_rxerr_o (intr_spi_device_rxerr),
- .intr_rxoverflow_o (intr_spi_device_rxoverflow),
+
+ // Input
+ .cio_sck_i (cio_spi_device_sck_p2d),
+ .cio_csb_i (cio_spi_device_csb_p2d),
+ .cio_mosi_i (cio_spi_device_mosi_p2d),
+
+ // Output
+ .cio_miso_o (cio_spi_device_miso_d2p),
+ .cio_miso_en_o (cio_spi_device_miso_en_d2p),
+
+ // Interrupt
+ .intr_rxf_o (intr_spi_device_rxf),
+ .intr_rxlvl_o (intr_spi_device_rxlvl),
+ .intr_txlvl_o (intr_spi_device_txlvl),
+ .intr_rxerr_o (intr_spi_device_rxerr),
+ .intr_rxoverflow_o (intr_spi_device_rxoverflow),
.intr_txunderflow_o (intr_spi_device_txunderflow),
.scanmode_i (scanmode_i),
+
.clk_i (main_clk),
.rst_ni (spi_device_rst_n)
);
@@ -417,12 +459,15 @@
flash_ctrl flash_ctrl (
.tl_i (tl_flash_ctrl_d_h2d),
.tl_o (tl_flash_ctrl_d_d2h),
+
+ // Interrupt
.intr_prog_empty_o (intr_flash_ctrl_prog_empty),
- .intr_prog_lvl_o (intr_flash_ctrl_prog_lvl),
- .intr_rd_full_o (intr_flash_ctrl_rd_full),
- .intr_rd_lvl_o (intr_flash_ctrl_rd_lvl),
- .intr_op_done_o (intr_flash_ctrl_op_done),
- .intr_op_error_o (intr_flash_ctrl_op_error),
+ .intr_prog_lvl_o (intr_flash_ctrl_prog_lvl),
+ .intr_rd_full_o (intr_flash_ctrl_rd_full),
+ .intr_rd_lvl_o (intr_flash_ctrl_rd_lvl),
+ .intr_op_done_o (intr_flash_ctrl_op_done),
+ .intr_op_error_o (intr_flash_ctrl_op_error),
+
.flash_o(flash_c2m),
.flash_i(flash_m2c),
@@ -433,6 +478,8 @@
rv_timer rv_timer (
.tl_i (tl_rv_timer_d_h2d),
.tl_o (tl_rv_timer_d_d2h),
+
+ // Interrupt
.intr_timer_expired_0_0_o (intr_rv_timer_timer_expired_0_0),
.clk_i (main_clk),
@@ -450,9 +497,11 @@
hmac hmac (
.tl_i (tl_hmac_d_h2d),
.tl_o (tl_hmac_d_d2h),
+
+ // Interrupt
.intr_hmac_done_o (intr_hmac_hmac_done),
.intr_fifo_full_o (intr_hmac_fifo_full),
- .intr_hmac_err_o (intr_hmac_hmac_err),
+ .intr_hmac_err_o (intr_hmac_hmac_err),
.clk_i (main_clk),
.rst_ni (sys_rst_n)
@@ -463,6 +512,7 @@
) rv_plic (
.tl_i (tl_rv_plic_d_h2d),
.tl_o (tl_rv_plic_d_d2h),
+
.intr_src_i (intr_vector),
.irq_o (irq_plic),
.irq_id_o (irq_id),
@@ -472,6 +522,22 @@
.rst_ni (sys_rst_n)
);
+ pinmux pinmux (
+ .tl_i (tl_pinmux_d_h2d),
+ .tl_o (tl_pinmux_d_d2h),
+
+ .periph_to_mio_i (p2m ),
+ .periph_to_mio_oe_i (p2m_en ),
+ .mio_to_periph_o (m2p ),
+
+ .mio_out_o (mio_out_o),
+ .mio_oe_o (mio_oe_o ),
+ .mio_in_i (mio_in_i ),
+
+ .clk_i (main_clk),
+ .rst_ni (sys_rst_n)
+ );
+
// interrupt assignments
assign intr_vector = {
intr_hmac_hmac_err,
@@ -534,10 +600,32 @@
.tl_aes_i (tl_aes_d_d2h),
.tl_rv_plic_o (tl_rv_plic_d_h2d),
.tl_rv_plic_i (tl_rv_plic_d_d2h),
+ .tl_pinmux_o (tl_pinmux_d_h2d),
+ .tl_pinmux_i (tl_pinmux_d_d2h),
.scanmode_i
);
+ // Pinmux connections
+ assign p2m = {
+ cio_gpio_gpio_d2p
+ };
+ assign p2m_en = {
+ cio_gpio_gpio_en_d2p
+ };
+ assign {
+ cio_gpio_gpio_p2d
+ } = m2p;
+
+ assign cio_spi_device_sck_p2d = dio_spi_device_sck_i;
+ assign cio_spi_device_csb_p2d = dio_spi_device_csb_i;
+ assign cio_spi_device_mosi_p2d = dio_spi_device_mosi_i;
+ assign dio_spi_device_miso_o = cio_spi_device_miso_d2p;
+ assign dio_spi_device_miso_en_o = cio_spi_device_miso_en_d2p;
+ assign cio_uart_rx_p2d = dio_uart_rx_i;
+ assign dio_uart_tx_o = cio_uart_tx_d2p;
+ assign dio_uart_tx_en_o = cio_uart_tx_en_d2p;
+
// make sure scanmode_i is never X (including during reset)
`ASSERT_KNOWN(scanmodeKnown, scanmode_i, clk_i, 0)
diff --git a/hw/top_earlgrey/sw/autogen/top_earlgrey.h b/hw/top_earlgrey/sw/autogen/top_earlgrey.h
new file mode 100644
index 0000000..067b74e
--- /dev/null
+++ b/hw/top_earlgrey/sw/autogen/top_earlgrey.h
@@ -0,0 +1,82 @@
+// Copyright lowRISC contributors.
+// Licensed under the Apache License, Version 2.0, see LICENSE for details.
+// SPDX-License-Identifier: Apache-2.0
+
+#ifndef _TOP_EARLGREY_H_
+#define _TOP_EARLGREY_H_
+
+// PERIPH_INSEL ranges from 0 to NUM_MIO + 2 -1}
+// 0 and 1 are tied to value 0 and 1
+#define NUM_MIO 32
+#define NUM_DIO 6
+
+#define PINMUX_GPIO_GPIO_0_IN 0
+#define PINMUX_GPIO_GPIO_1_IN 1
+#define PINMUX_GPIO_GPIO_2_IN 2
+#define PINMUX_GPIO_GPIO_3_IN 3
+#define PINMUX_GPIO_GPIO_4_IN 4
+#define PINMUX_GPIO_GPIO_5_IN 5
+#define PINMUX_GPIO_GPIO_6_IN 6
+#define PINMUX_GPIO_GPIO_7_IN 7
+#define PINMUX_GPIO_GPIO_8_IN 8
+#define PINMUX_GPIO_GPIO_9_IN 9
+#define PINMUX_GPIO_GPIO_10_IN 10
+#define PINMUX_GPIO_GPIO_11_IN 11
+#define PINMUX_GPIO_GPIO_12_IN 12
+#define PINMUX_GPIO_GPIO_13_IN 13
+#define PINMUX_GPIO_GPIO_14_IN 14
+#define PINMUX_GPIO_GPIO_15_IN 15
+#define PINMUX_GPIO_GPIO_16_IN 16
+#define PINMUX_GPIO_GPIO_17_IN 17
+#define PINMUX_GPIO_GPIO_18_IN 18
+#define PINMUX_GPIO_GPIO_19_IN 19
+#define PINMUX_GPIO_GPIO_20_IN 20
+#define PINMUX_GPIO_GPIO_21_IN 21
+#define PINMUX_GPIO_GPIO_22_IN 22
+#define PINMUX_GPIO_GPIO_23_IN 23
+#define PINMUX_GPIO_GPIO_24_IN 24
+#define PINMUX_GPIO_GPIO_25_IN 25
+#define PINMUX_GPIO_GPIO_26_IN 26
+#define PINMUX_GPIO_GPIO_27_IN 27
+#define PINMUX_GPIO_GPIO_28_IN 28
+#define PINMUX_GPIO_GPIO_29_IN 29
+#define PINMUX_GPIO_GPIO_30_IN 30
+#define PINMUX_GPIO_GPIO_31_IN 31
+
+#define PINMUX_VALUE_0_OUT 0
+#define PINMUX_VALUE_1_OUT 1
+#define PINMUX_VALUE_Z_OUT 2
+#define PINMUX_GPIO_GPIO_0_OUT 3
+#define PINMUX_GPIO_GPIO_1_OUT 4
+#define PINMUX_GPIO_GPIO_2_OUT 5
+#define PINMUX_GPIO_GPIO_3_OUT 6
+#define PINMUX_GPIO_GPIO_4_OUT 7
+#define PINMUX_GPIO_GPIO_5_OUT 8
+#define PINMUX_GPIO_GPIO_6_OUT 9
+#define PINMUX_GPIO_GPIO_7_OUT 10
+#define PINMUX_GPIO_GPIO_8_OUT 11
+#define PINMUX_GPIO_GPIO_9_OUT 12
+#define PINMUX_GPIO_GPIO_10_OUT 13
+#define PINMUX_GPIO_GPIO_11_OUT 14
+#define PINMUX_GPIO_GPIO_12_OUT 15
+#define PINMUX_GPIO_GPIO_13_OUT 16
+#define PINMUX_GPIO_GPIO_14_OUT 17
+#define PINMUX_GPIO_GPIO_15_OUT 18
+#define PINMUX_GPIO_GPIO_16_OUT 19
+#define PINMUX_GPIO_GPIO_17_OUT 20
+#define PINMUX_GPIO_GPIO_18_OUT 21
+#define PINMUX_GPIO_GPIO_19_OUT 22
+#define PINMUX_GPIO_GPIO_20_OUT 23
+#define PINMUX_GPIO_GPIO_21_OUT 24
+#define PINMUX_GPIO_GPIO_22_OUT 25
+#define PINMUX_GPIO_GPIO_23_OUT 26
+#define PINMUX_GPIO_GPIO_24_OUT 27
+#define PINMUX_GPIO_GPIO_25_OUT 28
+#define PINMUX_GPIO_GPIO_26_OUT 29
+#define PINMUX_GPIO_GPIO_27_OUT 30
+#define PINMUX_GPIO_GPIO_28_OUT 31
+#define PINMUX_GPIO_GPIO_29_OUT 32
+#define PINMUX_GPIO_GPIO_30_OUT 33
+#define PINMUX_GPIO_GPIO_31_OUT 34
+
+#endif // _TOP_EARLGREY_H_