diff --git a/tools/oneclick/base/entity.py b/tools/oneclick/base/entity.py index 5c0aec06f212337d7abd32bc9ef47cb83fc54d33..b39b0bc8e7351d3d8309fe9854c2ba961baf93a7 100644 --- a/tools/oneclick/base/entity.py +++ b/tools/oneclick/base/entity.py @@ -56,15 +56,27 @@ class Generic: self.name = name self.type = type self.default = default - - def setPortDir(self, newDir): - self.dir = newDir + +class Constant: + def __init__(self, name, type, value=""): + + self.name = name + self.type = type + self.value = value + +class signal: + def __init__(self, name, type, default=""): + + self.name = name + self.type = type + self.default = default class Entity: - s_port_start = " PORT (\n" - s_port_map_start = " PORT MAP(\n" - s_generic_start = " GENERIC (\n" + s_port_start = " PORT (\n" + s_port_map_start = " PORT MAP(\n" + s_generic_start = " GENERIC (\n" + s_generic_map_start = " GENERIC MAP(\n" def __init__(self, name = ""): """ @@ -81,7 +93,9 @@ class Entity: self.longestGenericType = 8 def read_entity_from_file(self, path, name): - f = file((path + name + ".vhd"), "r") + fname = path + name + ".vhd" + if not(os.path.isfile(fname)): sys.exit('Error : Specified VHD file does not exist: ' + fname) + f = file(fname, "r") s = "" s = f.readline() # Read the entity name @@ -146,7 +160,45 @@ class Entity: s = s[0:i] + "\n" return s.strip() - def make_instance(self, inst_type="ENTITY"): + def make_instantiation(self, connect=True): + + if self.generics: + self.set_longest_generic_name() + self.set_longest_generic_type() + if self.ports: + self.set_longest_port_name() + self.set_longest_port_dir() + + # Create start + s_return = "u_inst_" + self.name + " : ENTITY work." + self.name + "\n" + + for i in range(len(self.generics)): + if(i == 0): + s_return = s_return + self.s_generic_map_start + s_generic = " " + self.generics[i].name.ljust(self.longestGenericName) + " => " + if(connect): + s_generic = s_generic + self.generics[i].name + if(i != len(self.generics)-1): + s_generic = s_generic + ",\n" + else: + s_generic = s_generic + "\n )\n" + s_return = s_return + s_generic + + for i in range(len(self.ports)): + if(i == 0): + s_return = s_return + self.s_port_map_start + s_port = " " + self.ports[i].name.ljust(self.longestPortName) + " => " + if(connect): + s_port = s_port + self.ports[i].name + if(i != len(self.ports)-1): + s_port = s_port + ",\n" + else: + s_port = s_port + "\n );\n" + s_return = s_return + s_port + + return s_return + + def make_definition(self, inst_type="ENTITY"): if self.generics: self.set_longest_generic_name() @@ -185,11 +237,11 @@ class Entity: return s_return - def make_entity_instance(self, indend = 0): - return self.apply_indend(self.make_instance("ENTITY"), indend) + def make_entity_definition(self, indend = 0): + return self.apply_indend(self.make_definition("ENTITY"), indend) - def make_component_instance(self, indend = 0): - return self.apply_indend(self.make_instance("COMPONENT"), indend) + def make_component_definition(self, indend = 0): + return self.apply_indend(self.make_definition("COMPONENT"), indend) def apply_indend(self, s, indend): s_indend = "" @@ -197,6 +249,10 @@ class Entity: s_indend = s_indend + " " s_return =s_indend + s.replace('\n', '\n' + s_indend) return (s_return) + + def comment(self, s): + s_return ="-- " + s.replace('\n', '\n' + "-- ") + '\n' + return (s_return) def set_longest_port_name(self): self.portNames = [] @@ -225,4 +281,26 @@ class Entity: def add_port(self, name, dir, type, default = ""): newPort = Port(name, dir, type, default) self.ports.append(newPort) - + + def add_generic(self, name, type, default = ""): + newGeneric = Generic(name, type, default) + self.generics.append(newGeneric) + + def replace_std_logic_vector_with_std_logic(self): + for i in self.ports: + if i.type == "std_logic_vector(0 downto 0)": + i.type = "std_logic" + elif i.type == "STD_LOGIC_VECTOR(0 DOWNTO 0)": + i.type = "STD_LOGIC" + + +class Architecture: + + def __init__(self, name = ""): + """ + """ + self.name = name + self.constants = [] + self.signals = [] + self.components = [] + \ No newline at end of file