999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Chisel構建處理器模型的功能驗證方法研究

2023-11-21 12:57:58吳樂寧王淼陳福
西北工業(yè)大學學報 2023年5期
關鍵詞:嵌入式指令功能

吳樂寧, 王淼, 陳福

(1.航空工業(yè)西安航空計算技術研究所, 陜西 西安 710076; 2.西北工業(yè)大學 計算機學院, 陜西 西安 710072)

近幾十年以來,航空計算機技術飛速發(fā)展,嵌入式系統(tǒng)由于體積小、可靠性強以及功耗低等優(yōu)點,被廣泛應用于航空電子設備中。然而隨著航空嵌入式領域應用程序需求的不斷提高以及半導體工藝的快速發(fā)展,功能驗證已經成為嵌入式系統(tǒng)設計周期中最主要的挑戰(zhàn)。為了縮短整個處理器設計完成的總體時間,有必要研究出高速尋找并定位設計錯誤的驗證方法,提高整個驗證的速度,這對航空嵌入式處理器設計以及驗證具有重大意義。

Chisel[1]是Berkeley大學提出的一種嵌入在Scala[2]中(一種高級匯編語言)的硬件構造語言,使得設計者可以用Scala這種函數式編程語言快速設計硬件,并能轉化成Verilog代碼用于進一步實現(xiàn)。Chisel語言相比較傳統(tǒng)硬件描述語言Verilog的優(yōu)點主要有:①抽象程度高、高度參數化;②前端設計周期較短;③除了可以生成Verilog,還可以生成C或者CPP;④代碼可綜合。因此,目前已有一些基于Chisel語言構建的嵌入式處理器[3]。本文采用以ARM9TDMI為目標構建的航空處理器模型ARMChisel進行研究,采用經典的5級流水線設計,支持7種處理器模式及7種中斷類型。由于航空處理器模型對于精確控制的高要求使得該處理器模型的數據通路和控制通路非常龐大與復雜。此外,基于Chisel語言的模型驗證框架不像基于Verilog和SystemVerilog的驗證那樣具有系統(tǒng)性,這使得基于Chisel語言構建的處理器模型驗證難度和驗證周期大大增加。

目前,主要使用基于仿真的驗證方法驗證嵌入式系統(tǒng)的功能。這種驗證方法[4]借助仿真工具通過模擬實際電路的工作環(huán)境對處理器系統(tǒng)進行驗證,通常要仿真大量的測試得到期望的覆蓋率。目前已有一些工作針對嵌入式處理器進行了功能驗證。文獻[5]提出了一種自動化的覆蓋率驅動驗證和優(yōu)化方法,驗證了算術邏輯單元和RISC處理器的性能。文獻[6]設計了一個混合模型作為參考模型,通過比對兩者的輸出從而定位待測設計的錯誤以驗證多核處理器。文獻[7]基于龍芯2K100B移動智能終端制定了相關的測試方案。文獻[8]針對X86處理器闡述了通用的驗證環(huán)境,并提出了基于寄存器和多級緩存的驗證原則。文獻[9]基于覆蓋率引導的變異模糊測試提出了一種采用最少的設置并利用FPGA加速仿真測試的新方法來解決測試覆蓋率問題。然而這些研究都沒有面向Chisel語言進行研究,不能為現(xiàn)有基于Chisel語言構建的航空處理器提供功能驗證指導。文獻[10]基于嵌入式Scala的Chisel語言開發(fā)了名為ChiselVerify的高級驗證庫,為Chisel生態(tài)系統(tǒng)帶來了功能覆蓋率等功能。然而僅僅針對Chisel設計增加了驗證庫,并沒有為整個Chisel設計提供驗證方法。

目前對基于新型硬件語言Chisel構建的處理器模型的驗證策略研究還比較少。因此,本文提出基于ARMChisel嵌入式處理器模型研究的功能驗證加速方法。提出了一個覆蓋率感知且支持中斷測試的隨機指令生成器,可以生成大量高質量測試激勵,提升隨機驗證效率;給出了基于Chisel設計的分階段驗證策略,加快了驗證周期,為這一方向的研究提供指導;基于Chisel和Verilog設計搭建測試平臺,并成功啟動操作系統(tǒng)。

1 覆蓋率感知的指令生成器

測試激勵的質量高低是影響基于仿真驗證的一個重要因素。在討論隨機測試激勵的生成之前首先分析被測處理器模型的指令集架構。

