X-Git-Url: https://git.libre-soc.org/?p=sv2nmigen.git;a=blobdiff_plain;f=absyn.py;h=386e5d3f23bfe1ddd981d38cc1d7079a865e2fd2;hp=2931be810ea3533f828bcd85c9c4e576bf00000b;hb=HEAD;hpb=ebec976370a56af022e9830e60c1dbc47dc1241c diff --git a/absyn.py b/absyn.py index 2931be8..386e5d3 100644 --- a/absyn.py +++ b/absyn.py @@ -57,6 +57,8 @@ class CondStatement: def makeBlock(x): if(type(x) == Assignment): return [x] + elif(type(x) == CondStatement): + return [x] else: return x.statements @@ -69,6 +71,7 @@ class Absyn: self.ports = [] self.wires = [] self.comb = [] + self.sync = [] def open(self): if(self.outputfile is None): @@ -133,7 +136,9 @@ class Absyn: def do_assign(self, a, stmts, indent): stmts.children.append(self.indent(indent)) - stmts.children.append(Leaf(token.STRING, "m.d.comb += ")) + stmts.children.append(Leaf(token.STRING, "m.d.")) + stmts.children.append(Leaf(token.STRING, self.blocktype)) + stmts.children.append(Leaf(token.STRING, " += ")) if(self.isPort(a.left)): stmts.children.append(Leaf(token.STRING, "self.")) stmts.children.append(Leaf(token.STRING, a.left)) @@ -196,12 +201,18 @@ class Absyn: stmts.children.append(Leaf(token.STRING, ")")) stmts.children.append(self.nl()) - # refactor: assignments non cond + self.blocktype = "comb" for a in self.assign: - self.do_assign(a, stmts) + self.do_assign(a, stmts, 2) for c in self.comb: - print("comb", c) + if(type(c) == Assignment): + self.do_assign(c, stmts, 2) + else: + self.do_ifblock(c, stmts, 2) + + self.blocktype = "sync" + for c in self.sync: if(type(c) == Assignment): self.do_assign(c, stmts, 2) else: @@ -258,6 +269,9 @@ class Absyn: # cond assigmments and other nested blocks def always_comb(self, p3, p1): - print("always_comb") slist = p3[6] self.comb += slist.statements + + def always_ff(self, p3, p1): + slist = p3[1] + self.sync += slist.statements