[dv] Auto-gen byte write for RAL
Without update, we need to manually set partial write support for the
mem that supports it. If not, will see failure in tl_errors test.
Make it automatic to save time to debug this kind of issue
Signed-off-by: Weicai Yang <weicai@google.com>
diff --git a/util/reggen/data.py b/util/reggen/data.py
index b06164d..b14f15f 100644
--- a/util/reggen/data.py
+++ b/util/reggen/data.py
@@ -175,6 +175,7 @@
class Window():
def __init__(self):
self.base_addr = 0
+ self.byte_write = 0
self.limit_addr = 0
self.n_bits = 0
self.tags = []
diff --git a/util/reggen/gen_rtl.py b/util/reggen/gen_rtl.py
index 1454987..a3be839 100644
--- a/util/reggen/gen_rtl.py
+++ b/util/reggen/gen_rtl.py
@@ -114,6 +114,7 @@
win = Window()
win.name = obj["name"]
win.base_addr = obj["genoffset"]
+ win.byte_write = obj["genbyte-write"]
win.limit_addr = obj["genoffset"] + int(obj["items"]) * (width // 8)
win.dvrights = obj["swaccess"]
win.n_bits = obj["genvalidbits"]
diff --git a/util/reggen/uvm_reg.sv.tpl b/util/reggen/uvm_reg.sv.tpl
index ce5740b..9ba690c 100644
--- a/util/reggen/uvm_reg.sv.tpl
+++ b/util/reggen/uvm_reg.sv.tpl
@@ -160,6 +160,9 @@
string access = "${mem_right}",
int has_coverage = UVM_NO_COVERAGE);
super.new(name, size, n_bits, access, has_coverage);
+ % if w.byte_write:
+ set_mem_partial_write_support(1);
+ % endif
endfunction : new
endclass : ${gen_dv.mcname(block, w)}
diff --git a/util/topgen.py b/util/topgen.py
index da03d53..c7d29c9 100755
--- a/util/topgen.py
+++ b/util/topgen.py
@@ -815,6 +815,8 @@
mem.name = item["name"]
mem.base_addr = int(item["base_addr"], 0)
mem.limit_addr = int(item["base_addr"], 0) + int(item["size"], 0)
+ mem.byte_write = ('byte_write' in item and
+ item["byte_write"].lower() == "true")
if "swaccess" in item.keys():
mem.dvrights = item["swaccess"]
else: