99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

SystemVerilog對象拷貝與參數(shù)化類:驗(yàn)證環(huán)境實(shí)戰(zhàn)陷阱解析

SystemVerilog對象拷貝與參數(shù)化類:驗(yàn)證環(huán)境實(shí)戰(zhàn)陷阱解析 做驗(yàn)證的兄弟應(yīng)該都撞見過這種鬼打墻的 bug你在 scoreboard 里比較完數(shù)據(jù)順手改了一下某個(gè) transaction 的字段做 debug結(jié)果下一拍發(fā)現(xiàn) reference model 那邊的同一筆數(shù)據(jù)也變了。代碼邏輯翻來覆去看了三遍沒有任何人對參考模型寫過數(shù)據(jù)。最后實(shí)在沒辦法把兩個(gè)對象的地址打出來一看——好家伙根本是同一個(gè)對象。這就是 SystemVerilogSV對象拷貝里最經(jīng)典的淺拷貝陷阱你以為是復(fù)制了一份數(shù)據(jù)實(shí)際上只是復(fù)制了一個(gè)句柄兩個(gè)變量牢牢握著同一塊內(nèi)存。再說到標(biāo)題里的另一個(gè)主角參數(shù)化的類很多朋友剛接觸 SV 面向?qū)ο缶幊虝r(shí)會(huì)把它當(dāng)成 C 模板的低配版簡單用class #(type T int)包一層就覺得完事。實(shí)際在驗(yàn)證環(huán)境里對象拷貝、參數(shù)化類和數(shù)據(jù)類型轉(zhuǎn)換這三件事是纏在一起的參數(shù)化類經(jīng)常接收不同類型的 transaction而不同類型的對象在發(fā)出去之前往往需要做動(dòng)態(tài)轉(zhuǎn)換轉(zhuǎn)換失敗又可能引出一堆和拷貝相關(guān)的連帶問題。這篇文章就把這三件事從原理到實(shí)操捋一遍最后再分享幾個(gè)我在真實(shí)項(xiàng)目里踩過、填過、覺得值得記住的坑。1. 改了 A 卻影響了 B對象拷貝中最常見的句柄共享事故1.1 一個(gè)能完美復(fù)現(xiàn)問題的最小用例先把問題現(xiàn)場還原出來。假設(shè)我們有一個(gè)最簡單的包c(diǎn)lass pkt; int data; int id; endclass然后寫兩行幾乎所有人都寫過的代碼pkt a; pkt b; a new(); a.data 100; a.id 1; b a; // 你以為復(fù)制了一份 b.data 200; $display(a.data %0d, b.data %0d, a.data, b.data);這段代碼的打印結(jié)果是a.data 200, b.data 200。如果你心里預(yù)期的結(jié)果是a.data 100那你就撞上了 SV 對象語義里最基礎(chǔ)的一個(gè)特點(diǎn)b a并不會(huì)創(chuàng)建一個(gè)新對象它只是把a(bǔ)這個(gè)句柄的值復(fù)制給了b兩個(gè)名字指到同一個(gè)對象上去了。很多從 C 語言或者從 Verilog 的reg、wire思維轉(zhuǎn)過來的朋友剛開始非常不適應(yīng)這件事。因?yàn)樵?C 里結(jié)構(gòu)體變量之間可以直接賦值值是整體搬過去的在 SV 里類變量不是值是引用。你復(fù)制引用不會(huì)復(fù)制對象就像你抄了一份通訊錄的地址不代表你把那個(gè)人也復(fù)制了一份。1.2 句柄、對象與內(nèi)存地址先把這個(gè)基礎(chǔ)焊死要徹底理解對象拷貝必須分清楚三個(gè)概念句柄handle、對象object和內(nèi)存地址。我們寫pkt a new();干的事情是在仿真器的堆上創(chuàng)建了一個(gè)pkt對象然后把指向這塊內(nèi)存的門牌號(hào)存進(jìn)變量a。a本身不是對象a是一個(gè)存放著對象地址的句柄變量。所以在 SV 里兩個(gè)句柄指向同一個(gè)對象是非常常見、也非常合法的狀態(tài)這不叫兩個(gè)一樣的對象而是對同一對象的兩個(gè)稱呼。一個(gè)更生活化的類比是對象是房子句柄是門牌號(hào)。b a只是把門牌號(hào)又抄了一份給你兩個(gè)人還是拿著同一個(gè)門牌號(hào)去找同一棟房子。你在房子 A 里重新裝修拿著另一份門牌號(hào)的 B 過來看看到的當(dāng)然也是裝修后的樣子。理解了這一點(diǎn)再看下面這些行為就會(huì)很清晰操作結(jié)果是否創(chuàng)建新對象b a;b 和 a 指向同一對象否b new(); b.copy(a);b 是新對象成員值來自 a是b a.copy();若實(shí)現(xiàn)了 copy 返回新對象是b new a;取決于類中是否定義接收 a 的構(gòu)造函數(shù)不一定1.3 從共享到獨(dú)立究竟差在哪知道了b a是共享句柄之后問題就變成怎么讓兩個(gè)對象真正獨(dú)立最常見的偷懶寫法是b new(); b.data a.data; b.id a.id;這個(gè)寫法對只有兩個(gè)成員的類沒有問題但 transaction 的成員通常不止兩三個(gè)。典型的一個(gè)總線事務(wù)對象可能有十幾個(gè)字段還有定長數(shù)組、動(dòng)態(tài)數(shù)組、隊(duì)列、事件、其他對象的句柄甚至還要處理嵌套對象。你寫幾次b.xxx a.xxx就知道這種純手工逐字段復(fù)制的做法多寫兩個(gè)類之后一定會(huì)漏字段。前面表格里還提到一種寫法是b new a;這里要特別提醒SystemVerilog 不會(huì)像 C 那樣自動(dòng)給你生成一個(gè)以同類對象為入?yún)⒌目截悩?gòu)造函數(shù)。b new a實(shí)際調(diào)用的是new(a)這個(gè)調(diào)用能不能編譯、語義是否做拷貝完全取決于類里面有沒有顯式定義一個(gè)接收a類型參數(shù)的function new。如果類里沒有定義很多仿真器會(huì)直接報(bào)錯(cuò)或者行為未定義如果定義了那也是你寫的邏輯在起作用而不是語言默認(rèn)幫你拷貝。所以 SV 社區(qū)里最常見的、可移植性最好的拷貝方式是自己實(shí)現(xiàn)一個(gè)copy()方法不要依賴這種語法糖。2. 淺拷貝和深拷貝的本質(zhì)new、copy 與 clone 的分工2.1 默認(rèn)行為解剖為什么 SV 不自動(dòng)給你一個(gè)拷貝構(gòu)造既然標(biāo)準(zhǔn)庫沒有默認(rèn)拷貝構(gòu)造那我們就得自己把拷貝這件事做對。在做之前先明確兩個(gè)概念淺拷貝shallow copy和深拷貝deep copy。淺拷貝的定義是新對象創(chuàng)建出來后每個(gè)成員變量的值都復(fù)制了一遍。這句話聽起來很簡單但有一個(gè)埋伏如果某個(gè)成員本身是另一個(gè)對象句柄那么復(fù)制這個(gè)句柄的值只是讓新對象和舊對象指向同一個(gè)子對象。舉個(gè)例子class addr_t; int addr; endclass class pkt; int id; addr_t addr; endclass如果我們寫一個(gè)淺拷貝函數(shù)function pkt shallow_copy(); shallow_copy new(); shallow_copy.id this.id; shallow_copy.addr this.addr; // 只復(fù)制了句柄兩個(gè)對象的 addr 還是同一個(gè) endfunction那么復(fù)制出來的pkt對象它的addr成員和原來的addr成員仍然共享同一個(gè)addr_t對象。這不一定都是壞事但它一定是你需要明確知道的語義。如果你在復(fù)制后把那邊的addr.addr改了這邊的也會(huì)跟著改。深拷貝則是不僅復(fù)制頂層對象還要把頂層對象手里所有的子對象、數(shù)組元素、隊(duì)列元素等全部遞歸復(fù)制一遍。深拷貝之后新舊對象之間除了字段值相同再?zèng)]有任何共享內(nèi)存。2.2 自實(shí)現(xiàn) copy 函數(shù)處理基本成員、對象成員與隊(duì)列成員在 SV 里一個(gè)可復(fù)用的深拷貝函數(shù)通常按下面幾步來寫。第一步處理所有內(nèi)建值類型成員int、bit、logic、enum、string等。這些直接賦值即可。第二步處理對象引用成員。對每個(gè)類成員要么調(diào)用它自己的copy()方法要么new()一個(gè)新的再逐字段賦值。第三步處理動(dòng)態(tài)數(shù)組、隊(duì)列、關(guān)聯(lián)數(shù)組。這一步最容易被漏。因?yàn)?SV 的數(shù)組賦值是比較智能的直接new_array old_array可以復(fù)制整個(gè)數(shù)組內(nèi)容所以不少人以為隊(duì)列也可以直接賦值就完事了。對動(dòng)態(tài)數(shù)組和隊(duì)列來說直接賦值確實(shí)會(huì)復(fù)制元素但如果元素本身是對象句柄那復(fù)制的是句柄數(shù)組數(shù)組里的對象仍然是共享的。想深拷貝數(shù)組對象得用循環(huán)逐個(gè) deep copy。第四步處理可能存在的自引用和循環(huán)引用。比如類 A 里有一個(gè)A next成員深拷貝時(shí)如果不加判斷會(huì)無限遞歸下去。簡單場景可以約定好只深拷貝數(shù)據(jù)對象不深拷貝連接關(guān)系復(fù)雜場景可以維護(hù)一個(gè)已經(jīng)拷貝過的舊對象到新對象的映射表碰到已拷貝過的對象直接返回已有副本。一個(gè)比較完整的手寫深拷貝模板如下class pkt; int id; string name; int payload[$]; addr_t addr; bit has_addr; function pkt copy(); pkt c new(); c.id this.id; c.name this.name; c.payload this.payload; // 隊(duì)列整體復(fù)制元素是 int沒問題 if (this.has_addr) begin c.addr new(); c.addr.addr this.addr.addr; end c.has_addr this.has_addr; return c; endfunction function void copy_to(pkt rhs); rhs.id this.id; rhs.name this.name; rhs.payload this.payload; if (this.has_addr) begin if (rhs.addr null) rhs.addr new(); rhs.addr.addr this.addr.addr; end rhs.has_addr this.has_addr; endfunction endclass這里我故意寫了兩個(gè)函數(shù)一個(gè)copy()返回新對象一個(gè)copy_to(rhs)把內(nèi)容復(fù)制到一個(gè)已存在的對象。為什么需要兩個(gè)因?yàn)轵?yàn)證環(huán)境里兩種場景都有scoreboard 里希望再搞一個(gè)一樣的對象存起來用copy()driver 里希望把已經(jīng)創(chuàng)建好的對象內(nèi)容更新一下用copy_to()更省內(nèi)存。2.3 UVM 環(huán)境里 copy/clone 的常見約定如果你已經(jīng)在用 UVM很多對象繼承自u(píng)vm_objectUVM 自己有一套拷貝機(jī)制。核心是兩個(gè) virtual 方法copy和clone。默認(rèn)行為是copy調(diào)用do_copyclone創(chuàng)建新對象后調(diào)用copy。如果你的類沒有實(shí)現(xiàn)do_copy那么copy什么都不做clone只會(huì)返回一個(gè)空對象。UVM 的uvm_object_utils宏配合 field automation 時(shí)copy會(huì)按照字段宏定義逐個(gè)復(fù)制。但這里有個(gè)容易忽略的點(diǎn)field automation 對對象字段比如uvm_object_field默認(rèn)只復(fù)制句柄也就是淺拷貝。你聲明了uvm_object_utils不代表自動(dòng)深拷貝要深拷貝嵌套對象必須在do_copy里顯式處理或者約定好被嵌套對象不可變。我見過不少團(tuán)隊(duì)在項(xiàng)目手里的 base transaction 里實(shí)現(xiàn)一次完整的深拷貝copy然后所有派生事務(wù)類在重寫do_copy時(shí)先super.do_copy(rhs)再補(bǔ)自己新增的字段。這個(gè)思路簡單又不容易漏推薦給還沒形成規(guī)范的項(xiàng)目。3. 驗(yàn)證環(huán)境里對象拷貝的實(shí)戰(zhàn)位置從 driver 到 scoreboard3.1 transaction 對象在組件間流動(dòng)時(shí)哪些環(huán)節(jié)必須拷貝搞清楚了拷貝的機(jī)制再把它放進(jìn)完整驗(yàn)證環(huán)境的上下文里。一個(gè)典型的約束隨機(jī)驗(yàn)證平臺(tái)里transaction 對象是這樣流動(dòng)的generator 生成對象通過 sequencer/driver 轉(zhuǎn)成接口信號(hào)monitor 從接口采樣得到對象發(fā)給 scoreboard 和 reference model。在這條鏈路上并不是每個(gè)環(huán)節(jié)都要拷貝。需要拷貝的地方通常是這兩類第一類是存檔場景。scoreboard 里經(jīng)常需要一個(gè)期望值隊(duì)列把進(jìn)入 DUT 之前的數(shù)據(jù)包保存起來等 DUT 輸出再做比對。如果直接把 generator 的那個(gè)句柄塞進(jìn)隊(duì)列后續(xù) driver 把同一對象改掉scoreboard 里存的東西也被改了比對就全面失真。這種場景必須深拷貝一份再入隊(duì)。第二類是并發(fā)處理場景。一個(gè)事務(wù)對象同時(shí)被多個(gè) component 處理時(shí)如果 A 組件要對它做標(biāo)記、加字段、改狀態(tài)而 B 組件希望看到原始狀態(tài)那么必須先復(fù)制出一份獨(dú)立對象給 A 用。不復(fù)制的話A 的修改會(huì)像一個(gè)全局變量一樣毒化所有引用者。不需要拷貝的場景interface 信號(hào)驅(qū)動(dòng)、mailbox 的純傳遞、只讀的數(shù)據(jù)分析。在這些場景里拷貝純屬浪費(fèi)仿真時(shí)間和內(nèi)存。3.2 mailbox 傳輸?shù)目截惻c否一種常見的性能與正確性權(quán)衡mailbox 是 SV 里最常用的線程間通信手段但它傳遞的同樣只是句柄。很多人也有一個(gè)疑問把對象放進(jìn) mailbox要不要先 copy 一份答案取決于接收方是否會(huì)修改對象。如果接收方拿到對象后只是讀取并轉(zhuǎn)換成信號(hào)那么不拷貝沒有任何問題還更高效。如果接收方拿到后要修改并且發(fā)送方之后還會(huì)用這個(gè)對象那么不拷貝就有隱患。一個(gè)比較穩(wěn)妥的約定是發(fā)送方一旦把對象放進(jìn) mailbox就視為所有權(quán)移交。后續(xù)想再保留數(shù)據(jù)發(fā)送方在 put 之前自己先深拷貝留存接收方擁有對對象的修改權(quán)。這樣責(zé)任邊界清晰不容易出現(xiàn)兩邊同時(shí)改一個(gè)對象的競爭。一個(gè)額外提醒如果發(fā)送方在循環(huán)中重復(fù)使用同一個(gè)句柄發(fā)數(shù)據(jù)比如forever begin trans new(); // 隨機(jī)化、填充字段 mb.put(trans); end這種情況每次都是新對象不需要拷貝。但如果是復(fù)用同一個(gè)對象forever begin // 不重新 new只改改字段再發(fā) trans.data data; mb.put(trans); end接收方拿到的每一個(gè)包實(shí)際上都是同一個(gè)對象。等下一個(gè)循環(huán)改了data已經(jīng)進(jìn)入 mailbox 的包也會(huì)跟著變。這種 bug 比淺拷貝更隱蔽因?yàn)樗雌饋硎敲恳话鼣?shù)據(jù)都一樣而不是某一包被篡改。排查到最后往往要打地址才會(huì)恍然大誤所有包全是一個(gè)地址。3.3 拷貝實(shí)踐中的典型錯(cuò)誤與查驗(yàn)習(xí)慣我在實(shí)際項(xiàng)目里見到的、以及自己犯過的典型錯(cuò)誤大致有這么幾類第一類定義了copy()但忘記維護(hù)新增字段。類加了一個(gè)新字段copy()沒同步更新導(dǎo)致復(fù)制出來的對象某些字段是默認(rèn)值。這個(gè)錯(cuò)誤平時(shí)很難發(fā)現(xiàn)因?yàn)榇蠖鄶?shù)時(shí)候你不比對每個(gè)字段只有在某個(gè)用例數(shù)據(jù)恰好依賴那個(gè)字段時(shí)才爆發(fā)。應(yīng)對辦法每次改 transaction 類時(shí)強(qiáng)制看一眼copy/do_copy方法或者干脆在 base 類里加一個(gè)自查方法比較兩個(gè)對象所有字段是否一致測試時(shí)點(diǎn)用一下。第二類把淺拷貝當(dāng)深拷貝用。對象成員、動(dòng)態(tài)數(shù)組里的對象元素都沒復(fù)制導(dǎo)致所有引用者共享子對象。尤其 UVM 的 field automation 默認(rèn)淺拷貝這個(gè)坑非常容易踩。寫代碼前先問自己一句這個(gè)對象會(huì)不會(huì)在被復(fù)制之后繼續(xù)被別人改如果會(huì)請確認(rèn)嵌套成員都是深拷貝。第三類拷貝后忘記恢復(fù)隨機(jī)化狀態(tài)。SV 類的randomize()每次調(diào)用都會(huì)重新隨機(jī)如果拷貝函數(shù)內(nèi)部動(dòng)不動(dòng)new()出一個(gè)新對象把原來已經(jīng)滿足約束的數(shù)據(jù)覆蓋成隨機(jī)值就會(huì)出現(xiàn)比較不過但不知道哪里錯(cuò)的詭異問題??截惡瘮?shù)要嚴(yán)格只復(fù)制、不隨機(jī)。檢驗(yàn)拷貝是否深的一個(gè)好辦法復(fù)制后把舊對象里最內(nèi)層的一個(gè)字段改掉看新對象是否跟著變。寫一個(gè)調(diào)試用的check_independent()函數(shù)在測試環(huán)境常駐比事后排查省時(shí)間得多。4. 參數(shù)化類把一類多用寫進(jìn)類型系統(tǒng)4.1 參數(shù)化類解決了什么痛點(diǎn)對比宏定義和基礎(chǔ)類繼承對象拷貝解決的是內(nèi)容獨(dú)立參數(shù)化類解決的是類型通用。兩者在驗(yàn)證組件復(fù)用里經(jīng)常遇到。假設(shè)你要寫一個(gè)通用的generator它可以產(chǎn)生eth_pkt也可以產(chǎn)生axi_txn還可以產(chǎn)生i2c_seq。不用參數(shù)化的時(shí)候有兩條路一條路是寫一個(gè)以u(píng)vm_object為基類的通用類內(nèi)部保存uvm_object item然后在具體使用點(diǎn)把它$cast成目標(biāo)類型。這條路的問題在于類型安全性差$cast失敗要到運(yùn)行期才能發(fā)現(xiàn)而且代碼里到處是類型轉(zhuǎn)換可讀性差。另一條路是用define宏生成整套代碼。宏替換做的代碼生成雖然也能復(fù)制代碼但它繞過了類型檢查、函數(shù)作用域和調(diào)試器宏展開的錯(cuò)誤信息經(jīng)常把真實(shí)行號(hào)搞沒維護(hù)成本非常高。參數(shù)化類把類型作為參數(shù)傳入相當(dāng)于讓編譯器幫你做類型檢查同時(shí)保留一套代碼的維護(hù)便利性。你用一份generator的實(shí)現(xiàn)就能生成generator#(eth_pkt)、generator#(axi_txn)這些類型特化每個(gè)特化都有自己的類型安全約束。4.2 語法拆解類型參數(shù)、整數(shù)參數(shù)、默認(rèn)值與實(shí)例化參數(shù)化類的語法本身并不復(fù)雜核心是把參數(shù)列表放在類名后面class generator #(type T uvm_object, int MAX_CNT 100); T current_item; int cnt; function new(string name generator); super.new(name); endfunction task run_phase(uvm_phase phase); repeat (MAX_CNT) begin if (!$cast(current_item, create_item())) begin uvm_fatal(CAST, $sformatf(cannot cast to %s, current_item.get_type_name())) end item_port.write(current_item); end endtask // 由子類重寫 virtual function T create_item(); create_item null; endfunction endclass實(shí)例化也沒有特殊之處generator#(eth_pkt) eth_gen; eth_gen generator#(eth_pkt)::type_id::create(eth_gen, this);需要注意幾個(gè)細(xì)節(jié)。第一參數(shù)列表里type T是類型參數(shù)int MAX_CNT 100是值參數(shù)值參數(shù)必須帶默認(rèn)值或者在使用時(shí)顯式給出否則實(shí)例化時(shí)編譯器會(huì)抱怨參數(shù)不夠。第二參數(shù)化類作為基類使用時(shí)子類必須指定參數(shù)不能繼續(xù)留一個(gè)未決定的 Tclass eth_generator extends generator#(eth_pkt); virtual function eth_pkt create_item(); eth_pkt p eth_pkt::type_id::create(p); return p; endfunction endclass第三如果你需要在類外前向聲明一個(gè)參數(shù)化類語法要寫成typedef class generator#(type T);不過這個(gè)寫法在不同仿真器上支持程度不完全一致如果你的仿真器不支持可以考慮換一種設(shè)計(jì)盡量避免對參數(shù)化類做前向聲明。4.3 參數(shù)化類中的靜態(tài)成員與常見假象參數(shù)化類一個(gè)容易出問題的點(diǎn)是static成員。普通類里static成員是全局唯一的參數(shù)化類里的static成員按 SystemVerilog 標(biāo)準(zhǔn)每個(gè)特化類型各有自己的一份。class typed_pool #(type T); static int pool_count; endclasstyped_pool#(A)::pool_count和typed_pool#(B)::pool_count是兩個(gè)完全獨(dú)立的變量。有些人會(huì)以為只要是 typed_pool 都是同一個(gè)靜態(tài)變量結(jié)果 A 類型累加了一個(gè)計(jì)數(shù)B 類型卻看不到查半天根本原因。這個(gè)行為在不同仿真器上曾經(jīng)也有過不一致的 bug如果你要大規(guī)模使用參數(shù)化類的靜態(tài)成員建議在項(xiàng)目初期先做一個(gè)最小用例跑一遍目標(biāo)仿真器確認(rèn)行為。還有一個(gè)常見的假象是兩個(gè)不同參數(shù)的特化類不要指望它們之間可以隨意賦值。generator#(eth_pkt)和generator#(axi_txn)是完全不同的類型即使它們的代碼結(jié)構(gòu)一模一樣。如果你想讓它們之間做某種通用操作必須讓它們繼承同一個(gè)非參數(shù)化基類。5. 參數(shù)化類 數(shù)據(jù)類型轉(zhuǎn)換搭建一個(gè)類型安全的通用組件5.1 實(shí)戰(zhàn)需求一個(gè)可以指定事務(wù)類型的通用 generator最典型的組合使用場景是搭建一個(gè)帶約束的通用 generator它只負(fù)責(zé)生成、隨機(jī)化、發(fā)送對象至于具體生成什么類型的對象由參數(shù)T決定。比如 UART 項(xiàng)目需要一個(gè)uart_txn生成器SPI 項(xiàng)目需要一個(gè)spi_txn生成器代碼 90% 是重復(fù)的。參數(shù)化類把它縮成一份class gen_t #(type T uvm_sequence_item) extends uvm_sequence #(T); constraint c_default { item.size inside {[1:16]}; } virtual task body(); repeat (10) begin uvm_do(item) end endtask endclass這里面的關(guān)鍵技術(shù)點(diǎn)在于uvm_sequence #(T)的REQ類型已經(jīng)被參數(shù)化為 TUVM 的宏uvm_do(item)會(huì)自動(dòng)對 item 做正確的類型處理。如果不用參數(shù)化類你就得為每個(gè)事務(wù)類型各寫一個(gè)幾乎相同的 sequence 子類或者在基類里寫一個(gè)uvm_sequence_item類型的 item然后再在 body 里到處$cast。對象拷貝在這里也有一席之地當(dāng)你用uvm_do產(chǎn)生一個(gè) item 時(shí)UVM 內(nèi)部會(huì)調(diào)用 clone 將 item 復(fù)制到 sequencer 的請求隊(duì)列。如果你自己的事務(wù)類沒有實(shí)現(xiàn)正確的 copy/clone那么 sequence 里生成的事務(wù)和 sequencer 實(shí)際收到的可能就是兩個(gè)不同的東西甚至 field 都是默認(rèn)值。所以參數(shù)化組件和拷貝機(jī)制不是兩個(gè)孤立話題它們在你的環(huán)境里始終是一起工作的。5.2 $cast 與靜態(tài)轉(zhuǎn)換類型轉(zhuǎn)換在參數(shù)化場景下的正確用法參數(shù)化類里的T雖然類型安全但一旦你把T類型的對象放到一個(gè)更通用的容器里比如uvm_object類型的成員或者uvm_tlm_fifo#(uvm_object)取出來的時(shí)候仍然要做類型轉(zhuǎn)換。SV 的對象類型轉(zhuǎn)換有兩種靜態(tài)轉(zhuǎn)換語法dst target_type(src)。對數(shù)值類型很常用比如把int轉(zhuǎn)成bit[7:0]會(huì)做截?cái)喟裭ogic[15:0]轉(zhuǎn)成int可能做位寬擴(kuò)展。對對象類型靜態(tài)轉(zhuǎn)換只是一個(gè)編譯期的斷言它告訴編譯器請認(rèn)為這個(gè)句柄是目標(biāo)類型但運(yùn)行時(shí)如果實(shí)際類型不匹配行為是未定義的通常會(huì)讓仿真崩潰或者返回一個(gè)無效的句柄。所以對對象類型進(jìn)行向下轉(zhuǎn)換時(shí)永遠(yuǎn)優(yōu)先用$cast。$cast有兩種用法一種是函數(shù)形式eth_pkt p; if (!$cast(p, obj)) begin uvm_error(CAST, obj is not eth_pkt) end另一種是void $cast(p, obj);用于你確定類型一定匹配、并且不想檢查返回值的場景。前者用于防御式編程后者用于性能敏感且邏輯已保證安全的場景。在參數(shù)化類里因?yàn)門是編譯期已知的類型你往往可以直接把uvm_object轉(zhuǎn)回Tclass consumer_t #(type T uvm_object) extends uvm_component; uvm_tlm_fifo#(uvm_object) fifo; virtual task run_phase(uvm_phase phase); uvm_object obj; T item; fifo.get(obj); if (!$cast(item, obj)) uvm_fatal(TYPE, $sformatf(expect %s, got %s, $typename(T), obj.get_type_name())) // 安全使用 item endtask endclass$typename(T)是調(diào)試類型不匹配時(shí)的利器編譯期展開成實(shí)際的類型名打印出來非常直觀。5.3 在這個(gè)組件里如何安全地做對象分發(fā)再進(jìn)一步參數(shù)化類加上$cast可以寫出很安全的分發(fā)器。比如你有一個(gè)uvm_analysis_port#(uvm_object)不同的 monitor 向里面扔不同類型的對象下游的參考模型通過參數(shù)化類只接管自己關(guān)心的類型。我這里有一個(gè)實(shí)際用過的簡化版本。先定義一個(gè)參數(shù)化的filter_tclass filter_t #(type T uvm_object) extends uvm_component; T cached; int hit_cnt; int miss_cnt; uvm_component_param_utils(filter_t#(T)) function new(string name, uvm_component parent); super.new(name, parent); endfunction virtual function void write(uvm_object obj); T item; if ($cast(item, obj)) begin cached item; hit_cnt; end else begin miss_cnt; end endfunction virtual function void report_phase(uvm_phase phase); uvm_info(FILTER, $sformatf(hit%0d miss%0d typename%s, hit_cnt, miss_cnt, $typename(T)), UVM_LOW) endfunction endclass把這個(gè)類從uvm_subscriber#(uvm_object)派生出來每個(gè)組件可以在構(gòu)造函數(shù)里指定自己的 T。類型匹配的進(jìn)來類型不匹配的直接過濾。這種模式下對象從上游傳到下游時(shí)全程只有一個(gè)句柄在流動(dòng)沒有多余拷貝同時(shí)通過$cast保證了類型安全。關(guān)于這個(gè)組件還有一點(diǎn)值得提醒因?yàn)閒ilter_t#(T)的參數(shù)化UVM 的工廠注冊宏要用uvm_component_param_utils而不是uvm_component_utils。UVM 1.2 提供uvm_component_param_utils就是為了適配參數(shù)化類如果你用的是老版本 UVM這個(gè)宏可能沒有需要自己手動(dòng)實(shí)現(xiàn)type_id的 create 機(jī)制或者退一步用非參數(shù)化的基類加虛函數(shù)。這也是老項(xiàng)目里參數(shù)化類用得少的一個(gè)客觀原因。5.4 對象拷貝和數(shù)據(jù)類型轉(zhuǎn)換的聯(lián)動(dòng)一個(gè)我踩過的假轉(zhuǎn)換坑最后分享一個(gè)把拷貝和類型轉(zhuǎn)換結(jié)合使用時(shí)我實(shí)際踩過的坑。當(dāng)時(shí)我有一個(gè)base_txn里面定義了一個(gè)uvm_object_utils宏還有一個(gè)copy()方法邏輯看起來沒問題。子類ext_txn繼承它但copy()重寫時(shí)只調(diào)了super.copy(rhs)忘了復(fù)制自己新增的數(shù)組字段。然后在 scoreboard 里我寫了個(gè)通用比較邏輯把期望對象和實(shí)際對象都塞進(jìn)一個(gè)uvm_object容器里等到比較時(shí)再$cast回base_txn。因?yàn)閮蓚€(gè)對象都是ext_txn類型$cast成功了數(shù)據(jù)比對卻總是失敗。打印出來一個(gè)字段是對的另一個(gè)字段是默認(rèn)值。最后定位才發(fā)現(xiàn)不是$cast的問題而是copy()漏字段導(dǎo)致期望隊(duì)列里的對象一開始就是殘缺的。這個(gè)案例給我的教訓(xùn)是類型轉(zhuǎn)換負(fù)責(zé)分揀拷貝負(fù)責(zé)內(nèi)容完整分揀成功不代表內(nèi)容正確。排查問題時(shí)要分清階段先確認(rèn)類型對不對再確認(rèn)數(shù)據(jù)備份有沒有做全。兩者混在一起排查往往會(huì)浪費(fèi)大量時(shí)間。6. 從對象拷貝到參數(shù)化類我在項(xiàng)目里用得最順的幾個(gè)技巧把前面幾章的東西收攏一下分享幾個(gè)我在真實(shí)項(xiàng)目里沉淀下來的、直接能用的技巧和習(xí)慣。這些內(nèi)容不復(fù)雜但確實(shí)能幫你少走彎路。第一個(gè)技巧給所有 base transaction 實(shí)現(xiàn)一個(gè)統(tǒng)一的deep_copy()約定。不管項(xiàng)目里有沒有 UVM我都建議在頂層基類里定義一個(gè)virtual function void deep_copy(input base_txn rhs)子類重寫時(shí)第一句永遠(yuǎn)是super.deep_copy(rhs);后面再復(fù)制自己的新字段。這樣任何子類對象都能通過基類句柄完成深拷貝不需要在每個(gè)場景里做類型分支。第二個(gè)技巧拷貝函數(shù)里統(tǒng)一使用copy_to風(fēng)格即把內(nèi)容填充到已分配的對象里而不是copy返回新對象。返回新對象在語法上更直觀但每次調(diào)用都會(huì)new()在高頻率的 scoreboard 比對場景里會(huì)產(chǎn)生大量對象創(chuàng)建和釋放給仿真器 GC 帶來壓力。copy_to配合對象池能把內(nèi)存分配次數(shù)降下一大截實(shí)測在高吞吐場景下仿真速度能有可感知的提升。第三個(gè)技巧參數(shù)化類的類名里盡量帶上類型名比如gen_t#(eth_pkt)在打印日志時(shí)會(huì)顯示gen_t#(eth_pkt)非常利于調(diào)試。如果嫌名字長可以在實(shí)例化時(shí)用typedef起個(gè)短名typedef gen_t#(eth_pkt) eth_gen_t;這個(gè)短名只在當(dāng)前作用域生效不污染全局命名空間日志里還能看到完整類型信息兩全其美。第四個(gè)技巧多線程共享句柄時(shí)把 SV 的 timeslot 調(diào)度機(jī)制納入考慮。同一個(gè) time slot 內(nèi)fork...join_none啟動(dòng)的線程和主線程看到的對象狀態(tài)是一致的如果你在子線程里改了對象字段主線程下一行代碼立刻也能看到。這個(gè)立刻可見其實(shí)經(jīng)常是 copy 漏寫的信號(hào)如果你發(fā)現(xiàn)一個(gè)對象被多個(gè)線程同時(shí)修改與其依賴仿真器調(diào)度順序不如先檢查是不是某個(gè)地方缺少深拷貝。我見過不少偶發(fā)性的 compare mismatch最后都是這個(gè)原因。第五個(gè)技巧用$typename()打印真實(shí)類型尤其是在參數(shù)化類的工廠創(chuàng)建和$cast失敗現(xiàn)場。SV 的內(nèi)建$typename()函數(shù)對參數(shù)化類的輸出比get_type_name()更準(zhǔn)確因?yàn)間et_type_name()在參數(shù)化類里經(jīng)常返回空白或者同一個(gè)名字你沒法區(qū)分究竟是哪個(gè)參數(shù)特化出來的對象。結(jié)合前面的 filter 例子我在所有類型轉(zhuǎn)換失敗的地方都會(huì)打一行$typename(obj)對$typename(T)把實(shí)際類型和期望類型擺在一起看基本一眼定位。這些技巧看著零散但背后的核心思想是一致的面向?qū)ο篁?yàn)證代碼的很多 bug本質(zhì)都是對象身份和對象內(nèi)容這兩件事沒分清楚??截惤鉀Q的是內(nèi)容獨(dú)立參數(shù)化解決的是類型通用$cast解決的是類型安全這三者配合好了驗(yàn)證組件可以做到又通用又不容易出錯(cuò)。最后再啰嗦一句SV 的面向?qū)ο髾C(jī)制上手語法一天就夠了但真正用得穩(wěn)一定是在項(xiàng)目里一遍遍踩過、觀察過對象生命周期之后。希望這篇從對象拷貝講到參數(shù)化類的文章能幫你少踩幾個(gè)我踩過的坑。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
激情综合激情五月| 婷婷色色五月| 狠狠操综合| 五月丁香激情综合网| 亚洲不卡| A短视频免费在线观看| 欧美毛片www| 性爱激情五月| 成人电影AV在线观看| 人人干99| 超碰在线网站9| 丁香网五月网| 97视频.干com| 国产做爰视频免费播放| 色欧美影院| 婷婷五月天六点丁香五月| 丁香婷婷色五月激情综合| 色国产五月| 婷婷碰碰| 九九婷婷网五月天| 欧美日韩AAAA| 激情五月伊人婷婷| 婷婷久久婷婷| 日本熟妇乱妇熟色A片蜜桃| 欧美色色色色色色色| 激情综合色婷婷啪啪六月天| 午夜成人片400| 毛片毛片毛片毛片| 六月婷婷深深爱| 玖玖爱伊人网| 天天狠天天叉| 欧美婷婷五月天| 中文字幕在线日亚洲9| 极品少妇高潮啪啪AV无码| 婷婷五月AV| 久艹伊| 国产超碰在线| 婷婷五月天无码| 亚洲综合网区| 极品另类| 人妻有码乱操| 久久久久久久人妻| 伊人久久婷| 久久亚洲婷婷综合色五月| 亚洲九九99精品视频在线播放| 91九色中文| 久久99热这里| 婷婷色五月丁香六月欧美啪| 午夜福利8055| 免费视频在线观看的网站| 婷婷色在线播放| 色五月婷婷、老熟女| 婷婷综合影院| 丁香五月婷婷激情蜜桃| 少妇熟女视频一区二区三区| 嫩草视频在线观看| 亚洲精品婷婷| VfJxEwPH| 六月婷婷网站| 天天操天天操综合| 亚洲无码成人网| 国产44页| 五月色情精品| 综合色图婷婷| 被强行糟蹋的女人A片| 久久99大全| 综合色综合| 五月婷婷五月天| 6 9式性爱视频在线播放| 激情六月天| 婷婷丁香五月激情密臀av| 欧美婷婷五月激情| 99热成人精品| 欧美婷婷六月丁香综合色| 夜夜爱爱亚洲| 伊人久久大香线蕉综合网站| 五月婷婷先锋| 波多野结衣不卡AV| 色婷婷激情五月天丁香| 亚州美女| 欧洲色| 九九99热| 影音先锋91| 五月综合色播播丁香婷婷| 国产乱码久久| 那里有AV网址| 777色婷婷爱五月| 国产婷婷综合在线免费视频| www.婷婷.com| 91大神操美女| 高清不卡一区| 色欲久久综合| 国产中文亚洲欧美日韩性交| 狠狠色狠狠干| 91艹人| 色玖玖| 新97人人上人人| jiujiujiuwuyuetian| 久久久九九九 99| 亚洲AV无码成人电影| 激情久久久| 综合五月婷婷| 五月色综合| 色色丁香婷婷综合| 九九热99热| 无码人妻激情| 99激情视频| 色综合天天综合成人网| 欧美大肥婆大肥BBBBB| 天天干天天日天天操| 九九99九九99偷拍视频免费看| 播五月,色五月,开心五月播放器| 99热日| 亚洲乱码w在线观看| 亚洲色热| 色情综合| 色婷婷av在线观看| 黄色片久久| AV在线不卡播放| 国产看真人毛片爱做A片| 日韩无码专区| 99视频在线观看地址| 蜜乳久AV| 色色色9 9 9| 久久香蕉丁香| 午夜丁香丁香婷婷| 六月婷婷日| 五月婷婷这里都是精品| 婷婷丁香人妻天天久久| 久热99热| 91九色首页| 9色在线| 久/久精品99看9| 五月天婷婷成人网| 亚洲AV成人在线观看| 90色免费视频| 99ri精品在线| tingtingjiqingwuyue| 六月婷婷之青青草| 丁香六月色婷婷综合| 深爱开心激情| 天天影院色| 五月婷婷五月天| 白人荫道BBWBBB大荫道| 99久久色| 六月丁香婷婷拍拍| 婷婷五月天免费视频| 99热这里只有精彩| 九九九九这里只有精品| 五月婷婷影视| 成人av在线电影| 天天色天天搡| 丁香六月婷婷激情| 99这里只有精| 亚洲不卡123| 欧美VA视频| 91九色精品女同系列| 五月天婷婷黄色视频| 五月天中文字幕在线婷婷| 日日爽日日爽| 五月天丁香| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 99色综合网| 色综合五月天| ...婷婷五月综合不卡,国产在线手机| 丁香五月1页| 99亚洲大片精品永久在线观看 | 夜夜骑夜夜撸| 日日夜夜狠狠| 97婷婷五月激情六月丁香伊人| 亚洲av网站在线观看| 欧美群妇大交乱婬网| 亭亭五月天黑人2014| 五月丁香综合激情| www.色五月| www.综合久久| 欧美综合在线五月天色婷婷| 综合网色| 婷婷激情五月天激情小说| 97视频.干com| 色婷婷色五月天| 另类图片天天影视在线观看| 99九九热播在线免费视频| 丁香五月性| 欧美婷| 生活片五区| 日韩综合网络男女香蕉a片| 亚洲丁香五月美女| 天天爽人人综合免费7799| 秋霞AV吧| 【乱子伦】黄色| 99er热精品视频| 久久精品这里只有精品免费首页| 五月婷婷www| 激情五月天婷婷免费观看| 精品草原久久视频| 亚洲最大成人综合网720P| 色天堂97| 婷婷六月情| 色色色热| 91欧美日韩综合| 99热只有这里才是精品| 欧美99热| 婷婷久久综合| AV操逼网| 嫩草国产| 99热这里只有精品2| 狼人久草| 99无码视频| 99久热这里只有精品| 五月丁香啪| 国产.亚洲.欧洲视频在线| 亚洲 小说 欧美 激情 另类| 久久激情五月| 九九热色视频| 狠狠色婷婷| 综合 蜜月 婷婷| 南京搡BBBB搡BBBB| 色色99| 影音先锋一区| 色五月五月婷婷| 色情激情五月婷婷| 一级二级香港秋霞欧美欧美秋霞| 国产精品第一国产精品| 深爱五月激情综合| 人妻人人操| 日韩在线视频网站| 97碰碰视频在线观看| 色综啪啪啪啪啪啪| 成人视频婷婷| 五月天色色色网| 五月丁香六月欧美综合| 五月天婷婷小说| www色色色com| 欧美人妻一区二区| 99色综合网| 久久久com| 超碰猛烈的性猛交| 91九色欧美| 五月色丁香婷婷综合| 色宗合久久五月婷婷| 精品一二三区久久AAA片| 日本色道视频网站| 日本综合色图| ay2区| 激情婷婷六月天| 夜夜 操无码| 婷婷97碰碰| 97色图片中文字幕视频在线观看| 婷婷的色色五月天| 久婷婷| 婷婷色丁香五月| 一本色道久久88加勒比—| 久久综合人妻| www.99热在线观看| 五月色亚洲| 97亚洲色 torrent magnet| www.色99| 婷婷爱综合| 丁香六月婷婷综合| 99热骚货| 人碰91| 欧美黄色AA片哗啦啦啦| 成人AV中文字幕| 日本WWW九九九| 成人在线综合| 可以看的AV| 色色99色色| 国产亚洲精品AAAAAAA片| 久热这里这里有精品| 五月激情在线| 这里只有精品网站| 91九色欧美| 91色操| 久久精品婷婷| 亚洲最大成人综合网720P| 99热这里只有精品1998| 美欧成人视频| 五月天激情婷婷| 婷婷丁香五月久久| 婷香狠狠爱五月| 啪啪婷婷五月天激情| 青青草轻轻操| 丁香五月天堂网| 婷婷日日天天| 991国产精选视频在线播放下载| 中文资源在线a | 九九综合网色全集 | www.cao.com久久| 99热综合网| 日韩久久色| 色播五月婷婷| 亚洲激情免费视频| 亚洲旡码| 色狠狠色噜噜AV天堂五区| 丁香五月激情视频| 色久女| 色五月激情综合网| 色激情五月| 激情六月丁香| 久久精品A片777777| 狠狠干综合网| 色婷婷五月天中文字幕| 国内精品免费一区二区2009| 婷婷五月亚洲综合| 第四色婷婷五月| 在线超碰91| 色婷婷色99国产综合精品| 中文字幕 久久9999| 人人干人人操外国| 九九黄色网| 婷婷色网站| 婷婷色色丁香五月天| 可以看的AV| 婷婷激情五月综合丁香社| 啪啪色区| 国产婷伊人| 伊人网碰碰| 婷婷丁香五月久久| 99精品自拍| 黄色片avv| 久久久ww| 99热这里只有精品搜| 婷婷亚洲影院| 五月丁香六月婷婷综合| 欧美色综合天天久久综合精品 | 色婷婷五月天成人网| 色色色色色色色色色色色色色97| 国精产品一区一区三区免费视频| 色婷婷www| 人妻肉射免费观看| 丁香五月天AV在线| 激情五月综合久久| 亞洲自怕| 99在线精品免费视频| 婷婷 丁香 精品| 色婷婷五月天天天做| 久久免费丁香| 色综合婷婷99| 一点色成人网| 5月丁香啪啪啪| 色深爱五月| 深情六月婷婷综合久久| 黄网免费观看| 色婷婷影| AV变态另类一区二区| 色色色999| 亚洲色色色| 五月丁香激情六月| 五月天另类综合网| 婷婷五月天成人网| www.婷婷六月天| 丁香五月熟女| 99只有精品9| 天天爽天天操| 五月天激情电影| 色狠狠婷婷| 国产精品蜜臀99| 色情五月丁香婷婷网| 日韩人妻在线观看| 六月婷婷综合久久| 亚洲AV无码影院| 婷婷5月久久综合网站| 五月丁香在线| 色优久久| 成人看片网站| 4399成人黄A片| 五月丁香在线观看| 人人草人| 五月丁香六月婷婷无码| 99热这里只有精品官网| 米奇影视五月天| 狠狠va| 五月婷五月婷伊人伊人五月婷| 成人永久免费视频在线观看| 色五月婷婷自拍| 亚洲图色五月天| 啪啪日本欧美| 啪啪五月婷婷| 欧美日韩日韩成人| 丁香激情五月| 五月丁香啪啪综合| 97久久久久| 丁香六月狠狠干| 五月丁香婷婷啪啪综合| 久久综合首页| 变态另类9| 久久九九@| 97色图片中文字幕视频在线观看| 五月天婷婷社区久久综合| 五月婷婷六月丁香首页| 丁香五月婷婷欧美激情-中文天堂最新版在线观看 | 超碰人人色| 激情六月婷婷| 99ER热精品视频| 99热这里| 婷婷综合性爱网| 日日操夜夜擼| 久久玖玖99| 五月天堂六月丁香亚州中文字幕久久 | 97色婷| 99综合免费视频| 99在线精品观看99| 激情五月黄色小说| 婷婷激情五月综合基地| 亚洲欧州色情在线观看| 思思热视频| 久久这里有精品| 热99在线精品| 婷婷五月丁香六月| 国精产品一区一区三区免费视频| 久久婷婷五月丁香蜜桃网| 第四色色色色色丁香五月天| 久久日韩婷婷五月| 超碰在线精品| 婷婷天天舔| 五月丁香六月激情综合在线| 五月天婷婷在线播放| 色婷婷六月天| 夜夜操夜夜操| 亚洲乱码日产精品BD| 欧美十二区| 青青999| 日韩精品成人在线| 精品久久二6| 丁香婷婷人妻综合网| 色综合网综合| 棕合影院色色| 偷偷与邻居做爰完整视频| 性爱激情五月| 日本色图综合| 就爱操www com| 婷婷激情五月天小说| 欧美综合激情丁香五月六月婷| 91丁香五月| 可以免费观看的AV| 大香伊人婷婷影院| 大香蕉久久伊人婷婷五月丁香| 婷婷五月丁香在线观看| 激情五月,婷婷五月,丁香五月| 色综合久久88色综合天天看| 婷婷丁香六月天| 欧美,日韩成人在线| 久久性刺激| 狠狠干天天内射| 99热99热不卡| 色色射| 91妻人人爽人人看片| 婷婷丁香五月天熟女丝袜| 日本色色图| 99成人精品| 综合图片色色| 嫩BBB搡BBBB榛BBBB| 亚洲无码你懂的| 欧美日韩成人| 玖玖资源在线视频| 欧美精品XXXXBBBB| 激情五月天啪啪| 日本va欧美va精品发布视频| 六九色综合婷婷五月天| 亚洲va综合va国产va中文| 色婷大香蕉| 操91| 天天综合网站| AⅤ网站在线看| 人人干99| 涩五月色婷婷| 少妇性BBB搡BBB爽爽爽视頻| 美女激情综合| 婷婷激情五月天激情| 六月天婷婷| 色色五月综合| 五月丁香在线偷拍视频| 丁香九月婷婷| 91视频人人做97| 99热精这里只有精品| 色九月婷婷综合| 久cao香蕉影院| 日韩欧美颜射| 开心五月婷婷| av网站免费在线| 欧洲永久精品| 日韩久热| 超碰色人妾| 天天粽合合合合| 天天操B| 4399精品一区二区| 五月婷婷免费视频| 色婷婷狠狠18禁| 大香蕉婷婷丁香| 人人人va亚洲视频在线| 色五月激情五月| 五月停亭六月,六月停亭的英语| 激情五月六月婷婷| 久久99久久99精品,久国产,久久精品免费,99久在线,久久久久国产精品免费网站,9 | 色色婷婷五月| 久久精品五月天| 日日噜狠狠色| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 玖玖综合色| 丁香天堂夜| 婷婷五月久久| 一本大道熟女人妻中文字幕在线| 色综天天综合| 超碰久热| 超碰激情网| 国产婷婷综合| 丁香五月激情综合婷综| 五月天伊人综合| j五月香在线| 千人斩操逼| 综合网色| 激情五月天黄色小说| 成人婷婷| 久热91精品| 狠狠色综合精品视频在线| 五月激情四射网站| 99re这里有精品手机在线| 色婷婷亚洲婷婷| 日韩九九视频| 特级西西4444www无码| 丁香五月综合激情啪啪| 狠狠五月激情丁香六月| 久青操| 天天干天天拍| 久热超碰91| 免费观看的av| 操逼视频一区| 久久激情综合| 色噜噜狠狠色综合无码久久欧美| 色99网站| wuyuedingxiang99| 九九热在线精品视频| 欧美色色色色色色色色色色影视| 人妻少妇色综合| 玖月婷婷爱丁香| 成人日韩欧美| 青青草蜜臀| 玩熟女五十AV一二三区| 人人看人人摸人人| 亚洲色区17| 天天插,天天射| 97超碰欧美中文字幕| 婷婷在线激情| 大香蕉婷婷五月天| 99久久99久久综合| 九九视频精品在线免费| 在线五月婷| 天天爽天天爽视频| 欧美三日本三级少妇三99| 猫咪伊人久久| 久热这里只有精品3| 色99在线| 欧美性色五月天| 31色区视频免费看| 在线视频99| 粉嫩av懂色av蜜臀av熟妇| 日本久久99| 婷婷四月 成人 狠狠干| 人人爽网| 色日本五月天| 级情九色| 疯狂做受XXXX高潮A片| 五月天婷a| 丁香六月av| 久久精典| 色综合五月在线| 丁香五月亚洲综合| 欧美视频五区| 六月激情婷婷综合| 久久中国毛毛片爱久久| 九九热黄色| 色99视| 蜜臀av 粉嫩av 懂色av| 久色大| 五月丁香久人妻中文| 四川BBB搡BBB搡多人乱亂| 丁香婷婷视频一区二区| 久久久性爱视频| 丁香五月天视频| 婷婷六月情| 香蕉综合在线| 五月天丁香婷婷久久九| 日本久久人| 亚洲色色在线| 99人人干人人操| 99自拍视频| 色五月成人在线| jiujiujiuwuyuetian| 丁香五月偷拍| 五月天综合视频网| 五月天开心激情网色欲无码| 九色1区视频在线| 日韩999| 99热这里只有精品2024| 另类激情五月| se色婷婷视频| 五月丁香狠狠爱| 3www激情| 久久这里只有国产| 超碰色女人| 五月天精品| 99这里只有精品视频| 高清无码.com| 国产精品丝| 日本不卡高字幕在线2019| 久久丁香五月| 538久久| 丁香六月婷婷久久高清| 99超碰欧美| 97碰碰人人| 九九机热| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 九九视频免费| 99人人操| 夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂夂亚洲亚洲亚洲亚洲亚洲亚洲亚洲亚洲色 | 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 亚洲欧美婷婷五月色综合| 丁香午夜天| 婷婷5月天av| 91AV婷婷| 超碰99成人在线| 激情婷婷五月天| 五月婷婷中文字幕AV| 五月花成人网| 99热9| 五月丁香婷婷婷激情爱爱| 国产69久久久欧美黑人A片| 激情综合99| 26uuuuuuuu国产| 精品一二三区视频立| 91精品久久久久久久久| 欧美精品狠狠色丁香婷婷| 99综合视频| 色六月婷婷| 五月丁香六月婷婷网| 思思热久久久久思思热| 国产永久一二一起草| 97久久草草超级碰碰碰| 狠狠久久婷婷| 99久久五月婷婷| 欧美槡BBBB槡BBB少妇| 99热国产这里只有精品| 日韩色五月| 九九無妻| 亚洲另类视频| 五月婷婷免费看| 色婷婷狠狠色| 呦呦v线| 婷婷五月蜜桃成人桃色丁香| 激情婷婷| 99热啪啪| 超碰久热| 五月婷丁香花| 天天综合网、天天综合色| 九九这里是免费的视频5| 丁香五月综合久久| 在线综合91| 九九激情| 久久综合香蕉国产国产蜜臀AV| 天堂久久丁香| 日韩久久系列| 在线五月婷| 级人人91| 婷婷酒色网| 日日夜夜亚洲一区| 色婷婷aV四虎| www.99免费视频| 91日综合欧美| 91婷婷在线观看| 九伊人网| 日本欧美国产| 亚洲午夜av| 久久五月婷| 丁香五月天啪啪| 五月天激情综合在线| 久久久久这里都是精品| 狠狠色丁香综合| 国产99精品免费视频| 久久6这里只有精品| 99成人网站| 丁香综合伊人AV| 人妻操操色| 六月丁香婷婷五月| 丁香五月伊人| 婷婷五月天久久| 成人看片网站| 99热这里| av操B网站| 99精品网址| 亚洲无码yw| 91啪啪视频| 婷婷激情伍月网| 开心丁五月| 五月综合六月丁| 99国产这里只有精品| 精品人妻一区| 丁香五月激情综合| 深爱激情五月天| 色色婷婷综合| 五月狠狠| 五月婷婷黄色| 婷婷亚洲在线| 最新va在线播放| 国产激情久久久| 日本猛少妇色XXXXX猛叫| 97超碰,人人舔,人人操,人人摸| 婷婷五月激情小说| 99网址在线看| 婷婷丁香五| 色色 9| 97色97干| 三男玩一女三A片| 影音先锋AV男人站| 婷婷色五月丁香六月欧美啪| 另类婷婷丁香| 五月天播播中文字幕 | 久久综合丁香| 成人精品一区日本无码网| 激情综合丁香| 婷婷综合激情| 婷婷五月天成人网站| 久久色五月| 欧美性做爰大片免费看办公室| 婷婷丁香五月综合久久| 五月婷婷三级| 婷婷丁香视频| www.色五月.com| 中国女人内射6XXXXX| 玖玖婷婷视频| oumeisesewang| 久久爱婷婷| 欧美激情综合色综合啪啪五月| 五月婷婷伊| 久草天堂| 五月婷婷婷婷网| 综合色播| 激情久久网| 熟女激情网| 激情五月婷婷五月丁香五月开心五月| 久久人人看| 国产美女主播vip| 五月在线婷色| 九九性爱网| 日本强伦片中文字幕免费看| 亚洲无线视频| 日本熟女一区二区| 深爱激情五月婷婷| 六月婷在线| 亚洲色五月天是什么| 久色大| 久久婷婷五月综合色欧美| 狠狠色噜噜狠狠狠狠综合| site:feetmall.com| 五月天激情四射| 超级碰碰碰久久网站| 色五月婷婷五月丁香五月激情五月视频| 婷婷干五月综合在线播放| 97色色综合| 九九九九九九毛片| 99精品在线下载| 96丁香六月婷婷蜜桃综合久久| 9热在线视频精品| 色色丁香五月婷婷| 国产成人网址| 91在线视频综合| 99久久久国产精品免费蜜乳tv| www.婷婷五月| 五月丁香六月婷婷成人| 亚洲狠狠狠| 开心激情婷婷| 婷婷丁香六月| 久9无码视频| www.狠狠| 亚洲AV影片在线观看| 色综合色五月| 无码99| 五月婷九月| 亚洲Av入口| 天天狠狠夜夜狠狠2023| 婷婷五月色图| 日日夜夜狠狠操| 色色五月婷婷网| 99热在这里只有免费精品| 日韩九区| 狠狠第四色| 色色色综合网| 九九激情视频| 五月六月婷婷| 1024欧美看片| 国产精品久久久久久五月天加勒比| www.夜夜操| 婷婷五月色| 久久久99久久| 婷婷狠狠18禁久久| 激情综合五月| 99偷拍视频在线日本| 色婷婷五月天视频在线| 成人AV片播放| 9久热这里只有精品| 51精品国自产在线| 亚洲色情激情丁香五月| 免费视频WWW在线观看网站| 九九热这里有精品视频| 五月丁香六月婷婷网| 色婷婷大香蕉| 亚洲AV成人片无码网站| 97人人做| 色综合激情| 色婷婷久久久| 99热这里只有精品2| 成人网址在线观看| 日本三级大片| 国产精品久久99| 九九热精品| 888精品福利地址| 激情婷婷| 五月的婷婷六月丁香| 五月开心播播网| 精久久色| 色婷婷亚洲综合天堂| 亚洲成人黄色网| 日韩AV中文字幕在线| 99亚洲视频| 91九色中文字幕女在线观看| 精品网站:999WWW| 热久国产| 欧美日韩一区二区三区四区| 激情综合五月激情17| 伊人婷婷五月天| 五月丁香久久久日婷婷久久婷婷日| 激情六月天| 婷婷丁香五月六月激情| 色五月婷婷丁香凹凸| 99看片| 熟女网站久久| 激情五月影院| 色五月丁香激情视频| 夜色五月天| 五月丁香六月综合激情无码软件亮点| 超碰伊人碰婷婷五月| 久久久久激情网| 午夜成人AV在线| 五月综合激情网| 欧美黑人巨大猛烈cuckold| 色色色色丁香| 色五月婷婷一二| 欧美婷婷日本| 亚洲va综合va国产va中文| 丁香五月激情视频在线| 伊人大蕉香| 超碰在线人人| 六月婷婷狠狠| 十二区无码| 热99在线精品| 丁香5月激情网| 激情文学综合婷婷五月天丁香花| 日日噜狠狠色| 色婷婷97| 香蕉久久av一区二区三区| 性色视频| 日韩人妻无码专区| 97色干在线观看| 色婷婷的五月天| 永久无码色| 亚洲狠狠色丁香婷婷综合久久| 草综合14| 亚洲色9| 婷婷六月成人| 综合AV在线| 五月色婷婷AV| 综合色网站| 99国产精品久久久久久久久久久| 婷婷激情五月色综合| 色色色国产| 婷婷在线网| 色色激情五月| 婷婷五月AA五月在线| 99热 在线播放| 亚洲综合九九| 久久99热久久99精品| 69精品人人人人| 国内自拍1区| 亚洲综合99| 久色五月| 婷色五月| 久久日本wwww色| 激情综合网五月激情| 丁香婷婷色五月合集| 日本婷久久| 日韩艹比| 五月天婷婷基地| 99爱精品视频| 婷婷五月天AV网| 91碰操| 狠狠干婷婷| 婷婷五月综合亚洲| 国产日韩欧美性生活| 99五月婷| 色欲色欲久久宗合网| 色九区| 天天做天天摸| se色99| 九九大香蕉黄色影院| 大伊香蕉精品视频在线| 色婷婷综合久久久久| 天天爽夜夜爽天天爽夜夜爽| 久久99综合| 激情婷| 日逼影音先锋男人AV资源站| 亚洲永久免费| 色五婷婷开心缴| 色婷五月天亚洲| 激情五月综合网最新| 色综合婷婷99| 国产精品99久久久久久久女警| 色色热| 女力报到正好爱上你| 人人操Av| 久久人操| 成人丁香五月婷| 另类在线免费视频| 五月天激情婷婷| 欧美日韩123| 婷婷五月天精品| 日日射天天射| 另类色视频| 婷婷人人操| 日韩 mm 不卡| 操逼五月婷婷| av九九| 操碰91| 丰满人妻一区二区三区| 色久五月天| 婷婷狠狠五月综合| 婷婷丁香五月激情综合站_久久五月丁香激情综合_开心五月综合激情综合五月_婷 | 四LLL少妇BBBB槡BBBB| 黄网在线免费观看| 91九色欧美| 欧美成人色婷婷| 欧洲第一久色| 六月丁香综合网| 五月丁香婷婷综合在线| 色欲色天天香综合| 国产婷婷综合| 99热在线观看99| Www.se.久久| 亚洲狠狠丁香婷婷香蕉| 日日做A爰片久久毛片A片英语 | 久久婷婷六月| 26uuu国自产精品| 色婷婷网| 日本三级日本三级99| 桃色激情五月天| 亚洲成人av在线播放| 超碰五月婷婷五月天| 亚洲中文AV| 色婷婷色综合久久精品V| 五月天激情国产综合婷婷婷| 久久性爱视频网站| 九九亚洲视频| 丁香五月自拍| 亚洲av综合网| 天天摸天天肏| 中文字幕婷婷| 激情视频网址| 91久久99久久91熟女精品| 色狠狠综合网| 激情AV在线| pom538精品视频| 色天堂在线| 五月天丁香网站| 色色色色综合网| 日韩中文欧美| 天天干天天拍| 第九色区av天堂| 亚洲情综合五月天| 欧美五月停| 午夜在线成人网站免费观看| 久超免费视频| 午夜日韩久久久网站| 色五月大| 91九色在线视频| 久草天堂| 婷婷,五月天,丁香,第一| 5月色婷婷| 久久五月天黄色五月天色网址| 人人添人人| 99热777| 五月天婷婷爱| 激情五月婷黄版| 亚洲丁香花色| 性爱动图国产麻豆一区二区三区| 激情综合五月激情| 丁香5月啪啪| 99亚洲无码| 九九在线精点品| 婷婷六月啪啪| 在线播放成人网站| 国产五月视频| 久久婷婷五月综合色天| 激情宗合 激情宗合| 色五月婷婷av| 妻久久久久| 337午夜福利| 国产亚洲精品久久一区二区三区| 五月激情啪啪啪| 高清无码网址| 丁香情色五月| 激情婷婷九月| 操操操操操操婷婷五月天| 久草久青福利| 色区域网站视频| 激情五月综合亚洲另类| 人人爱操| 亚洲乱码日产精品BD| 偷偷操九九| 无码人妻电影| 337p午夜影院| 深爱激情丁香| 91丨九色丨43老版熟女| 免费看欧美成人A片无码| 色婷婷久久9.com| 五月婷啪| 精品99网站| 五月天综合在线观看视频| 思思热精品在线视频| 五月婷三级片| 国产av影片| 啪啪五月天啪啪| 五月婷婷视频在线观看| 丁香五月影院| 九九九AAA热视频| www九九| 五月天婷婷成人资源站| 五月天婷综合| 农村熟妇高潮精品A片| 91精品国产综合久久蜜芽解析速度| 日本久久天堂| 丁香五月av在线| 夜夜 操无码| 欧美私人家庭影院| 五月久久网| 六月丁香婷婷网| 亚洲99在线| 国产AV国片偷人妻麻豆| 97五月婷婷| 五月丁香六月婷婷不卡免费无码 | 丁香五月天成人| 亚洲黄色影视| 在线看AV| 亚洲视频a| 久久六月天| 少妇大叫太大太粗太爽了A片| 婷五月天| 深爱五月激情网| www.五月天婷婷| 极品少妇XXXX精品少妇偷拍| 成人毛片在线免费观看| 夜夜骑日日夜夜| 97色久| 色综合99色| 丁香婷婷精品视频| 99热官网| 玖玖色综合色| 99热r| 99性爱视频| 日本人妻伦在线中文字幕| www.99热在线观看| 亚洲综合色棒| 色婷婷丁香五月| 免费国产视频| 婷婷五月天堂一本在线| 日韩成人免费电影| 久久人人九| 婷婷五月深深爱| 欧美操人| 影音先锋四区| 99无吗| 99热个人在线| 五月天狠狠网站| 久99久99精品免| 丁香深五月婷婷| 丁香六月亚洲| 天天日,天天插| 婷婷色五月大香蕉在线观看| 不卡影院午夜理论片| 九九久久99| 97操在线视频| 久狠狠| 99热99日天天干| 6080av| 五月婷久久| 久九色| 五月 激情视频| ady狠狠入| 丁香五月激情图片| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 啪啪啪大香蕉| 91久久综合亚洲鲁鲁五月天| 色五月婷婷影视| 人妻自慰高清合集| 日韩av手机在线观看| 九九综合视频在线观看| 久九色| 99精品一二三四视频| 26uuu成人网| 久久99日本精品视频免费观看| 激情5月天天天| 久色精品| 亚洲丁香五月美女| 丁香六月天| 五月丁香综合网色欲| 色色网站在线| 级情九色| 9久精品| 超碰激情网| 亚洲不卡| 六月丁香大香蕉| 综合色影院| 五月婷久久草| 丁香五月天婷婷中文字幕| 先锋男人91资源| 五月丁香另类图片| 一级无码作爱片| 婷婷无码五月天| 五月情涩综合婷婷| 思思热高清在线观看| www网站在线观看| 久热视频这里只有精品| 婷婷六久久| 女人天堂 AV| 91九色成人原创视频| 日韩五月丁香| 97人操| 日韩色久| 超碰在线观看99| 九九这里都是精品| 噜噜狠狠| 五月婷婷综合激情| 夜夜www| 极骚大香蕉伊人| 五月婷婷激情综合视频| 男人的天堂在线婷婷| 五月婷婷啪| 永久免费一区二区三区| 五月婷婷激情性爱| 中文字幕在线不卡| av狠狠操| 少妇激情五月婷婷| 大香蕉久久视频久久视频| 天天操天天日天天操| 亚洲殴洲精品Av在线| 亚洲视频色婷婷| 91丨九色丨熟女|老版| www色色com| 天天综合亚洲综合网天天αⅴ| 天天做天天爱| 丁香五月在线视频黑人| 中文AⅤ大全| 久久婷婷亚洲| 亚洲精品视频在线播放| 婷婷视频网| 五月婷婷久久网| 无语停婷丁香网| 五月婷婷六月情| 日本色婷婷| 伊人无码高清| 播五月丁香六月| 日韩精品超碰在线观看| 五月婷色| 五月色情网| 伊人影院久久网| 九色视频91疯狂| 久久99激情| 99热伊人综合| w婷婷五月婷婷w| 色色99色色| 大鸡巴伊人网| 中文字幕,综合,91| 五月天激情黄色小说在线观看 | 婷婷五月天成人小说| AA久久| 噼里啪啦在线观看免费完整版视频| 色综合综合色| 国产精品国产| 色色亚洲| 综合激情网激情五月。| 激情综合99| 精品亚洲国产成AV人片传媒| 欧美婷婷综合网| 丁香六月婷婷综合激情欧美| 欧美99| 五月综合缴情网| 丁香婷婷五月六月久久| www.婷婷五月天| 日韩视频99| 色愛综合网| 久久成人亚洲欧美电影| 一起草Av| 插插五月天| 六月丁香婷婷色狠狠久久| 五月综合久久| 五月天婷婷视频| 99久久99视频只有精品| 操97在线观看| www.婷婷五月| 婷婷亚洲五月色综合| 丁香蜜臀黄色婷婷五月天| 亚洲无AV在线中文字幕| 涩五月婷婷| 激情六月五月婷婷综合网| 五月天婷婷久草丁香| 激情五月天婷婷| 99久在线精品99re8热| 色一区高清| 久久婷婷六月综合综合| 亚洲中文字幕av| 婷婷丁香18| www.狠狠狠.com| 国产av影片| 99超碰欧美| 五月激情六月综合| 五月天婷婷亚洲| 热久久77777| 天天插天天射天天干| 日本少妇裸体做爰高潮片| 色域五月婷婷丁香| 天天日天天做天天操| 丁香啪啪| 久久码久久无清| 欧美三级巜人妻互换| 无码人妻电影| 亚城区在线| 亚色网站小视频| 五月天婷婷綜合院| 亚洲182在线观看| 欧美日韩99| 亚洲视频操| 五月婷婷自拍视频| 夜夜人妻五月天| 超碰在线99热| 亚洲黄网在线| 伊人久久婷婷| 51XX午夜影福利| 五月丁香六月婷婷久久| 丁香婷婷激情五月| 在线成人网站| 99热99思午夜精品| 99精彩视频网站在线| 婷婷丁香五月综合| 婷婷五月天成人| 婷婷丁香色五月久久88| 99国产小视频免费观看| 成人一级片| 久久国产高潮白浆免费观看99| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 五月激情偷拍| 天天肏高清在线| 夜夜夜夜夜操| 六月亭亭久久综合激情| 婷婷九月激情| 色10月婷婷视频| 狠狠狠狠狠狠色| 久久影视婷婷五月| 狠狠色综合无线观看|