Verilog 高級數字系統設計技術與實例分析 Advanced Chip Design, Practical Examples in Verilog

Mr Kishore K Mishra 喬廬峰等

買這商品的人也買了...

相關主題

商品描述

本書通過大量實例由淺入深地介紹了數字電路和數字系統設計中的重要概念和知識要點。本書分兩大部分。第一部分重點關註數字電路設計層面,偏重基礎。第2章到第6章為Verilog語法與數字電路設計相關知識,包括常用語法、基本數字電路單元等。第7章到第9章重點介紹高級數字設計知識,包括數字系統架構設計、復雜數字系統中常用的電路單元、算法,並給出了大量工程實例。第10章給出了一些重要的工程設計經驗,包括文檔管理、代碼設計、系統驗證、高可靠性設計等。第二部分重點關註數字系統設計層面。第11章到第13章介紹了常用數字系統關鍵電路,包括與處理器系統相關的存儲結構與存儲訪問技術、存儲介質(硬盤、快閃內存、DDR等)與驅動電路、處理器總線結構與協議等。第14章和第15章介紹了電路可測性設計、靜態定時分析、芯片工程修改的相關知識。第16章和第17章從電路設計層面到系統設計層面介紹了降低電路功耗的方法。第18章到第20章介紹常用串行總線和串行通信協議,包括PCI Express、SATA、USB及以太網技術。

作者簡介

Kishore Mishra 在芯片设计领域已积累20多年的实践经验,曾先后任职于Texas Instrument和Intel公司,擅长处理器外围芯片组设计,专注于PCI Express、SATA和DDR技术,以及芯片功率管理/低功耗设计技术领域。曾与他人合作创立过多家公司。所负责设计的PCI Express交换芯片IP核已被很多大型公司使用并实现了量产。曾在多个国际会议上发表论文并持有3项美国专利。Kishore近年来很重视教材编写,以分享20年来积累的数字系统设计知识和经验。__eol__

目錄大綱

