日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python模拟硬件实现btb和tomasulo算法

發布時間:2023/12/20 python 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python模拟硬件实现btb和tomasulo算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本程序在上一個tomasulo算法的基礎上添加了btb分支預測

代碼實現如下

# RISC-V # 小端模式# 硬件 Hardware = {# tag:還剩多久執行完畢; busy:0空閑,1不空閑; op:'lw' 'sw' 'mul' 'addi' 'bne'五條指令# 'addi'指令:'imm'用來存立即數# s1_vj和s2_vk:直接存數; rs_qj和rs_qk:存 'load1' 'mult2' 'add3'等# rs_qj和rs_qk:如果有數據,不需要指針,則這兩個指針置為數字0# 寄存器中,如果有結果直接存數,如果是指針,則同rs_qj和rs_qk存 'load1' 'mult2' 'add3'等# isinstance()函數可以判斷數據類型是不是指定類型,例如isinstance(Hardware['load1']['busy'],int)==True/False'load1': {'tag': 0,'busy': 0,'address': 0,'data': 0,'op' : 0},'load2': {'tag': 0,'busy': 0,'address': 0,'data': 0,'op' : 0},'load3': {'tag': 0,'busy': 0,'address': 0,'data': 0,'op' : 0},'store1': {'tag': 0,'busy': 0,'address': 0,'data': 0,'s1_vj': 0,'rs_qj': 0,'op' : 0},'store2': {'tag': 0,'busy': 0,'address': 0,'data': 0,'s1_vj': 0,'rs_qj': 0,'op' : 0},'store3': {'tag': 0,'busy': 0,'address': 0,'data': 0,'s1_vj': 0,'rs_qj': 0,'op' : 0},'add1': {'tag': 0,'busy': 0,'op': 0,'s1_vj': 0,'s2_vk': 0,'rs_qj': 0,'rs_qk': 0,'imm': 0,'data': 0},'add2': {'tag': 0,'busy': 0,'op': 0,'s1_vj': 0,'s2_vk': 0,'rs_qj': 0,'rs_qk': 0,'imm': 0,'data': 0},'add3': {'tag': 0,'busy': 0,'op': 0,'s1_vj': 0,'s2_vk': 0,'rs_qj': 0,'rs_qk': 0,'imm': 0,'data': 0},'mult1': {'tag': 0,'busy': 0,'op': 0,'s1_vj': 0,'s2_vk': 0,'rs_qj': 0,'rs_qk': 0,'data': 0},'mult2': {'tag': 0,'busy': 0,'op': 0,'s1_vj': 0,'s2_vk': 0,'rs_qj': 0,'rs_qk': 0,'data': 0} } # 調用方式 # Hardware['load1']['busy']='6' # print(Hardware['load1']['busy']) # print(isinstance(Hardware['load1']['busy'],int))'''for key in Hardware:print(Hardware[key]['tag'])pass'''# 寄存器類 X_ = 0x00000033 Register = {0b00000: 0x00000000,0b00001: 0x00000000,0b00010: 0x00000008,0b00011: 0x00000000,0b00100: 0x00000000,0b00101: 0x00000000,0b00110: 0x00000000,0b00111: 0x00000000,0b01000: 0x00000000,0b01001: 0x00000000,0b01010: 0x00000000,0b01011: 0x00000000,0b01100: 0x00000000,0b01101: 0x00000000,0b01110: 0x00000000,0b01111: 0x00000000,0b10000: 0x00000000,0b10001: 0x00000000,0b10010: 0x00000000,0b10011: 0x00000000,0b10100: 0x00000000,0b10101: 0x00000000,0b10110: 0x00000000,0b10111: 0x00000000,0b11000: 0x00000000,0b11001: 0x00000000,0b11010: 0x00000000,0b11011: 0x00000000,0b11100: 0x00000000,0b11101: 0x00000000,0b11110: 0x00000000,0b11111: 0x00000000} pc = 0x00000000 '''Register[0]=0 if(isinstance(Register[0],str)):print(type(Register[0]),'class')print('ss') elif(isinstance(Register[0],int)):print(type(Register[0]), 'int')print('ii')'''# 儲存器類 Memory = {0x00000000: 0x00 }# 控制BTB的執行 BTB={0x00000000:[0x00000000,0,0], #PC:[PC_predict,tag1,tag2];tag1為第一次判斷結果(yes:1/no:0),tag2為第二次判斷結果 }PC_Control = [0,0,0,0]#[PC,PC_IF,PC_ID,PC_EX],分階段存下該階段所執行指令對應的PC值# 初始化內存,大小為16KB def init_Mem():for i in range(2 ** 14):Memory[0x00000000 + i] = 0x00# *****************Tomasulo************** def Refresh(a): # 如果得到了某個數據,則利用這個函數,刷新需要這個數據的所有buffer和寄存器a1 = list(a)a1.pop()a1 = ''.join(a1)if a1 == 'store':Memory[Hardware[a]['address']] = Hardware[a]['data']returnfor key in Register: # 刷新寄存器if Register[key] == a:Register[key] = Hardware[a]['data']passpassfor key in Hardware: # 刷新bufferkey1 = list(key)key1.pop()key1 = ''.join(key1)if key1 == 'load':continueif key1 == 'store':if Hardware[key]['rs_qj'] == a:Hardware[key]['s1_vj'] = Hardware[a]['data']Hardware[key]['rs_qj'] = 0Hardware[key]['tag'] = 2continueif Hardware[key]['rs_qj'] == a or Hardware[key]['rs_qk'] == a:if Hardware[key]['rs_qj'] == a:Hardware[key]['s1_vj'] = Hardware[a]['data']Hardware[key]['rs_qj'] = 0if Hardware[key]['rs_qk'] == a:Hardware[key]['s2_vk'] = Hardware[a]['data']Hardware[key]['rs_qk'] = 0if Hardware[key]['rs_qj'] == 0 and Hardware[key]['rs_qk'] == 0: # 所需數據準備完畢,則進入執行階段if Hardware[key]['op'] == 'addi' or Hardware[key]['op'] == 'bne':Hardware[key]['tag'] = 2elif Hardware[key]['op'] == 'mul':Hardware[key]['tag'] = 10passpasspassIF_Found = False ID_Branch = Falsedef IF():global IF_Found# IF階段# 第一次判斷,PC_Control是否在BTB中global pcif pc== 64:print(pc)PC_Control[0] = pc# PC_Control[0] = PC_Control[0] + 1 # PC_Control[0]表示PC_Control值PC_Control[1] = PC_Control[0] + 1 # PC_Control_IF,IF階段的PC_Controlif PC_Control[0] in BTB:#BTB[PC_Control[1]][1] = 1IF_Found = Trueelse:#BTB[PC_Control[0]] = [0, 0, 0] # 如果沒有命中BTB,插入一條item方便后續操作IF_Found = Falsepassdef ID():global IF_Foundglobal ID_Branchglobal BTB# ID階段PC_Control[2] = PC_Control[1] # PC_Control_ID,ID階段指令對應的PC_Control#opcode = Memory[PC_Control[0]] & 0b1111111instru = 0x00000000for i in range(4):instru += Memory[PC_Control[0] + i] * (256 ** i)opcode = instru & 0b1111111if (IF_Found == False):if opcode == 0b1100011: # 如果是分支指令#這里需要知道當前正在執行的指令的下一條語句,稍后處理這一段ID_Branch = True# BTB[PC_Control[0]] = [48,1,0]else:ID_Branch = Falsereturnelse:pass"""if BTB[PC_Control[2]][1] == 1 and BTB[PC_Control[2]][2] == 1: # 是分支指令,并且命中BTB時,將預測地址賦值給PC_Control,因為PC_Control會自增,這里提前-1PC_Control[0] = BTB[PC_Control[2]][0]""""""if opcode == 0b1100011: # 如果是分支指令BTB[PC_Control[2]][2] = 1else:BTB[PC_Control[2]][2] = 0if BTB[PC_Control[2]][1] == 1 and BTB[PC_Control[2]][2] == 1: # 是分支指令,并且命中BTB時,將預測地址賦值給PC_Control,因為PC_Control會自增,這里提前-1PC_Control[0] = BTB[ PC_Control[2]][0]"""passdef Issue(): # 指令流出# 1 首先檢查是否可進行指令流出# 2 若可以進行指令流出則設置對應硬件的狀態# 3 若流出則安排pc加四的位置global IF_Foundglobal ID_BranchIF_Found = FalseID_Branch = FalseIF()ID()ISA()# 只修改了這次用到的幾個函數,將函數的實現改完,硬件狀態的改變以及是否流出passdef BTB_Exec():global IF_Foundglobal ID_Branchglobal pcif IF_Found == False and ID_Branch == False:returnelif IF_Found == False and ID_Branch == True:BTB[PC_Control[0]] = [pc, 1, 0]elif IF_Found == True:if BTB[PC_Control[0]][0] == pc:passelse:BTB.pop(PC_Control[0])"""# EX階段PC_Control[3] = PC_Control[2] # PC_Control_EX,EX階段指令對應的PC_Controlif BTB[PC_Control[3]][2] == 0: # 若不是分支指令,則刪除該PC_Control在BTB中的itemBTB.pop(PC_Control[3])elif BTB[PC_Control[3]][1] == 0: # 是分支指令,但沒有在BTB中時,將該PC_Control放入到BTB中# branch為該指令跳轉的地址,需要針對指令設置;branch = 0 # 該指令跳轉的地址,需要針對指令設置;BTB[PC_Control[3]][0] == branchprint(PC_Control)print(BTB)"""passdef Exec(): # 指令執行for key in Hardware:if Hardware[key]['busy'] == 1 and Hardware[key]['tag'] > 0:Hardware[key]['tag'] -= 1if Hardware[key]['tag'] == 0: # 執行結束,得到結果存到dataif Hardware[key]['op'] == 'lw': # 'sw' 'mul' 'addi' 'bne'Hardware[key]['data'] = Memory[Hardware[key]['address']] + (Memory[Hardware[key]['address'] + 1] << 8) + (Memory[Hardware[key]['address'] + 2] << 16) + (Memory[Hardware[key]['address'] + 3] << 24)passif Hardware[key]['op'] == 'sw': # 'sw' 'mul' 'addi' 'bne'#Memory[Hardware[key]['address']] = Hardware[key]['s1_vj']#Memory[Hardware[key]['address']] = Hardware[key]['s1_vj']Hardware[key]['data'] = Hardware[key]['s1_vj']passif Hardware[key]['op'] == 'mul': # 'sw' 'mul' 'addi' 'bne'if Hardware[key]['s1_vj'] < 2 ** 31:tag1 = Hardware[key]['s1_vj']else:tag1 = Hardware[key]['s1_vj'] - 2 ** 32if Hardware[key]['s2_vk'] < 2 ** 31:tag2 = Hardware[key]['s2_vk']else:tag2 = Hardware[key]['s2_vk'] - 2 ** 32tag3 = tag1 * tag2if tag3 < 2 ** 31:Hardware[key]['data'] = tag3elif tag3 < 2 ** 32:Hardware[key]['data'] = tag3 - 2 ** 32else:return Falsepassif Hardware[key]['op'] == 'addi': # 'sw' 'mul' 'addi' 'bne'imm = Hardware[key]['imm']if Hardware[key]['imm'] & 0b100000000000 == 0b100000000000:imm = Hardware[key]['imm'] + 0b11111111111111111111000000000000Hardware[key]['data'] = (Hardware[key]['s2_vk'] + imm) & 0xffffffffpassif Hardware[key]['op'] == 'bne': # 'sw' 'mul' 'addi' 'bne'if Hardware[key]['s1_vj'] != Hardware[key]['s2_vk']:global pcpc += (Hardware[key]['imm'] * 4) - 4BTB_Exec()passpasspasspassdef Write(): # 數據寫回for key in Hardware:if Hardware[key]['busy'] == 1 and Hardware[key]['tag'] == 0: # 如果該數據可以寫回Refresh(key) # 刷新需要這個數據的所有buffer和寄存器Hardware[key]['busy'] = 0passpasspass# ISA指令# ***************************Loads*************************** # 字節加載指令 def lb(rd, rs1, imm):if imm & 0b100000000000 == 0b100000000000:imm = imm + 0b11111111111111111111000000000000a = Memory[Register[rs1] + imm]if a & 0b10000000 == 0b10000000:a = a + 0b11111111111111111111111100000000Register[rd] = apass# 半字加載指令 def lh(rd, rs1, imm):if imm & 0b100000000000 == 0b100000000000:imm = imm + 0b11111111111111111111000000000000a = Memory[Register[rs1] + imm] + (Memory[Register[rs1] + imm + 1] << 8)if a & 0b1000000000000000 == 0b1000000000000000:a = a + 0b11111111111111110000000000000000Register[rd] = apass# 字加載指令 def lw(rd, rs1, imm):# 將原來的實現修改為硬件狀態的檢查和修改以及是否流出# 1 檢查是否有空閑的硬件,若沒有則停止流出# 2 若有則修改硬件狀態List = ['load1', 'load2', 'load3']for i in List:if Hardware[i]['busy'] == 0:# 若存在硬件是空閑的,則修改硬件狀態,然后返回Hardware[i]['tag'] = 2Hardware[i]['busy'] = 1Hardware[i]['op'] = 'lw'Hardware[i]['address'] = Register[rs1] + immRegister[rd] = ireturn# 若不存在空閑硬件,則停止流出global pcpc -= 4"""if imm & 0b100000000000 == 0b100000000000:imm = imm + 0b11111111111111111111000000000000a = Memory[Register[rs1] + imm] + (Memory[Register[rs1] + imm + 1] << 8) + (Memory[Register[rs1] + imm + 2] << 16) + (Memory[Register[rs1] + imm + 3] << 24)Register[rd] = a"""pass# 無符號字節加載指令 def lbu(rd, rs1, imm):if imm & 0b100000000000 == 0b100000000000:imm = imm + 0b11111111111111111111000000000000a = Memory[Register[rs1] + imm]Register[rd] = apass# 無符號半字加載指令 def lhu(rd, rs1, imm):if imm & 0b100000000000 == 0b100000000000:imm = imm + 0b11111111111111111111000000000000a = Memory[Register[rs1] + imm] + (Memory[Register[rs1] + imm + 1] << 8)Register[rd] = apass# ***************************Stores*************************** # 存字節指令 def sb(rs1, rs2, imm):if imm & 0b100000000000 == 0b100000000000:imm = imm + 0b11111111111111111111000000000000Memory[Register[rs1] + imm] = Register[rs2] & 0b11111111pass# 存半字指令 def sh(rs1, rs2, imm):if imm & 0b100000000000 == 0b100000000000:imm = imm + 0b11111111111111111111000000000000Memory[Register[rs1] + imm] = Register[rs2] & 0b11111111Memory[Register[rs1] + imm + 1] = (Register[rs2] >> 8) & 0b11111111pass# 存字指令 # 存字指令 def sw(rs1, rs2, imm):# rs1表示內存地址,rs2表示存入寄存器List = ['store1', 'store2', 'store3']for i in List:if Hardware[i]['busy'] == 0:# 若存在硬件是空閑的,則修改硬件狀態,然后返回Hardware[i]['tag'] = 2Hardware[i]['busy'] = 1Hardware[i]['op'] = 'sw'Hardware[i]['address'] = Register[rs1] + immif isinstance(Register[rs2], int):Hardware[i]['s1_vj'] = Register[rs2]else:Hardware[i]['rs_qj'] = Register[rs2]Register[rs2] = Hardware[i]return# 若不存在空閑硬件,則停止流出global pcpc -= 4"""if imm & 0b100000000000 == 0b100000000000:imm = imm + 0b11111111111111111111000000000000Memory[Register[rs1] + imm] = Register[rs2] & 0b11111111Memory[Register[rs1] + imm + 1] = (Register[rs2] >> 8) & 0b11111111Memory[Register[rs1] + imm + 2] = (Register[rs2] >> 16) & 0b11111111Memory[Register[rs1] + imm + 3] = Register[rs2] >> 24"""pass# ***************************Shifts*************************** # 邏輯左移指令 def sll(rd, rs1, rs2):Register[rd] = (Register[rs1] << (Register[rs2] & 0b11111)) & 0xffffffffpass# 立即數邏輯左移 def slli(rd, rs1, shamt):if shamt < 0b100000:Register[rd] = (Register[rs1] << shamt) & 0xffffffffpass# 邏輯右移指令 def srl(rd, rs1, rs2):Register[rd] = Register[rs1] >> (Register[rs2] & 0b11111)pass# 立即數邏輯右移 def srli(rd, rs1, shamt):if shamt < 0b100000:Register[rd] = Register[rs1] >> shamtpass# 算數右移指令 def sra(rd, rs1, rs2):Register[rd] = Register[rs1] >> (Register[rs2] & 0b11111)if (Register[rs1] >> 31) == 1:for i in range(0, Register[rs2] & 0b11111):Register[rd] = Register[rd] + 2 ** (31 - i)pass# 立即數算數右移指令 def srai(rd, rs1, shamt):Register[rd] = Register[rs1] >> (shamt & 0b11111)if (Register[rs1] >> 31) == 1:for i in range(0, shamt & 0b11111):Register[rd] = Register[rd] + 2 ** (31 - i)pass# ***************************Arithmetic*************************** # 加指令 def add(rd, rs1, rs2):Register[rd] = Register[rs1] + Register[rs2]pass# 加立即數指令 def addi(rd, rs1, imm):List = ['add1', 'add2', 'add3']for i in List:if Hardware[i]['busy'] == 0:# 若存在硬件是空閑的,則修改硬件狀態,然后返回Hardware[i]['tag'] = 2Hardware[i]['busy'] = 1Hardware[i]['op'] = 'addi'if isinstance(Register[rs1], int):Hardware[i]['s1_vj'] = Register[rs1]else:Hardware[i]['rs_qj'] = Register[rs1]Hardware[i]['imm'] = immRegister[rd] = Hardware[i]return# 若不存在空閑硬件,則停止流出global pcpc -= 4"""# print(Register[rd],Register[rs1],imm)print('指令addi')if imm & 0b100000000000 == 0b100000000000:imm = imm + 0b11111111111111111111000000000000Register[rd] = (Register[rs1] + imm) & 0xffffffffprint('x1:')print(Register[rd])"""pass# 減指令 def sub(rd, rs1, rs2):pass# 高位立即數加載指令 def lui(rd, imm):pass# PC加立即數指令 def auipc(rd, imm):pass# ***************************Logical*************************** # 異或指令 def xor(rd, rs1, rs2):pass# 立即數異或指令 def xori(rd, rs1, imm):pass# 取或指令 def or_(rd, rs1, rs2):pass# 立即數取或指令 def ori(rd, rs1, imm):pass# 與指令 def and_(rd, rs1, rs2):pass# 與立即數指令 def andi(rd, rs1, imm):Register[rd] = Register[rs1] + immpassdef mul(rd, rs1, rs2):List = ['mult1', 'mult2']for i in List:if Hardware[i]['busy'] == 0:# 若存在硬件是空閑的,則修改硬件狀態,然后返回Hardware[i]['tag'] = 10Hardware[i]['busy'] = 1Hardware[i]['op'] = 'mul'if isinstance(Register[rs1], int):Hardware[i]['s1_vj'] = Register[rs1]else:Hardware[i]['rs_qj'] = Register[rs1]if isinstance(Register[rs2], int):Hardware[i]['s2_vk'] = Register[rs2]else:Hardware[i]['rs_qk'] = Register[rs2]Register[rd] = Hardware[i]return# 若不存在空閑硬件,則停止流出global pcpc -= 4"""if Register[rs1] < 2 ** 31:tag1 = Register[rs1]else:tag1 = Register[rs1] - 2 ** 32if Register[rs2] < 2 ** 31:tag2 = Register[rs2]else:tag2 = Register[rs2] - 2 ** 32tag3 = tag1 * tag2if tag3 < 2 ** 31:Register[rd] = tag3elif tag3 < 2 ** 32:Register[rd] = tag3 - 2 ** 32else:return False"""pass# ***************************Compare*************************** # 小于則置位指令 def slt(rd, rs1, rs2):pass# 小于立即數則置位指令 def slti(rd, rs1, imm):pass# 無符號小于則置位指令 def sltu(rd, rs1, rs2):pass# 無符號小于立即數則置位指令 def sltiu(rd, rs1, imm):pass# ***************************Branches*************************** # 相等時分支指令 def beq(rs1, rs2, imm):pass# 不等式分支指令 def bne(rs1, rs2, imm):List = ['add1', 'add2', 'add3']for i in List:if Hardware[i]['busy'] == 0:# 若存在硬件是空閑的,則修改硬件狀態,然后返回Hardware[i]['tag'] = 1Hardware[i]['busy'] = 1Hardware[i]['op'] = 'bne'Hardware[i]['s1_vj'] = Register[rs1]Hardware[i]['s2_vk'] = Register[rs2]Hardware[i]['imm'] = immreturn# 若不存在空閑硬件,則停止流出global pcpc -= 4"""print('指令bne')global pcif (Register[rs1] != Register[rs2]):pc += (imm * 4) - 4"""pass# 小于時分支指令 def blt(rs1, rs2, imm):pass# 大于等于時分支指令 def bge(rs1, rs2, imm):pass# 無符號小于時分支指令 def bltu(rs1, rs2, imm):pass# 無符號大于等于時分支指令 def bgeu(rs1, rs2, imm):passdef jalr(rd, rs1, imm):passdef ecall(rd, rs1, imm):passdef ebreak(rd, rs1, imm):pass# ***************************Supplement*************************** # 浮點加載雙字 def fld(rd, rs1, imm):if imm & 0b100000000000 == 0b100000000000:imm = imm + 0b11111111111111111111000000000000# print(Register[rs1], imm)# mout(Register[rs1] + imm)a = Memory[Register[rs1] + imm] + (Memory[Register[rs1] + imm + 1] << 8) + (Memory[Register[rs1] + imm + 2] << 16) + (Memory[Register[rs1] + imm + 3] << 24)Register[rd] = aimm = imm + 4a = Memory[Register[rs1] + imm] + (Memory[Register[rs1] + imm + 1] << 8) + (Memory[Register[rs1] + imm + 2] << 16) + (Memory[Register[rs1] + imm + 3] << 24)Register[rd + 1] = aprint('指令fld')print('內存:')print(((Register[rs1] + imm - 4) - 56) / 8)print('取數:')rout(rd)pass# 雙精度浮點加 def fadd_d(rd, rs1, rs2):tag1 = Register[rs1 + 1] >> 31index1 = ((Register[rs1 + 1] >> 20) & 0b11111111111) - 1023mantissa1 = 1 + ((Register[rs1 + 1] & 0xfffff) * (2 ** 32) + Register[rs1]) * (2 ** (-52))tag2 = Register[rs2 + 1] >> 31index2 = ((Register[rs2 + 1] >> 20) & 0b11111111111) - 1023mantissa2 = 1 + ((Register[rs2 + 1] & 0xfffff) * (2 ** 32) + Register[rs2]) * (2 ** (-52))a = ((-1) ** tag1) * mantissa1 * (2 ** index1) + ((-1) ** tag2) * mantissa2 * (2 ** index2)# print(a)if a >= 0:tag3 = 0else:tag3 = 1a = a * (-1)# print(a)index3 = 1023while a >= 2:a = a / 2index3 = index3 + 1mantissa3 = (int)((a - 1) * (2 ** 52))# print(bin(tag3),bin(index3),bin(mantissa3))Register[rd] = mantissa3 & 0xffffffff# print(bin(Register[rd]))Register[rd + 1] = tag3 * (2 ** 31) + index3 * (2 ** 20) + (mantissa3 >> 32)# print(bin(Register[rd]+1))print('指令fadd_d')rout(rs1)rout(rs2)rout(rd)pass'''Register[0]=0 Register[1]=0b01000000000010110110000000000000 Register[2]=0 Register[3]=0b11000000001001011000000000000000 Register[4]=0 Register[5]=0 fadd_d(4,0,2) print(bin(Register[4]),bin(Register[5])) print((0b11011011-0b1010110000)/(2**6),(0b111010101)/64)'''# 雙精度浮點存儲 def fsd(rs1, rs2, imm):if imm & 0b100000000000 == 0b100000000000:imm = imm + 0b11111111111111111111000000000000Memory[Register[rs1] + imm] = Register[rs2] & 0b11111111Memory[Register[rs1] + imm + 1] = (Register[rs2] >> 8) & 0b11111111Memory[Register[rs1] + imm + 2] = (Register[rs2] >> 16) & 0b11111111Memory[Register[rs1] + imm + 3] = Register[rs2] >> 24rs2 = rs2 + 1imm = imm + 4Memory[Register[rs1] + imm] = Register[rs2] & 0b11111111Memory[Register[rs1] + imm + 1] = (Register[rs2] >> 8) & 0b11111111Memory[Register[rs1] + imm + 2] = (Register[rs2] >> 16) & 0b11111111Memory[Register[rs1] + imm + 3] = Register[rs2] >> 24print('指令fsd')# rout(rs2-1)print('存入內存:')print(((Register[rs1] + imm - 4) - 56) / 8)print('存入數:')mout(Register[rs1] + imm - 4)passdef mout(addr):a = Memory[addr] + (Memory[addr + 1] << 8) + (Memory[addr + 2] << 16) + (Memory[addr + 3] << 24)addr = addr + 4b = Memory[addr] + (Memory[addr + 1] << 8) + (Memory[addr + 2] << 16) + (Memory[addr + 3] << 24)tag = b >> 31index = ((b >> 20) & 0b11111111111) - 1023mantissa = 1 + ((b & 0xfffff) * (2 ** 32) + a) * (2 ** (-52))flo = mantissa * (2 ** index) * ((-1) ** tag)print(flo)def rout(addr):a = Register[addr]addr = addr + 1b = Register[addr]tag = b >> 31index = ((b >> 20) & 0b11111111111) - 1023mantissa = 1 + ((b & 0xfffff) * (2 ** 32) + a) * (2 ** (-52))flo = mantissa * (2 ** index) * ((-1) ** tag)print(flo)# 指令集 class ISA:def __init__(self):instruction = self.defInstr()self.tellFormat(instruction)def defInstr(self): # 傳入參數為指令在內存的地址instru = 0x00000000if (pc == 68):print("breakpoint")for i in range(4):# print(hex(addr + i))# print(hex(Memory[addr + i]))instru += Memory[pc + i] * (256 ** i)# print(hex(instru))return instruinstruFormat = {0b0110011: 'RFormat', # 運算0b0010011: 'IFormat', # 運算0b0000011: 'IFormat', # load0b0100011: 'SFormat', # store0b1100011: 'SBFormat', # branch0b1101111: 'UJFormat', # jump(大立即數跳轉)0b1100111: 'IFormat', # jump0b0110111: 'UFormat', # rd = imm << 120b0010111: 'UFormat', # rd = pc + (imm << 12)0b1110011: 'IFormat', # transfer control0b0100111: 'SFormat', # fsd0b0000111: 'IFormat', # fld0b1010011: 'RFormat', # fadd_d}def getopfromins(self, instruction):return instruction & 0b1111111def tellFormat(self, instruction):opcode = self.getopfromins(instruction)switch = {0b0110011: 'RFormat', # 運算0b0010011: 'IFormat', # 運算0b0000011: 'IFormat', # load0b0100011: 'SFormat', # store0b1100011: 'SBFormat', # branch0b1101111: 'UJFormat', # jump(大立即數跳轉)0b1100111: 'IFormat', # jump0b0110111: 'UFormat', # rd = imm << 120b0010111: 'UFormat', # rd = pc + (imm << 12)0b1110011: 'IFormat', # transfer control0b0100111: 'SFormat', # fsd0b0000111: 'IFormat', # fld0b1010011: 'RFormat', # fadd_d}Format = switch.get(opcode, 'Invalid')# 這里pc加四,如果后面檢測到不可以流出,再進行減四global pcpc += 4if (Format == 'Invalid'):return Falseelif (Format == 'RFormat'):return self.decodeRFormat(instruction)elif (Format == 'IFormat'):return self.decodeIFormat(instruction)elif (Format == 'SFormat'):return self.decodeSFormat(instruction)elif (Format == 'SBFormat'):return self.decodeSBFormat(instruction)elif (Format == 'UFormat'):return self.decodeUFormat(instruction)elif (Format == 'UJFormat'):return self.decodeUJFormat(instruction)return Falsedef decodeRFormat(self, instruction):opcode = instruction & 0b1111111funct7 = instruction >> 25rs2 = instruction >> 20 & 0b11111rs1 = instruction >> 15 & 0b11111funct3 = instruction >> 12 & 0b111rd = instruction >> 7 & 0b11111if (funct7 == 0x00):if (funct3 == 0x0):return add(rd, rs1, rs2)elif (funct3 == 0x4):return xor(rd, rs1, rs2)elif (funct3 == 0x6):return or_(rd, rs1, rs2)elif (funct3 == 0x7):return and_(rd, rs1, rs2)elif (funct3 == 0x1):return sll(rd, rs1, rs2)elif (funct3 == 0x5):return srl(rd, rs1, rs2)elif (funct3 == 0x2):return slt(rd, rs1, rs2)elif (funct3 == 0x3):return sltu(rd, rs1, rs2)elif (funct7 == 0x20):if (funct3 == 0x0):return sub(rd, rs1, rs2)elif (funct3 == 0x5):return sra(rd, rs1, rs2)elif (funct7 == 0x01):if (opcode == 0b1010011):return fadd_d(rd, rs1, rs2)elif (funct3 == 0x0 and opcode == 0b0110011):return mul(rd, rs1, rs2)return Falsedef decodeIFormat(self, instruction):imm = instruction >> 20rs1 = instruction >> 15 & 0b11111funct3 = instruction >> 12 & 0b111rd = instruction >> 7 & 0b11111opcode = instruction & 0b1111111if (opcode == 0b0010011):if (funct3 == 0x0):return addi(rd, rs1, imm)elif (funct3 == 0x4):return xori(rd, rs1, imm)elif (funct3 == 0x6):return ori(rd, rs1, imm)elif (funct3 == 0x7):return andi(rd, rs1, imm)elif (funct3 == 0x1):return slti(rd, rs1, imm)elif (funct3 == 0x5):if (instruction >> 25 == 0b0000000):return srli(rd, rs1, imm)elif (instruction >> 25 == 0b0100000):return srai(rd, rs1, imm)elif (funct3 == 0x2):return slti(rd, rs1, imm)elif (funct3 == 0x3):return sltiu(rd, rs1, imm)elif (opcode == 0b0000011):if (funct3 == 0x0):return lb(rd, rs1, imm)elif (funct3 == 0x1):return lh(rd, rs1, imm)elif (funct3 == 0x2):return lw(rd, rs1, imm)elif (funct3 == 0x4):return lbu(rd, rs1, imm)elif (funct3 == 0x5):return lhu(rd, rs1, imm)elif (opcode == 0b1100111):if (funct3 == 0x0):return jalr(rd, rs1, imm)elif (opcode == 0b1110011):if (funct3 == 0x0 and imm == 0x0):return ecall(rd, rs1, imm)elif (funct3 == 0x0 and imm == 0x1):return ebreak(rd, rs1, imm)elif (opcode == 0b0000111):if (funct3 == 0b011):return fld(rd, rs1, imm)return Falsedef decodeSFormat(self, instruction):imm = (instruction >> 7) & 0b11111 + (instruction >> 25) * 0b100000immTemp = 0b000000000000# 這里的imm是十二位的二進制補碼,需要將其轉換為機器數if (imm >> 11 == 1):for i in range(11):immTemp += (1 - (imm >> i & 1)) * (2 ** i)immTemp += 1imm = 0 - immTempfunct3 = (instruction >> 12) & 0b111rs1 = (instruction >> 15) & 0b11111rs2 = (instruction >> 20) & 0b11111if funct3 == 0x0:return sb(rs1, rs2, imm)elif funct3 == 0x1:return sh(rs1, rs2, imm)elif funct3 == 0x2:return sw(rs1, rs2, imm)elif funct3 == 0x3:return fsd(rs1, rs2, imm)return Falsedef decodeSBFormat(self, instruction):a = (instruction >> 7) & 0b11111c = ((instruction >> 25) & 0b1111111) << 5imm = a + cimmTemp = 0b000000000000# 這里的imm是十二位的二進制補碼,需要將其轉換為機器數if (imm >> 11 == 1):for i in range(11):immTemp += (1 - (imm >> i & 1)) * (2 ** i)immTemp += 1imm = 0 - immTempfunct3 = (instruction >> 12) & 0b111rs1 = (instruction >> 15) & 0b11111rs2 = (instruction >> 20) & 0b11111if funct3 == 0x0:return beq(rs1, rs2, imm)elif funct3 == 0x1:return bne(rs1, rs2, imm)elif funct3 == 0x4:return blt(rs1, rs2, imm)elif funct3 == 0x5:return bge(rs1, rs2, imm)elif funct3 == 0x6:return bltu(rs1, rs2, imm)elif funct3 == 0x7:return bgeu(rs1, rs2, imm)return Falsedef decodeUFormat(self, instruction):opcode = instruction & 0b1111111rd = (instruction >> 7) & 0b11111imm = instruction >> 12immTemp = 0b000000000000# 這里的imm是十二位的二進制補碼,需要將其轉換為機器數if (imm >> 11 == 1):for i in range(11):immTemp += (1 - (imm >> i & 1)) * (2 ** i)immTemp += 1imm = 0 - immTempif opcode == 0b0110111:return lui(rd, imm)elif opcode == 0b0010111:return auipc(rd, imm)return Falsedef decodeUJFormat(self, instruction):return Falsedef main():global Registerglobal Memory# 初始化寄存器Register[0b00001] = 0x00000000 # 1,2寄存器用來存儲常量sRegister[0b00010] = 0x40180000 # s=6# Register[0b00011] = 0x00000300 # 用來存儲x1,即99,這里令其為96*8=768=0x300Register[0b00100] = 0x00000318 # 用來存儲x2,即99 * 8 =# 需要變址寄存器用來找到load和store指令中的內存地址,每四條指令使用同一個變址寄存器,通過改變立即數的大小來決定內存地址的變換Register[0b00101] = 0x00000000 # 用來存儲x1=0,用來表示load或者store指令的變址寄存器# 其余的寄存器用來存儲加載的數字以及計算結果,其初始值都是零# l1 fld# 內存中的指令數據# 1 fld f6 0x38()# load two word指令,立即數為0x38,轉化為二進制為0011 1000# imm[11:0] rs1 011 rd 0000111# 0000 0011 1000 0010 1 011 0011 0 000 0111# EA = A + (rs1)# 0x 03 82 B3 07Memory[0x00000030] = 0x07Memory[0x00000031] = 0xB3Memory[0x00000032] = 0x82Memory[0x00000033] = 0x03# l2 fadd# 這里rd(14\15)的地址為:0b01110,rs1(6、7數組中的元素)的地址為:0b00110,r2(1/2,常量s)的地址為:0b00001# funct7 rs2 rs1 funct3 rd opcode# 0000001 00001 00110 001 01110 1010011# 其中funct7和funct3的組合表示浮點加法運算# 16進制表示為0x 02 13 17 53Memory[0x00000034] = 0x53Memory[0x00000035] = 0x17Memory[0x00000036] = 0x13Memory[0x00000037] = 0x02# l3 fsd# 和第一條load指令相對應# 內存中的指令數據# 1 fld# load two word指令,立即數為0x38,轉化為二進制為0011 1000# imm[11:0] rs1 110 rd 0000011# 000000111000 00101 110 00110 0000011# rs2需要存儲的數據# rs1基址寄存器# imm[11:5] rs2 rs1 func3 imm[4:0] opcode# 0000001 01110 00101 011 11000 0100011# 這里的立即數和load指令中的立即數具有相同的作用,即數組在內存中的開始地址# 其十六進制表示為0x02 E2 BC 23Memory[0x00000038] = 0x23Memory[0x00000039] = 0xBCMemory[0x0000003A] = 0xE2Memory[0x0000003B] = 0x02# l4 addi# x1是存儲在第一條load指令的基址寄存器和imm產生的內存地址,初始值為96*4,最后的值為0# imm為8# imm[11:0] rs1 111 rd 0010011# 0000 0000 1000 0010 1 000 0010 1 001 0011# 十六進制表示為0x 00 82 82 93Memory[0x0000003C] = 0x93Memory[0x0000003D] = 0x82Memory[0x0000003E] = 0x82Memory[0x0000003F] = 0x00"""# l5 bne# 若x1和x2里面的內容不相等則進行分支轉移# 分支轉移中的立即數,令其為-6# imm[12|10:5] rs2 rs1 func3 imm[4:1|11] opcode# x1 x2# 1111111 00101 00100 001 11010 1100011# 16進制表示為0x FE 52 1D 63Memory[0x00000040] = 0x63Memory[0x00000041] = 0x1DMemory[0x00000042] = 0x52Memory[0x00000043] = 0xFE"""# l5 bne# 若x1和x2里面的內容不相等則進行分支轉移# 分支轉移中的立即數,令其為-4# imm[12|10:5] rs2 rs1 func3 imm[4:1|11] opcode# x1 x2# 1111111 00101 00100 001 11100 1100011# 16進制表示為0x FE 52 1E 63Memory[0x00000040] = 0x63Memory[0x00000041] = 0x1EMemory[0x00000042] = 0x52Memory[0x00000043] = 0xFE# 指令后面的位置用來存儲數組數據,從十進制56開始即0x38for i in range(100):Memory[0x00000044 + i * 8] = 0x00Memory[0x00000044 + i * 8 + 1] = 0x00Memory[0x00000044 + i * 8 + 2] = 0x00Memory[0x00000044 + i * 8 + 3] = 0x00m = (i + 1023) * 16Memory[0x00000044 + i * 8 + 4] = 0x00Memory[0x00000044 + i * 8 + 5] = 0x00Memory[0x00000044 + i * 8 + 6] = m & 0xffMemory[0x00000044 + i * 8 + 7] = (m >> 8) & 0xff"""for i in range(100):print('運行前內存%d:' % i)mout(0x00000044 + i * 8)"""global pcpc = 0x00000030clock = 0for clock in range(10000):print(pc)Issue()Exec()Write()clock += 1if pc == 0x00000044:pass"""for i in range(100):print('運行后內存%d:' % i)mout(0x00000038 + i * 8)"""main()

