mirror of https://github.com/YosysHQ/yosys.git
Add yosys-smtbmc VCD writer support for memories with async writes
This commit is contained in:
parent
6132e6e72a
commit
9419de3e37
|
@ -554,8 +554,6 @@ struct Smt2Worker
|
||||||
int rd_ports = cell->getParam("\\RD_PORTS").as_int();
|
int rd_ports = cell->getParam("\\RD_PORTS").as_int();
|
||||||
int wr_ports = cell->getParam("\\WR_PORTS").as_int();
|
int wr_ports = cell->getParam("\\WR_PORTS").as_int();
|
||||||
|
|
||||||
decls.push_back(stringf("; yosys-smt2-memory %s %d %d %d %d\n", get_id(cell), abits, width, rd_ports, wr_ports));
|
|
||||||
|
|
||||||
bool async_read = false;
|
bool async_read = false;
|
||||||
if (!cell->getParam("\\WR_CLK_ENABLE").is_fully_ones()) {
|
if (!cell->getParam("\\WR_CLK_ENABLE").is_fully_ones()) {
|
||||||
if (!cell->getParam("\\WR_CLK_ENABLE").is_fully_zero())
|
if (!cell->getParam("\\WR_CLK_ENABLE").is_fully_zero())
|
||||||
|
@ -563,6 +561,8 @@ struct Smt2Worker
|
||||||
async_read = true;
|
async_read = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
decls.push_back(stringf("; yosys-smt2-memory %s %d %d %d %d %s\n", get_id(cell), abits, width, rd_ports, wr_ports, async_read ? "async" : "sync"));
|
||||||
|
|
||||||
string memstate;
|
string memstate;
|
||||||
if (async_read) {
|
if (async_read) {
|
||||||
memstate = stringf("%s#%d#final", get_id(module), arrayid);
|
memstate = stringf("%s#%d#final", get_id(module), arrayid);
|
||||||
|
|
|
@ -594,7 +594,7 @@ def write_vcd_trace(steps_start, steps_stop, index):
|
||||||
|
|
||||||
mem_trace_data = dict()
|
mem_trace_data = dict()
|
||||||
for mempath in sorted(smt.hiermems(topmod)):
|
for mempath in sorted(smt.hiermems(topmod)):
|
||||||
abits, width, rports, wports = smt.mem_info(topmod, mempath)
|
abits, width, rports, wports, asyncwr = smt.mem_info(topmod, mempath)
|
||||||
|
|
||||||
expr_id = list()
|
expr_id = list()
|
||||||
expr_list = list()
|
expr_list = list()
|
||||||
|
@ -666,7 +666,8 @@ def write_vcd_trace(steps_start, steps_stop, index):
|
||||||
else:
|
else:
|
||||||
buf[k] = tdata[i][k]
|
buf[k] = tdata[i][k]
|
||||||
|
|
||||||
tdata.append(data[:])
|
if not asyncwr:
|
||||||
|
tdata.append(data[:])
|
||||||
|
|
||||||
for j_data in wdata[i]:
|
for j_data in wdata[i]:
|
||||||
if j_data["A"] != addr:
|
if j_data["A"] != addr:
|
||||||
|
@ -679,6 +680,9 @@ def write_vcd_trace(steps_start, steps_stop, index):
|
||||||
if M[k] == "1":
|
if M[k] == "1":
|
||||||
data[k] = D[k]
|
data[k] = D[k]
|
||||||
|
|
||||||
|
if asyncwr:
|
||||||
|
tdata.append(data[:])
|
||||||
|
|
||||||
assert len(tdata) == len(rdata)
|
assert len(tdata) == len(rdata)
|
||||||
|
|
||||||
netpath = mempath[:]
|
netpath = mempath[:]
|
||||||
|
@ -785,7 +789,7 @@ def write_vlogtb_trace(steps_start, steps_stop, index):
|
||||||
|
|
||||||
mems = sorted(smt.hiermems(vlogtb_topmod))
|
mems = sorted(smt.hiermems(vlogtb_topmod))
|
||||||
for mempath in mems:
|
for mempath in mems:
|
||||||
abits, width, rports, wports = smt.mem_info(vlogtb_topmod, mempath)
|
abits, width, rports, wports, asyncwr = smt.mem_info(vlogtb_topmod, mempath)
|
||||||
|
|
||||||
addr_expr_list = list()
|
addr_expr_list = list()
|
||||||
data_expr_list = list()
|
data_expr_list = list()
|
||||||
|
@ -888,7 +892,7 @@ def write_constr_trace(steps_start, steps_stop, index):
|
||||||
|
|
||||||
mems = sorted(smt.hiermems(constr_topmod))
|
mems = sorted(smt.hiermems(constr_topmod))
|
||||||
for mempath in mems:
|
for mempath in mems:
|
||||||
abits, width, rports, wports = smt.mem_info(constr_topmod, mempath)
|
abits, width, rports, wports, asyncwr = smt.mem_info(constr_topmod, mempath)
|
||||||
|
|
||||||
addr_expr_list = list()
|
addr_expr_list = list()
|
||||||
data_expr_list = list()
|
data_expr_list = list()
|
||||||
|
|
|
@ -387,7 +387,7 @@ class SmtIo:
|
||||||
self.modinfo[self.curmod].wsize[fields[2]] = int(fields[3])
|
self.modinfo[self.curmod].wsize[fields[2]] = int(fields[3])
|
||||||
|
|
||||||
if fields[1] == "yosys-smt2-memory":
|
if fields[1] == "yosys-smt2-memory":
|
||||||
self.modinfo[self.curmod].memories[fields[2]] = (int(fields[3]), int(fields[4]), int(fields[5]), int(fields[6]))
|
self.modinfo[self.curmod].memories[fields[2]] = (int(fields[3]), int(fields[4]), int(fields[5]), int(fields[6]), fields[7] == "async")
|
||||||
|
|
||||||
if fields[1] == "yosys-smt2-wire":
|
if fields[1] == "yosys-smt2-wire":
|
||||||
self.modinfo[self.curmod].wires.add(fields[2])
|
self.modinfo[self.curmod].wires.add(fields[2])
|
||||||
|
|
Loading…
Reference in New Issue