1.1 指令集架構分析

如圖1所示,ARM指令按指令特點可以分為以下幾種[10]:數據處理類指令、存儲器訪問類指令、乘法類指令、跳轉指令、雜項指令、協(xié)處理器指令。該嵌入式處理器模型,支持數據處理類指令57條、存儲器訪問類指令28條、乘法指令、跳轉指令和雜項指令共15條以及一些系統(tǒng)級的指令。

圖1 ARM V4指令集指令分類情況

ARM V4指令集支持的指令表示的基本格式為〈opcode〉{s}〈c〉〈Rd〉,〈Rn〉{,〈operand2〉}。

其中,{ }中的項目可以省略,而〈〉中的項目不可省略,opcode是每條指令的指令助記符,不可省略;s是每條指令是否要根據指令執(zhí)行結果改寫狀態(tài)寄存器的標志;c是每條指令的指令執(zhí)行條件;Rd一般是目的寄存器,用來存放指令計算得到的值;Rn一般是第一操作數的寄存器或者基址寄存器;operand2一般是第二個操作數,第二個操作數的生成有3種方式:①8位立即數循環(huán)移位偶數位;②Rm寄存器的方式;③Rm,shift類的寄存器移位。

隨機指令生成器要根據指令集的分類以及編碼規(guī)則建立它的生成機制。

1.2 隨機指令生成器

基于分析得到的生成機制,設計了一個受約束的隨機指令生成器,該生成器具備5個功能:①生成的指令符合被測處理器模型的指令集規(guī)范,是合法的指令;②支持ARM V4指令集所有的指令;③該生成器對存儲結構可控,能控制指令的尋址地址以及跳轉地址,以防跳轉到非法的存儲區(qū)域,造成仿真錯誤;④支持7種處理器運行模式;⑤支持7種中斷處理和中斷返回。

圖2為隨機指令生成器結構圖。

圖2 隨機指令生成器結構

該隨機指令生成器主要由四部分組成:指令模板文件、解析指令模板模塊、提取命令行參數模塊、隨機指令生成模塊。解析指令模板模塊用于從根據指令集規(guī)范提前編輯好的指令模板文件中逐行讀取指令信息,按規(guī)則提取出各個域信息并將信息存進指令池中。提取命令行參數模塊用于從輸入的命令中提取出隨機指令生成器的約束,其中約束包括:要生成的指令、要生成的指令數量和生成無條件執(zhí)行指令的概率。然后將約束和指令池的信息作為參數傳送給隨機指令生成模塊,最后隨機指令生成模塊根據得到的約束生成隨機指令序列并寫入二進制輸出文件中。

1.2.1 指令模板文件

指令模板文件用于提供給隨機指令生成模塊關于ARM V4指令集的指令編碼相關信息,使得指令生成模塊可以根據這個文件生成有效合法的指令序列。

指令模板各域的意義為:①insnname表示一個指令類的名稱。②cond:4表示ARM V4指令的高4位(條件碼),屬于可隨機生成的域。③fixedvalue表示指令中固定值的部分,屬于不可隨機生成的域。④randvar:randwidth表示一個寬度為randwidth名為randvar的可隨機生成域。⑤constraints表示該指令類的約束內容。比如,一部分指令的目的寄存器不可以為15號寄存器(PC)。⑥memory表示該類指令的尋址模式。

其中可隨機生成域和不可隨機生成域可根據指令實際情況增刪。約束域和存儲域若沒有可以省略。

1.2.2 隨機指令生成模塊

隨機指令生成模塊用于生成隨機指令并寫入二進制輸出文件中。首先讀入要生成指令的信息和約束,然后設置好存儲器的大小,接著寫入中斷處理指令序列,最后按照隨機數隨機到指定數量的指令并寫入一個結束指令(一條特定的未定義指令)即可。

針對約束訪存地址和異常中斷處理功能描述如下:約束訪存地址:在隨機生成指令之前先分配好存儲器的大小以及地址,后面生成訪存指令時根據設置的數據存儲器大小和地址對隨機到的訪存地址加以約束,使得訪存地址都是有意義的地址。異常中斷處理:隨機指令生成器生成的指令序列希望發(fā)生中斷時,能不影響程序正常執(zhí)行,因此對中斷處理進行了簡化。生成器在生成指令之前要寫入二進制輸出文件的簡化中斷處理程序來支持中斷返回。

支持中斷測試的處理機制:

0x00000000: BL INST-ADDR;

