[jtag/scanmode] Add clock mux on TCK for scanmode
Signed-off-by: Michael Schaffner <msf@opentitan.org>
diff --git a/hw/ip/lc_ctrl/lc_ctrl.core b/hw/ip/lc_ctrl/lc_ctrl.core
index b5e0028..854cc00 100644
--- a/hw/ip/lc_ctrl/lc_ctrl.core
+++ b/hw/ip/lc_ctrl/lc_ctrl.core
@@ -9,6 +9,7 @@
files_rtl:
depend:
- lowrisc:prim:all
+ - lowrisc:prim:clock_mux2
- lowrisc:prim:lc_sync
- lowrisc:prim:lc_sender
- lowrisc:ip:lc_ctrl_pkg
diff --git a/hw/ip/lc_ctrl/rtl/lc_ctrl.sv b/hw/ip/lc_ctrl/rtl/lc_ctrl.sv
index a79a91b..8ec8e37 100644
--- a/hw/ip/lc_ctrl/rtl/lc_ctrl.sv
+++ b/hw/ip/lc_ctrl/rtl/lc_ctrl.sv
@@ -142,12 +142,25 @@
logic dmi_resp_ready;
logic dmi_resp_valid;
+ logic scanmode;
+ assign scanmode = (scanmode_i == On);
+
+ logic tck_muxed;
+ prim_clock_mux2 #(
+ .NoFpgaBufG(1'b1)
+ ) u_prim_clock_mux2 (
+ .clk0_i(jtag_i.tck),
+ .clk1_i(clk_i),
+ .sel_i (scanmode),
+ .clk_o (tck_muxed)
+ );
+
dmi_jtag #(
.IdcodeValue(IdcodeValue)
) u_dmi_jtag (
.clk_i,
.rst_ni,
- .testmode_i ( scanmode_i == On ),
+ .testmode_i ( scanmode ),
.dmi_rst_no ( ), // unused
.dmi_req_o ( dmi_req ),
.dmi_req_valid_o ( dmi_req_valid ),
@@ -155,7 +168,7 @@
.dmi_resp_i ( dmi_resp ),
.dmi_resp_ready_o ( dmi_resp_ready ),
.dmi_resp_valid_i ( dmi_resp_valid ),
- .tck_i ( jtag_i.tck ),
+ .tck_i ( tck_muxed ),
.tms_i ( jtag_i.tms ),
.trst_ni ( jtag_i.trst_n ),
.td_i ( jtag_i.tdi ),
diff --git a/hw/ip/rv_dm/rtl/rv_dm.sv b/hw/ip/rv_dm/rtl/rv_dm.sv
index e04ba89..04cad54 100644
--- a/hw/ip/rv_dm/rtl/rv_dm.sv
+++ b/hw/ip/rv_dm/rtl/rv_dm.sv
@@ -277,6 +277,17 @@
// Bound-in DPI module replaces the TAP
`ifndef DMIDirectTAP
+
+ logic tck_muxed;
+ prim_clock_mux2 #(
+ .NoFpgaBufG(1'b1)
+ ) u_prim_clock_mux2 (
+ .clk0_i(jtag_req_i.tck),
+ .clk1_i(clk_i),
+ .sel_i (testmode),
+ .clk_o (tck_muxed)
+ );
+
// JTAG TAP
dmi_jtag #(
.IdcodeValue (IdcodeValue)
@@ -295,7 +306,7 @@
.dmi_resp_valid_i (dmi_rsp_valid),
//JTAG
- .tck_i (jtag_req_i.tck),
+ .tck_i (tck_muxed),
.tms_i (jtag_req_i.tms),
.trst_ni (jtag_req_i.trst_n),
.td_i (jtag_req_i.tdi),
diff --git a/hw/ip/rv_dm/rv_dm.core b/hw/ip/rv_dm/rv_dm.core
index ffefce5..b54d770 100644
--- a/hw/ip/rv_dm/rv_dm.core
+++ b/hw/ip/rv_dm/rv_dm.core
@@ -12,6 +12,7 @@
- lowrisc:ip:tlul
- lowrisc:prim:all
- lowrisc:prim:lc_sync
+ - lowrisc:prim:clock_mux2
- lowrisc:tlul:adapter_host
- pulp-platform:riscv-dbg:0.1
- lowrisc:ip:lc_ctrl_pkg