• 大小: 131KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-06-12
  • 语言: Python
  • 标签: tomasulo  python  

资源简介

python+tkinter实现Tomasulo算法的可视化模拟。

资源截图

代码片段和文件信息

import sysos
import time
import tkinter as tk
from tkinter import ttk
import threading
#       指令类
#   name为指令名称,opr1~opr3为操作数
class instruction:
    def __init__(selfnameopr1=‘None‘opr2=‘None‘opr3=‘None‘):
        self.name=name
        self.opr1=opr1
        self.opr2=opr2
        self.opr3=opr3
        self.started=False
        self.executed=False
        self.written=False
    

#       指令状态类
#      number指令序号,op该指令操作类型,start_time流出时钟,execute_time执行时钟,started是否流出,executed是否进入执行阶段,written是否写会
class ins_condition:
    def __init__(selfnumberopexecute_timestart_time=0):
        self.number=number
        self.op=op
        self.start_time=start_time
        self.execute_time=execute_time
        self.started=False
        self.executed=False
        self.ex_Rb_number=‘None‘
        self.written=False
    
#       保留站类
#   Op指示该保留站可执行何种类型的操作,cur_Op指示当前该保留站正在执行的操作类型,QjQk将产生操作数的保留站号,VjVk操作数的值,
#   Busy为yes表示该保留站“忙”,A仅load和store指令有该项,表示立即数或计算后的地址,number为该保留站序号
class reservation_station:
    def __init__(selfOpnumbercur_Op=‘None‘Qj=‘None‘Qk=‘None‘Vj=‘None‘Vk=‘None‘Busy=FalseA=‘None‘):
        self.Op=Op
        self.cur_Op=cur_Op
        self.number=number
        self.Qj=Qj
        self.Qk=Qk
        self.Vj=Vj
        self.Vk=Vk
        self.Busy=Busy
        self.A=A
        self.started_time=‘None‘
        self.result=‘None‘
    def finis(self):
        self.Busy=False
        self.cur_Op=‘None‘
        self.Qj=‘None‘
        self.Qk=‘None‘
        self.Vj=‘None‘
        self.Vk=‘None‘
        self.A=‘None‘
        self.started_time=‘None‘
        self.result=‘None‘
class register:
    def __init__(selfnameval=0):
        self.name=name
        self.val=val

#检查对应操作是否有保留站可用,可用则返回相应保留站号,否则返回-1
def available_reservation_station(op):
    if op==‘L.D‘:
        for i in range(13):
            if not Reservation_station_state[i].Busy:
                return i
    elif op==‘ADD.D‘ or op==‘SUB.D‘:
        for i in range(36):
            if not Reservation_station_state[i].Busy:
                return i
    elif op==‘DIV.D‘ or op==‘MUL.D‘:
        for i in range(68):
            if not Reservation_station_state[i].Busy:
                return i
    else:
        return -1

#用到的寄存器对应的编号
Regs={‘F0‘:0‘F2‘:2‘F4‘:4‘F6‘:6‘F8‘:8‘F10‘:10‘R2‘:11‘R3‘:12}


#不同指令对应的延迟时间
Delay_time={‘L.D‘:2‘ADD.D‘:3‘SUB.D‘:3‘DIV.D‘:41‘MUL.D‘:11}

try: 
    ins=open(‘instructions.txt‘)
except baseException:
    print(‘未打开相应指令文本文件!‘)
    os._exit(0)

ins=ins.readlines()

#       总指令数量
instruction_quantity=len(ins)

#指令表
instructions=[]
for x in ins:
    x=x.replace(‘\t‘‘‘)
    x=x.replace(‘ ‘‘‘)
    i=0
    while not(x[i-1]==‘.‘and x[i]==‘D‘):
        i+=1
    i+=1
    op=str(x[1:i])
    j=i+1
    while x[j]!=‘‘:
        j+=1
    op1=str(x[i:j])
    j+=1
    if x[j]<=‘9‘ and x[j]>=‘0‘:
        #load指令
        #op3存立即数
        i=j
  

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件      175241  2019-05-20 17:48  data\Readme.docx
     文件         109  2019-05-16 19:32  data\instructions.txt
     文件       17418  2019-05-20 17:57  data\tomasulo_simulation.py
     目录           0  2019-05-20 17:49  data\

评论

共有 条评论