0x00000004: LDR PC,[PC,#20];

0x00000008: LDR PC,[PC,#16];

0x0000000C: LDR PC,[PC,#16];

0x00000010: LDR PC,[PC,#12];

0x00000014: MOV R0,R0;

0x00000018: LDR PC,[PC,#4];

0x0000001C: LDR PC,[PC,#0];

0x00000020:ANDEQ R0,R0,R8,LSR

0x00000024: ANDEQ R0,R0,IP,LSR

0x00000028: SUBS PC,LR,#0;

0x0000002C: SUBS PC,LR,#4;

其中INST-ADDR為隨機指令序列的第一條指令的地址,即發(fā)生復位時跳轉到第一條指令的地址重新執(zhí)行。最終會開始執(zhí)行中斷返回指令SUBS PC,LR,#0,該指令將PC值改寫為發(fā)生中斷時的指令的下一條指令地址。其他中斷情況下和軟中斷和未定義指令中斷情況類似,唯一不同的是中斷處理指令為SUBS PC,LR,#4,該指令將PC值改寫為發(fā)生中斷時的指令地址。

該指令生成器是一個可以根據驗證需求配置的高效偽隨機指令生成器。使用隨機指令生成器可以提高生成測試激勵的速度,加速整個驗證過程。

2 嵌入式處理器模型的階段驗證

根據被測設計(一個新型構建語言Chisel構建的兼容ARM V4的嵌入式處理器模型ARMChisel)的特點,制定了如圖3所示的分階段驗證策略。

圖3 4個驗證階段

2.1 第1階段:Chisel層面初級驗證

在整個驗證過程中,由于整個處理器模型的設計均使用Chisel語言構建,因此第1階段的驗證是基于Chisel語言下的驗證。之所以設置了Chisel層面的初級驗證,而不直接轉為Verilog進行驗證,是因為由Chisel設計轉化為的Verilog設計可讀性較差,驗證時定位錯誤后難以修改代碼,因此必須在Chisel層面進行初級驗證。

Chisel提供的驗證庫有3種可用的tester[11],分別為PeekPokeTester,SteppedHWIOTTester,OrderedDecouoledHWIOTester。其中PeekPokeTester是最靈活的一個tester,它提供了如表1所示的幾個操作用于測試驗證,并結合目前的開源Chisel驗證庫[11]進行第1階段的功能點驗證。

表1 Chisel驗證操作

其中,poke()用于設置被測設計輸入端口的值,peek()用于從被測設計輸出端口讀取輸出結果,expect()用于判斷端口的輸出值和特定值是否相等,step()用來推進被測設計的時鐘。

第1階段主要進行簡單邏輯以及數據通路、控制通路的驗證,充分利用Chisel提供的驗證支持,排查出一些邏輯錯誤。Chisel語言層面進行測試的平臺搭建如圖4所示。

圖4 Chisel層面測試平臺

測試平臺由5個部分組成:Chisel測試類、被測設計、測試激勵、串口輸出、正確性檢查。

首先從測試激勵文件test.s讀取指令,并把指令寫入指令存儲器(ROM)中去,然后開始仿真并進行正確性檢查以及串口輸出。其中采用測試激勵自校驗和參考模型比較法進行結果正確性檢查。為了可見手寫應用程序和標準程序集中的輸出結果,在Chisel層面的測試平臺中模擬串口輸出,用于可視化應用程序的驗證。

Chisel并沒有提供直接的生成覆蓋率信息工具,但是可以在構建Chisel的工具SBT中構建指令build.sbt增加用于生成測試覆蓋率信息的插件sbt-scoverage獲得被測設計的覆蓋率。根據需要設置coverageEnabled,coverageMinimum和coverageFailOnMinimum等一系列覆蓋率配置參數。調用命令執(zhí)行即可得到各模塊的覆蓋率信息。

雖然在Chisel語言層面可以進行一些簡單功能驗證和代碼覆蓋率的收集,但是缺乏EDA工具的支持使得大型設計的驗證仍然比較困難。因此考慮將被測的嵌入式處理器模型轉化為Verilog語言繼續(xù)進行后續(xù)階段的驗證。

2.2 第2階段:覆蓋率快速驗證

第2階段要進行覆蓋率快速驗證,使用隨機指令生成器生成大量的隨機測試激勵,盡可能覆蓋到被測模型的所有功能點,以便快速達到較高的覆蓋率。

在驗證之前,首先要基于被測設計提取出功能點。對于被測模型ARMChisel,共提取出135個功能點,其中單條指令功能點100條,組合指令功能點13條,特殊情況功能點22條。

這一階段需要借助EDA工具提供的一些功能,因此搭建基于Verilog語言的測試平臺,如圖5所示。測試平臺由五部分組成:被測處理器模型、測試激勵、正確性檢查、覆蓋率檢查和串口輸出。

圖5 Verilog層面測試平臺

首先從測試激勵文件(test.bin)中讀指令到指令存儲器(ROM)中,然后開始仿真驗證被測設計。在驗證過程中,會進行執(zhí)行結果正確性檢查和覆蓋率檢查,可以快速地發(fā)現(xiàn)錯誤并定位錯誤。其中采用測試激勵自校驗法和參考模型比較法來進行結果正確性檢查,采用代碼和功能雙覆蓋率來進行覆蓋率檢查。在Verilog層面的測試平臺中也增加了串口輸出的模塊,用于可視化應用程序的驗證。

2.3 第3階段:直接測試驗證

第3個階段驗證的目標是使整個設計的功能覆蓋率達到100%,包括一些邊界情況和特殊情況,該階段的驗證步驟為:

1) 在前2個階段驗證的前提下,會得到一個較高的功能覆蓋率報告,分析該報告得到功能覆蓋率的覆蓋情況;

2) 將未覆蓋功能點全部羅列出來,然后針對這些功能點,生成特定測試激勵,一般1個功能點1個測試激勵;

3) 仿真運行這些直接測試激勵或者隨機測試激勵,得到新的覆蓋率報告;

4) 分析得到的新覆蓋率報告,查看是否達到100%的覆蓋率,如果達到了期望覆蓋率則本階段驗證結束,進入第4個階段的驗證。如果沒有達到期望覆蓋率則繼續(xù)執(zhí)行步驟1)~4),直到達到期望的覆蓋率。

