test:
- python3 svparse.py examples/assignment.sv
+ python3 svparse.py examples/counter.sv
self.right = right
class Absyn:
- def __init__(self):
- self.outputfile = open("output.py","w")
+ def __init__(self,outputfn):
+ self.outputfile = open(outputfn,"w")
self.outputfile.write(preamble)
self.assign = []
self.ports = []
print(str(clsdecl))
return clsdecl
+ def appendComments(self,data):
+ lines = data.split("\n")
+ for line in lines:
+ self.printpy("#"+line)
+
# combinatorical assign
def cont_assign_1(self,p):
- print("#ASSIGN:BROKEN"+str(list(p)))
+ # print("#ASSIGN:BROKEN"+str(list(p)))
self.assign += [Assignment(p[1],p[2],p[3])]
--- /dev/null
+# this file has been generated by sv2nmigen
+
+from nmigen import Signal, Module, Const, Cat, Elaboratable
+
+
+
+class up_counter(Elaboratable):
+
+ def __init__(self):
+ #self.clk = Signal() # input
+ #self.reset = Signal() # input
+ self.counter = Signal() # output
+ def elaborate(self, platform=None):
+ m = Module()
+ #m.d.comb += self.counter.eq(self.counter_up)
+ m.d.comb += self.counter.eq(self.counter+1)
+ return m
+#TODO test this on an icestorm compatible FPGA
+
+#module up_counter(input logic clk,
+# input logic reset,
+# output[3:0] counter
+# );
+# reg [3:0] counter_up;
+# // up counter
+# always @(posedge clk or posedge reset)
+# begin
+# if(reset)
+# counter_up <= 4'd0;
+# else
+# counter_up <= counter_up + 4'd1;
+# end
+# assign counter = counter_up;
+#endmodule
+#
yacc1_debug = 0
yacc2_debug = 0
-parse_debug = 1
+parse_debug = 0
from ply import yacc, lex
import absyn
from ply import *
+import os
if __name__ == '__main__':
fname = sys.argv[1]
+ outputfn = os.path.splitext(fname)[0]+'.py'
+ print(outputfn)
with open(fname) as f:
data = f.read()
- parse_sv.absyn = absyn.Absyn()
+ parse_sv.absyn = absyn.Absyn(outputfn)
yacc.parse(data, debug=parse_sv.yacc2_debug)
print("No Error")
+ parse_sv.absyn.appendComments(data)