Perl語言IC設(shè)計(jì)實(shí)踐
定 價:79 元
叢書名:IC設(shè)計(jì)與嵌入式系統(tǒng)開發(fā)叢書
- 作者:滕家海
- 出版時間:2022/1/1
- ISBN:9787111696438
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312.8
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書采用集成電路設(shè)計(jì)工作中的實(shí)際案例,介紹了Perl的各類基本知識,包括:變量、子例程、正則表達(dá)式,文件操作等。針對模擬線路設(shè)計(jì),數(shù)字線路設(shè)計(jì)和版圖設(shè)計(jì)等設(shè)計(jì)過程,分別選取了有代表性的應(yīng)用案例,實(shí)現(xiàn)并講解和分析了完整的Perl代碼。還介紹了集成電路設(shè)計(jì)工作中可能常用的模塊,以及代碼風(fēng)格建議等進(jìn)階內(nèi)容。本書zui后介紹了圖形用戶界面(Perl/Tk)的入門和常用功能.
Perl語言的特點(diǎn)
Perl語言是一門解釋型編程語言,與C/C++語言相比,它的程序不需要用戶編譯,可以直接運(yùn)行。Perl的一個特點(diǎn)是,它提供了簡潔的數(shù)據(jù)類型,包括標(biāo)量、數(shù)組和散列(在其他高級語言中,常稱為關(guān)系數(shù)組或字典),其中數(shù)組和散列可以是任意深度的嵌套組合—這使我們可以高效地描述數(shù)據(jù)。Perl內(nèi)嵌的正則表達(dá)式是它的另一大特點(diǎn),不僅提供了極其強(qiáng)大而全面的功能,而且使用起來非常方便。
IC設(shè)計(jì)為什么需要編程
如果你是IC設(shè)計(jì)領(lǐng)域的在職人員,那么你可能知道,許多EDA軟件廠商為該領(lǐng)域提供了各式各樣滿足不同需求的EDA軟件。在這種情形下,還需要我們編程嗎?目前的答案仍然是肯定的。EDA軟件專注于某個特定的任務(wù),而無法滿足公司定制的具體需求(比如根據(jù)公司內(nèi)部的實(shí)際需求,生成特定格式的報告),也無法把多個可能來自不同廠商的軟件串聯(lián)起來運(yùn)行。還有一些煩瑣的手動編輯工作,暫時沒有專門的軟件來完成。這些都要通過編程來完成。
Perl語言可以應(yīng)用在IC設(shè)計(jì)過程中的以下場景
在IC設(shè)計(jì)中,仿真、驗(yàn)證、版圖設(shè)計(jì)等工作,都有專用的EDA軟件。那么,Perl語言主要用在哪里呢?籠統(tǒng)地說,Perl語言可以用于以下場景:
處理輸入文本。
運(yùn)行某個EDA軟件。
分析輸出文本。
Perl語言也可以用于這三者的某種組合。比如,運(yùn)行某個EDA軟件并分析其結(jié)果,或者先處理輸入文本,然后運(yùn)行某個EDA軟件,后分析其結(jié)果,甚至根據(jù)結(jié)果去調(diào)整輸入文本,循環(huán)運(yùn)行EDA軟件直至獲得預(yù)期的結(jié)果。本書中的“文本”或“文本文件”是指netlist(網(wǎng)表)、Verilog文件、log文件等,不包括Word文檔或PDF文檔等包含格式信息的文件。
基于這些應(yīng)用場景,本書會較全面地介紹Perl知識,以滿足實(shí)際工作的需求。但一些內(nèi)容,比如面向?qū)ο、嵌入C代碼和二進(jìn)制文件的處理等,這些在IC設(shè)計(jì)實(shí)踐中很少用到的,本書沒有涉及。
Perl語言的版本
本書的代碼在Perl 5.10.1(CentOS 6.0)和Perl 5.34.0上均通過運(yùn)行測試。只要所安裝的語言版本不太老,都可以順利運(yùn)行本書的代碼。
代碼和勘誤
本書所有帶編號的代碼均可從華章圖書官網(wǎng)http://www.hzbook.com下載,或者向筆者發(fā)送電子郵件索取。筆者才疏學(xué)淺,盡管做了努力,書中仍難免有錯,歡迎各位讀者朋友指正。筆者的郵箱為jhteng@outlook.com。
本書面向的讀者
本書主要面向Perl的初學(xué)者。如果你是IC設(shè)計(jì)行業(yè)的工程師(包括模擬IC設(shè)計(jì)、數(shù)字IC設(shè)計(jì),版圖設(shè)計(jì)和布局布線工程師等),希望你看到本書的實(shí)例時,會感到親切。
如果你只了解一點(diǎn)Perl,但不熟悉它,或者不曾將Perl應(yīng)用到IC設(shè)計(jì)過程中,又或者編寫的代碼只能自己使用,不知道該達(dá)成哪些規(guī)范來提高質(zhì)量,那么本書會給你提供一些幫助。
本書目標(biāo)
本書的目標(biāo)就是使你學(xué)會Perl,并且能將Perl應(yīng)用到IC設(shè)計(jì)實(shí)踐中,提高工作效率。本書將介紹一些代碼規(guī)范,使你的代碼既正確又優(yōu)雅,既利于他人閱讀學(xué)習(xí),也利于自己未來更新或擴(kuò)充。
本書特點(diǎn)
零基礎(chǔ):對編程經(jīng)驗(yàn)沒有要求。
循序漸進(jìn):在介紹基礎(chǔ)知識的過程中,逐步改進(jìn)和完成一個處理命令行參數(shù)的模塊,該模塊可以應(yīng)用到未來的實(shí)踐中。
注重實(shí)踐:本書遵循實(shí)際的IC設(shè)計(jì)過程,根據(jù)需求來完成相關(guān)的Perl編程工作。
本書內(nèi)容
本書主要包含以下幾章內(nèi)容:
第1章 介紹Perl的基本知識。首先介紹準(zhǔn)備工作,包括操作系統(tǒng)和Perl的安裝,以及代碼編輯軟件的選擇等;其次介紹如何逐步改進(jìn)和完成命令行參數(shù),包括變量、控制結(jié)構(gòu)、正則表達(dá)式、子例程和模塊等。
第2章 介紹Perl與操作系統(tǒng)的交互,包括文件/目錄操作、執(zhí)行shell命令和設(shè)計(jì)Perl程序的參數(shù)等。
第3章 介紹正則表達(dá)式。
第4章 對第1章和第2章完成的模塊進(jìn)行補(bǔ)充和改進(jìn),為后續(xù)第5~7章做準(zhǔn)備。
第5章 介紹Perl在模擬IC電路設(shè)計(jì)中的應(yīng)用—處理PVT仿真的程序。
第6章 介紹Perl在版圖驗(yàn)證過程中的應(yīng)用—處理版圖驗(yàn)證的程序。
第7章 介紹Perl在數(shù)字IC電路設(shè)計(jì)過程中的應(yīng)用—連接數(shù)字模塊(Verilog)的程序,重點(diǎn)介紹Perl數(shù)據(jù)結(jié)構(gòu)的靈活性。
第8章 介紹如何提升代碼質(zhì)量以及其他話題。
第9章 介紹特殊名稱、常用函數(shù)和模塊。
致謝
本書得以出版,首先要感謝陳剛先生,我曾經(jīng)的上級主管。在2020年春節(jié)前夕,他建議我寫一本書,總結(jié)一下自己的經(jīng)驗(yàn),分享給本行業(yè)的年輕設(shè)計(jì)人員。在編寫過程中,他也時常鼓勵我,還仔細(xì)審閱了書稿,并提出了一百多條改進(jìn)意見。
我還要感謝我的同事黃飛鵬、方亮亮、董慶祥和張劼。黃飛鵬先生是模擬電路設(shè)計(jì)專家,他向我推薦了PVT自動化的實(shí)例,并給予了細(xì)致的說明和指導(dǎo)。方亮亮女士是數(shù)字電路設(shè)計(jì)專家,她向我推薦了自動連接Verilog的實(shí)例,也熱心解答了我的關(guān)于數(shù)字電路設(shè)計(jì)方面的問題。董慶祥先生是模擬電路設(shè)計(jì)專家,他建議我花點(diǎn)篇幅介紹Perl的特點(diǎn),我希望本書能達(dá)成他的期望。張劼先生是模擬電路設(shè)計(jì)專家,我經(jīng)常向他請教各類電路知識,避免了一些電路設(shè)計(jì)方面的錯誤。
我還要感謝機(jī)械工業(yè)出版社的編輯楊福川先生、王穎女士、張
序
前言
第1章 Perl語言基礎(chǔ) 1
1.1 準(zhǔn)備工作 1
1.1.1 安裝環(huán)境 1
1.1.2 選擇編輯器 2
1.1.3 查閱官方文檔 3
1.1.4 運(yùn)行本書中的程序 3
1.2 初識命令行參數(shù) 4
1.2.1 標(biāo)量 7
1.2.2 數(shù)組 8
1.2.3 循環(huán)結(jié)構(gòu)for 9
1.3 改進(jìn)命令行參數(shù) 10
1.3.1 散列 13
1.3.2 判斷結(jié)構(gòu)if 14
1.3.3 “真”與“假” 15
1.4 繼續(xù)改進(jìn)命令行參數(shù) 16
1.4.1 數(shù)組的散列 20
1.4.2 散列的散列 21
1.5 完成命令行參數(shù) 22
1.5.1 引用 25
1.5.2 子例程 27
1.5.3 模塊 29
第2章 與操作系統(tǒng)交互 34
2.1 識別文件或目錄 34
2.2 讀取文件 35
2.3 寫入文件 37
2.4 讀取目錄 39
2.5 創(chuàng)建目錄 39
2.6 執(zhí)行操作系統(tǒng)命令 40
2.7 獲取系統(tǒng)命令的輸出 41
2.8 獲取和設(shè)置環(huán)境變量 41
2.9 讀取命令行參數(shù) 41
第3章 正則表達(dá)式 45
3.1 匹配的基本過程 46
3.2 匹配 48
3.2.1 普通字符 48
3.2.2 元字符 49
3.2.3 反斜杠家族 54
3.2.4 修飾符 56
3.2.5 內(nèi)插變量 57
3.3 分組和捕獲 59
3.3.1 分組并捕獲 59
3.3.2 匹配的特點(diǎn) 62
3.3.3 分組不捕獲 64
3.3.4 分組捕獲并反向引用 65
3.4 替換 66
3.4.1 修飾符 67
3.4.2 界定符 67
3.4.3 不改變原變量 67
第4章 模塊的改進(jìn) 68
4.1 參數(shù)值存為標(biāo)量 68
4.2 增加data_type的類型識別 69
4.3 提供默認(rèn)值 70
4.4 新增子例程 72
4.4.1 把文件讀取到數(shù)組中 72
4.4.2 把數(shù)組寫入文件中 73
4.4.3 新建目錄 73
4.5 參數(shù)值可以短劃線開頭 74
第5章 模擬IC電路仿真實(shí)踐 75
5.1 模擬IC電路設(shè)計(jì)流程簡介 75
5.2 PVT仿真的過程 76
5.3 定義PVT仿真程序的功能 77
5.4 程序的主體 79
5.5 各子例程 81
5.5.1 define_opt_rule 81
5.5.2 run_pvt 82
5.5.3 generate_netlist 83
5.5.4 run_sim 84
5.5.5 get_sim_result 85
5.5.6 generate_report 86
5.6 補(bǔ)充說明 86
第6章 版圖設(shè)計(jì)實(shí)踐 88
6.1 版圖設(shè)計(jì)流程簡介 88
6.2 DRC程序的功能定義和參數(shù)設(shè)計(jì) 89
6.3 程序的主體 90
6.4 各子例程 93
6.4.1 prepare_run_dir 93
6.4.2 export_gds 94
6.4.3 prepare_drc_rule 95
6.4.4 replace_array 96
6.4.5 get_match_word 97
6.4.6 run_drc 98
6.4.7 report_result 99
6.5 補(bǔ)充說明 99
第7章 數(shù)字IC電路設(shè)計(jì)實(shí)踐 101
7.1 Verilog連接程序的功能定義和參數(shù)設(shè)計(jì) 101
7.2 程序的主體 104
7.3 各子例程 106
7.3.1 read_f?ile_list 106
7.3.2 read_verilog_f?ile 107
7.3.3 con_top_verilog 109
7.3.4 generate_lines 111
7.3.5 output_verilog 113
7.4 補(bǔ)充說明 115
第8章 提升代碼質(zhì)量 116
8.1 正確的代碼 116
8.1.1 use strict 116
8.1.2 use warnings 119
8.1.3 程序的結(jié)構(gòu) 120
8.1.4 輕度debug 122
8.2 好看的代碼 123
8.2.1 縮進(jìn)和大括號 123
8.2.2 斷行 125
8.2.3 注釋 126
8.2.4 POD 127
8.3 中文處理 129
8.3.1 常量 130
8.3.2 變量名 130
8.3.3 文件的內(nèi)容 131
8.4 遞歸 132
8.5 監(jiān)控長時間運(yùn)行的任務(wù) 134
8.6 雜項(xiàng) 145
8.6.1 <<操作符 145
8.6.2 Schwartz變換 147
8.6.3 其他運(yùn)算符 147
8.6.4 非十進(jìn)制數(shù)處理 150
8.7 更多閱讀推薦 153
第9章 特殊名稱、常用函數(shù)與模塊 156
9.1 特殊名稱 156
9.1.1 $0 156
9.1.2 @ARGV 157
9.1.3 $_ 157
9.1.4 @_ 160
9.1.5 $a和$b 161
9.1.6 $. 161
9.1.7 %ENV 161
9.1.8 $$ 162
9.1.9 $! 162
9.1.10 STDERR、STDIN、STDOUT 162
9.2 常用函數(shù) 163
9.2.1 數(shù)學(xué)計(jì)算 164
9.2.2 標(biāo)量操作 166
9.2.3 列表和數(shù)組處理 171
9.2.4 僅數(shù)組處理(不能處理列表) 174
9.2.5 散列處理 177
9.2.6 輸入輸出 179
9.2.7 文件(和目錄)操作 193
9.2.8 流程控制 198
9.2.9 范圍 201
9.2.10 時間處理 205
9.2.11 其他函數(shù) 206
9.3 常用模塊 211
9.3.1 strict 211
9.3.2 warnings 214
9.3.3 parent 215
9.3.4 Benchmark 216
9.3.5 Cwd 218
9.3.6 Data::Dumper 219
9.3.7 Digest::MD5 220
9.3.8 File::Basename 221
9.3.9 Spreadsheet::XLSX 222