def openImage(self, fn): """ Open the tileset image and cut into tiles. fn - the path to the tileset image. """ #get the image, and make sure it's pixel dimensions are consistent #tilesets have 1 spacing between each tile, #so adding 1 should give a multiple of the tilesize+1 tilesetImage = data.getImage(fn) tilesetImage.set_colorkey(self.transparency) data.check(((tilesetImage.get_width()+1)%(self.tileSize[0]+1))==0, fn) data.check(((tilesetImage.get_height()+1)%(self.tileSize[1]+1))==0, fn) dimensions = ((tilesetImage.get_width()+1)/(self.tileSize[0]+1), (tilesetImage.get_height()+1)/(self.tileSize[1]+1)) #iterate over each tile, cutting it out and adding to our list #go across each row in turn to get index numbering correct self.tiles = [] for y in range(0, dimensions[1]): for x in range(0, dimensions[0]): tile = tilesetImage.subsurface((x*(self.tileSize[0]+1), y*(self.tileSize[1]+1), self.tileSize[0], self.tileSize[1])) self.tiles.append(tile) #calculate offset self.tileOffset = ((globs.TILESIZE[0]-self.tileSize[0])/2, globs.TILESIZE[1]-self.tileSize[1])
def openImage(self, fn): """ Open the tileset image and cut into tiles. fn - the path to the tileset image. """ #get the image, and make sure it's pixel dimensions are consistent #tilesets have 1 spacing between each tile, #so adding 1 should give a multiple of the tilesize+1 tilesetImage = data.getImage(fn) tilesetImage.set_colorkey(self.transparency) data.check( ((tilesetImage.get_width() + 1) % (self.tileSize[0] + 1)) == 0, fn) data.check( ((tilesetImage.get_height() + 1) % (self.tileSize[1] + 1)) == 0, fn) dimensions = ((tilesetImage.get_width() + 1) / (self.tileSize[0] + 1), (tilesetImage.get_height() + 1) / (self.tileSize[1] + 1)) #iterate over each tile, cutting it out and adding to our list #go across each row in turn to get index numbering correct self.tiles = [] for y in range(0, dimensions[1]): for x in range(0, dimensions[0]): tile = tilesetImage.subsurface( (x * (self.tileSize[0] + 1), y * (self.tileSize[1] + 1), self.tileSize[0], self.tileSize[1])) self.tiles.append(tile) #calculate offset self.tileOffset = ((globs.TILESIZE[0] - self.tileSize[0]) / 2, globs.TILESIZE[1] - self.tileSize[1])
def login(): user_id = request.args.get("uname",None) password = request.args.get("pass",None) if request.method == 'POST': #check login, send to private page if successful if data.check(user_id, password): session['username'] = request.args.get("uname",None) return redirect("/user1") else: flash("Invalid Username or Password!") else: if 'username' in session and data.check(user_id,password): return redirect("/user1") return render_template("login.html")
def checkPro(): print "获取当前平台的工程数量:\n",lib.getProjectCount() p_Num=lib.getProjectCount() #SQL从数据库获取工程名列表_list get_data=data.check() _list=get_data.getProName() #比较接口获取工程数量同数据库工程数量 if int(p_Num) == int(len(_list)): print('获取当前平台的总工程数量测试结果:Pass') else: print('获取当前平台的总工程数量测试结果:Fail') raise Exception,("Project num not match!") pN="s"*128 p=[] flag=1 for i in range(p_Num): #查询所有工程名称 lib.getProjectName(i,pN,len(pN)) p.append(pN.split(a)[0]) #过去输出字符串中的a(空格) #将接口获取的工程名同数据库取出的工程列表_list进行匹配,flag=1为无匹配项 for i in _list: # print i if pN.strip(a)==i: flag=0 else: pass if flag==1: print pN.strip(a) break if flag==0: print('工程名称获取测试结果:Pass') else: print('工程名称获取测试结果:Fail') raise Exception,("Project not match!") time.sleep(5)
def testName_testCaseInfo(self): testCaseClassName = testCaseName = classN = "t"*1024 sqlInfo = data.check() testCaseClassName=sqlInfo.getTestCaseClassName(configList[4]) #从数据库获取测试用例类名称 classCount = lib.getTestCaseClassCount() #从接口获取测试用例类总数 for i in range(classCount): flag = 1 lib.getTestCaseClassName(i, classN, len(classN)) #"根据索引,获取分类下的测试用例类名称" for sqlCaseClassName in testCaseClassName: i = sqlCaseClassName # print "class=",i if classN.strip(a) == i.decode('utf-8').encode('GB18030'): #从数据库获得的类名进行编码从unicode转成str #从接口获取的用例分类名与数据库内获得的用例分类名进行查找 flag = 0 sqlCaseName = sqlInfo.getTestCaseName(configList[4],i) #从数据库获取测试用例名称 # print sqlCaseName caseCount = lib.getTestCaseCount(i.decode('utf-8').encode('GB18030')) #获取测试用例分类下测试用例数量 for c in range(caseCount): #调用接口遍历测试用例名称 caseFlag = 1 lib.getTestCaseName(i.decode('utf-8').encode('GB18030'),c,testCaseName,1024) #根据索引c获取测试用例名称 for n in sqlCaseName: if testCaseName.strip(a)==n: #数据库获得的用例名称和函数内获得的用例名称进行比较,找到匹配则caseFlag=0 caseFlag=0 if caseFlag == 1: #数据库和函数获得的数据不匹配直接退出遍历 break if flag == 1: break assert flag == 0,"获取测试用例分类失败!" print "获取测试用例分类成功!" assert caseFlag == 0,"获取测试用例名称失败!" print "获取测试用例名称成功!" #获取用例失败时进行断言 #获取用例名称时进行断言
def checkPro(): print "获取当前平台的工程数量:\n",lib.getProjectCount() p_Num=lib.getProjectCount() get_data=data.check() _list=get_data.getProName() print(_list) for i in _list: print i.encode('GB18030') if int(p_Num) == int(len(_list)): print('获取当前平台的总工程数量测试结果:Pass') else: print('获取当前平台的总工程数量测试结果:Fail') pN="s"*128 p=[] flag=1 for i in range(p_Num): #查询所有工程名称 lib.getProjectName(i,pN,len(pN)) p.append(pN.split(a)[0]) #过去输出字符串中的a(空格) #将接口获取的工程名同数据库取出的工程列表_list进行匹配,flag=1为无匹配项 for i in _list: if pN.strip(a)==i: flag=0 else: pass if flag==1: print pN.strip(a) break if flag==0: print('工程名称获取测试结果:Pass') else: print('工程名称获取测试结果:Fail') time.sleep(5)
def writeComment(usr, n, comment, parent, cid): """Writes a comment, adding it to the comment.txt file""" comment = data.check(comment) f = open('comments.txt', 'a') dts = data.timenow() f.write(usr + '@%' + n + '@%' + comment + '@%' + dts + '@%' + parent + '@%' + cid + '\n') f.close() print data.header print "<h1>Comment has been posted</h1>" print "<form action='pageform2.py' method='GET'>" + userdata print "<input type='hidden' name='n' value=" + n + "><input type='submit' name='display' value='Click to go back' class='linkbutton'></form>" print data.footer
def newpage(name, newpost, usr): """Creates a new page in the pages.txt file""" name = data.check(name) newpost = data.check(newpost) f = open('posts.txt') s = f.read() f.close() lst = s.split('\n') lst = lst[:len(lst)-1] if len(lst) == 0: pagename = '1' else: newl = lst[len(lst)-1].split('@%') pagename = str(int(newl[1]) + 1) dts = data.timenow() f = open('posts.txt', 'a') f.write(name + '@%' + pagename + '@%' + usr + '@%' + newpost + "@%" + dts + '\n') f.close() print data.header print "Your page has been created. Click <form class='inform' action='pageform2.py' method='GET'><input type='hidden' name='n' value=" + pagename + ">" + userdata print "<input type='submit' class='linkbutton' name='display' value='Here'></form> to visit the page." print data.footer
def newpage(name, newpost, usr): """Creates a new page in the pages.txt file""" name = data.check(name) newpost = data.check(newpost) f = open('posts.txt') s = f.read() f.close() lst = s.split('\n') lst = lst[:len(lst) - 1] if len(lst) == 0: pagename = '1' else: newl = lst[len(lst) - 1].split('@%') pagename = str(int(newl[1]) + 1) dts = data.timenow() f = open('posts.txt', 'a') f.write(name + '@%' + pagename + '@%' + usr + '@%' + newpost + "@%" + dts + '\n') f.close() print data.header print "Your page has been created. Click <form class='inform' action='pageform2.py' method='GET'><input type='hidden' name='n' value=" + pagename + ">" + userdata print "<input type='submit' class='linkbutton' name='display' value='Here'></form> to visit the page." print data.footer
def login(): if 'user' in session: return private1() if request.method == 'GET': return render_template("login.html") else: user_id = request.form["uname"] password = request.form["pw"] #check login, send to private page if successful if data.check(user_id, password): session['user'] = user_id return private1() else: flash("Invalid Username or Password!") return redirect("/login")
def submit(wrd, usr): print data.header txt = open('words.txt').read() open('words.txt').close() fle = open('words.txt', 'a') if wrd in txt: print """<font color="red"><h2><center>We're sorry, but that word has already been used. Try another one.</center></h2></font>""" elif not wordCheck(wrd, data.subsplit('words.txt', '@%')): print """<font color="red"><h2><center>We're sorry, but that word begins with a different letter than the last word ends with or is not a legal word. Try another one.</center></h2></font>""" else: fle.write( data.numbercheck(data.check(wrd)) + '@%' + usr + '@%' + data.timenow() + '\n') print """<font color="green"><h2><center>Thank you for your submission!</center></h2></font>""" print "<form action='game.py' method='GET'>" + userdata + "<input type='submit' class='linkbutton' value='Go Back' name='return'></form>" print data.footer fle.close()
def test2OutputSignalInfo(self): exceptOutputSignal = [] sqlInfo = data.check() signalInfo = sqlInfo.getSignalInfo(configList[4]) #从数据库中获取信号信息 dom = xmlManage.lxmlReaderModify(signalInfo) signalName = dom.getTabNodeValue("//Routing/@name") #获取数据库中的SignalName for signal in signalName: recvFlag = dom.getTabNodeValue("//Routing[@name='%s']/@recvFlag"%signal) sendFlag = dom.getTabNodeValue("//Routing[@name='%s']/@sendFlag"%signal) if len(recvFlag[0]) == 0 or recvFlag[0] == sendFlag[0]: #如果recvFlag为空或者输入信号等于输出信号则为输出信号 exceptOutputSignal.append(signal) print exceptOutputSignal exceptOutputSignalNum = len(exceptOutputSignal) #从数据库得到的输出信号的数量 acutalOutputSignalNum = lib.getOutputSignalCount() #从接口获取输出信号数量 case1.isNotEqual(exceptOutputSignalNum,acutalOutputSignalNum,'','') if exceptOutputSignalNum == acutalOutputSignalNum: for i in range (acutalOutputSignalNum): outputSignalName = "getoutputSignalName" lib.getOutputSignalName(i,outputSignalName,len(outputSignalName)) #实际的输出信号名称 acutalOutputSignalName = outputSignalName.strip('\x00') for j in range (exceptOutputSignalNum): print "acutalOutputSignalName",acutalOutputSignalName if acutalOutputSignalName == exceptOutputSignal[j]: print "exceptOutputSignal",exceptOutputSignal[j] packId = dom.getTabNodeValue("//Routing[@name='%s']/@packID"%exceptOutputSignal[j]) #在信号信息中根据信号名称获取到PackID exceptParamName = dom.getTabNodeValue("//Struct[@ID='%s']/Param/@name"%packId[0]) #在Struct信息中根据ID信息获取到参数名称 exceptParamNameNum = len(exceptParamName) #数据库中存储的信号的参数个数 actualParamNameNum = lib.getSignalParamCount(acutalOutputSignalName) #接口获取的信号的参数个数 case1.isNotEqual(exceptParamNameNum,actualParamNameNum,'','') #判断信号的参数个数是否相等 if exceptParamNameNum == actualParamNameNum: actualParaName = [] for k in range(actualParamNameNum): signalParamName = "getSignalParamName" lib.getSignalParamName(acutalOutputSignalName,k,signalParamName,19) actualParaName.append(signalParamName.strip('\x00')) #获取接口信号参数的名称 case1.isNotEqual(exceptParamName,actualParaName,'','') print exceptParamName,actualParaName break elif j == (len(exceptOutputSignal)-1) and acutalOutputSignalName != exceptOutputSignal[j]: #循环至列表结尾且输出信号名称的实际值与期望值不一致则失败 case1.isNotEqual(exceptOutputSignal[j],acutalOutputSignalName,'','')
def fileTest(): print "加载工程:\n",lib.loadProject('cl_test1') dir = "/" count=lib.getFileCount(dir) print "获取对应目录上的文件个数:\n",count get_data=data.check() SqlList=get_data.getFileResources('cl_test1') if count == len(SqlList): pass else: print "Wrong" exit() fileName = "fileName"*12 flag=1 for i in range(count): lib.getFileName(dir,i,fileName,len(fileName)) print "根据目录与文件索引,返回文件名称:\n",fileName for c in SqlList: if fileName.strip(a).strip('/') == c: flag=0 else: pass if flag==1: print fileName+"**********" break time.sleep(5) fileContent = "fileContent"*300 print lib.getFileContent(fileName,fileContent,len(fileContent)) print "修改之前根据文件名,返回文件内容:\n",fileContent setFileContent = '''<?xml version="1.0"?> <Layout> <Config mdiarea="0"/> </Layout>''' print "根据文件名,设置文件内容",lib.setFileContent(fileName,setFileContent) fileContent = "fileContent"*300 lib.getFileContent(fileName,fileContent,len(fileContent)) print "修改之后根据文件名,返回文件内容:\n",fileContent
def testName_fileResource(self): dir = "/" count=lib.getFileCount(dir) print "获取对应目录上的文件个数:\n",count get_data=data.check() SqlList=get_data.getFileResources(configList[4]) if count == len(SqlList): pass else: print "get File Count Wrong" exit() fileName = "fileName"*12 flag=1 for i in range(count): assert lib.getFileName(dir,i,fileName,len(fileName)) == 0,'获得资源文件名称失败' print "根据目录与文件索引,返回文件名称:\n",fileName for c in SqlList: if fileName.strip(a).strip('/') == c: flag=0 else: pass if flag==1: # print fileName+"**********" break time.sleep(5) fileContent = fileContent2 = "fileContent"*300 assert lib.getFileContent(fileName,fileContent,len(fileContent)) == 0,'获得文件内容失败' print "修改之前根据文件名,返回文件内容:\n",fileContent setFileContent = '''<?xml version="1.0"?> <Layout> <Config mdiarea="0"/> </Layout>''' print "根据文件名,设置文件内容" assert lib.setFileContent(fileName,setFileContent) == 0,'设置文件内容失败' # fileContent = "fileContent"*300 lib.getFileContent(fileName,fileContent2,len(fileContent)) print "修改之后根据文件名,返回文件内容:\n",fileContent2
def build_tm_sim(self, file): lines = read_file(file) i = 0 while i < len(lines): line = lines[i] if line[0] == 'bloco' and (len(line) == 3 or len(line) == 4): name = line[1] init_state = line[2] self.blocks[name] = Block(init_state) i += 1 line = lines[i] while line[0] != 'fim': if check(line): self.blocks[name].add_state(line) else: self.finalize = True break i += 1 line = lines[i] else: print('Arquivo não está no formato correto.') self.finalize = True i += 1
def execute():#执行一个clock周期中每一阶段的语句 global ret_pc global jmp_pc global call_pc global pred_pc global w_icode global w_valE global w_valM global w_dstE global w_dstM global m_icode global m_valE global m_valM global m_dstE global m_dstM global e_icode global e_bch global e_valE global e_valM global e_dstE global e_dstM global d_icode global d_ifunc global d_valC global d_valA global d_valB global d_dstE global d_dstM global d_srcA global d_srcB global f_icode global f_ifunc global f_ra global f_rb global f_valC global f_valP global total_cycle global valid_cycle while(data.isend()==False):#如果程序的结束状态为假,继续执行 #data.show() #global clocknum #clocknum+=1 #print("CLOCK_NO:%d" %(clocknum)) #PipeClock.PipeClock(); ret_pc="" jmp_pc="" call_pc="" pred_pc="" valid_cycle=data.intread("valid_cycle") total_cycle=data.intread("total_cycle") total_cycle+=1 #print("CLOCK-------------------------------") #WriteBack--------------------------------- #print("writeback:") w_icode=data.read("W_icode")#从外部寄存器读入信号 w_valE=data.read("W_valE") w_valM=data.read("W_valM") w_dstE=data.read("W_dstE") w_dstM=data.read("W_dstM") if(w_icode=="0"):#nop nothing() elif(w_icode=="1"):#halt 如果halt阶段执行完writeback阶段,程序就结束了,并且强行清空之前的4个阶段 data.write("M_index","X") data.write("M_icode","0") data.write("E_index","X") data.write("E_icode","0") data.write("D_index","X") data.write("D_icode","0") data.write("pc","X") data.write("F_icode","0") data.setend() elif(w_icode=="2"):#rrmovl data.RegWrite(w_dstE,w_valE) elif(w_icode=="3"):#irmovl data.RegWrite(w_dstE,w_valE) elif(w_icode=="4"):#rmmovl nothing() elif(w_icode=="5"):#mrmovl data.RegWrite(w_dstE,w_valM) elif(w_icode=="6"):#op data.RegWrite(w_dstE,w_valE) elif(w_icode=="7"):#jmp nothing() elif(w_icode=="8"):#call data.RegWrite("4",w_valE) elif(w_icode=="9"):#ret data.RegWrite("4",w_valE) elif(w_icode=="a"):#push data.RegWrite("4",w_valE) elif(w_icode=="b"):#popl data.RegWrite("4",w_valE) data.RegWrite(w_dstE,w_valM) elif(w_icode=="c"):#iaddl data.RegWrite(w_dstE,w_valE) elif(w_icode=="d"):#leave data.RegWrite("4",w_valE) data.RegWrite("5",w_valM) if(w_icode=="0"): nothing() else: valid_cycle+=1 #Memory-------------------------------------- #print("Memory:") m_icode="" m_valE="" m_valM="" m_dstE="" m_dstM="" m_icode=data.read("M_icode")#从外部读入信号 m_valE=data.read("M_valE") m_valM=data.read("M_valM") m_dstE=data.read("M_dstE") m_dstM=data.read("M_dstM") if(m_icode=="0"):#nop m_valE="" m_valM="" m_dstE="" m_dstM="" elif(m_icode=="1"):#halt 一旦halt出现就要强行结束之前的3个阶段 data.write("E_index","X") data.write("E_icode","0") data.write("D_index","X") data.write("D_icode","0") data.write("pc","X") data.write("F_icode","0") elif(m_icode=="2"):#rrmovl nothing() elif(m_icode=="3"):#irmovl nothing() elif(m_icode=="4"):#rmmovl data.MemoryWrite(m_dstM,m_valM) elif(m_icode=="5"):#mrmovl m_valM=data.MemoryRead(m_dstM) elif(m_icode=="6"):#op nothing() elif(m_icode=="7"):#jmp nothing() elif(m_icode=="8"):#call data.MemoryWrite(m_valE,m_valM) elif(m_icode=="9"):#ret ret阶段也要清空之前的所有阶段,直到下一步的指令明确 m_valM=data.MemoryRead(m_dstM) ret_pc=arc(m_valM)# 从内存中读取出来的pc,用于更新pred_pc data.write("E_index","X") data.write("E_icode","0") data.write("D_index","X") data.write("D_icode","0") data.write("pc","X") data.write("F_icode","0") elif(m_icode=="a"):#push data.MemoryWrite(m_valE,m_valM) elif(m_icode=="b"):#pop m_valM=data.MemoryRead(m_dstM) elif(m_icode=="c"):#iaddl nothing() elif(m_icode=="d"):#leave m_valM=data.MemoryRead(m_dstM) data.write("W_index",data.read("M_index")) data.write("W_icode",m_icode)#将信号写入下一阶段 data.write("W_valE",m_valE) data.write("W_valM",m_valM) data.write("W_dstE",m_dstE) data.write("W_dstM",m_dstM) #Execute---------------------------------------------- #print("Execute:") e_icode="" e_bch="" e_valE="" e_valM="" e_dstE="" e_dstM="" e_icode=data.read("E_icode")#从外部读入信号 e_ifunc=data.read("E_ifunc") e_valC=data.read("E_valC") e_valA=data.read("E_valA") e_valB=data.read("E_valB") e_dstE=data.read("E_dstE") e_dstM=data.read("E_dstM") srcA=data.read("srcA") srcB=data.read("srcB") if(e_icode=="0"):#nop nothing() e_bch="" e_valE="" e_valM="" e_dstE="" e_dstM="" elif(e_icode=="1"):#halt 清空之前所有阶段 data.write("D_index","X") data.write("D_icode","0") data.write("pc","X") data.write("F_icode","0") elif(e_icode=="2"):#rrmovl e_valE=e_valA elif(e_icode=="3"):#irmovl e_valE=e_valC elif(e_icode=="4"):#rmmovl aluA=e_valB aluB=e_valC e_dstM=data.alu("0",aluA,aluB) e_valM=e_valA elif(e_icode=="5"):#mrmovl aluA=e_valB aluB=e_valC e_dstM=data.alu("0",aluA,aluB) e_dstE=srcA elif(e_icode=="6"):#op aluA=e_valA aluB=e_valB e_valE=data.alu(e_ifunc,aluA,aluB) e_dstE=srcB elif(e_icode=="7"):#jmp if(data.check(e_ifunc)):#根据CF,SF,OF,ZF判断是否跳转 data.write("D_index","X") data.write("D_icode","0") data.write("pc","X") data.write("F_icode","0") jmp_pc=arc(e_valC)#如果要改变当前流程的话,记录对应的pc值 e_bch=jmp_pc elif(e_icode=="8"):#call e_valM=e_valB#将返回地址存入栈中 aluA=e_valA aluB="04000000" e_valE=data.alu("1",aluB,aluA) data.write("D_index","X") data.write("D_icode","0") data.write("pc","X") data.write("F_icode","0") call_pc=arc(e_valC) e_bch=call_pc elif(e_icode=="9"):#ret aluA=e_valA aluB="04000000" e_valE=data.alu("0",aluA,aluB) data.write("D_index","X") data.write("D_icode","0") data.write("pc","X") data.write("F_icode","0") e_dstM=e_valA elif(e_icode=="a"):#push aluA=e_valB aluB="04000000" e_valE=data.alu("1",aluB,aluA) e_valM=e_valA elif(e_icode=="b"):#popl aluA=e_valB aluB="04000000" e_valE=data.alu("0",aluA,aluB) e_dstM=e_valB e_dstE=srcA elif(e_icode=="c"):#iaddl aluA=e_valA aluB=e_valC e_valE=data.alu("0",aluA,aluB) e_dstE=srcA elif(e_icode=="d"):#leave aluA=e_valA aluB="04000000" e_valE=data.alu("0",aluB,aluA) e_dstM=e_valA e_dstE="4" data.write("M_index",data.read("E_index")) data.write("M_icode",e_icode)#把信号写入到下一阶段 data.write("bch",e_bch) data.write("M_valE",e_valE) data.write("M_valM",e_valM) data.write("M_dstE",e_dstE) data.write("M_dstM",e_dstM) #Decode---------------------------------- #print("Decode:") d_icode="" d_ifunc="" d_valC="" d_valA="" d_valB="" d_dstE="" d_dstM="" d_srcA="" d_srcB="" d_icode=data.read("D_icode")#从外部读入信号 d_ifunc=data.read("D_ifunc") ra=data.read("rA") rb=data.read("rB") d_valC=data.read("D_valC") d_valP=data.read("D_valP") if(d_icode=="0"):#nop nothing() d_ifunc="" d_valC="" d_valA="" d_valB="" d_dstE="" d_dstM="" d_srcA="" d_srcB="" elif(d_icode=="1"):#halt nothing() elif(d_icode=="2"):#rrmovl Temp=forwarding(ra)#判断是否存在加载使用冒险 if(Temp=="X"): data.setstall()#存在就暂停 else: d_valA=Temp#否则取得forwarding的值 d_dstE=rb d_srcA=ra d_srcB=rb elif(d_icode=="3"):#irmovl d_valA=d_valC d_dstE=rb elif(d_icode=="4"):#rmmovl------------------------------------------------------------- Temp=forwarding(ra)#判断要读取的寄存器a是否存在冒险 if(Temp=="X"): data.setstall() else: d_valA=Temp Temp=forwarding(rb)#判断要读取的寄存器b是否存在冒险 if(Temp=="X"): data.setstall() else: d_valB=Temp d_srcA=ra d_srcB=rb elif(d_icode=="5"):#mrmovl------------------------------------------------------- Temp=forwarding(rb)#判断寄存器b是否存在冒险 if(Temp=="X"): data.setstall() else: d_valB=Temp d_dstE=ra d_srcA=ra d_srcB=rb elif(d_icode=="6"):#op------------------------------------------------------------------------ Temp=forwarding(ra)#判断寄存器a是否存在冒险 if(Temp=="X"): data.setstall() else: d_valA=Temp Temp=forwarding(rb)#判断寄存器b是否存在冒险 if(Temp=="X"): data.setstall() else: d_valB=Temp d_srcA=ra d_srcB=rb d_dstE=rb elif(d_icode=="7"):#jmp---------------------- nothing() elif(d_icode=="8"):#call--------------------- Temp=forwarding("4")#特别要注意的是call隐式调用了esp,需要判断是否冒险 if(Temp=="X"): data.setstall() else: d_valA=Temp d_valB=d_valP d_srcA="4" d_dstE="4" elif(d_icode=="9"):#ret-------------------------------------- Temp=forwarding("4")#ret 调用了esp,需要判断冒险 if(Temp=="X"): data.setstall() else: d_valA=Temp d_dstE="4" d_srcA="4" elif(d_icode=="a"):#push------------------------------------- Temp=forwarding(ra)#push 同时调用了esp ebp需要同时判断冒险 if(Temp=="X"): data.setstall() else: d_valA=Temp Temp=forwarding("4") if(Temp=="X"): data.setstall() else: d_valB=Temp d_srcA=ra d_srcB="4" d_dstE="4" elif(d_icode=="b"):#popl--------------------------------------------------------------- Temp=forwarding("4")#pop 调用了esp,需要判断冒险 if(Temp=="X"): data.setstall() else: d_valB=Temp d_dstE=ra d_srcA=ra d_srcB="4" elif(d_icode=="c"):#iaddl------------------------------------------------------------- Temp=forwarding(ra)#判断iaddl的寄存器冒险 if(Temp=="X"): data.setstall() else: d_valA=Temp d_valB=d_valC d_dstE=ra d_srcA=ra elif(d_icode=="d"):#leave------------------------------------------------------------ Temp=forwarding("5")#leave要读取ebp,需要判断冒险 if(Temp=="X"): data.setstall() else: d_valA=Temp d_dstE="4" d_dstM="5" d_srcA="5" if(data.isstall()):#如果说cycle中的decode和fetch处于暂停状态的话,在下一个Execute阶段需要插入一个bubble data.write("E_icode","0") data.write("E_index","X") else:#其他情况下,正常复制信号到外部寄存器 data.write("E_index",data.read("D_index")) data.write("E_icode",d_icode) data.write("E_ifunc",d_ifunc) data.write("E_valC",d_valC) data.write("E_valA",d_valA) data.write("E_valB",d_valB) data.write("E_dstE",d_dstE) data.write("E_dstM",d_dstM) data.write("srcA",d_srcA) data.write("srcB",d_srcB) #Fetch--------------------------------------------- #print("Fetch:") f_icode="" f_ifunc="" f_ra="" f_rb="" f_valC="" f_valP="" f_icode=data.read("F_icode")#从外部寄存器读入信号 pc=data.read("pc") if(pc=="X"):#如果Fetch阶段因为stall不能取指,那么Fetch阶段本次不执行,但是需要将stall的一回合锁定取消,以保证下次能取指 data.write("D_index","X") data.write("D_icode","0") data.write("F_icode","1") f_ifunc="" f_ra="" f_rb="" f_valC="" f_valP="" data.write("D_ifunc",f_ifunc) data.write("rA",f_ra) data.write("rB",f_rb) data.write("D_valC",f_valC) data.write("D_valP",f_valP) elif(f_icode=="0"):#如果Fetch阶段是因为ret和jXX被清零,那么同样恢复合法状态,保证下次能取指 data.write("D_index","X") data.write("D_icode","0") data.write("F_icode","1") f_ifunc="" f_ra="" f_rb="" f_valC="" f_valP="" data.write("D_ifunc",f_ifunc) data.write("rA",f_ra) data.write("rB",f_rb) data.write("D_valC",f_valC) data.write("D_valP",f_valP) else:#如果就是合法,那么就根据内容正常取指 pred_pc=data.next(pc) s=data.MemoryGet(pc) if(s[0]=="0"):#nop nothing() if(s[0]=="1"):#halt nothing() if(s[0]=="2"):#rrmovl f_ra=s[2] f_rb=s[3] if(s[0]=="3"):#irmovl f_rb=s[3] f_valC=s[4:12] if(s[0]=="4"):#rmmovl f_ra=s[2] f_rb=s[3] f_valC=s[4:12] if(s[0]=="5"):#mrmovl f_ra=s[2] f_rb=s[3] f_valC=s[4:12] if(s[0]=="6"):#op f_ra=s[2] f_rb=s[3] if(s[0]=="7"):#jmp f_valC=s[2:10] if(s[0]=="8"):#call f_valC=s[2:10] f_ra="4" if(s[0]=="9"):#ret f_ra="4" nothing() if(s[0]=="a"):#push f_ra=s[2] f_rb="4" if(s[0]=="b"):#pop f_ra=s[2] f_rb="4" if(s[0]=="c"):#iaddl f_ra=s[3] f_valC=s[4:12] if(s[0]=="d"):#leave f_ra="5" f_icode=s[0] f_ifunc=s[1] if(data.isstall()): nothing() else:#不暂停的合法状态下,将信号写入下一个Decode阶段 data.write("D_index",pc) data.write("D_icode",f_icode) data.write("D_ifunc",f_ifunc) data.write("rA",f_ra) data.write("rB",f_rb) data.write("D_valC",f_valC) if(pred_pc[0]!="X"): data.write("D_valP",arc(pred_pc)) else: data.write("D_valP","X") #PC------------------------------------ data.intwrite("total_cycle",total_cycle)#将总周期数写入外部 data.intwrite("valid_cycle",valid_cycle)#将实际执行的周期数写入外部 #print("PC:") if(data.isstall()): data.start() return 0 if(ret_pc!=""):#判断下一个pc应该取什么值 data.write("pc",ret_pc)#有ret先取ret_pc elif(call_pc!=""): data.write("pc",call_pc)#有call,取call_pc elif(jmp_pc!=""): data.write("pc",jmp_pc)#有jXX,取jmp_pc elif(pred_pc!=""): data.write("pc",pred_pc)#都没有的情况下取得下一个pc return 0
def execute(): global ret_pc global jmp_pc global call_pc global pred_pc global w_icode global w_valE global w_valM global w_dstE global w_dstM global m_icode global m_valE global m_valM global m_dstE global m_dstM global e_icode global e_bch global e_valE global e_valM global e_dstE global e_dstM global d_icode global d_ifunc global d_valC global d_valA global d_valB global d_dstE global d_dstM global d_srcA global d_srcB global f_icode global f_ifunc global f_ra global f_rb global f_valC global f_valP while data.isend() == False: data.show() global clocknum clocknum += 1 print("CLOCK_NO:%d" % (clocknum)) PipeClock.PipeClock() ret_pc = "" jmp_pc = "" call_pc = "" pred_pc = "" # print("CLOCK-------------------------------") # WriteBack--------------------------------- # print("writeback:") w_icode = data.read("W_icode") w_valE = data.read("W_valE") w_valM = data.read("W_valM") w_dstE = data.read("W_dstE") w_dstM = data.read("W_dstM") if w_icode == "0": # nop nothing() elif w_icode == "1": # halt data.write("M_index", "X") data.write("M_icode", "0") data.write("E_index", "X") data.write("E_icode", "0") data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") data.setend() elif w_icode == "2": # rrmovl data.RegWrite(w_dstE, w_valE) elif w_icode == "3": # irmovl data.RegWrite(w_dstE, w_valE) elif w_icode == "4": # rmmovl nothing() elif w_icode == "5": # mrmovl data.RegWrite(w_dstE, w_valM) elif w_icode == "6": # op data.RegWrite(w_dstE, w_valE) elif w_icode == "7": # jmp nothing() elif w_icode == "8": # call data.RegWrite("4", w_valE) elif w_icode == "9": # ret data.RegWrite("4", w_valE) elif w_icode == "a": # push data.RegWrite("4", w_valE) elif w_icode == "b": # popl data.RegWrite("4", w_valE) data.RegWrite(w_dstE, w_valM) # Memory-------------------------------------- # print("Memory:") m_icode = "" m_valE = "" m_valM = "" m_dstE = "" m_dstM = "" m_icode = data.read("M_icode") m_valE = data.read("M_valE") m_valM = data.read("M_valM") m_dstE = data.read("M_dstE") m_dstM = data.read("M_dstM") if m_icode == "0": # nop nothing() m_valE = "" m_valM = "" m_dstE = "" m_dstM = "" elif m_icode == "1": # halt data.write("E_index", "X") data.write("E_icode", "0") data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") elif m_icode == "2": # rrmovl nothing() elif m_icode == "3": # irmovl nothing() elif m_icode == "4": # rmmovl data.MemoryWrite(m_dstM, m_valM) elif m_icode == "5": # mrmovl m_valM = data.MemoryRead(m_dstM) elif m_icode == "6": # op nothing() elif m_icode == "7": # jmp nothing() elif m_icode == "8": # call data.MemoryWrite(m_valE, m_valM) elif m_icode == "9": # ret m_valM = data.MemoryRead(m_dstM) ret_pc = arc(m_valM) data.write("E_index", "X") data.write("E_icode", "0") data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") elif m_icode == "a": # push data.MemoryWrite(m_valE, m_valM) elif m_icode == "b": # pop m_valM = data.MemoryRead(m_dstM) data.write("W_index", data.read("M_index")) data.write("W_icode", m_icode) data.write("W_valE", m_valE) data.write("W_valM", m_valM) data.write("W_dstE", m_dstE) data.write("W_dstM", m_dstM) # Execute---------------------------------------------- # print("Execute:") e_icode = "" e_bch = "" e_valE = "" e_valM = "" e_dstE = "" e_dstM = "" e_icode = data.read("E_icode") e_ifunc = data.read("E_ifunc") e_valC = data.read("E_valC") e_valA = data.read("E_valA") e_valB = data.read("E_valB") e_dstE = data.read("E_dstE") e_dstM = data.read("E_dstM") srcA = data.read("srcA") srcB = data.read("srcB") if e_icode == "0": # nop nothing() e_bch = "" e_valE = "" e_valM = "" e_dstE = "" e_dstM = "" elif e_icode == "1": # halt data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") elif e_icode == "2": # rrmovl e_valE = e_valA elif e_icode == "3": # irmovl e_valE = e_valC elif e_icode == "4": # rmmovl aluA = e_valB aluB = e_valC e_dstM = data.alu("0", aluA, aluB) e_valM = e_valA elif e_icode == "5": # mrmovl aluA = e_valB aluB = e_valC e_dstM = data.alu("0", aluA, aluB) e_dstE = srcA elif e_icode == "6": # op aluA = e_valA aluB = e_valB e_valE = data.alu(e_ifunc, aluA, aluB) e_dstE = srcB elif e_icode == "7": # jmp if data.check(e_ifunc): data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") jmp_pc = arc(e_valC) e_bch = jmp_pc elif e_icode == "8": # call e_valM = e_valB aluA = e_valA aluB = "04000000" e_valE = data.alu("1", aluB, aluA) data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") call_pc = arc(e_valC) e_bch = call_pc elif e_icode == "9": # ret aluA = e_valA aluB = "04000000" e_valE = data.alu("0", aluA, aluB) data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") e_dstM = e_valA elif e_icode == "a": # push aluA = e_valB aluB = "04000000" e_valE = data.alu("1", aluB, aluA) e_valM = e_valA elif e_icode == "b": # popl aluA = e_valB aluB = "04000000" e_valE = data.alu("0", aluA, aluB) e_dstM = e_valB e_dstE = srcA data.write("M_index", data.read("E_index")) data.write("M_icode", e_icode) data.write("bch", e_bch) data.write("M_valE", e_valE) data.write("M_valM", e_valM) data.write("M_dstE", e_dstE) data.write("M_dstM", e_dstM) # Decode---------------------------------- # print("Decode:") d_icode = "" d_ifunc = "" d_valC = "" d_valA = "" d_valB = "" d_dstE = "" d_dstM = "" d_srcA = "" d_srcB = "" d_icode = data.read("D_icode") d_ifunc = data.read("D_ifunc") ra = data.read("rA") rb = data.read("rB") d_valC = data.read("D_valC") d_valP = data.read("D_valP") if d_icode == "0": # nop nothing() d_ifunc = "" d_valC = "" d_valA = "" d_valB = "" d_dstE = "" d_dstM = "" d_srcA = "" d_srcB = "" elif d_icode == "1": # halt nothing() elif d_icode == "2": # rrmovl Temp = forwarding(ra) if Temp == "X": data.setstall() else: d_valA = Temp d_dstE = rb d_srcA = ra d_srcB = rb elif d_icode == "3": # irmovl d_valA = d_valC d_dstE = rb elif d_icode == "4": # rmmovl------------------------------------------------------------- Temp = forwarding(ra) if Temp == "X": data.setstall() else: d_valA = Temp Temp = forwarding(rb) if Temp == "X": data.setstall() else: d_valB = Temp d_srcA = ra d_srcB = rb elif d_icode == "5": # mrmovl------------------------------------------------------- Temp = forwarding(rb) if Temp == "X": data.setstall() else: d_valB = Temp d_dstE = ra d_srcA = ra d_srcB = rb elif d_icode == "6": # op------------------------------------------------------------------------ Temp = forwarding(ra) if Temp == "X": data.setstall() else: d_valA = Temp Temp = forwarding(rb) if Temp == "X": data.setstall() else: d_valB = Temp d_srcA = ra d_srcB = rb d_dstE = rb elif d_icode == "7": # jmp---------------------- nothing() elif d_icode == "8": # call--------------------- Temp = forwarding("4") if Temp == "X": data.setstall() else: d_valA = Temp d_valB = d_valP d_srcA = "4" d_dstE = "4" elif d_icode == "9": # ret-------------------------------------- Temp = forwarding("4") if Temp == "X": data.setstall() else: d_valA = Temp d_dstE = "4" d_srcA = "4" elif d_icode == "a": # push------------------------------------- Temp = forwarding(ra) if Temp == "X": data.setstall() else: d_valA = Temp Temp = forwarding("4") if Temp == "X": data.setstall() else: d_valB = Temp d_srcA = ra d_srcB = "4" d_dstE = "4" elif d_icode == "b": # popl--------------------------------------------------------------- Temp = forwarding("4") if Temp == "4": data.setstall() else: d_valB = Temp d_dstE = ra d_srcA = ra d_srcB = "4" if data.isstall(): data.write("E_icode", "0") data.write("E_index", "X") else: data.write("E_index", data.read("D_index")) data.write("E_icode", d_icode) data.write("E_ifunc", d_ifunc) data.write("E_valC", d_valC) data.write("E_valA", d_valA) data.write("E_valB", d_valB) data.write("E_dstE", d_dstE) data.write("E_dstM", d_dstM) data.write("srcA", d_srcA) data.write("srcB", d_srcB) # Fetch--------------------------------------------- # print("Fetch:") f_icode = "" f_ifunc = "" f_ra = "" f_rb = "" f_valC = "" f_valP = "" f_icode = data.read("F_icode") pc = data.read("pc") if pc == "X": data.write("D_index", "X") data.write("D_icode", "0") data.write("F_icode", "1") f_ifunc = "" f_ra = "" f_rb = "" f_valC = "" f_valP = "" data.write("D_ifunc", f_ifunc) data.write("rA", f_ra) data.write("rB", f_rb) data.write("D_valC", f_valC) data.write("D_valP", f_valP) elif f_icode == "0": data.write("D_index", "X") data.write("D_icode", "0") data.write("F_icode", "1") f_ifunc = "" f_ra = "" f_rb = "" f_valC = "" f_valP = "" data.write("D_ifunc", f_ifunc) data.write("rA", f_ra) data.write("rB", f_rb) data.write("D_valC", f_valC) data.write("D_valP", f_valP) elif data.isstall(): nothing() else: pred_pc = data.next(pc) s = data.MemoryGet(pc) if s[0] == "0": # nop nothing() if s[0] == "1": # halt nothing() if s[0] == "2": # rrmovl f_ra = s[2] f_rb = s[3] if s[0] == "3": # irmovl f_rb = s[3] f_valC = s[4:12] if s[0] == "4": # rmmovl f_ra = s[2] f_rb = s[3] f_valC = s[4:12] if s[0] == "5": # mrmovl f_ra = s[2] f_rb = s[3] f_valC = s[4:12] if s[0] == "6": # op f_ra = s[2] f_rb = s[3] if s[0] == "7": # jmp f_valC = s[2:10] if s[0] == "8": # call f_valC = s[2:10] f_ra = "4" if s[0] == "9": # ret f_ra = "4" nothing() if s[0] == "a": # push f_ra = s[2] f_rb = "4" if s[0] == "b": # pop f_ra = s[2] f_rb = "4" f_icode = s[0] f_ifunc = s[1] if data.isstall(): nothing() else: data.write("D_index", pc) data.write("D_icode", f_icode) data.write("D_ifunc", f_ifunc) data.write("rA", f_ra) data.write("rB", f_rb) data.write("D_valC", f_valC) if pred_pc[0] != "X": data.write("D_valP", arc(pred_pc)) else: data.write("D_valP", "X") # PC------------------------------------ # print("PC:") if data.isstall(): data.start() return 0 if ret_pc != "": data.write("pc", ret_pc) elif call_pc != "": data.write("pc", call_pc) elif jmp_pc != "": data.write("pc", jmp_pc) elif pred_pc != "": data.write("pc", pred_pc) return 0
"""Adds to the names.txt file the new info after checking if confirm is the same as password""" if confirm != password: return "<h1>Passwords not the same!</h1><a href='register.html'>Please try again</a>" else: d = data.namedict() if usr in d: return"<h1>Username Taken.</h1><a href='index.html'>Click to go Back</a>" else: f = open('names.txt', 'a') f.write(usr + '@%' + password + '@%1\n') f.close() return "<h1>Registration Complete.</h1><form method='GET' action='trivia.py'>" + userdata + "<input class='linkbutton' type='submit' name='submit' value='Click to Advance Further'></form>" d = cgi.FieldStorage() print '<html><head><title>Nerdit</title><link rel="stylesheet" type="text/css" href="nerdit.css"></head><body>' if 'usr' in d.keys() and 'password' in d.keys(): usr = data.check(d['usr'].value) password = d['password'].value password = hashlib.md5(password).hexdigest() if 'confirm' in d.keys(): confirm = d['confirm'].value confirm = hashlib.md5(confirm).hexdigest() userdata = "<input type='hidden' name='usr' value='" + usr + "'><input type='hidden' name='password' value=" + password + ">" if 'login' in d.keys(): print check(usr, password) elif 'register' in d.keys(): print register(usr, password, confirm) else: print "<h1>Username and Password Incorrect.</h1><a href='index.html'>Click to go Back</a>" print '</body></html>'
def __init__(self, size, fn=None): """ Initialize a surface and draw the box onto it. size - the size of the box. fn - the path to a box xml config file. """ #initialize the pygame Surface pygame.Surface.__init__(self, size) #if no filename given, use the game default box if fn == None: fn = os.path.join(settings.path, "data", globs.DIALOG) #parse the box xml file root = data.getTreeRoot(fn) tilesetPath = os.path.join(settings.path, "data", data.getAttr(root, "file", data.D_STRING)) tileset = data.getImage(tilesetPath) transparency = data.getAttr(root, "transparency", data.D_INT3LIST) tileset.set_colorkey(transparency) tileSize = data.getAttr(root, "tilesize", data.D_INT2LIST) data.check((tileSize[0]+1)*3==tileset.get_width()+1, tilesetPath) data.check((tileSize[1]+1)*3==tileset.get_height()+1, tilesetPath) #fill transparent self.fill((255,0,255)) self.set_colorkey((255,0,255)) #cut each of the nine tiles out from the tileset tileNW = tileset.subsurface((0,0), tileSize) tileN = tileset.subsurface((tileSize[0]+1,0), tileSize) tileNE = tileset.subsurface(((tileSize[0]+1)*2,0), tileSize) tileW = tileset.subsurface((0,tileSize[1]+1), tileSize) tileC = tileset.subsurface((tileSize[0]+1,tileSize[1]+1), tileSize) tileE = tileset.subsurface(((tileSize[0]+1)*2,tileSize[1]+1), tileSize) tileSW = tileset.subsurface((0,(tileSize[1]+1)*2), tileSize) tileS = tileset.subsurface((tileSize[0]+1,(tileSize[1]+1)*2), tileSize) tileSE = tileset.subsurface(((tileSize[0]+1)*2,(tileSize[1]+1)*2), tileSize) #calculate how much of the box is not covered by edge tiles - all this middle must be covered by the centre tile #work out how many tiles it will take to cover that, and where to start drawing from middleSize = size[0]-(2*tileSize[0]), size[1]-(2*tileSize[1]) dimensions = (middleSize[0]/tileSize[0])+1, (middleSize[1]/tileSize[1])+1 origin = (size[0]-(dimensions[0]*tileSize[0]))/2, (size[1]-(dimensions[1]*tileSize[1]))/2 #iterate over the required dimensions, drawing in the centre tiles #as we go down the first column only, draw in the left and right side tiles on the edge of the box #after we finish each column, draw the top and bottom tiles on the edge for x in range(0, dimensions[0]): for y in range(0, dimensions[1]): self.blit(tileC, (origin[0]+(x*tileSize[0]), origin[1]+(y*tileSize[1]))) if x == 0: self.blit(tileW, (0, origin[1]+(y*tileSize[1]))) self.blit(tileE, (size[0]-tileSize[0], origin[1]+(y*tileSize[1]))) self.blit(tileN, (origin[0]+(x*tileSize[0]), 0)) self.blit(tileS, (origin[0]+(x*tileSize[0]), size[1]-tileSize[1])) #draw the corner tiles in the corners self.blit(tileNW, (0, 0)) self.blit(tileNE, (size[0]-tileSize[0], 0)) self.blit(tileSW, (0, size[1]-tileSize[1])) self.blit(tileSE, (size[0]-tileSize[0], size[1]-tileSize[1]))
def testName_testTaskInfo(self): testTaskClassName = testTask = testCase = pstartDoubleName = "t"*1024 sqlInfo = data.check() sqlTaskClass = sqlInfo.getTestTaskClassName(configList[4]) #从数据库获取测试任务类名称 taskClassNum = lib.getTestTaskClassCount() #从接口获取测试任务类数量 caseBase.isNotEqual(len(sqlTaskClass), taskClassNum, '', '') if taskClassNum == len(sqlTaskClass): for i in range (0,taskClassNum): lib.getTestTaskClassName(i,testTaskClassName,len(testTaskClassName)) #从接口获取测试任务类名称 # print sqlTaskClass[i].decode('utf-8').encode('GB18030'),testTaskClassName.strip('\x00') sqlTaskClassName = sqlTaskClass[i].decode('utf-8').encode('GB18030') print sqlTaskClassName,testTaskClassName.strip('\00') caseBase.isNotEqual(sqlTaskClassName, testTaskClassName.strip('\x00'), '', '') #判断测试任务类名称是否相等 if sqlTaskClassName != testTaskClassName.strip('\x00'): assert sqlTaskClassName == testTaskClassName.strip('\x00') #如果测试任务类名称相等则判断任务类下的测试任务信息 else: sqlTaskNameList = sqlInfo.getTestTaskName(configList[4],sqlTaskClassName) #数据库获取测试任务类下的测试任务名称 taskNum = lib.getTestTaskCount(sqlTaskClassName) #从接口获取测试任务数量 if len(sqlTaskNameList) != taskNum: #判断任务数量是否相等 assert len(sqlTaskNameList) == taskNum else: for j in range(0,taskNum): lib.getTestTaskName(sqlTaskClassName,j,testTask,len(testTask)) #从接口获取特定测试任务类名称下的测试任务名称 sqlTaskName = sqlTaskNameList[j].decode('utf-8').encode('GB18030') #从数据库中获取特定测试任务类名称下的测试任务名称 print sqlTaskName if sqlTaskName != testTask.strip('\x00'): #判断测试任务名称是否相等 assert sqlTaskName == testTask.strip('\x00') #如果测试任务名称相同则判断任务下用例信息 else: useTestTask = lib.useTestTask(sqlTaskClassName,sqlTaskName) #设置使用中的测试任务 caseBase.isNotEqual(0, useTestTask, '', '') #判断启用测试任务接口是否启用成功 testCaseNum = lib.getTestTaskTestCaseCount() #从接口获取测试用例数量 sqlTestCaseInfo = sqlInfo.getTestTaskTestCaseInfo(configList[4],sqlTaskClassName,sqlTaskName) #从数据库获取用例信息 dom = xmlManage.lxmlReaderModify(sqlTestCaseInfo) sqlTestCaseList = dom.getTabNodeValue("//Item/@testCaseName") #获取数据库中的testCaseName if testCaseNum != len(sqlTestCaseList): assert testCaseNum == len(sqlTestCaseList) else: for k in range(0,testCaseNum): lib.getTestTaskTestCaseName(k,testCase,len(testCase)) #从接口获取测试用例名称 sqlTestCaseName = sqlTestCaseList[k].decode('utf-8').encode('GB18030') #从数据库中获取测试用例名称 print sqlTestCaseName if sqlTestCaseName != testCase.strip('\x00'): assert sqlTestCaseName == testCase.strip('\x00') else: initValueNum = lib.getTestTaskTestCaseDoubleCount(k) #从接口获取初始值数量 sqlInitValues = dom.getTabNodeValue("//Item/@initialValues")[k] #从数据库获取 initialValues属性的值 sqlInitValueList = re.split('[=;]',sqlInitValues) #从数据库中获取初始值的变量名和对应的值 if initValueNum != len(sqlInitValueList)/2: #判断初始值数量是否相等 assert initValueNum == len(sqlInitValueList)/2 else: for l in range(0,initValueNum): initValue = c_double() pstartValue = pointer(initValue) lib.getTestTaskTestCaseDoubleNameValue(k,l,pstartDoubleName,len(pstartDoubleName),pstartValue) #从接口获取初始值变量名和对应的值 sqlInitParam = sqlInitValueList[l*2].decode('utf-8').encode('GB18030') #从数据库中获取初始值的变量名 sqlInitValue = sqlInitValueList[l*2 + 1].decode('utf-8').encode('GB18030') #从数据库中获取初始值的变量名对应的值 print sqlInitParam,sqlInitValue if sqlInitParam != pstartDoubleName.strip('\x00') or float(sqlInitValue) != initValue.value: #判断从接口和数据库中获取的变量名和初始值是否相等 assert sqlInitParam == pstartDoubleName.strip('\x00') and float(sqlInitValue) == initValue.value
def execute(): global ret_pc global jmp_pc global call_pc global pred_pc global w_icode global w_valE global w_valM global w_dstE global w_dstM global m_icode global m_valE global m_valM global m_dstE global m_dstM global e_icode global e_bch global e_valE global e_valM global e_dstE global e_dstM global d_icode global d_ifunc global d_valC global d_valA global d_valB global d_dstE global d_dstM global d_srcA global d_srcB global f_icode global f_ifunc global f_ra global f_rb global f_valC global f_valP while (data.isend() == False): data.show() global clocknum clocknum += 1 print("CLOCK_NO:%d" % (clocknum)) PipeClock.PipeClock() ret_pc = "" jmp_pc = "" call_pc = "" pred_pc = "" #print("CLOCK-------------------------------") #WriteBack--------------------------------- #print("writeback:") w_icode = data.read("W_icode") w_valE = data.read("W_valE") w_valM = data.read("W_valM") w_dstE = data.read("W_dstE") w_dstM = data.read("W_dstM") if (w_icode == "0"): #nop nothing() elif (w_icode == "1"): #halt data.write("M_index", "X") data.write("M_icode", "0") data.write("E_index", "X") data.write("E_icode", "0") data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") data.setend() elif (w_icode == "2"): #rrmovl data.RegWrite(w_dstE, w_valE) elif (w_icode == "3"): #irmovl data.RegWrite(w_dstE, w_valE) elif (w_icode == "4"): #rmmovl nothing() elif (w_icode == "5"): #mrmovl data.RegWrite(w_dstE, w_valM) elif (w_icode == "6"): #op data.RegWrite(w_dstE, w_valE) elif (w_icode == "7"): #jmp nothing() elif (w_icode == "8"): #call data.RegWrite("4", w_valE) elif (w_icode == "9"): #ret data.RegWrite("4", w_valE) elif (w_icode == "a"): #push data.RegWrite("4", w_valE) elif (w_icode == "b"): #popl data.RegWrite("4", w_valE) data.RegWrite(w_dstE, w_valM) #Memory-------------------------------------- #print("Memory:") m_icode = "" m_valE = "" m_valM = "" m_dstE = "" m_dstM = "" m_icode = data.read("M_icode") m_valE = data.read("M_valE") m_valM = data.read("M_valM") m_dstE = data.read("M_dstE") m_dstM = data.read("M_dstM") if (m_icode == "0"): #nop nothing() m_valE = "" m_valM = "" m_dstE = "" m_dstM = "" elif (m_icode == "1"): #halt data.write("E_index", "X") data.write("E_icode", "0") data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") elif (m_icode == "2"): #rrmovl nothing() elif (m_icode == "3"): #irmovl nothing() elif (m_icode == "4"): #rmmovl data.MemoryWrite(m_dstM, m_valM) elif (m_icode == "5"): #mrmovl m_valM = data.MemoryRead(m_dstM) elif (m_icode == "6"): #op nothing() elif (m_icode == "7"): #jmp nothing() elif (m_icode == "8"): #call data.MemoryWrite(m_valE, m_valM) elif (m_icode == "9"): #ret m_valM = data.MemoryRead(m_dstM) ret_pc = arc(m_valM) data.write("E_index", "X") data.write("E_icode", "0") data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") elif (m_icode == "a"): #push data.MemoryWrite(m_valE, m_valM) elif (m_icode == "b"): #pop m_valM = data.MemoryRead(m_dstM) data.write("W_index", data.read("M_index")) data.write("W_icode", m_icode) data.write("W_valE", m_valE) data.write("W_valM", m_valM) data.write("W_dstE", m_dstE) data.write("W_dstM", m_dstM) #Execute---------------------------------------------- #print("Execute:") e_icode = "" e_bch = "" e_valE = "" e_valM = "" e_dstE = "" e_dstM = "" e_icode = data.read("E_icode") e_ifunc = data.read("E_ifunc") e_valC = data.read("E_valC") e_valA = data.read("E_valA") e_valB = data.read("E_valB") e_dstE = data.read("E_dstE") e_dstM = data.read("E_dstM") srcA = data.read("srcA") srcB = data.read("srcB") if (e_icode == "0"): #nop nothing() e_bch = "" e_valE = "" e_valM = "" e_dstE = "" e_dstM = "" elif (e_icode == "1"): #halt data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") elif (e_icode == "2"): #rrmovl e_valE = e_valA elif (e_icode == "3"): #irmovl e_valE = e_valC elif (e_icode == "4"): #rmmovl aluA = e_valB aluB = e_valC e_dstM = data.alu("0", aluA, aluB) e_valM = e_valA elif (e_icode == "5"): #mrmovl aluA = e_valB aluB = e_valC e_dstM = data.alu("0", aluA, aluB) e_dstE = srcA elif (e_icode == "6"): #op aluA = e_valA aluB = e_valB e_valE = data.alu(e_ifunc, aluA, aluB) e_dstE = srcB elif (e_icode == "7"): #jmp if (data.check(e_ifunc)): data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") jmp_pc = arc(e_valC) e_bch = jmp_pc elif (e_icode == "8"): #call e_valM = e_valB aluA = e_valA aluB = "04000000" e_valE = data.alu("1", aluB, aluA) data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") call_pc = arc(e_valC) e_bch = call_pc elif (e_icode == "9"): #ret aluA = e_valA aluB = "04000000" e_valE = data.alu("0", aluA, aluB) data.write("D_index", "X") data.write("D_icode", "0") data.write("pc", "X") data.write("F_icode", "0") e_dstM = e_valA elif (e_icode == "a"): #push aluA = e_valB aluB = "04000000" e_valE = data.alu("1", aluB, aluA) e_valM = e_valA elif (e_icode == "b"): #popl aluA = e_valB aluB = "04000000" e_valE = data.alu("0", aluA, aluB) e_dstM = e_valB e_dstE = srcA data.write("M_index", data.read("E_index")) data.write("M_icode", e_icode) data.write("bch", e_bch) data.write("M_valE", e_valE) data.write("M_valM", e_valM) data.write("M_dstE", e_dstE) data.write("M_dstM", e_dstM) #Decode---------------------------------- #print("Decode:") d_icode = "" d_ifunc = "" d_valC = "" d_valA = "" d_valB = "" d_dstE = "" d_dstM = "" d_srcA = "" d_srcB = "" d_icode = data.read("D_icode") d_ifunc = data.read("D_ifunc") ra = data.read("rA") rb = data.read("rB") d_valC = data.read("D_valC") d_valP = data.read("D_valP") if (d_icode == "0"): #nop nothing() d_ifunc = "" d_valC = "" d_valA = "" d_valB = "" d_dstE = "" d_dstM = "" d_srcA = "" d_srcB = "" elif (d_icode == "1"): #halt nothing() elif (d_icode == "2"): #rrmovl Temp = forwarding(ra) if (Temp == "X"): data.setstall() else: d_valA = Temp d_dstE = rb d_srcA = ra d_srcB = rb elif (d_icode == "3"): #irmovl d_valA = d_valC d_dstE = rb elif ( d_icode == "4" ): #rmmovl------------------------------------------------------------- Temp = forwarding(ra) if (Temp == "X"): data.setstall() else: d_valA = Temp Temp = forwarding(rb) if (Temp == "X"): data.setstall() else: d_valB = Temp d_srcA = ra d_srcB = rb elif ( d_icode == "5" ): #mrmovl------------------------------------------------------- Temp = forwarding(rb) if (Temp == "X"): data.setstall() else: d_valB = Temp d_dstE = ra d_srcA = ra d_srcB = rb elif ( d_icode == "6" ): #op------------------------------------------------------------------------ Temp = forwarding(ra) if (Temp == "X"): data.setstall() else: d_valA = Temp Temp = forwarding(rb) if (Temp == "X"): data.setstall() else: d_valB = Temp d_srcA = ra d_srcB = rb d_dstE = rb elif (d_icode == "7"): #jmp---------------------- nothing() elif (d_icode == "8"): #call--------------------- Temp = forwarding("4") if (Temp == "X"): data.setstall() else: d_valA = Temp d_valB = d_valP d_srcA = "4" d_dstE = "4" elif (d_icode == "9"): #ret-------------------------------------- Temp = forwarding("4") if (Temp == "X"): data.setstall() else: d_valA = Temp d_dstE = "4" d_srcA = "4" elif (d_icode == "a"): #push------------------------------------- Temp = forwarding(ra) if (Temp == "X"): data.setstall() else: d_valA = Temp Temp = forwarding("4") if (Temp == "X"): data.setstall() else: d_valB = Temp d_srcA = ra d_srcB = "4" d_dstE = "4" elif ( d_icode == "b" ): #popl--------------------------------------------------------------- Temp = forwarding("4") if (Temp == "4"): data.setstall() else: d_valB = Temp d_dstE = ra d_srcA = ra d_srcB = "4" if (data.isstall()): data.write("E_icode", "0") data.write("E_index", "X") else: data.write("E_index", data.read("D_index")) data.write("E_icode", d_icode) data.write("E_ifunc", d_ifunc) data.write("E_valC", d_valC) data.write("E_valA", d_valA) data.write("E_valB", d_valB) data.write("E_dstE", d_dstE) data.write("E_dstM", d_dstM) data.write("srcA", d_srcA) data.write("srcB", d_srcB) #Fetch--------------------------------------------- #print("Fetch:") f_icode = "" f_ifunc = "" f_ra = "" f_rb = "" f_valC = "" f_valP = "" f_icode = data.read("F_icode") pc = data.read("pc") if (pc == "X"): data.write("D_index", "X") data.write("D_icode", "0") data.write("F_icode", "1") f_ifunc = "" f_ra = "" f_rb = "" f_valC = "" f_valP = "" data.write("D_ifunc", f_ifunc) data.write("rA", f_ra) data.write("rB", f_rb) data.write("D_valC", f_valC) data.write("D_valP", f_valP) elif (f_icode == "0"): data.write("D_index", "X") data.write("D_icode", "0") data.write("F_icode", "1") f_ifunc = "" f_ra = "" f_rb = "" f_valC = "" f_valP = "" data.write("D_ifunc", f_ifunc) data.write("rA", f_ra) data.write("rB", f_rb) data.write("D_valC", f_valC) data.write("D_valP", f_valP) elif (data.isstall()): nothing() else: pred_pc = data.next(pc) s = data.MemoryGet(pc) if (s[0] == "0"): #nop nothing() if (s[0] == "1"): #halt nothing() if (s[0] == "2"): #rrmovl f_ra = s[2] f_rb = s[3] if (s[0] == "3"): #irmovl f_rb = s[3] f_valC = s[4:12] if (s[0] == "4"): #rmmovl f_ra = s[2] f_rb = s[3] f_valC = s[4:12] if (s[0] == "5"): #mrmovl f_ra = s[2] f_rb = s[3] f_valC = s[4:12] if (s[0] == "6"): #op f_ra = s[2] f_rb = s[3] if (s[0] == "7"): #jmp f_valC = s[2:10] if (s[0] == "8"): #call f_valC = s[2:10] f_ra = "4" if (s[0] == "9"): #ret f_ra = "4" nothing() if (s[0] == "a"): #push f_ra = s[2] f_rb = "4" if (s[0] == "b"): #pop f_ra = s[2] f_rb = "4" f_icode = s[0] f_ifunc = s[1] if (data.isstall()): nothing() else: data.write("D_index", pc) data.write("D_icode", f_icode) data.write("D_ifunc", f_ifunc) data.write("rA", f_ra) data.write("rB", f_rb) data.write("D_valC", f_valC) if (pred_pc[0] != "X"): data.write("D_valP", arc(pred_pc)) else: data.write("D_valP", "X") #PC------------------------------------ #print("PC:") if (data.isstall()): data.start() return 0 if (ret_pc != ""): data.write("pc", ret_pc) elif (call_pc != ""): data.write("pc", call_pc) elif (jmp_pc != ""): data.write("pc", jmp_pc) elif (pred_pc != ""): data.write("pc", pred_pc) return 0
import time import sys import casebase.getReg as regInfo import data import readConfig a='\x00' #C语言中的空格 configList = readConfig.readIniConfig('QuikLab3.0') installSpace=regInfo.getRegVal("applicationPath") workSpace=regInfo.getRegVal("workSpace") # os.chdir(installSpace) lib = ctypes.cdll.LoadLibrary(r"QuiKLabAPI.dll") R=data.check() sqlProName=R.getProName() #数据库获取工程名称 class Test(unittest.TestCase): def setUp(self): lib.initQuiKLabPlatform() def tearDown(self): lib.releaseQuiKLabPlatform() def testName1_proInfo(self):
format='%(asctime)s %(filename)s[line:%(lineno)d] %(Levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='test.log', filemode='w' ) class Logger(object): def __init__(self,fileN='Default.log'): self.terminal=sys.stdout self.log=open(fileN,'w') def write(self,message): self.terminal.write(message) self.log.write(message) def flush(self): pass sys.stdout=Logger('1.txt') data=data.check() os.chdir(r"D:\QuiKLab3.0") lib = ctypes.cdll.LoadLibrary(r"D:\QuiKLab3.0\QuiKLabAPI.dll") # temp='s'*128 # lib.getAppPath(temp) # print '-------------------------',temp # time.sleep(5) print "初始化QuiKLab平台类:\n",lib.initQuiKLabPlatform() time.sleep(5) print("获取下位机数量:\n"),lib.getTargetCount() print("根据索引获取下位机IP:") IP="iP"*64 lib.getTargetIP(0,IP,len(IP)) print(IP) a='\x00' #C语言中的空格 print"根据索引获取下位机状态:\n",lib.getTargetState(0)