在本階段,對于一些可使用帶約束的隨機指令生成器生成的測試激勵驗證的功能點,可以用隨機指令生成器來快速生成測試激勵。

2.4 第4階段:復雜應用程序驗證

通過前3個階段的驗證,行覆蓋率以及功能覆蓋率均達到了100%,這意味著驗證流程已經接近尾聲。為了驗證被測設計處理復雜情況的能力,選擇一些復雜應用程序來進行最后一個階段的驗證。

表2為第4階段選取的一些應用程序,通過仿真運行這些應用程序,可以測試處理器模型在復雜情況和指令組合下的處理能力。

表2 復雜應用程序

3 實驗結果及分析

進行初級驗證以便排除低級錯誤,考慮到Chisel的驗證能力,在正確運行如表3所示的一些手寫匯編程序后,即可進入第2階段的驗證。

表3 部分手寫匯編程序

手寫的匯編程序涵蓋了指令集中的所有指令,分為有冒險和無冒險的指令,用來測試被測處理器模型數據通路的控制通路。

3.1 第2階段驗證結果分析

第2階段是盡快達到較高覆蓋率的一個驗證階段?;诒粶y處理器一共提取功能點135個。為了研究隨機指令數與覆蓋率的關系,進行了多次仿真實驗,仿真了第25~700條指令,實驗所得數據如表4所示。

表4 隨機測試激勵覆蓋情況

從表中可以看出當指令數達到575時,單條指令類的功能點數就可以覆蓋到98。功能點數無法達到100是因為在隨機時沒有隨機2條更改狀態(tài)寄存器的指令。如果隨意更改狀態(tài)寄存器的值就會導致處理器處于未知甚至非法的運行模式,從而發(fā)生錯誤。因此這2條指令需在第3階段驗證。組合指令類的功能點和特殊情況類的功能點則很難達到全覆蓋驗證。

為了研究分析第2階段的驗證何時轉入第3階段進行,統(tǒng)計了驗證過程中隨機指令數的大小和覆蓋率的關系,結果如圖6所示。

圖6 隨機指令數與覆蓋率關系圖

圖中統(tǒng)計了隨機指令數從25~700,所達到的功能覆蓋率情況。從圖中可以看出當指令數小于等于250時,覆蓋率持續(xù)上升,而當指令數超過250之后,覆蓋率開始波動性上升,超過了80%。指令數在500~700之間,覆蓋率并沒有明顯提升。可以看到,在指令數為650時達到最高覆蓋率90.4%。