第1章 緒論 第2章 寄存器傳輸語言(RTL) 第3章 可綜合的Verilog——用於電路設計 3.1 什麽是Verilog 3.2 Verilog的發展歷史 3.3 Verilog的結構 3.4 硬件RTL代碼的執行 3.5 Verilog模塊分析 3.6 Verilog中的觸發器 3.6.1 帶RST復位引腳的觸發器 3.6.2 沒有復位引腳的觸發器 3.7 組合邏輯 3.7.1 always塊語句 3.7.2 case和if-else語句 3.7.3 賦值語句 3.8 Verilog操作符 3.8.1 操作符描述 3.8.2 操作符的執行順序 3.8.3 Verilog中的註釋 3.9 可重用和模塊化設計 3.9.1 參數化設計 3.9.2 Verilog函數 3.9.3 Verilog中的generate結構 3.9.4 Verilog中的`ifdef 3.9.5 數組、多維數組 第4章 用於驗證的Verilog語法 4.1 Verilog的測試平臺 4.2 initial語句 4.3 Verilog 系統任務 4.3.1 $finish/$stop 4.3.2 $display/$monitor 4.3.3 $time,$realtime 4.3.4 $random/$random(seed) 4.3.5 $save 4.3.6 $readmemh/$writememh 4.3.7 $fopen/$fclose 4.4 任務 4.5 存儲器建模 4.6 其他Verilog語法結構 4.6.1 while循環 4.6.2 for循環、repeat 4.6.3 force/release 4.6.4 fork / join 4.7 一個簡單的testbench 第5章 數字電路設計——初級篇 5.1 組合邏輯門 5.1.1 邏輯1和邏輯0 5.1.2 真值表 5.1.3 晶體管 5.1.4 反相器 5.1.5 與門 5.1.6 或門 5.1.7 與非門 5.1.8 或非門 5.1.9 XOR(異或)、XNOR(異或非) 5.1.10 緩沖門 5.1.11 復用器 5.1.12 通用邏輯門——NAND、NOR 5.1.13 復雜門電路 5.1.14 噪聲容限 5.1.15 扇入和扇出 5.2 德摩根定理 5.3 通用D觸發器 5.3.1 D觸發器時序圖 5.4 建立和保持時間 5.4.1 建立時間 5.4.2 保持時間 5.4.3 亞穩態 5.5 單比特信號同步 5.5.1 兩個觸發器構成的同步器 5.5.2 信號同步規則 5.6 關於時序 5.7 事件/邊沿檢測 5.7.1 同步上升沿檢測 5.7.2 同步下降沿檢測 5.7.3 同步上升/下降沿檢測 5.7.4 異步輸入上升沿檢測 5.8 數值系統 5.8.1 十進制數值系統 5.8.2 二進制數 5.8.3 十進制數到二進制數的轉換 5.8.4 十六進制數值系統 5.8.5 十六進制數和二進制數的轉換 5.9 加法和減法 5.9.1 行波進位加法器 5.9.2 超前進位加法 5.9.3 累加器 5.10 乘和除 5.10.1 乘以一個常數 5.10.2 除以常數(2的整數次冪) 5.11 計數器 5.11.1 加法/減法計數器 5.11.2 LFSR(線性反饋移位寄存器)計數器 第6章 數字設計——基礎模塊 6.1 LFSR 6.1.1 引言 6.1.2 斐波那契LFSR與伽羅瓦LFSR 6.1.3 LFSR反饋多項式 6.1.4 LFSR的用法 6.2 擾碼與解擾 6.2.1 什麽是擾碼與解擾 6.2.2 擾碼的作用 6.2.3 串行擾碼器 6.2.4 並行擾碼器 6.2.5 擾碼電路設計要點 6.2.6 PCIe擾碼電路 6.2.7 Verilog RTL-PCIe擾碼器 6.3 檢錯與糾錯 6.3.1 檢錯 6.3.2 錯誤糾正 6.3.3 糾錯編碼 6.3.4 漢明碼 6.3.5 漢明碼應用舉例——DDR ECC 6.3.6 BCH編碼 6.3.7 里德-所羅門編碼 6.3.8 LDPC編碼 6.3.9 捲積碼 6.3.10 捲積解碼 6.3.11 軟判決與硬判決 6.4 奇偶校驗 6.4.1 偶校驗和奇校驗 6.4.2 奇偶校驗位的生成 6.4.3 奇偶校驗的應用 6.5 CRC(循環冗餘校驗) 6.5.1 CRC介紹 6.5.2 串行CRC計算 6.5.3 並行CRC計算 6.5.4 部分數據CRC計算 6.5.5 常用CRC類型 6.6 格雷編碼/解碼 6.6.1 二進制碼轉換為格雷編碼的通用電路 6.6.2 格雷碼轉換為二進制碼的通用電路 6.7 解碼器(7段數碼顯示實例) 6.8 優先級編碼 6.8.1 常規編碼器的Verilog 代碼 6.8.2 優先級編碼器的Verilog代碼 6.9 8b/10b編碼/解碼 6.9.1 8b/10b編碼方式 6.9.2 多字節8b/10b編碼 6.9.3 disparity選擇8b/10b編碼方案 6.10 64b/66b編碼/解碼 6.10.1 64b/66b編碼機制 6.10.2 128b/130b編碼機制 6.11 NRZ、NRZI編碼 6.12 移位寄存器與桶形移位器 6.12.1 左移位與右移位 6.12.2 左循環移位與右循環移位 6.12.3 桶形移位器 6.13 數據轉換器 6.13.1 由寬到窄數據轉換 6.13.2 由窄到寬數據轉換 6.14 同步技術 6.14.1 使用FIFO進行的數據同步 6.14.2 握手同步方式 6.14.3 脈沖同步器 6.14.4 相位、頻率關系固定時的跨時鐘域數據傳輸 6.14.5 準同步時鐘域 6.15 計時(微秒、毫秒和秒)脈沖的產生 6.16 波形整形電路 第7章 數字設計先進概念(第1部分) 7.1 時鐘 7.1.1 頻率和時鐘周期 7.1.2 不同的時鐘機制 7.1.3 同步時鐘 7.1.4 源同步時鐘 7.1.5 嵌入式時鐘 7.1.6 準同步時鐘 7.1.7 異步系統 7.1.8 擴頻時鐘 7.1.9 時鐘抖動 7.2 復位方法 7.2.1 異步復位(異步復位) 7.2.2 復位同步電路 7.2.3 同步復位 7.2.4 異步復位和同步復位的選擇 7.3 吞吐率 7.3.1 增加吞吐率的方法 7.3.2 更高的頻率 7.3.3 更寬的數據通道 7.3.4 流水線 7.3.5 並行處理 7.3.6 無序執行(亂序執行) 7.3.7 高速緩存(cache) 7.3.8 預讀取 7.3.9 多核 7.4 時延 7.4.1 降低時延的方法 7.5 流控 7.5.1 介紹 7.5.2 數據轉發:data_valid和data_ack 7.5.3 基於信用的流控:PCIe 7.5.4 SATA流控機制 7.5.5 吉比特以太網流控 7.5.6 TCP滑動窗流控機制 7.6 流水線操作 7.6.1 流水線介紹 7.6.2 流水線的簡單實例 7.6.3 RISC——流水線處理器 7.6.4 流水線結構和並行操作 7.6.5 流水線加法器 7.6.6 並行加法器 7.6.7 系統設計中的流水線 7.7 out-of-order執行(亂序執行) 7.7.1 現代處理器:out-of-order執行 7.7.2 SATA NCQ:out-of-order執行 第8章 數字設計先進概念(第2部分) 8.1 狀態機 8.1.1 引言 8.1.2 狀態機泡泡圖 8.1.3 狀態機:推薦方式 8.1.4 二進制編碼的狀態機 8.1.5 獨熱碼編碼的狀態機 8.1.6 二進制編碼和獨熱碼比較 8.1.7 米里型和摩爾型狀態機 8.1.8 子狀態機 8.2 FIFO 8.2.1 引言 8.2.2 FIFO操作 8.2.3 同步FIFO 8.2.4 同步FIFO 8.2.5 異步FIFO的工作機制 8.2.6 異步FIFO的實現 8.3 FIFO高級原理 8.3.1 FIFO的大小 8.3.2 FIFO的深度 8.3.3 輔助數據或標簽 8.3.4 快照/回退操作 8.3.5 直通交換和存儲轉發模式 8.3.6 FIFO指針復位 8.3.7 不同的寫入、讀取數據寬度 8.3.8 使用FIFO的缺點 8.3.9 基於觸發器或者SRAM的FIFO 8.4 仲裁 8.4.1 關於仲裁 8.4.2 常規仲裁方案 8.4.3 嚴格優先級輪詢 8.4.4 公平輪詢 8.4.5 公平輪詢(仲裁w/o死周期) 8.4.6 帶權重的輪詢(WRR) 8.4.7 權重輪詢(WRR):第二種方法 8.4.8 兩組輪詢 8.5 總線接口 8.5.1 總線仲裁 8.5.2 split-transaction(分割處理)總線 8.5.3 流水線式總線 8.6 鏈表 8.7 近期最少使用(LRU)算法 8.7.1 LRU的矩陣實現 8.7.2 採用矩陣法實現LRU的Verilog代碼 第9章 設計ASIC/SoC 9.1 設計芯片——如何開展 9.2 結構和微結構 9.2.1 盡可能保持簡單 9.2.2 善於平衡 9.2.3 處理好錯誤和異常 9.3 數據路徑 9.3.1 數據流 9.3.2 時鐘 9.4 控制單元 9.4.1 關註邊界條件 9.4.2 註意細節 9.4.3 多輸入點 9.4.4 正確理解規範 9.5 其他考慮 9.5.1 門數 9.5.2 焊盤受限與內核受限 9.5.3 時鐘樹和復位樹 9.5.4 EEPROM、配置引腳 第10章 設計經驗 10.1 文檔 10.1.1 可讀性 10.1.2 註釋 10.1.3 命名規則 10.2 在編寫第一行代碼之前 10.2.1 直到你腦海裡有了藍圖才開始 10.2.2 腦海中的模擬 10.3 一些建議 10.3.1 哪種風格——數據流或算法 10.3.2 寄存器型輸出 10.3.3 使用狀態機而不是鬆散的控制邏輯 10.3.4 綜合和模擬不匹配 10.3.5 設計的模塊化和參數化 10.3.6 加法器、減法器的有效使用 10.4 需要避免的情況 10.4.1 不要形成組合邏輯環路 10.4.2 避免意外生成鎖存器 10.4.3 不要採用基於延遲的設計 10.4.4 不要對一個變量多次賦值 10.5 初步完成RTL代碼之後 10.5.1 初步完成代碼之後的回顧 10.5.2 目測RTL代碼 10.5.3 對發現bug感到驚喜 10.6 設計要面向未來使用需求 10.6.1 易於實現的寄存器結構 10.6.2 考慮將來需求 10.7 高速設計 10.7.1 使用獨熱碼進行狀態編碼 10.7.2 使用互斥的數據選擇器而不是優先級編碼器 10.7.3 避免大量散亂的組合邏輯電路 10.7.4 復制或克隆 10.7.5 使用同步復位時要小心 10.7.6 將後到的信號放在邏輯的前面 10.8 SoC設計經驗 10.8.1 使用雙觸發器同步電路 10.8.2 將所有復位電路放在一起 第11章 系統概念(第1部分) 11.1 PC系統結構 11.2 存儲器 11.2.1 存儲器層次結構 11.2.2 CPU使用高速緩存的方法 11.2.3 cache的架構 11.2.4 cache的組織方式 11.2.5 虛擬存儲器(Virtual Memory) 11.2.6 動態隨機訪問存儲器(DRAM) 11.2.7 靜態隨機訪問存儲器(SRAM) 11.2.8 內容可尋址存儲器(CAM) 11.2.9 CAM的Verilog模型 11.2.10 ROM、PROM、EPROM和EEPROM 11.2.11 快閃內存 11.3 中斷 11.3.1 中斷不同部分 11.3.2 中斷向量表 11.3.3 I/O設備產生的中斷 11.3.4 高級可編程中斷控制器 11.3.5 INTx中斷共享 11.3.6 MSI中斷 11.3.7 MSI-X中斷 11.3.8 中斷聚合 11.3.9 中斷產生的RTL示例 11.4 PIO(Programmed IO)模式的數據傳送 11.5 直接存儲器訪問 11.5.1 什麽是DMA 11.5.2 第三方、第一方DMA和RDMA 11.5.3 分/集式DMA 11.5.4 DMA描述符 11.5.5 環形描述符結構 11.5.6 鏈表描述符結構 11.5.7 DMA控制器的設計 11.5.8 DMA控制器的Verilog RTL模型 第12章 系統概念(第2部分) 12.1 永久存儲器——硬盤 12.1.1 磁盤結構 12.1.2 磁盤尋址 12.1.3 硬盤控制器 12.1.4 硬盤的類型:SATA硬盤和基於SAS的硬盤 12.1.5 RAID(獨立磁盤冗餘陣列) 12.2 永久存儲設備——固態盤 12.2.1 快閃內存的組織 12.2.2 快閃內存寫入、擦除 12.2.3 邏輯地址到物理地址的轉換 12.2.4 無用存儲空間回收 12.2.5 耗損均衡 12.2.6 寫放大及其緩解方法 12.2.7 超量供給 12.2.8 SSD中的高速緩存 12.2.9 ECC和RAID 12.2.10 快閃內存的一些重要指標 12.2.11 NVM總線 12.3 DDR存儲器 12.3.1 DDR存儲器命令 12.3.2 DDR的初始化和校準 12.3.3 DDR存儲器術語 12.4 軟硬件協同 12.4.1 設備驅動 12.4.2 軟件層 12.4.3 BIOS 12.4.4 內核模式和用戶模式 12.4.5 控制/狀態寄存器、RO、粘著位 第13章 嵌入式系統13.1 AMBA總線架構 13.1.1 AMBA模塊圖 13.1.2 AHB總線 13.1.3 AXI總線 13.2 其他總線(OCP、Avalon、Wishbone和IBM Core Connect) 13.3 非透明橋接 第14章 ASIC/SoC的可測試性 14.1 簡介 14.1.1 為什麽測試很重要 14.1.2 故障類型 14.2 ATPG 14.3 掃描 14.3.1 內部掃描 14.3.2 邊界掃描 14.3.3 IDDQ測試 14.4 SoC測試策略 14.4.1 SoC的內部結構 14.4.2 可測性設計(DFT) 14.4.3 DFT設計準則 14.4.4 測試層面和測試向量 第15章 芯片開發流程與工具 15.1 簡介 15.1.1 芯片設計的不同階段 15.2 前端設計過程所使用的工具 15.2.1 代碼分析工具 15.2.2 模擬工具 15.3 後端設計過程使用的工具 15.3.1 綜合工具 15.3.2 靜態定時分析及常用工具 15.3.3 SDC約束文件 15.3.4 Max Cap/Maxtrans檢查 15.3.5 門級模擬 15.4 tape-out 和相關工具 15.4.1 不同類型的tape-out 15.4.2 等效性檢查 15.4.3 網表ECO 15.4.4 FIB操作 15.5 在硅片調試 第16章 功率節約技術 16.1 簡介 16.2 功耗分析基礎 16.3 通過控制工作頻率降低功耗 16.3.1 降低頻率、增大數據路徑寬度 16.3.2 動態頻率調整 16.3.3 零頻率/門控時鐘 16.4 減少電容負載 16.5 降低工作電壓 16.5.1 動態改變工作電壓 16.5.2 零操作電壓 16.5.3 電源阱與隔離 第17章 功率管理 17.1 功率管理的基礎知識 17.2 系統級功率管理與ACPI 17.3 CPU功率狀態——C狀態 17.4 設備級功率管理與D狀態 17.5 系統、設備和鏈路間的關系 第18章 串行總線技術 18.1 串行總線結構 18.1.1 串行總線的出現 18.1.2 串行總線的優缺點 18.1.3 串行總線結構 18.1.4 串行總線時鐘 18.1.5 發送路徑的微結構 18.1.6 接收路徑的微結構 18.2 串行總線中的先進設計理念 18.2.1 字節分割/鏈路聚合 18.2.2 通道綁定與去偏移 18.2.3 極性翻轉 18.2.4 線路翻轉 18.2.5 鎖相環(PLL) 18.3 串行總線的PMA層功能 18.3.1 發送均衡 18.3.2 接收均衡 18.3.3 端接電阻 第19章 串行協議(第1部分) 19.1 PCIe 19.1.1 PCIe功能特性 19.1.2 PCIe帶寬 19.1.3 PCIe交換結構 19.1.4 PCIe配置空間寄存器 19.1.5 PCIe的交換機制 19.2 SATA 19.2.1 引言 19.2.2 SATA架構 19.2.3 SATA的其他變種 19.3 通用串行總線 19.3.1 引言 19.3.2 全速、高速和超高速USB 19.3.3 USB的顯著功能特性 19.3.4 USB 3.0(超高速USB) 19.4 雷電接口 19.4.1 雷電接口介紹 19.4.2 雷電接口架構 第20章 串行協議(第2部分) 20.1 以太網簡介 20.2 OSI和以太網協議層次 20.3 以太網幀格式 20.4 10 Mbps以太網 20.5 快速以太網(100 Mbps) 20.6 千兆位以太網(1 Gbps) 20.7 萬兆位以太網(10 Gbps) 20.8 40 G和100 G以太網 20.9 以太網橋接器、交換機與路由器 附錄A 資源 附錄B FPGA 101 附錄C 用於驗證的測試平臺(testbench) 附錄D System Verilog斷言(SVA) 縮略詞