X-Git-Url: https://git.libre-soc.org/?p=sv2nmigen.git;a=blobdiff_plain;f=absyn.py;h=a199daa4da6846ebe31ddf19fe9015248d712107;hp=e81e429510dd504feb19c6aa8921b23ff7b68c9a;hb=b41a016efd59e3ee5ae118eb4e50d7b832c83b6e;hpb=ba24fe01625250eb4da3d86b01f6c3291791d8eb diff --git a/absyn.py b/absyn.py index e81e429..a199daa 100644 --- a/absyn.py +++ b/absyn.py @@ -50,6 +50,7 @@ class Absyn: self.outputfile = None self.assign = [] self.ports = [] + self.wires = [] def open(self): if(self.outputfile is None): @@ -83,6 +84,12 @@ class Absyn: self.ports += [port] return port + def isPort(self, name): + for p in self.ports: + if(str(p.name) == str(name)): + return True + return False + def initFunc(self, ports, params): params = [Leaf(token.LPAR, '('), Leaf( token.NAME, "self")] + [Leaf(token.RPAR, ')')] @@ -116,12 +123,27 @@ class Absyn: stmts.children.append(Leaf(token.STRING, "m = Module()")) stmts.children.append(self.nl()) + for w in self.wires: + wirename = w[0] + hasdims = (len(w) >= 4) + stmts.children.append(self.indent(2)) + stmts.children.append(Leaf(token.STRING, wirename)) + stmts.children.append(Leaf(token.STRING, " = Signal(")) + if(hasdims): + stmts.children.append(Leaf(token.STRING, str(w[3]))) + stmts.children.append(Leaf(token.STRING, ")")) + stmts.children.append(self.nl()) + for a in self.assign: stmts.children.append(self.indent(2)) # m.d.sync += self.left.eq(right) - stmts.children.append(Leaf(token.STRING, "m.d.comb += self.")) + stmts.children.append(Leaf(token.STRING, "m.d.comb += ")) + if(self.isPort(a.left)): + stmts.children.append(Leaf(token.STRING, "self.")) stmts.children.append(Leaf(token.STRING, a.left)) - stmts.children.append(Leaf(token.STRING, ".eq(self.")) + stmts.children.append(Leaf(token.STRING, ".eq(")) + if(self.isPort(a.right)): + stmts.children.append(Leaf(token.STRING, "self.")) stmts.children.append(Leaf(token.STRING, a.right)) stmts.children.append(Leaf(token.STRING, ")")) stmts.children.append(self.nl()) @@ -160,10 +182,16 @@ class Absyn: clsdecl = Node(syms.compound_stmt, [clsdecl]) self.printpy(str(clsdecl)) - print("=====================") - print(str(clsdecl)) return clsdecl + def module_item_2(self, signaltype, dims, mlist): + if(signaltype == "wire"): + for m in mlist: + if(dims): + self.wires.append(m+dims) + else: + self.wires.append(m) + def appendComments(self, data): self.open() self.outputfile.write(data)