beginning simple always block parsing in verilog

This commit is contained in:
stefan committed 2025-11-27 21:19:59 +09:00
1 parent 20cf441abb
commit a28128830d
2 files changed
+10 -1

No files matched your search

+8 -1
View File
@@ -61,6 +61,10 @@ class VerilogTransformer(Transformer):
pinmap[idx] = p
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):
left = int(args[0].value)
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 inout(self, args): return self.declaration("input", args) # just treat as input
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):
c = Circuit(args[0])
@@ -235,14 +240,16 @@ GRAMMAR = r"""
start: (module)*
module: "module" name parameters ";" (_statement)* "endmodule"
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 ";"
output: "output" range? _namelist ";"
inout: "inout" range? _namelist ";"
tri: "tri" range? _namelist ";"
wire: "wire" range? _namelist ";"
reg: "reg" range? _namelist ";"
assign: "assign" sigsel "=" sigsel ";"
instantiation: name name "(" [ pin ( "," pin )* ] ")" ";"
simple_dff: "always" "@" "(" "posedge" name ")" sigsel "<=" sigsel ";"
pin: namedpin | sigsel
namedpin: "." name "(" sigsel? ")"
range: "[" /[0-9]+/ (":" /[0-9]+/)? "]"
+2
View File
@@ -1,3 +1,5 @@
# abc -f map_to_minimal.abc
read kyupy_simprims.genlib
read -m all_kyupy_simprims.v
fraig