[pinmux] Always sample DFT mode straps only once at boot
While it is useful for the TAP straps to be sampled continuously
in DFT-enabled life cycle states such that test sequences can
dynamically change between TAPs, this is not so much the case
for the DFT-mode straps.
I.e., from a test perspective it would be better if these
DFT-mode straps were sampled only once such that the
corresponding pins do not have to be constantly held at a
specific value throughout the test sequence. This would
also free them up such that they can be used as
regular GPIOs.
This commit changes the strap sampling logic accordingly.
Signed-off-by: Michael Schaffner <msf@opentitan.org>
diff --git a/hw/ip/pinmux/rtl/pinmux_strap_sampling.sv b/hw/ip/pinmux/rtl/pinmux_strap_sampling.sv
index cb1aa58..bc61a7c 100644
--- a/hw/ip/pinmux/rtl/pinmux_strap_sampling.sv
+++ b/hw/ip/pinmux/rtl/pinmux_strap_sampling.sv
@@ -105,7 +105,7 @@
// During dft enabled states, we continously sample all straps unless
// told not to do so by external dft logic
- logic dft_sampling_en;
+ logic tap_sampling_en;
logic dft_hold_tap_sel;
prim_buf #(
@@ -114,25 +114,28 @@
.in_i(dft_hold_tap_sel_i),
.out_o(dft_hold_tap_sel)
);
- assign dft_sampling_en = (lc_dft_en[0] == lc_ctrl_pkg::On) & ~dft_hold_tap_sel;
+ assign tap_sampling_en = (lc_dft_en[0] == lc_ctrl_pkg::On) & ~dft_hold_tap_sel;
always_comb begin : p_strap_sampling
lc_strap_sample_en = 1'b0;
rv_strap_sample_en = 1'b0;
dft_strap_sample_en = 1'b0;
-
// Initial strap sampling pulse from pwrmgr,
// qualified by life cycle signals.
+ // The DFT-mode straps are always sampled only once.
+ if (strap_en_i) begin
+ if (lc_dft_en[0] == lc_ctrl_pkg::On) begin
+ dft_strap_sample_en = 1'b1;
+ end
+ end
// In DFT-enabled life cycle states we continously
- // sample all straps.
- if (strap_en_i || dft_sampling_en) begin
+ // sample the TAP straps to be able to switch back and
+ // forth between different TAPs.
+ if (strap_en_i || tap_sampling_en) begin
lc_strap_sample_en = 1'b1;
if (lc_hw_debug_en[0] == lc_ctrl_pkg::On) begin
rv_strap_sample_en = 1'b1;
end
- if (lc_dft_en[0] == lc_ctrl_pkg::On) begin
- dft_strap_sample_en = 1'b1;
- end
end
end