本書深入地探討了Verilog編程,分為七個(gè)部分:設(shè)計(jì)原則、語言特性、書寫文檔、高級(jí)設(shè)計(jì)、時(shí)鐘和復(fù)位、驗(yàn)證之路、其他介紹。本書對(duì)這些部分做了重點(diǎn)的探討:Verilog編碼風(fēng)格、Verilog-2001的新特性、簡(jiǎn)潔高效的編程、容易出錯(cuò)的語言元素、可配置設(shè)計(jì)、時(shí)鐘生成、復(fù)位設(shè)計(jì)、驗(yàn)證方法等。另外,本書還對(duì)SystemVerilog做了簡(jiǎn)單的介紹。
本書更加注重Verilog編程的方法論和實(shí)用性,深入地探討編碼風(fēng)格、語言特性、簡(jiǎn)潔高效和時(shí)鐘復(fù)位等實(shí)際問題,深入探討如何避免使用易混淆和易錯(cuò)誤的語句,如何避免前后仿真不一致,如何充分發(fā)揮Verilog-2001的特性。
作者具有多年的Verilog設(shè)計(jì)經(jīng)驗(yàn),參與了多個(gè)芯片的設(shè)計(jì)工作,重點(diǎn)在前端設(shè)計(jì)(設(shè)計(jì)、驗(yàn)證、綜合、和STA等)。
第一部分 設(shè) 計(jì) 原 則
第1章 美的設(shè)計(jì)
1.1 美學(xué)觀點(diǎn)
1.2 美是修養(yǎng)
1.3 專業(yè)術(shù)語
第2章 高效之道
2.1 敏捷開發(fā)
2.2 代碼質(zhì)量
2.3 版本控制
2.4 提早集成
第3章 組織管理
3.1 植物分類
3.2 SoC特性
3.3 設(shè)計(jì)流程
3.4 仔細(xì)規(guī)劃 第一部分 設(shè) 計(jì) 原 則
第1章 美的設(shè)計(jì)
1.1 美學(xué)觀點(diǎn)
1.2 美是修養(yǎng)
1.3 專業(yè)術(shù)語
第2章 高效之道
2.1 敏捷開發(fā)
2.2 代碼質(zhì)量
2.3 版本控制
2.4 提早集成
第3章 組織管理
3.1 植物分類
3.2 SoC特性
3.3 設(shè)計(jì)流程
3.4 仔細(xì)規(guī)劃
3.5 管理表格
3.6 模塊層次
3.7 目錄組織
第4章 使用工具
4.1 使用Emacs 19
4.2 使用Shell
4.3 使用CVS
第5章 編碼風(fēng)格
5.1 干干凈凈
5.2 代碼劃分
5.3 代碼要求
5.4 名字定義
5.5 書寫格式
5.6 添加注釋
5.7 參數(shù)化
5.8 lint檢查
第二部分 語 言 特 性
第6章 Verilog特性
6.1 Verilog標(biāo)準(zhǔn)
6.2 抽象級(jí)別
6.3 可綜合子集
6.4 保持一致
第7章 常數(shù)
7.1 整數(shù)(integer)
7.2 實(shí)數(shù)(real)
7.3 字符串(string)
7.4 標(biāo)識(shí)符(identifier)
第8章 數(shù)據(jù)類型
第9章 表達(dá)式
第10章 賦值操作
10.1 連續(xù)賦值
10.2 過程賦值
第11章 門級(jí)和開關(guān)級(jí)模型
第12章 用戶定義原語
12.1 UDP定義
12.2 組合UDP
12.3 電平敏感時(shí)序UDP
12.4 沿敏感時(shí)序UDP
第13章 行為模型
13.1 概覽
13.2 過程賦值
13.3 過程連續(xù)賦值
13.4 條件語句
13.5 循環(huán)語句
13.6 過程時(shí)序控制
13.7 塊語句
13.8 結(jié)構(gòu)化過程
13.9 always有關(guān)的問題
第14章 case語句
第15章 task和function
第16章 調(diào)度和賦值
16.1 仿真過程
16.2 事件仿真
16.3 仿真參考模型
16.4 分層事件隊(duì)列
16.5 確定性和不確定性
16.6 賦值的調(diào)度含義
16.7 阻塞賦值和非阻塞賦值
16.8 賦值使用原則
16.9 自己觸發(fā)自己
16.10 仿真零延遲RTL模型
16.11 慣性延遲和傳輸延遲
16.12 延遲線模型
16.13 使用#1延遲
16.14 多個(gè)公共時(shí)鐘和競(jìng)爭(zhēng)條件
16.15 避免混雜阻塞賦值和非阻塞賦值
16.16 RTL和門級(jí)混合仿真
16.17 帶有SDF延遲的門級(jí)仿真
第17章 層次結(jié)構(gòu)
17.1 模塊
17.2 參數(shù)
17.3 端口
17.4 Generate語句
17.5 實(shí)例數(shù)組
17.6 層次名字
第18章 系統(tǒng)任務(wù)和函數(shù)
18.10 波形記錄
第19章 編譯指令
第20章 Specify塊
20.1 specify塊聲明
20.2 speparam
20.3 模塊路徑聲明
20.4 模塊路徑延遲
第21章 時(shí)序檢查
21.1 概覽
21.2 使用穩(wěn)定窗口的時(shí)序檢查
21.3 時(shí)鐘和控制信號(hào)的時(shí)序檢查
21.4 使用notifier響應(yīng)時(shí)序違反
21.5 使用條件事件
21.6 時(shí)序檢查中的Vector
21.7 Negative timing check
第22章 反標(biāo)SDF
22.1 SDF標(biāo)注器
22.2 SDF construct到Verilog的映射
22.3 $sdf_annotate
22.4 SDF文件例子
第23章 編程語言接口
23.1 DirectC
23.2 SystemVerilog
第24章 綜合指令
第三部分 書 寫 文 檔
第25章 書寫文檔
25.1 文檔格式
25.2 定義文檔
25.3 應(yīng)用文檔
25.4 設(shè)計(jì)文檔
25.5 備份文檔
25.6 GPIO設(shè)計(jì)
第26章 GPIO應(yīng)用文檔
26.1 Overview
26.2 Register Description
26.3 Program Guide
第27章 GPIO設(shè)計(jì)文檔
27.1 文件列表(見表27-1)
27.2 端口列表(見表27-2)
27.3 配置參數(shù)(見表27-3)
第四部分 高 級(jí) 設(shè) 計(jì)
第28章 使用IP
第29章 代碼優(yōu)化
29.1 代碼可讀
29.2 簡(jiǎn)潔編碼
29.3 優(yōu)化邏輯
29.4 優(yōu)化遲到信號(hào)
29.5 括號(hào)控制結(jié)構(gòu)
第30章 狀態(tài)機(jī)設(shè)計(jì)
30.1 狀態(tài)機(jī)類型
30.2 狀態(tài)編碼方式
30.3 二進(jìn)制編碼FSM
30.4 獨(dú)熱碼編碼FSM
30.5 寄存器輸出
第31章 可配置設(shè)計(jì)
31.1 格雷碼轉(zhuǎn)換
31.2 通用串行CRC
31.3 FIFO控制器
31.4 RAM Wrapper 例子
31.5 可配置的GPIO設(shè)計(jì)
31.6 可配置的BusMatrix
31.7 可配置的Andes Core N801
31.8 可配置的ARM926EJS
31.9 靈活的coreConsultant
第32章 可測(cè)性設(shè)計(jì)
32.1 內(nèi)部掃描
32.2 內(nèi)建自測(cè)
32.3 邊界掃描
第五部分 時(shí)鐘和復(fù)位
第33章 異步時(shí)序
33.1 亞穩(wěn)態(tài)
33.2 MTBF
33.3 同步器
33.4 同步多位數(shù)據(jù)
33.5 異步FIFO
33.6 Design Ware
33.7 DW_fifoctl_s2_sf
33.8 門級(jí)仿真
第34章 時(shí)鐘生成
34.1 同步電路
34.2 設(shè)計(jì)原則
34.3 分頻器
34.4 時(shí)鐘切換
34.5 時(shí)鐘生成
第35章 時(shí)鐘例子
第36章 復(fù)位設(shè)計(jì)
第六部分 驗(yàn) 證 之 路
第37章 驗(yàn)證之路
37.1 整潔驗(yàn)證
37.2 驗(yàn)證目標(biāo)
37.3 驗(yàn)證流程
37.4 驗(yàn)證計(jì)劃
37.5 隨機(jī)驗(yàn)證
37.6 直接驗(yàn)證
37.7 白盒驗(yàn)證
37.8 模塊驗(yàn)證
37.9 系統(tǒng)驗(yàn)證
37.10 DFT驗(yàn)證
37.11 網(wǎng)表驗(yàn)證
37.12 高級(jí)抽象
37.13 靈活驗(yàn)證
37.14 ARM926EJS的Validation環(huán)境
37.15 AHB BusMatrix的驗(yàn)證
37.16 某芯片的SoC驗(yàn)證環(huán)境
第七部分 其 他 介 紹
第38章 SystemVerilog特性
參考文獻(xiàn)
關(guān)于版權(quán)
程序設(shè)計(jì)是一門藝術(shù)”這句話有兩個(gè)意思:一方面是說,程序設(shè)計(jì)像藝術(shù)設(shè)計(jì)一樣,深不可測(cè),奧妙無窮;另一方面是說,程序員像藝術(shù)家一樣,也有發(fā)揮創(chuàng)造性的無限空間[梁肇新]。
Donald Knuth認(rèn)為“計(jì)算機(jī)科學(xué)”不是科學(xué),而是一門藝術(shù)。它們的區(qū)別在于:藝術(shù)是人創(chuàng)造的,而科學(xué)不是;藝術(shù)是可以無止境提高的,而科學(xué)不能;藝術(shù)創(chuàng)造需要天賦,而科學(xué)不需要。所以Donald Knuth把他的4卷本巨著命名為《計(jì)算機(jī)程序設(shè)計(jì)藝術(shù)》(The Art of Computer Programming)。
Donald Knuth不僅是計(jì)算機(jī)學(xué)家、數(shù)學(xué)家,而且是作家、音樂家、作曲家、管風(fēng)琴設(shè)計(jì)師。他的獨(dú)特的審美感決定了他的興趣廣泛、富有多方面造詣的特點(diǎn),他的傳奇般的生產(chǎn)力也是源于這一點(diǎn)。對(duì)于Donald Knuth來說,衡量一個(gè)計(jì)算機(jī)程序是否完整的標(biāo)準(zhǔn)不僅僅在于它是否能夠運(yùn)行,他認(rèn)為一個(gè)計(jì)算機(jī)程序應(yīng)該是雅致的,甚至可以說是美的。計(jì)算機(jī)程序設(shè)計(jì)應(yīng)該是一門藝術(shù),一個(gè)算法應(yīng)該像一段音樂,而一個(gè)好的程序應(yīng)該如一部文學(xué)作品一般。
Bjarne Stroustrup,C++語言發(fā)明者,說“我喜歡優(yōu)雅和高效的代碼。代碼邏輯應(yīng)當(dāng)直截了當(dāng),讓缺陷難以隱藏;應(yīng)當(dāng)減少依賴關(guān)系,使之便于維護(hù);應(yīng)當(dāng)依據(jù)分層戰(zhàn)略,完善錯(cuò)誤處理;應(yīng)當(dāng)把性能調(diào)至最優(yōu),省得引誘別人做沒規(guī)矩的優(yōu)化,搞出一堆混亂來”。他特別使用“優(yōu)雅”一詞來說明“令人愉悅的優(yōu)美、精致和簡(jiǎn)單”[Robert C. Martin]。
一個(gè)人的美學(xué)觀點(diǎn)會(huì)影響他的程序設(shè)計(jì),因?yàn)镵nuth有這么多的藝術(shù)愛好,所以他把程序設(shè)計(jì)看成藝術(shù)設(shè)計(jì),在程序設(shè)計(jì)中要體現(xiàn)出程序的美。同樣,當(dāng)Bjarne Stroustrup編寫優(yōu)雅且高效的代碼的時(shí)候,他也是在程序設(shè)計(jì)中尋求美。
我的美學(xué)觀點(diǎn)是簡(jiǎn)單和諧、整潔有序;某導(dǎo)演的美學(xué)觀點(diǎn)是宏大華麗、空洞無味;還有些人的美學(xué)觀點(diǎn)是亂七八糟、湊合了事;你的美學(xué)觀點(diǎn)是什么呢?有些人很自負(fù),感覺良好,以為領(lǐng)悟到了編程的真諦,看到代碼可以運(yùn)行,就洋洋得意,可是卻對(duì)自己造成的混亂熟視無睹。那堆“可以運(yùn)行”的程序,就在眼皮底下慢慢腐壞,然后廢棄扔掉。
因?yàn)閂erilog編程就是一種程序設(shè)計(jì),所以Verilog編程也應(yīng)該像設(shè)計(jì)藝術(shù)作品一樣,要仔細(xì)打磨、精雕細(xì)琢,要經(jīng)歷痛苦與無奈,也要經(jīng)歷快樂與自得。設(shè)計(jì)要有自己的方法論,要體現(xiàn)自己的奇思妙想,要讓自己的設(shè)計(jì)有更長(zhǎng)的生命力,而不是豆腐渣工程。
為什么那么多人對(duì)Apple的手機(jī)和計(jì)算機(jī)情有獨(dú)鐘?因?yàn)樗鼈兌际敲赖脑O(shè)計(jì),因?yàn)樗鼈兊脑O(shè)計(jì)者都在追求美。同理,我們?cè)谧鯲erilog編程的時(shí)候也要追求美,也要設(shè)計(jì)出美的Verilog程序。