亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

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

Cadence SKILL腳本實(shí)戰(zhàn):從CIW到自動(dòng)化版圖與PCB設(shè)計(jì)效率提升

Cadence SKILL腳本實(shí)戰(zhàn):從CIW到自動(dòng)化版圖與PCB設(shè)計(jì)效率提升 干過(guò)版圖或 PCB 設(shè)計(jì)的人大概都經(jīng)歷過(guò)那種“人肉重復(fù)勞動(dòng)”的崩潰時(shí)刻幾千個(gè)符號(hào)要改屬性、上百個(gè)封裝要核對(duì)位號(hào)、導(dǎo)出 BOM 的時(shí)候格式不對(duì)又得從頭再來(lái)。Cadence 家的 Virtuoso、Allegro、IC251 這些工具圖形界面能幫你干八成的事但剩下那兩成最耗時(shí)的批量操作恰恰是 SKILL 語(yǔ)言的絕對(duì)主場(chǎng)。SKILL 是 Cadence 內(nèi)置的腳本語(yǔ)言和 Lisp 有血緣關(guān)系你在菜單里點(diǎn)到的幾乎所有功能底層都對(duì)應(yīng)著一組 SKILL 函數(shù)把函數(shù)按邏輯串起來(lái)就是能代替你熬夜的自動(dòng)化腳本。這篇指南不打算從語(yǔ)言史講起而是直接按“環(huán)境準(zhǔn)備 → 函數(shù)清單 → 實(shí)戰(zhàn)腳本 → 工程化 → 避坑”的順序把我自己在實(shí)際項(xiàng)目里驗(yàn)證過(guò)的東西一次說(shuō)透。適合正在用 Cadence 做模擬版圖、數(shù)字后端或 PCB 設(shè)計(jì)又不想繼續(xù)在重復(fù)操作里耗時(shí)間的工程師。讀完后你會(huì)拿到可以直接抄的腳本骨架也會(huì)知道哪些坑是文檔里不會(huì)寫的。1. 為什么你的 Cadence 工作流里缺一個(gè) SKILL 腳本1.1 我最早被 SKILL 震撼到的場(chǎng)景入門 SKILL 之前我在 Virtuoso 里做過(guò)一次非常痛苦的版圖整理兩千多個(gè) instance 需要在指定層上加標(biāo)識(shí)文本并且要根據(jù) cellName 自動(dòng)生成內(nèi)容。用界面一個(gè)個(gè)加做得我想把鼠標(biāo)摔了。后來(lái)旁邊一位老工程師看不過(guò)去在我 CIW 窗口敲了幾行命令一段循環(huán)跑完不到一分鐘全部搞定。就是從那一刻起我意識(shí)到同樣的時(shí)間會(huì) SKILL 的人已經(jīng)在喝咖啡了不會(huì)的人還在點(diǎn)鼠標(biāo)。那次經(jīng)歷之后我開始系統(tǒng)查函數(shù)列表、看官方文檔、拿真實(shí)項(xiàng)目練手越深入越覺得這東西才是 Cadence 工具鏈里最被低估的生產(chǎn)力工具。1.2 SKILL 到底是一門怎樣的語(yǔ)言很多人一聽“腳本語(yǔ)言”就以為是 Python 那種風(fēng)格但實(shí)際上 SKILL 的語(yǔ)法非常特別。它有兩種寫法一種是 Lisp 風(fēng)格的括號(hào)形式比如(plus 1 2)另一種是代數(shù)形式比如1 2。兩種寫法在交互環(huán)境下都能被解釋器接受。這門語(yǔ)言從 1980 年代末就出現(xiàn)在 Cadence 工具里了幾十年積累下來(lái)形成了一座非常龐大的函數(shù)庫(kù)。粗略分一下SKILL 函數(shù)大致覆蓋這幾類通用編程列表操作、字符串處理、流程控制、數(shù)學(xué)計(jì)算文件 I/O讀文件、寫文件、目錄掃描數(shù)據(jù)庫(kù)操作訪問(wèn)當(dāng)前設(shè)計(jì)、遍歷元件/Instance/Shape、創(chuàng)建和修改對(duì)象、設(shè)置屬性圖形界面創(chuàng)建 Form、彈出提示框、注冊(cè)菜單命令回調(diào)與控制用戶觸發(fā)器、快捷鍵綁定、命令注冊(cè)也就是說(shuō)SKILL 不只是一個(gè)“宏錄制工具”它是一門能完成復(fù)雜業(yè)務(wù)邏輯的完整語(yǔ)言。提示SKILL 腳本文件常見的擴(kuò)展名是.il系統(tǒng)和用戶自定義的函數(shù)都可以存放在這類文本文件里加載后即可調(diào)用。命名時(shí)盡量別用check、skill這類容易被工具內(nèi)部命令沖突的單詞。1.3 這篇實(shí)戰(zhàn)指南的目標(biāo)讀者如果你滿足下面任一條件這篇文章就是寫給你的你在用 Virtuoso / Allegro / IC251 做設(shè)計(jì)每天有大量重復(fù)性操作你是 CAD 或 EDA 支持工程師經(jīng)常需要幫團(tuán)隊(duì)批量修數(shù)據(jù)你想把團(tuán)隊(duì)里的“老師傅經(jīng)驗(yàn)”沉淀成可復(fù)用的工具你暫時(shí)還沒寫過(guò) SKILL但希望有一條不那么陡峭的學(xué)習(xí)路徑這篇文章不會(huì)停留在語(yǔ)法層面我會(huì)盡量把“函數(shù)列表怎么查、腳本怎么搭、坑怎么躲”講清楚。2. 跑通環(huán)境與第一個(gè)腳本從 CIW 到 Skill Debugger2.1 不用安裝任何額外環(huán)境先找這些入口SKILL 的運(yùn)行時(shí)就在 Cadence 工具里面不需要你單獨(dú)安裝。根據(jù)你用的工具不同入口略有區(qū)別工具入口交互窗口Virtuoso / IC251CIW 窗口下方的命令行直接輸入 SKILL 表達(dá)式Allegro / OrCAD PCB Editor命令窗口輸入skill進(jìn)入支持逐行輸入和腳本加載批量環(huán)境在 shell 里啟動(dòng)工具時(shí)附加腳本參數(shù)以-replay或腳本方式運(yùn)行以 Virtuoso 為例啟動(dòng)后你會(huì)在 Command Interpreter WindowCIW底部看到一行輸入框那就是 SKILL 解釋器。你輸入11回車它會(huì)立刻返回2。Allegro 稍微繞一點(diǎn)默認(rèn)命令窗口接收的是 Allegro 自身的命令要先輸入skill進(jìn)入 SKILL 模式才能寫 SKILL 表達(dá)式。不想手動(dòng)切換的話也可以把調(diào)試內(nèi)容直接寫在.il文件里用load加載。2.2 編輯器選型VSCode、Vim 還是自帶 IDESKILL 腳本本質(zhì)是純文本用系統(tǒng)自帶的文本編輯器就能寫。但實(shí)際開發(fā)中沒有語(yǔ)法高亮和括號(hào)匹配腳本稍微長(zhǎng)一點(diǎn)就非常痛苦。我自己的組合是VSCode SKILL 擴(kuò)展 系統(tǒng)終端。VSCode 里搜索 SKILL 插件可以讓.il文件獲得基礎(chǔ)高亮和括號(hào)匹配還能在文件側(cè)邊欄快速看到函數(shù)定義列表。這個(gè)“函數(shù)列表”能力對(duì)腳本開展特別重要尤其當(dāng)你的腳本積累到幾百行時(shí)能一眼跳到某個(gè) procedure 所在位置效率完全不一樣。如果你習(xí)慣在終端環(huán)境下工作Vim 配合syntax on也能勝任。Cadence 工具鏈自帶的 SKILL IDE在部分版本中可用雖然集成度更高但啟動(dòng)稍重我自己用得反而不多。2.3 加載腳本的基本命令SKILL 里加載一個(gè)腳本文件最常用的命令就是loadload(~/skill_scripts/demo.il)路徑可以寫絕對(duì)路徑也可以寫相對(duì)于當(dāng)前工作目錄的路徑。加載成功后解釋器通常不會(huì)有特別顯眼的提示但腳本里定義的函數(shù)和變量就已經(jīng)可用了。如果你只是臨時(shí)想試一段代碼不想寫文件可以直接在交互窗口粘貼表達(dá)式回車即執(zhí)行。在 Allegro 的 SKILL 模式下也是同理。2.4 用一個(gè)最小腳本驗(yàn)證環(huán)境新建一個(gè)文件命名為hello.il內(nèi)容如下procedure( helloWorld( ) printf(Hello SKILL!\n) ) helloWorld()然后在工具的交互窗口里執(zhí)行l(wèi)oad(hello.il)如果看到Hello SKILL!的輸出說(shuō)明環(huán)境已經(jīng)通了。別小看這個(gè)流程很多人的第一個(gè)坑是路徑問(wèn)題load不支持~展開到某些工作目錄或者腳本文件的權(quán)限不對(duì)。我建議路徑里優(yōu)先用絕對(duì)路徑少用相對(duì)路徑能省掉很多低級(jí)報(bào)錯(cuò)。3. 函數(shù)清單不是背出來(lái)的按用途分類吃透核心 API3.1 列表與字符串處理SKILL 的 Lisp 基因SKILL 里的核心數(shù)據(jù)結(jié)構(gòu)是列表list它同時(shí)扮演了數(shù)組、隊(duì)列、棧等多種角色。最開始寫腳本時(shí)你不需要精通所有列表函數(shù)但這幾個(gè)一定會(huì)頻繁用到函數(shù)作用示例list/()構(gòu)造列表list(1 2 3)或(1 2 3)car/cdr取首元素 / 去掉首元素car((1 2 3))1nth按下標(biāo)取元素下標(biāo)從 0 開始nth(1 (10 20 30))20append合并列表append((1 2) (3 4))cons在頭部插入元素cons(0 (1 2))(0 1 2)length取長(zhǎng)度length((a b c))3member判斷元素是否存在member(b (a b c))foreach遍歷列表foreach(x (1 2 3) printf(%d\n x))mapcar對(duì)每個(gè)元素執(zhí)行函數(shù)mapcar(lambda((x) x*x) (1 2 3))setof按條件篩選列表setof(x (1 2 3 4) x2)(3 4)這里面最常用也最好用的是foreach和setof。setof相當(dāng)于 Python 里的列表推導(dǎo)式比如你想找出當(dāng)前設(shè)計(jì)里所有 cellName 為INV的 instance可以直接寫setof(inst cellView~instances inst~cellName INV)字符串方面重點(diǎn)掌握三個(gè)strcat字符串拼接strcat(a b)返回absprintf格式化生成字符串用于拼報(bào)告非常方便parseString/buildString字符串拆成列表 / 列表拼成字符串strList parseString(a,b,c ,) ; 返回 (a b c) newStr buildString(strList -) ; 返回 a-b-c3.2 對(duì)象與數(shù)據(jù)庫(kù)操作和設(shè)計(jì)數(shù)據(jù)對(duì)話如果說(shuō)列表函數(shù)負(fù)責(zé)“處理數(shù)據(jù)”那么數(shù)據(jù)庫(kù)操作函數(shù)才是 SKILL 真正發(fā)光發(fā)熱的地方。這類函數(shù)通常以db、ge、axl等前綴開頭不同工具覆蓋不同領(lǐng)域。在 Virtuoso 的版圖環(huán)境里最常用的幾個(gè)函數(shù)作用geGetEditCellView()獲取當(dāng)前正在編輯的 cellViewdbOpen/dbClose打開/關(guān)閉數(shù)據(jù)庫(kù)dbGetq查詢對(duì)象屬性dbCreateRect創(chuàng)建矩形dbCreatePath創(chuàng)建路徑dbCreateInstance創(chuàng)建 instancedbGet按條件搜索并返回對(duì)象列表dbCommit提交對(duì)數(shù)據(jù)庫(kù)的修改實(shí)際使用中你經(jīng)常會(huì)看到類似這樣的代碼cellView geGetEditCellView() foreach(inst cellView~instances printf(Instance %s, cellName %s\n inst~name inst~cellName) )在 Allegro/PCB Editor 環(huán)境下函數(shù)前綴通常是axldesign axlDBGetDesign() foreach(comp design~components printf(位號(hào) %s\n comp~refdes) )這里的~是 SKILL 里的屬性訪問(wèn)符類似 C 語(yǔ)言的.。先通過(guò)~取出對(duì)象屬性再通過(guò)函數(shù)修改對(duì)象幾乎就是數(shù)據(jù)庫(kù)操作的全部套路。注意不同版本中元件的“封裝名”字段可能是package也可能是symbol。第一次在陌生版本上寫腳本時(shí)建議先用類似comp~?的方式查看對(duì)象可用屬性再確定字段名。這樣能避免絕大多數(shù)“函數(shù)名或?qū)傩悦麑戝e(cuò)”的冤案。3.3 用戶交互與回顯讓腳本更可用寫腳本時(shí)如果所有結(jié)果都只在終端里輸出別人用起來(lái)會(huì)很不友好。SKILL 提供了一系列交互函數(shù)能讓腳本具備簡(jiǎn)單的“界面感”。最基礎(chǔ)的是回顯函數(shù)printf格式化輸出到當(dāng)前窗口println輸出一行自動(dòng)加換行hiDisplayMessage在圖形界面彈出一段提示更進(jìn)一步你可以用axlUIPopupAllegro或hiDisplayFormVirtuoso創(chuàng)建簡(jiǎn)單的彈窗。對(duì)于大多數(shù)內(nèi)部自動(dòng)化腳本我不建議一上來(lái)就設(shè)計(jì)龐大的圖形界面先用一個(gè)彈窗提示結(jié)果就夠了后面有需要再迭代。菜單注冊(cè)也是交互增強(qiáng)的關(guān)鍵。Allegro 里可以通過(guò)axlCmdRegister把 SKILL 函數(shù)注冊(cè)成命令這樣用戶在命令欄輸入一個(gè)自定義單詞就能執(zhí)行腳本procedure( myCheck( ) printf(運(yùn)行檢查...\n) ) axlCmdRegister(myCheck myCheck)注冊(cè)之后在 Allegro 命令窗口直接輸入myCheck就等價(jià)于調(diào)用這個(gè)函數(shù)。Virtuoso 則可以通過(guò)hiRegMenu往菜單欄掛按鈕方式雖不同思路一致。3.4 如何高效查閱官方函數(shù)參考Cadence 自帶的 SKILL 函數(shù)參考文檔非常厚重第一次看的人容易懵。我的經(jīng)驗(yàn)是遇到不確定的函數(shù)時(shí)在 SKILL 交互窗口使用在線幫助函數(shù)比翻 PDF 快得多。常見的幫助函數(shù)包括describe(axlDBGetDesign)查看函數(shù)說(shuō)明? axlDBGetDesign查看屬性幫助部分環(huán)境支持getSkillPath()查看搜索路徑搜索資料時(shí)要留一個(gè)心眼網(wǎng)絡(luò)上的 SKILL 代碼風(fēng)格差異很大有些老腳本用了不少已經(jīng)被替代的舊函數(shù)跑起來(lái)會(huì)報(bào) deprecated 警告。優(yōu)先以你實(shí)際安裝版本的官方文檔為準(zhǔn)網(wǎng)上的代碼只做參考思路不要無(wú)腦照抄。4. 實(shí)戰(zhàn)拆解用 80 行腳本完成元件位號(hào)與封裝體檢4.1 先別寫代碼先拆需求很多初學(xué)者拿到需求就開寫結(jié)果寫到一半發(fā)現(xiàn)邏輯漏洞百出。正確的做法是先快速拆解任務(wù)邊界。我以一個(gè)真實(shí)場(chǎng)景為例PCB 設(shè)計(jì)交付前需要檢查所有元件是否有位號(hào)、封裝是否缺失、坐標(biāo)是否超出板框范圍。這個(gè)任務(wù)如果靠人工翻版圖看屬性幾千個(gè)元件看到懷疑人生用 SKILL 做邏輯其實(shí)很清晰獲取當(dāng)前設(shè)計(jì)對(duì)象遍歷所有元件逐個(gè)讀取位號(hào)、封裝、坐標(biāo)屬性按規(guī)則判斷是否異常把異常信息收集到列表里生成報(bào)告文件并用彈窗提示摘要這五步不涉及任何復(fù)雜的算法核心就是對(duì)“元件對(duì)象列表”的一次過(guò)濾和統(tǒng)計(jì)。我刻意選擇這個(gè)例子是想說(shuō)明一個(gè)最重要的觀點(diǎn)任何自動(dòng)化腳本的第一產(chǎn)出物不是代碼而是邏輯流程圖。你先把步驟畫出來(lái)在紙上或文檔里再動(dòng)手會(huì)順利很多。4.2 獲取設(shè)計(jì)數(shù)據(jù)和元件清單在 Allegro 環(huán)境下當(dāng)前打開的設(shè)計(jì)可以通過(guò)axlDBGetDesign()獲取。拿到 design 對(duì)象后再通過(guò)design~components就能得到元件列表。design axlDBGetDesign() components design~components printf(當(dāng)前設(shè)計(jì)共 %d 個(gè)元件\n length(components))如果你的環(huán)境里components字段名不一致用design~?查看一下當(dāng)前設(shè)計(jì)對(duì)象有哪些可訪問(wèn)屬性再替換即可。4.3 遍歷元件并執(zhí)行三項(xiàng)檢查位號(hào)檢查最直接判斷comp~refdes是否為空即可。封裝檢查要稍微小心因?yàn)橛械脑热鐪y(cè)試點(diǎn)、安裝孔可能本身就不需要封裝這時(shí)需要額外的排除規(guī)則。坐標(biāo)檢查則要和板框范圍比較。下面是一段核心遍歷代碼foreach(comp components when( comp~refdes nil problems cons(發(fā)現(xiàn)無(wú)位號(hào)元件 problems) ) when( comp~package nil problems cons(sprintf(nil 元件 %s 缺少封裝 comp~refdes) problems) ) when( comp~x 0 || comp~x boardWidth problems cons(sprintf(nil 元件 %s 超出板框 X 范圍 comp~refdes) problems) ) )這里我用cons把問(wèn)題字符串不斷加到列表頭部。之所以用cons而不是append是因?yàn)閏ons是 O(1) 操作append在循環(huán)里反復(fù)調(diào)用會(huì)不斷創(chuàng)建新列表性能差一個(gè)數(shù)量級(jí)。遍歷結(jié)束后再用reverse把列表翻回來(lái)保證報(bào)告里的順序和元件順序一致。提示sprintf(nil 格式串 arg...)這種寫法會(huì)把格式化結(jié)果作為返回值直接交給變量或列表在需要拼接報(bào)告行時(shí)非常常用。注意sprintf的第一個(gè)參數(shù)傳nil在大多數(shù) SKILL 版本里返回生成的字符串但個(gè)別版本行為略有差異遇到問(wèn)題就改成先聲明一個(gè)變量再接收。4.4 生成報(bào)告文件并彈窗提示問(wèn)題收集完接下來(lái)是落盤和提示。文件操作在 SKILL 里非常直觀用outfile打開一個(gè)輸出流用fprintf寫入內(nèi)容最后close關(guān)閉。outPort outfile(reportFile) fprintf(outPort 元件體檢報(bào)告\n) fprintf(outPort 檢查時(shí)間%s\n getCurrentTime()) fprintf(outPort 共檢查 %d 個(gè)元件發(fā)現(xiàn)問(wèn)題 %d 項(xiàng)\n\n length(components) length(problems)) foreach(prob problems fprintf(outPort %s\n prob) ) close(outPort)這一步有幾個(gè)容易忽略的細(xì)節(jié)輸出路徑所在目錄要存在否則outfile會(huì)失敗寫完一定要close否則文件內(nèi)容可能沒有真正刷新到磁盤報(bào)告里最好帶時(shí)間戳和統(tǒng)計(jì)總數(shù)這在多人協(xié)作時(shí)能快速確認(rèn)數(shù)據(jù)是否最新最后用axlUIPopup彈一個(gè)摘要提示用戶體驗(yàn)立刻提升if( problems then axlUIPopup(sprintf(nil 發(fā)現(xiàn) %d 個(gè)問(wèn)題詳見 %s length(problems) reportFile)) else axlUIPopup(檢查通過(guò)未發(fā)現(xiàn)問(wèn)題) )4.5 完整腳本示例與注冊(cè)命令把所有片段拼起來(lái)加上頭注釋和命令注冊(cè)就是一個(gè)完整可用的工具腳本; 元件體檢腳本 ; 適用Allegro / PCB Editor ; 用法load 本文件后在命令窗口輸入 ckdesign procedure( ckDesign( optional (reportFile /tmp/design_check.txt) ) let( (design components problems outPort total) problems nil design axlDBGetDesign() when( design nil error(未獲取到當(dāng)前設(shè)計(jì)對(duì)象請(qǐng)先打開PCB設(shè)計(jì)\n) ) components design~components total length(components) ; 逐項(xiàng)檢查 foreach(comp components when( comp~refdes nil problems cons(發(fā)現(xiàn)無(wú)位號(hào)元件 problems) ) when( comp~package nil problems cons(sprintf(nil 元件 %s 缺少封裝 comp~refdes) problems) ) when( comp~x 0 || comp~x 1000 || comp~y 0 || comp~y 1000 problems cons(sprintf(nil 元件 %s 坐標(biāo)超出預(yù)設(shè)范圍(%.2f, %.2f) comp~refdes comp~x comp~y) problems) ) ) problems reverse(problems) ; 寫報(bào)告 outPort outfile(reportFile) fprintf(outPort 元件體檢報(bào)告\n) fprintf(outPort 檢查對(duì)象%s\n design~name) fprintf(outPort 共檢查 %d 個(gè)元件發(fā)現(xiàn)問(wèn)題 %d 項(xiàng)\n total length(problems)) foreach(prob problems fprintf(outPort %s\n prob) ) close(outPort) ; 彈窗提示 if( length(problems) 0 then axlUIPopup(sprintf(nil 發(fā)現(xiàn) %d 個(gè)問(wèn)題詳見 %s length(problems) reportFile)) else axlUIPopup(sprintf(nil %d 個(gè)元件檢查通過(guò) total)) ) ) ) axlCmdRegister(ckdesign ckDesign)從“函數(shù)列表”到“自動(dòng)化腳本”本質(zhì)上就是這一步先確定你要操作的對(duì)象類型然后去函數(shù)清單里找對(duì)應(yīng)的訪問(wèn)函數(shù)和屬性再按業(yè)務(wù)邏輯用列表函數(shù)把它們組織起來(lái)。這個(gè)腳本雖然不算長(zhǎng)但已經(jīng)具備了一個(gè)生產(chǎn)級(jí)工具的基本要素參數(shù)默認(rèn)值、錯(cuò)誤檢查、日志輸出、用戶反饋、命令注冊(cè)。5. 從“能干”到“高效”腳本工程化改造5.1 把腳本從一次性“臨時(shí)文件”變成復(fù)用工具剛學(xué)會(huì) SKILL 時(shí)很多人寫的腳本是“一次性”的需求來(lái)了臨時(shí)寫一個(gè)幾十行的tmp1.il跑完就扔。這種方式的痛點(diǎn)是三個(gè)月后同樣的需求再來(lái)你發(fā)現(xiàn)自己完全不記得當(dāng)初的邏輯只能重新寫一遍。我建議從第一次寫正式腳本時(shí)就做一個(gè)動(dòng)作把常用功能封裝成procedure并把文件名、函數(shù)名、用途都寫清楚。前面的ckDesign就是一個(gè)例子。你甚至可以往這個(gè)函數(shù)里加一個(gè)optional參數(shù)讓它可以支持不同的板框范圍或報(bào)告路徑這樣它就能在不同項(xiàng)目中復(fù)用。5.2 參數(shù)化設(shè)計(jì)與默認(rèn)值處理SKILL 的procedure支持三種參數(shù)必選參數(shù)、可選參數(shù)optional、關(guān)鍵字參數(shù)key。設(shè)計(jì)一個(gè)可復(fù)用函數(shù)時(shí)優(yōu)先考慮哪些值應(yīng)該暴露成參數(shù)。例如procedure( ckDesign( key (boardWidth 1000) (boardHeight 1000) (reportFile /tmp/design_check.txt) ) let( (...) ... ) )調(diào)用時(shí)的寫法會(huì)變成ckDesign(?boardWidth 2000 ?reportFile ./report.txt)key參數(shù)的優(yōu)點(diǎn)在于調(diào)用時(shí)不需要記住參數(shù)順序代碼可讀性也更好。別把默認(rèn)值寫死在業(yè)務(wù)邏輯里這是腳本工程化的第一課。5.3 注重性能減少重復(fù)查詢和路徑遍歷SKILL 腳本處理幾百個(gè)對(duì)象時(shí)性能根本不是問(wèn)題但一旦碰到上萬(wàn)級(jí)的 instance 或 shape寫法和寫法之間的差距就會(huì)非常明顯。我踩過(guò)的最典型的性能坑是在循環(huán)里反復(fù)調(diào)用dbOpen或反復(fù)訪問(wèn)同一個(gè)對(duì)象屬性導(dǎo)致每次循環(huán)都觸發(fā)一次數(shù)據(jù)查詢最終把一個(gè)本該幾秒完成的腳本拖成幾分鐘。優(yōu)化策略其實(shí)就三條循環(huán)外緩存對(duì)象引用能在foreach外面取到的對(duì)象絕不在循環(huán)里重復(fù)取避免頻繁拼接大字符串反復(fù)用strcat拼接一個(gè)幾千行的報(bào)告性能極差改用列表收集最后一次性buildString或逐行fprintf能用setof遍歷就用setof篩選邏輯優(yōu)先用聲明式寫法而不是手寫foreachwhen再加cons下面這段對(duì)比很直觀; 低效寫法每次判斷都查一次屬性鏈 foreach(inst cellView~instances when( inst~cellName INV invList cons(inst invList) ) ) ; 高效寫法聲明式篩選語(yǔ)義也更清晰 invList setof(inst cellView~instances inst~cellName INV)5.4 錯(cuò)誤恢復(fù)與事務(wù)提交還有個(gè)容易被忽視的問(wèn)題腳本運(yùn)行到一半報(bào)錯(cuò)設(shè)計(jì)數(shù)據(jù)庫(kù)可能處于“半改動(dòng)”狀態(tài)。在 Virtuoso 里很多dbCreate*操作必須顯式調(diào)用dbCommit或依賴特定的事務(wù)機(jī)制在 Allegro 里修改數(shù)據(jù)庫(kù)后要確保設(shè)計(jì)被正確保存。我寫腳本的習(xí)慣是所有可能失敗的輸入先用when或if做保護(hù)判斷對(duì)“只讀類”的檢查腳本不修改數(shù)據(jù)庫(kù)從源頭規(guī)避風(fēng)險(xiǎn)對(duì)“寫操作類”腳本跑完立刻驗(yàn)證關(guān)鍵對(duì)象是否存在再?zèng)Q定是否保存關(guān)鍵步驟之間加printf日志這樣即使中途掛了也能定位到在哪一步掛的6. 翻車記錄與經(jīng)驗(yàn)補(bǔ)丁SKILL 開發(fā)的真實(shí)代價(jià)6.1 改了數(shù)據(jù)庫(kù)卻沒生效事務(wù)和保存的坑我在 Virtuoso 里寫第一個(gè)自動(dòng)創(chuàng)建圖形的腳本時(shí)跑完沒有任何報(bào)錯(cuò)對(duì)象卻始終看不到。查了半天才發(fā)現(xiàn)創(chuàng)建的對(duì)象停在內(nèi)存里沒有提交到數(shù)據(jù)庫(kù)。類似的問(wèn)題在 Allegro 里也會(huì)出現(xiàn)修改了元件屬性replay 結(jié)束一看界面還是老樣子。建議寫寫操作腳本時(shí)把“提交/保存”步驟當(dāng)成一個(gè)獨(dú)立的驗(yàn)證節(jié)點(diǎn)。完成操作后主動(dòng)執(zhí)行保存或同步操作并確認(rèn)這一步真的在腳本流程里被執(zhí)行到了。另外有些版本的 Allegro 在命令行模式下操作完需要手動(dòng)刷新視圖腳本里也可以主動(dòng)執(zhí)行redraw或類似命令讓界面同步。6.2 整數(shù)與浮點(diǎn)數(shù)混用的隱性錯(cuò)誤SKILL 對(duì)數(shù)字類型的處理相對(duì)寬松但并不是沒有坑。尤其是坐標(biāo)計(jì)算如果兩個(gè)整數(shù)相除被當(dāng)作浮點(diǎn)某個(gè)版本的語(yǔ)義可能和你的預(yù)期不一致坐標(biāo)精確到小數(shù)點(diǎn)后幾位時(shí)用整數(shù)計(jì)算和用浮點(diǎn)計(jì)算的結(jié)果可能完全不同。我的建議是涉及坐標(biāo)、長(zhǎng)度、角度等物理量的運(yùn)算一開始就把所有數(shù)值顯式轉(zhuǎn)換成浮點(diǎn)x float(comp~x)。不要依賴 SKILL 的自動(dòng)類型提升顯式轉(zhuǎn)換能讓行為可預(yù)期。6.3 全局變量污染與作用域泄漏SKILL 的變量作用域設(shè)計(jì)很自由自由到容易出事。如果你在腳本頂層寫了一個(gè)problems nil然后在某個(gè)procedure里又直接用了problems這個(gè)變量就會(huì)在全局空間里被共享。多個(gè)腳本加載時(shí)很容易出現(xiàn)“這個(gè)腳本改了那個(gè)腳本的變量”的詭異問(wèn)題。最安全的做法是所有臨時(shí)變量都放進(jìn)let或prog的局部作用域里。procedure的參數(shù)本身就是局部的函數(shù)內(nèi)部再套一個(gè)let包住中間變量基本就能杜絕變量污染。我在前面示例代碼里已經(jīng)用了let包裹這不是炫技是真的被坑怕了。6.4 異常處理不夠健壯導(dǎo)致半途崩潰SKILL 有errset和error機(jī)制可以捕獲運(yùn)行時(shí)異常errset( ; 可能出錯(cuò)的代碼 load(/path/to/some.il) )errset在代碼出錯(cuò)時(shí)不會(huì)中斷整個(gè)腳本而是把錯(cuò)誤信息返回。這在批量處理多個(gè)文件時(shí)很有用一個(gè)文件壞了跳過(guò)它繼續(xù)處理下一個(gè)。我自己在寫批量腳本時(shí)幾乎必用errset它能把腳本的“單點(diǎn)失敗”變成“單點(diǎn)告警”。6.5 命令行注冊(cè)沖突用axlCmdRegister注冊(cè)自定義命令時(shí)一定要確認(rèn)命令名沒有和工具內(nèi)置命令沖突。我遇到過(guò)注冊(cè)一個(gè)叫update的命令結(jié)果某個(gè)操作觸發(fā)了內(nèi)置同名命令行為完全不可控。自定義命令最好加一個(gè)獨(dú)特的前綴比如公司縮寫或你的名字縮寫像qaUpdate、ckdesign這樣。6.6 交付給別人的腳本要留“逃生艙”最后一條建議和語(yǔ)法無(wú)關(guān)但很重要如果你寫的腳本要交給團(tuán)隊(duì)里其他人用一定要讓腳本在最開始、最容易出錯(cuò)的地方給出明確提示。比如判斷當(dāng)前有沒有打開設(shè)計(jì)、文件路徑是否存在、對(duì)象列表是否為空。別讓同事拿到腳本后面對(duì)一個(gè)莫名其妙的nil報(bào)錯(cuò)還要反過(guò)來(lái)找你排查。我通常會(huì)在腳本頭部加一段環(huán)境自檢when( axlDBGetDesign() nil error(請(qǐng)先打開需要檢查的 PCB 設(shè)計(jì)文件\n) )這一句看似多余實(shí)際能節(jié)省所有使用者的理解成本。7. 最后分享一點(diǎn)個(gè)人體會(huì)從函數(shù)列表到自動(dòng)化腳本真正質(zhì)變的節(jié)點(diǎn)不是“記住了多少函數(shù)”而是“看到需求后能穩(wěn)定地拆出數(shù)據(jù)流”。我剛?cè)腴T時(shí)總喜歡到處收集別人的腳本代碼后來(lái)發(fā)現(xiàn)最有用的還是自己翻官方文檔、在交互窗口里一個(gè)個(gè)試函數(shù)、拿真實(shí)設(shè)計(jì)練手。SKILL 的學(xué)習(xí)曲線初期稍陡但只要過(guò)了“列表操作 屬性訪問(wèn) 流程控制”這三關(guān)你就能應(yīng)付絕大多數(shù)日常自動(dòng)化需求。我自己現(xiàn)在的工作習(xí)慣是任何操作如果在界面上需要重復(fù)超過(guò)三次就停下來(lái)想想能不能用 SKILL 解決。哪怕第一次寫腳本花的時(shí)間比手動(dòng)操作還久但它的價(jià)值會(huì)在第二次、第三次使用時(shí)迅速體現(xiàn)出來(lái)。工具鏈里最有價(jià)值的不是某個(gè)菜單項(xiàng)而是你能不能把幾個(gè)函數(shù)列表里的碎片拼成你自己的“時(shí)間機(jī)器”。希望你讀完這篇文章后也能動(dòng)手寫一個(gè)屬于自己的.il腳本然后把省下來(lái)的時(shí)間花在真正需要設(shè)計(jì)師判斷力的事情上。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
国产久久久久影院老熟女| 久久超碰、| 中文字幕在在线观看网站| 久久东京伊人一本到鬼色| 91青青在线视频| 久久久精久久久| 人人射人人操人人摸| 久久久涩| AV久日| 九九九九九九九精品视频| 蜜臀AV网站| 麻豆国产97在线| 色五月激情AV在线| 亚洲少妇在线影音| 精品国产网站| 亚洲欲色9532548967一区| 91快色色色色色| 玖草在线视频| 免费AV中文网在线观看| 日韩免费福利在线观看| 国产又色又粗又黄又爽| 欧美精品宗合| 天天综合网网欲色| 久操操AV电影| 两女互慰AV高潮喷水在线观看| 久久久一区二区三区麻豆| 色呦色呦色精品| 少妇同性| 99re只有精品| 不卡码视频| 国产有码一区| 骚人妻少妇视频| 日本顶级天天操狠狠操夜夜操中文字幕| 久久免费中文字幕在线观看| 清纯唯美激情四射| 91精品电影18| 日韩欧美成人大香蕉| 天天操夜夜操| 夜夜操2028| 国产精品国产拍高清AV| 蜜臀av在线播放一区二区三区| 国产美女高潮叫床视频| 精品国产肉丝袜在线拍国语| 美女黄页| 91强在线播放| 老熟女阿 国产91| 国产91 丝袜在线播放 | 91精品国产91久久久久久久久久久久| 午夜福利 成人 91| 高潮9999外国| 欧美夜夜| 欧美日韩国产三级黄色| 日本欧美国内在线| 97硬碰| 性欧美天天| 中国东北熟女老太婆内谢| 八戒午夜福利理论片| 75大香蕉| 97精品视频在线播放| 中文子幕一二三| 成人久久久精品| 噜噜噜亚洲精| 国产成人精品必看| 色婷网| 亚洲欧美精品91| 久草综合京东| 呻吟 欧美 日本 中出| 久久久久久久综合,国产| 9 1超碰九色| 亚洲丝袜在线观看| 91在线精品一区二区三区| 涩涩这里只有精品视频| 久热大香蕉| 亚洲综合888| 成人精品一区二区三区| 后入国产| 国产亚州高清国产拍精| 天天操狠狠日夜夜干超碰撸com视频在线观看| 蜜臀av一区二区三区免费观看| oumeisetu综合| 欧美婷婷久久| 99操逼| 国产成人自拍视频视频| 精品久久久av| 热G综合热G中文| 国产欧美在线观看免费观看| 九九热九九| 国产精品久久久蜜臀| 91无码人妻| 精品对白久久不卡| 亚洲欧美经典一区二区| 国产又粗又大硬免费色网视频| 国产精品第一区第一页| 99热在线观看| 亚洲麻豆18发?| 淫荡少妇免费| 素人美腿视频网站| 91麻豆天美国产欧美高潮| 日韩欧美日韩| 亚洲国产欧美中文永久| 日本精品一区二区三| 在线视频 亚洲精品| 乱欲一区二区| 欧洲亚洲人妻无码中字久久三区四区| 久久久偷拍| av无码精品久久久久| 玖玖爱综合| 97在线日韩中文字幕| 最近2018中文字幕在线高清第一页| 日韩激情啪啪| 国产精品动态一区二区三区四四| 国产久久成人| 91性高| 囯戸精品高潮呻吟旡码| 屌妞视频久久久久久久| 无码免费精品高清| 操淫穴亚洲五月丁香 | 91n免费处女| 酒色综合网| 视频分类 国内精品| 欧美色66| 亚洲无码免费看| 久久一二三四五六七八九区区| 97超碰人妻| 久久久久久久一级黄色打同平台| 怡红院成人视频| 这里都是精品在线观看| 熟妇女伦乱视频视频| 伊人影院综合是一个与深夜成人在线| 欧美亚洲高清不卡| 91成人久久 | 99re超碰| 92性色国产午夜福利在线661 | 在线国产一区二区av| 国产最火爆久久国产网站网站 | 国产精品电影大全| 天天舔天天 | 婷婷丁香五月天亚洲天堂网| 天美麻豆黄色录像| 伊人五月天| 九九九九热只有精品| 久久五月视频| 五月天久久综合网| 91亚洲欧美综合高清在线 | 欧美 色 亚洲| 高清不卡一二三区视频......| 黑人娇小av在线播放| 一个国产在线综合网站| 中文字幕高清20页视频| 国语对白露脸XXXXXX| 大香蕉在线视频重口味毛片在线| 国模不卡| 天天日天天干少妇日| 91最新综合| 秋霞无码av鲁丝片一区| 亚洲色91| 熟女熟妇伦久久影院毛片一区二区| 欧美系列在线一区二区| 日韩欧美传媒一区国产| 级品肉射| 久草精品热视| 午夜黄色免费在线观看| 性久久久| 亚洲资源站| 麻豆一区二区三区精品| 天天综合在线4| 无码不卡八戒| 91中文字幕在线观看| 久久久久久午夜男人的天堂| 日本一区二区三区午夜观看| 夜夜精品视频一区二区| 青女在线| 亚洲欧美中文日韩视频中国语| 免费97视频| 色牛牛AV| 亚洲一区二区精品福利| 青草一区二区| 91美女色视频亚洲| 俺去也婷婷| 欧美大香蕉久| 加勒比海人人操超碰在线| 男人的天堂,欧美亚洲另类国产日韩,日本高清一区二区 | 超碰人妻中文在线| 青青草字幕AV| 久久久久久中文字幕中文字幕最新| 久久透逼视频| 日本男人天堂| 加勒比性爱成人在线| 一区二区精品更新提醒| 五月婷婷激情综合| 久久一区二区三区入口| 飘花国产午夜精品不卡| 九七色图| 欧美亚洲天天| 蜜乳av一区二区三区| 久久a久久| 五月婷婷综合网| 国产自偷自拍一区| 亚洲 一区二区 自拍| 超碰91在线| 任我爽在线视频免费观看 | 操一操摸一摸| 日韩一级二级三级| 97久久超碰日韩精品| 一区| 蜜桃中文字日产乱幕4区| 强奸乱伦AV一天堂网| 最新日本中文字幕| 欧美黄业| 天天日夜干| 国产九九九九九九| 成人精品水蜜桃久久久久久久| 中文字幕-区二区三区四区视频中国| 婷婷五月综合在线| 爱av免费| 国产亚洲福利第一页丝袜| 免费视频观看60秒| 插插综合网天天影视网| 亚洲日本大香蕉1| 国产1727欧美| 青青三级视频| 蜜臀一二三| 日本超碰色精品| 熟女网站最新| 欧美在线|亚洲| 蜜臀久久精品久久久久视频| 乱操9999| 东京热大香蕉| 午夜乱轮操逼视频免费看| 亚洲欧美色图小说| 性影在线视频| 人妻熟女av国产网站| 日韩精品99999| 久久99热这里只频精品6学生| 亚洲欧洲网站免费观看| 综合色图亚洲欧美| 午夜情侣自拍网站| 欧美 综合 亚洲| 国产av色网| 精品无码一区二区三区| 一二三区精品视频| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 午夜传煤十二区精品| 欧洲一区二区| 999综合网| 中国农村熟妇毛片视频| 丰满岳乱妇一区二区三区| 成人网站 免费观看| 五月天大香蕉| 综合激情97 | 亚洲91射| 麻豆久久一区二区三区| 很黄很色的视频在线观看| 亚洲黄色网址视频| 精品久久一区二区三区四区五区| 天堂资源欧美| 国产丝袜啪啪| 中文字幕精品一区欧美| 国产成人精品日本亚洲语言| 少妇诱惑视频| 91美女国产在线| 91视频伊人| 九九久久一区二区伦理| 91色碰| 亚洲欧洲无码一区夜| 国产嫩草精品A88AV| 亚洲天堂男人天堂| 亚州AV无码国产精品| 在线人人人人人人精品超| 亚洲 图片 综合91| 日本中文字幕不卡视频| 久久久久久久| 91精品久久久| 中文字幕精品一区二区精品| 四虎免费看黄| 熟女乱3伦999| 久久中文字幕一区不卡| 日本高清电影欧美色图| 男人天堂无码| 无色无码| 国产精品美女久久久久AⅤ国产馆| 亚洲精品无码少妇久久| 久草热制服丝袜在线观看 | 精品久久99| 精品丰满熟妇人妻一区| 日韩精品国产一区二区| 亚洲区限制级| 國產尤物AV尤物在線觀看| 密臀在线免费观看| 亚洲毛片久久| 国产三级电影免费观看| 亚洲限制级| 欧美一二三| 激情综合色| 91网站在线播放| 国产精品久久久久中文字幕| 免费看污网址| 久久五月天婷婷丁香中文字幕| 鲁鲁色综合网| 日夜伊人网| 影音先锋中文字幕日本好一区二区| 天天综合香 ld视频| 人人操人人摸人人骑| 五月丁香啪啪啪| 久久噜噜噜精品国产亚洲综合| 欧美综合国产精品久久丁香| 校园春色欧美色图| 91天天看| 欧美日韩婷婷中文| 国产一级不卡在线观看| 欧美亚洲韩国视频十五区| 色欲蜜臀AV| 色噜噜人妻丝袜AV资源| 中文字幕精品免费一区二区| 91麻豆天美国产| 婷婷精品视频| 国产日产欧产美韩系列麻豆免费| www网站黄| 成人AV在线网站| 日韩性爱视频免费在线| 日本精品五区| 9 7超碰在线免费观看| 97在线观看播放视频| 久久精品人妻一区二区| 26uuu国产免费观看| 男人的天堂三级| 亚洲国产日韩欧美熟妇在线| 美女91av| 久久久18| 人人看人人插| 精品二区三四区五电影 | 亚洲综合欧美| 成人一区二区三区四区| 日本www操操操| 超碰色图| 日韩不卡一二三四| 丁香成人五月天| 久久六六| 久久久久女教师免费一区| 欧美日韩色图片| 色欲天天婬色婬香WWW夜色| 爽爽爽免费视频| 蜜乳av首页| 日本精品一区二区三区四区的功能| 久久一区,青青青青草视频在线播放| 91被操| 少妇内射视频| 国内91熟女人妻丝袜天天精品视频在线| 91欧美在线| 成人日本精品九区| 吻戏激情性巴克| 国产无码高清操逼视频| 久久精品店| 日本999精品| 丁香五月激情综合| 欧美一级特黄淫片在线观看| 久久精品久久久久久久| 中文字幕av一区二区三区人妻少妇 | 自拍偷拍国产欧美日韩韩| 极品白嫩福利在线| 久久女婷| 神马久久久久久伦理片| 偷拍亚洲| 亚洲有薄码区久久在线一区| 欧美色图私拍91| 亚洲国产激情国产av| 国内伊人久久久久久网站视频| 青青草久草AV| 亚洲色图加勒比| 99久热| 啪啪资源网| 97超碰站| 天天干18禁| 日韩无码久久熟女一级片| 第二页中文字幕| 久久98| 激情五月天社区| 中文字幕黄片在线| 超碰在线欧美性爱激情| 神马久久久久| 蜜臀网 一区| 国产女主播视频在线观看| 麻豆福利视频导航| 国产日韩精品一区二区三区| 日韩另类色图| 国产玖玖| 在线 制服丝袜中出 人妻| 亚洲AV成人在线| 亚洲欧美日韩精品久| 福利社区午夜一区二区| {男男暴菊gay无套网站| 黄色免费一级在线毛片| 激情综合网激情综合| 九九综合九九综合| 精品美女久久久久| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 性爱免费视频成人| 天天草夜夜草高潮片| 国产午夜精品理论片一二三区区| 熟女一区二区三区四区| 本道在线| 亚洲国产美女久久久久| 亚洲双插| 四虎精品一区二区| 久久黄人人爽视频| 久久男人的天堂| 久久久久久久97| 九九九九九九免费视频| 大香蕉中文网| 色欧美亚洲| 色臀AV| 91干熟女| 亚洲丝袜二区在线| 国内一级精品| 国产精品福利视频播放| 777琪琪午夜免费A片| 大香蕉免费3| 内射小黄片| 国产精品无码av在线| 国产黄色 A 片免费看| 嫩草一区二区在线观看| 五月丁香综合| 嗯阿好爽好紧| x97av| 国产超碰97| 色老大| 日本人妻最新在线中| 91精品国| 成人麻豆av电影网站| 国产av又色又爽又黄| 午夜国产成人福利视频| 无码99| 精品人妻一区二区三区夜夜| 超碰97日韩| 2017人人操,人人摸| 欧美性天天影视| 日韩AV一区二区三区三州三州| 91 综合 色| 外国免费性情大片| 欧美日韩日产免费网站看| 日本狂喷奶水在线播放212| 五月天激情小说| 欧美熟妇操操视频| 天天综合中文字幕 91| 豆花视频操逼网址| 久久99操天天日| 女生自91网站| 五月天亚洲色图| 亚洲天堂7777| 日韩中文字幕熟妇人妻| 国产伊人精品在线| 伦伦成年午夜免费视频| 99激情| 久久精品成人一区二区三区蜜臀| 你懂的在线观看区国产| 天天综合网站| 亚洲欧美91√| 男人天堂网站| 91丝袜美女国产| 欧美成人国产精品| 操b在线观看| 熟女人妻av在线资源,黄色的资源 粉嫩国产精品久久粉嫩 | 五月丁香婷婷综合网| 蜜桃久久一区二区三区| 桑老女人九区| 色yeye成人免费视频| 色五月天AV| 亚洲色人| 国产怡红院| 亚洲图片欧美色| 亚洲 欧美 91| 天天干嫩逼网| 日韩在线视频1234| 婷婷色香伊人| 四虎影视在线| 日本中文熟女视频| 欧美熟妇视频| 91操熟女| 精品无码一区二区| 国产在线综合网| 97综合在线观看| 色欧美亚洲| 激情色播| 91欧美综合| 综合熟女| 五月丁香六月综合缴清无码 | 思思热在线| 四虎884| 日韩性爱网址| 欧美少妇高潮久久91| 日本成人电影资源网| 欧美国产一区二区三区麻豆传媒| 一级岛国大片| 东方亚洲在线操逼天堂| 成人5码视频| 亚洲棕合电彰| 人人摸人人叼| 久久国产精品m码| 99热精品在线| 亚洲脚交| 毛片一区二区| 欧美日韩人人精品| 内射老妇BBWX0C0CK| 欧美精品久久96人妻无码| 无码直播久久久| 蜜臀va69| 日韩人妻大香蕉| 久久78| 久久99精品国产| 日韩性爱高清免费视频| 91中出视频| 91九色丨国产丨爆乳| 日韩熟女乱伦中出| 超碰97综合网| 少妇蜜汁| 麻豆这里只有精品| 深爱伊人影院| 精品 码产区一区二-1080P高清在线www-B029AV| 五月天亚洲网| 自慰白浆在线观看| 国产精品农村妇女精品| 人妻少妇色综合| 婷婷色色五月天福利| 尤物视频网 刘玥| 麻豆人妻精品一区二区| 亚州操逼图| 大香蕉淫人| 美女AV一区二区| 99综合视频一体| 亚洲字幕一区二区| 超碰97丝袜| 日韩欧美偷拍美女视频| 熟妇在线视频一区二区| 少妇人妻太紧太深av| 91国产丝袜白虎| 97超碰无码网| 亚洲色诱惑| 国产狂喷潮在线精品| 精品熟妇视频一区二区| 麻豆60秒| 婷婷尹人大香蕉免费| 欧美精品成人在线播放| 成人久久久| 综合大香蕉美。| 淫乱图区 | 97天天弄| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 久久 国产 无码| 老熟女阿 国产91| 精品久久大胆人体| 97一区二区蜜臀| 七久久久| 日韩在线视频1234| 婷婷久草| 亚洲色图亚洲无码强奸乱伦| 国产亚洲精品激情| 爱妃国产亚洲视频中文字幕| 在线亚洲 欧美 日本专区| 国产精品剧情| 国产农村妇女毛片精品久久| 2003天天干夜夜操| 伊人在线大香蕉二。| 国产精品电影推荐| 亚洲天堂自拍| 国产性刺激| 精品夜夜澡人妻无码| 久久久com| a片自拍直播视频| 国产亚洲色停停久久99精品91| 久久精品久久久久久久| 精人妻一区二区三区| 青青久久久| 91熟女视频网| 国产一区二区三区导航| 欧美一级特黄淫片在线观看| 三级激情网站| 嫩草影院性色| 丝袜熟女一区二区三区| 97操操| 人妻嗯啊啊在线播放| 操操啪| 日本精品一区三区| 久久男人的天堂国产| 国产精品视频电影| m欧洲一级午老| 我爱搞逼综合网| 超碰这里有精品| 激情婷婷丁香网| 亚洲国产精品无石码久久| 丰满熟女一区二区三区在线播放| 熟女人妻精品一区二区视频| 综合影院永久入口国产| 先锋色眉乱伦资源| 五月天激情小说网| 97视频在线免费看| 精品97久久综合| 東南亚性呦成人伦理资源在线视频| 久久久久大香青草精品综合| 欧美亚洲国产日本在线,久久精品国产| 亚洲青色欧美| 日韩青久久| 欧美在线啊啊| 人人弄人人摸| 92午夜免费福利视频| 在线无码操| 欧美拳交在线播放| 久久一二三四不卡 | 在线观看午夜婷婷久久久久清性观看| 亚洲交换| 亚洲在线网站| 久久精品国产免费观看99| 亚州色交| 欧美高潮| V A在线| 玖玖玖玖精品国产剧情| 亚洲av无线观看| 打av高清| 久久久久久人体| 日本性感人妻91| 人人看人人摸人人色| 91色黑人少妇| 96一区二区三区| 日韩AV无码网站| 日本片日本片祼观看网站在线看中文版网页在线看 | 精品久久久久综合无码| 97视频播放| 国产精品免费日韩| 日韩AV中文字幕电影| 欧美在线大香999| 九九精品无码专区免费| 天天综合网站| 欧美色图在线视频少妇| 美女91| 欧美午夜视频精品久久| 一区二区三区日韩欧美| 四季AV一区二区凹凸精品小说| 熟人人妻少妇精品久久| 欧美大香蕉同搞| 青青操在线亚洲视频观看欧美在线| 久久在肏| 婷婷深爱五月| 99re在线精品78| 99热在线观看| 艹我哪美一区无码| 97久久超碰日韩精品| 色五天伊人| 亚欧中文字幕在线视频| 青娱乐福利99| 日本九九久久99播| 自慰白浆在线观看| 久久色一区二区| 国产一级137片内射麻豆| 2020中文字幕| 欧美激情视频一区二区| 人妻熟女av国产网站| 久久中久文96| 国产网站在线播放| 成人黄页| 日本操逼视频导航| 成人综合网 欧美| av在线播放国产一区| 日日AV加勒比| 麻豆国产视频精品观看| 成人网欧美风情| 99久久久无码精品国产人| 九九成人精品| 久久免费99精品久久久久久| 99精品热| 多乙久久久久久| 懂色影视久久| 男人的天堂亚洲| 日本东京热久久久电影| 亚洲资源网| www.久久99| 免费a v| 欧美精品三区| 91久久久久久| 91精品国产91久久青草 | 天天射天天| 99久在线精品99re8a| 日韩卡一卡二卡三在线| 97中文字幕一区| 亚洲精品男人的天堂| 成人久久久| 色月天AV导航| 探花一区在线| 国产路线专区| 青青操少妇| 日韩欧美综合激情| 人妻精品一区二区| 天天摸夜夜摸| 日韩精品中文字幕一| 激情文学小说一区二区| 五月天春色激情网| 曰本人妻人人澡人人夹| 人人妻人人色一区二区三区| 日本久操视频| 国产福利av精彩对白| 亚洲高清欧美总合| 青娱乐大香蕉| 中文字幕在线高清男人的天堂 | 污色区网站| 久久熟女嫩草成人片免费| 日韩二级| 啊灬啊灬啊灬好深灬快高潮了动漫-国产字幕国产在线观看-B049AV | 99色在线| 欧美不卡二区| 欧美性爱第1 页| 青青草无码视频| 一二三啪啪专区| 日韩一性一交一A片俄罗斯 | 国产 亚洲 丝袜 制服| 少妇久久久久久| 久久亚洲色图中文字幕| 日本三级黄页| 午夜福利无毒不卡| 国产成人欧美精品在线| 国模久久在线| 少妇一区二区三区在线观看| 亚洲午夜免费狠狠干| 国产免a费看黄片在线| 97欧美日韩综合| 日韩精品操少妇| 男人的天堂成人的社区| 91色色色| 亚洲一欧洲中文字幕在线| 亚洲综合影院| 69一区二区| 97超碰超| 欧洲视频在线| 青青草一区二区高清无码视频| 激情五月天校园春色网| 91欧美美女日韩国产婷婷| 嗯阿好爽好紧| 25国产精品免费观看| 大香蕉五月天| 无码免费精品高清| 免费观看国产小粉嫩喷水精品午| 久久精品国产亚洲5555| 99999re| 久久成人网站| 欧美亚洲厕所精品偷拍91| 东北老女人的激情视频| 欧美亚男人的天堂| 蜜臀久久99精品久久久老,,| 欧美人人AAA| 91粉嫩萝控精品福利网站_精品影音先锋国 | 白嫩白嫩的午夜九久久久久久久久久久久成人剧场 | www.av在线视频| 日本精品无码三级网站| 亚洲精品一区二区精品| 狠狠久久手机视频精品| 男人的天堂2019| 91综合网| 操屄日韩| AV乱伦专区| 国产女人和拘做爰视频| 国产Av超碰| 蜜乳成人AV| 人妻啪| 欧美性爱视频免费一区一A| 欧美日韩色综合网| 九九综合九九综合| 婷婷久久五月综合激情| 女欧美一区二三区| 国产Av超碰| α√在线| 中文字幕在线免费观看视频| 色五月婷婷色| 久久久九97| 97视频在线观看高清资源| 日韩精品操少妇| 亚洲色图综合网| 青青三级视频| 精品国产乱码久久久久久久| 抽插亚洲无码| 亚洲视频中文一区| 无码天天操| 717影院理论午夜伦八戒| 9999免费精彩视频| 99性爱视频| 青青青国产| 一区二区三区无卡视频在线观看| 啊啊啊不要嗯嗯在线观看| 哈哈操电影| 久久久999| 日韩操啪| 玖玖爱免费观看视频| 久久九九综合| 这里只有精品视频| 久久鲁夜| 午夜精品久久久久久久久久久久久| 69天堂| 日本熟女中文字幕一区| 久久超碰久| 美美91成人国产精品欧美精品久久久久久久| 国产青青美女玩逼视频| 亚洲区小说| 97欧美综合| 久久无码成人| 青青草丝袜在线视频| 亚洲色图在线视频| 69久久久久久久久久久久久| 欧美性爱一区二区三区| 欧美人与动性人交a| 亚洲最大无码中文字幕网站| 67914在线精品观看| 尤物视频偷拍免费| 免费福利视频中文字幕| 五月婷久久| 亚洲色丰满少妇高潮| 日韩九九九| 欧美亚洲色图另类国产| 性色一线| 久久中文字幕女同性恋一区| 日韩欧美大力操| 99re9在线| 亚洲图片欧美另类综合免费视频大大香| 亚洲欧洲日本精品中文a∨| 伊人AAA| 東南亚性呦成人伦理资源在线视频| 欧美日韩黄片精品在线| 一区二区 韩日AV| 玖玖爱在线视频免费观看| 黄片无码在线制服| 玖玖爱综合| 淫荡网址| 另类在线| 97天天插| 國產尤物AV尤物在線觀看| 一道本东京热加勒比一区二区三区| 91精品操美女| 粉嫩粉嫩一区性色AV片| 国产精品丝袜久久亚洲不卡| 日本一区二区亚洲综合| 五月丁香亭亭| 激情欧美97| 操91| 97久久超碰日韩精品| 中文字幕jul-617人妻熟女| 成人精品欧洲亚洲| 国产日韩欧美亚洲精品95 | 欧美日韩精品久久久久东北老熟妇| 在线播放免费av福利片| 超碰激情808| 91bbb| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 人妻五十路在线| 日本成人A片网站| 日本加靬比网站发布页| 黄色操人| 2019天天操天天爽天天拍| 欧洲性爱无码区| 免费网色网站| 无码逼| 蜜桃狠狠色伊人亚洲综合| 人成午夜免费大片| 超碰人人干天天射| 激情丁香五月| 国产精品不卡一区二区三区av| 久久发布国产伦子伦精品| 97久久国产亚洲精品超碰热| 久久久久国产精品喷潮免费观看臀| 人人爽人人精品乱人伦AV| 性色av网站| 四季av一区二区凹凸精品小说| 免费综合亚洲中文| 亚州综合色| 第四色亚洲色图| 国产一区二区三区久久久精品| 国产风韵犹存熟妇三区| 在线播放成人网站| 国产精品诱惑| 91欧美性| 激情综合久久| 中文字幕丰满子伦无码专区在线视频最新| 欧美亚洲第1页| 加勒比日本在线| 久久精品 六十路 熟女 欧美| 久久不卡一区二区| 中文字幕一区二区在线日韩精品| 欧美色自拍| 韩国一级做A片免费的| 精…码一二三区| 国产极品久久久| 91精品久久久久五月天精品| 嗯嗯啊啊的视频| 欧美|91色综合| 亚洲高清无毛一区二区| 天美传媒精品久久视频| 国产少妇与亚洲av| 家庭乱伦国产| 欧美亚洲综合高清在线| 97碰碰日本乱偷人妻中文的| 九九黄色网| 探花一区二区三| 国产精品诱惑| 91高清日| 亚洲的天堂网| 欧美狠狠鲁| 91无码中出人妻视频| 国产91精品福利在线| 少妇综合网| 碰人碰碰人人开房人肉| 色优久久| aaaa黄片| 亚洲 小说 欧美 激情 另类| 超碰97伊人| 新精精品久久精品| 青青草九九九九九| 第一高清av中文字幕| 人妻无一区二区三区| 国产97色在线 | 亚洲| 美女干逼2| 四月丁香婷婷| 成人免费不卡在线视频| 牛牛操视频逼| 亚州一区二区| 中文字幕成人乱码熟女精品国50 | 伊人网一本| 欧美日韩精品久久| 日本天天吊| 国产乱伦一二三区| 亚洲欧美国产成人综合不卡| 无遮挡男女激烈动态图| 97干综合网| 日日A∨| 正在播放:深夜激情大战,自带黑丝袜全力输出骚穴 | 国产免费一区| 国产男女无套97| 网页导航五月天免费一二三区 | 日本熟人妻中文字幕在线|...久久国产精品-国产精品_日本一区二区三区中文字幕 | 久久久久久夜夜夜夜夜| 亚洲图片激情小说| 五月丁香婷婷色| 欧美顶级黄片AAAAA在线免费看 | 骚逼高潮久久精品| 丁香六月婷| 在线 制服丝袜中出 人妻| 激情久久久| 熟女突然公开看18禁影片| 国产精品久久久鸭无码的功能| 国产免a费看黄片在线| 无套内射人妻在线播放| 欧美色性爱| 午夜福利精品| 人妻激情偷乱视三区频一区二区| 中文字幕日本久久| 国产成人在线观看综合| 婷婷香蕉| 综合网,亚洲,欧美| 国模限制级电影| 美女91在线观看| av东京热男人的天堂| 操逼999| 97av,com| 漂亮人妻被强中文字幕hd| 日日躁狠狠躁天天躁精品| 九九九九九九九九九国产精品| 淫淫综合网| 91精品91久久久久77777俄罗斯老妇姓x| 麻豆成人AV| 一级黄色性爱裸体视频| 手机看片91人妻| 国产日韩区| 欧美日本天堂| 色网在线| 9久久久久久| 91久久久亚洲| 九九热久久99精品re| 少妇干B| 综合色图,成人综合网| 成人影 天天操 亚洲| 人妻在线大香蕉| 0755午夜福利视频| 91天天综合网| 亚洲欧综合另类无码一区| 久久五月综合| 日韩丝袜人妻AV| 久久影视二区三区行押| 精品午夜福利导航| 免费av在线播放二区| 狠狠色伊人亚洲综合网站色| 久久精品日韩| 中文字幕在线高清男人的天堂| 国产麻豆福利av在线播放| 激情av| 亚洲中文字幕有码视频一区二区三区| 青青草原人妻| 又黄又爽在线观看视频| 亚洲视频,小说| 久久久久99精品成人片蜜臀| 操逼无码操逼| 不卡啪啪视频| 青青草在线视频欧美| 久久这里只精品| 亚洲欧美日韩偷拍色图| 黄色视频特级毛片| 99re不伦| 大香蕉手机在线| 九月激情婷婷| 天美传媒国产原创中文字幕亚洲欧美另类| 久久男人网| 好吊色综合| 亚洲欧洲网站免费观看| 久久人妻视频| 久湿久久| 欧美日韩啪啪电影| 97超碰碰碰| 欧洲亚洲人人爽爽视频| 天天干天天舔| 97人肏| 99色在线| 在线欧美69V免费观看视频| 青青草吊丝| 欧美综合色| 你想操日本小逼吗| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 91麻豆天美| 91站街按摩店老熟女熟女| 成人老鸭窝人人在线视频| 精品对白久久不卡| 欧美色五月| 中文在线视频| 日本免费专区| 蜜臀久久久国产| 婷婷伊人五月| 欧美美女在线高潮999| 欧美日韩中文视频播放| 色哟哟511老熟女| 又摸又舔在线观看网站| 人人操人人舒服| 一个人在线看的黄色电影网站| 99久久免费看精品国产一区| 亚洲欧美在线观看2021| 色哟哟av网址| 亚洲日本激情| 亚洲熟女乱熟乱熟妇综合网二区| 亚洲一区二区三区春色| 免费观看的av| 久久久久久综合久久伊人蜜月| 国产欧美亚洲精品a第2页| 夜夜操91744565| 精品亚洲| 艾草av| heyZO天然素人无码AⅤ专区| 亚洲情色五月天 | AV污污污污| 福利大香蕉| 国模精品一区二区三区苹果色戒 | 97在线视频免费观看| 婷婷五月天成人网| 久久少妇| 亚洲欧美九九九| 国产91精品在线免费| 蜜桃久久久久久久| av天堂精品久久| 神马久久啊啊| 亚洲日韩精品在线播放| 日韩有码中文字幕女同性恋| www.91色综合| 久九九九| 91挑色欧美| 国产精品无码AV网站| 97在线播放| 欧美 亚洲 制服 精品| 人人操人人摸avav| 日韩欧美中文字| 亚洲精品aa久久伊人| 精品国产乱码久久久A| 色综合中文字幕不卡| 网站A V在线| 超碰这里有精品| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 乱伦av.com| 久操国产在线| 亚洲视频,小说| 强歼乱伦资源网| 91 丝袜在线播放| 欧美 牲| 色色色色电影网| 欧美高清18A片| 人妻大香蕉| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 免费视频a级毛片免费视频| 九九热av| 屌妞视频久久久久久久久久久久| 免费在线黄片视频| 亚洲丝袜制服国产91_国语字幕免费观看完整版下载第5集_ | 1769国内精品视频| 蜜桃久久精品一区二区三区| 亚洲色图欧美视频| 成人性爱免费播放| KK色在线影院| 久久欧美1卡2卡3| 日欧操屄视频| 中文字幕日韩人妻视频| 国产精品久久泡妞网站| 97se综合网| Julia在线播放亚洲久久| 视频黄色国产一级| 99re这里只有| 亚洲 欧美 综合 91| 日本不卡三级网在线播放| 九九性爱网| 午夜视频久久久久一区| 国产97亚洲| 夜夜无码| 91路www| 操九九九九九九| 久久婷婷色| 成人午夜小视频手机在线看| 久久久青草青青国产亚洲免观精品高清完整版_97久久综合区小说区图片区,国精品 | 欧美亚洲一级在线观看| 99精品九九九九九九| se01国产在线视频| 国产操逼网站亚洲一级黄色| 天天干1区2区在线| 国产不卡中文字幕免费avi| 狠狠狠狠狠狠| 欧美日韩日产免费网站看| 91免费看一区二区三区| 国产丝袜啪啪| 中日韩久久人妻一区二区| 五月丁香啪啪网| 久久精品三级影视| 黄色在线网站| 日本色色色网站免费看不卡| 97超碰9| 日韩欧美三级| 亚洲天堂久| 超碰综合色| 中文字幕-区二区三区四区视频中国| 天天添天天干电影| 精品久久一区二区三区四区五区| 精品人妻一区| 太久视频| 日韩欧美一级特黄大片| 久久亚洲AV无码专区首页| 热99这里有精品综合久久| 久久久久久九九九| 亚洲加勒比| J?P?NESEHD熟女熟妇伦| 麻豆亚洲AV成人无码久久精品| 国产精品毛片| 亚洲综合影片| 五月婷婷五月天| 99热99色| 国产三级电影免费观看| 日韩 欧美 视频 在线 一区| 丁香7月婷婷| 啊啊啊啊啊啊啊好爽不要| 欧美精品四区| 日韩精品1区2区中文字幕| 亚洲精品乱码线路中文字幕| 国产在线综合福利网站| 午夜美女福利视频| 啪啪啪综合网| 九t超碰| 欧美久久人体|