[padring] Add parameters for MIO/DIO pad types
Signed-off-by: Michael Schaffner <msf@google.com>
diff --git a/hw/ip/padctrl/rtl/padring.sv b/hw/ip/padctrl/rtl/padring.sv
index d891011..f11f5c9 100644
--- a/hw/ip/padctrl/rtl/padring.sv
+++ b/hw/ip/padctrl/rtl/padring.sv
@@ -15,7 +15,11 @@
parameter logic [NMioPads-1:0] ConnectMioIn = '1,
parameter logic [NMioPads-1:0] ConnectMioOut = '1,
parameter logic [NDioPads-1:0] ConnectDioIn = '1,
- parameter logic [NDioPads-1:0] ConnectDioOut = '1
+ parameter logic [NDioPads-1:0] ConnectDioOut = '1,
+
+ // 0: bidir, 1: input, 2: tolerant, 3: open drain
+ parameter int MioPadVariant [NMioPads] = '{default: 0},
+ parameter int DioPadVariant [NDioPads] = '{default: 0}
) (
// pad input
input wire clk_pad_i,
@@ -56,7 +60,8 @@
assign rst_n = rst_pad_ni;
prim_pad_wrapper #(
- .AttrDw ( AttrDw )
+ .AttrDw ( AttrDw ),
+ .Variant ( 1 ) // input-only
) i_clk_pad (
.inout_io ( clk ),
.in_o ( clk_o ),
@@ -68,7 +73,8 @@
);
prim_pad_wrapper #(
- .AttrDw ( AttrDw )
+ .AttrDw ( AttrDw ),
+ .Variant ( 1 ) // input-only
) i_clk_usb_48mhz_pad (
.inout_io ( clk_usb_48mhz ),
.in_o ( clk_usb_48mhz_o ),
@@ -80,7 +86,8 @@
);
prim_pad_wrapper #(
- .AttrDw ( AttrDw )
+ .AttrDw ( AttrDw ),
+ .Variant ( 1 ) // input-only
) i_rst_pad (
.inout_io ( rst_n ),
.in_o ( rst_no ),
@@ -98,7 +105,8 @@
for (genvar k = 0; k < NMioPads; k++) begin : gen_mio_pads
if (ConnectMioIn[k] && ConnectMioOut[k]) begin : gen_mio_inout
prim_pad_wrapper #(
- .AttrDw ( AttrDw )
+ .AttrDw ( AttrDw ),
+ .Variant ( MioPadVariant[k] )
) i_mio_pad (
.inout_io ( mio_pad_io[k] ),
.in_o ( mio_in_o[k] ),
@@ -110,7 +118,8 @@
);
end else if (ConnectMioOut[k]) begin : gen_mio_output
prim_pad_wrapper #(
- .AttrDw ( AttrDw )
+ .AttrDw ( AttrDw ),
+ .Variant ( MioPadVariant[k] )
) i_mio_pad (
.inout_io ( mio_pad_io[k] ),
.in_o ( ),
@@ -124,7 +133,8 @@
assign mio_in_o[k] = 1'b0;
end else if (ConnectMioIn[k]) begin : gen_mio_input
prim_pad_wrapper #(
- .AttrDw ( AttrDw )
+ .AttrDw ( AttrDw ),
+ .Variant ( MioPadVariant[k] )
) i_mio_pad (
.inout_io ( mio_pad_io[k] ),
.in_o ( mio_in_o[k] ),
@@ -139,9 +149,10 @@
assign unused_out = mio_out_i[k];
assign unused_oe = mio_oe_i[k];
end else begin : gen_mio_tie_off
- logic unused_out, unused_oe;
+ logic unused_out, unused_oe, unused_pad;
logic [AttrDw-1:0] unused_attr;
- assign mio_pad_io[k] = 1'bz;
+ assign mio_pad_io[k] = 1'b0;
+ assign unused_pad = mio_pad_io[k];
assign unused_out = mio_out_i[k];
assign unused_oe = mio_oe_i[k];
assign unused_attr = mio_attr_i[k];
@@ -156,7 +167,8 @@
for (genvar k = 0; k < NDioPads; k++) begin : gen_dio_pads
if (ConnectDioIn[k] && ConnectDioOut[k]) begin : gen_dio_inout
prim_pad_wrapper #(
- .AttrDw ( AttrDw )
+ .AttrDw ( AttrDw ),
+ .Variant ( DioPadVariant[k] )
) i_dio_pad (
.inout_io ( dio_pad_io[k] ),
.in_o ( dio_in_o[k] ),
@@ -168,7 +180,8 @@
);
end else if (ConnectDioOut[k]) begin : gen_dio_output
prim_pad_wrapper #(
- .AttrDw ( AttrDw )
+ .AttrDw ( AttrDw ),
+ .Variant ( DioPadVariant[k] )
) i_dio_pad (
.inout_io ( dio_pad_io[k] ),
.in_o ( ),
@@ -182,7 +195,8 @@
assign dio_in_o[k] = 1'b0;
end else if (ConnectDioIn[k]) begin : gen_dio_input
prim_pad_wrapper #(
- .AttrDw ( AttrDw )
+ .AttrDw ( AttrDw ),
+ .Variant ( DioPadVariant[k] )
) i_dio_pad (
.inout_io ( dio_pad_io[k] ),
.in_o ( dio_in_o[k] ),
@@ -197,9 +211,10 @@
assign unused_out = dio_out_i[k];
assign unused_oe = dio_oe_i[k];
end else begin : gen_dio_tie_off
- logic unused_out, unused_oe;
+ logic unused_out, unused_oe, unused_pad;
logic [AttrDw-1:0] unused_attr;
- assign dio_pad_io[k] = 1'bz;
+ assign dio_pad_io[k] = 1'b0;
+ assign unused_pad = dio_pad_io[k];
assign unused_out = dio_out_i[k];
assign unused_oe = dio_oe_i[k];
assign unused_attr = dio_attr_i[k];
diff --git a/hw/top_earlgrey/rtl/top_earlgrey_asic.sv b/hw/top_earlgrey/rtl/top_earlgrey_asic.sv
index 3d6e362..18e05e3 100644
--- a/hw/top_earlgrey/rtl/top_earlgrey_asic.sv
+++ b/hw/top_earlgrey/rtl/top_earlgrey_asic.sv
@@ -76,7 +76,10 @@
// 4: usbdev_tx_mode
// 7: usbdev_se
.ConnectDioIn ( 15'h7F63 ),
- .ConnectDioOut ( 15'h7F63 )
+ .ConnectDioOut ( 15'h7F63 ),
+ // Pad types
+ .MioPadVariant ( '{default: 0} ),
+ .DioPadVariant ( '{default: 0} )
) padring (
// Clk / Rst
.clk_pad_i ( IO_CLK ),