[DMI DPI] Instantiate DMI DPI in Verilator

- Makes DMI DPI the default option instead of JTAG DPI

Signed-off-by: Tom Roberts <tomroberts@lowrisc.org>
diff --git a/hw/ip/rv_dm/rtl/rv_dm.sv b/hw/ip/rv_dm/rtl/rv_dm.sv
index c3da3cd..0611c4c 100644
--- a/hw/ip/rv_dm/rtl/rv_dm.sv
+++ b/hw/ip/rv_dm/rtl/rv_dm.sv
@@ -264,6 +264,8 @@
     .rdata_o                 ( rdata                 )
   );
 
+  // Bound-in DPI module replaces the TAP
+`ifndef DMIDirectTAP
   // JTAG TAP
   dmi_jtag #(
     .IdcodeValue    (IdcodeValue)
@@ -289,6 +291,7 @@
     .td_o,
     .tdo_oe_o
   );
+`endif
 
   tlul_adapter_sram #(
     .SramAw(AddressWidthWords),
diff --git a/hw/top_earlgrey/rtl/top_earlgrey_verilator.sv b/hw/top_earlgrey/rtl/top_earlgrey_verilator.sv
index 5535aed..c0835a5 100644
--- a/hw/top_earlgrey/rtl/top_earlgrey_verilator.sv
+++ b/hw/top_earlgrey/rtl/top_earlgrey_verilator.sv
@@ -90,6 +90,23 @@
     .rx_i   (cio_uart_tx_d2p)
   );
 
+`ifdef DMIDirectTAP
+  // OpenOCD direct DMI TAP
+  bind rv_dm dmidpi u_dmidpi (
+    .clk_i,
+    .rst_ni,
+    .dmi_req_valid,
+    .dmi_req_ready,
+    .dmi_req_addr   (dmi_req.addr),
+    .dmi_req_op     (dmi_req.op),
+    .dmi_req_data   (dmi_req.data),
+    .dmi_rsp_valid,
+    .dmi_rsp_ready,
+    .dmi_rsp_data   (dmi_rsp.data),
+    .dmi_rsp_resp   (dmi_rsp.resp),
+    .dmi_rst_n      (dmi_rst_n)
+  );
+`else
   // JTAG DPI for OpenOCD
   jtagdpi u_jtagdpi (
     .clk_i,
@@ -102,6 +119,7 @@
     .jtag_trst_n (cio_jtag_trst_n),
     .jtag_srst_n (cio_jtag_srst_n)
   );
+`endif
 
   // SPI DPI
   spidpi u_spi (
diff --git a/hw/top_earlgrey/top_earlgrey_verilator.core b/hw/top_earlgrey/top_earlgrey_verilator.core
index c5e752d..8f3196a 100644
--- a/hw/top_earlgrey/top_earlgrey_verilator.core
+++ b/hw/top_earlgrey/top_earlgrey_verilator.core
@@ -11,6 +11,7 @@
       - lowrisc:dv_dpi:uartdpi
       - lowrisc:dv_dpi:gpiodpi
       - lowrisc:dv_dpi:jtagdpi
+      - lowrisc:dv_dpi:dmidpi
       - lowrisc:dv_dpi:spidpi
       - lowrisc:dv_dpi:usbdpi
       - lowrisc:dv_verilator:memutil_verilator
@@ -43,11 +44,15 @@
     datatype : file
     description : Application to load into Flash (in Verilog hex format)
     paramtype : cmdlinearg
-
   rominit:
     datatype : file
     description : Application to load into Boot ROM (in Verilog hex format)
     paramtype : cmdlinearg
+  DMIDirectTAP:
+    datatype: bool
+    paramtype: vlogdefine
+    default: true
+    description: Replace JTAG TAP with an OpenOCD direct connection
 
 targets:
   sim:
@@ -58,6 +63,7 @@
       - VERILATOR_END_SIM_ADDR=0x10008000
       - flashinit
       - rominit
+      - DMIDirectTAP
     default_tool: verilator
     filesets:
       - files_sim_verilator