def test_write_brackets_defining(self): composer = self.initialize_tests() def initialize_bundle(bundle, offset, width): if isinstance(bundle, sdn.Port): bundle.create_pins(width) else: #it's a cable bundle.create_wires(width) bundle.is_downto = True bundle.lower_index = offset return bundle b1 = initialize_bundle(sdn.Port(), 0, 1) b2 = initialize_bundle(sdn.Cable(), 4, 1) b3 = initialize_bundle(sdn.Port(), 0, 4) b4 = initialize_bundle(sdn.Cable(), 4, 4) composer._write_brackets_defining(b1) assert composer.file.compare("") composer.file.clear() composer._write_brackets_defining(b2) assert composer.file.compare("[4:4]") composer.file.clear() composer._write_brackets_defining(b3) assert composer.file.compare("[3:0]") composer.file.clear() composer._write_brackets_defining(b4) assert composer.file.compare("[7:4]") composer.file.clear()
def test_write_name(self): composer = self.initialize_tests() o = sdn.Cable() #Type of this shouldn't really matter valid_names = ["basic_name", "\\escaped ", "\\fads#@%!$!@#%$[0:4320] "] for n in valid_names: o.name = n composer._write_name(o) assert composer.file.compare(n) composer.file.clear()
def test_write_brackets_multi_bit_offset(self): composer = self.initialize_tests() port = sdn.Port() cable = sdn.Cable() cable_name = "my_cable" port_name = "my_port" port.name = port_name cable.name = cable_name port.create_pins(4) #input [3:0] my_input; port.is_downto = True port.lower_index = 4 cable.create_wires(4) #wire [3:0] my_wire; cable.is_downto = True cable.lower_index = 4 composer._write_brackets(port, None, None) assert composer.file.compare("") composer.file.clear() composer._write_brackets(port, 5, None) assert composer.file.compare("[5]") composer.file.clear() composer._write_brackets(port, None, 6) assert composer.file.compare("[6]") composer.file.clear() composer._write_brackets(port, 6, 6) assert composer.file.compare("[6]") composer.file.clear() composer._write_brackets(port, 4, 7) assert composer.file.compare("") composer.file.clear() composer._write_brackets(port, 5, 6) assert composer.file.compare("[6:5]") composer.file.clear() composer._write_brackets(cable, None, None) assert composer.file.compare("") composer.file.clear() composer._write_brackets(cable, 5, None) assert composer.file.compare("[5]") composer.file.clear() composer._write_brackets(cable, None, 6) assert composer.file.compare("[6]") composer.file.clear() composer._write_brackets(cable, 6, 6) assert composer.file.compare("[6]") composer.file.clear() composer._write_brackets(cable, 4, 7) assert composer.file.compare("") composer.file.clear() composer._write_brackets(cable, 5, 6) assert composer.file.compare("[6:5]") composer.file.clear()
def test_write_brackets_multi_bit(self): composer = self.initialize_tests() port = sdn.Port() cable = sdn.Cable() cable_name = "my_cable" port_name = "my_port" port.name = port_name cable.name = cable_name port.create_pins(4) #input [3:0] my_input; port.is_downto = True cable.create_wires(4) #wire [3:0] my_wire; cable.is_downto = True composer._write_brackets(port, None, None) assert composer.file.compare("") composer.file.clear() composer._write_brackets(port, 1, None) assert composer.file.compare("[1]") composer.file.clear() composer._write_brackets(port, None, 2) assert composer.file.compare("[2]") composer.file.clear() composer._write_brackets(port, 2, 2) assert composer.file.compare("[2]") composer.file.clear() composer._write_brackets(port, 0, 3) assert composer.file.compare("") composer.file.clear() composer._write_brackets(port, 1, 2) assert composer.file.compare("[2:1]") composer.file.clear() composer._write_brackets(cable, None, None) assert composer.file.compare("") composer.file.clear() composer._write_brackets(cable, 1, None) assert composer.file.compare("[1]") composer.file.clear() composer._write_brackets(cable, None, 2) assert composer.file.compare("[2]") composer.file.clear() composer._write_brackets(cable, 2, 2) assert composer.file.compare("[2]") composer.file.clear() composer._write_brackets(cable, 0, 3) assert composer.file.compare("") composer.file.clear() composer._write_brackets(cable, 1, 2) assert composer.file.compare("[2:1]") composer.file.clear()
def test_multi_bit_add_out_of_order(self): definition = sdn.Definition() cable0 = sdn.Cable() cable0.name = "net[0]" cable0["EDIF.identifier"] = "net_0_" cable1 = sdn.Cable() cable1.name = "net[1]" cable1["EDIF.identifier"] = "net_1_" cable2 = sdn.Cable() cable2.name = "net[2]" cable2["EDIF.identifier"] = "net_2_" cable0.create_wire() cable1.create_wire() cable2.create_wire() p0 = sdn.InnerPin() p1 = sdn.InnerPin() p2 = sdn.InnerPin() cable1.wires[0].connect_pin(p0) cable1.wires[0].connect_pin(p1) cable1.wires[0].connect_pin(p2) ep = EdifParser() ep.multibit_add_cable(definition, cable0) ep.multibit_add_cable(definition, cable2) ep.multibit_add_cable(definition, cable1) assert len(definition.cables) == 1 assert len(definition.cables[0].wires) == 3 assert len(definition.cables[0].wires[0].pins) == 0 assert len(definition.cables[0].wires[1].pins) == 3 assert len(definition.cables[0].wires[2].pins) == 0 assert p0 in definition.cables[0].wires[1].pins assert p1 in definition.cables[0].wires[1].pins assert p2 in definition.cables[0].wires[1].pins
class TestPrint(unittest.TestCase): netlist = sdn.Netlist(name='netlist') cable = sdn.Cable(name='cable', is_downto=False) instance = sdn.Instance() print(netlist) netlist.top_instance = instance print(netlist) print(cable) print(instance) library = netlist.create_library(name='lib') print(library) definition = sdn.Definition() print(definition) pin = sdn.Pin() cable = sdn.Cable() print(cable) wire = cable.create_wire() wire.connect_pin(pin) print(pin) print(wire) port = sdn.Port() port.direction = sdn.IN print(port)
def test_write_brackets_single_bit_offset(self): #def _write_brackets(self, bundle, low_index, high_index): composer = self.initialize_tests() port = sdn.Port() cable = sdn.Cable() cable_name = "my_cable" port_name = "my_port" port.name = port_name cable.name = cable_name port.create_pin() cable.create_wire() port.lower_index = 4 cable.lower_index = 4 composer._write_brackets(port, None, None) assert composer.file.compare("") composer.file.clear() composer._write_brackets(port, 4, None) assert composer.file.compare("") composer.file.clear() composer._write_brackets(port, None, 4) assert composer.file.compare("") composer.file.clear() composer._write_brackets(port, 4, 4) assert composer.file.compare("") composer.file.clear() composer._write_brackets(cable, None, None) assert composer.file.compare("") composer.file.clear() composer._write_brackets(cable, 4, None) assert composer.file.compare("") composer.file.clear() composer._write_brackets(cable, None, 4) assert composer.file.compare("") composer.file.clear() composer._write_brackets(cable, 4, 4) assert composer.file.compare("") composer.file.clear()
def setUp(self) -> None: self.cable = sdn.Cable()
def test_scalar_false(self): cable = sdn.Cable() cable.create_wire() cable.create_wire() self.assertTrue('is_scalar: False;' in cable.__str__())
def test_href_valid(self): instance = sdn.Instance() href = HRef.from_parent_and_item(None, instance) self.assertFalse(href.is_valid) definition = sdn.Definition() instance.reference = definition self.assertFalse(href.is_valid) library = sdn.Library() library.add_definition(definition) self.assertFalse(href.is_valid) netlist = sdn.Netlist() netlist.add_library(library) self.assertFalse(href.is_valid) netlist.top_instance = instance self.assertTrue(href.is_valid) cable = sdn.Cable() wire = sdn.Wire() href = HRef.from_sequence([instance, cable, wire]) self.assertFalse(href.is_valid) cable.add_wire(wire) self.assertFalse(href.is_valid) definition.add_cable(cable) self.assertTrue(href.is_valid) instance.reference = None self.assertFalse(href.is_valid) port = sdn.Port() pin = sdn.InnerPin() href = HRef.from_sequence([instance, port, pin]) self.assertFalse(href.is_valid) port.add_pin(pin) self.assertFalse(href.is_valid) definition.add_port(port) self.assertFalse(href.is_valid) instance.reference = definition self.assertTrue(href.is_valid) higher_definition = library.create_definition() higher_definition.add_child(instance) self.assertTrue(href.is_valid) higher_instance = sdn.Instance() higher_instance.reference = higher_definition netlist.top_instance = higher_instance self.assertFalse(href.is_valid) href = HRef.from_sequence([higher_instance, instance, cable, wire]) self.assertTrue(href.is_valid) higher_instance.reference = None self.assertFalse(href.is_valid) higher_definition.remove_child(instance) self.assertFalse(href.is_valid) definition.remove_cable(cable) self.assertFalse(href.is_valid) cable.remove_wire(wire) self.assertFalse(href.is_valid) cable.add_wire(wire) href = HRef.from_sequence([cable, wire]) self.assertFalse(href.is_valid) cable.remove_wire(wire) new_cable = sdn.Cable() new_cable.add_wire(wire) self.assertFalse(href.is_valid) href = HRef.from_parent_and_item(None, wire) self.assertFalse(href.is_valid) port.remove_pin(pin) new_port = sdn.Port() new_port.add_pin(pin) href = HRef.from_sequence([port, pin]) self.assertFalse(href.is_valid) href = HRef.from_parent_and_item(None, pin) self.assertFalse(href.is_valid) href = HRef.from_parent_and_item(None, definition) self.assertFalse(href.is_valid)
import spydrnet as sdn netlist = sdn.Netlist(name='netlist') cable = sdn.Cable(name='cable') instance = sdn.Instance() print(netlist) netlist.top_instance = instance print(netlist) print(cable) print(instance) library = netlist.create_library(name='lib') print(library) definition = sdn.Definition() print(definition) pin = sdn.Pin() cable = sdn.Cable() print(cable) wire = cable.create_wire() wire.connect_pin(pin) print(pin) print(wire) port = sdn.Port() port.direction = sdn.IN print(port)
def test_add_cable(self): cable = sdn.Cable() self.definition.add_cable(cable, position=0) self.assertTrue(cable in self.definition.cables) self.assertEqual(cable.definition, self.definition) self.assertEqual(self.definition.cables.count(cable), 1)
def test_remove_cables_from_outside_definition(self): cable = sdn.Cable() self.definition.remove_cables_from({cable})
def test_print_cable_name(self): cable = sdn.Cable('cable') wire = cable.create_wire() self.assertTrue("Contained by Cable.name 'cable'" in wire.__str__())
def test_write_invalid_name(self): composer = self.initialize_tests() o = sdn.Cable() o.name = "\\escaped_no_space" composer._write_name(o)
def test_write_none_name(self): composer = self.initialize_tests() o = sdn.Cable() composer._write_name(o)