Exemple #1
0
            next_instruction_index = temp
            pipeline_registers[-1].output.update(cycle_count, "WB")
            for register in pipeline_registers:
                if (register.input != None):
                    register.input.till_dead = 1
        else:
            next_instruction_index += 1

        if pipeline_registers[-1].output is not None:
            ALU(
                pipeline_registers[-1].output
            )  #output is the current instruction in the wb pipreg object. Varable can chance based on chosen object varable.
            pipeline_registers[-1].output.update(cycle_count, "WB")

        pipeline_registers[-1].output = None
        control.checkDataHazards(pipeline_registers)

        for index in reversed(range(len(pipeline_registers))):
            if pipeline_registers[index].input:
                if pipeline_registers[index].input.till_dead != -1:
                    if pipeline_registers[index].input.till_dead == 0:
                        pipeline_registers[index].input.dead = True
                    pipeline_registers[index].input.till_dead -= 1
                #print("SAFTY:", control.DataHazardFlag, " " , not control.forwardFlag, " " , index == 1)
                if control.DataHazardFlag and not control.forwardFlag and index == 1:
                    pipeline_registers[1].input.delayed = True
                    nop = pipeline_registers[index].input.make_nop(cycle_count)
                    pipeline_registers[index + 1].input = nop
                    pipeline_registers[index].output = nop

                pipeline_registers[index].input.update(