beginning simple always block parsing in verilog
This commit is contained in:
1 parent
20cf441abb
commit
a28128830d
2 files changed
+10
-1
No files matched your search
@@ -61,6 +61,10 @@ class VerilogTransformer(Transformer):
|
|||||||
pinmap[idx] = p
|
pinmap[idx] = p
|
||||||
return Instantiation(args[0], args[1], pinmap)
|
return Instantiation(args[0], args[1], pinmap)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def simple_dff(args):
|
||||||
|
return Instantiation('DFF', args[1], {'d': args[2], 'clk': args[0], 'q': args[1]} )
|
||||||
|
|
||||||
def range(self, args):
|
def range(self, args):
|
||||||
left = int(args[0].value)
|
left = int(args[0].value)
|
||||||
right = int(args[1].value) if len(args) > 1 else left
|
right = int(args[1].value) if len(args) > 1 else left
|
||||||
@@ -110,6 +114,7 @@ class VerilogTransformer(Transformer):
|
|||||||
def output(self, args): return self.declaration("output", args)
|
def output(self, args): return self.declaration("output", args)
|
||||||
def inout(self, args): return self.declaration("input", args) # just treat as input
|
def inout(self, args): return self.declaration("input", args) # just treat as input
|
||||||
def wire(self, args): return self.declaration("wire", args)
|
def wire(self, args): return self.declaration("wire", args)
|
||||||
|
def reg(self, args): pass #return self.declaration("wire", args) # treat as wire
|
||||||
|
|
||||||
def module(self, args):
|
def module(self, args):
|
||||||
c = Circuit(args[0])
|
c = Circuit(args[0])
|
||||||
@@ -235,14 +240,16 @@ GRAMMAR = r"""
|
|||||||
start: (module)*
|
start: (module)*
|
||||||
module: "module" name parameters ";" (_statement)* "endmodule"
|
module: "module" name parameters ";" (_statement)* "endmodule"
|
||||||
parameters: "(" [ _namelist ] ")"
|
parameters: "(" [ _namelist ] ")"
|
||||||
_statement: input | output | inout | tri | wire | assign | instantiation
|
_statement: input | output | inout | tri | wire | reg | assign | instantiation | simple_dff
|
||||||
input: "input" range? _namelist ";"
|
input: "input" range? _namelist ";"
|
||||||
output: "output" range? _namelist ";"
|
output: "output" range? _namelist ";"
|
||||||
inout: "inout" range? _namelist ";"
|
inout: "inout" range? _namelist ";"
|
||||||
tri: "tri" range? _namelist ";"
|
tri: "tri" range? _namelist ";"
|
||||||
wire: "wire" range? _namelist ";"
|
wire: "wire" range? _namelist ";"
|
||||||
|
reg: "reg" range? _namelist ";"
|
||||||
assign: "assign" sigsel "=" sigsel ";"
|
assign: "assign" sigsel "=" sigsel ";"
|
||||||
instantiation: name name "(" [ pin ( "," pin )* ] ")" ";"
|
instantiation: name name "(" [ pin ( "," pin )* ] ")" ";"
|
||||||
|
simple_dff: "always" "@" "(" "posedge" name ")" sigsel "<=" sigsel ";"
|
||||||
pin: namedpin | sigsel
|
pin: namedpin | sigsel
|
||||||
namedpin: "." name "(" sigsel? ")"
|
namedpin: "." name "(" sigsel? ")"
|
||||||
range: "[" /[0-9]+/ (":" /[0-9]+/)? "]"
|
range: "[" /[0-9]+/ (":" /[0-9]+/)? "]"
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# abc -f map_to_minimal.abc
|
||||||
|
|
||||||
read kyupy_simprims.genlib
|
read kyupy_simprims.genlib
|
||||||
read -m all_kyupy_simprims.v
|
read -m all_kyupy_simprims.v
|
||||||
fraig
|
fraig
|
||||||
|
|||||||
Reference in new issue
Block a user