總結

以上是生活随笔為你收集整理的python模拟硬件实现btb和tomasulo算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

久久艹国产 | 欧美色黄| 亚洲三级黄色 | 精品99久久久久久 | 久久久av免费| 久久久网页 | 丁香婷婷射 | 91在线影视 | 国内精品久久久久久久久久久久 | 国产精品一区二区av麻豆 | 国产a免费 | 91亚色视频在线观看 | 人人爽人人爱 | 成人九九视频 | 一区二区三区四区不卡 | 69精品视频 | 精品99999| 天天插综合 | 欧美最爽乱淫视频播放 | 91电影福利| 国产在线精品一区二区 | 国产淫片免费看 | 国产精品不卡在线观看 | 久久亚洲欧美 | 18做爰免费视频网站 | 国产一区视频免费在线观看 | 超碰日韩 | 尤物九九久久国产精品的分类 | 成人av播放 | 人人舔人人插 | 国模视频一区二区三区 | 久久久精品国产免费观看一区二区 | 免费中文字幕在线观看 | 国产日产精品一区二区三区四区 | 久久久精品国产免费观看一区二区 | 欧美高清视频不卡网 | 精品视频一区在线观看 | 亚洲成av人片在线观看无 | free. 性欧美.com | 国产黄色免费电影 | 日韩欧美在线中文字幕 | 狠狠狠色丁香综合久久天下网 | 国产一线二线三线在线观看 | 精品国产一区二区三区不卡 | 日本69hd| 国产第一福利网 | 国产精品美女www爽爽爽视频 | 五月婷婷六月丁香在线观看 | 久久国产精品免费观看 | 婷婷综合电影 | 日日干干| 亚洲精品国偷自产在线91正片 | 正在播放日韩 | 国产在线观看高清视频 | 中文字幕在线观看第一页 | 在线国产日本 | 久久久国产一区二区三区四区小说 | 香蕉一区 | 国产成人三级在线观看 | 久久久久久国产精品999 | 国产中文字幕一区 | 91精品国产乱码在线观看 | 瑞典xxxx性hd极品 | 日韩在线免费播放 | 亚洲精品视频久久 | 亚洲 欧美 成人 | 999成人网 | 一级片免费在线 | 中文字幕亚洲精品在线观看 | 婷婷综合激情 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 日韩一区二区三区在线观看 | 亚洲精品视频免费在线 | 91av超碰| 亚洲精品乱码久久久久久9色 | 日本黄色大片免费看 | 午夜少妇一区二区三区 | 久久精品久久久久电影 | 国产精品视频免费在线观看 | 色综合久久久久网 | 国产美腿白丝袜足在线av | 四虎8848免费高清在线观看 | 国产精品一区二区美女视频免费看 | 久草免费色站 | 亚洲国产资源 | 亚洲国产综合在线 | 99热在| 91网址在线 | 日日干夜夜爱 | 综合久久综合久久 | 成人黄色中文字幕 | 天天天天天天天操 | 日韩精品久久一区二区 | 中文字幕乱在线伦视频中文字幕乱码在线 | zzijzzij亚洲日本少妇熟睡 | 久久精品毛片基地 | 久久精品国产v日韩v亚洲 | 91黄色免费网站 | 五月婷婷综合久久 | 久热色超碰 | 开心激情五月网 | 五月综合色 | 首页中文字幕 | 久草在线免费资源站 | 午夜视频不卡 | 国产一级精品在线观看 | 国产视频手机在线 | 国产中文字幕在线播放 | 免费成人黄色 | 五月天电影免费在线观看一区 | 就操操久久 | 成人h视频在线播放 | 超碰大片 | 国产99re| 天天狠狠操 | 国产在线精品国自产拍影院 | 精品欧美一区二区在线观看 | 五月婷婷欧美视频 | 狠狠操天天射 | 国产xxxx性hd极品 | 91成人网在线播放 | 青青河边草免费观看完整版高清 | 免费a网址 | 欧美日韩国产一区二区三区在线观看 | 日韩精品中文字幕久久臀 | 五月婷婷在线视频观看 | 欧美狠狠色 | 日韩电影在线观看一区二区三区 | 蜜臀av夜夜澡人人爽人人桃色 | 九九热在线观看视频 | 天天操天天爽天天干 | 久久久久国产成人精品亚洲午夜 | 一区二区三区精品在线 | 午夜视频一区二区 | 亚洲一区精品二人人爽久久 | 天堂在线免费视频 | 久久久久区 | 91精品国自产在线观看欧美 | 91视频免费网址 | 一区精品在线 | 在线观看91网站 | 色妞久久福利网 | 香蕉久草在线 | 午夜色场 | 人人涩| free. 性欧美.com| 少妇性aaaaaaaaa视频 | 亚洲伦理电影在线 | 91九色成人蝌蚪首页 | 97免费| 亚洲免费资源 | 九9热这里真品2 | 91精品在线免费视频 | 国产美女在线观看 | 久久电影中文字幕视频 | 久久久精品久久日韩一区综合 | 黄色大全免费网站 | 91精品专区 | a级国产乱理伦片在线观看 亚洲3级 | 天天草视频 | 美女搞黄国产视频网站 | 日本韩国在线不卡 | 91人人插 | 日本福利视频在线 | 成年人av在线播放 | 国产一区福利在线 | 69av视频在线 | 黄色毛片电影 | 国产视频一区在线播放 | 成人app在线免费观看 | 亚洲精品人人 | 天天综合久久 | 国产在线综合视频 | 美女精品在线 | 国产精品96久久久久久吹潮 | 日韩免费成人av | 五月天国产精品 | 亚洲国产欧美一区二区三区丁香婷 | 天堂av网址 | 亚洲欧美日本国产 | 免费a一级 | 99久久超碰中文字幕伊人 | 一区二区三区在线观看免费 | 亚洲天堂网视频在线观看 | 久久国产精品二国产精品中国洋人 | 99这里只有久久精品视频 | 日韩精品一区二区三区不卡 | 99久久er热在这里只有精品66 | 在线观看福利网站 | 色综合天天视频在线观看 | 久久精品久久精品久久精品 | 免费黄av| 最近高清中文在线字幕在线观看 | 国产成人精品av在线 | 操久在线 | 91禁看片 | 欧美久久久久久久久久久 | 99看视频在线观看 | 婷婷色网视频在线播放 | 婷婷丁香久久五月婷婷 | 97夜夜澡人人爽人人免费 | 欧美精品乱码久久久久久按摩 | 99久久精品国产观看 | 中文字幕亚洲字幕 | 视频三区| 麻豆一区二区 | 天堂v中文| 亚洲精品www久久久 www国产精品com | 免费a v网站 | 久久免费的视频 | 午夜精品一区二区三区可下载 | 天天操天天操天天操天天操天天操 | 人人爽夜夜爽 | 亚洲成人精品 | 精品 激情 | 亚洲欧美日韩中文在线 | 日日干 天天干 | 久久久免费 | 97香蕉久久超级碰碰高清版 | 久久综合狠狠狠色97 | 九九在线高清精品视频 | 一个色综合网站 | 成人午夜毛片 | 久久网站免费 | 免费a视频 | 天天操天天操天天爽 | 超碰夜夜| 成人黄色小说视频 | 国产精品日韩在线 | 国产又粗又猛又黄又爽视频 | 国产精品成人aaaaa网站 | 亚洲精品视频在线播放 | av免费看在线 | 久草在线欧美 | 免费在线观看一区二区三区 | 日韩视频免费 | 97超碰伊人| 国产成人精品久久久久蜜臀 | 在线免费观看羞羞视频 | 国产日产高清dvd碟片 | 国产高清免费在线观看 | 日韩最新av在线 | 国产精品免费大片视频 | 欧美极品xxxxx | 免费看的黄网站 | 成年人黄色在线观看 | 日韩不卡高清视频 | 免费精品视频在线 | 欧美日韩一区二区久久 | 日韩视频免费观看高清 | 久久永久免费视频 | 久热超碰 | 久视频在线播放 | 一区二区精品视频 | 国产免费人成xvideos视频 | 国内一级片在线观看 | 成人中文字幕在线 | 1024手机在线看 | 99视频精品全部免费 在线 | 精品一区在线看 | 国产乱码精品一区二区蜜臀 | 亚洲午夜久久久久久久久久久 | 深夜免费福利视频 | 91免费黄视频 | 精品一区二区在线免费观看 | 久久66热这里只有精品 | 久久精品欧美日韩精品 | 东方av免费在线观看 | 九色在线 | 亚洲国产成人精品在线观看 | 日韩在线在线 | 日本不卡视频 | 国产一二三四在线观看视频 | 免费国产视频 | 色婷婷av国产精品 | 91麻豆精品国产自产在线 | 国产精品自拍av | 九九影视理伦片 | 欧美另类v | 久久人91精品久久久久久不卡 | 91av蜜桃| www.夜夜干.com| 久久久久国产精品厨房 | 日韩有码中文字幕在线 | 婷婷色在线资源 | 91污在线| 高清不卡一区二区在线 | av一级一片| 中文字幕资源网在线观看 | 在线观看91精品国产网站 | 黄网站色 | 久久久久久久久久久久影院 | 国产精品久一 | 狠狠亚洲 | 永久av免费在线观看 | 日批视频国产 | 国产精品久久久久久爽爽爽 | 国产成人区 | 成人在线一区二区 | 国产成人综 | 国产系列在线观看 | 国产精品美女久久久久久久网站 | 婷婷亚洲综合五月天小说 | 五月天激情综合 | 9在线观看免费高清完整版在线观看明 | 成人黄大片视频在线观看 | 97超级碰碰 | 中文字幕免费高清在线 | 欧美日韩首页 | 亚洲综合一区二区精品导航 | 国产区精品 | 欧美久久久久 | 黄色看片 | 亚洲伊人婷婷 | av三级av| 欧美污污网站 | 精品黄色片 | 久久久久免费 | 欧美国产日韩在线视频 | 国产福利91精品一区二区三区 | 又黄又爽又色无遮挡免费 | 在线播放国产精品 | 亚洲伦理一区 | 日韩欧美视频免费看 | 久草在线视频在线 | 国产一区二区三精品久久久无广告 | a视频在线 | 狠狠狠干 | 激情av资源 | 中文十次啦 | 成人在线免费看视频 | 99久久精品国产毛片 | 午夜美女av| 久草观看视频 | 在线观看韩国av | 国产午夜精品一区二区三区在线观看 | 天天操天天操天天干 | 99r在线视频| 丁香五月亚洲综合在线 | 成人免费看视频 | 日日操天天操狠狠操 | 久久免费看a级毛毛片 | 色吊丝在线永久观看最新版本 | 在线播放一区二区三区 | 96精品视频 | 日日干天夜夜 | 免费看高清毛片 | 国产69精品久久久久99尤 | 国内一级片在线观看 | 婷婷去俺也去六月色 | 国产午夜在线观看 | 日韩免费一区二区 | 午夜精品福利一区二区 | 国产一区福利在线 | 中文字幕av电影下载 | 手机成人在线电影 | 国产亚洲日本 | 亚洲视频,欧洲视频 | 少妇视频在线播放 | 国产精品一级在线 | 亚洲最新在线视频 | 欧美成人在线免费观看 | 黄色av一区 | 不卡国产视频 | 成年人在线观看免费视频 | 69av视频在线 | 青青河边草观看完整版高清 | 亚洲综合狠狠干 | 亚洲第一香蕉视频 | 久久夜av| 亚洲视频一级 | 国产无遮挡又黄又爽馒头漫画 | 99色在线| 欧美日韩精品在线观看 | 亚洲精品中文字幕在线 | 欧美成人久久 | 久久久人人爽 | 精品国产日本 | 亚洲精品麻豆 | 福利一区二区三区四区 | 国产精品乱看 | 天天色天天干天天 | 日本一区二区高清不卡 | 97视频免费播放 | 蜜桃av人人夜夜澡人人爽 | 免费看国产精品 | 国产精品美女久久久久久 | 91人人爱| 欧美成人在线网站 | 日本性视频 | 日韩精品极品视频 | 亚洲精品97 | 碰超在线观看 | 片网址| 国产一区二区精品91 | 亚洲成人av影片 | 久久黄色网址 | 国产一区欧美一区 | 日韩欧美一区二区三区在线观看 | 欧美久草网 | 正在播放国产一区二区 | 久久99国产综合精品免费 | www.久草.com | 人人澡人摸人人添学生av | 精品一二区 | 中文字幕制服丝袜av久久 | 亚洲电影免费 | 毛片无卡免费无播放器 | 国产亚洲精品bv在线观看 | www91在线 | 国产精品国产三级国产 | 国产福利91精品一区 | 天天操天天操天天操天天操天天操 | 国产精品不卡在线观看 | 免费av看片 | 天天躁日日躁狠狠躁av麻豆 | 亚洲国产精品va在线 | 精品人人人人 | 狠狠躁天天躁 | 国产小视频网站 | 性色av一区二区三区在线观看 | 久久99久久久久 | 亚洲精品综合欧美二区变态 | 日韩亚洲在线 | 在线观看亚洲视频 | 久久久精品国产免费观看同学 | 亚洲欧美日韩在线一区二区 | 日韩午夜一级片 | 亚洲色图美腿丝袜 | 2018好看的中文在线观看 | 天天舔天天射天天操 | 久久精品美女视频网站 | av一区二区三区在线播放 | 国产成人精品福利 | 国产精品一区二区吃奶在线观看 | 丁香婷婷色综合亚洲电影 | 美女网站视频免费都是黄 | 国产精品不卡在线播放 | 国产九色视频在线观看 | 99精品一区二区 | 手机在线视频福利 | 五月婷婷丁香六月 | 亚洲人成人天堂h久久 | 久久黄色免费视频 | 国产亚洲精品综合一区91 | 亚洲激情p | 欧美成人日韩 | 久久久九色精品国产一区二区三区 | 国产精品免费观看国产网曝瓜 | 热久久免费国产视频 | av一级在线 | 日韩成人高清在线 | 91av美女| 亚洲视频电影在线 | 操久久网| 色婷久久 | 九月婷婷人人澡人人添人人爽 | 在线免费观看黄 | 最近字幕在线观看第一季 | 亚洲三级在线免费观看 | 中文字幕亚洲国产 | 国产一区二区三区在线免费观看 | 丁香婷婷深情五月亚洲 | 欧美在线观看视频一区二区三区 | 国产不卡在线视频 | 日本大尺码专区mv | 69欧美视频 | 国产日韩精品视频 | 亚洲a在线观看 | www.精选视频.com | 日韩在线观看高清 | 久久艹影院 | sesese图片| 在线观看视频99 | 伊人永久| 中文字幕在线资源 | 国产免费久久精品 | 亚洲成av人影院 | 欧美精品一区二区三区一线天视频 | 五月天婷婷在线视频 | 久久国产精品99久久久久久丝袜 | 夜添久久精品亚洲国产精品 | 欧美在线观看禁18 | 五月综合激情 | 毛片网在线观看 | 亚洲艳情 | 国产精品久久久久久久av电影 | 国产精品久久久久久久妇 | 最近中文字幕大全中文字幕免费 | 精品中文字幕在线观看 | 国产综合福利在线 | 亚洲精品1234区 | 伊人黄 | 少妇精品久久久一区二区免费 | 婷婷伊人综合 | 激情亚洲综合在线 | 欧美日韩国产精品一区 | 日韩午夜电影 | 国产精品免费小视频 | 成人片在线播放 | 狠狠色狠狠色综合日日92 | 日韩有码中文字幕在线 | 亚洲精品国产精品国自 | 免费久草视频 | 激情欧美一区二区三区 | 天天综合亚洲 | 综合铜03| 99久久这里只有精品 | 成人在线视频在线观看 | 国产精品av在线 | 亚洲成色777777在线观看影院 | 国产中文字幕亚洲 | 西西444www大胆无视频 | 97色婷婷成人综合在线观看 | 中文字幕在线一区二区三区 | 97视频亚洲 | 综合色天天 | 国产亚洲精品xxoo | 国产资源在线免费观看 | 亚洲电影免费 | 日日爽天天操 | 免费看片成年人 | 欧美在线1区 | 亚洲专区中文字幕 | 美女网站视频免费都是黄 | 久久久久免费 | 四虎免费在线观看 | 91视频麻豆 | 中文字幕乱码日本亚洲一区二区 | 日本精品久久久一区二区三区 | 午夜视频在线观看欧美 | 日本精品一区二区 | 国产成人三级在线播放 | 亚洲激情在线播放 | 五月天国产| 日本一区二区三区免费看 | 亚洲无人区小视频 | 欧美一区二区免费在线观看 | 香蕉网在线观看 | 在线精品视频免费播放 | 成年人黄色大片在线 | 亚洲国产中文字幕在线观看 | 欧美一二三区播放 | 国产成人精品一区二区三区福利 | 日韩激情在线 | 成人a毛片 | 亚洲aⅴ免费在线观看 | 国产黄色一级片在线 | 97超碰在线久草超碰在线观看 | 国产成人黄色片 | 国产91免费在线 | 久久久五月天 | 91激情视频在线播放 | 久久久久免费精品国产 | 国产精品视频免费看 | 亚洲视频999 | 亚洲va综合va国产va中文 | 午夜av激情 | 中文字幕一区二区三区乱码不卡 | 西西www4444大胆视频 | 久久久久国产成人免费精品免费 | 久久99爱视频 | 激情图片久久 | 国产在线视频资源 | 天天爽夜夜爽人人爽一区二区 | 精品伦理一区二区三区 | 91av电影在线 | 欧美日韩精品免费观看视频 | 狠狠干狠狠久久 | 日韩在线视频线视频免费网站 | 免费三级黄 | 国产一区视频导航 | 欧美精品首页 | 久在线观看 | 国产精品综合在线观看 | 免费av网站在线看 | 天天爽天天碰狠狠添 | 福利视频网站 | 欧美在线视频日韩 | 国产精品爽爽久久久久久蜜臀 | 日韩一级成人av | 国产午夜在线观看视频 | 超碰人人99 | 在线观看黄污 | 精品久久精品久久 | 999视频在线播放 | 久久精品视频中文字幕 | 成人在线视频免费 | 久久人人爽人人爽人人片av软件 | 免费观看的黄色片 | 国产精品入口a级 | 91爱爱视频 | 蜜桃视频在线视频 | 国产亚洲日 | 国产系列 在线观看 | 国产小视频免费在线网址 | 精品久久久久久亚洲综合网 | 天天曰天天干 | 日韩精品久久久久久久电影99爱 | 特级a老妇做爰全过程 | 成人av片免费看 | 在线91精品 | 人人射人人澡 | 精品国产a | 国产精品系列在线 | 天天射天天干天天 | 久久天堂亚洲 | 性色xxxxhd | 成年免费在线视频 | 免费99精品国产自在在线 | 四虎永久免费在线观看 | 久久试看 | 久久久久久久久亚洲精品 | 国产一二区视频 | 91精品国产乱码在线观看 | 成人中文字幕在线 | 天天天天天天天操 | 黄色一及电影 | 永久精品视频 | 国产精品久久久久一区二区三区 | 久久免费在线观看视频 | 亚洲成av人片在线观看香蕉 | 久久国产日韩 | 爱爱av在线| 毛片随便看 | 欧美一区二区在线刺激视频 | 天天干 夜夜操 | 国产在线观看中文字幕 | 日本精品中文字幕 | 91经典在线 | 黄色av高清 | 国产精品久久久久久婷婷天堂 | 特级西西www44高清大胆图片 | 国产不卡视频 | 亚洲第一久久久 | 国产一区在线看 | 天天综合导航 | 808电影免费观看三年 | wwxxxx日本| 天天综合网久久 | 日本公乱妇视频 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 天天操夜夜操 | 99精品国产成人一区二区 | 射射射av | 国产视频色 | 亚洲一级二级三级 | 天天操天| 欧美9999| 久章操| 国产亚洲在线观看 | 亚洲综合视频在线观看 | 国产精久久久久久妇女av | 国产精品人成电影在线观看 | 美女黄色网在线播放 | 二区中文字幕 | 99久久精品国产一区二区成人 | 国产精品久久久久久久久久免费 | 午夜国产福利在线 | 日韩免费观看一区二区 | 日韩一级片大全 | 超碰在线97观看 | 国产99在线 | 在线免费中文字幕 | 日韩欧美视频在线免费观看 | 99色视频 | 日本bbbb摸bbbb| 日日摸日日添夜夜爽97 | 成人一级黄色片 | 国产韩国日本高清视频 | 色婷婷视频在线观看 | 久久综合偷偷噜噜噜色 | 伊人狠狠色 | 五月开心激情 | 国产你懂的在线 | 日韩美av在线 | 911av视频 | 一区二区精| 五月婷婷色播 | 人人狠狠| 国产一级一片免费播放放 | 午夜狠狠操 | 日韩美女免费线视频 | 蜜桃av人人夜夜澡人人爽 | 成人亚洲欧美 | 国际av在线 | 18+视频网站链接 | 亚洲天堂网在线视频 | 97超碰资源总站 | 久久成人高清视频 | 欧美俄罗斯性视频 | 国产精品午夜久久久久久99热 | 国产精品久久久久久999 | 开心激情网五月天 | 国产免费作爱视频 | 国产亚洲va综合人人澡精品 | a久久久久| 国产成人精品女人久久久 | 天天综合入口 | 999久久久| 在线中文视频 | 亚洲a网 | 久久黄色美女 | 美女黄色网在线播放 | 久久久免费观看完整版 | 婷婷久久一区 | 久久av在线| 天天色成人| 九九国产精品视频 | 韩日电影在线免费看 | 香蕉精品在线观看 | 99久久er热在这里只有精品66 | 久久久久久中文字幕 | 正在播放国产精品 | 日本不卡一区二区 | 日韩精品久久中文字幕 | 国产在线高清精品 | 欧美一区二区三区在线看 | 欧美日韩一区二区在线观看 | 免费看黄20分钟 | 成人av电影在线观看 | 欧美精品在线观看免费 | 中文字幕 国产 一区 | 日韩av电影免费观看 | 亚洲免费观看在线视频 | 亚洲 欧洲av | 天天综合导航 | 日韩精品2区 | 91麻豆产精品久久久久久 | 免费成人在线观看 | 国产一区二区在线播放 | 美女视频黄的免费的 | 欧美日韩在线观看一区二区 | 亚洲va天堂va欧美ⅴa在线 | 国产成人精品在线观看 | 精品国产免费人成在线观看 | 日本爽妇网| 中文字幕在线一区二区三区 | 黄色片网站av | 九色福利视频 | 婷婷www| 精品国产乱子伦一区二区 | 久久高清av| 婷婷成人综合 | 国产精品女主播一区二区三区 | av直接看 | 成人h视频在线播放 | 97国产在线观看 | 超碰97国产精品人人cao | 99久久www免费| 韩国精品福利一区二区三区 | 国产高清免费在线播放 | 中文字幕在线观看视频免费 | 国产精品尤物 | 亚洲午夜久久久久久久久 | 69视频永久免费观看 | 午夜视频播放 | 在线高清av| 91超在线| 日韩91精品 | 国产理论影院 | 亚洲美女视频在线 | 久草精品视频在线观看 | 国产精品久久二区 | 亚洲免费观看视频 | 国产精品视频免费观看 | 伊人亚洲综合网 | 日韩av播放在线 | 久久无码精品一区二区三区 | 亚洲欧美精品一区 | 六月色丁 | 国产精品亚洲视频 | 久热电影 | a级黄色片视频 | 99精品视频在线播放观看 | 97网在线观看 | 91新人在线观看 | 911精品视频 | 色多多在线观看 | 黄色软件在线观看免费 | 日韩爱爱网站 | 成人小视频在线观看免费 | av中文字幕在线免费观看 | 久久五月天色综合 | 欧美精品免费视频 | 中文字幕精品一区久久久久 | 丁香婷婷激情国产高清秒播 | 亚洲一一在线 | 国产a级精品| 高清在线一区 | 五月天狠狠操 | 欧美日韩啪啪 | 久久久久女人精品毛片 | 久久99精品久久只有精品 | 深夜福利视频一区二区 | 五月婷婷天堂 | 麻豆系列在线观看 | 丰满少妇麻豆av | 国产一级片在线播放 | 久久艹国产 | av线上看 | 国产91精品在线观看 | 又黄又爽又无遮挡的视频 | 亚洲高清视频在线 | 视频在线一区二区三区 | 天天草天天色 | 亚洲成人av一区 | 很污的网站| 日韩av影视在线观看 | 欧美日韩一区二区三区视频 | 欧美另类tv| 亚洲情婷婷 | 人人插人人玩 | 国产精品久久久久久久免费大片 | 91精品国产麻豆国产自产影视 | 一级片免费视频 | av永久网址| 午夜aaaa | av中文天堂在线 | 国产成人精品久 | 国产精品视频不卡 | 亚洲播放一区 | 五月天中文字幕 | 在线成人国产 | 激情欧美丁香 | wwxxxx日本 | 欧美激情片在线观看 | 国产69久久 | 免费福利视频网站 | 国产99久久99热这里精品5 | 操操操日日日干干干 | av网站在线观看播放 | 久久免费观看少妇a级毛片 久久久久成人免费 | 日韩一级电影网站 | 色久av | 在线看片中文字幕 | 天堂成人在线 | 亚洲欧美日本一区二区三区 | 在线中文视频 | 国产麻豆精品一区二区 | 国产精品mv在线观看 | 久久精品资源 | 91一区啪爱嗯打偷拍欧美 | 黄色毛片观看 | 美女av电影 | 丁香五香天综合情 | 激情图片qvod| 国产成人精品在线观看 | 免费av网站在线看 | 午夜美女视频 | 中文字幕永久免费 | 日日夜夜爱 | 在线久热| 狠狠色丁香婷婷综合最新地址 | 亚洲欧洲精品在线 | 特级黄录像视频 | 国内成人精品视频 | 亚洲欧美激情精品一区二区 | 欧美一级免费在线 | 国产精品一区二区三区在线免费观看 | 三上悠亚一区二区在线观看 | 欧美在线视频第一页 | 国产一区在线免费 | 丁香5月婷婷久久 | 天天色天天射综合网 | 成 人 黄 色 免费播放 | 日韩有码中文字幕在线 | 91成人网在线观看 | 欧美成人基地 | 国产精品美女久久久久久久 | 欧美另类网站 | 亚洲毛片在线观看. | 99这里有精品 | 在线观看视频黄 | av在线免费观看不卡 | 国产精品久久久一区二区 | 久久久综合精品 | 久久久国产视频 | 91精品国产一区二区在线观看 | 美女在线国产 | 久久一区二区三区日韩 | 亚洲桃花综合 | av大全在线免费观看 | 五月天精品视频 | 久久久久久久综合色一本 | 808电影| 国产成人av电影在线观看 | 91丨porny丨九色| 日韩欧美一区视频 | 天天操天天操天天操天天 | 国产一二区在线观看 | 国产午夜精品一区二区三区嫩草 | 国产精品美女久久久久久久久久久 | 久久精品一区二区三区视频 | 国产精品高潮在线观看 | 久久九九九九 | 久久精品视频99 | 狠狠干成人综合网 | av在线中文| 国产精品美女久久久久久久久久久 | 国产在线视频资源 | 91精品秘密在线观看 | 免费人成网ww44kk44 | 中文字幕在线电影 | 黄免费网站 | 天天干天天射天天爽 | 狠狠操狠狠操 | 国产亚洲精品久久久久久久久久久久 | 欧美激情精品久久 | 成人黄大片 | 精品国产精品久久一区免费式 | 91精品国产自产老师啪 | 成人免费观看电影 | 国产亚洲精品无 | 波多野结衣一区 | 欧美激情视频一区二区三区免费 | 一区二区三区国产欧美 | 在线一区av| 国产精品成人国产乱一区 | 精品在线亚洲视频 | 97影视 | 欧美成人在线网站 | 色资源网在线观看 | 亚洲日本在线一区 | 狠狠色丁香久久婷婷综合_中 | 超碰在线最新地址 | 麻豆超碰 | 亚洲永久免费av | 午夜性福利 | 99精品国产99久久久久久97 | 天干啦夜天干天干在线线 | 精品在线视频观看 | 国产日韩欧美在线观看视频 | 免费99| 在线观看亚洲a | 四虎影院在线观看av | 最新国产一区二区三区 | 超碰日韩 | 六月丁香婷婷久久 | 国产色小视频 | 狠狠狠狠狠狠狠 | 国产高清成人在线 | 免费毛片aaaaaa | 一区二区欧美激情 | 天天视频亚洲 | 91麻豆免费看 | 欧洲精品久久久久毛片完整版 | 顶级欧美色妇4khd | 久久草在线视频国产 | 黄色精品久久久 | 欧美成年人在线观看 | 婷婷综合av| 亚洲资源网 | 亚洲色图色 | 久久福利国产 | 精品欧美乱码久久久久久 | 久久香蕉国产精品麻豆粉嫩av | 国产精品麻豆91 | 97超碰在线视 | 成人在线视频一区 | 久久精品91久久久久久再现 | 免费国产一区二区视频 | 九九九热精品免费视频观看 | 欧美一二区视频 | 波多野结衣在线视频免费观看 | 在线色亚洲 | 九九免费在线观看视频 | 久久9999久久免费精品国产 | 97视频在线观看成人 | 最近高清中文在线字幕在线观看 | 欧美专区亚洲专区 | 成人免费视频网站在线观看 | 九月婷婷人人澡人人添人人爽 | 丁香网五月天 | 欧洲精品在线视频 | 中文理论片 | 国产无套一区二区三区久久 | 久久99在线 | 在线视频电影 | 一本色道久久综合亚洲二区三区 | 91精品在线播放 | 久久精品精品电影网 | 丁香六月天婷婷 | 久久er99热精品一区二区 | 毛片网站在线观看 | 国产精品一区二区三区99 | 亚洲精品一区中文字幕乱码 | 中文字幕亚洲综合久久五月天色无吗'' | 手机看片 | 久久夜色精品国产欧美一区麻豆 | 国产精品 日韩精品 | 亚洲精品久久久久久久蜜桃 | 免费色视频网站 | 伊人资源站 | 18+视频网站链接 | 国产视频精品免费播放 | 久章草在线| 97超碰中文|