Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions hw/ip_templates/pinmux/fpv/tb/pinmux_chip_tb.sv.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -78,17 +78,20 @@ module pinmux_chip_tb

// Copied from chip_${topname}_asic.sv
// TODO: find a better way to automatically generate this FPV testbench via topgen/ipgen.
% if enable_strap_sampling:
localparam int Tap0PadIdx = 30;
localparam int Tap1PadIdx = 27;
localparam int Dft0PadIdx = 25;
localparam int Dft1PadIdx = 26;
% endif
localparam int TckPadIdx = 38;
localparam int TmsPadIdx = 35;
localparam int TrstNPadIdx = 39;
localparam int TdiPadIdx = 37;
localparam int TdoPadIdx = 36;
// DFT and Debug signal positions in the pinout.
localparam pinmux_pkg::target_cfg_t PinmuxTargetCfg = '{
% if enable_strap_sampling:
tck_idx: TckPadIdx,
tms_idx: TmsPadIdx,
trst_idx: TrstNPadIdx,
Expand All @@ -98,10 +101,13 @@ module pinmux_chip_tb
tap_strap1_idx: Tap1PadIdx,
dft_strap0_idx: Dft0PadIdx,
dft_strap1_idx: Dft1PadIdx,
% endif
% if enable_usb_wakeup:
// TODO: check whether there is a better way to pass these USB-specific params
usb_dp_idx: DioUsbdevUsbDp,
usb_dn_idx: DioUsbdevUsbDn,
usb_sense_idx: MioInUsbdevSense,
% endif
// Pad types for attribute WARL behavior
dio_pad_type: {
BidirStd, // DIO spi_host0_csb
Expand Down
8 changes: 8 additions & 0 deletions hw/ip_templates/pinmux/fpv/tb/pinmux_tb.sv.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ module pinmux_tb
import pinmux_reg_pkg::*;
import prim_pad_wrapper_pkg::*;
#(
% if enable_strap_sampling:
parameter int Tap0PadIdx = 0,
parameter int Tap1PadIdx = 1,
parameter int Dft0PadIdx = 2,
Expand All @@ -19,8 +20,11 @@ module pinmux_tb
parameter int TrstNPadIdx = 6,
parameter int TdiPadIdx = 7,
parameter int TdoPadIdx = 8,
% endif
% if enable_usb_wakeup:
parameter int DioUsbdevDp = 9,
parameter int DioUsbdevDn = 10,
% endif
parameter int MioInUsbdevSense = 11,
parameter logic [NumAlerts-1:0] AlertAsyncOn = {NumAlerts{1'b1}},
parameter bit SecVolatileRawUnlockEn = 1
Expand Down Expand Up @@ -87,6 +91,7 @@ module pinmux_tb
);

localparam pinmux_pkg::target_cfg_t PinmuxTargetCfg = '{
% if enable_strap_sampling:
tck_idx: TckPadIdx,
tms_idx: TmsPadIdx,
trst_idx: TrstNPadIdx,
Expand All @@ -96,9 +101,12 @@ module pinmux_tb
tap_strap1_idx: Tap1PadIdx,
dft_strap0_idx: Dft0PadIdx,
dft_strap1_idx: Dft1PadIdx,
% endif
% if enable_usb_wakeup:
usb_dp_idx: DioUsbdevDp,
usb_dn_idx: DioUsbdevDn,
usb_sense_idx: MioInUsbdevSense,
% endif
// Pad types for attribute WARL behavior
dio_pad_type: {NDioPads{BidirStd}},
mio_pad_type: {NMioPads{BidirStd}},
Expand Down
4 changes: 4 additions & 0 deletions hw/ip_templates/pinmux/rtl/pinmux.sv.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@ module pinmux
always_ff @(posedge clk_i or negedge rst_ni) begin : p_regs
if (!rst_ni) begin
dio_pad_attr_q <= '0;
% if enable_strap_sampling:
for (int kk = 0; kk < NMioPads; kk++) begin
if (kk == TargetCfg.tap_strap0_idx) begin
// TAP strap 0 is sampled after reset (and only once for life cycle states that are not
Expand All @@ -187,6 +188,9 @@ module pinmux
mio_pad_attr_q[kk] <= '0;
end
end
% else:
mio_pad_attr_q <= '0;
% endif
end else begin
// dedicated pads
for (int kk = 0; kk < NDioPads; kk++) begin
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ package pinmux_pkg;
// datastructure below serves this purpose. Note that all the indices below are with respect to
// the concatenated {DIO, MIO} packed array.
typedef struct packed {
% if enable_strap_sampling:
integer tck_idx;
integer tms_idx;
integer trst_idx;
Expand All @@ -25,16 +26,20 @@ package pinmux_pkg;
integer tap_strap1_idx;
integer dft_strap0_idx;
integer dft_strap1_idx;
% endif
% if enable_usb_wakeup:
integer usb_dp_idx;
integer usb_dn_idx;
integer usb_sense_idx;
% endif
pad_type_e [NDioPads-1:0] dio_pad_type;
pad_type_e [NMioPads-1:0] mio_pad_type;
scan_role_e [NDioPads-1:0] dio_scan_role;
scan_role_e [NMioPads-1:0] mio_scan_role;
} target_cfg_t;

parameter target_cfg_t DefaultTargetCfg = '{
% if enable_strap_sampling:
tck_idx: 0,
tms_idx: 0,
trst_idx: 0,
Expand All @@ -44,9 +49,12 @@ package pinmux_pkg;
tap_strap1_idx: 0,
dft_strap0_idx: 0,
dft_strap1_idx: 0,
% endif
% if enable_usb_wakeup:
usb_dp_idx: 0,
usb_dn_idx: 0,
usb_sense_idx: 0,
% endif
dio_pad_type: {NDioPads{BidirStd}},
mio_pad_type: {NMioPads{BidirStd}},
dio_scan_role: {NDioPads{NoScan}},
Expand Down
116 changes: 2 additions & 114 deletions hw/top_darjeeling/data/autogen/top_darjeeling.gen.hjson
Original file line number Diff line number Diff line change
Expand Up @@ -17375,63 +17375,7 @@
}
pinmux:
{
special_signals:
[
{
name: tap0
pad: MIO0
desc: TAP strap signal.
idx: 0
}
{
name: tap1
pad: MIO1
desc: TAP strap signal.
idx: 1
}
{
name: dft0
pad: MIO2
desc: DFT strap signal.
idx: 2
}
{
name: dft1
pad: MIO3
desc: DFT strap signal.
idx: 3
}
{
name: tck
pad: MIO4
desc: JTAG tck signal.
idx: 4
}
{
name: tms
pad: MIO5
desc: JTAG tms signal.
idx: 5
}
{
name: trst_n
pad: MIO6
desc: JTAG trst_n signal.
idx: 6
}
{
name: tdi
pad: MIO7
desc: JTAG tdi signal.
idx: 7
}
{
name: tdo
pad: MIO8
desc: JTAG tdo signal.
idx: 8
}
]
special_signals: []
}
}
{
Expand Down Expand Up @@ -17481,63 +17425,7 @@
}
pinmux:
{
special_signals:
[
{
name: tap0
pad: MIO0
desc: TAP strap signal.
idx: 0
}
{
name: tap1
pad: MIO1
desc: TAP strap signal.
idx: 1
}
{
name: dft0
pad: MIO2
desc: DFT strap signal.
idx: 2
}
{
name: dft1
pad: MIO3
desc: DFT strap signal.
idx: 3
}
{
name: tck
pad: MIO4
desc: JTAG tck signal.
idx: 4
}
{
name: tms
pad: MIO5
desc: JTAG tms signal.
idx: 5
}
{
name: trst_n
pad: MIO6
desc: JTAG trst_n signal.
idx: 6
}
{
name: tdi
pad: MIO7
desc: JTAG tdi signal.
idx: 7
}
{
name: tdo
pad: MIO8
desc: JTAG tdo signal.
idx: 8
}
]
special_signals: []
}
}
]
Expand Down
28 changes: 2 additions & 26 deletions hw/top_darjeeling/data/top_darjeeling.hjson
Original file line number Diff line number Diff line change
Expand Up @@ -1836,19 +1836,7 @@
// parameter will be assigned the corresponding pad index.
//
// Each entry may have an optional 'desc' key for further description.
special_signals: [
// Straps
{ name: 'tap0', pad: 'MIO0', desc: 'TAP strap signal.' },
{ name: 'tap1', pad: 'MIO1', desc: 'TAP strap signal.' },
{ name: 'dft0', pad: 'MIO2', desc: 'DFT strap signal.' },
{ name: 'dft1', pad: 'MIO3', desc: 'DFT strap signal.' },
// JTAG
{ name: 'tck', pad: 'MIO4', desc: 'JTAG tck signal.' },
{ name: 'tms', pad: 'MIO5', desc: 'JTAG tms signal.' },
{ name: 'trst_n', pad: 'MIO6', desc: 'JTAG trst_n signal.' },
{ name: 'tdi', pad: 'MIO7', desc: 'JTAG tdi signal.' },
{ name: 'tdo', pad: 'MIO8', desc: 'JTAG tdo signal.' },
],
special_signals: [],
}
},
{ name: 'cw310',
Expand All @@ -1870,19 +1858,7 @@
},

pinmux: {
special_signals: [
// Straps
{ name: 'tap0', pad: 'MIO0', desc: 'TAP strap signal.' },
{ name: 'tap1', pad: 'MIO1', desc: 'TAP strap signal.' },
{ name: 'dft0', pad: 'MIO2', desc: 'DFT strap signal.' },
{ name: 'dft1', pad: 'MIO3', desc: 'DFT strap signal.' },
// JTAG
{ name: 'tck', pad: 'MIO4', desc: 'JTAG tck signal.' },
{ name: 'tms', pad: 'MIO5', desc: 'JTAG tms signal.' },
{ name: 'trst_n', pad: 'MIO6', desc: 'JTAG trst_n signal.' },
{ name: 'tdi', pad: 'MIO7', desc: 'JTAG tdi signal.' },
{ name: 'tdo', pad: 'MIO8', desc: 'JTAG tdo signal.' },
],
special_signals: [],
}
}
]
Expand Down
Loading
Loading