指數令超過250后會有波動性的上升,是因為設計的隨機指令生成器的隨機數種子由時間函數產生,因此每次生成的隨機測試激勵都是具有獨立性的隨機。當生成的指令數較大時,就會產生這種波動式增長。

在第2階段的驗證中,當覆蓋率達到90%左右時,再增加指令數獲得的覆蓋率增益微乎其微。因此,停止第2階段的驗證,進入第3階段的驗證。

3.2 第3階段驗證結果分析

在完成第2階段的驗證之后,行覆蓋率和功能覆蓋率均處于較高的水平。第3個階段主要通過分析覆蓋率報告有目的性地設計測試激勵,覆蓋未覆蓋到的所有功能點。表5列舉了在結束第2階段的驗證之后得到的一些代表性的未覆蓋到的功能點。

表5 未覆蓋到功能點列舉

從表中可以看出,單條指令類、組合指令類和特殊情況類的功能點均有未覆蓋到的,而大多數為特殊情況功能點。

重復性地分析覆蓋率報告并增加測試激勵,直到代碼覆蓋率和功能覆蓋率達到100%,即可進入下一階段的驗證。

3.3 第4階段驗證結果分析

第4個階段主要是進行一些復雜應用程序的驗證。stringsearch-small是嵌入式標準程序集Mibench的一個字符查找程序。該程序在處理器模型上通過模擬的串口輸出57行字符,與Mibench提供的stringsearch-small程序的正確輸出完全相同。

在嵌入式處理器中,Dhrystone Benchmark是一種經常使用的測試標準。圖7為運行Dhrystone 2.1的仿真截圖。

圖7 Dhrystone仿真圖

從圖中可以看到每秒鐘能執(zhí)行Dhrystone Benchmark程序2 098次。

除了上述測試激勵外,還使用了嵌入式操作系統(tǒng)uClinux進行驗證。uClinux的啟動分為2個階段[15],第1個階段是bootloader的啟動階段。第2階段是對內核進行初始化和啟動的階段。

仿真之前,首先要設置好啟動過程中需要訪問的寄存器值。其次使用initial語句產生IRQ中斷并分配好存儲器。接著就可以仿真真實的硬件環(huán)境,在Modelsim中啟動操作系統(tǒng)。圖8為在Modelsim中仿真運行操作系統(tǒng)的運行截圖。

圖8 uClinux操作系統(tǒng)仿真圖

啟動過程需要在Modelsim中仿真90 ms,其中時鐘周期為10 ns。啟動uClinux操作系統(tǒng)仿真了900萬次時鐘,一共執(zhí)行了4 063 341條指令。

3.4 基于FPGA的驗證結果分析

在進行大型程序仿真時選用基于FPGA的驗證方法進行仿真驗證。硬件環(huán)境為:FPGA型號Xilinx Artix-35T FPGA(xc7a35ticsg324-1L),處理器Intel Core i5-3230M CPU。軟件環(huán)境為:Windows 10專業(yè)版,64位操作系,Vivado 2016.4,Tera Term串口軟件。

基于FPGA搭建的驗證系統(tǒng),如圖9所示。

圖9 片上系統(tǒng)結構圖

圖中PLL、ROM、RAM均使用Xilinx提供的IP核構建。ARMChisel、Sysctl、Arbiter、UART、RXTX分別為使用硬件語言描述的功能模塊。

在前期驗證充分的情況下,使用Vivado提供的邏輯分析儀(integrated logic analyzer,ILA)核,可以使用網表插入調試探測的方法進行驗證,并分析調試結果。

圖10為FPGA加速驗證的連接圖。Arty開發(fā)板正在加速仿真Mibench標準程序集的basicmath-small測試程序。

從捕獲到的波形圖上可以得到,ARMChisel處理器模型運行該程序用了1 694 387 630個時鐘周期,共執(zhí)行了1 007 179 985條指令。串口軟件輸出為加速仿真basicmath-small測試程序時Tera Term串口軟件的輸出。將串口輸出的內容與Mibench提供的正確輸出結果進行比較,共19 733行輸出,與正確輸出完全相同,ARMChisel處理器模型均運行正確。

另外,該過程還驗證Mibench的一系列標準測試程序。串口軟件的輸出結果均與Mibench程序集正確輸出結果相同。

使用FPGA進行加速驗證可以加快程序仿真速度,然而相比于基于仿真的驗證,調試信號的可視性較低,定位錯誤能力低,潛在延長了設計驗證時間。因此,基于硬件的加速驗證適合后期加速大型程序的驗證。通過加速驗證這些標準程序集的程序,進一步提高了驗證效率。

