[otbn] Pass "design scope" instead of a "standalone" flag to model

This patch doesn't add any new behaviour, but the point is that future
patches can bind checkers in to the design, starting at this scope.

Signed-off-by: Rupert Swarbrick <rswarbrick@lowrisc.org>
diff --git a/hw/ip/otbn/dv/model/otbn_core_model.sv b/hw/ip/otbn/dv/model/otbn_core_model.sv
index 2a46854..660aa5d 100644
--- a/hw/ip/otbn/dv/model/otbn_core_model.sv
+++ b/hw/ip/otbn/dv/model/otbn_core_model.sv
@@ -21,11 +21,10 @@
   parameter string ImemScope = "",
   // Scope of the data memory (for DPI)
   parameter string DmemScope = "",
-
-  // True if this is a "standalone" model, which should write DMEM on completion. If false, we
-  // assume there's a real implementation running alongside and we check that the DMEM contents
-  // match on completion.
-  parameter bit StandaloneModel = 1'b0,
+  // Scope of an RTL OTBN implementation (for DPI). If empty, this is a "standalone" model, which
+  // should update DMEM on completion. If not empty, we assume it's the scope for the top-level of a
+  // real implementation running alongside and we check DMEM contents on completion.
+  parameter string DesignScope = "",
 
   localparam int ImemAddrWidth = prim_util_pkg::vbits(ImemSizeByte),
   localparam int DmemAddrWidth = prim_util_pkg::vbits(DmemSizeByte)
@@ -107,11 +106,11 @@
     unique case (retcode)
       0: new_run = 1'b1;
       1: begin
-        // The model has just finished running. If this is a standalone model, write the ISS's DMEM
-        // contents back to the simulation. Otherwise, check the ISS and simulation agree (TODO: We
-        // don't do error handling properly at the moment; for now, the C++ code just prints error
-        // messages to stderr).
-        if (StandaloneModel) begin
+        // The model has just finished running. If this is a standalone model (which we can tell
+        // because DesignScope is empty), write the ISS's DMEM contents back to the simulation.
+        // Otherwise, check the ISS and simulation agree (TODO: We don't do error handling properly
+        // at the moment; for now, the C++ code just prints error messages to stderr).
+        if (DesignScope.len() == 0) begin
           void'(otbn_model_load_dmem(model_handle, DmemScope, DmemSizeWords));
         end else begin
           void'(otbn_model_check_dmem(model_handle, DmemScope, DmemSizeWords));
diff --git a/hw/ip/otbn/dv/verilator/otbn_top_sim.sv b/hw/ip/otbn/dv/verilator/otbn_top_sim.sv
index 1880ebc..6bab4cc 100644
--- a/hw/ip/otbn/dv/verilator/otbn_top_sim.sv
+++ b/hw/ip/otbn/dv/verilator/otbn_top_sim.sv
@@ -181,6 +181,7 @@
 
   localparam string ImemScope = "..u_imem.u_mem.gen_generic.u_impl_generic";
   localparam string DmemScope = "..u_dmem.u_mem.gen_generic.u_impl_generic";
+  localparam string DesignScope = "..u_otbn_core";
 
   logic otbn_model_done;
 
@@ -189,7 +190,7 @@
     .ImemSizeByte    ( ImemSizeByte ),
     .DmemScope       ( DmemScope ),
     .ImemScope       ( ImemScope ),
-    .StandaloneModel ( 1'b0 )
+    .DesignScope     ( DesignScope )
   ) u_otbn_core_model (
     .clk_i        ( IO_CLK ),
     .rst_ni       ( IO_RST_N ),
diff --git a/hw/ip/otbn/rtl/otbn.sv b/hw/ip/otbn/rtl/otbn.sv
index 0a9e677..fc49a67 100644
--- a/hw/ip/otbn/rtl/otbn.sv
+++ b/hw/ip/otbn/rtl/otbn.sv
@@ -433,7 +433,7 @@
       .ImemSizeByte(ImemSizeByte),
       .DmemScope(DmemScope),
       .ImemScope(ImemScope),
-      .StandaloneModel(1'b1)
+      .DesignScope("")
     ) u_otbn_core_model (
       .clk_i,
       .rst_ni,