|
|
from UI import *
|
|
|
import tkinter as tk
|
|
|
from Clock import ClockStep
|
|
|
|
|
|
class SIG:
|
|
|
def __init__(self):
|
|
|
self.bx2, self.by2, self.dx, self.dy = 105, 558, 120, 16#设置sig_ctrl文字间隔
|
|
|
|
|
|
|
|
|
def show(self):# 依据SigObj[]的值显示控制信号(SigCtrl部件内的信号)
|
|
|
words = ['SigCtrl->ALU', 'SigCtrl->IR', 'SigCtrl->PC', 'SigCtrl->MEMORY',
|
|
|
'SigCtrl->R1', 'SigCtrl->R2', 'SigCtrl->R3', 'SigCtrl->R4']# 对于每个控制信号进行判断
|
|
|
for w in words:# 如果SigObj中该文字为False,则该文字非高亮显示
|
|
|
if cpu.SigObj[w][1] == False:
|
|
|
eval('self.' + w + '(cv, 0)')
|
|
|
for w in words:# 如果SigObj中该文字为True,则该文字高亮显示
|
|
|
if cpu.SigObj[w][1] == True:
|
|
|
eval('self.' + w + '(cv, 1)')
|
|
|
cv.update()# 更新画布
|
|
|
|
|
|
def init(self, cv: Canvas, root):
|
|
|
INS = tk.Label(root, text=cpu.CODE(), fg=BLACK, font=('微软雅黑', 12), bg=WHITE)# 根据参数显示INSCODE
|
|
|
INS.place(x=184, y=535, height=20, width=80, anchor=NW)#放置INSCODE
|
|
|
# 显示sig_ctrl各部分的名字
|
|
|
cv.create_text(110, 535, text="insCode", font=('微软雅黑', 12), fill=GOLD, anchor=NW)
|
|
|
cv.create_text(self.bx2, self.by2, text='->ALU', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.create_text(self.bx2, self.by2 + self.dy, text='->IR', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.create_text(self.bx2, self.by2 + self.dy * 2, text='->PC + 1', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.create_text(self.bx2, self.by2 + self.dy * 3, text='->MEMORY', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.create_text(self.bx2 + self.dx, self.by2, text='->R1', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.create_text(self.bx2 + self.dx, self.by2 + self.dy, text='->R2', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.create_text(self.bx2 + self.dx, self.by2 + self.dy * 2, text='->R3', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.create_text(self.bx2 + self.dx, self.by2 + self.dy * 3, text='->R4', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.update()#更新画布
|
|
|
def ALU(self, cv: Canvas, flag):
|
|
|
if flag:
|
|
|
cv.create_text(self.bx2, self.by2, text='->ALU', font=('微软雅黑', 10), anchor=NW, fill=GOLD)
|
|
|
else:
|
|
|
cv.create_text(self.bx2, self.by2, text='->ALU', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.update()
|
|
|
def IR(self, cv: Canvas, flag):
|
|
|
if flag:
|
|
|
cv.create_text(self.bx2, self.by2 + self.dy, text='->IR', font=('微软雅黑', 10), anchor=NW, fill=GOLD)
|
|
|
else:
|
|
|
cv.create_text(self.bx2, self.by2 + self.dy, text='->IR', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.update()
|
|
|
def PC(self, cv: Canvas, flag):
|
|
|
if flag:
|
|
|
cv.create_text(self.bx2, self.by2 + self.dy * 2, text='->PC + 1', font=('微软雅黑', 10), anchor=NW, fill=GOLD)
|
|
|
else:
|
|
|
cv.create_text(self.bx2, self.by2 + self.dy * 2, text='->PC + 1', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.update()
|
|
|
def MEM(self, cv: Canvas, flag):
|
|
|
if flag:
|
|
|
cv.create_text(self.bx2, self.by2 + self.dy * 3, text='->MEMORY', font=('微软雅黑', 10), anchor=NW, fill=GOLD)
|
|
|
else:
|
|
|
cv.create_text(self.bx2, self.by2 + self.dy * 3, text='->MEMORY', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.update()
|
|
|
|
|
|
def R1(self, cv: Canvas, flag):
|
|
|
if flag:
|
|
|
cv.create_text(self.bx2 + self.dx, self.by2, text='->R1', font=('微软雅黑', 10), anchor=NW, fill=GOLD)
|
|
|
else:
|
|
|
cv.create_text(self.bx2 + self.dx, self.by2, text='->R1', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.update()
|
|
|
def R2(self, cv: Canvas, flag):
|
|
|
if flag:
|
|
|
cv.create_text(self.bx2 + self.dx, self.by2 + self.dy, text='->R2', font=('微软雅黑', 10), anchor=NW, fill=GOLD)
|
|
|
else:
|
|
|
cv.create_text(self.bx2 + self.dx, self.by2 + self.dy, text='->R2', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.update()
|
|
|
def R3(self, cv: Canvas, flag):
|
|
|
if flag:
|
|
|
cv.create_text(self.bx2 + self.dx, self.by2 + self.dy * 2, text='->R3', font=('微软雅黑', 10), anchor=NW, fill=GOLD)
|
|
|
else:
|
|
|
cv.create_text(self.bx2 + self.dx, self.by2 + self.dy * 2, text='->R3', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.update()
|
|
|
def R4(self, cv: Canvas, flag):
|
|
|
if flag:
|
|
|
cv.create_text(self.bx2 + self.dx, self.by2 + self.dy * 3, text='->R4', font=('微软雅黑', 10), anchor=NW, fill=GOLD)
|
|
|
else:
|
|
|
cv.create_text(self.bx2 + self.dx, self.by2 + self.dy * 3, text='->R4', font=('微软雅黑', 10), anchor=NW, fill=GREY)
|
|
|
cv.update()
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
cpu = CPU()
|
|
|
cl = ClockStep()
|
|
|
cl.init(cv, root)
|
|
|
si=SIG()
|
|
|
# si.show()
|
|
|
|
|
|
# si.SIG_display()
|
|
|
si.init(cv, root)
|
|
|
mainloop()
|
|
|
time.sleep(cpu.time)
|
|
|
si.R4(cv,1)
|
|
|
time.sleep(cpu.time)
|
|
|
si.MEM(cv,1)
|
|
|
# bx2, by2, bw2, bh2 = 105, 560, 100, 20
|
|
|
# cv.create_rectangle(bx2, by2, bx2 + 170, by2 + 65, fill=BLACK, width=0)
|
|
|
# cv.create_rectangle(485, 469, 485 + 120, 469 + 9, fill=RED)
|
|
|
def left1(event):
|
|
|
print(event.x,event.y)
|
|
|
cv.bind('<Button-1>', left1)
|
|
|
root.mainloop() |