From fe6175b7a74ae1f47aab4e07f3892b7d7f14bda4 Mon Sep 17 00:00:00 2001 From: jacob Date: Wed, 4 May 2022 16:59:57 -0600 Subject: [PATCH 01/92] bug fix for parameters --- spydrnet/parsers/verilog/parser.py | 1 + 1 file changed, 1 insertion(+) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index 57d9acee..36d353eb 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -707,6 +707,7 @@ def parse_defparam_parameters(self): assert token == vt.EQUAL, self.error_string(vt.EQUAL, "separate the key from the value in a defparam statement", token) token = self.next_token() value = token + params[key] = value token = self.next_token() assert token == vt.SEMI_COLON, self.error_string(vt.SEMI_COLON, "to end the defparam statement", token) self.set_instance_parameters(instance, params) From 6fff73b688bfc63dc35021f45fefda597ba14a1e Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 6 May 2022 08:54:47 -0600 Subject: [PATCH 02/92] bug fix --- spydrnet/composers/eblif/eblif_composer.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/spydrnet/composers/eblif/eblif_composer.py b/spydrnet/composers/eblif/eblif_composer.py index ad8bcac8..656f4374 100644 --- a/spydrnet/composers/eblif/eblif_composer.py +++ b/spydrnet/composers/eblif/eblif_composer.py @@ -4,7 +4,7 @@ import spydrnet as sdn class EBLIFComposer: - def __init__(self,write_blackbox, write_cname=True): + def __init__(self, write_blackbox, write_cname=True): self.netlist = None self.open_file = None self.write_blackbox = write_blackbox @@ -36,9 +36,10 @@ def _compose(self,ir): self.clean_up() def compose_comments(self): - for comment in self.netlist["EBLIF.comment"]: - to_write = "# "+comment+"\n" - self.write_out(to_write) + if "EBLIF.comment" in self.netlist.data: + for comment in self.netlist["EBLIF.comment"]: + to_write = "# "+comment+"\n" + self.write_out(to_write) self.write_out("# Generated by \'BYU spydrnet tool\'\n") self.write_out("\n") From f7c80827c1da827fb8f4d2c3ec020a31768e7812 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 6 May 2022 08:56:14 -0600 Subject: [PATCH 03/92] bug fix --- spydrnet/parsers/eblif/eblif_parser.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spydrnet/parsers/eblif/eblif_parser.py b/spydrnet/parsers/eblif/eblif_parser.py index ace56da9..9c568664 100644 --- a/spydrnet/parsers/eblif/eblif_parser.py +++ b/spydrnet/parsers/eblif/eblif_parser.py @@ -113,7 +113,10 @@ def parse_other_model_input_ports(self,definition): while (self.tokenizer.token is not NEW_LINE): port_name, index = self.get_port_name_and_index(self.tokenizer.token) index = int(index) - port = next(definition.get_ports(filter=lambda x: x.name == port_name)) + port = next(definition.get_ports(filter=lambda x: x.name == port_name), None) + if port is None: + new_port = definition.create_port(name=port_name) + port = new_port port.direction = sdn.IN self.tokenizer.next() From 66576e16b28921bdcf38c62bcd36111a1d245db6 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 9 May 2022 08:54:37 -0600 Subject: [PATCH 04/92] change to allow for a list of wires to be declared on single line --- spydrnet/parsers/verilog/parser.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index 36d353eb..abd93be7 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -617,11 +617,12 @@ def parse_port_declaration(self, properties): if len(cable.wires) > 1: self.connect_resized_port_cable(cable, port) - def parse_cable_declaration(self, properties): - token = self.next_token() - assert token in [vt.REG, vt.WIRE, vt.TRI0, vt.TRI1], self.error_string( - "reg, tri1, tri0, or wire", "for cable declaration", token) - var_type = token + def parse_cable_declaration(self, properties, var_type = None): + if not var_type: + token = self.next_token() + assert token in [vt.REG, vt.WIRE, vt.TRI0, vt.TRI1], self.error_string( + "reg, tri1, tri0, or wire", "for cable declaration", token) + var_type = token token = self.peek_token() if token == vt.OPEN_BRACKET: @@ -640,8 +641,11 @@ def parse_cable_declaration(self, properties): cable["VERILOG.InlineConstraints"] = properties token = self.next_token() - assert token == vt.SEMI_COLON, self.error_string( - vt.SEMI_COLON, "to end cable declaration", token) + if token == vt.COMMA: # continue listing wires + self.parse_cable_declaration(dict(), var_type) + else: + assert token == vt.SEMI_COLON, self.error_string( + vt.SEMI_COLON, "to end cable declaration", token) def parse_instantiation(self, properties): token = self.next_token() From 7a2638c7c1aa5bf94fc6353bde5128de48a5b587 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 9 May 2022 09:13:45 -0600 Subject: [PATCH 05/92] added option to write parameters with #() before instantiation or with defparam statement after --- spydrnet/composers/__init__.py | 4 ++-- spydrnet/composers/verilog/composer.py | 17 +++++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/spydrnet/composers/__init__.py b/spydrnet/composers/__init__.py index 153f64c4..0c8f968b 100644 --- a/spydrnet/composers/__init__.py +++ b/spydrnet/composers/__init__.py @@ -1,7 +1,7 @@ import os -def compose(netlist, filename, definition_list=[], write_blackbox=True, write_eblif_cname=True): +def compose(netlist, filename, definition_list=[], write_blackbox=True, write_eblif_cname=True, defparam = False): """To compose a file into a netlist format""" extension = os.path.splitext(filename)[1] extension_lower = extension.lower() @@ -13,7 +13,7 @@ def compose(netlist, filename, definition_list=[], write_blackbox=True, write_eb composer.run(netlist, filename) elif extension_lower in [".v", ".vh"]: from spydrnet.composers.verilog.composer import Composer - composer = Composer(definition_list, write_blackbox) + composer = Composer(definition_list, write_blackbox, defparam) composer.run(netlist, file_out=filename) elif extension_lower in [".eblif",".blif"]: from spydrnet.composers.eblif.eblif_composer import EBLIFComposer diff --git a/spydrnet/composers/verilog/composer.py b/spydrnet/composers/verilog/composer.py index 879789a8..cddeb3c4 100644 --- a/spydrnet/composers/verilog/composer.py +++ b/spydrnet/composers/verilog/composer.py @@ -6,7 +6,7 @@ class Composer: - def __init__(self, definition_list=None, write_blackbox=False): + def __init__(self, definition_list=None, write_blackbox=False, defparam = False): """ Write a verilog netlist from SDN netlist parameters @@ -25,6 +25,7 @@ def __init__(self, definition_list=None, write_blackbox=False): self.indent_count = 4 # set the indentation level for various components self.write_blackbox = write_blackbox self.definition_list = definition_list + self.defparam = defparam def run(self, ir, file_out="out.v"): @@ -158,13 +159,21 @@ def _write_module_body_instance(self, instance): self.file.write(self.indent_count * vt.SPACE) self._write_name(instance.reference) self.file.write(vt.SPACE) - if "VERILOG.Parameters" in instance: - self._write_instance_parameters(instance) - self.file.write(self.indent_count * vt.SPACE) + if not self.defparam: + if "VERILOG.Parameters" in instance: + self._write_instance_parameters(instance) + self.file.write(self.indent_count * vt.SPACE) self._write_name(instance) self.file.write(vt.NEW_LINE) self._write_instance_ports(instance) self.file.write(vt.NEW_LINE) + if self.defparam: + if "VERILOG.Parameters" in instance: + for key, value in instance["VERILOG.Parameters"].items(): + to_write = (self.indent_count * vt.SPACE) + vt.DEFPARAM + vt.SPACE + to_write += instance.name + vt.DOT + key + vt.EQUAL + to_write += value + vt.SEMI_COLON + vt.NEW_LINE + self.file.write(to_write) def _write_module_body_ports(self, definition): for p in definition.ports: From e87b732114e007147f775c8b607dcfc9e64d1fd4 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 9 May 2022 09:21:33 -0600 Subject: [PATCH 06/92] added new defparam parameter to parameter list --- spydrnet/composers/verilog/composer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/spydrnet/composers/verilog/composer.py b/spydrnet/composers/verilog/composer.py index cddeb3c4..2687c7aa 100644 --- a/spydrnet/composers/verilog/composer.py +++ b/spydrnet/composers/verilog/composer.py @@ -14,6 +14,7 @@ def __init__(self, definition_list=None, write_blackbox=False, defparam = False) definition_list - (list[str]) list of defintions to write write_blackbox - (bool) Skips writing black boxes/verilog primitives + defparam - (bool) Compose parameters in *defparam* statements instead of using #() """ self.file = None self.direction_string_map = dict() From 43b9732f3bb8bcdb445e76fce2ad64be059e44ce Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Thu, 12 May 2022 11:21:56 -0600 Subject: [PATCH 07/92] initial fix for implicitly mapped ports parsing in Verilog --- spydrnet/parsers/verilog/parser.py | 77 +++++++++++++++++++++++++-- spydrnet/parsers/verilog/tokenizer.py | 34 ++++++++++++ 2 files changed, 108 insertions(+), 3 deletions(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index abd93be7..f1d92a1e 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -104,6 +104,8 @@ def __init__(self): self.blackbox_holder = self.BlackboxHolder() + self.implicit_map_port_info = dict() + def parse(self): ''' parse a verilog netlist represented by verilog file @@ -239,6 +241,7 @@ def parse_verilog(self): "something at the top level of the file", "got unexpected token", token) self.add_blackbox_definitions() + self.add_implicit_map_ports() return self.netlist @@ -769,10 +772,25 @@ def parse_port_mapping(self): vt.OPEN_PARENTHESIS, "to start the port mapping", token) while token != vt.CLOSE_PARENTHESIS: - self.parse_port_map_single() - token = self.next_token() + peek_token = self.peek_token() + if peek_token == vt.DOT: + self.parse_port_map_single() + token = self.next_token() + else: + # the ports are not mapped, so store the tokens in a dictionary to add later + try: + self.implicit_map_port_info[self.current_instance] + except KeyError: + self.implicit_map_port_info[self.current_instance] = list() + current_list = self.implicit_map_port_info[self.current_instance] + while(self.peek_token() != vt.CLOSE_PARENTHESIS): + current_token = self.next_token() + current_list.append(current_token) + current_list.append(self.peek_token()) + token = self.next_token() + assert token in [vt.COMMA, vt.CLOSE_PARENTHESIS], self.error_string( - vt.COMMA + " or " + vt.CLOSE_PARENTHESIS, "between port mapping elements or to end the port mapping", token) + vt.COMMA + " or " + vt.CLOSE_PARENTHESIS, "between port mapping elements or to end the port mapping", token) def parse_port_map_single(self): '''acutally does the mapping of the pins''' @@ -820,6 +838,59 @@ def parse_port_map_single(self): assert token == vt.CLOSE_PARENTHESIS, self.error_string( vt.CLOSE_PARENTHESIS, "to end cable name in port mapping", token) + # these ports were not explicitly mapped, and thus had to be added after each respective module info was parsed + def add_implicit_map_ports(self): + for instance in self.implicit_map_port_info.keys(): + self.current_instance = instance + self.current_definition = instance.parent + token_list = self.implicit_map_port_info[instance] + port_list = list(port for port in self.current_instance.reference.get_ports()) + # if len(port_list) < 1: + # print("PROBLEM for "+ instance.name) + # print("but he has tokens "+ str(token_list)) + # continue + + from spydrnet.parsers.verilog.tokenizer import VerilogTokenizerPart2 + self.tokenizer = VerilogTokenizerPart2(token_list) + + token = self.peek_token() + index = 0 + while token != vt.CLOSE_PARENTHESIS: + # token = self.peek_token() + + if token == vt.OPEN_BRACE: + wires = self.parse_cable_concatenation() + else: + cable, left, right = self.parse_variable_instantiation() + wires = self.get_wires_from_cable(cable, left, right) + + # if not module def was found, there are no ports. So create one here named after the cable connected. + if len(port_list) < (index + 1): + print("Not enough ports for " + self.current_instance.name) + port = self.current_instance.reference.create_port(cable.name) + port.create_pin() + print("created port "+ port.name) + else: + port = port_list[index] + pins = [] + for pin in self.current_instance.pins: + if pin.inner_pin in port.pins: + pins.append(pin) + + assert len(pins) >= len(wires), self.error_string( + "pins length to match or exceed cable.wires length", "INTERNAL ERROR", str(len(pins)) + "!=" + str(len(wires))) + + # # there can be unconnected pins at the end of the port. + for i in range(len(wires)): + wires[i].connect_pin(pins[i]) + index += 1 + token = self.next_token() + if token != vt.CLOSE_PARENTHESIS: + token = self.peek_token() + + assert token == vt.CLOSE_PARENTHESIS, self.error_string( + vt.CLOSE_PARENTHESIS, "to end cable name in port mapping", token) + def parse_assign(self): token = self.next_token() assert token == vt.ASSIGN, self.error_string( diff --git a/spydrnet/parsers/verilog/tokenizer.py b/spydrnet/parsers/verilog/tokenizer.py index e75bbcd4..649e5365 100644 --- a/spydrnet/parsers/verilog/tokenizer.py +++ b/spydrnet/parsers/verilog/tokenizer.py @@ -105,3 +105,37 @@ def generate_tokens(self): def close(self): if self.input_stream: self.input_stream.close() + +class VerilogTokenizerPart2(): + def __init__(self, token_list): + self.token_list = token_list + self.next_token = None + self.token = None + self.generator = self.init_generator() + self.line_number = 0 + + def init_generator(self): + for token in self.token_list: + yield token + + def next(self): + if self.next_token is not None: + self.token = self.next_token + self.next_token = None + else: + self.token = next(self.generator) + return self.token + + def peek(self): + if self.next_token is not None: + return self.next_token + else: + token = next(self.generator) + while len(token) >= 2 and (token[0:2] == vt.OPEN_LINE_COMMENT + or token[0:2] == vt.OPEN_BLOCK_COMMENT): + token = next(self.generator) + self.next_token = token + return self.next_token + + def __del__(self): + None \ No newline at end of file From 7728b3d11bf663bd5675eaaf45ce99d6c0d9a608 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 13 May 2022 14:25:23 -0600 Subject: [PATCH 08/92] full support for parsing implicitly mapped ports in verilog --- spydrnet/parsers/verilog/parser.py | 71 +++++++++++++++++-- .../verilog/tests/test_verilogParser.py | 28 ++++++++ spydrnet/parsers/verilog/tokenizer.py | 43 +++++++++++ 3 files changed, 136 insertions(+), 6 deletions(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index abd93be7..21184fe8 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -2,7 +2,7 @@ # please see the BYU CCl SpyDrNet license file for terms of usage. -from spydrnet.parsers.verilog.tokenizer import VerilogTokenizer +from spydrnet.parsers.verilog.tokenizer import VerilogTokenizer, VerilogTokenizerSimple import spydrnet.parsers.verilog.verilog_tokens as vt from spydrnet.ir import Netlist, Library, Definition, Port, Cable, Instance, OuterPin from spydrnet.plugins import namespace_manager @@ -104,6 +104,8 @@ def __init__(self): self.blackbox_holder = self.BlackboxHolder() + self.implicitly_mapped_ports = dict() + def parse(self): ''' parse a verilog netlist represented by verilog file @@ -239,6 +241,7 @@ def parse_verilog(self): "something at the top level of the file", "got unexpected token", token) self.add_blackbox_definitions() + self.connect_implicitly_mapped_ports() return self.netlist @@ -768,11 +771,20 @@ def parse_port_mapping(self): assert token == vt.OPEN_PARENTHESIS, self.error_string( vt.OPEN_PARENTHESIS, "to start the port mapping", token) - while token != vt.CLOSE_PARENTHESIS: - self.parse_port_map_single() - token = self.next_token() - assert token in [vt.COMMA, vt.CLOSE_PARENTHESIS], self.error_string( - vt.COMMA + " or " + vt.CLOSE_PARENTHESIS, "between port mapping elements or to end the port mapping", token) + peeked_token = self.peek_token() + if peeked_token != vt.DOT: # the ports are implicitly mapped + token_list = list() + while (token != vt.CLOSE_PARENTHESIS): + token_list.append(token) + token = self.next_token() + token_list.append(token) + self.implicitly_mapped_ports[self.current_instance] = token_list + else: # the ports are explicitly mapped + while token != vt.CLOSE_PARENTHESIS: + self.parse_port_map_single() + token = self.next_token() + assert token in [vt.COMMA, vt.CLOSE_PARENTHESIS], self.error_string( + vt.COMMA + " or " + vt.CLOSE_PARENTHESIS, "between port mapping elements or to end the port mapping", token) def parse_port_map_single(self): '''acutally does the mapping of the pins''' @@ -820,6 +832,53 @@ def parse_port_map_single(self): assert token == vt.CLOSE_PARENTHESIS, self.error_string( vt.CLOSE_PARENTHESIS, "to end cable name in port mapping", token) + def connect_implicitly_mapped_ports(self): + for instance, token_list in self.implicitly_mapped_ports.items(): + self.current_instance = instance + self.current_definition = instance.parent + port_list = list(x for x in instance.reference.get_ports()) + self.tokenizer = VerilogTokenizerSimple(token_list) + + token = self.next_token() + assert token == vt.OPEN_PARENTHESIS, self.error_string( + vt.OPEN_PARENTHESIS, "to encapsulate cable name in port mapping", token) + + index = 0 + while (token != vt.CLOSE_PARENTHESIS): + token = self.peek_token() + + if token == vt.OPEN_BRACE: + wires = self.parse_cable_concatenation() + else: + cable, left, right = self.parse_variable_instantiation() + wires = self.get_wires_from_cable(cable, left, right) + + if (index > len(port_list) - 1): # no port exists yet i.e. no module information in netlist + # print("Not enough ports for "+ instance.name) + port = instance.reference.create_port() + self.populate_new_port(port, None, len(wires)-1, 0, None) + else: + port = port_list[index] + + pins = list() + for pin in self.current_instance.pins: + if pin.inner_pin in port.pins: + pins.append(pin) + + assert len(pins) >= len(wires), self.error_string( + "pins length to match or exceed cable.wires length", "INTERNAL ERROR", str(len(pins)) + "!=" + str(len(wires))) + + + # there can be unconnected pins at the end of the port. + for i in range(len(wires)): + wires[i].connect_pin(pins[i]) + + token = self.next_token() + index += 1 + + assert token == vt.CLOSE_PARENTHESIS, self.error_string( + vt.CLOSE_PARENTHESIS, "to end cable name in port mapping", token) + def parse_assign(self): token = self.next_token() assert token == vt.ASSIGN, self.error_string( diff --git a/spydrnet/parsers/verilog/tests/test_verilogParser.py b/spydrnet/parsers/verilog/tests/test_verilogParser.py index 4fe1e4a5..d4c0a1d2 100644 --- a/spydrnet/parsers/verilog/tests/test_verilogParser.py +++ b/spydrnet/parsers/verilog/tests/test_verilogParser.py @@ -6,6 +6,7 @@ from spydrnet.parsers.verilog.parser import VerilogParser import spydrnet.parsers.verilog.verilog_tokens as vt from spydrnet import parsers +from spydrnet.util.selection import Selection import os class TestVerilogParser(unittest.TestCase): @@ -815,6 +816,33 @@ def test_parse_port_map_single(self): for p in parser.current_instance.pins: assert p in w_pins + def test_parse_implicitly_mapped_ports(self): + # create dummy netlist + to_write = "module top (input clk, output out);\n" + to_write += "\twire clk_c, VCC_net, out;\n" + to_write += "\tINST my_inst (clk_c, VCC_net, out);\n" + to_write += "endmodule\n\n" + to_write += "module INST (input port_0, input port_1, output port_2);\n" + to_write += "endmodule" + f = open("test_netlist", "x") + f.write(to_write) + f.close() + + parser = VerilogParser.from_filename("test_netlist") + parser.parse() + netlist = parser.netlist + + instance = next(netlist.get_instances("my_inst")) + self.assertEqual(instance.name, "my_inst") + connections = ["clk_c", "VCC_net", "out"] + for i in range(0,2): + port = next(instance.get_ports("port_"+str(i))) + self.assertEqual(len(port.pins), 1) + for pin in port.get_pins(selection=Selection.OUTSIDE): + self.assertEqual(pin.wire.cable.name, connections[i]) + + os.remove("test_netlist") + ############################################################################ ##Port creation and modification ############################################################################ diff --git a/spydrnet/parsers/verilog/tokenizer.py b/spydrnet/parsers/verilog/tokenizer.py index e75bbcd4..38092b5d 100644 --- a/spydrnet/parsers/verilog/tokenizer.py +++ b/spydrnet/parsers/verilog/tokenizer.py @@ -105,3 +105,46 @@ def generate_tokens(self): def close(self): if self.input_stream: self.input_stream.close() + + +class VerilogTokenizerSimple(): + def __init__(self, token_list): + self.token = None + self.next_token = None + self.line_number = 0 + self.token_list = token_list + self.generator = self.generate_tokens() + + def __del__(self): + if hasattr(self, "input_stream"): + self.close() + + def generate_tokens(self): + for token in self.token_list: + yield token + + def has_next(self): + try: + self.peek() + return True + except StopIteration: + return False + + def next(self): + if self.next_token is not None: + self.token = self.next_token + self.next_token = None + else: + self.token = next(self.generator) + return self.token + + def peek(self): + if self.next_token is not None: + return self.next_token + else: + token = next(self.generator) + while len(token) >= 2 and (token[0:2] == vt.OPEN_LINE_COMMENT + or token[0:2] == vt.OPEN_BLOCK_COMMENT): + token = next(self.generator) + self.next_token = token + return self.next_token \ No newline at end of file From 2b7c106e2aef77233fcc8cf26cd8e6c251237ab7 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 13 May 2022 14:29:59 -0600 Subject: [PATCH 09/92] bug fix --- spydrnet/parsers/verilog/parser.py | 23 ----------------------- 1 file changed, 23 deletions(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index 22cc1a3b..c8a52b47 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -772,7 +772,6 @@ def parse_port_mapping(self): assert token == vt.OPEN_PARENTHESIS, self.error_string( vt.OPEN_PARENTHESIS, "to start the port mapping", token) -<<<<<<< HEAD peeked_token = self.peek_token() if peeked_token != vt.DOT: # the ports are implicitly mapped token_list = list() @@ -787,28 +786,6 @@ def parse_port_mapping(self): token = self.next_token() assert token in [vt.COMMA, vt.CLOSE_PARENTHESIS], self.error_string( vt.COMMA + " or " + vt.CLOSE_PARENTHESIS, "between port mapping elements or to end the port mapping", token) -======= - while token != vt.CLOSE_PARENTHESIS: - peek_token = self.peek_token() - if peek_token == vt.DOT: - self.parse_port_map_single() - token = self.next_token() - else: - # the ports are not mapped, so store the tokens in a dictionary to add later - try: - self.implicit_map_port_info[self.current_instance] - except KeyError: - self.implicit_map_port_info[self.current_instance] = list() - current_list = self.implicit_map_port_info[self.current_instance] - while(self.peek_token() != vt.CLOSE_PARENTHESIS): - current_token = self.next_token() - current_list.append(current_token) - current_list.append(self.peek_token()) - token = self.next_token() - - assert token in [vt.COMMA, vt.CLOSE_PARENTHESIS], self.error_string( - vt.COMMA + " or " + vt.CLOSE_PARENTHESIS, "between port mapping elements or to end the port mapping", token) ->>>>>>> 43b9732f3bb8bcdb445e76fce2ad64be059e44ce def parse_port_map_single(self): '''acutally does the mapping of the pins''' From e51c3bd25c7c8e1f4b0c08e97834aa8a49538b59 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 13 May 2022 14:38:06 -0600 Subject: [PATCH 10/92] minor change to test --- spydrnet/util/tests/test_get_hwires.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spydrnet/util/tests/test_get_hwires.py b/spydrnet/util/tests/test_get_hwires.py index 14c2ba7f..51d24ec8 100644 --- a/spydrnet/util/tests/test_get_hwires.py +++ b/spydrnet/util/tests/test_get_hwires.py @@ -217,7 +217,7 @@ def test_through_hierarchy_again(self): # look at wire_name href = next(sdn.get_hwires(middle_floating_wire)) - assert ('middle/middle_cable[1]', href.name) + assert ('middle/middle_cable[1]' == href.name) hrefs = set(sdn.get_hwires(netlist.top_instance, recursive=True)) assert (href in hrefs) From a88a75e3fb5399257efcab4128e4e945c9334d66 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 20 May 2022 09:06:22 -0600 Subject: [PATCH 11/92] added .vm as a recognized verilog extension --- spydrnet/composers/__init__.py | 2 +- spydrnet/composers/verilog/composer.py | 38 +++++++++++++++++++++++++- spydrnet/parsers/__init__.py | 2 +- 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/spydrnet/composers/__init__.py b/spydrnet/composers/__init__.py index 0c8f968b..9e8257e5 100644 --- a/spydrnet/composers/__init__.py +++ b/spydrnet/composers/__init__.py @@ -11,7 +11,7 @@ def compose(netlist, filename, definition_list=[], write_blackbox=True, write_eb if netlist.name is None: raise Exception("netlist.name undefined") composer.run(netlist, filename) - elif extension_lower in [".v", ".vh"]: + elif extension_lower in [".v", ".vh", ".vm"]: from spydrnet.composers.verilog.composer import Composer composer = Composer(definition_list, write_blackbox, defparam) composer.run(netlist, file_out=filename) diff --git a/spydrnet/composers/verilog/composer.py b/spydrnet/composers/verilog/composer.py index 2687c7aa..cb1c9677 100644 --- a/spydrnet/composers/verilog/composer.py +++ b/spydrnet/composers/verilog/composer.py @@ -368,13 +368,49 @@ def _write_instance_ports(self, instance): if not first: self.file.write(vt.COMMA) self.file.write(vt.NEW_LINE) - self._write_instance_port(instance, p) + if p.name: + self._write_instance_port(instance, p) + else: + self._write_implicitly_mapped__instance_port(instance, p) first = False self.file.write(vt.NEW_LINE) self.file.write(self.indent_count * vt.SPACE) self.file.write(vt.CLOSE_PARENTHESIS) self.file.write(vt.SEMI_COLON) + def _write_implicitly_mapped__instance_port(self, instance, port): + '''Ports that have no name must be implicitly mapped. E.g. inst(VCC_net) rather than inst(.p(VCC_net))''' + self.file.write(2*self.indent_count * vt.SPACE) + # self.file.write(vt.DOT) + # self._write_name(port) + # self.file.write(vt.OPEN_PARENTHESIS) + pins = [] + for p in port.pins: + pins.append(instance.pins[p]) + if pins[0].wire is not None: + name = pins[0].wire.cable.name + else: + name = None + concatenated = self._is_pinset_concatenated(pins, name) + wires = [] + for p in pins: + wires.append(p.wire) + if concatenated: + self._write_concatenation(wires) + else: + if pins[0].wire is not None: + last = -1 + wl = wires[last] + wr = wires[0] + while wl is None: # get the last named non none wire. + last = last - 1 + wl = wires[last] + il = self._index_of_wire_in_cable(wl) + ir = self._index_of_wire_in_cable(wr) + self._write_bundle_with_indicies(wl.cable, ir, il) + + # self.file.write(vt.CLOSE_PARENTHESIS) + def _write_instance_port(self, instance, port): self.file.write(2*self.indent_count * vt.SPACE) self.file.write(vt.DOT) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 77f4c1ec..d97bd3f5 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -59,7 +59,7 @@ def _parse(filename): if extension in [".edf", ".edif", ".edn"]: from spydrnet.parsers.edif.parser import EdifParser parser = EdifParser.from_filename(filename) - elif extension in [".v", ".vh"]: + elif extension in [".v", ".vh", ".vm"]: from spydrnet.parsers.verilog.parser import VerilogParser parser = VerilogParser.from_filename(filename) elif extension in [".eblif",".blif"]: From 18f624a0136844e9ce6e38913d6ae44546deeb9a Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 20 May 2022 13:32:38 -0600 Subject: [PATCH 12/92] dynamic top_instance fixing during verilog netlist parsing if top module is not first module listed --- spydrnet/parsers/verilog/parser.py | 13 ++++++++ .../verilog/tests/test_verilogParser.py | 33 +++++++++++++++++-- 2 files changed, 43 insertions(+), 3 deletions(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index c8a52b47..9267f4c3 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -667,6 +667,19 @@ def parse_instantiation(self, properties): "instance name", "for instantiation", token) name = token + # the current definition is instancing the current top instance, so a change needs to be made + if def_name == self.netlist.top_instance.reference.name: + old_top_instance = self.netlist.top_instance + self.netlist.top_instance = sdn.Instance() + self.netlist.top_instance.name = self.current_definition.name + "_top" + self.netlist.top_instance.reference = self.current_definition + self.netlist.name = "SDN_VERILOG_NETLIST_" + self.current_definition.name + + # this instance should just go away. It was created to be the top instance but we don't want that + # it has no parent. And now with no reference, it should have no ties to the netlist. + old_top_instance.reference = None + + token = self.peek_token() assert token == vt.OPEN_PARENTHESIS, self.error_string( vt.OPEN_PARENTHESIS, "to start port to cable mapping", token) diff --git a/spydrnet/parsers/verilog/tests/test_verilogParser.py b/spydrnet/parsers/verilog/tests/test_verilogParser.py index d4c0a1d2..22b78379 100644 --- a/spydrnet/parsers/verilog/tests/test_verilogParser.py +++ b/spydrnet/parsers/verilog/tests/test_verilogParser.py @@ -824,11 +824,11 @@ def test_parse_implicitly_mapped_ports(self): to_write += "endmodule\n\n" to_write += "module INST (input port_0, input port_1, output port_2);\n" to_write += "endmodule" - f = open("test_netlist", "x") + f = open("test_netlist.v", "x") f.write(to_write) f.close() - parser = VerilogParser.from_filename("test_netlist") + parser = VerilogParser.from_filename("test_netlist.v") parser.parse() netlist = parser.netlist @@ -841,7 +841,7 @@ def test_parse_implicitly_mapped_ports(self): for pin in port.get_pins(selection=Selection.OUTSIDE): self.assertEqual(pin.wire.cable.name, connections[i]) - os.remove("test_netlist") + os.remove("test_netlist.v") ############################################################################ ##Port creation and modification @@ -1279,6 +1279,33 @@ def test_parser_star_list(self): assert "DONT_TOUCH" in stars2 assert stars2["DONT_TOUCH"] == None + ############################################ + ##test hierarchy + ############################################ + + def test_hierarchy_fixing(self): + # create dummy netlist with the top instance coming after the lower instance + to_write = "module INST (input port_0, input port_1, output port_2);\n" + to_write += "endmodule\n\n" + to_write += "module top (input clk, output out);\n" + to_write += "\twire clk_c, VCC_net, out;\n" + to_write += "\tINST my_inst (clk_c, VCC_net, out);\n" + to_write += "endmodule\n" + f = open("test_netlist.v", "x") + f.write(to_write) + f.close() + + parser = VerilogParser.from_filename("test_netlist.v") + parser.parse() + netlist = parser.netlist + + self.assertEqual(netlist.top_instance.name, "top_top") + instance = next(netlist.get_instances("my_inst")) + self.assertTrue(instance.parent is netlist.top_instance.reference) + self.assertTrue(instance in netlist.top_instance.reference.children) + self.assertEqual(len(instance.reference.references), 1) + + os.remove("test_netlist.v") ############################################ From 65be19866f7ee7712949bd25a0c50d2b3d72b004 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 20 May 2022 14:11:20 -0600 Subject: [PATCH 13/92] more bug fixes for correcting hierarchy when parsing --- spydrnet/parsers/verilog/parser.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index 9267f4c3..d1dc2e93 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -669,11 +669,29 @@ def parse_instantiation(self, properties): # the current definition is instancing the current top instance, so a change needs to be made if def_name == self.netlist.top_instance.reference.name: + # print(self.current_definition.name + " is instancing the current top instance (" + name+ " which is a "+ self.netlist.top_instance.reference.name+")") old_top_instance = self.netlist.top_instance + + new_level = self.current_definition + # we know the current top is not right. So now we can move it up a level. + # But double check to make sure nothing is instancing the potential new top. + # Move up levels until we reach a new top + if (len(self.current_definition.references) > 0): + current_level = list(x for x in self.current_definition.references)[0] + while(True): + current_level = current_level.parent + try: + current_level.parent + except AttributeError: + new_level = current_level + break; + self.netlist.top_instance = sdn.Instance() - self.netlist.top_instance.name = self.current_definition.name + "_top" - self.netlist.top_instance.reference = self.current_definition - self.netlist.name = "SDN_VERILOG_NETLIST_" + self.current_definition.name + self.netlist.top_instance.name = new_level.name + "_top" + self.netlist.top_instance.reference = new_level + self.netlist.name = "SDN_VERILOG_NETLIST_" + new_level.name + + # print("New top instance is "+ self.netlist.top_instance.name) # this instance should just go away. It was created to be the top instance but we don't want that # it has no parent. And now with no reference, it should have no ties to the netlist. From 9de646942259bc36bef0b88673ea2c9db585a0ef Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 23 May 2022 09:34:08 -0600 Subject: [PATCH 14/92] helper function to parse and insert primitive port information --- .../verilog/module_information_filler.py | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 spydrnet/parsers/verilog/module_information_filler.py diff --git a/spydrnet/parsers/verilog/module_information_filler.py b/spydrnet/parsers/verilog/module_information_filler.py new file mode 100644 index 00000000..59f9ed92 --- /dev/null +++ b/spydrnet/parsers/verilog/module_information_filler.py @@ -0,0 +1,58 @@ +import spydrnet as sdn +from spydrnet.ir import Library +from spydrnet.parsers.verilog.parser import VerilogParser + +MODULE = "module" +END_MODULE = "endmodule" +INPUT = "input" +OUTPUT = "output" +PARAMETER = "parameter" + +""" +A class to extract primitive port information from a Verilog file and insert it into the netlist. The input file is parsed using the Verilog Parser and if any module information is found for a definition in netlist_defs, the port information (i.e. directions) is added. + +parameters +---------- +input_file - the name of the verilog file to be parsed +netlist_defs - a map of each definition name to the corresponding definition. +""" + +class ModuleInformationFiller(): + def __init__(self, input_file, netlist_defs): + self.input_file = input_file + self.netlist_defs = netlist_defs + self.parsed_defs = dict() + self.parser = None + + def run(self): + self.initialize() + while(self.parser.tokenizer.has_next()): + self.parser.parse_primitive() + definition = self.parser.current_definition + self.parsed_defs[definition.name] = definition + cnt = self.insert_info() + print("Found information for %d definitions" % cnt) + + def initialize(self): + self.parser = VerilogParser.from_filename(self.input_file) + self.parser.initialize_tokenizer() + self.parser.current_library = Library() + + def insert_info(self): + cnt = 0 + for def_name, definition in self.netlist_defs.items(): + if def_name in self.parsed_defs.keys(): + match = self.parsed_defs[def_name] + port_dict = self.create_port_dict(match) + # print(definition.name + " " + str(port_dict)) + for port in definition.get_ports(): + port.direction = port_dict[port.name] + cnt+=1 + return cnt + + def create_port_dict(self, definition): + port_dict = dict() + for port in definition.get_ports(): + port_dict[port.name] = port.direction + # print(port.name + " has direction " + str(port.direction)) + return port_dict \ No newline at end of file From 7b56855fc882c91194bfcbac3910bcf824fefc20 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Tue, 24 May 2022 11:14:31 -0600 Subject: [PATCH 15/92] initial support for built in primitive libraries based on architecture --- spydrnet/parsers/__init__.py | 14 +++++++-- ..._filler.py => primitive_library_reader.py} | 27 ++++++++++++++---- .../f4pga_xilinx_7series.v.zip | Bin 0 -> 422718 bytes .../architecture_libraries/lifcl.v.zip | Bin 0 -> 64352 bytes .../xilinx_7series.v.zip | Bin 0 -> 334311 bytes spydrnet/util/architecture.py | 9 ++++++ 6 files changed, 41 insertions(+), 9 deletions(-) rename spydrnet/parsers/{verilog/module_information_filler.py => primitive_library_reader.py} (69%) create mode 100644 spydrnet/support_files/architecture_libraries/f4pga_xilinx_7series.v.zip create mode 100644 spydrnet/support_files/architecture_libraries/lifcl.v.zip create mode 100644 spydrnet/support_files/architecture_libraries/xilinx_7series.v.zip create mode 100644 spydrnet/util/architecture.py diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index d97bd3f5..4ddf3e61 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -1,6 +1,7 @@ import os import zipfile import tempfile +from spydrnet.parsers.primitive_library_reader import PrimitiveLibraryReader """ Init for Spydrnet. The functions below can be called directly @@ -8,7 +9,7 @@ """ -def parse(filename): +def parse(filename, architecture=None): """ The parse function is able to parse an EDIF (.edf) file, a Verilog file (.v), or an EBLIF file (.eblif). @@ -51,10 +52,10 @@ def parse(filename): filename = os.path.join( tempdirname, basename_less_final_extension) return _parse(filename) - return _parse(filename) + return _parse(filename, architecture) -def _parse(filename): +def _parse(filename, architecture=None): extension = get_lowercase_extension(filename) if extension in [".edf", ".edif", ".edn"]: from spydrnet.parsers.edif.parser import EdifParser @@ -68,6 +69,9 @@ def _parse(filename): else: raise RuntimeError("Extension {} not recognized.".format(extension)) parser.parse() + + if architecture: + read_primitive_library(architecture, parser.netlist) return parser.netlist @@ -75,3 +79,7 @@ def get_lowercase_extension(filename): extension = os.path.splitext(filename)[1] extension_lower = extension.lower() return extension_lower + +def read_primitive_library(architecture, netlist): + reader = PrimitiveLibraryReader(architecture, netlist) + reader.run() \ No newline at end of file diff --git a/spydrnet/parsers/verilog/module_information_filler.py b/spydrnet/parsers/primitive_library_reader.py similarity index 69% rename from spydrnet/parsers/verilog/module_information_filler.py rename to spydrnet/parsers/primitive_library_reader.py index 59f9ed92..ef01ca7a 100644 --- a/spydrnet/parsers/verilog/module_information_filler.py +++ b/spydrnet/parsers/primitive_library_reader.py @@ -1,6 +1,7 @@ import spydrnet as sdn from spydrnet.ir import Library from spydrnet.parsers.verilog.parser import VerilogParser +import spydrnet.parsers.verilog.verilog_tokens as vt MODULE = "module" END_MODULE = "endmodule" @@ -13,20 +14,22 @@ parameters ---------- -input_file - the name of the verilog file to be parsed -netlist_defs - a map of each definition name to the corresponding definition. +architecture - the targeted architecture. Must be a type from spydrnet.util.architecture +netlist - the current netlist """ -class ModuleInformationFiller(): - def __init__(self, input_file, netlist_defs): - self.input_file = input_file - self.netlist_defs = netlist_defs +class PrimitiveLibraryReader(): + def __init__(self, architecture, netlist): + self.input_file = architecture + self.netlist = netlist + self.netlist_defs = dict() self.parsed_defs = dict() self.parser = None def run(self): self.initialize() while(self.parser.tokenizer.has_next()): + self.get_past_comments() self.parser.parse_primitive() definition = self.parser.current_definition self.parsed_defs[definition.name] = definition @@ -37,6 +40,18 @@ def initialize(self): self.parser = VerilogParser.from_filename(self.input_file) self.parser.initialize_tokenizer() self.parser.current_library = Library() + self.create_defintiion_dict() + + def get_past_comments(self): + token = self.parser.peek_token() + while(token != vt.MODULE and token != vt.PRIMITIVE): + # print(token) + self.parser.next_token() + token = self.parser.peek_token() + + def create_defintiion_dict(self): + for definition in self.netlist.get_definitions(): + self.netlist_defs[definition.name] = definition def insert_info(self): cnt = 0 diff --git a/spydrnet/support_files/architecture_libraries/f4pga_xilinx_7series.v.zip b/spydrnet/support_files/architecture_libraries/f4pga_xilinx_7series.v.zip new file mode 100644 index 0000000000000000000000000000000000000000..26d8f6480edb9a05a9f433ab9e6195ff920e546c GIT binary patch literal 422718 zcmbq)b95!a*KKUuwrv{|Yhp}n+n8u#+qRudY)x$2cJl7b?|biC-+%9|w^sM<+I3Ft zQ?;x5boIUKD$0U_p#cE_K><}NwW?-AdkcCyLI9N*2?1dM;Q^Vl*_#>ayIWXW*t+X; zI+-|Hm^d-Gs;NQ)fs%qn8L zXEV;%dy`8L?MQW?feOIao6~8~faDO3g zZ&P}zxhyFC5J<1Ky*m2BEDKEOisoU^*gMI&=y+R8YMa-qzO=(!I_=wS_Hk>tT}=@~ z)Ut|J>l6&CZ}g2EmaE|K(~J^v{4F74?d18;*h8?Xr`D~d>0DCz zS2b#!-Oyvt-pPe=;LPa7#_9f8PX|Gccc!C3NiH3GTQkcxdgO(p1^GQgyM|ourJ|8e zWwJsSp+Ytv_v>uNI#rpxt)S;LAEMW0jDpLKD*J$AW2Tk$)(Jl>ncX+N9iD1$J=^;b@7_kT+se~V%RgFA*Fux3-&o4l zGU>1KPu@=xcvQGNHyiw@9H_`7sZ_tTvPXY;=MU0#Yh-Cz`1)E+3(#NMUTMfK(GVrU z7<5WQLS#)HdwiYWA2oD4$;A!}*i{6LSoB@l;N|<7ppj^A!$=XKBk9e+mOj^qiJ|YW ztub}9w{@+#JPmbQ>ICi%sU>;4^XiLpt4%bzKMh9C4w~QlM0}Ob-L}(TEhV@7M$p#V zDHPTw^r*hz4KL-jrA=vf6toL$mp;%fNqQSlm3K<|N>}}?m>Wwg%Y5;W)88)i^h$3E z*kUYL=--G_j_lAb>R&2%XhdiGigc|t;7=elr}dnF5UF`{uAqPDym932(W9a|UA)|M z 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�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

