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