定 價:79 元
叢書名:IC設(shè)計與嵌入式系統(tǒng)開發(fā)叢書
- 作者:滕家海
- 出版時間:2022/1/1
- ISBN:9787111696438
- 出 版 社:機械工業(yè)出版社
- 中圖法分類:TP312.8
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書采用集成電路設(shè)計工作中的實際案例,介紹了Perl的各類基本知識,包括:變量、子例程、正則表達式,文件操作等。針對模擬線路設(shè)計,數(shù)字線路設(shè)計和版圖設(shè)計等設(shè)計過程,分別選取了有代表性的應(yīng)用案例,實現(xiàn)并講解和分析了完整的Perl代碼。還介紹了集成電路設(shè)計工作中可能常用的模塊,以及代碼風格建議等進階內(nèi)容。本書zui后介紹了圖形用戶界面(Perl/Tk)的入門和常用功能.
Perl語言的特點
Perl語言是一門解釋型編程語言,與C/C++語言相比,它的程序不需要用戶編譯,可以直接運行。Perl的一個特點是,它提供了簡潔的數(shù)據(jù)類型,包括標量、數(shù)組和散列(在其他高級語言中,常稱為關(guān)系數(shù)組或字典),其中數(shù)組和散列可以是任意深度的嵌套組合—這使我們可以高效地描述數(shù)據(jù)。Perl內(nèi)嵌的正則表達式是它的另一大特點,不僅提供了極其強大而全面的功能,而且使用起來非常方便。
IC設(shè)計為什么需要編程
如果你是IC設(shè)計領(lǐng)域的在職人員,那么你可能知道,許多EDA軟件廠商為該領(lǐng)域提供了各式各樣滿足不同需求的EDA軟件。在這種情形下,還需要我們編程嗎?目前的答案仍然是肯定的。EDA軟件專注于某個特定的任務(wù),而無法滿足公司定制的具體需求(比如根據(jù)公司內(nèi)部的實際需求,生成特定格式的報告),也無法把多個可能來自不同廠商的軟件串聯(lián)起來運行。還有一些煩瑣的手動編輯工作,暫時沒有專門的軟件來完成。這些都要通過編程來完成。
Perl語言可以應(yīng)用在IC設(shè)計過程中的以下場景
在IC設(shè)計中,仿真、驗證、版圖設(shè)計等工作,都有專用的EDA軟件。那么,Perl語言主要用在哪里呢?籠統(tǒng)地說,Perl語言可以用于以下場景:
處理輸入文本。
運行某個EDA軟件。
分析輸出文本。
Perl語言也可以用于這三者的某種組合。比如,運行某個EDA軟件并分析其結(jié)果,或者先處理輸入文本,然后運行某個EDA軟件,后分析其結(jié)果,甚至根據(jù)結(jié)果去調(diào)整輸入文本,循環(huán)運行EDA軟件直至獲得預(yù)期的結(jié)果。本書中的“文本”或“文本文件”是指netlist(網(wǎng)表)、Verilog文件、log文件等,不包括Word文檔或PDF文檔等包含格式信息的文件。
基于這些應(yīng)用場景,本書會較全面地介紹Perl知識,以滿足實際工作的需求。但一些內(nèi)容,比如面向?qū)ο蟆⑶度隒代碼和二進制文件的處理等,這些在IC設(shè)計實踐中很少用到的,本書沒有涉及。
Perl語言的版本
本書的代碼在Perl 5.10.1(CentOS 6.0)和Perl 5.34.0上均通過運行測試。只要所安裝的語言版本不太老,都可以順利運行本書的代碼。
代碼和勘誤
本書所有帶編號的代碼均可從華章圖書官網(wǎng)http://www.hzbook.com下載,或者向筆者發(fā)送電子郵件索取。筆者才疏學淺,盡管做了努力,書中仍難免有錯,歡迎各位讀者朋友指正。筆者的郵箱為jhteng@outlook.com。
本書面向的讀者
本書主要面向Perl的初學者。如果你是IC設(shè)計行業(yè)的工程師(包括模擬IC設(shè)計、數(shù)字IC設(shè)計,版圖設(shè)計和布局布線工程師等),希望你看到本書的實例時,會感到親切。
如果你只了解一點Perl,但不熟悉它,或者不曾將Perl應(yīng)用到IC設(shè)計過程中,又或者編寫的代碼只能自己使用,不知道該達成哪些規(guī)范來提高質(zhì)量,那么本書會給你提供一些幫助。
本書目標
本書的目標就是使你學會Perl,并且能將Perl應(yīng)用到IC設(shè)計實踐中,提高工作效率。本書將介紹一些代碼規(guī)范,使你的代碼既正確又優(yōu)雅,既利于他人閱讀學習,也利于自己未來更新或擴充。
本書特點
零基礎(chǔ):對編程經(jīng)驗沒有要求。
循序漸進:在介紹基礎(chǔ)知識的過程中,逐步改進和完成一個處理命令行參數(shù)的模塊,該模塊可以應(yīng)用到未來的實踐中。
注重實踐:本書遵循實際的IC設(shè)計過程,根據(jù)需求來完成相關(guān)的Perl編程工作。
本書內(nèi)容
本書主要包含以下幾章內(nèi)容:
第1章 介紹Perl的基本知識。首先介紹準備工作,包括操作系統(tǒng)和Perl的安裝,以及代碼編輯軟件的選擇等;其次介紹如何逐步改進和完成命令行參數(shù),包括變量、控制結(jié)構(gòu)、正則表達式、子例程和模塊等。
第2章 介紹Perl與操作系統(tǒng)的交互,包括文件/目錄操作、執(zhí)行shell命令和設(shè)計Perl程序的參數(shù)等。
第3章 介紹正則表達式。
第4章 對第1章和第2章完成的模塊進行補充和改進,為后續(xù)第5~7章做準備。
第5章 介紹Perl在模擬IC電路設(shè)計中的應(yīng)用—處理PVT仿真的程序。
第6章 介紹Perl在版圖驗證過程中的應(yīng)用—處理版圖驗證的程序。
第7章 介紹Perl在數(shù)字IC電路設(shè)計過程中的應(yīng)用—連接數(shù)字模塊(Verilog)的程序,重點介紹Perl數(shù)據(jù)結(jié)構(gòu)的靈活性。
第8章 介紹如何提升代碼質(zhì)量以及其他話題。
第9章 介紹特殊名稱、常用函數(shù)和模塊。
致謝
本書得以出版,首先要感謝陳剛先生,我曾經(jīng)的上級主管。在2020年春節(jié)前夕,他建議我寫一本書,總結(jié)一下自己的經(jīng)驗,分享給本行業(yè)的年輕設(shè)計人員。在編寫過程中,他也時常鼓勵我,還仔細審閱了書稿,并提出了一百多條改進意見。
我還要感謝我的同事黃飛鵬、方亮亮、董慶祥和張劼。黃飛鵬先生是模擬電路設(shè)計專家,他向我推薦了PVT自動化的實例,并給予了細致的說明和指導(dǎo)。方亮亮女士是數(shù)字電路設(shè)計專家,她向我推薦了自動連接Verilog的實例,也熱心解答了我的關(guān)于數(shù)字電路設(shè)計方面的問題。董慶祥先生是模擬電路設(shè)計專家,他建議我花點篇幅介紹Perl的特點,我希望本書能達成他的期望。張劼先生是模擬電路設(shè)計專家,我經(jīng)常向他請教各類電路知識,避免了一些電路設(shè)計方面的錯誤。
我還要感謝機械工業(yè)出版社的編輯楊福川先生、王穎女士、張
序
前言
第1章 Perl語言基礎(chǔ) 1
1.1 準備工作 1
1.1.1 安裝環(huán)境 1
1.1.2 選擇編輯器 2
1.1.3 查閱官方文檔 3
1.1.4 運行本書中的程序 3
1.2 初識命令行參數(shù) 4
1.2.1 標量 7
1.2.2 數(shù)組 8
1.2.3 循環(huán)結(jié)構(gòu)for 9
1.3 改進命令行參數(shù) 10
1.3.1 散列 13
1.3.2 判斷結(jié)構(gòu)if 14
1.3.3 “真”與“假” 15
1.4 繼續(xù)改進命令行參數(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章 正則表達式 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 匹配的特點 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章 模塊的改進 68
4.1 參數(shù)值存為標量 68
4.2 增加data_type的類型識別 69
4.3 提供默認值 70
4.4 新增子例程 72
4.4.1 把文件讀取到數(shù)組中 72
4.4.2 把數(shù)組寫入文件中 73
4.4.3 新建目錄 73
4.5 參數(shù)值可以短劃線開頭 74
第5章 模擬IC電路仿真實踐 75
5.1 模擬IC電路設(shè)計流程簡介 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 補充說明 86
第6章 版圖設(shè)計實踐 88
6.1 版圖設(shè)計流程簡介 88
6.2 DRC程序的功能定義和參數(shù)設(shè)計 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 補充說明 99
第7章 數(shù)字IC電路設(shè)計實踐 101
7.1 Verilog連接程序的功能定義和參數(shù)設(shè)計 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 補充說明 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 縮進和大括號 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)控長時間運行的任務(wù) 134
8.6 雜項 145
8.6.1 <<操作符 145
8.6.2 Schwartz變換 147
8.6.3 其他運算符 147
8.6.4 非十進制數(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ù)學計算 164
9.2.2 標量操作 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