{Jp+1K-%zPBgTR;S?W8~uVA z{GjDXt1ioHd(EuW=GN^8{neGbU+&|h=4S)D(v?@{y$@$%7vj;ctB!iH7hk5HX3!@lRBdJrhDtCt;05Sag^K=>tM)n`~+4Cp%^ zhOLtaZ#g}58@J;d{T4$}ivBMLLTR{LW8_YGGY)5998L2}?iOeI+?45~_9r@B{W@%mvK=SKP~i)ObsSX^aVdH*^OKcCAa(y1MLn@I*d|^KD=hj>>-H5)PwPP zmd#v6mXyUm?~=g|TO0VfS6liurQ@=CgsG`R@H8Ye$(cC5?sS@v56Vx%)34q~b(W^f z-liHI%+^}i?AqA%=x@WqsDY?ucl`-(DbL;!0zY(V8xR=cg?UC=$qL4laxcTJm;5-~=)KXs+5iHvPgRU_pkpLwJ6*7$QZ9iIxYNu6 zaX^W!Z!-fY z)gqD+|L|@qpc3iYLpjD=Y*pQ(zPDiKKmRoomH=sa>J@IOeTq7RNz{DjFmdad#hyzW zd!H4OgHRqVmzc#0%qs%T=d_>KAPv$MU3-#LCe4NYo(V$TLrCOnF!$yOd+)lTX6(Z= z>e-EZK(2r?Ek)WA(b0M}AFD<|#Z@*c`QX5kFG$k|QF;0As*>%`1L&KCmPP9%7lz*X zlyvC~4nOp;Era4wQ(AMl)2ts(HGxv&-G#-!v!^@TvgZ_*o3)O)YB4=)l$e@ujiK|u zLoxkH$g(Jp9Q`gMHcxo8c!aK7F0AX^M$iT$E=$gBgnEQ@28K?bhm!{s^Xm?4A@GO{?eIy?ScESUO@3lW~y=fr$$3fkx;A0_`2iZKt#Smd6QGktY;V5bEP5%^-b} zZGgomf4U!x0FcWLSaL?pG5R&o8&@^lM>B3k5r6mg5u^BjD0}OmI@)h-6AKcY;1VEc zg1fs1cXto&65QS0-6goYySsaEcbn#Ye`n^L^UeG*Rb3RF?1s&z=>0rvUF*IsN*;@- zysS?mx}Cph-NKYfD^4F!%UEx+=Xf2a>6dK!*PnDyF>foa^7^!Ze^Mm*VbnDZs-O(% zFwQp@HOnad=a+>b%j=P1YhtcWe=@<3_TDwmTdA!9{`qVRYI@R?(6m&ho+U$*7y-3n zfwjD;t~}YI=9D3-nohumydV+DH1l46L_*`cs#j~6-a}h-;l1rE`FKQ*lV#4lzk5_% z_o-$$4cCSQTj*`@FHe0pk%faoBSaHBs&JOx{p!bVY#~cl!&m8`8BMK!N|<@eqYCL8 zjs6Xs*dVYS#j?Nmf3TSA)?(f{!I%OSpfyj<}XzxHe+EbG}gt!JSyE8wpcME`tU^RP4NZQ@flX%uM2eGf-f zyYL&XA_0uUt3=|Duby)#C$Pk;WQB4|^ScF_UKmYBGYDs&sd=WYszlvb`j4D59>&mv zwI{JUDbbXk;8BCm`z^g%x(PyiBWX~BY3_mc0Qy#p(iLqN-1G{3kwd*m(Q_FRRnvgxB$SLiIZ||YX%Q_$0edGp zh{%4-YK$;*ni zhaqRM`+y>iw+3hb=?nDGQrG2NY-U%J-e>7ex^QR#r*c2IgW&I+-bAHh2o}J~sOP)h z@O?~@p-@&S(>dHYl6-q&nTs|=w`;Q*OIL{M;1^8zS2~h#XAlB62iff`2LJmhCN!vc zA|SM|hwuQ}#=@zI&(Sve-!z@svWDY^KU^|RW)z*n%s4oZ?2yM^HMq>9lU*O)r0;uLXStc1U z&1CgbtTkHW{M8i zmVv8oEw;#fF#SfOWd#KlWyt^<1LDh35TzDQX}i!b(x~E{ zRl-;Odz2RDRBC;W3fH*I)@$_Bze&aUD7O^pStO{=K*|SC1ggJ@yE!BX z!oGH(<)1Dvj$zfu1N!sk4)M?Z@N?f;sG*c;1~R;tjq{+4>{T^qR15vpk7O}OsL3t5 zA|bJS8TgcH^I4Geub+Y31|qRHO(YT^w}H(5Z+(^k(HuP*nJ%yjM>st~fHiM@&={8+ zfaFp`zZ|=+mv;**_sHr@pR@P3Zb*{I*ebnFV>pj`;&mxmjKW8%+RcJrULUN};YJfSW9G`EBY&0aN+=AMrGA?u|? zM&0Z-CvxY$3Ug>cX;k07#N~Z*S29T}ZpZ0O8W9tYdhHr*rz|RE6lC@R>XBt!di>An zqi^u!OR=c>ze@SwNB_Wf^>_`)D8BTf4leSWFDdE07n#%Z25BTa@mqpLdC*?*KwZwp z5FPv{*ncprf?m{G%IMuRBg?h4s^N$G=n!CPNM?6L(k0~#|~`NPU-n8ZjL>1S=W z+Dfb*IWno7S5}(W@5mGPVYJS<@9P_GTTf-l$B^|RLk;=tH0sFBUk)U*r`#~8mN=yxcAzP54WHw7-k)b?kw$DW!mT+~qfjisf2COz3g)gf4 z7=eG4_rj;Spasx^TPGOaaitE6Z+%Iy*Hng@4TcS#>Jz7){9TkHL9aAQ6r|sXaUCpl ze3)rrpjHWkzQ@auhG-RwyXXB5v+rP<&Tg;4JnU7{rgv7hWZx<@ZOSYt|691UX;^y* zYu5C)@cYsc!KLu>Ae>j2u3ZM$#1_(m|0T}p!=GFoK$v$Ul8jC@U(x;xPq|COA=0w8Ar z(J7CwSA4~%u%P_7IM~)JmJ-UuA2>PuIEm0fl&Ie=9!gf1&bs`4_e3$vn<ZHVsMZ>{D zNO^5(b6IbqO?C=8Eg>xSiQ((-kalIoZ0`$;-dE*f-j<7?xeS1eVP3QA!zmv!;O&b zosZ6qzkhp7_=zSRJrkA%w-ld>X z1Ch_b8pU@N#5ZjgG3VA|Bz$$=fk-5nMFe^U+KH%vr!RcCKM`FW1t(L zecKcH{;*%^`FuIC@%nnc;huVX>M=kvVFIS=){6SvURY3b{~X$Mtq_vuD9fGHb^F914 z-cI(;2P&pn+NmSaXle%!;yo;@=h>%*B7AnQ7zjmT26oTGVhbZ2FS&ady&ao8zi@+{ zTbv+LpO1T04m^N`cmR~K2(3`qxcooIk~I z`*gZl6kETbJTVn15-+Bsk}+r9>)uYNcomWPgyzAV%dRi-)YaCzauSK`72?iE*M3Md z1K|EQmlxB^nsa_fBTl`U1TU}3633a*Kqp9&mvoqTKLyo$0Ps|0^TJ(!08_ce-pG|E z5lBRoLMpPZ&H{G5kn}`RbJ42c205rM6_H<@Kg3Z`=j13CK-MCC{}0==i+1`UXw=I2 z-W6DRM`-0&jbPP6JXxvFKhG86$j;@U%&eh@QKpvst@^$<9wFiIn)|&ITc%*K%lWlC z)9)|LEe{ZVr89mEN(TP|&~v5wxL&e(F+ZJtdsoIR&+D-d#*_~&MtPU+%W>S}bvpFz z)vEEZw!8jB`bvS}u z0~e=u;`cwf;gkC3<3n(Yp7ul^5aneSg_dFB6wS#GLzR5d%jwzEyF3&R+Fvp$c7-BONr zd>F_^S^q$nlac|ZHp7_gCVxt72C0{tIySy#)2o_>NXs3$fz4vrYF}1rv=cvGbVjDx2!?7azz4oub+?Rv z$02^#5+ybOWAfh#W=U`BnrxGocAe6;I;yCDrJ~6lkFq5KqV^8KHGSIx`^}g=f7uHR*ZJbr@T!-B-dO z?zWWp_bP2^oTcZwtu{)Z}FYzNJ4aSA7+2#s|L$`69wP6eBuIx3zeWH=bCW@ zsA8BYY#5d^`Zv$;EN=tFZ-WVhE4n8J^}`p-(lidHa3jFF5q>g-CYOmOt6axI6|(VO ziBP(BRF8mgYyKYW*Atq<1$ZYS58jLTw?geHNS<-z7yjDOg0FCD-QAsVT74c4$>#*u zYtnue?I0~7wJmhrj!W1sXEUVTKKTJy(W;T`voJD+H2h4dGG?N6p{D$tUDvZZWo^;o zQr_{vga(ALY%U47d{P00y1OhE<&PR!`XE)v5tY(2aCibMMK-#^(!;%uhj@p2ebAdev>}>*axa?IuIE zWRlu9%`T+@R`A@ka?}rD3cdR8zpAi=0U0^bH4df9I9DKeW`rJ}ci}JR)5`5ybJ@22 zlPBZzR}_=WYe0pszx7wMw*07Z@FJx}Wdse`?^{|{OfR2=2=F150jVQgPpNSTB2%G= z4I%X6?dMd0c2==}>xbfW_9;XFLBcwfA)L*ovlDGZg5Ia9o#^@e3j&RCtTj~WhX^eN z8vOSM6+-Oapt@edyKLRpESEHI3Pb0{$=mSz%@>nzzL&7H?L)DueM?8xW&|9v36W1Q zWzcN$>H$RdRkEnyi1%l6p5AK%|Hz>AcV6g!S~3kjEbF(yUW#RGMpO)K=?f**%ywaU z#hNn2K!rdki`c?Qy8pJZT{n+i zHbwTk;y`RG*tWtR6%++kjCE^OFv}@fVMS;T&sBt+ong}b)!A=3^fyuDHSO^P z7lwRlN-1!?MO2SAUA>MQKETl7ywpo0j!-?=US(SE5daXp@M%Fx{g5c6FJLYjp!4^} z^leuU4FsA}w2H5JL6}K&JkzUGs9jRuk}&8Dp>lR6GyK4FpUOtChxkCR$IvI)QPM%| zQTXVaj;VdcfYrFMSDa9qo#!_F;18ul&DP2Wh3kQg+9%d8UI3h&4$58=K8`x6nCuVP zK&m_<0Y~cqUI>l#!J13MUVammhgAK*#@VE4t1fpDuHlT<@TPf7HG^nC_O8lW1hD@` z6|7+1bt4P`-zi%h8|yeJkTZ^NzUpnq(1B2`-~v+LBEA({Je*Xn3_Q9`=&Q<;?zsmP1Lp=ih4yXF;a zJcd&~@Ts#$9(bfp#6c~|qL^@ummr;~zpR*PtiRt$Xlz~q`U7Xl z(^MMY_=YinHI)JKeFlFR5gSEj6vY)HAUa7fw1Z5bZq79!GBw%+B{p%ERsDmGQ_+U3 zin$aS0-*OTS3k?O2WrXMKcW)Ex^F8;#-+Y#AaW_l^o#{?)#I)K^K6qs;T{zYPQ3MQ7W` zcB&5t8S2^lzhVk~F5^^c1+)T=Fe5D^J&oD5gkhTG7PSI6f1yiT#QPuUWr{VY5iGLc zDecB8vJA?$8Vp7mGT1p6cd@U*{*{;@sxWNZu#H6U{$mCrLJAoTQ|%7;kRGLZS#M_; z4-!UugA3p-z-i>95z(tzYbfp-ULb6lALe!nU7Hy^I0KunR#8^Fr~k5>aP>pOB25Uz zZ2hA*Nu=ur>t)C@-zp=L{>v`>H;Ud$JVL=9kbI02mGTX{(SMi^_Q7w~bj3F$n<)L- zQvm@8p0~pbz?7#RXdc;t7&q2{4LJzeK^QW4eJokU&PMrYwi(q~k4NR5aYo$E0H(3* z=Lc2JF8qKEoMR<*uWBqEp?j|O8Oy$+VfZHn{nQ|U21-VjTQ#Fj$=T5hxZTRy9Fuh6 zNwF^5)YY~?Z-D4Vl4#!`1MqQIMU@I4$Q zsz2CL`nk;(CT|T!*#QF+4>pv&p#+jx26&MYqa*$%LaVBnDluZxCr4${c+~qJ!i)+| zKb6e8@!8G(L+Ew}Lp51E$)c{YX=E_O^gxFfE#cNl>JQb*V)RMaHUZEhw!Rc@LDCMO zn6LmCchD{#Gr~L~)r^H0xV963>&7n^WMA<@GMF4P3%Y2^&UfVFZ$=*QU%e*)cnG?C>zpo@-KP>BD>!_wpK`tK;nk7}Ig z=x#28cq;Pm`Gqn_z~4jJpv2bEZ+FmA1tXx)CyC9?V=q;a$~gVyUl+^8L$-X(hi3_I zsH;VfP%!Bm3hNj150uvf4Yumj2g-ZLtMWCa`#1p_s~Cf3x^sCFRjWbpk7%1{G%`z* zYydnjsL+{icJef!V`=OOm!mRt&igFMQ7h8icRGgbmM1W8{~unxQON)|m=3yS62AV zbz}8PWASVJ6`SK-)MUwn6` zW)}MhaU{k>Zy#jKADqt zz@b0_p63U_{=@ua_l$zj0`@_mobs`Vt7auAs!pA7px$WEroqhHj);HWQV4gY1bKj} zY`gqVNbENa3c(LURjD&Y*>>I!6+pwY)Ri(XrC}vyIBaVTXy= zR{q_Hh!hdJ-bp1`I`cwgOv8NG&%%P3%fFBVPJ_%rVP)M8|Eyfvd~oCRkgVcI7=M0p z)mpk~K;amY*-}I|d;dqUqTu+g0p+`a3a_%Ug}#&&F_DZ%>Poxoe4CS=u+(W{)Udem z7>@Bu*ZO?0>+gCbRO3>}zB)W}OW3Ml;EiW48t=q1{UT$q)KSiB!a-k?V{wChiz`|g zh3X%}P;h$Cebk&JL)z_*3A;)7$C;vXL)AQ6&z3TeWpCrkDJ%BJ)XMtpj&NAZT14)a z=Fz_D!(rX@VM_co2?OuNoNl*xWjvyMS?4+AD0?Bh(IIgz&vvkiV{HQ(-suX=wOz~< zJ{Go1#=>=t6~`)eOLsYPUCNM-JfNic&si=>J$pOmpO(lrXQP0jAbY)mN}IV2gGic<}p(MfM2rgSQRZ zYxDnNj-FSY`}6(IzrpxDER~HJc#~pRL4NLDVTeishSaKk(Yo?^*XZnlIn4Q+u2WqB zl^}QnVS>_FSV-&#e(2+Xi>^9FcWWquetDg~Zho%v_pk6v45u6r)G1XC)6udl{ZXVolE{wqV`qQm)d z6~AX-$deUfWWex!$?dHje+wS-ncy{MxtZjQvYE9#G zcj4@8DL>MdQZT<@^Lg6Q?@(1)yxmjt4Kgu@2%&DL$w(&vX3O~;L*dNnDfv^sTJo)J zUGTAo;Ts~J@#~}V{Q!O@%u-ox=H9Wi=HSltp6lbE4!fHcju-KJsM8m)3kA%`N!nmF zUQp;|ir=^H$688bF!m0P$Ob<6+I z$IzePXV`-vJdho*@aYwAqU9%ctgy%T3JF1Mu(okf!VFR75&iA)2rmBO*Zx zg6BB+t;k)tJk-97x~nJ=<1|^VZqWQb<|5tfc4l4WTGyB1r-191G~nclS}zP_l&f&@ zXn30g%8Kb@5pF9DHJ+QS0q#9PR*WY&;Sa(i?NcFE_9r;$55g1eQ`c6sm|&m432AAe zHK`Z;dyt?(1lD;j-ssNpUEbsFrCUA6pAX7BmsaHeH-+T;3dn3O2l|Ie-mea?nZ`&M zw}mt11m)RrQ&feS7T_x5g4M|0XEY~e(2riIU*`QqYc^O=a`GSdy>HrF2A?uaHfDNq zmL}I{;(_Ui;>f(=aJZbAGAd7KZSHibO6BCV3j0VHo_Ery0pk{OD~fQpug27rPK^8z z#_#GAR`XokF}zr*HhtL+O@8zAeHY;9^skdFFqgKLDC8r-Egs*ekF7%HO{HVyW=(by zsq+@X?oGCgwZCGVa=k|<&J5dG6f$jo*|1@p=M{}aB9py~bwj=TN%><$(mZX5W!%(W zZlsjOyXvLSPjCP`16N&^!g_dmZD!^YEBqFN%6=QHIhW|-_`octQ8}U8>hpc0;A0I< z#qsgwl>8g)NSS>{C*v|x}J5}Dk=e|4c=OG>-rYXnaQ02 zYa-RSVW{0w|IT8_&SLWy)}WrNo<)XjFAh%yV~%!`jN*pgT$CHOm(kibHS@}hpx=J^ z>gB*O*04P2?CEF)*3b(}H_4`UQd8>dOH?(mEd4)3H@XJ2Gn6Y(lxzPSs&@c86+7|# zg8Ijl=+C3DPEB}cLB3T@KEC?hXZw+IDg=+LX=(8o&Xzr1(fKc)p+uK~&dZvOk?&X@ z%a^Vp+TtzYBrV~F|9s5FXf2IeOV}P5v|?qppnIe8@t|3;@=>XVALxf4i23L67$)c< zI6D030Z8Xrcxh#wG{XZASgeItY5w@Q=zyaF&+(pZWsmLF_;RC2;MWmy9~RP&xlbbm z6mvOviQl40g2vGm0)hcCJy+InNs(ug67PtD1nVbtyj_qef4L;FUmoyry-mREEgq=- zYSEfVxtCB;u{f4F#`O;uA62VZ2irbii(fU?NqTZwS{Ek(i)&#(hY>}_9OaHO$gRj{ z$>|sJ2C%(p{>)avckZWEK-6Dz_n@UL z$5OePy84uoKZ+|sQX7}TQnPxv0++4xZ6q4b>$tr9*M(bg$4(j?Z=1 zThGa*pU56Wtlb-G-$CGab;n1V{3ynX+{n^BmSU;6vu29GK`(hAE z8^lO4#D#*8mkbIn-31?s@%geGhH5C$c(?_1^(H+ZU0*?SQdS`=khHkt&Htp*Q!(u@ zDa9V`OLR}Hnk@!wT9Gk@5F%Dv{B`qynQPX!mf!(g`pDFOrhfU+tZm$P(0^LJQ+H`_ z)Y{z1Kx>3aDEA(w$3hIo12fJE-dbrj$sKWmDrUlWtj5nquv>*Wa6F2!gk_(og^j>< zWdkyQ3{4t`Lk9*)6pnGNp$zi}Hj~@DH81NmK}x=yvkG1S>bXTb)5H~&<`=N;%XJ+OY_LQ%B9*VBI;@42=bF_s^s{m zH)3;#uzfQ2dOm__M!93zxx|4wu09+y zVMz3~3OTYH8&!{moLpTZS*qE=A{q@GLeE{AIQh&DcQdZB-zX%Z<}jE-$ANCC#l(3 z-W1cAv~D@o(9X<=R=|-N{sKR_JQF|t1($WriU!i90EMYsPo$<~Mw@ptn7cmsMD0`p zZVA%(=su!J_K9>~s$s3Ny&?;%nfO<@iZY!MZ6@Rgbi|%5Ax-3q$tF6V&kcGpUW@eN zpdzenq+N=aftu;F`8hSh|RTFDFn?1&QW_-xZ<0@NDcOn+#k8lda*<-Vu z_M&|s13l~B_1aQX5A%l6gH$(Dv&N0sBo4q-BDxUoOY&=j9w_NCPz@lsF=*FE*Gy24@ zQ*_7zp(36@cHTJc`2oeo+wSBq|HDz4d?Q(ekX`%_{H}S^Iu}3B3VbLit_QFHZSifS z_JKS99EtNSZNSbt9qSg&%n$p~8LDyH<*%q4wTDp6sD!FFt{50}-=Ry1OQ8CT3bOhP z)F<_vUeZoK7|Nf!G>KV$J|1X3wk7rm4Ne{-h4QyC^E*#=7mx+%7B_cwnG zg|d1S(b?eHrS{huD;H?+only|;bVSU9=(+8D1a!<_0jer$_r;2XUUT?nD8nS!TVvU zkQ+vx`yH>C5`gr0SM!DCczwZcl1c2GDa5ffIzm}cMFxW#joK))N^>nE8w(qM`PkwS zAshcg>TNM^YGsPY(iA|BT_OXFA0c-_Ba}%-HyLMeZ(jaOzTY1}11&Vb#oi7v9ml71 z>DAAWK_vLAn9iFpQa`N}0eQKHwFA0}ioa~TVdtxjqqYz~oWqx`#vmg4*|c&5l)?@E zT29eq9kC@ae_q1|c9Vy5iLw3YwtWnA5y$ylkH46>?A^!F`CO#W1)HV0=3dp&BKpI9 z5`;z)4sKKzbywU1H3G1Hb7h9F72v{`QNk!n2OwXh@iYr*Igrh(C#gwq7d zm5}P*WPL$mbuC1`oD<-Z!U!zj5{segQs5FUqvw;uk?NDuAr#}tCGOu(RH}DqhQT!h zL94%1!{I@zmo1kzcTN3>2q>Nj>E>hgeeDX74;8A_h{5#h(yP0QYmjhkSC`2t&SK%m z(+VzBB!1OHhs`+-L6VL0n-AKU#g;XSFtb{vT;W0GTR`;x;xO=?DZr}VZLH%{TE)jn zV}h+B9LOdg$WFnvnP&WEgHigEm`*89^`nPmJFOKeq8YJd8ln#=@9aPM2pM#D2{C!#W3(W#Wt;2aP_}X4%SS< zsYy|C|D|Fa;9*cgH6}G&wRQWrJsOLvTR#vu?6J0oT=g_fhvXoc6>|ifsX<}c@^kP% zBxhe~{ReiOMsu@RkW)m({oog2wu8iSM*0Hk*?**AYO2R2Yrw<-U#(C`+0}**v598#E;8^3$@k( zzpt^CGV5mJg-Wk z6;Zif97sGLK|XX2f6wqS_MbH{2r;i(rx#I~^O7}l^C{hkDl2WL^q|l?Z88FhWfPD% ziHHJsWE=1^SeDJYQTqtm5B)6a8EheK@$a#Z*HtRaBQ7^Bew!5YllCj7Fxo(|OrH(3 zh(&RLRF$}9p1cB@=38`A(T{>}`~3R<U?&^UZb`p)6>`5`cVLfG`UjH^Zg>pNE?{dktI@_B4I(2h5QQB z5(7Y)bldihQxB{4d(j5Jzik2U{X?9nW$<4ElYaXFza6qG8RzF4(ca{N#-lHYF3g%J z;2FatUYBpuUh%IaYZIjjYXWy|592Z9)`1yM<>&0EoPw+kB?ZeBEZGohnjR^*=if$% zVt}Ih&tP*NoGsK9>(?_a?TC9YExl4-KQ2dVAy7!hgXdCSOqZiCRskst*CakF_g*4O zPKI2|q9Wwg`dtlMtu_NFZVquW#+o;D+Jn@-MDq0?`eKD;Sz?v0HZfv5NZ{}L-rt@88JZ&vOIg!d#&E#r2Tm34=j~E^4+4fUPE@dP&^_Dln=P}> z8GoY#SCIXi8a$ue){QrnfRb)eB{f8f_Bt0rRi*)Oo0IvYaZ|H+x(;3E52RLfdF}dS z6kb{0-}Fk?%SE!wB}Ml8JPzjj?CDFW9ED=Ar5a&vWJFz@Mpo5*V&!8>`fT~*U}k1* z&xA+b%@06ZKX)lW@3U)bX`g47W9k6D8H2?rqvT_@EZr5mZJ=5gubVK(35JxoLepZl zFL8V6FUJIVOX!_!#d1yy!?r7kZw;-DnX}^Zxie(WHGf)pyjt`6UD6nrz*>1-7#J#t2*Fv6D`OCawVVYfpeF55^B{>2attTI6VO4L?k%xQs){kND}C~y_Q1+-FptXq>yF6XyT%MVrpeoIBa zd7|S+B0v5;9a?`tl?jEKQbgxpnlBJjD({y|&Aht0+M=|?YyaxDMvDaK+(d0iQegXS zv{5Nna$tbD1ImerP4Vs5+ZZz_Kx_r;6xO6O4Nr>=S|*&+Grk$H1#R2fboI1kpEw1jxh+%?ORyytiOzK{KsnF6B%7NMo4?Qhrk#CrV5N+HlZg>wy_m z^dFs++wkQ@v-%WDM_7(kIw?dUs!Qb*E;T&doQ-9f5~0AbsCZNOQ^p9DqJ+Asc-`-x zz#pIu6!SD}S95DS;=sYqEj-q3SRwbBtgnqJ#$)Z?~852M7_j#8P-eF`v~ zNRMM+jGZ>aa;e9$R>nuQTTXyE$2W;2c*{Pt= zTCZrQo6p$KF3DFHaisq0yFh}<(c*Grkfb{Gd21&!yKc4so-q_w$ci-x|4R_L0G=|U z#<$i9bUDMtl45$uypx+=;wi(#Xf@!3_^-X6%pY`ARclcoa+Vo%NdZ@K-@&ky^b#{F zYzCRcUb*T~Nn(2ns}&RLQO|%S#u@ctnP0G7MkLPf;jNX&-9RAiBLK#ase9erFaQ~t zydCs{%Z|`tF9w&JmHue%Mbrp8H@*)1E=?6=QsBpIA9rASOUPo+2}1= zI|v>FRYwGM8jgX<&Gvm;?`p3-Lb#2VmYwU@=aE}M;rhk=2nPry7dtbMzgMDEB|hct ziaQo5UptSL#yAnp+y3N^OMoy38*8Z}aKxB9L^1G=fAY56F$8?@$y70IDsWXvi{ry7Jdd?q;!k)tRe32jcPi$vKg6A@#&jP6fw~HY* zT;TNM>^^PA%W@isz@%$WyvBZ7xXej>dPf+rmtMG5+BLCLS@f0FE22?*Xqm+RY%uk- zUG6p}SJ1qv!(}3r*A!2v4)l-ay#yP5CHz`IY&-(lYI^~~P_Qu~3buPI%IBX9o^?lm zGKENzjT68vh9$LFp`&`oS`?EA)Ka#7v?Ez~cy)Qt8vdOuOcGqIyz8&Ib|zB6a1W3ZIcuaKi^t>NC|^r zd|gWLRSnBB`QwZ0Ee+M$s8kmUiR&sQ0YOnpxK8Os$tLdBSuEnylj1}3{fj#xOQB^r zgke*bek{u&Tj9PV+1N7JRgXF*G=b%Og@6na7g;0x2CF93I|+!h$lhK(gDtqxBPamU zHF_V{8uoZ4)Iayu&VkY4JghO%-;E9f|GQeh zM+JZ$#gB}uw=-Gv5iFI^iGp92B_LASvSc;za$R?Y)swy}2e*cG*+k^IwBJ<+sbsXZ;7($H<b znd#?OgV;gl=(SS{7T?zs_zqLP1P@AMDjvjO0mltz2@~uE4FmhNjup0nYhEtg%*4IR z^#CQmGttC6X7|$_8>8&>eu(g+0slx)aG^JCLw& zJL8)X5@qx0fc!#Ph|(#K1}a>>{skOg;VPpE;Da5ej{837-K;BF35N>Iokd;=Nj?dD zMAYd4Y^P=9#~8e>vlX!~TDp5c^?_AHL|0iNrKwkmsKi#VLR;j|J)EOF0SGXgvj-B_ zGeSNFIm}+&Tg)C(qI@EyC~SH(XbU!cXc&i6&FEkdJfpY|BGn)b_GjN*&~;6=U_r7$ zH@G}xHA-s%8D}vpPCY%DWotIcZ%3RS9q2*t23+g^+AA3h!+^*FHnY8A^ub5LqdC>y z)e)371rq)YBn;PavPvo8tnvlj$uUbA%rf)QhG7ym5Rnp>ppUenB=M?$=IFL7_OIC5 zy{6*ml%jL(pl(=*4iEkqI%-Vj=8vb zpTaG2E503P*PSp>naacJ1hNxnSlqx}5efQ>y1QRC2fJPjkwmK-upY4|5@ZRvaJeG| zUb@Gl?och=2oqI}G$)Xe%+e&Mq!S>gjL8WdGWI5_|C8E4kEI}~qzGyRr#$DC#2k@T zcV66OuOLEkD>@QbmC_#Zld4ayRX8d;OIdlGUy@6v9^W@xB zdVPPW?M#tXh7bUvA?r+U2U%zZSy1rdXd3OCQTE(KB=)80l6nvG>a*1zFZj3RNi) zmAVk{bL@qo5l>SV#_KUFMHSciK(^9R_3nSBU!fSB)!-Y1IfZWW2~**_t-#?n-z()c zuOztc{!GuL9OeCHnfDg)aT(G>$0<^xjjcz%cCx8;fGYC#w7cE={@LT>#ZAk?IsVtv z*R4B6;`KGnjsE_(2ST~2J?=?moOZj8j>bH~|JiO%&SC#%i2iFTObpuJN((_dko@z) z@OMA?tkazDxTo7Bt7Pzrq89kcNGV@~T1dHZ@uk{bzAQ@_!qTxfu6lf`{h_@e3Ti1 z?cdv(`&c774-?YJ!#`c8_A1CZdk5+)o&uSl12bv<%kNlU;qKPX(~`FTA3B_aW%l5C zXY1m2Z)WSb<#lZdiXW;VblHQGv!Qrz`Zyox3V)q+6x{o#D_lp&IejqP1|zW`#rMbi zp!7e%?tAn?VGAPY@XB6w>$YvU-)J3e zY{LG`%CjMZ3xa!g@5Gzed<%!LNKpH>)RC>C<)rPL0WT&Je9$~HA;?j8h@01rc-mus z&(_)HR{%TqT?YWR3A5ANoUK($otu`9RQ|sbiOA4W`XfnTE zwO_X=Hvj)@8QUwARE%|W{(rQL+1UPDa7EeqjPWEnFlIrK=!O@3RuiD!re!`j_R|!j z_k2ZrWn`_|AQNBn_|n?R#r>+!N0VWfN_w{W55KFWG$5MgQw|wfpj&5=KIkdb@BcM~ z;%WQ%{w;dG&?=ATmub5TfxFe$>UOf_`L04@-wAQ_e3SbgKkFO zsfiiyYTwc5f++|=O(oBN;v|ZjJf4)WP^5d1$8SeUIwo{7;J)KSW zTd9dw?w(C`PmJ4Y$k`wIKQ!5-Lat(|)^p-TGo3cz1YpiIPQwS^4hLnD&An zlKg9FUia{yV@OK(RjO;oWupLM(l4wqG(UA9CCr6n22si-z-nQ)DcC1(!fHCHm$Qmu z$aUK)SXJZ;UaaeSg(;(zX~D31jC1rfg_lE3j_D^W)z3V&m*CMM)X;wC$_b~+%xB68 zCm+Y1{9R_f68JQ!Q!zz z<3!mV`Lt3Xni~u!VcJUD`KKy8x=Of@t_b+76f4ZDt{N!S49ylQuxaB8Xu=q3ifN+4 zKm3`n`e_CP24R{YBY;s2R6JL*Ij+l*&LV~^2}-J3ssht4fxRAmQ7|HEPHi~*Qv`c8 z!l0m}_nb3Dlp=XdBgm1r#H`SNb&SES;lVKO@hT3OTRXA5#TAge($jZJHdFtc;1M}C z%ErA8j=sU*9h8Jx`uru$aP(~#+y#M=*Yx`$$QnE?>kKy3sR%aThx;Q#C))Q>KAcy1 zWXkoZU$Ym`PmkWX5ns$%*Ju%7=`e6YNji@YThCb|Y3(nD4Kc&kefLx!>727i)Y?T` z#p0SeOA_#&;jUKZDM$_ix+kn}A}%jG4k5r8k}mW1gHy5Ol}XZxgS`;h$8kt=mTyB8nO^{|9X^S`4;unm zu6|vQr_VNH@bGj~BEZ8f0yAX%Y~Qp|y6nvQ5>k$mvKX7-xSP70T%*hX&;#W`6={w6 zj10nDDT{xzIY4Rb?sg*_ff(nqA4Dhpxuaryt?$r4N0*vkMWH}UikGdM2?_)1mG~EZ z#dS4oye-40S`lI{ z!nqK$kiN(cp(G%$84IeN=*o$%7q6^{TmVbC12#W~v#W;Mm4Qi*FzGg>dXBC?b{2Vb zR4Zsg#T#hgO7pa8gwb07U4*A%vGpBLO*Cz|AWD%AqV!&rW{}=NdKU{w zH}odGH$jkI1O!4rP^yT4fYO_EB%z9Q0g(XG4aG>i6Y%@~|G)R1le1@cXLe?G_RTxb z`#iI=n`o!&9IY#MOyEoWvA}gt=#ccjAGxZ(s&+U(&B;dtlBP5LD|G7_W4ea=!J|obm?8x%k#Vq z^?Qv(gvFLuSME|RI^Mi??1C@lo}`TM#z)?7r=bq>%X=|YBT-(2s-vG_*AZ&0yNd?R(pz8JS>{EmTc7pS@XOrT zCO&Y)kP_B_Ihy4J4LOa4McTv{8G(pPH1l@(_N6%PACFA%STp@&v55D0u=(M8KAL_l z#bzN7-U7$55TD*Cn`sM-WvSy;d&X-G3(n7({^PUnLJ@W92DHfEm4_5tBspa6{;kH-f z(1eS;RmI((s)T((Ai54M7%`JmJtIqEJ-b17lK|bsrco~|T)waD{0b$`9?!)k`FWlT z%!Q@St)kDoT|um=sNMYH#ic&%f^ti$2=#Ot%{QW8V!XiaPt`ihAFFRWVLUbaqd&>Y z6*h@d%Qk~T^%(FhI%*qT-6-vqpKGOm(^B_XdP{uknL*9E`F%>ry~9QC)tPi1eRV=f>>Km}9lr*aRtEVv z67SaL=i9w1)!fH?uS%%{8`julRu#2>QJ}C3i+scJ zQ}X}S^}#_>t{u!~u*hL#8;Og^NQPA>%fl#Yq1Z3HSw5^jXQ`z}CN9Ul19Y3{X~ zsnr$kVbquLoZ@~*;q6al8JJkoVgZjY8BFH?AkWFM<_ zLpb~9?LK7ad12kFgV!<))VM*XvKxv1h}kTy7m%@?g^jl~g~boW7A|zAfj7$!Hfqu` zlvBPxw0!r`$Jo@$g!1=uJF|2O?E4clS4@)2!mOVT;BtcrxH9e^*lQKiGvSM+bqDh! zL$PmPaT@txwe8^rFQe#`qa0?P{ruG*XrkDu#maMnM_=)#gl#4 zU-0z8XP^d4j?(0eI6T9RsVd_JqA_tLSHF)|`eSen!hLK=+N2vefl6skomMK$+jw8>4v^;5%`(3-YMmCs*&X1)==PPQT|kyko)bd$@rT5G0bRuS<j@eCe}SnU_PudO1fJN6^m({@6}u834p7uzuGJ}QrK+0mm@QrJ01 z7#+#D9E;t*(&RDz%U-g*^PXCiuPE&ejYXUT}6V@ge@D zq$7=$N!`lh^GsEFt24l2Ltv?&yt<%COK1Jo*r)kmaTo~=Mj;Ka`iUU}wP&MBs6K8L zN>6JVI|g0SjOp^wP2P9EUKF2zHyLknpl`iz0MqW$W+2jdNdg>BmkKYWUu3f>N!q5h zKwf*=3Rlx3G?vz>)7S<}^GiIj>2@|gO4SqwUsCBHlDVq;=x*W*9Bb3PRf#qM+vj9z z!%_S%aJ9n)fLg2;$~l^X*?dl4ZfRU4x1p~V@>mby{6z_)d}}`DwO}`qiQbJwo>FhE z9rqR~1RcbNnOHw80~g4Scd}qT?UXh#}S$XnPb?r1xqCiE2eo*_7ndKv`)8Wjjs^&81~R@D(zyEALAl;TZ9yEfa#N6HH$!N?wH|kF0_s zF~~bKrtF+@pN&L)pXzUqCDp_9M=0|Y?(VJ#(x~(Ll*CJP zKKL@h0vj_}>8_{%rz=XIc^@o^1~giMo=b-<* z^YZ5!e(a=auhD%8N=V%|?;X-{uahG2&xOdP(i=AKV-zNmfx_J` zOp&9GS8pkKrPFZv$R3*HWMe*g@m%tKZ%y7yw-wz!Gc6x1wmyKVbBK;lgT67L9e3jg(o%f7z16C(;+6rSf73H;D7OWqcUtQ@-}p%AL1 z7+PH1*gqUn^qUYglh8Tu-TZ|gXCKn)!V#|d!@7t+CH71tl8kiv0<{_wy-V)n8w?3} z->GV z<6(?z1M#d8Q>9M5B=Pjxx5NW-!&*gC&9?h2E)%pAKONn2TT_Vs#R$E*CLnrxt^a2v| z({i1)Tld=nlSL8_k{f38E4DW*jV3i)P5Ic0F>DMfZB}k)2zr-oFYj z(zmJZA32tw3GTDfYJaktNKG>_e25)!|?cJg90@zho zTJM#ayXy65?(Tc5zl z=Bam%me>zn_81{b{di}8;_I$rHeV6*V&Qb4sAtoQJzDtM- z6?u!*cP|nCXlol*{o1YEmpK1mL&?&?L^t+vDOVS>FX?Q+RPw6;AIQKrQ6 z6ywZR`?M^} z)a#DquYDW>j>s;4oEr11p|~2>Ol&pji|DMywe?61tWBh@DL?S<$2)o49D0gdV#)OB z-NW?Gy?bDlD<+o2_vSMT>!(SLPn=RXB{yY;5B^*cKv%s|7Z>}ox$l;!ZdMg$Y+y)p zt2%k5OX)K1Zf_XQMb?Xw(uW&KnT<{nX7@#(;^Fto&86cPD^2?M(!Ysq?HJBAhn((g92}76!oO-=6&R0o^$5|_ zYe^mDT{*EUv+$N`GUZ5Q6V+e;tsQa@>_6=1dr%6!D$HzNPN_yEU&yT{l)IU`**J;t z^Q%|gCHUh&9p7V-hH2|K4fZ`Pc`4)DldfkExtq5yQ|x|Qxbu??ub>E;ws8%4#cNyr zrbrg~&1*6GP2Z@>SNva3=Ks81J)eB>F!LhIF;VT%y1w^oqc;AwF<4Q=C{?){lFO9s z(H&>l{##Yw?hg@b`VK_bY>&&j=M~>j^)lMr|K#yf!k@5ndb{q+y1r*gW>0Un&viL* zsAI{bmlvk1Q_}BW_xb9XMGZZmm%lq|3maH+jr+OP%Vjqs z`l85hB$0RgmS!|7r&tyoqn%rpI}K9E%)sks5Ky)7m+$h;ODsXw5M)?L1gVfmjAPJs zLMBh_>%|zI@WM>w$FEPAPc8L2+Q2T=(|d-$kwOuVvw)&{rU?-r*Q6W!lb1fbMZ6Sd zWs#cFFvngOBziM)g8v^Z(q5lqYK|B7>ZYxd;E7? z&#I_=w;Cxt`$|5|=<~c2M_js7*Mgw#njlMU;ai45*J~FBqYRz2f5&DPt@|G4O{v*d zZsdQroPLh;p#2MGzO1=*(Ivp7swr$S;I_P)uv}ID)4r6YYcxF@A{&1&>NkmV$Zw8E zFZ#m2_P?%;et7lhO%4BqmGYZh!`pHL{ZCmQWL&cHnR3)V{{4afx4yU0`<|6|KYg-} zGVT)(KW31a))*x#>3z(+8M1Rc+f$3IR=dJK9^?7aF`n`|x!&XN$EZV(2NGfG7yV#{ zow7g6qlsxXD0P*yUK(`DzAcaLaBj&G(mjo$aZic`GZvFvMT=UjjVTY_G_VV@YFt)O z4oKwt4xV+VO}6>ikM>;?>RR?qeP0z*)zjPDN5qQ()oRE+Ti9z~;cjlBcjAHfO1D?^%%Jb(1aA8%Tm9yOl+UQDVmr-^CBEVdr)lec2fr-D+gPb+@P-zD3W-z%0s zJw#iaYz(#@?^HZF-tjfVOrd#|G$hOJ=guB~@Ts>rUf+q5J}~v<5Bc*uRa}00k$)}- zEaIHYbR%m^&Sg%nby{vyE5rQQs;qg;&-WCw*XVnYr7zgGkJ&sv*>O0mJFE+SLEwBC z)Nt5v^m}k~t3_Z;FM)LI>trU$pE{^@s-zv?_d&-LHmV6A~W^kTk{ub=}HjdwCZTf&kEBx@p{nUrB z0<}2Xu~;~@Se$#j-ZASU-~8m@HyRn?d1>W@sqRR6=vaE_NZRd4dal*~aAVMsb$V^< zXYlV6WMeb(+T!M7=?40Ezcsh!bQT_fd8c!HDDKN*(TaI*B!Ad67I3=bemH%QD;IQt zYWenhYtA&@cdj}37_)PD*tj^|II@r(_c>!r{#waHzb6OPW_K!CLQYOh-WjS+_p``; z<#DR@$;|qwA!}?Vs#SdQ=VT}M3Vv1u9no7M60zl+-!cF5_VZi*et7;~6embZJHQPD3d+2qnW70{%x^^Mx_v3%V_i+A7R z8@Q|JIc!`%1m#@}xmzE~?E02PI_>eFsc-jaopl`X_tt`WKN2qL z-}M^T3>ev_;WXv2NcfcG?%yHN|C3x`Jd&d%^R~F4t4y_6g7+69!_S6R^U56z4>{bV zT8s;2+a=zzy}hVf`1#`piSin{S43%TrdmVw>G%)mjkr7o6qk*^uNWH+COwYy<9v{- z8a2gz;<0lJG38axK=#Pz^Yf6M0PU$4IWml*sAtR9co6S&mKzp+LyLno@Qd$Y>oDa? zm*3UQ#R@`1tXS&%jVsp}3;mhRTW;7{Q|Gm%W3_XkUpsn)W+m?W3jhM)#(k`>*GB%=5Bt$@=5W_TlMTmI~=HKZ41Gj{IO-EbRaB0~gkZcU_P9 z)_!g6!vwj_UfCF62C|-AWq}xPAhk=H&v*23!fP- z6;2aqMN1$_skxf2=a~k~?kw>Rr!sJB)jqseyq5U7CRk*B>`0 zIqKC!X;h*#P1=g65cjG}xo8|+D zS)O=mKKxpv87|KHnC`sT^tiq2Uo9w!n;s6)k9V+%Y2T!76*CzR$DKu9v6gB%O3C|d zsh#m9kDi38^*UEvy2affG||22T}i?d{z~bpqg&mw*_HI82)qGb8mpgKYN`AtA#6LB ztaRDDj6{aa`ubllO}U*g7s0}s*>W>(k&re?w;0=WX1Zrr^Jbd}LCP4u82h$=efj$< zY0w%z@@oPnX(an}rAeePn488T{8r5-{|6TeV{!W$7wz#EC@-CiLYdjLFHW2ru2^+8r(G(+f2EI5jiAKjiUP!dr7xOr?i+N)?vFn;li)U>N12;mTJg zU1!RYwh*BIExhy{zHx(=-o|e}ZlEgFj48IY&*gI^ z8a;lnmE-jEZSH!e`?qmzi6u>|l$g1b9e^N`PBBO0bEm81Dp{hZJzI}j*$dYXp8T

L&$r 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

~ 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

s{re-t0_PX8tH({A0UYVur}_ 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

M^6pyoPagZ0Zg~GkTr%p7FvAqu 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 literal 0 HcmV?d00001 diff --git a/spydrnet/support_files/architecture_libraries/lifcl.v.zip b/spydrnet/support_files/architecture_libraries/lifcl.v.zip new file mode 100644 index 0000000000000000000000000000000000000000..57a8ab7e6f8e056175f43e560d7dc77c2b1a9146 GIT binary patch literal 64352 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 M0002}`Tzg`0ErQt<8 literal 0 HcmV?d00001 diff --git a/spydrnet/support_files/architecture_libraries/xilinx_7series.v.zip b/spydrnet/support_files/architecture_libraries/xilinx_7series.v.zip new file mode 100644 index 0000000000000000000000000000000000000000..25d5bf7f430fac49c941dc2d54d04b8c9fb1f727 GIT binary patch literal 334311 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

pn8lc}_*}Wwa^aN*_108zdS}pFBjdYIu-O^& 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 Date: Wed, 25 May 2022 08:15:30 -0600 Subject: [PATCH 16/92] test for parsing with architecture option --- spydrnet/parsers/tests/test_parsers.py | 42 ++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/spydrnet/parsers/tests/test_parsers.py b/spydrnet/parsers/tests/test_parsers.py index fad682ba..fcdf6906 100644 --- a/spydrnet/parsers/tests/test_parsers.py +++ b/spydrnet/parsers/tests/test_parsers.py @@ -1,7 +1,49 @@ import unittest +import os import spydrnet as sdn +from spydrnet.util.netlist_type import VERILOG, EBLIF +from spydrnet.util.architecture import XILINX_7SERIES class TestParsers(unittest.TestCase): def test_parse(self): self.assertRaises(RuntimeError, sdn.parse, "fakefile.fakeext") + + + +class TestParseWithArchitecture(unittest.TestCase): + def test_verilog(self): + netlist = sdn.load_example_netlist_by_name("b13", VERILOG) + netlist.compose("b13.v", write_blackbox = False) + + netlist_1 = sdn.parse("b13.v") + for definition in netlist_1.get_definitions(): + if definition is not netlist_1.top_instance.reference: + for port in definition.get_ports(): + self.assertEqual(port.direction, sdn.UNDEFINED) + + netlist_2 = sdn.parse("b13.v", XILINX_7SERIES) + for definition in netlist_2.get_definitions(): + if definition is not netlist_2.top_instance.reference: + for port in definition.get_ports(): + self.assertNotEqual(port.direction, sdn.UNDEFINED, definition.name) + + os.remove("b13.v") + + def test_eblif(self): + netlist = sdn.load_example_netlist_by_name("toggle", EBLIF) + netlist.compose("toggle.eblif", write_blackbox = False) + + netlist_1 = sdn.parse("toggle.eblif") + for definition in netlist_1.get_definitions(): + if definition is not netlist_1.top_instance.reference and "logic-gate" not in definition.name: + for port in definition.get_ports(): + self.assertEqual(port.direction, sdn.UNDEFINED, definition.name) + + netlist_2 = sdn.parse("toggle.eblif", XILINX_7SERIES) + for definition in netlist_2.get_definitions(): + if definition is not netlist_2.top_instance.reference: + for port in definition.get_ports(): + self.assertNotEqual(port.direction, sdn.UNDEFINED, definition.name) + + os.remove("toggle.eblif") From a2dcc98e61d23b96c724c339899cf68da4bb8f02 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Wed, 25 May 2022 08:55:02 -0600 Subject: [PATCH 17/92] documentation changes and additions --- docs/source/reference/archive/index.rst | 12 +++++++ .../reference/{ => archive}/introduction.rst | 4 +-- .../reference/built_in_architecture.rst | 19 ++++++++++ .../reference/{ => functions}/clone.rst | 0 docs/source/reference/functions/index.rst | 12 +++++++ .../reference/{ => functions}/uniquify.rst | 0 docs/source/reference/index.rst | 6 ++-- examples/basic/built_in_libraries.py | 35 +++++++++++++++++++ spydrnet/parsers/primitive_library_reader.py | 16 ++++----- 9 files changed, 91 insertions(+), 13 deletions(-) create mode 100644 docs/source/reference/archive/index.rst rename docs/source/reference/{ => archive}/introduction.rst (99%) create mode 100644 docs/source/reference/built_in_architecture.rst rename docs/source/reference/{ => functions}/clone.rst (100%) create mode 100644 docs/source/reference/functions/index.rst rename docs/source/reference/{ => functions}/uniquify.rst (100%) create mode 100644 examples/basic/built_in_libraries.py diff --git a/docs/source/reference/archive/index.rst b/docs/source/reference/archive/index.rst new file mode 100644 index 00000000..1314e6fb --- /dev/null +++ b/docs/source/reference/archive/index.rst @@ -0,0 +1,12 @@ +.. _archive: + +=========== +Archive +=========== + +The following is from older versions of the SpyDrNet documentation + +.. toctree:: + :maxdepth: 2 + + introduction \ No newline at end of file diff --git a/docs/source/reference/introduction.rst b/docs/source/reference/archive/introduction.rst similarity index 99% rename from docs/source/reference/introduction.rst rename to docs/source/reference/archive/introduction.rst index e2555a27..474fed25 100644 --- a/docs/source/reference/introduction.rst +++ b/docs/source/reference/archive/introduction.rst @@ -47,7 +47,7 @@ Netlists flow through SpyDrNet in a three step process (see :numref:`fig:flow`). .. _Pandoc: https://pandoc.org/ .. _fig:flow: -.. figure:: ../figures/flow.* +.. figure:: ../../figures/flow.* :align: center :alt: SpyDrNet Flow @@ -82,7 +82,7 @@ At this point, SpyDrNet features and functionality are accessible via ``sdn. Date: Wed, 25 May 2022 09:14:48 -0600 Subject: [PATCH 18/92] doc update --- examples/basic/built_in_libraries.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/basic/built_in_libraries.py b/examples/basic/built_in_libraries.py index 7e301db9..c2d4075c 100644 --- a/examples/basic/built_in_libraries.py +++ b/examples/basic/built_in_libraries.py @@ -5,7 +5,7 @@ A simple example to demonstrate using SpyDrNet's built in primitive libraries. -The b13 example netlist is used. However, because the primitives are defined in the netlist, we must first compose it out to a new netlist that does not define the primitives. +The b13 example netlist is targeted towards the Xilinx 7 Series family. However, because the primitives are defined in the netlist, we must first compose it out to a new netlist that does not define the primitives. netlist_1 is parsed in without using the built in primitive library. The output shows that the port directions are undefined. From 03ba21f5e7c509e7111650359862e8f33dc3c78d Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Thu, 26 May 2022 10:50:04 -0600 Subject: [PATCH 19/92] edits to primitive library reader function --- spydrnet/parsers/primitive_library_reader.py | 7 +++++-- spydrnet/parsers/verilog/parser.py | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/spydrnet/parsers/primitive_library_reader.py b/spydrnet/parsers/primitive_library_reader.py index 7fbe999a..48067dd2 100644 --- a/spydrnet/parsers/primitive_library_reader.py +++ b/spydrnet/parsers/primitive_library_reader.py @@ -22,6 +22,7 @@ class PrimitiveLibraryReader(): def __init__(self, architecture, netlist): self.input_file = architecture self.netlist = netlist + self.definition_list = list() self.netlist_defs = dict() self.parsed_defs = dict() self.parser = None @@ -30,9 +31,10 @@ def run(self): self.initialize() while(self.parser.tokenizer.has_next()): self.get_past_comments() - self.parser.parse_primitive() + self.parser.parse_primitive(definition_list=self.definition_list) definition = self.parser.current_definition - self.parsed_defs[definition.name] = definition + if definition: + self.parsed_defs[definition.name] = definition cnt = self.insert_info() print("Found information for %d definitions" % cnt) @@ -52,6 +54,7 @@ def get_past_comments(self): def create_defintiion_dict(self): for definition in self.netlist.get_definitions(): self.netlist_defs[definition.name] = definition + self.definition_list.append(definition.name) def insert_info(self): cnt = 0 diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index d1dc2e93..f002db42 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -252,9 +252,13 @@ def add_blackbox_definitions(self): d["VERILOG.primitive"] = True self.current_library.add_definition(d) - def parse_primitive(self): - '''similar to parse module but it will only look for the inputs and outputs to get an idea of how those things look''' + def parse_primitive(self, definition_list = []): + ''' + similar to parse module but it will only look for the inputs and outputs to get an idea of how those things look + definition_list is an optional parameter that is used by primitive_library_reader as primitive libraries are parsed. If the primitive name is not + in the definition list, it is not needed and will be skipped. + ''' token = self.next_token() assert token == vt.MODULE or token == vt.PRIMITIVE, self.error_string( vt.MODULE, "to begin module statement", token) @@ -262,6 +266,13 @@ def parse_primitive(self): assert vt.is_valid_identifier(token), self.error_string( "identifier", "not a valid module name", token) name = token + + if definition_list: + if name not in definition_list: # we don't need this primitive info + while(token != vt.END_MODULE): + token = self.next_token() + # self.next_token() + return definition = self.blackbox_holder.get_blackbox(name) self.blackbox_holder.define(name) From e179bc975cc04f0674833aa22f697184bf52ed20 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 6 Jun 2022 09:01:02 -0600 Subject: [PATCH 20/92] multi bit port bug fix --- spydrnet/parsers/eblif/eblif_parser.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/spydrnet/parsers/eblif/eblif_parser.py b/spydrnet/parsers/eblif/eblif_parser.py index 9c568664..7443b749 100644 --- a/spydrnet/parsers/eblif/eblif_parser.py +++ b/spydrnet/parsers/eblif/eblif_parser.py @@ -308,10 +308,13 @@ def collect_subcircuit_information(self): self.tokenizer.next() def connect_instance_pins(self,instance): + # print(self.current_instance_info) for key in self.current_instance_info.keys(): + # print(key) cable_info = self.current_instance_info[key] cable_name,cable_index = self.get_port_name_and_index(cable_info) # get connected cable name and wire index port_name, pin_index = self.get_port_name_and_index(key) # get own port name and pin index + # print("Cable: " + cable_name + " Index: " + str(cable_index)) if (cable_name == UNCONN): # intentionally disconnected so put that into metadata try: instance[UNCONN] @@ -321,7 +324,12 @@ def connect_instance_pins(self,instance): continue # print(port_name) # print(list(x.inner_pin.port.name for x in instance.get_pins(selection=Selection.OUTSIDE))) - pin = next(instance.get_pins(selection=Selection.OUTSIDE,filter=lambda x: x.inner_pin.port.name == port_name and x.inner_pin is x.inner_pin.port.pins[pin_index])) + port = next(instance.get_ports(port_name)) + pin = None + if len(port.pins) < pin_index+1: # multibit port that isn't yet multibit + pin = port.create_pin() + else: + pin = next(instance.get_pins(selection=Selection.OUTSIDE,filter=lambda x: x.inner_pin.port.name == port_name and x.inner_pin is x.inner_pin.port.pins[pin_index])) self.connect_pins_to_wires(pin,cable_name,cable_index) def parse_comment(self): From caca0b9df9b35a7917cc9a39820248dbed0a9af2 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 6 Jun 2022 09:01:56 -0600 Subject: [PATCH 21/92] removed print statements --- spydrnet/parsers/eblif/eblif_parser.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/spydrnet/parsers/eblif/eblif_parser.py b/spydrnet/parsers/eblif/eblif_parser.py index 7443b749..f32d8816 100644 --- a/spydrnet/parsers/eblif/eblif_parser.py +++ b/spydrnet/parsers/eblif/eblif_parser.py @@ -308,13 +308,10 @@ def collect_subcircuit_information(self): self.tokenizer.next() def connect_instance_pins(self,instance): - # print(self.current_instance_info) for key in self.current_instance_info.keys(): - # print(key) cable_info = self.current_instance_info[key] cable_name,cable_index = self.get_port_name_and_index(cable_info) # get connected cable name and wire index port_name, pin_index = self.get_port_name_and_index(key) # get own port name and pin index - # print("Cable: " + cable_name + " Index: " + str(cable_index)) if (cable_name == UNCONN): # intentionally disconnected so put that into metadata try: instance[UNCONN] From e214d477215573bc839e64f930b7ee780a053e6d Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 6 Jun 2022 12:48:51 -0600 Subject: [PATCH 22/92] initial support for hierarchical EBLIF netlists --- spydrnet/composers/eblif/eblif_composer.py | 47 +++++--- spydrnet/parsers/eblif/eblif_parser.py | 118 +++++++++++++++------ 2 files changed, 118 insertions(+), 47 deletions(-) diff --git a/spydrnet/composers/eblif/eblif_composer.py b/spydrnet/composers/eblif/eblif_composer.py index 656f4374..b5e2d793 100644 --- a/spydrnet/composers/eblif/eblif_composer.py +++ b/spydrnet/composers/eblif/eblif_composer.py @@ -6,6 +6,7 @@ class EBLIFComposer: def __init__(self, write_blackbox, write_cname=True): self.netlist = None + self.current_model = None self.open_file = None self.write_blackbox = write_blackbox self.write_cname = write_cname @@ -32,7 +33,7 @@ def _compose(self,ir): self.netlist = ir # print("Composing...") self.compose_comments() - self.compose_top_model() + self.compose_models() self.clean_up() def compose_comments(self): @@ -43,21 +44,28 @@ def compose_comments(self): self.write_out("# Generated by \'BYU spydrnet tool\'\n") self.write_out("\n") - def compose_top_model(self): - top_instance = self.netlist.top_instance - to_write = ".model "+top_instance.reference.name+"\n" + def compose_models(self): + self.compose_model(self.netlist.top_instance.reference) + for model in self.netlist.get_hinstances(recursive=True, filter=lambda x: (x.item.is_leaf()==False)): + model = model.item.reference + if "EBLIF.blackbox" not in model.data.keys(): + self.compose_model(model) + if (self.write_blackbox): + self.compose_blackboxes() + + def compose_model(self, model): + self.current_model = model + to_write = ".model " + model.name + "\n" self.write_out(to_write) - self.compose_top_level_ports() - self.compose_top_level_clocks() + self.compose_model_ports() + self.compose_model_clocks() self.compose_default_wires() self.compose_instances() self.compose_end() - if (self.write_blackbox): - self.compose_blackboxes() - def compose_top_level_ports(self): + def compose_model_ports(self): to_write = ".inputs " - for port in self.netlist.top_instance.get_ports(filter = lambda x: x.direction is sdn.Port.Direction.IN): + for port in self.current_model.get_ports(filter = lambda x: x.direction is sdn.Port.Direction.IN): if len(port.pins) > 1: for i in range(len(port.pins)): to_write+=port.name+"["+str(i)+"] " @@ -67,7 +75,7 @@ def compose_top_level_ports(self): self.write_out(to_write) to_write = ".outputs " - for port in self.netlist.top_instance.get_ports(filter = lambda x: x.direction is sdn.Port.Direction.OUT): + for port in self.current_model.get_ports(filter = lambda x: x.direction is sdn.Port.Direction.OUT): if len(port.pins) > 1: for i in range(len(port.pins)): to_write+=port.name+"["+str(i)+"] " @@ -76,10 +84,10 @@ def compose_top_level_ports(self): to_write+="\n" self.write_out(to_write) - def compose_top_level_clocks(self): - if "EBLIF.clock" in self.netlist.top_instance.data: + def compose_model_clocks(self): + if "EBLIF.clock" in self.current_model.data: to_write = ".clock " - for clock in self.netlist.top_instance["EBLIF.clock"]: + for clock in self.current_model["EBLIF.clock"]: to_write+=clock+" " self.write_out(to_write+"\n") @@ -90,13 +98,18 @@ def compose_default_wires(self): default_wires = self.netlist['EBLIF.default_wires'] except KeyError: None + written = False if "$false" in default_wires: self.write_out(".names $false\n") + written=True if "$true" in default_wires: self.write_out(".names $true\n1\n") + written=True if "$undef" in default_wires: self.write_out(".names $undef\n") - self.write_out("\n") + written=True + if written: + self.write_out("\n") def compose_instances(self): categories = self.separate_by_type() @@ -113,7 +126,7 @@ def compose_instances(self): def separate_by_type(self): dict_by_types = dict() - for instance in self.netlist.get_instances(): + for instance in self.current_model.children: try: instance["EBLIF.type"] except KeyError: @@ -251,4 +264,4 @@ def compose_blackboxes(self): self.compose_end() def compose_end(self): - self.write_out(".end\n") + self.write_out(".end\n\n") diff --git a/spydrnet/parsers/eblif/eblif_parser.py b/spydrnet/parsers/eblif/eblif_parser.py index f32d8816..24ca144e 100644 --- a/spydrnet/parsers/eblif/eblif_parser.py +++ b/spydrnet/parsers/eblif/eblif_parser.py @@ -62,26 +62,22 @@ def parse(self): return self.netlist def parse_eblif(self): + netlist = Netlist() + self.netlist = netlist while(self.tokenizer.has_next()): token = self.tokenizer.next() if token == COMMENT: self.parse_comment() elif token == MODEL: - if self.netlist: - self.parse_other_model() - else: - self.parse_top_model() + self.parse_model() else: None self.set_subcircuit_names_by_convention() self.insert_comments_into_netlist_data() - def parse_top_model(self): - netlist = Netlist() - name = self.tokenizer.next() - netlist.name = name - self.netlist = netlist - self.parse_top_instance() + def parse_model(self): + model_name = self.tokenizer.next() + self.parse_model_header(model_name) self.parse_model_helper() def parse_other_model(self): @@ -149,18 +145,30 @@ def parse_model_helper(self): else: None - def parse_top_instance(self): + def parse_model_header(self, model_name): # Libraries aren't in blif, so just create a single library - library = self.netlist.create_library(name="library_1") - top_instance_def = library.create_definition(name=self.netlist.name) - top_instance = Instance(name=top_instance_def.name) - top_instance.reference = top_instance_def - self.netlist.set_top_instance(top_instance) - self.current_model = top_instance + # print("Model name: " + model_name) + if len(self.netlist.libraries) == 0: + library = self.netlist.create_library(name="library_1") + else: + library = next(self.netlist.get_libraries()) + parent_instance_def = next(self.netlist.get_definitions(model_name), None) + if not parent_instance_def: + parent_instance_def = library.create_definition(name=model_name) + self.definitions[parent_instance_def.name] = parent_instance_def + + + if not self.netlist.top_instance: + parent_instance = Instance(name=parent_instance_def.name) + parent_instance.reference = parent_instance_def + self.netlist.set_top_instance(parent_instance) + self.current_model = parent_instance_def self.tokenizer.next() # should be end of line so proceed to next line self.parse_top_level_ports() def parse_top_level_ports(self): + self.top_level_input_ports = dict() + self.top_level_output_ports = dict() while(self.tokenizer.peek() == INPUTS): self.parse_top_level_inputs() while(self.tokenizer.peek() == OUTPUTS): @@ -177,12 +185,20 @@ def parse_top_level_inputs(self): index = int(index) port = None pin = None + existing_port_list = list(x.name for x in self.current_model.get_ports()) if (port_name in self.top_level_input_ports.keys()): - port= self.top_level_input_ports[port_name] + port = self.top_level_input_ports[port_name] pin = port.create_pin() + elif port_name in existing_port_list: + port = next(self.current_model.get_ports(port_name)) + port.direction = sdn.IN + if len(port.pins) < index+1: + pin = port.create_pin() + else: + pin = port.pins[index] else: port = self.create_top_level_port(sdn.Port.Direction.IN,port_name) - self.netlist.top_instance.reference.add_port(port) + self.current_model.add_port(port) self.top_level_input_ports[port_name] = port pin = port.create_pin() self.connect_pins_to_wires(pin,port_name,index) @@ -196,12 +212,20 @@ def parse_top_level_outputs(self): index = int(index) port = None pin = None + existing_port_list = list(x.name for x in self.current_model.get_ports()) if (port_name in self.top_level_output_ports.keys()): port= self.top_level_output_ports[port_name] pin = port.create_pin() + elif port_name in existing_port_list: + port = next(self.current_model.get_ports(port_name)) + port.direction = sdn.OUT + if len(port.pins) < index+1: + pin = port.create_pin() + else: + pin = port.pins[index] else: port = self.create_top_level_port(sdn.Port.Direction.OUT,port_name) - self.netlist.top_instance.reference.add_port(port) + self.current_model.add_port(port) self.top_level_output_ports[port_name] = port pin = port.create_pin() self.connect_pins_to_wires(pin,port_name,index) @@ -211,11 +235,11 @@ def parse_top_level_clock(self): self.expect(CLOCK) self.tokenizer.next() try: - self.netlist.top_instance["EBLIF.clock"] + self.current_model["EBLIF.clock"] except KeyError: - self.netlist.top_instance["EBLIF.clock"] = list() + self.current_model["EBLIF.clock"] = list() while (self.tokenizer.token is not NEW_LINE): - self.netlist.top_instance["EBLIF.clock"].append(self.tokenizer.token) + self.current_model["EBLIF.clock"].append(self.tokenizer.token) self.tokenizer.next() def create_top_level_port(self,port_direction,port_name): @@ -229,7 +253,7 @@ def connect_pins_to_wires(self, pin, cable_name, wire_index): if (cable_name in self.cables.keys()): cable = self.cables[cable_name] else: - cable = self.netlist.top_instance.reference.create_cable(name=cable_name) + cable = self.current_model.create_cable(name=cable_name) self.cables[cable_name] = cable try: cable.wires[wire_index] @@ -246,6 +270,7 @@ def parse_sub_circuit(self,is_gate=False): # print(self.tokenizer.token) self.current_instance_info.clear() reference_model = self.tokenizer.next() + self.check_hierarchy(reference_model) definition = None if reference_model not in list(key for key in self.definitions.keys()): # if the reference model is not found in the netlist, create it definition = self.create_new_definition() @@ -253,7 +278,7 @@ def parse_sub_circuit(self,is_gate=False): else: definition = self.definitions[reference_model] self.collect_subcircuit_information() - instance = self.netlist.top_instance.reference.create_child(reference = definition) + instance = self.current_model.create_child(reference = definition) self.current_instance = instance if is_gate: instance["EBLIF.type"] = "EBLIF.gate" @@ -264,6 +289,36 @@ def parse_sub_circuit(self,is_gate=False): self.connect_instance_pins(instance) self.check_for_and_add_more_instance_info() + def check_hierarchy(self, child_definition_name): + if child_definition_name == self.netlist.top_instance.reference.name: + # print(self.current_definition.name + " is instancing the current top instance (" + name+ " which is a "+ self.netlist.top_instance.reference.name+")") + old_top_instance = self.netlist.top_instance + + new_level = self.current_model + # we know the current top is not right. So now we can move it up a level. + # But double check to make sure nothing is instancing the potential new top. + # Move up levels until we reach a new top + if (len(self.current_model.references) > 0): + current_level = list(x for x in self.current_model.references)[0] + while(True): + current_level = current_level.parent + try: + current_level.parent + except AttributeError: + new_level = current_level + break; + + self.netlist.top_instance = sdn.Instance() + self.netlist.top_instance.name = new_level.name + self.netlist.top_instance.reference = new_level + self.netlist.name = new_level.name + + # print("New top instance is "+ self.netlist.top_instance.name) + + # this instance should just go away. It was created to be the top instance but we don't want that + # it has no parent. And now with no reference, it should have no ties to the netlist. + old_top_instance.reference = None + def create_new_definition(self): definition = self.netlist.libraries[0].create_definition(name = self.tokenizer.token) # print("GONNA MAKE DEFINITION: " + self.tokenizer.token) @@ -427,7 +482,10 @@ def parse_name(self): single_output_covers = list() while (self.check_if_init_values(self.tokenizer.peek())): # make sure next token is init values single_output_cover=self.tokenizer.next() - single_output_cover+=" "+self.tokenizer.next() + single_output_cover+=" " + possible_next = self.tokenizer.next() + if possible_next != NEW_LINE: + single_output_cover+=possible_next self.tokenizer.next() single_output_covers.append(single_output_cover) @@ -445,7 +503,7 @@ def parse_name(self): definition = self.definitions[name] # then create an instance of it - instance = self.netlist.top_instance.reference.create_child() + instance = self.current_model.create_child() instance.reference = definition instance["EBLIF.output_covers"] = single_output_covers # self.assign_instance_a_default_name(instance) @@ -518,7 +576,7 @@ def parse_latch(self): definition = self.definitions[name] # create an instance of it - instance = self.netlist.top_instance.reference.create_child() + instance = self.current_model.create_child() instance.reference = definition # self.assign_instance_a_default_name(instance) instance.name = port_info["output"] # by convention, the latch name is the name of the net it drives @@ -545,7 +603,7 @@ def get_connected_wires(self,cable_one_name,index_one,cable_two_name,index_two): if (cable_one_name in self.cables.keys()): cable_one = self.cables[cable_one_name] else: - cable_one = self.netlist.top_instance.reference.create_cable(name=cable_one_name) + cable_one = self.current_model.create_cable(name=cable_one_name) self.cables[cable_one_name] = cable_one try: cable_one.wires[index_one] @@ -557,7 +615,7 @@ def get_connected_wires(self,cable_one_name,index_one,cable_two_name,index_two): if (cable_two_name in self.cables.keys()): cable_two = self.cables[cable_two_name] else: - cable_two = self.netlist.top_instance.reference.create_cable(name=cable_two_name) + cable_two = self.current_model.create_cable(name=cable_two_name) self.cables[cable_two_name] = cable_two try: cable_two.wires[index_two] From eef04efbd93aaa5325145a8d8266b8552eb59720 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 6 Jun 2022 13:28:37 -0600 Subject: [PATCH 23/92] more support for hierarchy and blackboxes in eblif parser and composer --- spydrnet/composers/eblif/eblif_composer.py | 26 +++++++++++++--------- spydrnet/parsers/eblif/eblif_parser.py | 13 +++++++++-- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/spydrnet/composers/eblif/eblif_composer.py b/spydrnet/composers/eblif/eblif_composer.py index b5e2d793..4ec4f918 100644 --- a/spydrnet/composers/eblif/eblif_composer.py +++ b/spydrnet/composers/eblif/eblif_composer.py @@ -47,6 +47,10 @@ def compose_comments(self): def compose_models(self): self.compose_model(self.netlist.top_instance.reference) for model in self.netlist.get_hinstances(recursive=True, filter=lambda x: (x.item.is_leaf()==False)): + print(model.name + " is not a leaf. He's a " + model.item.reference.name) + print(list(x.name for x in model.item.reference.children)) + print("His children number is " + str(len(model.item.reference.children))) + print("His cable number is " + str(len(model.item.reference.cables))) model = model.item.reference if "EBLIF.blackbox" not in model.data.keys(): self.compose_model(model) @@ -251,17 +255,17 @@ def find_and_write_additional_instance_info(self,instance): def compose_blackboxes(self): for definition in self.netlist.get_definitions(): if definition.name in self.blackboxes_to_compose: - if "EBLIF.blackbox" in definition.data.keys(): - to_write = "\n.model "+definition.name - to_write+="\n.inputs" - for port in definition.get_ports(filter=lambda x: x.direction is sdn.IN): - to_write+=" "+port.name - to_write+="\n.outputs" - for port in definition.get_ports(filter=lambda x: x.direction is sdn.OUT): - to_write+=" "+port.name - self.write_out(to_write+"\n") - self.write_out(".blackbox\n") - self.compose_end() + # if "EBLIF.blackbox" in definition.data.keys(): + to_write = ".model "+definition.name + to_write+="\n.inputs" + for port in definition.get_ports(filter=lambda x: x.direction is sdn.IN): + to_write+=" "+port.name + to_write+="\n.outputs" + for port in definition.get_ports(filter=lambda x: x.direction is sdn.OUT): + to_write+=" "+port.name + self.write_out(to_write+"\n") + self.write_out(".blackbox\n") + self.compose_end() def compose_end(self): self.write_out(".end\n\n") diff --git a/spydrnet/parsers/eblif/eblif_parser.py b/spydrnet/parsers/eblif/eblif_parser.py index 24ca144e..cdec8acb 100644 --- a/spydrnet/parsers/eblif/eblif_parser.py +++ b/spydrnet/parsers/eblif/eblif_parser.py @@ -77,6 +77,8 @@ def parse_eblif(self): def parse_model(self): model_name = self.tokenizer.next() + self.cables = dict() + self.default_names = dict() self.parse_model_header(model_name) self.parse_model_helper() @@ -140,11 +142,13 @@ def parse_model_helper(self): self.parse_name() elif token == CONN: self.parse_conn() + elif token == BLACKBOX: + self.make_blackbox() elif token == END: break else: None - + def parse_model_header(self, model_name): # Libraries aren't in blif, so just create a single library # print("Model name: " + model_name) @@ -162,6 +166,7 @@ def parse_model_header(self, model_name): parent_instance = Instance(name=parent_instance_def.name) parent_instance.reference = parent_instance_def self.netlist.set_top_instance(parent_instance) + self.netlist.name = parent_instance_def.name self.current_model = parent_instance_def self.tokenizer.next() # should be end of line so proceed to next line self.parse_top_level_ports() @@ -655,4 +660,8 @@ def set_subcircuit_names_by_convention(self): # by convention, the instance name name = pin.wire.cable.name if len(pin.wire.cable.wires) > 1: name+="_"+str(pin.wire.cable.wires.index(pin.wire)) - instance.name = name \ No newline at end of file + instance.name = name + + def make_blackbox(self): + self.current_model["EBLIF.blackbox"] = True + self.current_model.remove_cables_from(self.current_model.cables) From e8b83f9d19357e476adf5438bbc38c9f2ebbf82d Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 6 Jun 2022 13:30:35 -0600 Subject: [PATCH 24/92] removed print statements --- spydrnet/composers/eblif/eblif_composer.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/spydrnet/composers/eblif/eblif_composer.py b/spydrnet/composers/eblif/eblif_composer.py index 4ec4f918..157bcc2a 100644 --- a/spydrnet/composers/eblif/eblif_composer.py +++ b/spydrnet/composers/eblif/eblif_composer.py @@ -47,10 +47,6 @@ def compose_comments(self): def compose_models(self): self.compose_model(self.netlist.top_instance.reference) for model in self.netlist.get_hinstances(recursive=True, filter=lambda x: (x.item.is_leaf()==False)): - print(model.name + " is not a leaf. He's a " + model.item.reference.name) - print(list(x.name for x in model.item.reference.children)) - print("His children number is " + str(len(model.item.reference.children))) - print("His cable number is " + str(len(model.item.reference.cables))) model = model.item.reference if "EBLIF.blackbox" not in model.data.keys(): self.compose_model(model) From 35306acf0c8c37da7a573e3fcab4aaf843c11b28 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 6 Jun 2022 13:32:40 -0600 Subject: [PATCH 25/92] compose blackbox bugfix --- spydrnet/composers/eblif/eblif_composer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spydrnet/composers/eblif/eblif_composer.py b/spydrnet/composers/eblif/eblif_composer.py index 157bcc2a..cc53814c 100644 --- a/spydrnet/composers/eblif/eblif_composer.py +++ b/spydrnet/composers/eblif/eblif_composer.py @@ -142,7 +142,8 @@ def separate_by_type(self): def compose_subcircuits(self,list_of_subcircuits,is_gate=False): for subckt in list_of_subcircuits: - self.blackboxes_to_compose.add(subckt.reference.name) + if (subckt.is_leaf()): + self.blackboxes_to_compose.add(subckt.reference.name) to_add = "" if is_gate: to_write = ".gate "+ subckt.reference.name+" " From 73a6a834cbf9f56b77d2b61629443d30c8a22aa0 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Tue, 7 Jun 2022 09:27:02 -0600 Subject: [PATCH 26/92] bug fix eblif parser --- spydrnet/parsers/eblif/eblif_parser.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/spydrnet/parsers/eblif/eblif_parser.py b/spydrnet/parsers/eblif/eblif_parser.py index cdec8acb..fcb937ef 100644 --- a/spydrnet/parsers/eblif/eblif_parser.py +++ b/spydrnet/parsers/eblif/eblif_parser.py @@ -384,9 +384,8 @@ def connect_instance_pins(self,instance): port = next(instance.get_ports(port_name)) pin = None if len(port.pins) < pin_index+1: # multibit port that isn't yet multibit - pin = port.create_pin() - else: - pin = next(instance.get_pins(selection=Selection.OUTSIDE,filter=lambda x: x.inner_pin.port.name == port_name and x.inner_pin is x.inner_pin.port.pins[pin_index])) + inner_pin = port.create_pin() + pin = next(instance.get_pins(selection=Selection.OUTSIDE,filter=lambda x: x.inner_pin.port.name == port_name and x.inner_pin is x.inner_pin.port.pins[pin_index])) self.connect_pins_to_wires(pin,cable_name,cable_index) def parse_comment(self): @@ -417,7 +416,7 @@ def get_port_name_and_index(self,string): if ":" in index: old_index = index index = index[:index.find(':')] - print("Index was: "+old_index+". To avoid an error, it was changed to "+index) + print("EBLIFParser: Index was: "+old_index+". To avoid an error, it was changed to "+index) return name, int(index) else: return string, 0 @@ -654,13 +653,18 @@ def set_subcircuit_names_by_convention(self): # by convention, the instance name for instance in self.netlist.get_instances(): if instance["EBLIF.type"] in ["EBLIF.subckt","EBLIF.gate"]: if "EBLIF.cname" not in instance.data: - pin = next(instance.get_pins(selection=Selection.OUTSIDE,filter=lambda x: x.inner_pin.port.direction is sdn.OUT),None) - if pin: - if pin.wire: - name = pin.wire.cable.name - if len(pin.wire.cable.wires) > 1: - name+="_"+str(pin.wire.cable.wires.index(pin.wire)) - instance.name = name + iterator = instance.get_pins(selection=Selection.OUTSIDE,filter=lambda x: x.inner_pin.port.direction is sdn.OUT) + while(True): + pin = next(iterator, None) + if pin: + if pin.wire: + name = pin.wire.cable.name + if len(pin.wire.cable.wires) > 1: + name+="_"+str(pin.wire.cable.wires.index(pin.wire)) + instance.name = name + break + else: + break def make_blackbox(self): self.current_model["EBLIF.blackbox"] = True From e3caf7c197f79c6188e4a6b5ce6effc12f433064 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Thu, 9 Jun 2022 11:09:47 -0600 Subject: [PATCH 27/92] eblif parser bug fix --- spydrnet/parsers/eblif/eblif_parser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spydrnet/parsers/eblif/eblif_parser.py b/spydrnet/parsers/eblif/eblif_parser.py index fcb937ef..dbdcaaa0 100644 --- a/spydrnet/parsers/eblif/eblif_parser.py +++ b/spydrnet/parsers/eblif/eblif_parser.py @@ -634,7 +634,7 @@ def merge_wires(self,wire_one,wire_two): name_one = wire_one.cable.name+"_"+str(wire_one.index()) name_two = wire_two.cable.name+"_"+str(wire_two.index()) new_cable_name = name_one+"_"+name_two - new_cable = self.current_model.reference.create_cable(name=new_cable_name) + new_cable = self.current_model.create_cable(name=new_cable_name) new_wire = new_cable.create_wire() wire_one_pins = wire_one.pins.copy() From 032aba1410e5a07135c81198be809f776afde7cf Mon Sep 17 00:00:00 2001 From: Jacob Date: Fri, 10 Jun 2022 21:38:02 -0600 Subject: [PATCH 28/92] bug fix for loading spydrnet error --- spydrnet/parsers/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 4ddf3e61..065b9032 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -1,7 +1,6 @@ import os import zipfile import tempfile -from spydrnet.parsers.primitive_library_reader import PrimitiveLibraryReader """ Init for Spydrnet. The functions below can be called directly @@ -81,5 +80,6 @@ def get_lowercase_extension(filename): return extension_lower def read_primitive_library(architecture, netlist): + from spydrnet.parsers.primitive_library_reader import PrimitiveLibraryReader reader = PrimitiveLibraryReader(architecture, netlist) reader.run() \ No newline at end of file From 17c22dc2416df2650ff83f508fc6bf0ca538c4d6 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 10 Jun 2022 21:39:57 -0600 Subject: [PATCH 29/92] bug fix for loading spydrnet error --- spydrnet/parsers/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 4ddf3e61..065b9032 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -1,7 +1,6 @@ import os import zipfile import tempfile -from spydrnet.parsers.primitive_library_reader import PrimitiveLibraryReader """ Init for Spydrnet. The functions below can be called directly @@ -81,5 +80,6 @@ def get_lowercase_extension(filename): return extension_lower def read_primitive_library(architecture, netlist): + from spydrnet.parsers.primitive_library_reader import PrimitiveLibraryReader reader = PrimitiveLibraryReader(architecture, netlist) reader.run() \ No newline at end of file From e2645b7c3f75f6afc4360094ecb1f38e353e49e7 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Thu, 16 Jun 2022 11:44:57 -0600 Subject: [PATCH 30/92] yosys internal cell library support --- spydrnet/parsers/primitive_library_reader.py | 6 +++--- spydrnet/parsers/verilog/parser.py | 7 ++++--- .../yosys_internal_cells.v.zip | Bin 0 -> 1912 bytes spydrnet/util/architecture.py | 3 ++- 4 files changed, 9 insertions(+), 7 deletions(-) create mode 100644 spydrnet/support_files/architecture_libraries/yosys_internal_cells.v.zip diff --git a/spydrnet/parsers/primitive_library_reader.py b/spydrnet/parsers/primitive_library_reader.py index 48067dd2..037985c4 100644 --- a/spydrnet/parsers/primitive_library_reader.py +++ b/spydrnet/parsers/primitive_library_reader.py @@ -30,8 +30,8 @@ def __init__(self, architecture, netlist): def run(self): self.initialize() while(self.parser.tokenizer.has_next()): - self.get_past_comments() - self.parser.parse_primitive(definition_list=self.definition_list) + self.progress_past_comments() + self.parser.parse_primitive(definition_list=self.definition_list, bypass_name_check=True) definition = self.parser.current_definition if definition: self.parsed_defs[definition.name] = definition @@ -44,7 +44,7 @@ def initialize(self): self.parser.current_library = Library() self.create_defintiion_dict() - def get_past_comments(self): + def progress_past_comments(self): token = self.parser.peek_token() while(token != vt.MODULE and token != vt.PRIMITIVE): # print(token) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index f002db42..464c3396 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -252,7 +252,7 @@ def add_blackbox_definitions(self): d["VERILOG.primitive"] = True self.current_library.add_definition(d) - def parse_primitive(self, definition_list = []): + def parse_primitive(self, definition_list = [], bypass_name_check=False): ''' similar to parse module but it will only look for the inputs and outputs to get an idea of how those things look @@ -263,8 +263,9 @@ def parse_primitive(self, definition_list = []): assert token == vt.MODULE or token == vt.PRIMITIVE, self.error_string( vt.MODULE, "to begin module statement", token) token = self.next_token() - assert vt.is_valid_identifier(token), self.error_string( - "identifier", "not a valid module name", token) + if not bypass_name_check: + assert vt.is_valid_identifier(token), self.error_string( + "identifier", "not a valid module name", token) name = token if definition_list: diff --git a/spydrnet/support_files/architecture_libraries/yosys_internal_cells.v.zip b/spydrnet/support_files/architecture_libraries/yosys_internal_cells.v.zip new file mode 100644 index 0000000000000000000000000000000000000000..046f467c63713a756038e7b5775890f9cccef1ed GIT binary patch literal 1912 zcmZ{lXIK)79>#H$nS0;_C*?>@R8q0T(!yD4uFNtAxCh}ZEGH>Pip(Tu$DN9!t~fKh z4%AXH7iy-WrpI+1TnA}%>z*&?InQ%Gy#M$A`|y7L+1v2&N&*0Y6M*s*niJ4TYq8-t z0KmZl08#)DAT|sei}ef$jX>QE^$Pa%K?Mh6b)uY|_yIikk_x_ImM3G6$~{5HRb~5qWz;(N|J7bI zC|nELgq@`Co}uZwb@~!9-Ukj%jqiFy8yaU6Ec3b_em)5|BM1*U@>y2!)O+*!cMA^@ zz)F%P+aa8a99uuBe6XkHUBODUAOS5{IWFT=4SnVAV^5`d zg>B&&bDQQsrEfc*u|wuh0#2PHm((|xln9Xs@=8EMGtJO=$7w(Xj;CZti1gtn&;A9} zW=Wc1md=JH1bIiQP{lCb31wbcr|iriX$Dz3!%7HpjxeE$47}52^UB|qo$0;w$EQHY zv1g2Z%%jejTL1R*ttI=a)U}({ z9ZG6dzPn|*+;UQPFAb>&>qGSB9~5TT2BQneJBVks0=Zkit>qr3zxQqcnf%X>scdkU)3K(FoG3040YJL{V9sh24H?&XO3a zP1VOH%5B&f6+uaLig^wWP`dA|%NTBd(!gJI^%Eggv6D3?KDtz(mBb&$iSS6K!1=>c zM4Arb`xSNBXKNHglP4G%Out)0L7<~+8b`LdN4LOu26eD9Q4d;kI5dQY_;&^3`uyv6 z5WW4^Hg-77?GZ#aT``UP$k#2L>-;tR4LvixX*KhElxVWxY=&2cU}N7FOg2O!8r;NCJSv8x+6NlbxKPp{x>WYIaA$dL#W1kUunTWTrtuB;jo z2PI3CM}x8jt!M#3Vb%L|jp`qQHVmm1h>!V5q^co})ZQN}2WRC^=&~x-5njag)q_*_ zcW3f-`!c(LKgMT>TjMgxhC9vWU*Fws(JWPeP<15rB%ibtVb{#)g=d!eX3CpM^k6$w zrr%@(zpb|s+AED}=a0m5sGK*Ru*j?M4$c(t*&OC`rhAUYIDmZ!%lwW6ycJj_ZsO*RgYRzlq@(tjR-(}OV%*~twfg|o4EpEsgk2ZVRM!B<| z1aHFeOolDedzGZ$Cvx9 zFWbM@Rx5enqn6LOa$4IYhN*6`thCGSE@4@NW|lQ9olxZqPqQwHhCJ$g6V23hV-Cg= z&Z)RWz9%bvrmUfF9Qta@DjXv2_)w7S4GC0q#J8AWg9>l`oUu18O9iIH)7n;#(Q!tt zRq0q7EDmo#ZzAMia7}&)mbhY{aBx_$2&c~?7b&i-%H)?gqVhgIvi-Wq$*KZQHAt!* zj_Fw>MSu76L$OVK`E0_7OU$t!DR}S`c?L4mZ{zI(JQZoX6Z2M8TF4}|VCzFKtYC&7 z6FWC~C24P6#31-kNaSXdF`)U3L+O`{{3+lYUHib1$o?i z*l9iuMTou@D}>rm-aiDF^mGtAE{1b6`V^(WeSg>&+~erJjoO2|PmVv^Y&D;UGED_% z>cTsVfEXMo&krGz$Xey=+%ndoaro?QxVRN~{>g(fKm7;*aQ#eu!msb2ta$8CEB?)h V_BO|U8uizn3*hmykMsSa{{ifafxQ3# literal 0 HcmV?d00001 diff --git a/spydrnet/util/architecture.py b/spydrnet/util/architecture.py index 0caff70b..db602ff7 100644 --- a/spydrnet/util/architecture.py +++ b/spydrnet/util/architecture.py @@ -6,4 +6,5 @@ XILINX_7SERIES = os.path.join(base_file_path, "xilinx_7series.v.zip") F4PGA_XILINX_7SERIES = os.path.join(base_file_path, "f4pga_xilinx_7series.v.zip") -LATTICE_LIFCL = os.path.join(base_file_path, "lifcl.v.zip") \ No newline at end of file +LATTICE_LIFCL = os.path.join(base_file_path, "lifcl.v.zip") +YOSYS_CELLS = os.path.join(base_file_path, "yosys_internal_cells.v.zip") \ No newline at end of file From 4a4c796b9d9efe70de04f0f744a222799d8e573c Mon Sep 17 00:00:00 2001 From: Ethan monlux Date: Thu, 30 Jun 2022 14:28:51 -0600 Subject: [PATCH 31/92] Corrected spelling --- examples/basic/plot_stat.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/basic/plot_stat.py b/examples/basic/plot_stat.py index 31124769..ecbd9cf2 100644 --- a/examples/basic/plot_stat.py +++ b/examples/basic/plot_stat.py @@ -24,7 +24,7 @@ for definition in library.definitions: # Gets the name of the current definition and how many times its been used print("\tDefinition name:", definition['EDIF.identifier']) - print("\t\t", "Defintion used", str(len(definition.references)), "times") + print("\t\t", "Definition used", str(len(definition.references)), "times") # Gets the number of Ports in definition print("\t\t", str(len(definition.ports)), "ports detected") # Loop through each port for the current definition From 50b8f9d264269e07c9533ae253224ea967a5f269 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 18 Jul 2022 11:31:57 -0600 Subject: [PATCH 32/92] primitive library reader bug fix --- spydrnet/parsers/primitive_library_reader.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spydrnet/parsers/primitive_library_reader.py b/spydrnet/parsers/primitive_library_reader.py index 037985c4..7f17df78 100644 --- a/spydrnet/parsers/primitive_library_reader.py +++ b/spydrnet/parsers/primitive_library_reader.py @@ -64,6 +64,9 @@ def insert_info(self): port_dict = self.create_port_dict(match) # print(definition.name + " " + str(port_dict)) for port in definition.get_ports(): + if port.name is None: # no port name, so assume it's the only port. + port.name = next(key for key in port_dict.keys()) + # print("Port name was None so changed to " + port.name) port.direction = port_dict[port.name] cnt+=1 return cnt From 82e7531574df91ee6f21c8c764c4f5a3f7ed5215 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 1 Aug 2022 13:45:15 -0600 Subject: [PATCH 33/92] verilog parser fix for empty parameters --- spydrnet/parsers/verilog/parser.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index 464c3396..3f12dc15 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -774,12 +774,15 @@ def parse_parameter_mapping(self): assert token == vt.OPEN_PARENTHESIS, self.error_string( vt.OPEN_PARENTHESIS, "after # to begin parameter mapping", token) - while token != vt.CLOSE_PARENTHESIS: - k, v = self.parse_parameter_map_single() - params[k] = v + if self.peek_token() == vt.CLOSE_PARENTHESIS: # empty parameters token = self.next_token() - assert token in [vt.CLOSE_PARENTHESIS, vt.COMMA], self.error_string( - vt.COMMA + " or " + vt.CLOSE_PARENTHESIS, "to separate parameters or end parameter mapping", token) + else: + while token != vt.CLOSE_PARENTHESIS: + k, v = self.parse_parameter_map_single() + params[k] = v + token = self.next_token() + assert token in [vt.CLOSE_PARENTHESIS, vt.COMMA], self.error_string( + vt.COMMA + " or " + vt.CLOSE_PARENTHESIS, "to separate parameters or end parameter mapping", token) assert token == vt.CLOSE_PARENTHESIS, self.error_string( vt.CLOSE_PARENTHESIS, "to terminate ", token) From 0112e1c4323d5d55f56371cb4c32bf25fbf212c9 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Mon, 1 Aug 2022 16:57:38 -0600 Subject: [PATCH 34/92] added index() shortcut to outerpin --- spydrnet/ir/outerpin.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spydrnet/ir/outerpin.py b/spydrnet/ir/outerpin.py index fd540434..d993b66a 100644 --- a/spydrnet/ir/outerpin.py +++ b/spydrnet/ir/outerpin.py @@ -93,3 +93,6 @@ def clone(self): c = self._clone(dict()) c._clone_rip() return c + + def index(self): + return self._inner_pin.port.pins.index(self._inner_pin) \ No newline at end of file From 5731967844b4d7b3e581679b08f6403d1df1977d Mon Sep 17 00:00:00 2001 From: ganeshgore Date: Sat, 6 Aug 2022 10:56:46 -0600 Subject: [PATCH 35/92] Fixed constant cable name declaration --- spydrnet/parsers/verilog/parser.py | 2 +- .../verilog/tests/test_verilogParser.py | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index 3f12dc15..c421b618 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -954,7 +954,7 @@ def parse_variable_instantiation(self): assert token[1] == vt.SINGLE_QUOTE, self.error_string(vt.SINGLE_QUOTE, "in the constant", token) assert token[2] == 'b', self.error_string('b', "in the constant", token) assert token[3] in ["0", "1", "x", "X", "z", "Z"], self.error_string("one of 0, 1, x, X, z, Z", "represent the constant value after '", token) - name = "\\ " + name = "\\ " elif vt.is_numeric(token[0]): assert False, self.error_string("single bit constant", "multibit constants not supported", token) else: diff --git a/spydrnet/parsers/verilog/tests/test_verilogParser.py b/spydrnet/parsers/verilog/tests/test_verilogParser.py index 22b78379..4ff6743c 100644 --- a/spydrnet/parsers/verilog/tests/test_verilogParser.py +++ b/spydrnet/parsers/verilog/tests/test_verilogParser.py @@ -1385,6 +1385,31 @@ def test_get_wires_from_cable_helper(self): w22 = expected2[i][j] assert w21 == w22, "the wires are not the same or not in the same order" + def test_constant_parsing(self): + """ + Tests multiple wire decalaration on the same line in verilog + """ + parser = VerilogParser() + + # Check constant 0 net declaration + tokens = ("1'b0", vt.SEMI_COLON) + tokenizer = self.TestTokenizer(tokens) + parser = VerilogParser() + parser.tokenizer = tokenizer + + parser.current_definition = sdn.Definition() + cable, _, _ = parser.parse_variable_instantiation() + self.assertEqual(cable.name, "\\ ", "Check const wire name") + + # Check constant 1 net declaration + tokens = ("1'b1", vt.SEMI_COLON) + tokenizer = self.TestTokenizer(tokens) + parser = VerilogParser() + parser.tokenizer = tokenizer + + parser.current_definition = sdn.Definition() + cable, _, _ = parser.parse_variable_instantiation() + self.assertEqual(cable.name, "\\ ", "Check const wire name") if __name__ == '__main__': From ba10cd9ebbc469cbee6619ec27cd4cddd39dae2a Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Tue, 9 Aug 2022 10:26:23 -0600 Subject: [PATCH 36/92] eblif support for inout ports --- spydrnet/composers/eblif/eblif_composer.py | 4 ++-- spydrnet/parsers/eblif/eblif_parser.py | 14 ++++++++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/spydrnet/composers/eblif/eblif_composer.py b/spydrnet/composers/eblif/eblif_composer.py index cc53814c..17015e6d 100644 --- a/spydrnet/composers/eblif/eblif_composer.py +++ b/spydrnet/composers/eblif/eblif_composer.py @@ -65,7 +65,7 @@ def compose_model(self, model): def compose_model_ports(self): to_write = ".inputs " - for port in self.current_model.get_ports(filter = lambda x: x.direction is sdn.Port.Direction.IN): + for port in self.current_model.get_ports(filter = lambda x: (x.direction is sdn.Port.Direction.IN or x.direction is sdn.Port.Direction.INOUT) is True): if len(port.pins) > 1: for i in range(len(port.pins)): to_write+=port.name+"["+str(i)+"] " @@ -75,7 +75,7 @@ def compose_model_ports(self): self.write_out(to_write) to_write = ".outputs " - for port in self.current_model.get_ports(filter = lambda x: x.direction is sdn.Port.Direction.OUT): + for port in self.current_model.get_ports(filter = lambda x: (x.direction is sdn.Port.Direction.OUT or x.direction is sdn.Port.Direction.INOUT) is True): if len(port.pins) > 1: for i in range(len(port.pins)): to_write+=port.name+"["+str(i)+"] " diff --git a/spydrnet/parsers/eblif/eblif_parser.py b/spydrnet/parsers/eblif/eblif_parser.py index dbdcaaa0..b07ae4a6 100644 --- a/spydrnet/parsers/eblif/eblif_parser.py +++ b/spydrnet/parsers/eblif/eblif_parser.py @@ -213,6 +213,7 @@ def parse_top_level_outputs(self): self.expect(OUTPUTS) self.tokenizer.next() while (self.tokenizer.token is not NEW_LINE): + is_inout = False port_name, index = self.get_port_name_and_index(self.tokenizer.token) index = int(index) port = None @@ -223,17 +224,22 @@ def parse_top_level_outputs(self): pin = port.create_pin() elif port_name in existing_port_list: port = next(self.current_model.get_ports(port_name)) - port.direction = sdn.OUT + if port.direction is sdn.IN or port.direction is sdn.INOUT: # it's an input port and now an output, so it's inout + port.direction = sdn.INOUT + is_inout = True + else: + port.direction = sdn.OUT if len(port.pins) < index+1: pin = port.create_pin() else: pin = port.pins[index] else: - port = self.create_top_level_port(sdn.Port.Direction.OUT,port_name) + port = self.create_top_level_port(sdn.Port.Direction.OUT, port_name) self.current_model.add_port(port) self.top_level_output_ports[port_name] = port pin = port.create_pin() - self.connect_pins_to_wires(pin,port_name,index) + if not is_inout: + self.connect_pins_to_wires(pin,port_name,index) self.tokenizer.next() def parse_top_level_clock(self): @@ -383,7 +389,7 @@ def connect_instance_pins(self,instance): # print(list(x.inner_pin.port.name for x in instance.get_pins(selection=Selection.OUTSIDE))) port = next(instance.get_ports(port_name)) pin = None - if len(port.pins) < pin_index+1: # multibit port that isn't yet multibit + while len(port.pins) < (pin_index+1): # multibit port that isn't yet multibit inner_pin = port.create_pin() pin = next(instance.get_pins(selection=Selection.OUTSIDE,filter=lambda x: x.inner_pin.port.name == port_name and x.inner_pin is x.inner_pin.port.pins[pin_index])) self.connect_pins_to_wires(pin,cable_name,cable_index) From d5745d3f6e668dd0b80232e5a644f18ec9412c9f Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Wed, 24 Aug 2022 16:58:34 -0600 Subject: [PATCH 37/92] eblif parser bug fix --- spydrnet/parsers/eblif/eblif_parser.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/spydrnet/parsers/eblif/eblif_parser.py b/spydrnet/parsers/eblif/eblif_parser.py index b07ae4a6..e38a5842 100644 --- a/spydrnet/parsers/eblif/eblif_parser.py +++ b/spydrnet/parsers/eblif/eblif_parser.py @@ -615,11 +615,9 @@ def get_connected_wires(self,cable_one_name,index_one,cable_two_name,index_two): else: cable_one = self.current_model.create_cable(name=cable_one_name) self.cables[cable_one_name] = cable_one - try: - cable_one.wires[index_one] - except IndexError: + while len(cable_one.wires) < (index_one + 1): wire = Wire() - cable_one.add_wire(wire,index_one) + cable_one.add_wire(wire) wire_one = cable_one.wires[index_one] if (cable_two_name in self.cables.keys()): @@ -627,11 +625,9 @@ def get_connected_wires(self,cable_one_name,index_one,cable_two_name,index_two): else: cable_two = self.current_model.create_cable(name=cable_two_name) self.cables[cable_two_name] = cable_two - try: - cable_two.wires[index_two] - except IndexError: + while len(cable_two.wires) < (index_two + 1): wire = Wire() - cable_two.add_wire(wire,index_two) + cable_two.add_wire(wire) wire_two = cable_two.wires[index_two] return wire_one,wire_two From 42ce5554a768a39c3a6a4c9bfc0ba56e1905d6cf Mon Sep 17 00:00:00 2001 From: emonlux Date: Wed, 31 Aug 2022 15:35:13 -0600 Subject: [PATCH 38/92] changed primitive library name for Verilog netlists to work with xilinx primitives --- spydrnet/composers/verilog/composer.py | 6 +++--- spydrnet/parsers/verilog/parser.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/spydrnet/composers/verilog/composer.py b/spydrnet/composers/verilog/composer.py index cb1c9677..cb1fb0e4 100644 --- a/spydrnet/composers/verilog/composer.py +++ b/spydrnet/composers/verilog/composer.py @@ -112,7 +112,7 @@ def _write_module(self, definition): return if definition.library.name == "SDN_VERILOG_ASSIGNMENT": return # don't write assignment definitions - if definition.library.name == "SDN.verilog_primitives": + if definition.library.name == "hdi_primitives": if not self.write_blackbox: return self.file.write(vt.CELL_DEFINE) @@ -121,7 +121,7 @@ def _write_module(self, definition): self._write_module_header(definition) self._write_module_body(definition) self.file.write(vt.END_MODULE) - if definition.library.name == "SDN.verilog_primitives": + if definition.library.name == "hdi_primitives": self.file.write(vt.NEW_LINE) self.file.write(vt.END_CELL_DEFINE) @@ -144,7 +144,7 @@ def _write_module_header(self, definition): def _write_module_body(self, definition): '''write out the module body start with ports, then do assignments then instances''' self._write_module_body_ports(definition) - if definition.library.name != "SDN.verilog_primitives": + if definition.library.name != "hdi_primitives": self._write_module_body_cables(definition) self._write_assignments(definition) self._write_module_body_instances(definition) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index 3f12dc15..ef21e13f 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -175,7 +175,7 @@ def parse_verilog(self): self.netlist = sdn.Netlist() self.netlist.name = "SDN_VERILOG_NETLIST" self.work = self.netlist.create_library("work") - self.primitives = self.netlist.create_library("SDN.verilog_primitives") + self.primitives = self.netlist.create_library("hdi_primitives") self.current_library = self.work preprocessor_defines = set() From 9f7a154daead236fdfd9688c51604ac91e056909 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 2 Sep 2022 12:02:57 -0600 Subject: [PATCH 39/92] parser bug fix. Makes sure wires and pins are ordered correctly when connecting things. Fixes bug of incorrect connections between hierarchical levels --- spydrnet/parsers/verilog/parser.py | 45 ++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 14 deletions(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index 3f12dc15..31d60188 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -433,7 +433,7 @@ def parse_module_header_port_alias(self): example syntax .canale({\\canale[3] ,\\canale[2] ,\\canale[1] ,\\canale[0] }),''' - + token = self.next_token() assert token == vt.DOT, self.error_string( vt.DOT, "for port aliasing", token) @@ -461,12 +461,13 @@ def parse_module_header_port_alias(self): name, left_index=len(wires)-1, right_index=0) # connect the wires to the pins - assert len(port.pins) == len( wires), "Internal Error: the pins in a created port and the number of wires the aliased cable do not match up" - for i in range(len(port.pins)): - wires[i].connect_pin(port.pins[i]) + pin_list = list(p for p in port.pins) + pin_list.sort(reverse=True, key=self.pin_sort_func) + for i in range(len(pin_list)): + wires[i].connect_pin(pin_list[i]) def parse_cable_concatenation(self): '''parse a concatenation structure of cables, create the cables mentioned, and deal with indicies @@ -481,6 +482,7 @@ def parse_cable_concatenation(self): while token != vt.CLOSE_BRACE: cable, left, right = self.parse_variable_instantiation() wires_temp = self.get_wires_from_cable(cable, left, right) + wires_temp.sort(reverse=True,key=self.wire_sort_func) for w in wires_temp: wires.append(w) token = self.next_token() @@ -490,6 +492,9 @@ def parse_cable_concatenation(self): return wires + def wire_sort_func(self, w): + return w.cable.wires.index(w) + def parse_module_header_port(self): '''parse the port declaration in the module header''' token = self.peek_token() @@ -528,8 +533,11 @@ def parse_module_header_port(self): # wire together the cables and the port assert len(port.pins) == len(cable.wires), self.error_string( "the pins in a created port and the number of wires in it's cable do not match up", "wires: " + str(len(cable.wires)), "pins: " + str(len(port.pins))) - for i in range(len(port.pins)): - cable.wires[i].connect_pin(port.pins[i]) + + pin_list = list(p for p in port.pins) + pin_list.sort(reverse=False, key=self.pin_sort_func) + for i in range(len(pin_list)): + cable.wires[i].connect_pin(pin_list[i]) def parse_module_body(self): ''' @@ -629,7 +637,7 @@ def parse_port_declaration(self, properties): else: port = self.create_or_update_port(port_list.pop( ).name, left_index=left, right_index=right, direction=direction, defining=True) - + if len(cable.wires) > 1: self.connect_resized_port_cable(cable, port) @@ -696,7 +704,7 @@ def parse_instantiation(self, properties): current_level.parent except AttributeError: new_level = current_level - break; + break self.netlist.top_instance = sdn.Instance() self.netlist.top_instance.name = new_level.name + "_top" @@ -865,8 +873,9 @@ def parse_port_map_single(self): "pins length to match or exceed cable.wires length", "INTERNAL ERROR", str(len(pins)) + "!=" + str(len(wires))) # there can be unconnected pins at the end of the port. + pins.sort(reverse=True, key=self.pin_sort_func) for i in range(len(wires)): - wires[i].connect_pin(pins[i]) + wires[i].connect_pin(pins[i]) token = self.next_token() @@ -878,6 +887,11 @@ def parse_port_map_single(self): assert token == vt.CLOSE_PARENTHESIS, self.error_string( vt.CLOSE_PARENTHESIS, "to end cable name in port mapping", token) + + def pin_sort_func(self, p): + if isinstance(p, sdn.OuterPin): + return p.inner_pin.port.pins.index(p.inner_pin) + return p.port.pins.index(p) def connect_implicitly_mapped_ports(self): for instance, token_list in self.implicitly_mapped_ports.items(): @@ -916,8 +930,10 @@ def connect_implicitly_mapped_ports(self): "pins length to match or exceed cable.wires length", "INTERNAL ERROR", str(len(pins)) + "!=" + str(len(wires))) # there can be unconnected pins at the end of the port. + pin_list = list(p for p in pins) + pin_list.sort(reverse=True, key=self.pin_sort_func) for i in range(len(wires)): - wires[i].connect_pin(pins[i]) + wires[i].connect_pin(pin_list[i]) token = self.next_token() index += 1 @@ -1137,9 +1153,8 @@ def get_wires_from_cable(self, cable, left, right): left = left - cable.lower_index right = right - cable.lower_index temp_wires = cable.wires[min(left, right): max(left, right) + 1] - if left > right: - temp_wires = reversed(temp_wires) - + # if right > left: + temp_wires.reverse() for w in temp_wires: wires.append(w) @@ -1151,7 +1166,9 @@ def get_wires_from_cable(self, cable, left, right): wires.append(cable.wires[index]) else: - for w in cable.wires: + temp_wires = list(w for w in cable.wires) + temp_wires.reverse() + for w in temp_wires: wires.append(w) return wires From 21dc04d18b9d5e6f034bde2c60c286041347bea9 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 2 Sep 2022 12:07:31 -0600 Subject: [PATCH 40/92] verilog parser fixes that make sure connections are composed correctly (particularly between levels of hierarchy). Also fix to not write wire declarations more than once. Also support for writing cable concatenations as bundles. --- spydrnet/composers/verilog/composer.py | 128 +++++++++++++++++++++---- 1 file changed, 110 insertions(+), 18 deletions(-) diff --git a/spydrnet/composers/verilog/composer.py b/spydrnet/composers/verilog/composer.py index cb1c9677..b17bc258 100644 --- a/spydrnet/composers/verilog/composer.py +++ b/spydrnet/composers/verilog/composer.py @@ -2,17 +2,18 @@ from spydrnet.ir import Port from spydrnet.ir import Cable import spydrnet.parsers.verilog.verilog_tokens as vt +import spydrnet as sdn class Composer: - def __init__(self, definition_list=None, write_blackbox=False, defparam = False): + def __init__(self, definition_list=None, write_blackbox=False, defparam = False, reverse=False): """ Write a verilog netlist from SDN netlist parameters ---------- - definition_list - (list[str]) list of defintions to write + definition_list - (list[str]) list of definitions to write write_blackbox - (bool) Skips writing black boxes/verilog primitives defparam - (bool) Compose parameters in *defparam* statements instead of using #() """ @@ -27,6 +28,8 @@ def __init__(self, definition_list=None, write_blackbox=False, defparam = False) self.write_blackbox = write_blackbox self.definition_list = definition_list self.defparam = defparam + self.module_body_ports_written = [] + self.reverse = reverse def run(self, ir, file_out="out.v"): @@ -41,7 +44,10 @@ def _compose(self, netlist): self._write_header(netlist) instance = netlist.top_instance if instance is not None: - self._write_from_top(instance) + if self.reverse: + self._write_from_bottom(instance) + else: + self._write_from_top(instance) for library in netlist.libraries: for definition in library.definitions: if definition not in self.written: @@ -67,6 +73,28 @@ def _write_from_top(self, instance): "definition has no name set", definition) self._write_module(definition) + def _write_from_bottom(self, instance): + # ****this may need more work**** + visited = [] + to_write_list = deque() + to_write_stack = [] + to_write_list.append(instance.reference) + to_write_stack.append(instance.reference) + while(len(to_write_list) != 0): + definition = to_write_list.popleft() + if definition in visited: + continue + visited.append(definition) + for c in definition.children: + if c.reference not in visited: + to_write_list.append(c.reference) + to_write_stack.append(c.reference) + print(list(x.name for x in to_write_stack if len(x.children) > 0)) + while(to_write_stack): + definition = to_write_stack.pop() + if definition not in self.written: + self.written.add(definition) + self._write_module(definition) ########################################################################### # Write verilog constructs @@ -177,6 +205,7 @@ def _write_module_body_instance(self, instance): self.file.write(to_write) def _write_module_body_ports(self, definition): + self.module_body_ports_written = [] for p in definition.ports: self._write_module_body_port(p) self.file.write(vt.NEW_LINE) @@ -186,6 +215,9 @@ def _write_module_body_port(self, port): if len(cables) == 0: cables.append(port) #adding the port will let composer to still print out disconnected ports for c in cables: + if c.name in self.module_body_ports_written: + continue + self.module_body_ports_written.append(c.name) self._write_star_constraints(port) self.file.write(self.indent_count * vt.SPACE) self.file.write(self.direction_string_map[port.direction]) @@ -196,7 +228,9 @@ def _write_module_body_port(self, port): self.file.write(vt.NEW_LINE) def _write_module_body_cables(self, definition): - for c in definition.cables: + cable_list = list(c for c in definition.cables) + cable_list.reverse() + for c in cable_list: self._write_module_body_cable(c) self.file.write(vt.NEW_LINE) @@ -218,17 +252,47 @@ def _write_concatenation(self, wires): {wire_1, wire_2}''' self.file.write(vt.OPEN_BRACE) first = True + previous_cable = Cable() + first_index = 0 + previous_index = 0 + has_to_write = False for w in wires: if w is not None: - if not first: - self.file.write(vt.COMMA) - self.file.write(vt.SPACE) index = self._index_of_wire_in_cable(w) - self._write_bundle_with_indicies(w.cable, index, None) + if w.cable.name == previous_cable.name: + if index == (previous_index - 1): + previous_index = index + else: + #write the previous and save new stuff + if not first: + self.file.write(vt.COMMA) + self.file.write(vt.SPACE) + self._write_bundle_with_indicies(previous_cable, previous_index, first_index) + first = False + previous_cable = w.cable + first_index = index + previous_index = index + else: + if has_to_write: + #write the previous and save new stuff + if not first: + self.file.write(vt.COMMA) + self.file.write(vt.SPACE) + self._write_bundle_with_indicies(previous_cable, previous_index, first_index) + first = False + previous_cable = w.cable + first_index = index + previous_index = index + has_to_write = True else: - break + None + # break + if has_to_write: + if not first: + self.file.write(vt.COMMA) + self.file.write(vt.SPACE) + self._write_bundle_with_indicies(previous_cable, previous_index, first_index) - first = False self.file.write(vt.CLOSE_BRACE) def _write_module_header_ports(self, definition): @@ -244,6 +308,11 @@ def _write_module_header_ports(self, definition): self.file.write(vt.CLOSE_PARENTHESIS) self.file.write(vt.SEMI_COLON) self.file.write(vt.NEW_LINE) + + def pin_sort_func(self, p): + if isinstance(p, sdn.OuterPin): + return p.inner_pin.port.pins.index(p.inner_pin) + return p.port.pins.index(p) def _write_module_header_port(self, port): '''does not write the input output or width, @@ -252,8 +321,10 @@ def _write_module_header_port(self, port): aliased = self._is_pinset_concatenated(port.pins, port.name) if aliased: wires = [] - for p in port.pins: - wires.append(p.wire) + pin_list = list(p for p in port.pins) + pin_list.sort(reverse=True, key=self.pin_sort_func) + for pin in pin_list: + wires.append(pin.wire) self.file.write(vt.DOT) self._write_name(port) self.file.write(vt.OPEN_PARENTHESIS) @@ -371,14 +442,14 @@ def _write_instance_ports(self, instance): if p.name: self._write_instance_port(instance, p) else: - self._write_implicitly_mapped__instance_port(instance, p) + self._write_implicitly_mapped_instance_port(instance, p) first = False self.file.write(vt.NEW_LINE) self.file.write(self.indent_count * vt.SPACE) self.file.write(vt.CLOSE_PARENTHESIS) self.file.write(vt.SEMI_COLON) - def _write_implicitly_mapped__instance_port(self, instance, port): + def _write_implicitly_mapped_instance_port(self, instance, port): '''Ports that have no name must be implicitly mapped. E.g. inst(VCC_net) rather than inst(.p(VCC_net))''' self.file.write(2*self.indent_count * vt.SPACE) # self.file.write(vt.DOT) @@ -393,8 +464,10 @@ def _write_implicitly_mapped__instance_port(self, instance, port): name = None concatenated = self._is_pinset_concatenated(pins, name) wires = [] - for p in pins: - wires.append(p.wire) + pin_list = list(p for p in port.pins) + pin_list.sort(reverse=True, key=self.pin_sort_func) + for pin in pin_list: + wires.append(pin.wire) if concatenated: self._write_concatenation(wires) else: @@ -425,10 +498,15 @@ def _write_instance_port(self, instance, port): name = None concatenated = self._is_pinset_concatenated(pins, name) wires = [] + sorted_wires = [] + pin_list = list(p for p in pins) + pin_list.sort(reverse=True, key=self.pin_sort_func) + for pin in pin_list: + sorted_wires.append(pin.wire) for p in pins: wires.append(p.wire) if concatenated: - self._write_concatenation(wires) + self._write_concatenation(sorted_wires) else: if pins[0].wire is not None: last = -1 @@ -501,6 +579,7 @@ def _write_brackets(self, bundle, low_index, high_index): self._error_string("attempted to index bundle out of bounds at " + str(high_index), bundle) return elif (low_index == lower_bundle and high_index == upper_bundle) or (low_index == None and high_index == None): + self.file.write("[" + str(high_index) + ":" + str(low_index) + "]") return elif low_index == high_index or low_index is None or high_index is None: index = low_index @@ -559,7 +638,20 @@ def _is_pinset_concatenated(self, pins, name): if next_name != name and not now_none: aliased = True break - + + # if all the wires connected to the pins are from the same cable, don't count as aliased + # otherwise, return previous answer + # TODO maybe also check if all of the cable is used. So no skipped wires. + # name = None + # for p in pins: + # if p.wire is None: + # continue + # if not name: + # name = p.wire.cable.name + # continue + # if p.wire.cable.name is not name: + # return aliased + # return False return aliased def _all_wires_and_cables_from_pinset(self, pins): From 0472b06ae65c3b983e1a1f3ed2f5033b7ce26386 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 2 Sep 2022 12:41:00 -0600 Subject: [PATCH 41/92] updated verilog parser and composer pytests based on new fixes --- .../verilog/tests/test_composer_unit.py | 18 ++++++++++-------- .../verilog/tests/test_verilogParser.py | 3 +++ 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/spydrnet/composers/verilog/tests/test_composer_unit.py b/spydrnet/composers/verilog/tests/test_composer_unit.py index db9727be..75a88fa0 100644 --- a/spydrnet/composers/verilog/tests/test_composer_unit.py +++ b/spydrnet/composers/verilog/tests/test_composer_unit.py @@ -138,13 +138,15 @@ def initialize_instance_port_connections(self, instance, definition): single_bit_expected = "." + single_bit_port.name + "(" + single_bit_cable.name + ")" - multi_bit_expected = "." + multi_bit_port.name + "(" + multi_bit_cable.name + ")" + multi_bit_expected = "." + multi_bit_port.name + "(" + multi_bit_cable.name + "[" + str(len(multi_bit_cable.wires) - 1 + multi_bit_cable.lower_index) + ":" + \ + str(multi_bit_cable.lower_index) + "]"")" - offset_expected = "." + multi_bit_port_offset.name + "(" + multi_bit_cable.name + ")" + offset_expected = "." + multi_bit_port_offset.name + "(" + multi_bit_cable.name + "[" + str(len(multi_bit_cable.wires) - 1 + multi_bit_cable.lower_index) + ":" + \ + str(multi_bit_cable.lower_index) + "]"")" partial_expected = "." + partial_port.name + "(" + multi_bit_cable.name + "[1:0])" - concatenated_expected = "." + concatenated_port.name + "({" + ccs[0].name + ', ' + ccs[1].name + ', ' + ccs[2].name + ', ' + ccs[3].name + "})" + concatenated_expected = "." + concatenated_port.name + "({" + ccs[3].name + ', ' + ccs[2].name + ', ' + ccs[1].name + ', ' + ccs[0].name + "})" return single_bit_port, single_bit_expected, \ multi_bit_port, multi_bit_expected, \ @@ -278,7 +280,7 @@ def test_write_brackets_multi_bit(self): assert composer.file.compare("[2]") composer.file.clear() composer._write_brackets(port, 0, 3) - assert composer.file.compare("") + assert composer.file.compare("[3:0]") composer.file.clear() composer._write_brackets(port, 1, 2) assert composer.file.compare("[2:1]") @@ -297,7 +299,7 @@ def test_write_brackets_multi_bit(self): assert composer.file.compare("[2]") composer.file.clear() composer._write_brackets(cable, 0, 3) - assert composer.file.compare("") + assert composer.file.compare("[3:0]") composer.file.clear() composer._write_brackets(cable, 1, 2) assert composer.file.compare("[2:1]") @@ -336,7 +338,7 @@ def test_write_brackets_multi_bit_offset(self): assert composer.file.compare("[6]") composer.file.clear() composer._write_brackets(port, 4, 7) - assert composer.file.compare("") + assert composer.file.compare("[7:4]") composer.file.clear() composer._write_brackets(port, 5, 6) assert composer.file.compare("[6:5]") @@ -355,7 +357,7 @@ def test_write_brackets_multi_bit_offset(self): assert composer.file.compare("[6]") composer.file.clear() composer._write_brackets(cable, 4, 7) - assert composer.file.compare("") + assert composer.file.compare("[7:4]") composer.file.clear() composer._write_brackets(cable, 5, 6) assert composer.file.compare("[6:5]") @@ -568,7 +570,7 @@ def test_write_module_ports_header_and_body_alias(self): c2.wires[0].connect_pin(port_alias.pins[1]) composer._write_module_header_port(port_alias) - assert composer.file.compare("." + port_alias.name + "({"+ c1.name + ", " + c2.name +"})") + assert composer.file.compare("." + port_alias.name + "({"+ c2.name + ", " + c1.name +"})") composer.file.clear() composer._write_module_body_port(port_alias) assert composer.file.compare("input " + c1.name + ";\n " + "input " + c2.name + ";\n") diff --git a/spydrnet/parsers/verilog/tests/test_verilogParser.py b/spydrnet/parsers/verilog/tests/test_verilogParser.py index 22b78379..db50a7d4 100644 --- a/spydrnet/parsers/verilog/tests/test_verilogParser.py +++ b/spydrnet/parsers/verilog/tests/test_verilogParser.py @@ -1363,6 +1363,9 @@ def test_get_wires_from_cable_helper(self): expected1 = [e11, [cable1.wires[0]], [cable1.wires[0]], [cable1.wires[1]], cable1.wires[2:5]] expected2 = [e21, [cable2.wires[0]], [cable2.wires[0]], [cable2.wires[1]], cable2.wires[2:5]] + expected1[4].reverse() + expected2[4].reverse() + for i in range(len(tests)): left1 = tests[i][0] + cable1.lower_index if tests[i][1] != None: From 0f919112cb1ea69861ac79a9afe504d5ea81a903 Mon Sep 17 00:00:00 2001 From: emonlux Date: Tue, 13 Sep 2022 08:24:00 -0600 Subject: [PATCH 42/92] added function to automatically remove and reinsert the space at the end of instances, ports, and cables for verilog netlists --- spydrnet/composers/__init__.py | 4 ++-- spydrnet/composers/verilog/composer.py | 7 ++++++- spydrnet/parsers/verilog/parser.py | 5 +++++ spydrnet/util/reinsert_space.py | 23 +++++++++++++++++++++++ spydrnet/util/remove_space.py | 26 ++++++++++++++++++++++++++ 5 files changed, 62 insertions(+), 3 deletions(-) create mode 100644 spydrnet/util/reinsert_space.py create mode 100644 spydrnet/util/remove_space.py diff --git a/spydrnet/composers/__init__.py b/spydrnet/composers/__init__.py index 9e8257e5..07cf4390 100644 --- a/spydrnet/composers/__init__.py +++ b/spydrnet/composers/__init__.py @@ -1,7 +1,7 @@ import os -def compose(netlist, filename, definition_list=[], write_blackbox=True, write_eblif_cname=True, defparam = False): +def compose(netlist, filename, Verilog_voters=[], definition_list=[], write_blackbox=True, write_eblif_cname=True, defparam = False): """To compose a file into a netlist format""" extension = os.path.splitext(filename)[1] extension_lower = extension.lower() @@ -14,7 +14,7 @@ def compose(netlist, filename, definition_list=[], write_blackbox=True, write_eb elif extension_lower in [".v", ".vh", ".vm"]: from spydrnet.composers.verilog.composer import Composer composer = Composer(definition_list, write_blackbox, defparam) - composer.run(netlist, file_out=filename) + composer.run(netlist, Verilog_voters, file_out=filename) elif extension_lower in [".eblif",".blif"]: from spydrnet.composers.eblif.eblif_composer import EBLIFComposer composer = EBLIFComposer(write_blackbox, write_eblif_cname) diff --git a/spydrnet/composers/verilog/composer.py b/spydrnet/composers/verilog/composer.py index cb1fb0e4..42918171 100644 --- a/spydrnet/composers/verilog/composer.py +++ b/spydrnet/composers/verilog/composer.py @@ -2,6 +2,7 @@ from spydrnet.ir import Port from spydrnet.ir import Cable import spydrnet.parsers.verilog.verilog_tokens as vt +from spydrnet.util.reinsert_space import reinsert_space class Composer: @@ -29,9 +30,13 @@ def __init__(self, definition_list=None, write_blackbox=False, defparam = False) self.defparam = defparam - def run(self, ir, file_out="out.v"): + def run(self, ir, voters, file_out="out.v"): + self.reinserting_space(ir, voters) self._open_file(file_out) self._compose(ir) + + def reinserting_space(self, netlist, voters): + self.reinsert_space = reinsert_space(netlist, voters) def _open_file(self, file_name): f = open(file_name, "w") diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index ef21e13f..3dff52fd 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -7,6 +7,7 @@ from spydrnet.ir import Netlist, Library, Definition, Port, Cable, Instance, OuterPin from spydrnet.plugins import namespace_manager import spydrnet as sdn +from spydrnet.util.remove_space import remove_space from functools import reduce import re @@ -117,7 +118,11 @@ def parse(self): self.parse_verilog() namespace_manager.default = ns_default self.tokenizer.__del__() + self.remove_spacing() return self.netlist + + def remove_spacing(self): + self.remove_space = remove_space(self.netlist) def initialize_tokenizer(self): self.tokenizer = VerilogTokenizer(self.filename) diff --git a/spydrnet/util/reinsert_space.py b/spydrnet/util/reinsert_space.py new file mode 100644 index 00000000..097cb943 --- /dev/null +++ b/spydrnet/util/reinsert_space.py @@ -0,0 +1,23 @@ +def reinsert_space(netlist,voters): + + for voter in voters: + for obj in voters[voter]: + obj.name = ''.join((obj.name, "_wire")) + + for instance in netlist.get_instances(): + if instance.name is None: + continue + elif "\\" in instance.name: + instance.name = ''.join((instance.name, " ")) + + for port in netlist.get_ports(): + if port.name is None: + continue + elif "\\" in port.name: + port.name = ''.join((port.name, " ")) + + for cable in netlist.get_cables(): + if cable.name is None: + continue + elif "\\" in cable.name: + cable.name = ''.join((cable.name, " ")) \ No newline at end of file diff --git a/spydrnet/util/remove_space.py b/spydrnet/util/remove_space.py new file mode 100644 index 00000000..54b69222 --- /dev/null +++ b/spydrnet/util/remove_space.py @@ -0,0 +1,26 @@ +def remove_space(netlist): + + for instance in netlist.get_instances(): + if instance.name is None: + continue + elif "\\" in instance.name: + update_name = instance.name.replace(" ", "") + instance.name = update_name + + + for port in netlist.get_ports(): + if port.name is None: + + continue + elif "\\" in port.name: + update_name = port.name.replace(" ", "") + port.name = update_name + + for cable in netlist.get_cables(): + if cable.name is None: + continue + elif "\\" in cable.name: + update_name = cable.name.replace(" ", "") + cable.name = update_name + + \ No newline at end of file From 1f4ee56125c3c7e1aa3fd70bd903c89ce36f23e5 Mon Sep 17 00:00:00 2001 From: emonlux Date: Tue, 13 Sep 2022 08:36:50 -0600 Subject: [PATCH 43/92] fixing composer --- spydrnet/composers/verilog/composer.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/spydrnet/composers/verilog/composer.py b/spydrnet/composers/verilog/composer.py index bf71d854..5df34636 100644 --- a/spydrnet/composers/verilog/composer.py +++ b/spydrnet/composers/verilog/composer.py @@ -2,11 +2,8 @@ from spydrnet.ir import Port from spydrnet.ir import Cable import spydrnet.parsers.verilog.verilog_tokens as vt -<<<<<<< HEAD from spydrnet.util.reinsert_space import reinsert_space -======= import spydrnet as sdn ->>>>>>> 0472b06ae65c3b983e1a1f3ed2f5033b7ce26386 class Composer: From 8202039c761aacc646cc46b761ad17014d28f969 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Wed, 14 Sep 2022 14:39:02 -0600 Subject: [PATCH 44/92] added doc for reverse option --- spydrnet/composers/verilog/composer.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spydrnet/composers/verilog/composer.py b/spydrnet/composers/verilog/composer.py index 5df34636..899efeaa 100644 --- a/spydrnet/composers/verilog/composer.py +++ b/spydrnet/composers/verilog/composer.py @@ -17,6 +17,7 @@ def __init__(self, definition_list=None, write_blackbox=False, defparam = False, definition_list - (list[str]) list of definitions to write write_blackbox - (bool) Skips writing black boxes/verilog primitives defparam - (bool) Compose parameters in *defparam* statements instead of using #() + reverse - (bool) Compose the netlist bottom to top """ self.file = None self.direction_string_map = dict() @@ -94,7 +95,7 @@ def _write_from_bottom(self, instance): if c.reference not in visited: to_write_list.append(c.reference) to_write_stack.append(c.reference) - print(list(x.name for x in to_write_stack if len(x.children) > 0)) + # print(list(x.name for x in to_write_stack if len(x.children) > 0)) while(to_write_stack): definition = to_write_stack.pop() if definition not in self.written: From 37ed2c924bea9079cd673dc615eb9bdbf27d604c Mon Sep 17 00:00:00 2001 From: emonlux Date: Thu, 15 Sep 2022 09:03:22 -0600 Subject: [PATCH 45/92] global flag for removing and reinserting spaces in netlist primitive names --- spydrnet/composers/__init__.py | 7 +++++-- spydrnet/composers/verilog/composer.py | 8 +------- spydrnet/parsers/__init__.py | 10 +++++++--- spydrnet/parsers/verilog/parser.py | 7 +------ spydrnet/util/reinsert_space.py | 8 ++++---- spydrnet/util/remove_space.py | 12 +++++------- 6 files changed, 23 insertions(+), 29 deletions(-) diff --git a/spydrnet/composers/__init__.py b/spydrnet/composers/__init__.py index 07cf4390..f1d5a0c3 100644 --- a/spydrnet/composers/__init__.py +++ b/spydrnet/composers/__init__.py @@ -1,7 +1,7 @@ import os -def compose(netlist, filename, Verilog_voters=[], definition_list=[], write_blackbox=True, write_eblif_cname=True, defparam = False): +def compose(netlist, filename, voters=[], definition_list=[], write_blackbox=True, write_eblif_cname=True, defparam = False, reinsert_space=False): """To compose a file into a netlist format""" extension = os.path.splitext(filename)[1] extension_lower = extension.lower() @@ -12,9 +12,12 @@ def compose(netlist, filename, Verilog_voters=[], definition_list=[], write_blac raise Exception("netlist.name undefined") composer.run(netlist, filename) elif extension_lower in [".v", ".vh", ".vm"]: + if reinsert_space: + from spydrnet.util.reinsert_space import reinserting_space + reinserting_space(netlist, voters) from spydrnet.composers.verilog.composer import Composer composer = Composer(definition_list, write_blackbox, defparam) - composer.run(netlist, Verilog_voters, file_out=filename) + composer.run(netlist, file_out=filename) elif extension_lower in [".eblif",".blif"]: from spydrnet.composers.eblif.eblif_composer import EBLIFComposer composer = EBLIFComposer(write_blackbox, write_eblif_cname) diff --git a/spydrnet/composers/verilog/composer.py b/spydrnet/composers/verilog/composer.py index 5df34636..680ac26d 100644 --- a/spydrnet/composers/verilog/composer.py +++ b/spydrnet/composers/verilog/composer.py @@ -2,10 +2,8 @@ from spydrnet.ir import Port from spydrnet.ir import Cable import spydrnet.parsers.verilog.verilog_tokens as vt -from spydrnet.util.reinsert_space import reinsert_space import spydrnet as sdn - class Composer: def __init__(self, definition_list=None, write_blackbox=False, defparam = False, reverse=False): @@ -33,14 +31,10 @@ def __init__(self, definition_list=None, write_blackbox=False, defparam = False, self.reverse = reverse - def run(self, ir, voters, file_out="out.v"): - self.reinserting_space(ir, voters) + def run(self, ir, file_out="out.v"): self._open_file(file_out) self._compose(ir) - def reinserting_space(self, netlist, voters): - self.reinsert_space = reinsert_space(netlist, voters) - def _open_file(self, file_name): f = open(file_name, "w") self.file = f diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 065b9032..a175116c 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -8,7 +8,7 @@ """ -def parse(filename, architecture=None): +def parse(filename, architecture=None, remove_space=False): """ The parse function is able to parse an EDIF (.edf) file, a Verilog file (.v), or an EBLIF file (.eblif). @@ -51,10 +51,10 @@ def parse(filename, architecture=None): filename = os.path.join( tempdirname, basename_less_final_extension) return _parse(filename) - return _parse(filename, architecture) + return _parse(filename, architecture, remove_space) -def _parse(filename, architecture=None): +def _parse(filename, architecture=None, remove_space=False): extension = get_lowercase_extension(filename) if extension in [".edf", ".edif", ".edn"]: from spydrnet.parsers.edif.parser import EdifParser @@ -68,6 +68,10 @@ def _parse(filename, architecture=None): else: raise RuntimeError("Extension {} not recognized.".format(extension)) parser.parse() + + if remove_space: + from spydrnet.util.remove_space import removing_space + removing_space(parser.netlist) if architecture: read_primitive_library(architecture, parser.netlist) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index 011abb11..fcbae60e 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -7,7 +7,6 @@ from spydrnet.ir import Netlist, Library, Definition, Port, Cable, Instance, OuterPin from spydrnet.plugins import namespace_manager import spydrnet as sdn -from spydrnet.util.remove_space import remove_space from functools import reduce import re @@ -118,11 +117,7 @@ def parse(self): self.parse_verilog() namespace_manager.default = ns_default self.tokenizer.__del__() - self.remove_spacing() - return self.netlist - - def remove_spacing(self): - self.remove_space = remove_space(self.netlist) + return self.netlist def initialize_tokenizer(self): self.tokenizer = VerilogTokenizer(self.filename) diff --git a/spydrnet/util/reinsert_space.py b/spydrnet/util/reinsert_space.py index 097cb943..c78ee0a9 100644 --- a/spydrnet/util/reinsert_space.py +++ b/spydrnet/util/reinsert_space.py @@ -1,4 +1,4 @@ -def reinsert_space(netlist,voters): +def reinserting_space(netlist,voters): for voter in voters: for obj in voters[voter]: @@ -7,17 +7,17 @@ def reinsert_space(netlist,voters): for instance in netlist.get_instances(): if instance.name is None: continue - elif "\\" in instance.name: + if "\\" in instance.name: instance.name = ''.join((instance.name, " ")) for port in netlist.get_ports(): if port.name is None: continue - elif "\\" in port.name: + if "\\" in port.name: port.name = ''.join((port.name, " ")) for cable in netlist.get_cables(): if cable.name is None: continue - elif "\\" in cable.name: + if "\\" in cable.name: cable.name = ''.join((cable.name, " ")) \ No newline at end of file diff --git a/spydrnet/util/remove_space.py b/spydrnet/util/remove_space.py index 54b69222..7d6fea69 100644 --- a/spydrnet/util/remove_space.py +++ b/spydrnet/util/remove_space.py @@ -1,25 +1,23 @@ -def remove_space(netlist): +def removing_space(netlist): for instance in netlist.get_instances(): if instance.name is None: continue - elif "\\" in instance.name: + if "\\" in instance.name: update_name = instance.name.replace(" ", "") - instance.name = update_name - + instance.name = update_name for port in netlist.get_ports(): if port.name is None: - continue - elif "\\" in port.name: + if "\\" in port.name: update_name = port.name.replace(" ", "") port.name = update_name for cable in netlist.get_cables(): if cable.name is None: continue - elif "\\" in cable.name: + if "\\" in cable.name: update_name = cable.name.replace(" ", "") cable.name = update_name From e6a5675f22bbb0a85d6c3a01c3140de2a8cd23be Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Wed, 19 Oct 2022 15:46:48 -0600 Subject: [PATCH 46/92] small edits to parser to prevent issues --- spydrnet/parsers/verilog/parser.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index aa7856a1..d745a9b5 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -1078,11 +1078,12 @@ def get_assignment_definition(self, width): in_port.direction = sdn.Port.Direction.IN out_port.direction = sdn.Port.Direction.OUT - cable = definition.create_cable("through") - cable.create_wires(width) - for i in range(width): - cable.wires[i].connect_pin(in_port.pins[i]) - cable.wires[i].connect_pin(out_port.pins[i]) + # no need for this. It actually messes with other spydrnet functions like uniquify() and is_leaf() + # cable = definition.create_cable("through") + # cable.create_wires(width) + # for i in range(width): + # cable.wires[i].connect_pin(in_port.pins[i]) + # cable.wires[i].connect_pin(out_port.pins[i]) return definition @@ -1223,6 +1224,10 @@ def connect_resized_port_cable(self, resized_cable, resized_port): for i in range(len(resized_port.pins)): # I think these should be lined up right? if resized_port.pins[i] not in resized_cable.wires[i].pins: + if resized_port.pins[i].wire: + continue + # the resized_port's pin is already connected + # this likely occurred because of an alias statement. resized_cable.wires[i].connect_pin(resized_port.pins[i]) def create_or_update_cable(self, name, left_index=None, right_index=None, var_type=None, defining=False): From e1ceab97fed6f02cddc749aef4473f401511e721 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Wed, 19 Oct 2022 15:49:10 -0600 Subject: [PATCH 47/92] added support for primitive library reader for eblif and correct naming --- spydrnet/parsers/__init__.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 065b9032..669cf051 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -71,6 +71,8 @@ def _parse(filename, architecture=None): if architecture: read_primitive_library(architecture, parser.netlist) + if extension in [".eblif",".blif"]: + set_eblif_names(parser.netlist) return parser.netlist @@ -82,4 +84,10 @@ def get_lowercase_extension(filename): def read_primitive_library(architecture, netlist): from spydrnet.parsers.primitive_library_reader import PrimitiveLibraryReader reader = PrimitiveLibraryReader(architecture, netlist) - reader.run() \ No newline at end of file + reader.run() + +def set_eblif_names(netlist): + from spydrnet.parsers.eblif.eblif_parser import EBLIFParser + eblif_parser = EBLIFParser() + eblif_parser.netlist = netlist + eblif_parser.set_subcircuit_names_by_convention() \ No newline at end of file From 22d0ab681e797c74c78fac66ad6292b9abdd4225 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Wed, 19 Oct 2022 15:49:38 -0600 Subject: [PATCH 48/92] minor edit to primitive library reader --- spydrnet/parsers/primitive_library_reader.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spydrnet/parsers/primitive_library_reader.py b/spydrnet/parsers/primitive_library_reader.py index 7f17df78..b7585414 100644 --- a/spydrnet/parsers/primitive_library_reader.py +++ b/spydrnet/parsers/primitive_library_reader.py @@ -35,6 +35,8 @@ def run(self): definition = self.parser.current_definition if definition: self.parsed_defs[definition.name] = definition + if len(self.parsed_defs) == len(self.netlist_defs): # found all needed information + break cnt = self.insert_info() print("Found information for %d definitions" % cnt) From d758f3622b06a52007e5660df70e69585001dfb7 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Wed, 19 Oct 2022 16:27:10 -0600 Subject: [PATCH 49/92] updated verilog pytest to reflect parser changes to assign statements --- spydrnet/parsers/verilog/tests/test_verilogParser.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/spydrnet/parsers/verilog/tests/test_verilogParser.py b/spydrnet/parsers/verilog/tests/test_verilogParser.py index 9bd1f8b2..9f7c30fe 100644 --- a/spydrnet/parsers/verilog/tests/test_verilogParser.py +++ b/spydrnet/parsers/verilog/tests/test_verilogParser.py @@ -1163,10 +1163,8 @@ def test_create_new_assignment_definition(self): assert len(definition.ports) == 2 assert len(definition.ports[0].pins) == width assert len(definition.ports[1].pins) == width - assert len(definition.cables) == 1 - for i in range(width): - assert definition.ports[0].pins[i] in definition.cables[0].wires[i].pins - assert definition.ports[1].pins[i] in definition.cables[0].wires[i].pins + assert len(definition.cables) == 0 + def test_connect_assigned_wires(self): From aa7310f52bb221256dfdcc5673afe1b84df37ff4 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 21 Oct 2022 11:53:43 -0600 Subject: [PATCH 50/92] cleaned up and improved eblif parser and composer --- spydrnet/composers/eblif/eblif_composer.py | 53 +- .../eblif/tests/test_eblif_composer.py | 10 +- spydrnet/parsers/eblif/eblif_parser.py | 638 +++++++----------- .../parsers/eblif/tests/test_eblif_parser.py | 2 +- 4 files changed, 277 insertions(+), 426 deletions(-) diff --git a/spydrnet/composers/eblif/eblif_composer.py b/spydrnet/composers/eblif/eblif_composer.py index 17015e6d..69056c04 100644 --- a/spydrnet/composers/eblif/eblif_composer.py +++ b/spydrnet/composers/eblif/eblif_composer.py @@ -1,5 +1,4 @@ import os -from re import sub from spydrnet.util.selection import Selection import spydrnet as sdn @@ -10,6 +9,7 @@ def __init__(self, write_blackbox, write_cname=True): self.open_file = None self.write_blackbox = write_blackbox self.write_cname = write_cname + self.models_written = [] self.blackboxes_to_compose = set() def run(self, ir, file_out): @@ -31,7 +31,6 @@ def clean_up(self): def _compose(self,ir): self.netlist = ir - # print("Composing...") self.compose_comments() self.compose_models() self.clean_up() @@ -46,26 +45,28 @@ def compose_comments(self): def compose_models(self): self.compose_model(self.netlist.top_instance.reference) - for model in self.netlist.get_hinstances(recursive=True, filter=lambda x: (x.item.is_leaf()==False)): + for model in self.netlist.get_hinstances(recursive=True): model = model.item.reference - if "EBLIF.blackbox" not in model.data.keys(): + if model not in self.models_written: self.compose_model(model) - if (self.write_blackbox): + self.models_written.append(model) + if self.write_blackbox: self.compose_blackboxes() def compose_model(self, model): + if model.library.name == "hdi_primitives": + return self.current_model = model to_write = ".model " + model.name + "\n" self.write_out(to_write) self.compose_model_ports() self.compose_model_clocks() - self.compose_default_wires() self.compose_instances() self.compose_end() def compose_model_ports(self): to_write = ".inputs " - for port in self.current_model.get_ports(filter = lambda x: (x.direction is sdn.Port.Direction.IN or x.direction is sdn.Port.Direction.INOUT) is True): + for port in self.current_model.get_ports(filter = lambda x: x.direction in {sdn.IN, sdn.INOUT}): if len(port.pins) > 1: for i in range(len(port.pins)): to_write+=port.name+"["+str(i)+"] " @@ -75,7 +76,7 @@ def compose_model_ports(self): self.write_out(to_write) to_write = ".outputs " - for port in self.current_model.get_ports(filter = lambda x: (x.direction is sdn.Port.Direction.OUT or x.direction is sdn.Port.Direction.INOUT) is True): + for port in self.current_model.get_ports(filter = lambda x: x.direction in {sdn.OUT, sdn.INOUT}): if len(port.pins) > 1: for i in range(len(port.pins)): to_write+=port.name+"["+str(i)+"] " @@ -91,26 +92,6 @@ def compose_model_clocks(self): to_write+=clock+" " self.write_out(to_write+"\n") - def compose_default_wires(self): - default_wires = list() - try: - self.netlist["EBLIF.default_wires"] - default_wires = self.netlist['EBLIF.default_wires'] - except KeyError: - None - written = False - if "$false" in default_wires: - self.write_out(".names $false\n") - written=True - if "$true" in default_wires: - self.write_out(".names $true\n1\n") - written=True - if "$undef" in default_wires: - self.write_out(".names $undef\n") - written=True - if written: - self.write_out("\n") - def compose_instances(self): categories = self.separate_by_type() if "EBLIF.subckt" in categories.keys(): @@ -143,7 +124,7 @@ def separate_by_type(self): def compose_subcircuits(self,list_of_subcircuits,is_gate=False): for subckt in list_of_subcircuits: if (subckt.is_leaf()): - self.blackboxes_to_compose.add(subckt.reference.name) + self.blackboxes_to_compose.add(subckt.reference) to_add = "" if is_gate: to_write = ".gate "+ subckt.reference.name+" " @@ -208,20 +189,15 @@ def compose_names(self,list_of_names): def compose_latches(self,latch_list): for latch_instance in latch_list: to_write = ".latch " - # port_list = list(x for x in latch_instance.get_ports()) for port_type in ['input', 'output', 'type', 'control', 'init-val']: # this is the specific order of ports - # current_port = next(port for port in port_list if port.name == port_type) for pin in latch_instance.get_pins(selection=Selection.OUTSIDE,filter=lambda x: x.inner_pin.port.name == port_type): - # connection_name = None if pin.wire: to_write+=pin.wire.cable.name if (len(pin.wire.cable.wires)>1): to_write+="["+str(pin.wire.index())+"]" to_write+=" " - # connection_name=pin.wire.cable.name else: to_write+="unconn " - # connection_name="unconn" to_write+='\n' self.write_out(to_write) self.find_and_write_additional_instance_info(latch_instance) @@ -237,9 +213,6 @@ def find_connected_wire_info(self,pin): def find_and_write_additional_instance_info(self,instance): to_write = "" if self.write_cname: - # if "EBLIF.cname" in instance.data: - # to_write+=".cname "+instance["EBLIF.cname"]+'\n' - # else: to_write+=".cname "+instance.name+'\n' if "EBLIF.attr" in instance.data: for key, value in instance.data["EBLIF.attr"].items(): @@ -250,9 +223,9 @@ def find_and_write_additional_instance_info(self,instance): self.write_out(to_write) def compose_blackboxes(self): - for definition in self.netlist.get_definitions(): - if definition.name in self.blackboxes_to_compose: - # if "EBLIF.blackbox" in definition.data.keys(): + primitive_library = next(self.netlist.get_libraries("hdi_primitives")) + for definition in primitive_library.definitions: + if definition in self.blackboxes_to_compose: to_write = ".model "+definition.name to_write+="\n.inputs" for port in definition.get_ports(filter=lambda x: x.direction is sdn.IN): diff --git a/spydrnet/composers/eblif/tests/test_eblif_composer.py b/spydrnet/composers/eblif/tests/test_eblif_composer.py index b71bbf63..4199bd16 100644 --- a/spydrnet/composers/eblif/tests/test_eblif_composer.py +++ b/spydrnet/composers/eblif/tests/test_eblif_composer.py @@ -47,13 +47,9 @@ def test_cables(self): cables_2.sort() self.assertEqual(cables_1,cables_2) self.assertEqual(len(cables_1),len(cables_2)) - - def test_no_blackbox_netlist(self): - for definition in self.netlist_1.get_definitions(filter=lambda x: (x is not self.netlist_1.top_instance.reference - and "logic-gate_0" not in x.name)): - self.assertTrue("EBLIF.blackbox" in definition.data.keys(),definition.name+" is not a blackbox"+str(definition.data)) - for definition in self.netlist_3.get_definitions(filter=lambda x: x is not self.netlist_3.top_instance.reference): - self.assertFalse("EBLIF.blackbox" in definition.data,definition.name+" is a blackbox"+str(definition.data)) + # TODO add wires and connections tests + + # test the composing of each individual part \ No newline at end of file diff --git a/spydrnet/parsers/eblif/eblif_parser.py b/spydrnet/parsers/eblif/eblif_parser.py index e38a5842..1db1c7c4 100644 --- a/spydrnet/parsers/eblif/eblif_parser.py +++ b/spydrnet/parsers/eblif/eblif_parser.py @@ -1,12 +1,10 @@ import spydrnet as sdn -from spydrnet.parsers.eblif.eblif_tokens import * +import spydrnet.parsers.eblif.eblif_tokens as et from spydrnet.parsers.eblif.eblif_tokenizer import Tokenizer from spydrnet.ir import Netlist -from spydrnet.ir import Definition from spydrnet.ir import Instance from spydrnet.ir import Port from spydrnet.ir import InnerPin -from spydrnet.ir.outerpin import OuterPin from spydrnet.ir import Wire from spydrnet.util.selection import Selection @@ -14,9 +12,38 @@ class EBLIFParser: """ Parse BLIF and EBLIF files into SpyDrNet - The first model is considered the netlist's top instance. Any model that follows is used as information for the definitions (aka primitive information) - """ + + class BlackboxHolder: + '''this is an internal class that helps manage + modules that are instanced before they are declared''' + + def __init__(self): + self.name_lookup = {} + self.defined = set() + + def get_blackbox(self, name): + '''creates or returns the black box based on the name''' + if name in self.name_lookup: + return self.name_lookup[name] + else: + definition = sdn.Definition() + definition.name = name + self.name_lookup[name] = definition + return definition + + def define(self, name): + '''adds the name to the defined set''' + self.defined.add(self.name_lookup[name]) + + def get_undefined_blackboxes(self): + '''return an iterable of all undefined blackboxes''' + undef = set() + for v in self.name_lookup.values(): + if v not in self.defined: + undef.add(v) + return undef + ####################################################### # setup functions ####################################################### @@ -36,19 +63,14 @@ def __init__(self): self.file_name = None self.tokenizer = None self.netlist = None - self.current_instance_info = dict() - # self.top_instance = None + self.current_instance_info = {} self.current_instance = None - # self.latest_definition = None - # self.information = dict() - self.definitions = dict() - self.cables = dict() - self.default_names = dict() - self.top_level_input_ports = dict() - self.top_level_output_ports = dict() - self.comments = list() + self.default_names = {} + self.comments = [] self.current_model = None - # self.last_net = None + self.primitives = None + self.work = None + self.blackbox_holder = self.BlackboxHolder() def createTokenizer(self): self.tokenizer = Tokenizer(self.file_name) @@ -60,357 +82,240 @@ def parse(self): self.createTokenizer() self.parse_eblif() return self.netlist - + def parse_eblif(self): netlist = Netlist() self.netlist = netlist - while(self.tokenizer.has_next()): + self.work = self.netlist.create_library("work") + self.primitives = self.netlist.create_library("hdi_primitives") + while self.tokenizer.has_next(): token = self.tokenizer.next() - if token == COMMENT: + if token == et.COMMENT: self.parse_comment() - elif token == MODEL: + elif token == et.MODEL: self.parse_model() else: None self.set_subcircuit_names_by_convention() self.insert_comments_into_netlist_data() + self.add_blackbox_definitions() def parse_model(self): model_name = self.tokenizer.next() - self.cables = dict() - self.default_names = dict() + self.default_names = {} self.parse_model_header(model_name) - self.parse_model_helper() + self.parse_model_helper(model_name) - def parse_other_model(self): - name = self.tokenizer.next() - try: - self.definitions[name] - except KeyError: - # print("Error, no definition found") - self.definitions[name] = self.create_new_definition() - definition = self.definitions[name] - self.tokenizer.next() - - while(self.tokenizer.peek() == INPUTS): - self.parse_other_model_input_ports(definition) - - while(self.tokenizer.peek() == OUTPUTS): - self.parse_other_model_output_ports(definition) - - while (True): - self.tokenizer.next() - if (self.tokenizer.token == BLACKBOX): - definition["EBLIF.blackbox"] = True - elif self.tokenizer.token == END: - break - - def parse_other_model_input_ports(self,definition): - self.expect(INPUTS) - self.tokenizer.next() - while (self.tokenizer.token is not NEW_LINE): - port_name, index = self.get_port_name_and_index(self.tokenizer.token) - index = int(index) - port = next(definition.get_ports(filter=lambda x: x.name == port_name), None) - if port is None: - new_port = definition.create_port(name=port_name) - port = new_port - port.direction = sdn.IN - self.tokenizer.next() - - def parse_other_model_output_ports(self,definition): - self.expect(OUTPUTS) - self.tokenizer.next() - while (self.tokenizer.token is not NEW_LINE): - port_name, index = self.get_port_name_and_index(self.tokenizer.token) - port = next(definition.get_ports(filter=lambda x: x.name == port_name)) - port.direction = sdn.OUT - self.tokenizer.next() - - def parse_model_helper(self): - while(self.tokenizer.has_next()): + def parse_model_helper(self, model_name): + model = self.blackbox_holder.get_blackbox(model_name) + is_blackbox = False + while self.tokenizer.has_next(): token = self.tokenizer.next() - if token == COMMENT: + if token == et.COMMENT: self.parse_comment() - elif token == SUBCIRCUIT: - self.parse_sub_circuit() - elif token == GATE: - self.parse_sub_circuit(is_gate=True) - elif token == LATCH: + elif token == et.SUBCIRCUIT: + self.parse_subcircuit() + elif token == et.GATE: + self.parse_subcircuit(is_gate=True) + elif token == et.LATCH: self.parse_latch() - elif token == NAMES: + elif token == et.NAMES: self.parse_name() - elif token == CONN: + elif token == et.CONN: self.parse_conn() - elif token == BLACKBOX: + elif token == et.BLACKBOX: self.make_blackbox() - elif token == END: + is_blackbox = True + elif token == et.END: break else: None + if is_blackbox: + self.primitives.add_definition(model) + else: + self.work.add_definition(model) def parse_model_header(self, model_name): - # Libraries aren't in blif, so just create a single library - # print("Model name: " + model_name) - if len(self.netlist.libraries) == 0: - library = self.netlist.create_library(name="library_1") - else: - library = next(self.netlist.get_libraries()) - parent_instance_def = next(self.netlist.get_definitions(model_name), None) - if not parent_instance_def: - parent_instance_def = library.create_definition(name=model_name) - self.definitions[parent_instance_def.name] = parent_instance_def - - + model_def = self.blackbox_holder.get_blackbox(model_name) + self.blackbox_holder.define(model_name) if not self.netlist.top_instance: - parent_instance = Instance(name=parent_instance_def.name) - parent_instance.reference = parent_instance_def + parent_instance = Instance(name=model_def.name) + parent_instance.reference = model_def self.netlist.set_top_instance(parent_instance) - self.netlist.name = parent_instance_def.name - self.current_model = parent_instance_def + self.netlist.name = model_def.name + self.current_model = model_def self.tokenizer.next() # should be end of line so proceed to next line - self.parse_top_level_ports() - - def parse_top_level_ports(self): - self.top_level_input_ports = dict() - self.top_level_output_ports = dict() - while(self.tokenizer.peek() == INPUTS): - self.parse_top_level_inputs() - while(self.tokenizer.peek() == OUTPUTS): - self.parse_top_level_outputs() - - while(self.tokenizer.peek() == CLOCK): - self.parse_top_level_clock() - - def parse_top_level_inputs(self): - self.expect(INPUTS) + self.parse_model_ports() + + def parse_model_ports(self): + while self.tokenizer.peek() == et.INPUTS: + self.parse_input_ports() + while self.tokenizer.peek() == et.OUTPUTS: + self.parse_output_ports() + while self.tokenizer.peek() == et.CLOCK: + self.parse_clock() + + def parse_input_ports(self): + self.expect(et.INPUTS) self.tokenizer.next() - while (self.tokenizer.token is not NEW_LINE): + while self.tokenizer.token is not et.NEW_LINE: port_name, index = self.get_port_name_and_index(self.tokenizer.token) index = int(index) - port = None - pin = None - existing_port_list = list(x.name for x in self.current_model.get_ports()) - if (port_name in self.top_level_input_ports.keys()): - port = self.top_level_input_ports[port_name] - pin = port.create_pin() - elif port_name in existing_port_list: - port = next(self.current_model.get_ports(port_name)) - port.direction = sdn.IN - if len(port.pins) < index+1: - pin = port.create_pin() - else: - pin = port.pins[index] - else: - port = self.create_top_level_port(sdn.Port.Direction.IN,port_name) + port = next(self.current_model.get_ports(port_name), None) + if not port: + port = self.create_model_port(sdn.Port.Direction.IN, port_name) self.current_model.add_port(port) - self.top_level_input_ports[port_name] = port - pin = port.create_pin() - self.connect_pins_to_wires(pin,port_name,index) + else: + port.direction=sdn.IN + while len(port.pins) < index+1: + port.create_pin() + pin = port.pins[index] + self.connect_pin_to_wire(pin,port_name,index) self.tokenizer.next() - - def parse_top_level_outputs(self): - self.expect(OUTPUTS) + + def parse_output_ports(self): + self.expect(et.OUTPUTS) self.tokenizer.next() - while (self.tokenizer.token is not NEW_LINE): + while self.tokenizer.token is not et.NEW_LINE: is_inout = False port_name, index = self.get_port_name_and_index(self.tokenizer.token) index = int(index) - port = None - pin = None - existing_port_list = list(x.name for x in self.current_model.get_ports()) - if (port_name in self.top_level_output_ports.keys()): - port= self.top_level_output_ports[port_name] - pin = port.create_pin() - elif port_name in existing_port_list: - port = next(self.current_model.get_ports(port_name)) - if port.direction is sdn.IN or port.direction is sdn.INOUT: # it's an input port and now an output, so it's inout - port.direction = sdn.INOUT - is_inout = True - else: - port.direction = sdn.OUT - if len(port.pins) < index+1: - pin = port.create_pin() - else: - pin = port.pins[index] - else: - port = self.create_top_level_port(sdn.Port.Direction.OUT, port_name) + port = next(self.current_model.get_ports(port_name), None) + if not port: + port = self.create_model_port(sdn.Port.Direction.OUT, port_name) self.current_model.add_port(port) - self.top_level_output_ports[port_name] = port - pin = port.create_pin() + if port.direction in {sdn.IN, sdn.INOUT}: # it's an input port and now an output, so it's inout + port.direction = sdn.INOUT + is_inout = True + else: + port.direction = sdn.OUT + while len(port.pins) < index+1: + port.create_pin() + pin = port.pins[index] if not is_inout: - self.connect_pins_to_wires(pin,port_name,index) + self.connect_pin_to_wire(pin,port_name,index) self.tokenizer.next() - - def parse_top_level_clock(self): - self.expect(CLOCK) + + def create_model_port(self, port_direction, port_name): + port = Port(direction=port_direction) + port.name = port_name + return port + + def parse_clock(self): + self.expect(et.CLOCK) self.tokenizer.next() try: self.current_model["EBLIF.clock"] except KeyError: - self.current_model["EBLIF.clock"] = list() - while (self.tokenizer.token is not NEW_LINE): + self.current_model["EBLIF.clock"] = [] + while self.tokenizer.token is not et.NEW_LINE: self.current_model["EBLIF.clock"].append(self.tokenizer.token) self.tokenizer.next() - def create_top_level_port(self,port_direction,port_name): - port = Port(direction=port_direction) - port.name = port_name - return port - - def connect_pins_to_wires(self, pin, cable_name, wire_index): + def connect_pin_to_wire(self, pin, cable_name, wire_index): # connect the port to a wire in a cable named after it - cable = None - if (cable_name in self.cables.keys()): - cable = self.cables[cable_name] - else: + cable = next(self.current_model.get_cables(cable_name), None) + if not cable: cable = self.current_model.create_cable(name=cable_name) - self.cables[cable_name] = cable - try: - cable.wires[wire_index] - except IndexError: - while (len(cable.wires)-1 < wire_index): # add wires to cable until we get the right index - wire = Wire() - cable.add_wire(wire,wire_index) - # wire = Wire() - # cable.add_wire(wire,wire_index) + while (len(cable.wires)-1) < wire_index: # add wires to cable until we get the right index + wire = Wire() + cable.add_wire(wire,wire_index) wire = cable.wires[wire_index] wire.connect_pin(pin) - def parse_sub_circuit(self,is_gate=False): - # print(self.tokenizer.token) + def parse_subcircuit(self, is_gate=False): self.current_instance_info.clear() reference_model = self.tokenizer.next() self.check_hierarchy(reference_model) - definition = None - if reference_model not in list(key for key in self.definitions.keys()): # if the reference model is not found in the netlist, create it - definition = self.create_new_definition() - # Note: if a definition is created, instance information is automatically collected - else: - definition = self.definitions[reference_model] - self.collect_subcircuit_information() - instance = self.current_model.create_child(reference = definition) + definition = self.blackbox_holder.get_blackbox(reference_model) + self.tokenizer.next() + while self.tokenizer.token is not et.NEW_LINE: + self.parse_subcircuit_port(definition) + self.tokenizer.next() + + instance = self.current_model.create_child(reference=definition) self.current_instance = instance if is_gate: instance["EBLIF.type"] = "EBLIF.gate" else: instance["EBLIF.type"] = "EBLIF.subckt" + self.assign_instance_a_default_name(instance) - # print(self.current_instance_info) self.connect_instance_pins(instance) - self.check_for_and_add_more_instance_info() + self.parse_instance_info() + + def parse_subcircuit_port(self, definition): + token = self.tokenizer.token + equal_index = token.find("=") + port_name_and_index = token[:equal_index] + name, index = self.get_port_name_and_index(port_name_and_index) + port = next(definition.get_ports(name), None) + if not port: + port = definition.create_port(name=name) + if index > (len(port.pins) - 1): + pin = InnerPin() + port.add_pin(pin,index) + self.current_instance_info[port_name_and_index] = token[equal_index+1:] def check_hierarchy(self, child_definition_name): if child_definition_name == self.netlist.top_instance.reference.name: # print(self.current_definition.name + " is instancing the current top instance (" + name+ " which is a "+ self.netlist.top_instance.reference.name+")") old_top_instance = self.netlist.top_instance - new_level = self.current_model # we know the current top is not right. So now we can move it up a level. # But double check to make sure nothing is instancing the potential new top. # Move up levels until we reach a new top - if (len(self.current_model.references) > 0): + if len(self.current_model.references) > 0: current_level = list(x for x in self.current_model.references)[0] - while(True): + while True: current_level = current_level.parent try: current_level.parent except AttributeError: new_level = current_level - break; + break self.netlist.top_instance = sdn.Instance() self.netlist.top_instance.name = new_level.name self.netlist.top_instance.reference = new_level self.netlist.name = new_level.name - # print("New top instance is "+ self.netlist.top_instance.name) - - # this instance should just go away. It was created to be the top instance but we don't want that + # this instance should just go away. It was created to be the top instance but we don't want that # it has no parent. And now with no reference, it should have no ties to the netlist. old_top_instance.reference = None - def create_new_definition(self): - definition = self.netlist.libraries[0].create_definition(name = self.tokenizer.token) - # print("GONNA MAKE DEFINITION: " + self.tokenizer.token) - self.tokenizer.next() - # print("now token is "+self.tokenizer.token) - while (self.tokenizer.token is not NEW_LINE): - self.parse_definition_port(definition) - self.tokenizer.next() - self.definitions[definition.name] = definition - return definition - - def parse_definition_port(self,definition): - port = Port() - token = self.tokenizer.token - equal_index = token.find("=") - port_name_and_index = token[:equal_index] - name,index = self.get_port_name_and_index(port_name_and_index) - if name in list(x.name for x in definition.ports): - # print(name + " is in "+ str(list(x.name for x in definition.ports))) - port = next(x for x in definition.ports if x.name == name) - pin = InnerPin() - port.add_pin(pin,index) - # print("added a pin at index "+str(index)) - self.current_instance_info[port_name_and_index] = token[equal_index+1:] - else: - new_port = Port() - new_port.name = name - pin = InnerPin() - new_port.add_pin(pin,index) - self.current_instance_info[port_name_and_index] = token[equal_index+1:] - definition.add_port(new_port) - # port.create_pin() - # return port - - def collect_subcircuit_information(self): - self.tokenizer.next() - while (self.tokenizer.token is not NEW_LINE): - token = self.tokenizer.token - equal_index = token.find("=") - port_name =token[:equal_index] - self.current_instance_info[port_name] = token[equal_index+1:] - self.tokenizer.next() - def connect_instance_pins(self,instance): - for key in self.current_instance_info.keys(): - cable_info = self.current_instance_info[key] - cable_name,cable_index = self.get_port_name_and_index(cable_info) # get connected cable name and wire index + for key, cable_info in self.current_instance_info.items(): + # cable_info = self.current_instance_info[key] + cable_name, cable_index = self.get_port_name_and_index(cable_info) # get connected cable name and wire index port_name, pin_index = self.get_port_name_and_index(key) # get own port name and pin index - if (cable_name == UNCONN): # intentionally disconnected so put that into metadata + if cable_name == et.UNCONN: # intentionally disconnected so put that into metadata try: - instance[UNCONN] + instance[et.UNCONN] except KeyError: - instance[UNCONN] = list() - instance[UNCONN].append(port_name+"["+str(pin_index)+"]") + instance[et.UNCONN] = [] + instance[et.UNCONN].append(port_name+"["+str(pin_index)+"]") continue - # print(port_name) - # print(list(x.inner_pin.port.name for x in instance.get_pins(selection=Selection.OUTSIDE))) + port = next(instance.get_ports(port_name)) - pin = None while len(port.pins) < (pin_index+1): # multibit port that isn't yet multibit - inner_pin = port.create_pin() - pin = next(instance.get_pins(selection=Selection.OUTSIDE,filter=lambda x: x.inner_pin.port.name == port_name and x.inner_pin is x.inner_pin.port.pins[pin_index])) - self.connect_pins_to_wires(pin,cable_name,cable_index) + port.create_pin() + pin = next(instance.get_pins(selection=Selection.OUTSIDE, filter=lambda x: x.inner_pin.port.name == port_name and x.inner_pin is x.inner_pin.port.pins[pin_index])) + self.connect_pin_to_wire(pin, cable_name, cable_index) def parse_comment(self): token = self.tokenizer.next() comment = "" - while (token is not NEW_LINE): + while token is not et.NEW_LINE: comment+=token+" " token = self.tokenizer.next() self.comments.append(comment) - + def insert_comments_into_netlist_data(self): self.netlist["EBLIF.comment"] = self.comments - def expect(self, token): - self.tokenizer.next() - self.tokenizer.expect(token) - def get_port_name_and_index(self,string): - index_specified = (string[len(string)-1] == "]") + index_specified = (string[-1] == "]") if index_specified: open_bracket = string.rfind("[") if open_bracket == -1: @@ -422,104 +327,99 @@ def get_port_name_and_index(self,string): if ":" in index: old_index = index index = index[:index.find(':')] - print("EBLIFParser: Index was: "+old_index+". To avoid an error, it was changed to "+index) + print("EBLIFParser: Index was: " + old_index + ". To avoid an error, it was changed to " + index) return name, int(index) else: return string, 0 - def assign_instance_a_default_name(self,instance): + def assign_instance_a_default_name(self, instance): name = instance.reference.name index = 0 if name in self.default_names.keys(): - index = self.default_names[name]+1 + index = self.default_names[name] + 1 self.default_names[name]+=1 else: index = 0 self.default_names[name] = 0 - name = name+"_instance_"+str(index) + name = name + "_instance_" + str(index) instance.name = name - - def check_for_and_add_more_instance_info(self): - while(True): + + def parse_instance_info(self): + while True: peeked_token = self.tokenizer.peek() - if (peeked_token == PARAM): + if peeked_token == et.PARAM: self.parse_param() - elif (peeked_token == CNAME): + elif peeked_token == et.CNAME: self.parse_cname() - elif (peeked_token == ATTRIBUTE): + elif peeked_token == et.ATTRIBUTE: self.parse_attribute() else: - if (peeked_token == NEW_LINE): + if peeked_token == et.NEW_LINE: self.tokenizer.next() continue break - + def parse_param(self): - self.expect(PARAM) + self.expect(et.PARAM) token = self.tokenizer.next() info = self.tokenizer.next() - try: + try: self.current_instance["EBLIF.param"] except KeyError: - self.current_instance["EBLIF.param"] = dict() + self.current_instance["EBLIF.param"] = {} self.current_instance["EBLIF.param"][token] = info - + def parse_cname(self): - self.expect(CNAME) + self.expect(et.CNAME) name = self.tokenizer.next() self.current_instance["EBLIF.cname"] = name self.current_instance.name = name def parse_attribute(self): - self.expect(ATTRIBUTE) + self.expect(et.ATTRIBUTE) key = self.tokenizer.next() value = self.tokenizer.next() try: self.current_instance["EBLIF.attr"] except KeyError: - self.current_instance["EBLIF.attr"] = dict() + self.current_instance["EBLIF.attr"] = {} self.current_instance["EBLIF.attr"][key] = value def parse_name(self): self.current_instance_info.clear() self.tokenizer.next() - # if self.look_for_true_false_undef(): - # return - port_nets = list() - while (self.tokenizer.token is not NEW_LINE): + port_nets = [] + while self.tokenizer.token is not et.NEW_LINE: port_nets.append(self.tokenizer.token) self.tokenizer.next() - single_output_covers = list() + single_output_covers = [] while (self.check_if_init_values(self.tokenizer.peek())): # make sure next token is init values single_output_cover=self.tokenizer.next() single_output_cover+=" " possible_next = self.tokenizer.next() - if possible_next != NEW_LINE: + if possible_next != et.NEW_LINE: single_output_cover+=possible_next - self.tokenizer.next() + self.tokenizer.next() single_output_covers.append(single_output_cover) - - # then make/get def called LUT_names_# where # is the # of ports-1 + + # then make/get def called logic-gate_# where # is the # of ports-1 name = "logic-gate_"+str(len(port_nets)-1) - try: - self.definitions[name] - except KeyError: - definition = self.netlist.libraries[0].create_definition(name=name) - self.definitions[name] = definition - for i in range(len(port_nets)-1): - port = self.create_names_port("in_"+str(i),Port.Direction.IN) + definition = self.blackbox_holder.get_blackbox(name) + for i in range(len(port_nets)-1): + port_name = "in_" + str(i) + port = next(definition.get_ports(port_name), None) + if not port: + port = self.create_names_port("in_" + str(i), Port.Direction.IN) definition.add_port(port) - definition.add_port(self.create_names_port("out",Port.Direction.OUT)) - definition = self.definitions[name] + if not next(definition.get_ports("out"), None): + definition.add_port(self.create_names_port("out", Port.Direction.OUT)) # then create an instance of it - instance = self.current_model.create_child() - instance.reference = definition - instance["EBLIF.output_covers"] = single_output_covers - # self.assign_instance_a_default_name(instance) + instance = self.current_model.create_child(reference=definition) self.current_instance = instance + instance["EBLIF.output_covers"] = single_output_covers instance["EBLIF.type"] = "EBLIF.names" - + for port, net in zip(definition.get_ports(),port_nets): self.current_instance_info[port.name] = net if "unconn" in port_nets[len(port_nets)-1]: @@ -528,7 +428,7 @@ def parse_name(self): instance.name = port_nets[len(port_nets)-1] # by convention, the name of the instance is the name of the driven net self.connect_instance_pins(instance) - self.check_for_and_add_more_instance_info() + self.parse_instance_info() def check_if_init_values(self,string): allowed = {'1','0','-'} @@ -537,22 +437,7 @@ def check_if_init_values(self,string): return False return True - def look_for_true_false_undef(self): - if self.tokenizer.token in [TRUE_WIRE,FALSE_WIRE,UNDEF_WIRE]: - try: - self.netlist["EBLIF.default_wires"] - except KeyError: - self.netlist["EBLIF.default_wires"] = list() - self.netlist["EBLIF.default_wires"].append(self.tokenizer.token) - if (self.tokenizer.token is TRUE_WIRE): - self.tokenizer.next() - self.tokenizer.next() - else: - self.tokenizer.next() - return True - return False - - def create_names_port(self,name,direction): + def create_names_port(self, name, direction): port = Port(direction=direction) port.name = name port.create_pin() @@ -562,33 +447,27 @@ def parse_latch(self): self.current_instance_info.clear() self.tokenizer.next() # first collect the information port_order = ["input","output","type","control","init-val"] - token_list = list() - port_info = dict() - while (self.tokenizer.token is not NEW_LINE): + token_list = [] + port_info = {} + while self.tokenizer.token is not et.NEW_LINE: token_list.append(self.tokenizer.token) self.tokenizer.next() for order, token in zip(port_order,token_list): port_info[order] = token name = "generic-latch" - try: - self.definitions[name] - except KeyError: - definition = self.netlist.libraries[0].create_definition(name=name) - self.definitions[name] = definition + definition = self.blackbox_holder.get_blackbox(name) + if len(definition.ports) == 0: for order in port_info.keys() : - if order != "output": - port = self.create_names_port(order,Port.Direction.IN) + if order == "output": + port = self.create_names_port(order, Port.Direction.OUT) definition.add_port(port) else: - port = self.create_names_port(order,Port.Direction.OUT) + port = self.create_names_port(order, Port.Direction.IN) definition.add_port(port) - definition = self.definitions[name] # create an instance of it - instance = self.current_model.create_child() - instance.reference = definition - # self.assign_instance_a_default_name(instance) + instance = self.current_model.create_child(reference=definition) instance.name = port_info["output"] # by convention, the latch name is the name of the net it drives self.current_instance = instance instance["EBLIF.type"] = "EBLIF.latch" @@ -597,45 +476,37 @@ def parse_latch(self): for port, net in port_info.items(): self.current_instance_info[port] = net self.connect_instance_pins(instance) - self.check_for_and_add_more_instance_info() + self.parse_instance_info() def parse_conn(self): cable_one_info = self.tokenizer.next() cable_two_info = self.tokenizer.next() - cable_one_name,cable_one_index = self.get_port_name_and_index(cable_one_info) - cable_two_name,cable_two_index = self.get_port_name_and_index(cable_two_info) - wire_one,wire_two = self.get_connected_wires(cable_one_name,cable_one_index,cable_two_name,cable_two_index) - self.merge_wires(wire_one,wire_two) - - def get_connected_wires(self,cable_one_name,index_one,cable_two_name,index_two): - cable_one = None - cable_two = None - if (cable_one_name in self.cables.keys()): - cable_one = self.cables[cable_one_name] - else: + cable_one_name, cable_one_index = self.get_port_name_and_index(cable_one_info) + cable_two_name, cable_two_index = self.get_port_name_and_index(cable_two_info) + wire_one, wire_two = self.get_connected_wires(cable_one_name, cable_one_index, cable_two_name, cable_two_index) + self.merge_wires(wire_one, wire_two) + + def get_connected_wires(self, cable_one_name, index_one, cable_two_name, index_two): + cable_one = next(self.current_model.get_cables(cable_one_name), None) + if not cable_one: cable_one = self.current_model.create_cable(name=cable_one_name) - self.cables[cable_one_name] = cable_one while len(cable_one.wires) < (index_one + 1): - wire = Wire() - cable_one.add_wire(wire) + cable_one.create_wire() wire_one = cable_one.wires[index_one] - if (cable_two_name in self.cables.keys()): - cable_two = self.cables[cable_two_name] - else: + cable_two = next(self.current_model.get_cables(cable_two_name), None) + if not cable_two: cable_two = self.current_model.create_cable(name=cable_two_name) - self.cables[cable_two_name] = cable_two while len(cable_two.wires) < (index_two + 1): - wire = Wire() - cable_two.add_wire(wire) + cable_two.create_wire() wire_two = cable_two.wires[index_two] - return wire_one,wire_two + return wire_one, wire_two - def merge_wires(self,wire_one,wire_two): + def merge_wires(self, wire_one, wire_two): # merge them into one new wire inside a new cable and throw both wires away - name_one = wire_one.cable.name+"_"+str(wire_one.index()) - name_two = wire_two.cable.name+"_"+str(wire_two.index()) - new_cable_name = name_one+"_"+name_two + name_one = wire_one.cable.name + "_" + str(wire_one.index()) + name_two = wire_two.cable.name + "_" + str(wire_two.index()) + new_cable_name = name_one + "_" + name_two new_cable = self.current_model.create_cable(name=new_cable_name) new_wire = new_cable.create_wire() @@ -652,22 +523,33 @@ def merge_wires(self,wire_one,wire_two): wire_two.cable.remove_wire(wire_two) def set_subcircuit_names_by_convention(self): # by convention, the instance names are defined by the net they drive - for instance in self.netlist.get_instances(): - if instance["EBLIF.type"] in ["EBLIF.subckt","EBLIF.gate"]: - if "EBLIF.cname" not in instance.data: - iterator = instance.get_pins(selection=Selection.OUTSIDE,filter=lambda x: x.inner_pin.port.direction is sdn.OUT) - while(True): - pin = next(iterator, None) - if pin: - if pin.wire: - name = pin.wire.cable.name - if len(pin.wire.cable.wires) > 1: - name+="_"+str(pin.wire.cable.wires.index(pin.wire)) - instance.name = name - break - else: - break + for instance in self.netlist.get_instances(): + if instance["EBLIF.type"] not in ["EBLIF.subckt", "EBLIF.gate"]: + continue + if "EBLIF.cname" in instance.data: + continue + iterator = instance.get_pins(selection=Selection.OUTSIDE, filter=lambda x: x.inner_pin.port.direction is sdn.OUT) + while True: + pin = next(iterator, None) + if pin: + if pin.wire: + name = pin.wire.cable.name + if len(pin.wire.cable.wires) > 1: + name+="_"+str(pin.wire.cable.wires.index(pin.wire)) + instance.name = name + break + else: + break + + def expect(self, token): + self.tokenizer.next() + self.tokenizer.expect(token) def make_blackbox(self): - self.current_model["EBLIF.blackbox"] = True + # self.current_model["EBLIF.blackbox"] = True self.current_model.remove_cables_from(self.current_model.cables) + + def add_blackbox_definitions(self): + for d in self.blackbox_holder.get_undefined_blackboxes(): + # d["EBLIF.blackbox"] = True + self.primitives.add_definition(d) diff --git a/spydrnet/parsers/eblif/tests/test_eblif_parser.py b/spydrnet/parsers/eblif/tests/test_eblif_parser.py index d016e3af..ec8bcaf5 100644 --- a/spydrnet/parsers/eblif/tests/test_eblif_parser.py +++ b/spydrnet/parsers/eblif/tests/test_eblif_parser.py @@ -50,7 +50,7 @@ def test_cables(self): for cable in self.netlist.get_cables(): self.assertTrue(self.netlist_is_own_netlist(cable)) count+=1 - self.assertEqual(count,10) + self.assertEqual(count, 11) def netlist_is_own_netlist(self,object): netlist_list = list(x for x in object.get_netlists()) From 74a2a5c8f5246506afc851f193b01756de84816f Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Thu, 3 Nov 2022 08:52:31 -0600 Subject: [PATCH 51/92] verilog parser fix to prevent unneccessary pins being added --- spydrnet/parsers/verilog/parser.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index 64a6f3eb..ffd32c7b 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -1352,13 +1352,17 @@ def create_or_update_port(self, name, left_index=None, right_index=None, directi port_upper = port.lower_index + len(port.pins) - 1 if in_upper is not None and in_lower is not None: - - if in_lower < port_lower: - prepend = port_lower - in_lower - self.prepend_pins(port, prepend) - if in_upper > port_upper: - postpend = in_upper - port_upper - self.postpend_pins(port, postpend) + # to prevent unneccessary pins being added, check to see if port + # width is already correct + if (in_upper-in_lower) == (port_upper-port_lower): + None + else: + if in_lower < port_lower: + prepend = port_lower - in_lower + self.prepend_pins(port, prepend) + if in_upper > port_upper: + postpend = in_upper - port_upper + self.postpend_pins(port, postpend) if direction is not None: port.direction = direction From 75fe733a294388b3772c2c0ef9ac8e3693816ce5 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Wed, 9 Nov 2022 14:27:59 -0700 Subject: [PATCH 52/92] updated release notes --- RELEASE.rst | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/RELEASE.rst b/RELEASE.rst index ed4619b5..735b5204 100644 --- a/RELEASE.rst +++ b/RELEASE.rst @@ -1,3 +1,13 @@ +SpyDrNet 1.12.0 +---------------- +November 9, 2022 + +* Major improvements and fixes for the Verilog netlist parser and composer to broaden support and accuracy +* Built in primitive libraries to allow SpyDrNet to populate port directions of primitives when parsing netlist types that don't always explicitly define primitive cells (Verilog, EBLIF). An option is added to parsing to specify which primitive library to use. +* Improvements, fixes, and simplification to EBLIF netlist parser and composer +* Verilog parser and composer option to remove/add lagging space in names +* Documentation updates and improvements + SpyDrNet 1.11.1 --------------- April 20, 2022 From 4514b7b9e75dc6870a5b231fc39a80f7ac174eb2 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Thu, 10 Nov 2022 13:06:37 -0700 Subject: [PATCH 53/92] changed name_length_target to 256 --- spydrnet/composers/edif/edifify_names.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spydrnet/composers/edif/edifify_names.py b/spydrnet/composers/edif/edifify_names.py index b03422a3..16094602 100644 --- a/spydrnet/composers/edif/edifify_names.py +++ b/spydrnet/composers/edif/edifify_names.py @@ -63,7 +63,7 @@ class EdififyNames: def __init__(self): self.valid = set() self.non_alpha = set() - self.name_length_target = 100 + self.name_length_target = 256 def _length_good(self, identifier): """returns a boolean indicating whether or not the indentifier fits the 256 character limit""" From 456f44c2e3b6e5166812ae40e27951f7178ba339 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Thu, 10 Nov 2022 13:07:00 -0700 Subject: [PATCH 54/92] fixed typo --- spydrnet/composers/edif/composer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spydrnet/composers/edif/composer.py b/spydrnet/composers/edif/composer.py index 9ba73a2f..da21de88 100644 --- a/spydrnet/composers/edif/composer.py +++ b/spydrnet/composers/edif/composer.py @@ -129,7 +129,7 @@ def iterate(o): def _add_rename_property(self, obj, namespace_list, rename_helper): if obj.name is None: - raise Exception('obj, ', obj, '.name undifined') + raise Exception('obj, ', obj, '.name undefined') name = obj.name if "EDIF.identifier" in obj.data: return From 7a0b7b6bef4c7c920c8eebac1c169ea57f07930c Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 18 Nov 2022 11:17:53 -0700 Subject: [PATCH 55/92] edit to doing a release notes --- docs/source/developer/contribute.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/source/developer/contribute.rst b/docs/source/developer/contribute.rst index 7aa0a634..fe6c66ff 100644 --- a/docs/source/developer/contribute.rst +++ b/docs/source/developer/contribute.rst @@ -8,14 +8,14 @@ This section aims to help you do a spydrnet release, meaning you make the latest 1. Merge each contributors' branches into one branch (the 'next_release' branch) 2. run `git merge master` while the next-release branch is checked out. -3. :ref:`update_release_notes` +3. :ref:`update_release_notes` (remember to commit and push afterwards). 4. :ref:`update_documentation` and ensure it can build properly 5. On Github, create a pull request with the updated code in the next_release branch. 6. Accept and merge the pull request when the checks have finished. 7. Move to the master branch using `git checkout master` 8. :ref:`create_and_update_tag` 9. :ref:`build_documentation` -10. :ref:`build_package` (this will update the documentation’s version number) +10. :ref:`build_package` (this will update the documentation's version number) 11. :ref:`publish_packages` 12. :ref:`github_release` 13. :ref:`publish_documentation` From 54438fe49b3eff0bea0dd8824d77fe6a8a6b799f Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 18 Nov 2022 11:20:56 -0700 Subject: [PATCH 56/92] set sphinx language to english --- docs/source/conf.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/conf.py b/docs/source/conf.py index e8f550db..ef1a04c3 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -77,7 +77,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = None +language = "English" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. From 7ea6a60699b1eeeaa6b43a7b9d3ddb4e0521976b Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Fri, 18 Nov 2022 11:24:07 -0700 Subject: [PATCH 57/92] release notes --- RELEASE.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/RELEASE.rst b/RELEASE.rst index 735b5204..6eab3319 100644 --- a/RELEASE.rst +++ b/RELEASE.rst @@ -1,3 +1,10 @@ +SpyDrNet 1.12.1 +---------------- +November 18, 2022 + +* Bug fix for names in EDIF netlists in which they were cut off if more than 100 characters long. Now the allowed number of characters in a name is 255. +* Slight additions to documentation about doing a release + SpyDrNet 1.12.0 ---------------- November 9, 2022 From b5a231c55847e6af58d2ec376792495646935a3d Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Tue, 22 Nov 2022 09:14:41 -0700 Subject: [PATCH 58/92] triggering travis checks with dummy commit --- RELEASE.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE.rst b/RELEASE.rst index 6eab3319..e40eb320 100644 --- a/RELEASE.rst +++ b/RELEASE.rst @@ -3,7 +3,7 @@ SpyDrNet 1.12.1 November 18, 2022 * Bug fix for names in EDIF netlists in which they were cut off if more than 100 characters long. Now the allowed number of characters in a name is 255. -* Slight additions to documentation about doing a release +* Slight additions to documentation about doing a release SpyDrNet 1.12.0 ---------------- From 23cc34099dc617fe4f52edd05a43bcd346d1a9f9 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Sat, 10 Dec 2022 11:26:41 -0700 Subject: [PATCH 59/92] minor bug fix in eblif composer --- spydrnet/composers/eblif/eblif_composer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spydrnet/composers/eblif/eblif_composer.py b/spydrnet/composers/eblif/eblif_composer.py index 69056c04..45c8abff 100644 --- a/spydrnet/composers/eblif/eblif_composer.py +++ b/spydrnet/composers/eblif/eblif_composer.py @@ -138,7 +138,7 @@ def compose_subcircuits(self,list_of_subcircuits,is_gate=False): inner_pin_list = port.pins for pin in subckt.get_pins(selection=Selection.OUTSIDE,filter=lambda x: x.inner_pin.port is port): if (amount_of_ports_to_write > 5): - to_write+=to_add+" \\ \n" + to_write+=to_add+" \\\n" to_add = "" if len(inner_pin_list) > 1: index = inner_pin_list.index(pin.inner_pin) @@ -225,8 +225,8 @@ def find_and_write_additional_instance_info(self,instance): def compose_blackboxes(self): primitive_library = next(self.netlist.get_libraries("hdi_primitives")) for definition in primitive_library.definitions: - if definition in self.blackboxes_to_compose: - to_write = ".model "+definition.name + if definition in self.blackboxes_to_compose and "logic-gate" not in definition.name: # only compose blackboxes that are not .names + to_write = ".model " + definition.name to_write+="\n.inputs" for port in definition.get_ports(filter=lambda x: x.direction is sdn.IN): to_write+=" "+port.name From 799d97621bd8b7e01f3390af24adc47043a06f7d Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Tue, 10 Jan 2023 09:38:40 -0700 Subject: [PATCH 60/92] updated github actions to try to fix it --- .github/workflows/pytest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index c196994c..2269f897 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -17,7 +17,7 @@ jobs: steps: - uses: actions/checkout@master - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Run Pytest for SpyDrNet From ad2211d2e0a11ecbf4d777f3e7788b9eb1ddadfe Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Tue, 10 Jan 2023 09:40:10 -0700 Subject: [PATCH 61/92] updated github actions to try to fix it again --- .github/workflows/pytest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 2269f897..8f5030b9 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -17,7 +17,7 @@ jobs: steps: - uses: actions/checkout@master - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v3 + uses: actions/setup-python@v4 with: python-version: ${{ matrix.python-version }} - name: Run Pytest for SpyDrNet From acf8a9c94244849436f1c06a500d4729477a9a98 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Tue, 10 Jan 2023 09:41:49 -0700 Subject: [PATCH 62/92] updated github actions by removing python 3.6 to see if it will fix it --- .github/workflows/pytest.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 8f5030b9..279a2b29 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -9,7 +9,6 @@ jobs: strategy: matrix: python-version: - - "3.6" - "3.7" - "3.8" - "3.9" From 14abbf9f902d8f0119c2aa05708e588b22b07ad2 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Tue, 10 Jan 2023 09:44:07 -0700 Subject: [PATCH 63/92] put python 3.6 back and changed ubuntu version to 20.04 instead of latest --- .github/workflows/pytest.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml index 279a2b29..bc4e9391 100644 --- a/.github/workflows/pytest.yml +++ b/.github/workflows/pytest.yml @@ -5,10 +5,11 @@ on: [push] jobs: SpyDrNet_push: name: SpyDrNet Push - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 strategy: matrix: python-version: + - "3.6" - "3.7" - "3.8" - "3.9" From 9a8b25e63ef8714bfcd281fc7c72ef46aa5becc3 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Thu, 2 Feb 2023 12:27:17 -0700 Subject: [PATCH 64/92] updated release notes and removed travis ci --- .travis.yml | 12 ------------ RELEASE.rst | 3 ++- 2 files changed, 2 insertions(+), 13 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index ce7ec45c..00000000 --- a/.travis.yml +++ /dev/null @@ -1,12 +0,0 @@ - -language: python -python: - - "3.6" - - "3.7" - - "3.8" - - "nightly" - - "3.9" -install: - - pip install ply -script: - - pytest \ No newline at end of file diff --git a/RELEASE.rst b/RELEASE.rst index e40eb320..3e50d70c 100644 --- a/RELEASE.rst +++ b/RELEASE.rst @@ -1,9 +1,10 @@ SpyDrNet 1.12.1 ---------------- -November 18, 2022 +February 2, 2023 * Bug fix for names in EDIF netlists in which they were cut off if more than 100 characters long. Now the allowed number of characters in a name is 255. * Slight additions to documentation about doing a release +* Removing Travis CI (from now on only Github Actions will do automated testing) SpyDrNet 1.12.0 ---------------- From f38c7830652681b7b8ecc4bcc0a4c7b52b8de430 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Thu, 2 Feb 2023 16:20:11 -0700 Subject: [PATCH 65/92] fixed bug where architecture libraries are not included in .whl python package --- setup.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/setup.py b/setup.py index a5420ec3..5911353e 100644 --- a/setup.py +++ b/setup.py @@ -24,12 +24,13 @@ with open("README.rst", "r") as fh: long_description = fh.read().replace(':ref:','') -example_edif_files = list() +support_files = list() folder_path = os.path.normpath(os.path.join(os.path.dirname(__file__), "spydrnet", "support_files")) for filename in glob.glob(os.path.join(folder_path, "**", "*"), recursive=True): - if os.path.isfile(filename) and os.path.getsize(filename) < 1024 * 10: - example_edif_files.append("support_files/" + str(filename)[len(folder_path) + 1:].replace('\\', '/')) - + if os.path.isfile(filename) and \ + (os.path.getsize(filename) < 1024 * 10 or "architecture_libraries" in filename): + support_files.append("support_files/" + str(filename)[len(folder_path) + 1:].replace('\\', '/')) + extras_require = { "all": [ "pytest", @@ -56,7 +57,7 @@ url=release.url, project_urls=release.project_urls, classifiers=release.classifiers, - package_data={ 'spydrnet': ['VERSION'] + example_edif_files}, + package_data={ 'spydrnet': ['VERSION'] + support_files}, packages=setuptools.find_packages(), extras_require=extras_require, python_requires='>=3.6', From 6b22a6325c12205a73e268a7e51437f28daf7792 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Thu, 2 Feb 2023 16:50:11 -0700 Subject: [PATCH 66/92] updated release notes --- RELEASE.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/RELEASE.rst b/RELEASE.rst index 3e50d70c..7258528b 100644 --- a/RELEASE.rst +++ b/RELEASE.rst @@ -5,6 +5,7 @@ February 2, 2023 * Bug fix for names in EDIF netlists in which they were cut off if more than 100 characters long. Now the allowed number of characters in a name is 255. * Slight additions to documentation about doing a release * Removing Travis CI (from now on only Github Actions will do automated testing) +* Fixed bug where architecture liraries were not included in the release SpyDrNet 1.12.0 ---------------- From 83c4c2b15e5b2247f5226f38911c907eb1ad1b45 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Thu, 9 Feb 2023 09:44:30 -0700 Subject: [PATCH 67/92] updated release instructions --- docs/source/developer/contribute.rst | 38 ++++++++++++++-------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/source/developer/contribute.rst b/docs/source/developer/contribute.rst index fe6c66ff..8be9e0d2 100644 --- a/docs/source/developer/contribute.rst +++ b/docs/source/developer/contribute.rst @@ -14,8 +14,8 @@ This section aims to help you do a spydrnet release, meaning you make the latest 6. Accept and merge the pull request when the checks have finished. 7. Move to the master branch using `git checkout master` 8. :ref:`create_and_update_tag` -9. :ref:`build_documentation` -10. :ref:`build_package` (this will update the documentation's version number) +9. :ref:`build_package` (this will update the documentation's version number) +10. :ref:`build_documentation` 11. :ref:`publish_packages` 12. :ref:`github_release` 13. :ref:`publish_documentation` @@ -90,23 +90,6 @@ If you mess up, you can use the following instructions to force update your tag >>> git push --tags -f -.. _build_documentation: - -Build the Documentation ------------------------- - -Make sure you are in the docs directory - ->>> cd docs - -then run the following: - ->>> make clean ->>> make latexpdf ->>> make html - -Make sure that each one executes without errors. Try to minimize warnings as well, although the most important thing is that the documentation looks the way you want it to. - .. _build_package: Build the Python Package @@ -130,6 +113,23 @@ The build files will be stored in the following directories spydrnet/build and spydrnet/dist +.. _build_documentation: + +Build the Documentation +------------------------ + +Make sure you are in the docs directory + +>>> cd docs + +then run the following: + +>>> make clean +>>> make latexpdf +>>> make html + +Make sure that each one executes without errors. Try to minimize warnings as well, although the most important thing is that the documentation looks the way you want it to. + .. _publish_packages: Publish the Packages to Pypi From beba2ee34dcc526fa2cd9d49a5400fe846e6b247 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Mon, 13 Feb 2023 14:29:28 -0700 Subject: [PATCH 68/92] pathlib.path parse fix --- spydrnet/parsers/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 77f4c1ec..48eca9ef 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -38,6 +38,7 @@ def parse(filename): basename_less_final_extension = os.path.splitext( os.path.basename(filename))[0] extension = get_lowercase_extension(filename) + filename = basename_less_final_extension + extension if extension == ".zip": assert zipfile.is_zipfile(filename), \ "Input filename {} with extension .zip is not a zip file.".format( From 98c8bfc24e7c2401ec20cc3e887e2098840a5f26 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Mon, 13 Feb 2023 14:38:50 -0700 Subject: [PATCH 69/92] trying to pass tests --- spydrnet/parsers/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 9615c493..86dfff97 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -38,7 +38,7 @@ def parse(filename, architecture=None, remove_space=False): basename_less_final_extension = os.path.splitext( os.path.basename(filename))[0] extension = get_lowercase_extension(filename) - filename = basename_less_final_extension + extension + if extension == ".zip": assert zipfile.is_zipfile(filename), \ "Input filename {} with extension .zip is not a zip file.".format( @@ -52,6 +52,7 @@ def parse(filename, architecture=None, remove_space=False): filename = os.path.join( tempdirname, basename_less_final_extension) return _parse(filename) + filename = basename_less_final_extension + extension return _parse(filename, architecture, remove_space) From 9ba04398e16020b4462025101aae9391c4b8db4e Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Tue, 14 Feb 2023 09:54:25 -0700 Subject: [PATCH 70/92] trying to pass tests --- spydrnet/parsers/__init__.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 86dfff97..992ebe58 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -35,10 +35,10 @@ def parse(filename, architecture=None, remove_space=False): The same applies for EBLIF files """ + filename = os.path.splitext(os.path.basename(filename))[0] + os.path.splitext(os.path.basename(filename))[1] basename_less_final_extension = os.path.splitext( os.path.basename(filename))[0] extension = get_lowercase_extension(filename) - if extension == ".zip": assert zipfile.is_zipfile(filename), \ "Input filename {} with extension .zip is not a zip file.".format( @@ -52,7 +52,9 @@ def parse(filename, architecture=None, remove_space=False): filename = os.path.join( tempdirname, basename_less_final_extension) return _parse(filename) - filename = basename_less_final_extension + extension + # print("INIT BEFORE",filename) + # filename = basename_less_final_extension + extension + print("INIT FILE",filename) return _parse(filename, architecture, remove_space) From 0e2dc83c6912edcaa68232bf8c3dc7ae48846e57 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Tue, 14 Feb 2023 10:08:51 -0700 Subject: [PATCH 71/92] resetting file to original --- spydrnet/parsers/__init__.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 992ebe58..b6820c30 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -35,7 +35,6 @@ def parse(filename, architecture=None, remove_space=False): The same applies for EBLIF files """ - filename = os.path.splitext(os.path.basename(filename))[0] + os.path.splitext(os.path.basename(filename))[1] basename_less_final_extension = os.path.splitext( os.path.basename(filename))[0] extension = get_lowercase_extension(filename) @@ -52,9 +51,7 @@ def parse(filename, architecture=None, remove_space=False): filename = os.path.join( tempdirname, basename_less_final_extension) return _parse(filename) - # print("INIT BEFORE",filename) - # filename = basename_less_final_extension + extension - print("INIT FILE",filename) + return _parse(filename, architecture, remove_space) From 2e4e2f014c5ba2c4cc17cdaf214dd95d2b65ae3c Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Tue, 14 Feb 2023 10:10:48 -0700 Subject: [PATCH 72/92] trying to pass tests --- spydrnet/parsers/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index b6820c30..5546f99f 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -35,6 +35,7 @@ def parse(filename, architecture=None, remove_space=False): The same applies for EBLIF files """ + filename = os.path.splitext(os.path.basename(filename))[0] + os.path.splitext(os.path.basename(filename))[1] basename_less_final_extension = os.path.splitext( os.path.basename(filename))[0] extension = get_lowercase_extension(filename) @@ -51,7 +52,6 @@ def parse(filename, architecture=None, remove_space=False): filename = os.path.join( tempdirname, basename_less_final_extension) return _parse(filename) - return _parse(filename, architecture, remove_space) From abc28601838f6dab1ed154eb764675ef9e7d8be2 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Tue, 14 Feb 2023 11:05:43 -0700 Subject: [PATCH 73/92] working on pathlib bug --- spydrnet/parsers/__init__.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 5546f99f..c4311606 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -35,10 +35,14 @@ def parse(filename, architecture=None, remove_space=False): The same applies for EBLIF files """ - filename = os.path.splitext(os.path.basename(filename))[0] + os.path.splitext(os.path.basename(filename))[1] + basename_less_final_extension = os.path.splitext( os.path.basename(filename))[0] extension = get_lowercase_extension(filename) + # filename = os.path.basename(filename) + print('FILENAME ',filename) + print('BASENAME ',basename_less_final_extension) + print('EXTENSION',extension) if extension == ".zip": assert zipfile.is_zipfile(filename), \ "Input filename {} with extension .zip is not a zip file.".format( @@ -51,11 +55,14 @@ def parse(filename, architecture=None, remove_space=False): zip.extract(basename_less_final_extension, tempdirname) filename = os.path.join( tempdirname, basename_less_final_extension) - return _parse(filename) + return _parse(filename, architecture, remove_space) + filename = os.path.basename(filename) + print("FINAL",filename) return _parse(filename, architecture, remove_space) def _parse(filename, architecture=None, remove_space=False): + print("PARSING") extension = get_lowercase_extension(filename) if extension in [".edf", ".edif", ".edn"]: from spydrnet.parsers.edif.parser import EdifParser From dad8359e039fbf66d88bb0a66b56897635345025 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Tue, 14 Feb 2023 11:13:35 -0700 Subject: [PATCH 74/92] committing changes --- spydrnet/parsers/__init__.py | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index c4311606..d5701b91 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -35,14 +35,9 @@ def parse(filename, architecture=None, remove_space=False): The same applies for EBLIF files """ - basename_less_final_extension = os.path.splitext( os.path.basename(filename))[0] extension = get_lowercase_extension(filename) - # filename = os.path.basename(filename) - print('FILENAME ',filename) - print('BASENAME ',basename_less_final_extension) - print('EXTENSION',extension) if extension == ".zip": assert zipfile.is_zipfile(filename), \ "Input filename {} with extension .zip is not a zip file.".format( @@ -55,10 +50,31 @@ def parse(filename, architecture=None, remove_space=False): zip.extract(basename_less_final_extension, tempdirname) filename = os.path.join( tempdirname, basename_less_final_extension) - return _parse(filename, architecture, remove_space) - filename = os.path.basename(filename) - print("FINAL",filename) + return _parse(filename) return _parse(filename, architecture, remove_space) + # basename_less_final_extension = os.path.splitext( + # os.path.basename(filename))[0] + # extension = get_lowercase_extension(filename) + # # filename = os.path.basename(filename) + # print('FILENAME ',filename) + # print('BASENAME ',basename_less_final_extension) + # print('EXTENSION',extension) + # if extension == ".zip": + # assert zipfile.is_zipfile(filename), \ + # "Input filename {} with extension .zip is not a zip file.".format( + # basename_less_final_extension) + # with tempfile.TemporaryDirectory() as tempdirname: + # with zipfile.ZipFile(filename) as zip: + # files = zip.namelist() + # assert len(files) == 1 and files[0] == basename_less_final_extension, \ + # "Only single file archives allowed with a file whose name matches the name of the archive" + # zip.extract(basename_less_final_extension, tempdirname) + # filename = os.path.join( + # tempdirname, basename_less_final_extension) + # return _parse(filename, architecture, remove_space) + # filename = os.path.basename(filename) + # print("FINAL",filename) + # return _parse(filename, architecture, remove_space) def _parse(filename, architecture=None, remove_space=False): From 5652ef606c439edbf95fc51fa62192d87bf57d55 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Fri, 10 Mar 2023 09:32:23 -0700 Subject: [PATCH 75/92] pathlib parsing fix --- spydrnet/parsers/__init__.py | 43 +++++++++--------------------------- 1 file changed, 11 insertions(+), 32 deletions(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index d5701b91..83e5cbcf 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -8,7 +8,7 @@ """ -def parse(filename, architecture=None, remove_space=False): +def parse(filename, architecture=None, remove_space=False, path_used=False): """ The parse function is able to parse an EDIF (.edf) file, a Verilog file (.v), or an EBLIF file (.eblif). @@ -37,7 +37,7 @@ def parse(filename, architecture=None, remove_space=False): """ basename_less_final_extension = os.path.splitext( os.path.basename(filename))[0] - extension = get_lowercase_extension(filename) + extension = get_lowercase_extension(filename) if extension == ".zip": assert zipfile.is_zipfile(filename), \ "Input filename {} with extension .zip is not a zip file.".format( @@ -50,35 +50,14 @@ def parse(filename, architecture=None, remove_space=False): zip.extract(basename_less_final_extension, tempdirname) filename = os.path.join( tempdirname, basename_less_final_extension) - return _parse(filename) - return _parse(filename, architecture, remove_space) - # basename_less_final_extension = os.path.splitext( - # os.path.basename(filename))[0] - # extension = get_lowercase_extension(filename) - # # filename = os.path.basename(filename) - # print('FILENAME ',filename) - # print('BASENAME ',basename_less_final_extension) - # print('EXTENSION',extension) - # if extension == ".zip": - # assert zipfile.is_zipfile(filename), \ - # "Input filename {} with extension .zip is not a zip file.".format( - # basename_less_final_extension) - # with tempfile.TemporaryDirectory() as tempdirname: - # with zipfile.ZipFile(filename) as zip: - # files = zip.namelist() - # assert len(files) == 1 and files[0] == basename_less_final_extension, \ - # "Only single file archives allowed with a file whose name matches the name of the archive" - # zip.extract(basename_less_final_extension, tempdirname) - # filename = os.path.join( - # tempdirname, basename_less_final_extension) - # return _parse(filename, architecture, remove_space) - # filename = os.path.basename(filename) - # print("FINAL",filename) - # return _parse(filename, architecture, remove_space) - - -def _parse(filename, architecture=None, remove_space=False): - print("PARSING") + return _parse(filename, architecture, remove_space) + + return _parse(filename, architecture, remove_space) + + +def _parse(filename, architecture=None, remove_space=False, path_used=False): + if (path_used): + filename = os.path.basename(filename) extension = get_lowercase_extension(filename) if extension in [".edf", ".edif", ".edn"]: from spydrnet.parsers.edif.parser import EdifParser @@ -91,7 +70,7 @@ def _parse(filename, architecture=None, remove_space=False): parser = EBLIFParser.from_filename(filename) else: raise RuntimeError("Extension {} not recognized.".format(extension)) - parser.parse() + parser.parse() if remove_space: from spydrnet.util.remove_space import removing_space From 03d169baa802c0967c335e55cad5707700a6708b Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Mon, 13 Mar 2023 09:17:24 -0600 Subject: [PATCH 76/92] updated pathlib fix --- spydrnet/parsers/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 83e5cbcf..868e0aef 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -50,9 +50,9 @@ def parse(filename, architecture=None, remove_space=False, path_used=False): zip.extract(basename_less_final_extension, tempdirname) filename = os.path.join( tempdirname, basename_less_final_extension) - return _parse(filename, architecture, remove_space) + return _parse(filename, architecture, remove_space, path_used) - return _parse(filename, architecture, remove_space) + return _parse(filename, architecture, remove_space, path_used) def _parse(filename, architecture=None, remove_space=False, path_used=False): From 1c60603a2507433ba1f63bbeb629f18c84badae3 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Tue, 14 Mar 2023 11:08:07 -0600 Subject: [PATCH 77/92] adding a getting started doc for spydrnet --- docs/source/index.rst | 2 +- docs/source/tutorial/index.rst | 10 +++ docs/source/tutorial/start.rst | 98 +++++++++++++++++++++++++ docs/source/{ => tutorial}/tutorial.rst | 12 +-- 4 files changed, 115 insertions(+), 7 deletions(-) create mode 100644 docs/source/tutorial/index.rst create mode 100644 docs/source/tutorial/start.rst rename docs/source/{ => tutorial}/tutorial.rst (98%) diff --git a/docs/source/index.rst b/docs/source/index.rst index fc2cc822..ecdd4824 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -12,7 +12,7 @@ :maxdepth: 2 install - tutorial + tutorial/index reference/index auto_examples/index developer/index diff --git a/docs/source/tutorial/index.rst b/docs/source/tutorial/index.rst new file mode 100644 index 00000000..d84314ce --- /dev/null +++ b/docs/source/tutorial/index.rst @@ -0,0 +1,10 @@ +.. _tutorial: + +Tutorial +******** + +.. toctree:: + :maxdepth: 1 + + tutorial + start \ No newline at end of file diff --git a/docs/source/tutorial/start.rst b/docs/source/tutorial/start.rst new file mode 100644 index 00000000..c5681d5a --- /dev/null +++ b/docs/source/tutorial/start.rst @@ -0,0 +1,98 @@ +Getting Started with SpyDrNet +============================= + +SpyDrNet was originally built for EDF netlist, but has since been expanded to Verilog and EBLIF netlists. + +Parsing +------- + +**Default parsing arguments** + +``parse(filename, architecture=None, remove_space=False, path_used=False):`` + +filename + +- Name of the file that is being parsed + +architecture + +- Desired board architecture + +remove_space + +- Flag used for verilog netlists to insure that the triplicated primitives do not have a space in the middle of their name + +path_used + +- Flag that allows for the use of pathlib.Path to find files not in current directory + + +**General structure** + +``netlist = sdn.parse(filename, ...)`` + +**Basic structure for Verilog netlist** + +``netlist = sdn.parse("filename.v", architecture=XILINX_7SERIES, remove_space=True)`` + +**Basic structure for EDF netlists** + +``netlist = sdn.parse("filename.edf")`` + +*edf usually only needs the filename and not the other arguments* + + + +Composing +---------- + +**Default composing arguments** + +``compose(netlist, filename, voters=[], definition_list=[], write_blackbox=True, write_eblif_cname=True, defparam=False, reinsert_space=False):`` + +netlist + +- Netlist that was parsed in / replicated / changed + +filename + +- Desired output name of netlist + +voters + +- List of voters that was created in script *this is only needed for verilog netlists* + +definition_list + +- List of definitions to write + +write_blackbox + +- Flag that skips writing black boxes/verilog primitives + +write_eblif_cname + +- Flag + +defparam + +- Flag that composes parameters in *defparam* statements instead of using #() + +reinsert_space + +- Flag to If remove_space was used in the parser (for verilog netlists) reinsert_space needs to be used to allow the primitves to have the correct syntax for Vivado + +**General structure** + +``netlist.compose(filename, ...)`` + +**Basic structure for Verilog netlist** + +``netlist.compose("filename_tmr.v", voters, reinsert_space=True)`` + +**Basic structure for EDF netlists** + +``netlist.compose("filename_tmr.edf")`` + +*edf usually only needs the filename and not the other arguments* + diff --git a/docs/source/tutorial.rst b/docs/source/tutorial/tutorial.rst similarity index 98% rename from docs/source/tutorial.rst rename to docs/source/tutorial/tutorial.rst index 75f795ff..dc6afdc5 100644 --- a/docs/source/tutorial.rst +++ b/docs/source/tutorial/tutorial.rst @@ -1,10 +1,10 @@ -Tutorial -============ +Overview +======== SpyDrNet is a tool for the analysis and transformation of structural netlists. A structural netlist is a static representation of an electronic circuit. A circuit consists of a number of electrical components and their connections. Figure :numref:`fig:hierarchical_netlist` shows a graphical representation of a netlist. .. _fig:hierarchical_netlist: -.. figure:: figures/hierarchical_netlist.* +.. figure:: ../figures/hierarchical_netlist.* :align: center Hierarchical representation of a Netlist @@ -24,7 +24,7 @@ This flow is inspired by `LLVM`_ and `Pandoc`_. LLVM has a similar flow for comp .. _Pandoc: https://pandoc.org/ .. _fig:flow.2: -.. figure:: /figures/flow.* +.. figure:: ../figures/flow.* :align: center :alt: SpyDrNet Flow @@ -177,14 +177,14 @@ Instances: **See the following two figures to aid in understanding the SpyDrNet IR:** .. _fig:IR_2: -.. figure:: /figures/IR.* +.. figure:: ../figures/IR.* :align: center :alt: SpyDrNet Intermediate Representation Summary of the SpyDrNet IR 1 .. _fig:IR_3: -.. figure:: /figures/spydrnet_api_elements.png +.. figure:: ../figures/spydrnet_api_elements.png :align: center :alt: SpyDrNet Intermediate Representation From dda345d3898277e85b427b5e5e815360408043d8 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Thu, 30 Mar 2023 09:37:04 -0600 Subject: [PATCH 78/92] changes to docs and examples --- docs/source/tutorial/start.rst | 3 ++ examples/basic/minimal.py | 5 ++ examples/basic/test.edf | 88 ++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) create mode 100644 examples/basic/test.edf diff --git a/docs/source/tutorial/start.rst b/docs/source/tutorial/start.rst index c5681d5a..c5f905bc 100644 --- a/docs/source/tutorial/start.rst +++ b/docs/source/tutorial/start.rst @@ -3,6 +3,9 @@ Getting Started with SpyDrNet SpyDrNet was originally built for EDF netlist, but has since been expanded to Verilog and EBLIF netlists. +* Note + This guide makes references to SpyDrNet TMR + Parsing ------- diff --git a/examples/basic/minimal.py b/examples/basic/minimal.py index 3b5a074f..fa43f24b 100644 --- a/examples/basic/minimal.py +++ b/examples/basic/minimal.py @@ -91,4 +91,9 @@ wire_o.connect_pin(pin_widget_o) wire_o.connect_pin(inst_or2.pins[pin_or2_q]) +temp = next(netlist.libraries[0].get_instances("and2_1"),None) +print("Instance:",temp.name) +print("Reference:",temp.reference.name) +print("Parent:",temp.parent.name) + sdn.compose(netlist, 'test.edf') \ No newline at end of file diff --git a/examples/basic/test.edf b/examples/basic/test.edf new file mode 100644 index 00000000..24b51d04 --- /dev/null +++ b/examples/basic/test.edf @@ -0,0 +1,88 @@ +(edif netlist + (edifversion 2 0 0) + (edifLevel 0) + (keywordmap (keywordlevel 0)) + (status + (written + (timeStamp 2023 03 21 11 11 58) + + (comment "Built by 'BYU spydrnet tool'") + ) + ) + (Library work + (edifLevel 0) + (technology (numberDefinition )) + (Cell AND2 (celltype GENERIC) + (view netlist (viewtype NETLIST) + (interface + (port A(direction INPUT)) + (port B(direction INPUT)) + (port Q(direction OUTPUT)) + ) + ) + ) + (Cell OR2 (celltype GENERIC) + (view netlist (viewtype NETLIST) + (interface + (port A(direction INPUT)) + (port B(direction INPUT)) + (port Q(direction OUTPUT)) + ) + ) + ) + (Cell widget (celltype GENERIC) + (view netlist (viewtype NETLIST) + (interface + (port A(direction INPUT)) + (port B(direction INPUT)) + (port C(direction INPUT)) + (port D(direction INPUT)) + (port O(direction OUTPUT)) + ) + (contents + (instance and2_1 (viewref netlist (cellref AND2(libraryref work))) + )(instance and2_2 (viewref netlist (cellref AND2(libraryref work))) + )(instance or2 (viewref netlist (cellref OR2(libraryref work))) + )(net A (joined + (portref A) + (portref A (instanceref and2_1)) + + ) + )(net B (joined + (portref B) + (portref B (instanceref and2_1)) + + ) + )(net C (joined + (portref C) + (portref A (instanceref and2_2)) + + ) + )(net D (joined + (portref D) + (portref B (instanceref and2_2)) + + ) + )(net Q1 (joined + (portref Q (instanceref and2_1)) + (portref A (instanceref or2)) + + ) + )(net Q2 (joined + (portref Q (instanceref and2_2)) + (portref B (instanceref or2)) + + ) + )(net O (joined + (portref O) + (portref Q (instanceref or2)) + + ) + )) + ) + ) + ) + (design widget + (cellref widget(libraryref work)) + ) + ) \ No newline at end of file From 25563452bb5fa34c649223eae4297ec83e9fc492 Mon Sep 17 00:00:00 2001 From: Adam Gastineau Date: Sat, 1 Apr 2023 11:15:20 -0700 Subject: [PATCH 79/92] Fixed Verilog parser not properly handling empty instance port list --- spydrnet/parsers/verilog/parser.py | 8 ++++ .../verilog/tests/test_verilogParser.py | 38 ++++++++++++++++++- 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index ffd32c7b..aa593b2a 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -905,6 +905,14 @@ def connect_implicitly_mapped_ports(self): vt.OPEN_PARENTHESIS, "to encapsulate cable name in port mapping", token) index = 0 + + # There may be no mapped wires at all. It may be empty or filled with whitespace + token = self.peek_token() + + if token == vt.CLOSE_PARENTHESIS: + # Consume the token, we're going to skip the loop + token = self.next_token() + while (token != vt.CLOSE_PARENTHESIS): token = self.peek_token() diff --git a/spydrnet/parsers/verilog/tests/test_verilogParser.py b/spydrnet/parsers/verilog/tests/test_verilogParser.py index 9f7c30fe..e9507bcf 100644 --- a/spydrnet/parsers/verilog/tests/test_verilogParser.py +++ b/spydrnet/parsers/verilog/tests/test_verilogParser.py @@ -835,7 +835,7 @@ def test_parse_implicitly_mapped_ports(self): instance = next(netlist.get_instances("my_inst")) self.assertEqual(instance.name, "my_inst") connections = ["clk_c", "VCC_net", "out"] - for i in range(0,2): + for i in range(0,3): port = next(instance.get_ports("port_"+str(i))) self.assertEqual(len(port.pins), 1) for pin in port.get_pins(selection=Selection.OUTSIDE): @@ -843,6 +843,42 @@ def test_parse_implicitly_mapped_ports(self): os.remove("test_netlist.v") + def test_parse_empty_mapped_ports(self): + # create dummy netlist + to_write = "module top (input clk, output out);\n" + to_write += "\tINST my_inst ();\n" + to_write += "\tINST my_whitespace_inst ( );\n" + to_write += "endmodule\n\n" + to_write += "module INST (input port_0, input port_1, output port_2);\n" + to_write += "endmodule" + f = open("test_netlist.v", "x") + f.write(to_write) + f.close() + + parser = VerilogParser.from_filename("test_netlist.v") + parser.parse() + netlist = parser.netlist + + # my_inst has nothing attached + instance = next(netlist.get_instances("my_inst")) + self.assertEqual(instance.name, "my_inst") + for i in range(0,3): + port = next(instance.get_ports("port_"+str(i))) + self.assertEqual(len(port.pins), 1) + for pin in port.get_pins(selection=Selection.OUTSIDE): + self.assertEqual(pin.wire, None) + + # my_whitespace_inst has nothing attached and doesn't immediately have a closing paren + instance = next(netlist.get_instances("my_whitespace_inst")) + self.assertEqual(instance.name, "my_whitespace_inst") + for i in range(0,3): + port = next(instance.get_ports("port_"+str(i))) + self.assertEqual(len(port.pins), 1) + for pin in port.get_pins(selection=Selection.OUTSIDE): + self.assertEqual(pin.wire, None) + + os.remove("test_netlist.v") + ############################################################################ ##Port creation and modification ############################################################################ From 13489f370f14b9beaf3d7706c02d707d987448c1 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Wed, 5 Apr 2023 11:19:28 -0600 Subject: [PATCH 80/92] fix and test for connecting partially connected ports on lower end of the port --- spydrnet/parsers/verilog/parser.py | 14 ++++- .../verilog/tests/test_verilogParser.py | 54 +++++++++++++++++++ 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index ffd32c7b..326fa4f0 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -874,8 +874,13 @@ def parse_port_map_single(self): # there can be unconnected pins at the end of the port. pins.sort(reverse=True, key=self.pin_sort_func) + # the offset makes sure connections are on lower + # end of the port for partially connected ports + offset = 0 + if len(pins) > len(wires): + offset = len(pins)-len(wires) for i in range(len(wires)): - wires[i].connect_pin(pins[i]) + wires[i].connect_pin(pins[offset + i]) token = self.next_token() @@ -932,8 +937,13 @@ def connect_implicitly_mapped_ports(self): # there can be unconnected pins at the end of the port. pin_list = list(p for p in pins) pin_list.sort(reverse=True, key=self.pin_sort_func) + # the offset makes sure connections are on lower + # end of the port for partially connected ports + offset = 0 + if len(pins) > len(wires): + offset = len(pins)-len(wires) for i in range(len(wires)): - wires[i].connect_pin(pin_list[i]) + wires[i].connect_pin(pins[offset + i]) token = self.next_token() index += 1 diff --git a/spydrnet/parsers/verilog/tests/test_verilogParser.py b/spydrnet/parsers/verilog/tests/test_verilogParser.py index 9f7c30fe..e7c2aafc 100644 --- a/spydrnet/parsers/verilog/tests/test_verilogParser.py +++ b/spydrnet/parsers/verilog/tests/test_verilogParser.py @@ -1305,6 +1305,60 @@ def test_hierarchy_fixing(self): os.remove("test_netlist.v") + ################################################# + ## Other tests + ################################################# + + def test_partially_connected_ports(self): + # make sure partially connected ports connect pins on lower end of the port + # create a little netlist to use + to_write = "module top (input clk, output out);\n" + to_write += "\twire [6:0]count_cry, count_cry_2;\n" + to_write += "\twire [7:0] count_s, count_qxu;\n" + to_write += "\twire[7:0] count_s_2, count_qxu_2;\n" + to_write += "\twire [3:0] b;\n" + to_write += "\twire lopt_1, GND;\n" + to_write += "\n" + to_write += "\tCARRY4 carry_part_connected\n" + to_write += "\t(\n" + to_write += "\t\t.CI(count_cry[3]),\n" + to_write += "\t\t.CO(count_cry[6:4]),\n" + to_write += "\t\t.CYINIT(lopt_1),\n" + to_write += "\t\t.DI({GND, GND, GND}),\n" + to_write += "\t\t.O(count_s[7:4]),\n" + to_write += "\t\t.S(count_qxu[7:4])\n" + to_write += "\t);\n" + to_write += "\t\n" + to_write += "\tCARRY4 carry_full_connected\n" + to_write += "\t(\n" + to_write += "\t\t.CI(count_cry_2[3]),\n" + to_write += "\t\t.CO(count_cry_2[6:2]),\n" + to_write += "\t\t.CYINIT(lopt_1),\n" + to_write += "\t\t.DI({GND,GND, GND, GND}),\n" + to_write += "\t\t.O(count_s_2[7:4]),\n" + to_write += "\t\t.S(count_qxu_2[7:4])\n" + to_write += "\t);\n" + to_write += "endmodule\n" + f = open("test_netlist.v", "x") + f.write(to_write) + f.close() + + parser = VerilogParser.from_filename("test_netlist.v") + parser.parse() + netlist = parser.netlist + netlist = sdn.parse("test_netlist.v") + for inst in netlist.get_instances(): + for port in inst.get_ports(): + pins = list(p for p in port.get_pins(selection=Selection.OUTSIDE, filter=lambda x: x.instance==inst)) + pins.reverse() + if not all(p.wire for p in pins) and any(p.wire for p in pins): + wires = list(p.wire for p in pins if p.wire) + for i in range(len(wires)): + assert pins[i].wire, "The wire is " + str(pins[i].wire + " but should be connected") + for i in range(len(pins)-len(wires)): + assert pins[len(wires)+i].wire is None, "The wire is " + str(pins[i].wire + " but should NOT be connected") + + os.remove("test_netlist.v") ############################################ ##test helpers From 1a913756b9529af7d234010db583498b16fc86d7 Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Thu, 6 Apr 2023 22:25:18 -0600 Subject: [PATCH 81/92] minor fix to verilog parser fix (see recent fix) and added instance comparison lt() --- spydrnet/ir/instance.py | 3 +++ spydrnet/parsers/verilog/parser.py | 6 +++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/spydrnet/ir/instance.py b/spydrnet/ir/instance.py index 50f0255b..e3b36ac9 100644 --- a/spydrnet/ir/instance.py +++ b/spydrnet/ir/instance.py @@ -219,6 +219,9 @@ def __str__(self): rep += '>' return rep + def __lt__(self, other): + return self.name < other.name + @property def is_top_instance(self): return self._is_top_instance diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index b9d5160b..d9b2fe58 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -948,10 +948,10 @@ def connect_implicitly_mapped_ports(self): # the offset makes sure connections are on lower # end of the port for partially connected ports offset = 0 - if len(pins) > len(wires): - offset = len(pins)-len(wires) + if len(pin_list) > len(wires): + offset = len(pin_list)-len(wires) for i in range(len(wires)): - wires[i].connect_pin(pins[offset + i]) + wires[i].connect_pin(pin_list[offset + i]) token = self.next_token() index += 1 From 0f55982d4a900eb791b1b811a8160d2d09a958cf Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Tue, 11 Apr 2023 09:34:33 -0600 Subject: [PATCH 82/92] work on pathlib support --- spydrnet/parsers/edif/tokenizer.py | 3 +++ spydrnet/parsers/verilog/tokenizer.py | 3 +++ 2 files changed, 6 insertions(+) diff --git a/spydrnet/parsers/edif/tokenizer.py b/spydrnet/parsers/edif/tokenizer.py index e48e9f2c..5c0671d6 100644 --- a/spydrnet/parsers/edif/tokenizer.py +++ b/spydrnet/parsers/edif/tokenizer.py @@ -3,6 +3,7 @@ import zipfile import io import os +import pathlib class EdifTokenizer: @@ -37,6 +38,8 @@ def __init__(self, input_source): self.input_stream = stream else: self.input_stream = open(input_source, "r") + elif isinstance(input_source, pathlib.PosixPath): + self.input_stream = open(input_source,"r") else: if isinstance(input_source, io.TextIOBase) is False: self.input_stream = io.TextIOWrapper(input_source) diff --git a/spydrnet/parsers/verilog/tokenizer.py b/spydrnet/parsers/verilog/tokenizer.py index a6d6ef31..ff2d6b31 100644 --- a/spydrnet/parsers/verilog/tokenizer.py +++ b/spydrnet/parsers/verilog/tokenizer.py @@ -8,6 +8,7 @@ import os import spydrnet.parsers.verilog.verilog_tokens as vt from spydrnet.parsers.verilog.verilog_token_factory import TokenFactory +import pathlib class VerilogTokenizer: @@ -42,6 +43,8 @@ def __init__(self, input_source): self.input_stream = stream else: self.input_stream = open(input_source, 'r') + elif isinstance(input_source, pathlib.PosixPath): + self.input_stream = open(input_source,"r") else: if isinstance(input_source, io.TextIOBase) is False: self.input_stream = io.TextIOWrapper(input_source) From 74b53fc542e9af8989c20aa2adedf00529def83c Mon Sep 17 00:00:00 2001 From: Jacob Brown Date: Tue, 11 Apr 2023 10:17:32 -0600 Subject: [PATCH 83/92] updated verilog parser, composer, and tests to remove space at end of instance names --- spydrnet/composers/verilog/composer.py | 20 ++++++++----- .../verilog/tests/test_composer_unit.py | 1 - spydrnet/parsers/verilog/parser.py | 30 +++++++++---------- .../verilog/tests/test_verilogParser.py | 12 ++++---- 4 files changed, 34 insertions(+), 29 deletions(-) diff --git a/spydrnet/composers/verilog/composer.py b/spydrnet/composers/verilog/composer.py index 55406c6a..69f48fe6 100644 --- a/spydrnet/composers/verilog/composer.py +++ b/spydrnet/composers/verilog/composer.py @@ -55,7 +55,7 @@ def _compose(self, netlist): def _write_header(self, netlist): self.file.write("//Generated from netlist by SpyDrNet\n") - self.file.write("//netlist name: " + netlist.name + "\n") + self.file.write("//netlist name: " + self._fix_name(netlist.name) + "\n") def _write_from_top(self, instance): #self.written = set() @@ -200,7 +200,7 @@ def _write_module_body_instance(self, instance): if "VERILOG.Parameters" in instance: for key, value in instance["VERILOG.Parameters"].items(): to_write = (self.indent_count * vt.SPACE) + vt.DEFPARAM + vt.SPACE - to_write += instance.name + vt.DOT + key + vt.EQUAL + to_write += self._fix_name(instance.name) + vt.DOT + key + vt.EQUAL to_write += value + vt.SEMI_COLON + vt.NEW_LINE self.file.write(to_write) @@ -524,11 +524,17 @@ def _write_instance_port(self, instance, port): def _write_name(self, o): '''write the name of an o. this is split out to give an error message if the name is not set In the future this could be changed to add a name to os that do not have a name set''' - assert o.name is not None, self._error_string("name of o is not set", o) - if o.name[0] == '\\': - assert o.name[-1] == ' ', self._error_string( - "the o name starts with escape and does not end with a space.", o) - self.file.write(o.name) + name = o.name + assert name is not None, self._error_string("name of o is not set", o) + name = self._fix_name(name) + self.file.write(name) + + def _fix_name(self, name): + if name[0] == '\\': + if name[-1] != " ": + name+=" " + return name + def _write_brackets_defining(self, bundle): '''write the brackets for port or cable definitions''' diff --git a/spydrnet/composers/verilog/tests/test_composer_unit.py b/spydrnet/composers/verilog/tests/test_composer_unit.py index 75a88fa0..2c808207 100644 --- a/spydrnet/composers/verilog/tests/test_composer_unit.py +++ b/spydrnet/composers/verilog/tests/test_composer_unit.py @@ -416,7 +416,6 @@ def test_write_none_name(self): o = sdn.Cable() composer._write_name(o) - @unittest.expectedFailure def test_write_invalid_name(self): composer = self.initialize_tests() o = sdn.Cable() diff --git a/spydrnet/parsers/verilog/parser.py b/spydrnet/parsers/verilog/parser.py index d9b2fe58..1983ea74 100644 --- a/spydrnet/parsers/verilog/parser.py +++ b/spydrnet/parsers/verilog/parser.py @@ -266,7 +266,7 @@ def parse_primitive(self, definition_list = [], bypass_name_check=False): if not bypass_name_check: assert vt.is_valid_identifier(token), self.error_string( "identifier", "not a valid module name", token) - name = token + name = token.strip() if definition_list: if name not in definition_list: # we don't need this primitive info @@ -311,7 +311,7 @@ def parse_module(self): token = self.next_token() assert vt.is_valid_identifier(token), self.error_string( "identifier", "not a valid module name", token) - name = token + name = token.strip() definition = self.blackbox_holder.get_blackbox(name) self.blackbox_holder.define(name) @@ -377,7 +377,7 @@ def parse_module_header_parameters(self): token = self.next_token() assert vt.is_valid_identifier(token), self.error_string( 'identifer', "in parameter list", token) - key += token + key += token.strip() token = self.next_token() if key == vt.INTEGER: @@ -440,7 +440,7 @@ def parse_module_header_port_alias(self): token = self.next_token() assert vt.is_valid_identifier(token), self.error_string( "identifier", "for port in port aliasing", token) - name = token + name = token.strip() token = self.next_token() assert token == vt.OPEN_PARENTHESIS, self.error_string( @@ -514,7 +514,7 @@ def parse_module_header_port(self): token = self.next_token() assert vt.is_valid_identifier(token), self.error_string( "identifier", "for port declaration", token) - name = token + name = token.strip() port = self.create_or_update_port( name, left_index=left, right_index=right, direction=direction, defining=defining) @@ -608,12 +608,12 @@ def parse_port_declaration(self, properties): assert vt.is_valid_identifier(token), self.error_string( "port identifier", "identify port", token) names = [] - names.append(token) + names.append(token.strip()) token = self.next_token() while token == vt.COMMA: token = self.next_token() - names.append(token) + names.append(token.strip()) token = self.next_token() assert token == vt.SEMI_COLON, self.error_string( @@ -658,7 +658,7 @@ def parse_cable_declaration(self, properties, var_type = None): token = self.next_token() assert vt.is_valid_identifier(token), self.error_string( "valid cable identifier", "identify the cable", token) - name = token + name = token.strip() cable = self.create_or_update_cable( name, left_index=left, right_index=right, var_type=var_type) @@ -675,7 +675,7 @@ def parse_instantiation(self, properties): token = self.next_token() assert vt.is_valid_identifier(token), self.error_string( "module identifier", "for instantiation", token) - def_name = token + def_name = token.strip() parameter_dict = dict() token = self.peek_token() @@ -685,7 +685,7 @@ def parse_instantiation(self, properties): token = self.next_token() assert vt.is_valid_identifier(token), self.error_string( "instance name", "for instantiation", token) - name = token + name = token.strip() # the current definition is instancing the current top instance, so a change needs to be made if def_name == self.netlist.top_instance.reference.name: @@ -752,7 +752,7 @@ def parse_defparam_parameters(self): assert token == vt.DEFPARAM, self.error_string(vt.DEFPARAM, "to being defparam statement", token) token = self.next_token() assert vt.is_valid_identifier(token), self.error_string("valid identifier", "of an instance to apply the defparam to", token) - instance_name = token + instance_name = token.strip() if self.current_instance.name == instance_name: instance = self.current_instance else: @@ -806,7 +806,7 @@ def parse_parameter_map_single(self): token = self.next_token() assert vt.is_valid_identifier(token), self.error_string( "valid parameter identifier", "in parameter mapping", token) - k = token + k = token.strip() token = self.next_token() assert token == vt.OPEN_PARENTHESIS, self.error_string( @@ -850,7 +850,7 @@ def parse_port_map_single(self): token = self.next_token() assert vt.is_valid_identifier(token), self.error_string( "valid port identifier", "for port in instantiation port map", token) - port_name = token + port_name = token.strip() token = self.next_token() assert token == vt.OPEN_PARENTHESIS, self.error_string( @@ -1002,7 +1002,7 @@ def parse_variable_instantiation(self): left, right = self.parse_brackets() cable = self.create_or_update_cable( - name, left_index=left, right_index=right) + name.strip(), left_index=left, right_index=right) return cable, left, right @@ -1041,7 +1041,7 @@ def parse_star_property(self): token = self.next_token() while token != vt.STAR: assert vt.is_valid_identifier(token) - key = token + key = token.strip() token = self.next_token() assert token in [vt.EQUAL, vt.STAR, vt.COMMA], self.error_string( vt.EQUAL + " or " + vt.STAR + " or " + vt.COMMA, "to set a star parameter", token) diff --git a/spydrnet/parsers/verilog/tests/test_verilogParser.py b/spydrnet/parsers/verilog/tests/test_verilogParser.py index c602a1fc..178e0bf2 100644 --- a/spydrnet/parsers/verilog/tests/test_verilogParser.py +++ b/spydrnet/parsers/verilog/tests/test_verilogParser.py @@ -325,9 +325,9 @@ def test_port_resize_on_aliased_port(self): for c in parser.current_definition.cables: names.append(c.name) assert len(c.wires) == 1 - assert '\\byte_num[2] ' in names - assert '\\byte_num[1] ' in names - assert '\\byte_num[0] ' in names + assert '\\byte_num[2]' in names + assert '\\byte_num[1]' in names + assert '\\byte_num[0]' in names assert parser.current_definition.ports[0].name == 'byte_num' @@ -1242,7 +1242,7 @@ def test_parse_assign(self): assert i_right == None c1, o_left, o_right, c2, i_left, i_right = parser.parse_assign() assert c1.name == "SR2" - assert c2.name == "\\ " + assert c2.name == "\\" assert o_left == 2 assert o_right == None assert i_left == None @@ -1490,7 +1490,7 @@ def test_constant_parsing(self): parser.current_definition = sdn.Definition() cable, _, _ = parser.parse_variable_instantiation() - self.assertEqual(cable.name, "\\ ", "Check const wire name") + self.assertEqual(cable.name, "\\", "Check const wire name") # Check constant 1 net declaration tokens = ("1'b1", vt.SEMI_COLON) @@ -1500,7 +1500,7 @@ def test_constant_parsing(self): parser.current_definition = sdn.Definition() cable, _, _ = parser.parse_variable_instantiation() - self.assertEqual(cable.name, "\\ ", "Check const wire name") + self.assertEqual(cable.name, "\\", "Check const wire name") if __name__ == '__main__': From 0aa48764a1da8627aee9b71e1ee8d78b33ed8ab1 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Wed, 12 Apr 2023 09:56:40 -0600 Subject: [PATCH 84/92] removing flags for parsing and composing netlists that had to do with spaces at the end of primitves as these functions were implemented in the verilog parser and composer --- spydrnet/composers/__init__.py | 5 +---- spydrnet/parsers/__init__.py | 15 +++++---------- spydrnet/util/reinsert_space.py | 23 ----------------------- spydrnet/util/remove_space.py | 24 ------------------------ 4 files changed, 6 insertions(+), 61 deletions(-) delete mode 100644 spydrnet/util/reinsert_space.py delete mode 100644 spydrnet/util/remove_space.py diff --git a/spydrnet/composers/__init__.py b/spydrnet/composers/__init__.py index f1d5a0c3..5b1c1b20 100644 --- a/spydrnet/composers/__init__.py +++ b/spydrnet/composers/__init__.py @@ -1,7 +1,7 @@ import os -def compose(netlist, filename, voters=[], definition_list=[], write_blackbox=True, write_eblif_cname=True, defparam = False, reinsert_space=False): +def compose(netlist, filename, voters=[], definition_list=[], write_blackbox=True, write_eblif_cname=True, defparam = False): """To compose a file into a netlist format""" extension = os.path.splitext(filename)[1] extension_lower = extension.lower() @@ -12,9 +12,6 @@ def compose(netlist, filename, voters=[], definition_list=[], write_blackbox=Tru raise Exception("netlist.name undefined") composer.run(netlist, filename) elif extension_lower in [".v", ".vh", ".vm"]: - if reinsert_space: - from spydrnet.util.reinsert_space import reinserting_space - reinserting_space(netlist, voters) from spydrnet.composers.verilog.composer import Composer composer = Composer(definition_list, write_blackbox, defparam) composer.run(netlist, file_out=filename) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 868e0aef..a408f516 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -8,7 +8,7 @@ """ -def parse(filename, architecture=None, remove_space=False, path_used=False): +def parse(filename, architecture=None): """ The parse function is able to parse an EDIF (.edf) file, a Verilog file (.v), or an EBLIF file (.eblif). @@ -50,14 +50,12 @@ def parse(filename, architecture=None, remove_space=False, path_used=False): zip.extract(basename_less_final_extension, tempdirname) filename = os.path.join( tempdirname, basename_less_final_extension) - return _parse(filename, architecture, remove_space, path_used) + return _parse(filename, architecture) - return _parse(filename, architecture, remove_space, path_used) + return _parse(filename, architecture) -def _parse(filename, architecture=None, remove_space=False, path_used=False): - if (path_used): - filename = os.path.basename(filename) +def _parse(filename, architecture=None): extension = get_lowercase_extension(filename) if extension in [".edf", ".edif", ".edn"]: from spydrnet.parsers.edif.parser import EdifParser @@ -71,10 +69,7 @@ def _parse(filename, architecture=None, remove_space=False, path_used=False): else: raise RuntimeError("Extension {} not recognized.".format(extension)) parser.parse() - - if remove_space: - from spydrnet.util.remove_space import removing_space - removing_space(parser.netlist) + if architecture: read_primitive_library(architecture, parser.netlist) diff --git a/spydrnet/util/reinsert_space.py b/spydrnet/util/reinsert_space.py deleted file mode 100644 index c78ee0a9..00000000 --- a/spydrnet/util/reinsert_space.py +++ /dev/null @@ -1,23 +0,0 @@ -def reinserting_space(netlist,voters): - - for voter in voters: - for obj in voters[voter]: - obj.name = ''.join((obj.name, "_wire")) - - for instance in netlist.get_instances(): - if instance.name is None: - continue - if "\\" in instance.name: - instance.name = ''.join((instance.name, " ")) - - for port in netlist.get_ports(): - if port.name is None: - continue - if "\\" in port.name: - port.name = ''.join((port.name, " ")) - - for cable in netlist.get_cables(): - if cable.name is None: - continue - if "\\" in cable.name: - cable.name = ''.join((cable.name, " ")) \ No newline at end of file diff --git a/spydrnet/util/remove_space.py b/spydrnet/util/remove_space.py deleted file mode 100644 index 7d6fea69..00000000 --- a/spydrnet/util/remove_space.py +++ /dev/null @@ -1,24 +0,0 @@ -def removing_space(netlist): - - for instance in netlist.get_instances(): - if instance.name is None: - continue - if "\\" in instance.name: - update_name = instance.name.replace(" ", "") - instance.name = update_name - - for port in netlist.get_ports(): - if port.name is None: - continue - if "\\" in port.name: - update_name = port.name.replace(" ", "") - port.name = update_name - - for cable in netlist.get_cables(): - if cable.name is None: - continue - if "\\" in cable.name: - update_name = cable.name.replace(" ", "") - cable.name = update_name - - \ No newline at end of file From 628afe84957ff16ebd2e1623bd9c6477fac3b0d5 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Wed, 12 Apr 2023 10:27:39 -0600 Subject: [PATCH 85/92] updating os.path to pathlib --- spydrnet/parsers/__init__.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index a408f516..378e45be 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -1,6 +1,6 @@ -import os import zipfile import tempfile +from pathlib import Path """ Init for Spydrnet. The functions below can be called directly @@ -35,9 +35,8 @@ def parse(filename, architecture=None): The same applies for EBLIF files """ - basename_less_final_extension = os.path.splitext( - os.path.basename(filename))[0] - extension = get_lowercase_extension(filename) + basename_less_final_extension = Path(filename).stem + extension = get_lowercase_extension(filename) if extension == ".zip": assert zipfile.is_zipfile(filename), \ "Input filename {} with extension .zip is not a zip file.".format( @@ -48,7 +47,7 @@ def parse(filename, architecture=None): assert len(files) == 1 and files[0] == basename_less_final_extension, \ "Only single file archives allowed with a file whose name matches the name of the archive" zip.extract(basename_less_final_extension, tempdirname) - filename = os.path.join( + filename = Path.joinpath( tempdirname, basename_less_final_extension) return _parse(filename, architecture) @@ -79,7 +78,7 @@ def _parse(filename, architecture=None): def get_lowercase_extension(filename): - extension = os.path.splitext(filename)[1] + extension = Path(filename).suffix extension_lower = extension.lower() return extension_lower From d04cd1985f95bb9f65cb4c1fc90129fed1d1e8ee Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Wed, 12 Apr 2023 10:34:11 -0600 Subject: [PATCH 86/92] resetting init for parsers --- spydrnet/parsers/__init__.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 378e45be..28294e6b 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -1,6 +1,6 @@ +import os import zipfile import tempfile -from pathlib import Path """ Init for Spydrnet. The functions below can be called directly @@ -35,8 +35,9 @@ def parse(filename, architecture=None): The same applies for EBLIF files """ - basename_less_final_extension = Path(filename).stem - extension = get_lowercase_extension(filename) + basename_less_final_extension = os.path.splitext( + os.path.basename(filename))[0] + extension = get_lowercase_extension(filename) if extension == ".zip": assert zipfile.is_zipfile(filename), \ "Input filename {} with extension .zip is not a zip file.".format( @@ -47,7 +48,7 @@ def parse(filename, architecture=None): assert len(files) == 1 and files[0] == basename_less_final_extension, \ "Only single file archives allowed with a file whose name matches the name of the archive" zip.extract(basename_less_final_extension, tempdirname) - filename = Path.joinpath( + filename = os.path.join( tempdirname, basename_less_final_extension) return _parse(filename, architecture) @@ -69,7 +70,6 @@ def _parse(filename, architecture=None): raise RuntimeError("Extension {} not recognized.".format(extension)) parser.parse() - if architecture: read_primitive_library(architecture, parser.netlist) if extension in [".eblif",".blif"]: @@ -78,7 +78,7 @@ def _parse(filename, architecture=None): def get_lowercase_extension(filename): - extension = Path(filename).suffix + extension = os.path.splitext(filename)[1] extension_lower = extension.lower() return extension_lower From 6b4b791e92ec402d4b9d8524ab58c22938815c13 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Wed, 12 Apr 2023 10:51:02 -0600 Subject: [PATCH 87/92] changing os.path to pathlib.Path --- spydrnet/parsers/__init__.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 28294e6b..4dba9012 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -1,6 +1,7 @@ import os import zipfile import tempfile +import pathlib """ Init for Spydrnet. The functions below can be called directly @@ -35,9 +36,9 @@ def parse(filename, architecture=None): The same applies for EBLIF files """ - basename_less_final_extension = os.path.splitext( - os.path.basename(filename))[0] - extension = get_lowercase_extension(filename) + + basename_less_final_extension = pathlib.Path(filename).stem + extension = get_lowercase_extension(filename) if extension == ".zip": assert zipfile.is_zipfile(filename), \ "Input filename {} with extension .zip is not a zip file.".format( @@ -78,7 +79,7 @@ def _parse(filename, architecture=None): def get_lowercase_extension(filename): - extension = os.path.splitext(filename)[1] + extension = pathlib.Path(filename).suffix extension_lower = extension.lower() return extension_lower From 70be3b70cc1691e789a23b618ef0d4fccfb81c62 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Thu, 13 Apr 2023 09:57:27 -0600 Subject: [PATCH 88/92] updating os.path to pathlib.path --- spydrnet/composers/verilog/tests/test_composer.py | 5 ++++- spydrnet/parsers/__init__.py | 10 ++++------ spydrnet/parsers/eblif/eblif_tokenizer.py | 5 ++++- spydrnet/parsers/edif/tokenizer.py | 6 +++--- spydrnet/parsers/verilog/tests/test_tokenizer.py | 2 ++ spydrnet/parsers/verilog/tokenizer.py | 6 +++--- 6 files changed, 20 insertions(+), 14 deletions(-) diff --git a/spydrnet/composers/verilog/tests/test_composer.py b/spydrnet/composers/verilog/tests/test_composer.py index e18528af..9383b599 100644 --- a/spydrnet/composers/verilog/tests/test_composer.py +++ b/spydrnet/composers/verilog/tests/test_composer.py @@ -5,12 +5,15 @@ import os import tempfile import glob +from pathlib import Path class TestVerilogComposer(unittest.TestCase): @classmethod def setUpClass(cls) -> None: - cls.dir_of_verilog_netlists = os.path.join(sdn.base_dir, "support_files", "verilog_netlists") + cls.dir_of_verilog_netlists = Path(sdn.base_dir).joinpath("support_files", "verilog_netlists") + # os.path.join(sdn.base_dir, "support_files", "verilog_netlists") + cls.verilog_files = sorted(glob.glob(os.path.join(cls.dir_of_verilog_netlists, "*.v.zip")), key = os.path.getsize) @unittest.skip("Test takes a long time right now.") diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 4dba9012..1d85bcdb 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -1,7 +1,6 @@ -import os import zipfile import tempfile -import pathlib +from pathlib import Path """ Init for Spydrnet. The functions below can be called directly @@ -37,7 +36,7 @@ def parse(filename, architecture=None): The same applies for EBLIF files """ - basename_less_final_extension = pathlib.Path(filename).stem + basename_less_final_extension = Path(filename).stem extension = get_lowercase_extension(filename) if extension == ".zip": assert zipfile.is_zipfile(filename), \ @@ -49,8 +48,7 @@ def parse(filename, architecture=None): assert len(files) == 1 and files[0] == basename_less_final_extension, \ "Only single file archives allowed with a file whose name matches the name of the archive" zip.extract(basename_less_final_extension, tempdirname) - filename = os.path.join( - tempdirname, basename_less_final_extension) + filename = Path(tempdirname).joinpath(basename_less_final_extension) return _parse(filename, architecture) return _parse(filename, architecture) @@ -79,7 +77,7 @@ def _parse(filename, architecture=None): def get_lowercase_extension(filename): - extension = pathlib.Path(filename).suffix + extension = Path(filename).suffix extension_lower = extension.lower() return extension_lower diff --git a/spydrnet/parsers/eblif/eblif_tokenizer.py b/spydrnet/parsers/eblif/eblif_tokenizer.py index 25cf6060..4da5729d 100644 --- a/spydrnet/parsers/eblif/eblif_tokenizer.py +++ b/spydrnet/parsers/eblif/eblif_tokenizer.py @@ -4,6 +4,7 @@ import io import os from spydrnet.parsers.eblif.eblif_tokens import BACKSLASH +from pathlib import Path class Tokenizer: @staticmethod @@ -31,13 +32,15 @@ def __init__(self,input_source): if isinstance(input_source, str): if zipfile.is_zipfile(input_source): zip = zipfile.ZipFile(input_source) - filename = os.path.basename(input_source) + filename = Path(input_source).name filename = filename[:filename.rindex(".")] stream = zip.open(filename) stream = io.TextIOWrapper(stream) self.input_stream = stream else: self.input_stream = open(input_source, 'r') + elif isinstance(input_source, Path): + self.input_stream = open(input_source,"r") else: if isinstance(input_source, io.TextIOBase) is False: self.input_stream = io.TextIOWrapper(input_source) diff --git a/spydrnet/parsers/edif/tokenizer.py b/spydrnet/parsers/edif/tokenizer.py index 5c0671d6..04f66e44 100644 --- a/spydrnet/parsers/edif/tokenizer.py +++ b/spydrnet/parsers/edif/tokenizer.py @@ -3,7 +3,7 @@ import zipfile import io import os -import pathlib +from pathlib import Path class EdifTokenizer: @@ -31,14 +31,14 @@ def __init__(self, input_source): if isinstance(input_source, str): if zipfile.is_zipfile(input_source): zip = zipfile.ZipFile(input_source) - filename = os.path.basename(input_source) + filename = Path(input_source).name filename = filename[: filename.rindex(".")] stream = zip.open(filename) stream = io.TextIOWrapper(stream) self.input_stream = stream else: self.input_stream = open(input_source, "r") - elif isinstance(input_source, pathlib.PosixPath): + elif isinstance(input_source, Path): self.input_stream = open(input_source,"r") else: if isinstance(input_source, io.TextIOBase) is False: diff --git a/spydrnet/parsers/verilog/tests/test_tokenizer.py b/spydrnet/parsers/verilog/tests/test_tokenizer.py index 15f944e1..44140be8 100644 --- a/spydrnet/parsers/verilog/tests/test_tokenizer.py +++ b/spydrnet/parsers/verilog/tests/test_tokenizer.py @@ -3,6 +3,7 @@ from spydrnet.parsers.verilog.tokenizer import * import spydrnet as sdn from io import StringIO +from pathlib import Path class TestVerilogTokenizer(unittest.TestCase): @@ -10,6 +11,7 @@ class TestVerilogTokenizer(unittest.TestCase): def test_against_4bit_adder(self): directory = os.path.join(sdn.base_dir, "support_files", "verilog_netlists", "4bitadder.v.zip") + tokenizer = VerilogTokenizer.from_filename(directory) while(tokenizer.has_next()): #print(tokenizer.next()) diff --git a/spydrnet/parsers/verilog/tokenizer.py b/spydrnet/parsers/verilog/tokenizer.py index ff2d6b31..caa535ab 100644 --- a/spydrnet/parsers/verilog/tokenizer.py +++ b/spydrnet/parsers/verilog/tokenizer.py @@ -8,7 +8,7 @@ import os import spydrnet.parsers.verilog.verilog_tokens as vt from spydrnet.parsers.verilog.verilog_token_factory import TokenFactory -import pathlib +from pathlib import Path class VerilogTokenizer: @@ -36,14 +36,14 @@ def __init__(self, input_source): if isinstance(input_source, str): if zipfile.is_zipfile(input_source): zip = zipfile.ZipFile(input_source) - filename = os.path.basename(input_source) + filename = Path(input_source).name filename = filename[:filename.rindex(".")] stream = zip.open(filename) stream = io.TextIOWrapper(stream) self.input_stream = stream else: self.input_stream = open(input_source, 'r') - elif isinstance(input_source, pathlib.PosixPath): + elif isinstance(input_source, Path): self.input_stream = open(input_source,"r") else: if isinstance(input_source, io.TextIOBase) is False: From e008b6104d55eddbc830d8662a2bbe5a10df3a2f Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Tue, 18 Apr 2023 09:30:14 -0600 Subject: [PATCH 89/92] updating os.path to pathlib --- examples/extended/plot_flatten.py | 5 ++--- .../extended/plot_single_use_definitions.py | 4 ++-- spydrnet/composers/__init__.py | 3 ++- spydrnet/composers/eblif/eblif_composer.py | 4 ++-- .../eblif/tests/test_eblif_composer.py | 3 ++- .../composers/verilog/tests/test_composer.py | 20 +++++++++---------- spydrnet/ir/tests/__init__.py | 5 +++-- spydrnet/parsers/__init__.py | 3 ++- .../parsers/eblif/tests/test_eblif_parser.py | 4 ++-- .../parsers/edif/tests/test_edif_parser.py | 10 ++++++---- spydrnet/parsers/edif/tests/test_tokenizer.py | 18 +++++++++-------- spydrnet/parsers/edif/tokenizer.py | 1 - .../parsers/verilog/tests/test_tokenizer.py | 1 + spydrnet/release.py | 17 ++++++++-------- .../test_example_netlist_functionality.py | 5 ++++- 15 files changed, 56 insertions(+), 47 deletions(-) diff --git a/examples/extended/plot_flatten.py b/examples/extended/plot_flatten.py index a4958e13..f4a74090 100644 --- a/examples/extended/plot_flatten.py +++ b/examples/extended/plot_flatten.py @@ -6,10 +6,9 @@ Remove hierarchy from a netlist. The original hierarchy and new hierarchy (after flattening) will be printed. """ -import os import tempfile import spydrnet as sdn - +from pathlib import Path # Check if given instance is a black box # instance: std.Instance to check @@ -180,7 +179,7 @@ def hierarchy(current_instance,indentation=""): with tempfile.TemporaryDirectory() as td: file_name = example_name + '_flat.edf' - sdn.compose(ir, os.path.join(td, file_name)) + sdn.compose(ir, Path(td, file_name)) # sdn.composers.compose("test.edf", ir) print() diff --git a/examples/extended/plot_single_use_definitions.py b/examples/extended/plot_single_use_definitions.py index 55267ad0..2e5e0a06 100644 --- a/examples/extended/plot_single_use_definitions.py +++ b/examples/extended/plot_single_use_definitions.py @@ -6,10 +6,10 @@ Creates definitions for non-leaf instances so each instance has its own definition. Each library in both the original and the uniquified netlist will be printed along with each's definitions. """ -import os import tempfile import spydrnet as sdn import collections +from pathlib import Path # Check if given instance is a black box @@ -189,7 +189,7 @@ def libraries_definitions(my_netlist): with tempfile.TemporaryDirectory() as td: file_name = example_name + '_unique.edf' - sdn.compose(ir, os.path.join(td, file_name)) + sdn.compose(ir, Path(td, file_name)) #show the original netlist with its definitions and the new netlist with each instance now as a unique definition print("ORIGINAL") diff --git a/spydrnet/composers/__init__.py b/spydrnet/composers/__init__.py index 5b1c1b20..52ce4e14 100644 --- a/spydrnet/composers/__init__.py +++ b/spydrnet/composers/__init__.py @@ -1,9 +1,10 @@ import os +from pathlib import Path def compose(netlist, filename, voters=[], definition_list=[], write_blackbox=True, write_eblif_cname=True, defparam = False): """To compose a file into a netlist format""" - extension = os.path.splitext(filename)[1] + extension = Path(filename).suffix extension_lower = extension.lower() if extension_lower in {".edf", ".edif"}: from spydrnet.composers.edif.composer import ComposeEdif diff --git a/spydrnet/composers/eblif/eblif_composer.py b/spydrnet/composers/eblif/eblif_composer.py index 45c8abff..6979e182 100644 --- a/spydrnet/composers/eblif/eblif_composer.py +++ b/spydrnet/composers/eblif/eblif_composer.py @@ -1,6 +1,6 @@ -import os from spydrnet.util.selection import Selection import spydrnet as sdn +from pathlib import Path class EBLIFComposer: def __init__(self, write_blackbox, write_cname=True): @@ -17,7 +17,7 @@ def run(self, ir, file_out): self._compose(ir) def prepare_file(self,out_file): - if (os.path.exists(out_file)): + if (Path(out_file).exists()): f = open(out_file,"w") else: f = open(out_file,"x") diff --git a/spydrnet/composers/eblif/tests/test_eblif_composer.py b/spydrnet/composers/eblif/tests/test_eblif_composer.py index 4199bd16..d688427c 100644 --- a/spydrnet/composers/eblif/tests/test_eblif_composer.py +++ b/spydrnet/composers/eblif/tests/test_eblif_composer.py @@ -2,6 +2,7 @@ import os import spydrnet as sdn from spydrnet import base_dir +from pathlib import Path """ Test the EBLIF composer. The best way I can think to do this is to parse a netlist, compose it, then parse it again to see if anything changed. It should all be the same @@ -9,7 +10,7 @@ class TestEBLIFComposer(unittest.TestCase): def setUp(self): - self.netlist_1 = sdn.parse(os.path.join(base_dir, 'support_files', 'eblif_netlists', "toggle.eblif.zip")) + self.netlist_1 = sdn.parse(Path(base_dir, 'support_files', 'eblif_netlists', "toggle.eblif.zip")) self.definition_list = ["INV","BUFG","FDRE","IBUF","OBUF","toggle", "logic-gate_0"] sdn.compose(self.netlist_1,"temp_for_composer_test.eblif") sdn.compose(self.netlist_1,"temp_for_composer_test_no_blackbox.eblif",write_blackbox=False) diff --git a/spydrnet/composers/verilog/tests/test_composer.py b/spydrnet/composers/verilog/tests/test_composer.py index 9383b599..1d693899 100644 --- a/spydrnet/composers/verilog/tests/test_composer.py +++ b/spydrnet/composers/verilog/tests/test_composer.py @@ -11,9 +11,7 @@ class TestVerilogComposer(unittest.TestCase): @classmethod def setUpClass(cls) -> None: - cls.dir_of_verilog_netlists = Path(sdn.base_dir).joinpath("support_files", "verilog_netlists") - # os.path.join(sdn.base_dir, "support_files", "verilog_netlists") - + cls.dir_of_verilog_netlists = Path(sdn.base_dir, "support_files", "verilog_netlists") cls.verilog_files = sorted(glob.glob(os.path.join(cls.dir_of_verilog_netlists, "*.v.zip")), key = os.path.getsize) @unittest.skip("Test takes a long time right now.") @@ -22,7 +20,7 @@ def test_large_verilog_compose(self): errors = 0 for ii, filename in enumerate(self.verilog_files): with self.subTest(i=ii): - if os.path.getsize(filename) <= 1024 * 10: + if Path(filename).stat().st_size <= 1024 * 10: continue if filename.endswith(".zip"): with tempfile.TemporaryDirectory() as tempdirectory: @@ -31,7 +29,7 @@ def test_large_verilog_compose(self): # vp = sdn.parsers.verilog.parser.VerilogParser.from_filename(os.path.join(directory, filename)) # netlist = vp.parse() netlist = parsers.parse(filename) - composers.compose(netlist, os.path.join(tempdirectory, os.path.basename(filename) + "-spydrnet.v")) + composers.compose(netlist, Path(tempdirectory, Path(filename).name + "-spydrnet.v")) #comp.run(netlist,"temp2/"+filename[:len(filename)-6] + "-spydrnet.v") # comp.run(netlist,os.path.join(tempdirectory, filename[:len(filename)-6] + "-spydrnet.v")) i+=1 @@ -52,7 +50,7 @@ def test_small_verilog_compose(self): errors = 0 for ii, filename in enumerate(self.verilog_files): with self.subTest(i=ii): - if os.path.getsize(filename) > 1024 * 10: + if Path(filename).stat().st_size > 1024 * 10: continue if filename.endswith(".zip"): with tempfile.TemporaryDirectory() as tempdirectory: @@ -61,7 +59,7 @@ def test_small_verilog_compose(self): # vp = sdn.parsers.verilog.parser.VerilogParser.from_filename(os.path.join(directory, filename)) # netlist = vp.parse() netlist = parsers.parse(filename) - composers.compose(netlist, os.path.join(tempdirectory, os.path.basename(filename) + "-spydrnet.v")) + composers.compose(netlist, Path(tempdirectory, Path(filename).name + "-spydrnet.v")) #comp.run(netlist,"temp2/"+filename[:len(filename)-6] + "-spydrnet.v") # comp.run(netlist,os.path.join(tempdirectory, filename[:len(filename)-6] + "-spydrnet.v")) i+=1 @@ -82,8 +80,8 @@ def test_definition_list_option(self): self.dir_of_verilog_netlists, "*4bitadder.v.zip")): with tempfile.TemporaryDirectory() as tempdirectory: netlist = parsers.parse(filename) - out_file = os.path.join( - tempdirectory, os.path.basename(filename) + "-spydrnet.v") + out_file = Path( + tempdirectory, Path(filename).name + "-spydrnet.v") composers.compose(netlist, out_file, definition_list=['adder']) with open(out_file, "r") as fp: @@ -101,8 +99,8 @@ def test_write_blackbox_option(self): self.dir_of_verilog_netlists, "*4bitadder.v.zip")): with tempfile.TemporaryDirectory() as tempdirectory: netlist = parsers.parse(filename) - out_file = os.path.join( - tempdirectory, os.path.basename(filename) + "-spydrnet.v") + out_file = Path( + tempdirectory, Path(filename).name + "-spydrnet.v") composers.compose(netlist, out_file, write_blackbox=False) with open(out_file, "r") as fp: diff --git a/spydrnet/ir/tests/__init__.py b/spydrnet/ir/tests/__init__.py index be6a8671..101786e3 100644 --- a/spydrnet/ir/tests/__init__.py +++ b/spydrnet/ir/tests/__init__.py @@ -1,3 +1,4 @@ -import os +from pathlib import Path + +data_dir = Path(Path(Path(__file__).parent, "data")).absolute() -data_dir = os.path.abspath(os.path.join(os.path.dirname(__file__), "data")) diff --git a/spydrnet/parsers/__init__.py b/spydrnet/parsers/__init__.py index 1d85bcdb..9e32110b 100644 --- a/spydrnet/parsers/__init__.py +++ b/spydrnet/parsers/__init__.py @@ -48,7 +48,8 @@ def parse(filename, architecture=None): assert len(files) == 1 and files[0] == basename_less_final_extension, \ "Only single file archives allowed with a file whose name matches the name of the archive" zip.extract(basename_less_final_extension, tempdirname) - filename = Path(tempdirname).joinpath(basename_less_final_extension) + # filename = Path(tempdirname).joinpath(basename_less_final_extension) + filename = Path(tempdirname, basename_less_final_extension) return _parse(filename, architecture) return _parse(filename, architecture) diff --git a/spydrnet/parsers/eblif/tests/test_eblif_parser.py b/spydrnet/parsers/eblif/tests/test_eblif_parser.py index ec8bcaf5..1f9f1373 100644 --- a/spydrnet/parsers/eblif/tests/test_eblif_parser.py +++ b/spydrnet/parsers/eblif/tests/test_eblif_parser.py @@ -1,8 +1,8 @@ import unittest -import os import spydrnet as sdn from spydrnet import base_dir from spydrnet.util.selection import Selection +from pathlib import Path """ Test the EBLIFParser by parsing in a simple netlist and making sure that: @@ -11,7 +11,7 @@ """ class TestEBLIFParser(unittest.TestCase): def setUp(self): - self.netlist = sdn.parse(os.path.join(base_dir, 'support_files', 'eblif_netlists', "toggle.eblif.zip")) + self.netlist = sdn.parse(Path(base_dir, 'support_files', 'eblif_netlists', "toggle.eblif.zip")) self.definition_list = ["INV","BUFG","FDRE","IBUF","OBUF","toggle", "logic-gate_0"] def test_name(self): diff --git a/spydrnet/parsers/edif/tests/test_edif_parser.py b/spydrnet/parsers/edif/tests/test_edif_parser.py index 88841bcf..960aae9c 100644 --- a/spydrnet/parsers/edif/tests/test_edif_parser.py +++ b/spydrnet/parsers/edif/tests/test_edif_parser.py @@ -7,6 +7,7 @@ import tempfile import glob import shutil +from pathlib import Path class TestEdifTokenizer(unittest.TestCase): @@ -51,25 +52,26 @@ def test_multi_bit_add_out_of_order(self): @classmethod def setUpClass(cls) -> None: - cls.dir_of_edif_netlists = os.path.join(sdn.base_dir, "support_files", "EDIF_netlists") + cls.dir_of_edif_netlists = Path(sdn.base_dir, "support_files", "EDIF_netlists") cls.edif_files = sorted(glob.glob(os.path.join(cls.dir_of_edif_netlists, "*.edf.zip")), key=os.path.getsize) + # cls.edif_files = sorted(glob.glob(Path(cls.dir_of_edif_netlists, "*.edf.zip")), key=Path.stat().st_size) @unittest.skip("Test takes a long time right now.") def test_large_edif(self): for ii, filename in enumerate(self.edif_files): - if os.path.getsize(filename) <= 1024 * 10: + if Path(filename).stat().st_size <= 1024 * 10: continue self.ensure_cable_consistency(filename, ii, "edf") def test_small_edif_cables(self): for ii, filename in enumerate(self.edif_files): - if os.path.getsize(filename) > 1024 * 10: + if Path(filename).stat().st_size > 1024 * 10: continue self.ensure_cable_consistency(filename, ii, "edf") def ensure_cable_consistency(self,filename, ii, target_format_extension = None): with self.subTest(i=ii): - if os.path.exists("temp"): + if Path("temp").exists(): shutil.rmtree("temp") print(filename) with tempfile.TemporaryDirectory() as tempdirname: diff --git a/spydrnet/parsers/edif/tests/test_tokenizer.py b/spydrnet/parsers/edif/tests/test_tokenizer.py index e1480504..23166ead 100644 --- a/spydrnet/parsers/edif/tests/test_tokenizer.py +++ b/spydrnet/parsers/edif/tests/test_tokenizer.py @@ -3,6 +3,7 @@ import io import zipfile import tempfile +from pathlib import Path from spydrnet.parsers.edif.tokenizer import EdifTokenizer from spydrnet import base_dir @@ -12,10 +13,10 @@ def test_no_constructor_of_zero_argument(self): self.assertRaises(TypeError, EdifTokenizer) def test_stream(self): - dir_of_edif_netlists = os.path.join(base_dir, "support_files", "EDIF_netlists") - test_file = os.path.join(dir_of_edif_netlists, "n_bit_counter.edf.zip") + dir_of_edif_netlists = Path(base_dir, "support_files", "EDIF_netlists") + test_file = Path(dir_of_edif_netlists, "n_bit_counter.edf.zip") zip = zipfile.ZipFile(test_file) - file_name = os.path.basename(test_file) + file_name = Path(test_file).name file_name = file_name[:file_name.rindex(".")] stream = zip.open(file_name) stream = io.TextIOWrapper(stream) @@ -24,21 +25,22 @@ def test_stream(self): self.assertEqual("(", next_token) def test_open_zip_file(self): - dir_of_edif_netlists = os.path.join(base_dir, "support_files", "EDIF_netlists") + dir_of_edif_netlists = Path(base_dir, "support_files", "EDIF_netlists") test_file = os.path.join(dir_of_edif_netlists, "n_bit_counter.edf.zip") + # test_file = Path(dir_of_edif_netlists, "n_bit_counter.edf.zip") # UnicodeDecodeError tokenizer = EdifTokenizer.from_filename(test_file) next_token = tokenizer.next() self.assertEqual("(", next_token) def test_open_file(self): - dir_of_edif_netlists = os.path.join(base_dir, "support_files", "EDIF_netlists") - test_file = os.path.join(dir_of_edif_netlists, "n_bit_counter.edf.zip") - file_name = os.path.basename(test_file) + dir_of_edif_netlists = Path(base_dir, "support_files", "EDIF_netlists") + test_file = Path(dir_of_edif_netlists, "n_bit_counter.edf.zip") + file_name = Path(test_file).name file_name = file_name[:file_name.rindex(".")] zip = zipfile.ZipFile(test_file) with tempfile.TemporaryDirectory() as tempdir: zip.extract(file_name, tempdir) - extract_path = os.path.join(tempdir, file_name) + extract_path = Path(tempdir, file_name) tokenizer = EdifTokenizer.from_filename(extract_path) next_token = tokenizer.next() self.assertEqual("(", next_token) diff --git a/spydrnet/parsers/edif/tokenizer.py b/spydrnet/parsers/edif/tokenizer.py index 04f66e44..ea9483ba 100644 --- a/spydrnet/parsers/edif/tokenizer.py +++ b/spydrnet/parsers/edif/tokenizer.py @@ -2,7 +2,6 @@ import re import zipfile import io -import os from pathlib import Path diff --git a/spydrnet/parsers/verilog/tests/test_tokenizer.py b/spydrnet/parsers/verilog/tests/test_tokenizer.py index 44140be8..d164a538 100644 --- a/spydrnet/parsers/verilog/tests/test_tokenizer.py +++ b/spydrnet/parsers/verilog/tests/test_tokenizer.py @@ -11,6 +11,7 @@ class TestVerilogTokenizer(unittest.TestCase): def test_against_4bit_adder(self): directory = os.path.join(sdn.base_dir, "support_files", "verilog_netlists", "4bitadder.v.zip") + # directory = Path(sdn.base_dir, "support_files", "verilog_netlists", "4bitadder.v.zip") # UnicodeDecodeError tokenizer = VerilogTokenizer.from_filename(directory) while(tokenizer.has_next()): diff --git a/spydrnet/release.py b/spydrnet/release.py index 89e15962..3abfcb70 100644 --- a/spydrnet/release.py +++ b/spydrnet/release.py @@ -1,4 +1,5 @@ import os +from pathlib import Path # Version information name = 'spydrnet' @@ -49,14 +50,14 @@ ] -directory = os.path.dirname(os.path.abspath(__file__)) -version_filename = os.path.join(directory, "VERSION") +directory = Path(Path(__file__).absolute()).parent +version_filename = Path(directory, "VERSION") def load_versionfile(): global release global version global date - if os.path.isfile(version_filename): + if Path(version_filename).is_file(): with open(version_filename) as fi: release = fi.readline().strip()[1:] second_period_index = _get_second_period_index(release) @@ -89,12 +90,12 @@ def update_versionfile(): #check for git on path git_exists = False for path in os.environ['PATH'].split(os.pathsep): - exe_file = os.path.join(path, 'git') - if os.path.isfile(exe_file) and os.access(exe_file, os.X_OK): + exe_file = Path(path, 'git') + if Path(exe_file).is_file() and os.access(exe_file, os.X_OK): git_exists = True else: - exe_file = os.path.join(path, 'git.exe') - if os.path.isfile(exe_file) and os.access(exe_file, os.X_OK): + exe_file = Path(path, 'git.exe') + if Path(exe_file).is_file() and os.access(exe_file, os.X_OK): git_exists = True if git_exists: @@ -103,7 +104,7 @@ def update_versionfile(): git_version = git_describe_output.strip() if git_version.startswith('v'): - version_file = os.path.join(directory, "VERSION") + version_file = Path(directory, "VERSION") with open(version_file, 'w') as fh: fh.write(git_version + '\n') fh.write(date + '\n') diff --git a/spydrnet/tests/test_example_netlist_functionality.py b/spydrnet/tests/test_example_netlist_functionality.py index 988c09da..8e5f90e9 100644 --- a/spydrnet/tests/test_example_netlist_functionality.py +++ b/spydrnet/tests/test_example_netlist_functionality.py @@ -2,15 +2,18 @@ import spydrnet as sdn import glob import os +from pathlib import Path class TestExampleNetlistFunctionality(unittest.TestCase): def test_example_netlist_names(self): filenames = glob.glob(os.path.join(sdn.base_dir, 'support_files', 'EDIF_netlists', '*')) + # filenames = glob.glob(Path(sdn.base_dir, 'support_files', 'EDIF_netlists', '*')) # TypeError + self.assertEqual(len(filenames), len(sdn.example_netlist_names)) filenames.sort() for filename, example_name in zip(filenames, sdn.example_netlist_names): - basename = os.path.basename(filename) + basename = Path(filename).name example_name_golden = basename[:basename.index('.')] self.assertEqual(example_name, example_name_golden) From 08b3d9ce6a727dd390856bf0a672919fa494cf3f Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Tue, 18 Apr 2023 10:36:28 -0600 Subject: [PATCH 90/92] updated docs and release 1.12.2 --- docs/source/conf.py | 4 ++-- docs/source/index.rst | 2 +- docs/source/{tutorial => overview}/index.rst | 2 +- docs/source/{tutorial => overview}/start.rst | 19 +++---------------- .../{tutorial => overview}/tutorial.rst | 0 5 files changed, 7 insertions(+), 20 deletions(-) rename docs/source/{tutorial => overview}/index.rst (83%) rename docs/source/{tutorial => overview}/start.rst (69%) rename docs/source/{tutorial => overview}/tutorial.rst (100%) diff --git a/docs/source/conf.py b/docs/source/conf.py index ef1a04c3..e9a23837 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -77,7 +77,7 @@ # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. -language = "English" +language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. @@ -164,7 +164,7 @@ 'BYU Configurable Computing Lab', 'manual'), ] -latex_appendices = ['tutorial'] +latex_appendices = ['overview/tutorial','overview/start'] # -- Options for manual page output ------------------------------------------ diff --git a/docs/source/index.rst b/docs/source/index.rst index ecdd4824..251856c1 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -12,7 +12,7 @@ :maxdepth: 2 install - tutorial/index + overview/index reference/index auto_examples/index developer/index diff --git a/docs/source/tutorial/index.rst b/docs/source/overview/index.rst similarity index 83% rename from docs/source/tutorial/index.rst rename to docs/source/overview/index.rst index d84314ce..74bd8261 100644 --- a/docs/source/tutorial/index.rst +++ b/docs/source/overview/index.rst @@ -1,4 +1,4 @@ -.. _tutorial: +.. _overview: Tutorial ******** diff --git a/docs/source/tutorial/start.rst b/docs/source/overview/start.rst similarity index 69% rename from docs/source/tutorial/start.rst rename to docs/source/overview/start.rst index c5f905bc..4daed726 100644 --- a/docs/source/tutorial/start.rst +++ b/docs/source/overview/start.rst @@ -11,7 +11,7 @@ Parsing **Default parsing arguments** -``parse(filename, architecture=None, remove_space=False, path_used=False):`` +``parse(filename, architecture=None):`` filename @@ -21,14 +21,6 @@ architecture - Desired board architecture -remove_space - -- Flag used for verilog netlists to insure that the triplicated primitives do not have a space in the middle of their name - -path_used - -- Flag that allows for the use of pathlib.Path to find files not in current directory - **General structure** @@ -36,7 +28,7 @@ path_used **Basic structure for Verilog netlist** -``netlist = sdn.parse("filename.v", architecture=XILINX_7SERIES, remove_space=True)`` +``netlist = sdn.parse("filename.v", architecture=XILINX_7SERIES)`` **Basic structure for EDF netlists** @@ -44,14 +36,12 @@ path_used *edf usually only needs the filename and not the other arguments* - - Composing ---------- **Default composing arguments** -``compose(netlist, filename, voters=[], definition_list=[], write_blackbox=True, write_eblif_cname=True, defparam=False, reinsert_space=False):`` +``compose(netlist, filename, voters=[], definition_list=[], write_blackbox=True, write_eblif_cname=True, defparam=False):`` netlist @@ -81,9 +71,6 @@ defparam - Flag that composes parameters in *defparam* statements instead of using #() -reinsert_space - -- Flag to If remove_space was used in the parser (for verilog netlists) reinsert_space needs to be used to allow the primitves to have the correct syntax for Vivado **General structure** diff --git a/docs/source/tutorial/tutorial.rst b/docs/source/overview/tutorial.rst similarity index 100% rename from docs/source/tutorial/tutorial.rst rename to docs/source/overview/tutorial.rst From 24f7d5a64aa6fcad3a4acf17350abc4cd1041c99 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Tue, 18 Apr 2023 10:55:45 -0600 Subject: [PATCH 91/92] SpyDrNet release 1.12.2 --- RELEASE.rst | 7 +++++++ examples/README.rst | 2 ++ 2 files changed, 9 insertions(+) diff --git a/RELEASE.rst b/RELEASE.rst index 7258528b..47d70ce6 100644 --- a/RELEASE.rst +++ b/RELEASE.rst @@ -1,3 +1,10 @@ +SpyDrNet 1.12.2 +---------------- +April 18, 2023 + +Bug fix for Verilog parser for partially connected ports being misaligned and fixed primitive name with a space at the end. +Changed some of the os.path to pathlib to conform to updated coding standards + SpyDrNet 1.12.1 ---------------- February 2, 2023 diff --git a/examples/README.rst b/examples/README.rst index 7d5e6a1d..2736ddc7 100644 --- a/examples/README.rst +++ b/examples/README.rst @@ -1,5 +1,7 @@ .. _sec:examples: +.. _sphinx_glr_auto_examples: + Examples ======== From 48068526e82b5986891c4dd5d85270d00096eec1 Mon Sep 17 00:00:00 2001 From: Ethan Monlux Date: Tue, 18 Apr 2023 10:56:49 -0600 Subject: [PATCH 92/92] fixed spelling --- examples/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/README.rst b/examples/README.rst index 2736ddc7..7b1d5df5 100644 --- a/examples/README.rst +++ b/examples/README.rst @@ -1,6 +1,6 @@ .. _sec:examples: -.. _sphinx_glr_auto_examples: +.. _sphx_glr_auto_examples: Examples ========