From 3007d32c2f40c7e70e3f20cc845cb319af769a65 Mon Sep 17 00:00:00 2001 From: Ghaith Tarawneh Date: Fri, 17 Nov 2017 15:35:33 +0000 Subject: [PATCH] Implement assign statements as BUF_BUILTIN --- gates/builtins.v | 3 +++ generator.py | 6 ++++-- lib_parser.py | 3 +-- templates/circuit.v | 2 +- verilog_parser.py | 7 ++++--- 5 files changed, 13 insertions(+), 8 deletions(-) create mode 100755 gates/builtins.v diff --git a/gates/builtins.v b/gates/builtins.v new file mode 100755 index 0000000..d9f6103 --- /dev/null +++ b/gates/builtins.v @@ -0,0 +1,3 @@ +module BUF_BUILTIN (output out, input inp); + assign out = inp; +endmodule diff --git a/generator.py b/generator.py index 2fb8220..2effad5 100644 --- a/generator.py +++ b/generator.py @@ -3,9 +3,10 @@ from jinja2 import Template from sg_parser import load_sg from lib_parser import load_lib +from lib_parser import merge_libs +from lib_parser import builtins_lib from collections import defaultdict from verilog_parser import load_verilog -from lib_parser import merge_libs import os import re @@ -93,7 +94,8 @@ def main(): output_dir = "generated" - lib = load_lib("libraries/workcraft.lib") + lib_wk = load_lib("libraries/workcraft.lib") + lib = merge_libs(lib_wk, builtins_lib) spec = load_sg("examples/SRAM-master/spec.sg") circuit = load_verilog("examples/SRAM-master/circuit.v") diff --git a/lib_parser.py b/lib_parser.py index 31fe417..6e2b73a 100644 --- a/lib_parser.py +++ b/lib_parser.py @@ -3,10 +3,9 @@ builtins_lib = { - "*assign": { + "BUF_BUILTIN": { "type": "GATE", "state_input": None, - "name": "*assign", "output": "out", "inputs": ["inp"], "definition": "out=inp", diff --git a/templates/circuit.v b/templates/circuit.v index a33bc61..a408e0d 100755 --- a/templates/circuit.v +++ b/templates/circuit.v @@ -61,7 +61,7 @@ module circuit ( {%- set pin_net = output_pre if pin==output_pin else net -%} .{{pin}}({{pin_net}}){{ ", " if not loop.last }} {%- endfor -%} - ); + ); {{"// virtual module" if mod.get("virtual")}} DFF {{instance}}_ff ( .CK(clk), diff --git a/verilog_parser.py b/verilog_parser.py index 6a678db..c247ac9 100755 --- a/verilog_parser.py +++ b/verilog_parser.py @@ -81,11 +81,12 @@ def add_assign(circuit, out, inp): # prefixed with * to make them non-compliant with the Verilog standard (and # thus obviously in need of special treatment). - instance = "*%s" % out + instance = "ASSIGN_%s" % out circuit["modules"][instance] = { - "type": "*assign", - "connections": { "inp": inp, "out": out } + "type": "BUF_BUILTIN", + "connections": { "inp": inp, "out": out }, + "virtual": True }