[dv/common] VCS UNR flow

Set up VCS UNR flow. For detail refer to [slides](https://docs.google.com/presentation/d/13FwwSeBaxtHZkLMmW3TI0YGO93_BTPZZFnIpX2kQhHI/edit#slide=id.ga3bb534d6e_0_57)

Remaining TODO
1. Some module doesn’t use tb.dut as dut hierarchy, may need separate
cfg file
2. Make sure all IPs pass with UNR flow (need solution for issue 3)
3. Document the flow

Signed-off-by: Weicai Yang <weicai@google.com>
diff --git a/util/dvsim/Deploy.py b/util/dvsim/Deploy.py
index 6cd7eec..91e3ec0 100644
--- a/util/dvsim/Deploy.py
+++ b/util/dvsim/Deploy.py
@@ -843,6 +843,55 @@
         return RunTest.seeds.pop(0)
 
 
+class CovUnr(Deploy):
+    """
+    Abstraction for coverage UNR flow.
+    """
+
+    # Register all builds with the class
+    items = []
+
+    def __init__(self, sim_cfg):
+        # Initialize common vars.
+        super().__init__(sim_cfg)
+
+        self.target = "cov_unr"
+        self.mandatory_cmd_attrs.update({
+            # tool srcs
+            "tool_srcs": False,
+            "tool_srcs_dir": False,
+
+            # Need to generate filelist based on build mode
+            "sv_flist_gen_cmd": False,
+            "sv_flist_gen_dir": False,
+            "sv_flist_gen_opts": False,
+            "build_dir": False,
+            "cov_unr_build_cmd": False,
+            "cov_unr_build_opts": False,
+            "cov_unr_run_cmd": False,
+            "cov_unr_run_opts": False
+        })
+
+        self.mandatory_misc_attrs.update({
+            "cov_unr_dir": False,
+            "build_fail_patterns": False
+        })
+
+        super().parse_dict(sim_cfg.__dict__)
+        self.__post_init__()
+
+        self.pass_patterns = []
+        # Reuse fail_patterns from sim build
+        self.fail_patterns = self.build_fail_patterns
+
+        # Start fail message construction
+        self.fail_msg = "\n**COV_UNR:** {}<br>\n".format(self.name)
+        log_sub_path = self.log.replace(self.sim_cfg.scratch_path + '/', '')
+        self.fail_msg += "**LOG:** $scratch_path/{}<br>\n".format(log_sub_path)
+
+        CovUnr.items.append(self)
+
+
 class CovMerge(Deploy):
     """
     Abstraction for merging coverage databases. An item of this class is created AFTER