4 結 論

本文研究了由新型硬件語言Chisel構建的兼容ARM V4架構的嵌入式處理器模型的驗證方法。主要得到3個結論:①設計了支持ARM V4 ISA全部指令的隨機指令生成器??缮纱罅康臏y試激勵用于隨機測試,加快了生成激勵的速度。②被測處理器模型由新型硬件語言構建,針對這一特點設計了4個階段的驗證:Chisel層面初級驗證、覆蓋率快速驗證、直接測試驗證和復雜應用程序驗證,并分析了各階段轉換的時機,確保了預期的覆蓋率要求。③搭建了基于Chisel語言層面的測試平臺,研究了在Chisel層面進行正確性驗證和覆蓋率收集的方法。由于Chisel驗證的局限性,搭建了基于Verilog語言層面的測試平臺進行驗證。測試平臺收集覆蓋率同時能快速準確地發(fā)現(xiàn)錯誤并定位錯誤,提高了驗證速度。

猜你喜歡
嵌入式指令功能
聽我指令:大催眠術
也談詩的“功能”
中華詩詞(2022年6期)2022-12-31 06:41:24
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
搭建基于Qt的嵌入式開發(fā)平臺
關于非首都功能疏解的幾點思考
嵌入式軟PLC在電鍍生產流程控制系統(tǒng)中的應用
Altera加入嵌入式視覺聯(lián)盟
中西醫(yī)結合治療甲狀腺功能亢進癥31例
辨證施護在輕度認知功能損害中的應用
主站蜘蛛池模板: 欧美精品啪啪一区二区三区| 亚洲成人在线网| AV无码一区二区三区四区| 午夜欧美理论2019理论| 又黄又湿又爽的视频| 日本www在线视频| 国产欧美日韩综合在线第一| 亚洲国产精品无码AV| 超碰91免费人妻| 欧美亚洲网| 亚洲爱婷婷色69堂| 亚洲动漫h| 日韩中文无码av超清| 99视频免费观看| 不卡网亚洲无码| 亚洲无码在线午夜电影| 高清无码一本到东京热| 91无码网站| 一区二区偷拍美女撒尿视频| 国产精品不卡片视频免费观看| 在线观看av永久| 国产成人精品一区二区秒拍1o| 成人久久18免费网站| 无码日韩视频| 国产成人综合日韩精品无码不卡| 国产激情无码一区二区三区免费| 国产综合精品一区二区| 成年人免费国产视频| 88国产经典欧美一区二区三区| 精品乱码久久久久久久| 欧美日韩国产在线播放| 久久久久人妻一区精品色奶水 | 亚洲一区免费看| 国产亚洲精品91| 国产91成人| 国产精品综合色区在线观看| 中文精品久久久久国产网址| 国产女人爽到高潮的免费视频| 国产精品私拍在线爆乳| 国产精鲁鲁网在线视频| 亚洲热线99精品视频| 久久久久青草大香线综合精品| 国产精品yjizz视频网一二区| 日韩高清中文字幕| 亚洲最新在线| 国产手机在线观看| 日韩福利视频导航| 国产成人亚洲精品色欲AV | 欧美天堂久久| 免费一级毛片| 亚洲国产精品无码AV| 亚洲国产黄色| 伊人久热这里只有精品视频99| 成人小视频网| 国产精品无码久久久久AV| 亚洲成人网在线播放| 欧美国产成人在线| 亚洲大学生视频在线播放| 香蕉久久国产精品免| 色欲不卡无码一区二区| 一级黄色片网| 高h视频在线| 在线观看国产精品日本不卡网| 亚洲综合狠狠| 永久免费无码成人网站| 天堂av高清一区二区三区| 欧美日韩动态图| 国产精品视频猛进猛出| 色网站在线免费观看| 亚洲国语自产一区第二页| 国产又大又粗又猛又爽的视频| 国产精品视屏| 亚洲国产欧美国产综合久久| 欧美综合区自拍亚洲综合绿色| 在线毛片免费| 人人91人人澡人人妻人人爽| 国产一区二区三区在线观看视频| 人妻少妇乱子伦精品无码专区毛片| 婷婷综合缴情亚洲五月伊| 日韩欧美一区在线观看| 亚洲精品无码专区在线观看| 天天综合网色中文字幕|