in design_utils/design.py [0:0]
def sanity_check(self):
insanity_list = [] # list of Inanities
# fronts check
fronts_1 = sum([len(block.get_fronts("task_name_dir")) for block in self.get_blocks() if block.type == "mem"])
fronts_2 = sum([len(block.get_fronts("task_dir_work_ratio")) for block in self.get_blocks() if block.type== "mem"])
if not fronts_1 == fronts_2:
pre_mvd_fronts_1 = [block.get_fronts("task_name_dir") for block in self.get_blocks() if block.type == "mem"]
pre_mvd_fronts_2 = [block.get_fronts("task_dir_work_ratio") for block in self.get_blocks() if block.type == "mem"]
raise UnEqualFrontsError
# all the tasks have pe and mem
for task in self.get_tasks():
pe_blocks = self.get_blocks_of_task_by_block_type(task, "pe")
mem_blocks = self.get_blocks_of_task_by_block_type(task, "mem")
if len(pe_blocks) == 0:
print("task:" + task.name + " does not have any pes")
insanity = Insanity("_", "_", "none")
insanity.set_block("_")
insanity.set_name("no_pe")
insanity_list.append(insanity)
pe_blocks = self.get_blocks_of_task_by_block_type(task, "pe")
print(insanity.gen_msg())
raise NoPEError
#break
elif (len(mem_blocks) == 0 and not("siink" in task.name)):
print("task:" + task.name + " does not have any mems")
insanity = Insanity("_", "_", "none")
insanity.set_block("_")
insanity.set_name("no_mem")
insanity_list.append(insanity)
print(insanity.gen_msg())
mem_blocks = self.get_blocks_of_task_by_block_type(task, "mem")
raise NoMemError
#break
# every pe or memory needs to be connected to a bus
for block in self.get_blocks():
if block.type in ["pe", "mem"]:
connectd_ics = [True for block_ in block.get_neighs() if block_.type =="ic" ]
if len(connectd_ics) > 1:
print("block: " + block.instance_name + " is connected to more than one ic")
insanity = Insanity("_", "_", "multi_bus")
insanity.set_name("multi_bus")
insanity_list.append(insanity)
print(insanity.gen_msg())
raise MultiBusBlockError
#break
elif len(connectd_ics) < 1:
print("block: " + block.instance_name + " is not connected any ic")
insanity = Insanity("_", "_", "none")
insanity.set_block(block)
insanity.set_name("no_bus")
insanity_list.append(insanity)
print(insanity.gen_msg())
raise NoBusError
#break
# every bus needs to have at least one pe and mem
for block in self.get_blocks():
if block.type in ["ic"]:
connectd_pes = [True for block_ in block.get_neighs() if block_.type =="pe" ]
connectd_mems = [True for block_ in block.get_neighs() if block_.type =="mem" ]
connectd_ics = [True for block_ in block.get_neighs() if block_.type =="ic" ]
system_ic_exist = self.check_system_ic_exist(block)
if len(connectd_mems) == 0 and not system_ic_exist:
insanity = Insanity("_",block, "bus_with_no_mem")
print(insanity.gen_msg())
if self.hardware_graph.generation_mode == "user_generated":
print("deactivated Bus with No memory error, since hardware graph was directly user generated/parsed ")
else:
raise BusWithNoMemError
"""
elif len(connectd_pes) > 0 and self.block_is_system_ic(block):
insanity = Insanity("_", block, "system_ic_with_pe")
insanity_list.append(insanity)
print(insanity.gen_msg())
if self.hardware_graph.generation_mode == "user_generated":
print(
"deactivated Bus with No Bus error, since hardware graph was directly user generated/parsed ")
else:
raise SystemICWithPEException
"""
elif len(connectd_pes) == 0 and not self.block_is_system_ic(block):
insanity = Insanity("_", block, "bus_with_no_pes")
insanity_list.append(insanity)
print(insanity.gen_msg())
if self.hardware_graph.generation_mode == "user_generated":
print("deactivated Bus with No Bus error, since hardware graph was directly user generated/parsed ")
else:
raise BusWithNoPEError
# every design needs to have at least on pe, mem, and bus
block_type_count_dict = {}
block_type_count_dict["mem"] = 0
block_type_count_dict["pe"] = 0
block_type_count_dict["ic"] = 0
for block in self.get_blocks():
block_type_count_dict[block.type] +=1
for type_, count in block_type_count_dict.items():
if count < 1:
print("no block of type " + type_ + " found")
insanity = Insanity("_", "_", "none")
insanity.set_name("not_enough_ip_of_certain_type")
insanity_list.append(insanity)
print(insanity.gen_msg())
raise NotEnoughIPOfCertainType
#break
# every block should host at least one task
for block in self.get_blocks():
if block.type == "ic": # since we unload
continue
if len(block.get_tasks_of_block()) == 0:
print( "block: " + block.instance_name + " does not host any tasks")
insanity = Insanity("_", "_", "none")
insanity.set_block(block)
insanity.set_name("no_task")
insanity_list.append(insanity)
print(insanity.gen_msg())
raise BlockWithNoTaskError