Verilog编程艺术

Verilog编程艺术 pdf epub mobi txt 电子书 下载 2026

出版者:电子工业出版社
作者:魏家明
出品人:
页数:456
译者:
出版时间:2014-1
价格:79.00元
装帧:平装
isbn号码:9787121220616
丛书系列:
图书标签:
  • 技术
  • 自我修炼
  • verilog
  • HDl
  • 杂七杂八
  • IC
  • Verilog
  • 数字电路
  • 硬件描述
  • FPGA
  • 数字系统设计
  • 编程艺术
  • 电子工程
  • 集成电路
  • 硬件编程
  • 数字逻辑
想要找书就要到 小美书屋
立刻按 ctrl+D收藏本页
你会得到大惊喜!!

具体描述

本书深入地探讨了Verilog编程,分为七个部分:设计原则、语言特性、书写文档、高级设计、时钟和复位、验证之路、其他介绍。本书对这些部分做了重点的探讨:Verilog编码风格、Verilog-2001的新特性、简洁高效的编程、容易出错的语言元素、可配置设计、时钟生成、复位设计、验证方法等。另外,本书还对SystemVerilog做了简单的介绍。

《晶体管逻辑设计》 本书旨在为读者提供一个全面而深入的晶体管逻辑设计入门。它将带领读者从最基础的半导体物理原理出发,逐步构建起理解数字逻辑电路的基石,最终能够独立完成复杂的集成电路设计。 第一部分:数字逻辑基础 晶体管的奥秘: 我们将从MOSFET(金属氧化物半导体场效应晶体管)的基本结构和工作原理开始,深入解析其开关特性、栅极电压、漏极电流以及沟道长度调制等关键参数。理解晶体管如何作为基本的电子开关,是掌握后续所有数字逻辑设计的前提。我们将探讨P沟道和N沟道MOSFET的区别,以及CMOS(互补金属氧化物半导体)技术为何成为现代数字电路的主流选择,因为它在功耗和性能上都表现出色。 逻辑门电路的构建: 基于晶体管的开关特性,我们将详细讲解如何构建最基本的逻辑门电路,包括NOT门(反相器)、AND门、OR门、NAND门和NOR门。每种逻辑门的实现都将通过具体的晶体管连接图进行展示,并辅以真值表来验证其功能。我们将深入分析CMOS逻辑门的结构,理解其互补结构的优势,以及如何通过它们来构建更复杂的组合逻辑。 组合逻辑电路设计: 本部分将介绍如何将基本的逻辑门组合起来,实现更复杂的逻辑功能。我们将学习布尔代数的基本定理和规则,以及如何利用它们对逻辑表达式进行化简,从而优化电路的门数和延迟。卡诺图(Karnaugh Map)作为一种直观的逻辑化简工具,也将被详细介绍和应用。我们将通过大量实例,展示如何根据需求设计加法器、减法器、多路选择器、译码器等常见的组合逻辑模块,并理解它们在实际应用中的作用。 序向逻辑电路基础: 区别于组合逻辑,序向逻辑电路的状态会随着时间而改变,并依赖于之前的输入。我们将引入触发器(Flip-Flop)的概念,包括SR触发器、D触发器、T触发器和JK触发器,并详细讲解它们的结构、工作原理以及状态转换图。寄存器(Register)作为触发器的集合,将用于存储多位数据。我们将探讨如何设计移位寄存器,以及它们在数据传输和处理中的应用。 时序逻辑电路设计: 同步与异步时序逻辑是本部分的重点。我们将深入理解时钟信号的作用,以及如何在同步系统中设计状态机(State Machine)。有限状态机(Finite State Machine, FSM)将以摩尔(Moore)型和米利(Mealy)型两种模型进行介绍,并通过状态转移图和状态表来清晰地描绘其行为。我们将学习如何将状态机转化为实际的硬件电路,并分析其在控制逻辑、序列发生器等方面的应用。 第二部分:现代集成电路设计流程 硬件描述语言(HDL)入门: 为了应对日益复杂的电路设计,硬件描述语言成为必不可少的工具。我们将选择一种流行的HDL(例如,VHDL或SystemVerilog)作为学习对象,介绍其基本语法、数据类型、运算符以及结构化语句。读者将学会如何使用HDL来描述逻辑门、组合逻辑和序向逻辑模块,并理解HDL代码与实际硬件电路之间的映射关系。 仿真与验证: 设计的正确性是至关重要的。本部分将详细介绍仿真(Simulation)的概念,包括事务级仿真(Transaction-Level Modeling, TLM)和门级仿真(Gate-Level Simulation)。我们将学习如何编写测试平台(Testbench)来驱动被测模块(DUT, Device Under Test)并验证其输出。各种验证技术,如功能覆盖率(Functional Coverage)、代码覆盖率(Code Coverage)和形式验证(Formal Verification),也将被提及,帮助读者建立起严格的验证意识。 综合(Synthesis): HDL代码需要转化为实际的门级网表(Netlist)。综合工具是实现这一过程的关键。我们将探讨综合的基本原理,理解综合工具如何根据目标库(Target Library)和设计约束(Constraints)来优化电路的面积、功耗和时序。读者将了解综合过程的输入和输出,以及如何调整综合选项以获得最佳结果。 布局与布线(Place and Route): 综合得到的门级网表还需要映射到物理芯片上。布局(Place)是将逻辑门放置到芯片上的物理位置,而布线(Route)则是连接这些逻辑门之间的物理导线。本部分将简要介绍物理设计的基本概念,包括物理约束、时序分析(Timing Analysis)在布局布线阶段的重要性,以及如何处理时序违例(Timing Violations)。 时序约束与分析: 确保电路在规定的时钟频率下正常工作是集成电路设计的核心挑战之一。我们将深入探讨时序约束(Timing Constraints)的设置,包括时钟定义、输入输出延迟等。时序分析工具将用于检测和修复时序违例,确保电路满足建立时间(Setup Time)和保持时间(Hold Time)的要求。我们将学习如何解读时序报告,并采取相应的优化措施。 第三部分:高级主题与应用 低功耗设计技术: 随着移动设备和嵌入式系统的普及,低功耗设计变得越来越重要。我们将介绍多种低功耗设计技术,例如时钟门控(Clock Gating)、功率门控(Power Gating)、动态电压频率调整(DVFS)以及数据通路优化等。 可重用 IP 设计: 在大型SoC(System on Chip)设计中,IP(Intellectual Property)核的重用成为提高效率的关键。我们将讨论如何设计可重用的IP模块,包括其接口规范、参数化设计以及文档要求。 FPGA 平台设计: FPGA(Field-Programmable Gate Array)为原型验证和中低批量产品提供了灵活的实现平台。我们将介绍FPGA的设计流程,包括逻辑综合、布局布线以及比特流(Bitstream)生成。读者将了解FPGA的架构,以及如何利用FPGA进行系统级验证和快速原型开发。 实际案例分析: 本书将穿插一些实际的电路设计案例,例如简单的CPU控制器、UART接口、I2C控制器等,帮助读者将理论知识应用于实践。通过对这些案例的分析,读者将更直观地理解设计流程中的各个环节,以及如何解决实际设计中遇到的问题。 通过本书的学习,读者将能够扎实掌握晶体管逻辑设计的基础理论,熟悉现代集成电路设计的基本流程,并对一些高级设计概念有所了解,为进一步深入数字IC设计领域打下坚实的基础。

作者简介

目录信息

目 录
第一部分 设 计 原 则
第1章 美的设计 2
1.1 美学观点 2
1.2 美是修养 3
1.3 专业术语 4
第2章 高效之道 5
2.1 敏捷开发 5
2.2 代码质量 6
2.3 版本控制 7
2.4 提早集成 7
第3章 组织管理 9
3.1 植物分类 9
3.2 SoC特性 11
3.3 设计流程 12
3.4 仔细规划 12
3.5 管理表格 13
3.6 模块层次 14
3.7 目录组织 14
第4章 使用工具 19
4.1 使用Emacs 19
4.1.1 Emacs介绍 19
4.1.2 Emacs安装 19
4.1.3 常用快捷键 20
4.1.4 我的.emacs 21
4.1.5 cua-base.el 22
4.1.6 verilog-mode.el 23
4.1.7 shell buffer 23
4.2 使用Shell 24
4.2.1 Shell介绍 24
4.2.2 Shell例子 24
4.2.3 Perl例子 25
4.3 使用CVS 26
4.3.1 CVS介绍 26
4.3.2 CVS术语 27
4.3.3 CVS初始化 27
4.3.4 CVS常用命令 29
第5章 编码风格 31
5.1 干干净净 32
5.2 代码划分 32
5.3 代码要求 33
5.3.1 Verilog部分 33
5.3.2 SystemVerilog部分 40
5.4 名字定义 40
5.5 书写格式 42
5.5.1 模块端口声名 42
5.5.2 模块实例化 45
5.5.3 函数和任务调用 47
5.5.4 书写语句 47
5.5.5 书写表达式 48
5.6 添加注释 49
5.7 参数化 50
5.8 lint检查 52
第二部分 语 言 特 性
第6章 Verilog特性 54
6.1 Verilog标准 54
6.2 抽象级别 54
6.3 可综合子集 55
6.4 保持一致 57
第7章 常数 58
7.1 整数(integer) 58
7.2 实数(real) 60
7.3 字符串(string) 60
7.4 标识符(identifier) 60
第8章 数据类型 61
8.1 线网(net) 61
8.1.1 wire和tri 61
8.1.2 wor、wand、trior、triand 61
8.1.3 tri0、tri1 61
8.1.4 uwire 61
8.1.5 supply0、supply1 62
8.1.6 驱动强度 62
8.1.7 默认net 62
8.2 变量(variable) 62
8.3 线网和变量的区别 63
8.4 向量(vector) 64
8.5 数组(array) 65
8.6 多维数组 65
第9章 表达式 67
9.1 操作符(Operator) 67
9.1.1 操作符的优先级(Operator priority) 68
9.1.2 表达式中使用整数 68
9.1.3 算数操作符(Arithmetic operators) 69
9.1.4 算术表达式中的regs和integers 69
9.1.5 比较操作符(Compare operators) 70
9.1.6 逻辑操作符(Logical operators) 70
9.1.7 位运算操作符(Bitwise operators) 71
9.1.8 归约操作符(Reduction operators) 71
9.1.9 移位操作符(Shift operators) 71
9.1.10 条件操作符(Conditional operator) 72
9.1.11 连接操作符(Concatenations) 72
9.2 操作数(Operands) 73
9.2.1 向量的抽取(bit-select and part-select) 73
9.2.2 part-select的例子 75
9.2.3 数组的访问 75
9.2.4 字符串 76
9.3 表达式位长(Expression bit lengths) 77
9.3.1 表达式位长规则 77
9.3.2 表达式位长问题的例子A 78
9.3.3 表达式位长问题的例子B 79
9.3.4 表达式位长问题的例子C 79
9.3.5 表达式位长问题的例子D 79
9.3.6 表达式位长问题的例子E 80
9.4 符号表达式(Signed expressions) 80
9.4.1 表达式类型规则 81
9.4.2 计算表达式的步骤 81
9.4.3 执行赋值的步骤 82
9.4.4 signed表达式中处理x和z 82
9.4.5 signed应用的例子 82
9.4.6 signed应用的错误 83
9.5 赋值和截断(Assignments and truncation) 84
9.6 与x/z比较 85
第10章 赋值操作 86
10.1 连续赋值 86
10.2 过程赋值 87
第11章 门级和开关级模型 88
11.1 门和开关的声明语法 88
11.1.1 门和开关类型 88
11.1.2 驱动强度 88
11.1.3 延迟 89
11.1.4 实例数组 89
11.2 and、nand、nor、or、xor、xnor 90
11.3 buf、not 90
11.4 bufif1、bufif0、notif1、notif0 90
11.5 MOS switches 90
11.6 Bidirectional pass switches 91
11.7 pullup、pulldown 91
第12章 用户定义原语 92
12.1 UDP定义 92
12.1.1 UDP状态表 92
12.1.2 状态表符号 93
12.2 组合UDP 93
12.3 电平敏感时序UDP 93
12.4 沿敏感时序UDP 94
第13章 行为模型 97
13.1 概览 97
13.2 过程赋值 98
13.2.1 阻塞赋值 98
13.2.2 非阻塞赋值 99
13.3 过程连续赋值 102
13.3.1 assign和deassign过程语句 103
13.3.2 force和release过程语句 103
13.4 条件语句 104
13.5 循环语句 105
13.5.1 for循环例子 106
13.5.2 disable语句 107
13.6 过程时序控制 108
13.6.1 延迟控制(Delay control) 108
13.6.2 事件控制(Event control) 108
13.6.3 命名事件(Named events) 109
13.6.4 事件or操作符(Event or operator) 109
13.6.5 隐含事件列表(Implicit event_expression list) 109
13.6.6 电平敏感事件控制(Level-sensitive event control) 111
13.6.7 赋值间时序控制(Intra-assignment timing controls) 111
13.7 块语句 113
13.7.1 顺序块(Sequential block) 113
13.7.2 并行块(Parallel block) 114
13.7.3 块名字(Block names) 114
13.7.4 开始和结束时间(Start and finish times) 114
13.8 结构化过程 116
13.8.1 initial construct 116
13.8.2 always construct 116
13.8.3 always的敏感列表 117
13.8.4 并发进程 117
13.9 always有关的问题 118
13.9.1 敏感列表不完整 118
13.9.2 赋值顺序错误 119
第14章 case语句 120
14.1 case语句定义 121
14.2 case语句的执行 122
14.3 Verilog和VHDL对比 123
14.4 case的应用 123
14.5 casez的应用 125
14.6 描述状态机 126
14.7 casex的误用 127
14.8 casez的误用 128
14.9 full_case 和parallel_case 128
14.10 full_case 129
14.10.1 不是full的case语句 129
14.10.2 是full的case语句 129
14.10.3 使用full_case综合指令 130
14.10.4 full_case综合指令的缺点 131
14.10.5 使用full_case指令后还是生成Latch 132
14.11 parallel_case 132
14.11.1 不是parallel的case语句 132
14.11.2 是parallel的case语句 133
14.11.3 使用parallel_case综合指令 133
14.11.4 parallel_case综合指令的缺点 134
14.11.5 没有必要的parallel_case指令 135
14.12 综合时的警告 135
14.13 case语句的编码原则 136
第15章 task和function 137
15.1 task和function之间的不同点 137
15.2 task的声明和使能 137
15.2.1 task的声明 137
15.2.2 task的使能和参数传递 138
15.2.3 task的内存使用和并发进程 140
15.3 disable语句 141
15.3.1 disable语句的例子A 141
15.3.2 disable语句的例子B 143
15.4 function的声明和调用 145
15.4.1 function的声明 145
15.4.2 function的返回值 147
15.4.3 function的调用 147
15.4.4 function的规则 147
15.4.5 constant function 148
15.5 task的误用 149
15.6 function的误用 149
第16章 调度和赋值 151
16.1 仿真过程 151
16.2 事件仿真 151
16.3 仿真参考模型 152
16.4 分层事件队列 153
16.4.1 事件队列分类 154
16.4.2 事件队列特性 155
16.4.3 事件调度例子 155
16.5 确定性和不确定性 157
16.5.1 确定性(Determinism) 157
16.5.2 不确定性(Nondeterminism) 157
16.6 赋值的调度含义 158
16.6.1 连续赋值 159
16.6.2 过程连续赋值 159
16.6.3 阻塞赋值 159
16.6.4 非阻塞赋值 159
16.6.5 开关处理 159
16.6.6 端口连接 159
16.6.7 任务和函数 160
16.7 阻塞赋值和非阻塞赋值 160
16.7.1 阻塞赋值 160
16.7.2 非阻塞赋值 161
16.8 赋值使用原则 161
16.9 自己触发自己 162
16.10 仿真零延迟RTL模型 163
16.11 惯性延迟和传输延迟 165
16.11.1 门级仿真中的传输延迟 166
16.11.2 各种#delay的位置 168
16.11.3 仿真时钟生成方法 169
16.12 延迟线模型 170
16.13 使用#1延迟 171
16.14 多个公共时钟和竞争条件 172
16.15 避免混杂阻塞赋值和非阻塞赋值 173
16.16 RTL和门级混合仿真 176
16.16.1 RTL-to-Gates仿真 177
16.16.2 Gates-to-RTL仿真 177
16.16.3 有时钟偏差的门级时钟树 178
16.16.4 有时钟偏差的Vendor模型 178
16.16.5 错误的Vendor模型 179
16.16.6 结论和建议 183
16.17 带有SDF延迟的门级仿真 183
16.17.1 全系统仿真 183
16.17.2 软件要花钱 184
16.17.3 门级回归仿真 184
16.18 验证平台技巧 185
16.18.1 在0时刻复位 186
16.18.2 时钟沿之后复位 186
16.18.3 创建仿真时钟 186
16.18.4 在无效沿输入激励 187
第17章 层次结构 188
17.1 模块 188
17.1.1 模块定义 188
17.1.2 模块实例 188
17.2 参数 188
17.2.1 参数声明 189
17.2.2 参数调整 189
17.2.3 参数传递 190
17.2.4 参数依赖 192
17.2.5 内部参数 193
17.2.6 clog2 193
17.2.7 指数** 194
17.3 端口 194
17.3.1 端口声明 194
17.3.2 端口连接 195
17.3.3 实数传递 196
17.4 Generate语句 196
17.4.1 Loop generate construct 197
17.4.2 Conditional generate construct 200
17.5 实例数组 201
17.6 层次名字 203
第18章 系统任务和函数 205
18.1 显示任务 205
18.1.1 显示和写出任务 205
18.1.2 探测任务 208
18.1.3 监控任务 209
18.2 文件读写 209
18.2.1 打开和关闭文件 209
18.2.2 文件输出 211
18.2.3 字符串输出 212
18.2.4 文件输入 213
18.2.5 文件定位 216
18.2.6 刷新输出 216
18.2.7 错误状态 216
18.2.8 检查文件尾部 217
18.2.9 加载文件数据 217
18.3 时间比例 218
18.3.1 $printtimescale 218
18.3.2 $timeformat 218
18.4 仿真控制 218
18.4.1 $finish 218
18.4.2 $stop 218
18.5 仿真时间 218
18.6 转换函数 219
18.7 概率分布 220
18.7.1 $random 220
18.7.2 $dist_functions 220
18.8 命令行输入 220
18.8.1 $test$plusargs 221
18.8.2 $value$plusargs 221
18.9 数学运算 223
18.9.1 整数函数 223
18.9.2 实数函数 223
18.10 波形记录 224
第19章 编译指令 225
19.1 `celldefine和`endcelldefine 225
19.2 `default_nettype 225
19.3 `define和`undef 226
19.4 `ifdef、`else、`elsif、`endif、`ifndef 227
19.5 `include 228
19.6 `resetall 228
19.7 `line 228
19.8 `timescale 229
19.9 `unconnected_drive和`nounconnected_drive 230
19.10 `begin_keywords和`end_keywords 230
19.11 `pragma 230
第20章 Specify块 231
20.1 specify块声明 231
20.2 speparam 231
20.3 模块路径声明 232
20.3.1 模块路径要求 232
20.3.2 简单路径 232
20.3.3 沿敏感路径 233
20.3.4 状态依赖路径 234
20.4 模块路径延迟 235
第21章 时序检查 237
21.1 概览 237
21.2 使用稳定窗口的时序检查 237
21.2.1 $setup、$hold、$setuphold 238
21.2.2 $recovery、$removal、$recrem 238
21.3 时钟和控制信号的时序检查 240
21.3.1 $skew、$timeskew、$fullskew 240
21.3.2 $width 240
21.3.3 $period 241
21.3.4 $nochange 241
21.4 使用notifier响应时序违反 241
21.5 使用条件事件 242
21.6 时序检查中的Vector 243
21.7 Negative timing check 243
第22章 反标SDF 246
22.1 SDF标注器 246
22.2 SDF construct到Verilog的映射 246
22.2.1 SDF路径延迟到Verilog的映射 246
22.2.2 SDF时序检查到Verilog的映射 247
22.2.3 SDF互连延迟的标注 248
22.3 $sdf_annotate 249
22.4 SDF文件例子 250
第23章 编程语言接口 252
23.1 DirectC 252
23.2 SystemVerilog 252
第24章 综合指令 253
24.1 Synopsys综合指令 253
24.2 使用综合指令 253
24.3 使用translate_off/on 254
24.4 误用translate_off/on 256
24.5 使用attribute 256
第三部分 书 写 文 档
第25章 书写文档 260
25.1 文档格式 260
25.2 定义文档 261
25.3 应用文档 262
25.4 设计文档 262
25.5 备份文档 263
25.6 GPIO设计 263
第26章 GPIO应用文档 264
26.1 Overview 264
26.2 Register Description 264
26.2.1 PIN Level Register (PIN) 265
26.2.2 Data Register (DAT) 265
26.2.3 Data Set Register (DATS) 265
26.2.4 Data Clear Register (DATC) 265
26.2.5 Mask Register (IM) 266
26.2.6 Mask Set Register (IMS) 266
26.2.7 Mask Clear Register (IMC) 266
26.2.8 PULL Enable Register (PEN) 266
26.2.9 PEN Enable Set Register Register (PENS) 266
26.2.10 PEN Enable Clear Register Register (PENC) 266
26.2.11 PSEL Select Register (PSEL) 266
26.2.12 PSEL Enable Set Register Register (PSELS) 266
26.2.13 PSEL Enable Clear Register Register (PSELC) 267
26.2.14 Function Register (FUN) 267
26.2.15 Function Set Register (FUNS) 267
26.2.16 Function Clear Register (FUNC) 267
26.2.17 Select Register (SEL) 267
26.2.18 Select Set Register (SELS) 267
26.2.19 Select Clear Register (SELC) 267
26.2.20 Direction Register (DIR) 267
26.2.21 Direction Set Register (DIRS) 268
26.2.22 Direction Clear Register (DIRC) 268
26.2.23 Trigger Register (TRG) 268
26.2.24 Trigger Set Register (TRGS) 268
26.2.25 Trigger Clear Register (TRGC) 268
26.2.26 FLAG Register (FLG) 268
26.2.27 FLAG Clear Register (FLGC) 269
26.3 Program Guide 269
26.3.1 GPIO Function Guide 269
26.3.2 Alternate Function Guide 269
26.3.3 Interrupt Function Guide 269
26.3.4 Disable Interrupt Function Guide 270
第27章 GPIO设计文档 271
27.1 文件列表(见表27-1) 271
27.2 端口列表(见表27-2) 271
27.3 配置参数(见表27-3) 272
第四部分 高 级 设 计
第28章 使用IP 274
28.1 Cadence的IP 274
28.2 Cadence的VIP 275
28.3 Synopsys的IP 275
28.4 DesignWare Building Block 276
28.5 在FPGA上使用DesignWare 276
第29章 代码优化 278
29.1 代码可读 278
29.2 简洁编码 279
29.3 优化逻辑 281
29.4 优化迟到信号 281
29.5 括号控制结构 282
第30章 状态机设计 283
30.1 状态机类型 283
30.2 状态编码方式 283
30.3 二进制编码FSM 284
30.3.1 两个always块 284
30.3.2 重要的编码规则 285
30.3.3 错误状态的转换 285
30.3.4 next的默认值 285
30.4 独热码编码FSM 286
30.5 寄存器输出 287
第31章 可配置设计 289
31.1 格雷码转换 289
31.2 通用串行CRC 290
31.2.1 general_crc.v 290
31.2.2 testbench 292
31.3 FIFO控制器 293
31.4 RAM Wrapper 例子 296
31.4.1 常规方法 296
31.4.2 名字规范化 297
31.4.3 RF1_wrapper.v 298
31.4.4 gen_wrapper.pl 302
31.4.5 ram_def.txt例子 306
31.4.6 生成wrapper 307
31.5 可配置的GPIO设计 308
31.5.1 gpio.v 308
31.5.2 gpio_params.v 317
31.5.3 gpio_check.v 317
31.5.4 gpio_reg.v 318
31.5.5 gpio_sync.v 319
31.6 可配置的BusMatrix 320
31.6.1 BusMatrix简介 320
31.6.2 设计ABM 321
31.6.3 mini_abm 322
31.6.4 large_abm 331
31.7 可配置的Andes Core N801 333
31.8 可配置的ARM926EJS 334
31.9 灵活的coreConsultant 336
第32章 可测性设计 337
32.1 内部扫描 337
32.2 内建自测 339
32.3 边界扫描 340
第五部分 时钟和复位
第33章 异步时序 342
33.1 亚稳态 342
33.2 MTBF 343
33.3 同步器 344
33.3.1 电平同步器 344
33.3.2 边沿检测同步器 345
33.3.3 脉冲检测同步器 345
33.4 同步多位数据 347
33.5 异步FIFO 348
33.6 Design Ware 348
33.7 DW_fifoctl_s2_sf 349
33.8 门级仿真 351
第34章 时钟生成 352
34.1 同步电路 352
34.2 设计原则 353
34.3 分频器 353
34.3.1 1/n分频器 353
34.3.2 n/d分频器 355
34.4 时钟切换 355
34.5 时钟生成 358
第35章 时钟例子 362
35.1 Overview 362
35.2 CGU Clock 362
35.2.1 Clock List 362
35.2.2 Clock Diagram(见图35-1) 363
35.2.3 Clock Divider Rate(见表35-1) 364
35.3 Register Description(见表35-2) 364
35.3.1 CGU PLL Divider Register (CGU_PDR) 364
35.3.2 CGU Counter Regsister (CGU_CNT) 365
35.3.3 CGU PLL Control Register (CGU_PCR) 365
35.3.4 CGU Low Power Control Register (CGU_LPC) 365
35.3.5 CGU Status Register (CGU_CST) 365
35.3.6 CGU Divider 0 Register (CGU_DV0→1/s) 366
35.3.7 CGU Divider 1 Register (CGU_DV1→1/x) 366
35.3.8 CGU Divider 2 Register (CGU_DV2→1/n) 366
35.3.9 CGU Divider 3 Register (CGU_DV3→1/n) 367
35.3.10 CGU Divider 4/5/6/7 Register (CGU_DV4/5/6/7→n/d) 367
35.3.11 CGU Divider 8 Register (CGU_DV8→n/d) 367
35.3.12 CGU Divider 9 Register (CGU_DV9→n/d) 367
35.3.13 CGU Module Stop 0 Register (CGU_MS0) 367
35.3.14 CGU Module Stop 1 Register (CGU_MS1) 368
35.3.15 CGU Module Stop 2 Register (CGU_MS2) 368
35.3.16 CGU Reset Control Register (CGU_RCR) 369
35.3.17 CGU Reset Status Register (CGU_RST) 369
35.4 PLL Structure 369
35.4.1 Frequency Calculation 370
35.4.2 VCO Frequency Limitation 370
35.4.3 PFD Clock Frequency Limitation 370
35.5 PLL Control 371
35.6 Sleep and Wakeup 371
35.6.1 State switch 371
35.6.2 How to wakeup 372
35.7 Module Stop 372
35.8 Application Notes 373
第36章 复位设计 374
36.1 复位的用途 374
36.2 寄存器编码风格 374
36.2.1 有/无同步复位寄存器 374
36.2.2 寄存器推导原则 376
36.3 同步复位 376
36.3.1 编码风格和电路 377
36.3.2 同步复位的优点 378
36.3.3 同步复位的缺点 379
36.4 异步复位 379
36.4.1 编码风格和电路 380
36.4.2 既有异步复位又有异步置位的寄存器 380
36.4.3 异步复位的优点 381
36.4.4 异步复位的缺点 382
36.5 异步复位的问题 382
36.5.1 复位recovery时间 383
36.5.2 复位撤销经历不同的时钟周期 383
36.6 复位同步器 383
36.6.1 复位同步器有亚稳态吗? 384
36.6.2 错误的ASIC Vendor模型 385
36.6.3 有缺点的复位同步器 385
36.6.4 复位时的仿真验证 386
36.7 复位分布树 387
36.7.1 同步复位分布技巧 389
36.7.2 异步复位分布技巧 389
36.7.3 复位分布树的时序分析 390
36.8 复位毛刺的过滤 391
36.9 异步复位的DFT 391
36.10 多时钟复位的问题 392
36.10.1 非协调的复位撤销 392
36.10.2 顺序协调的复位撤销 393
36.11 结论 394
第六部分 验 证 之 路
第37章 验证之路 396
37.1 整洁验证 397
37.2 验证目标 398
37.3 验证流程 398
37.4 验证计划 398
37.5 随机验证 399
37.6 直接验证 399
37.7 白盒验证 399
37.8 模块验证 400
37.9 系统验证 400
37.9.1 验证重点 400
37.9.2 验证环境 401
37.9.3 IP互连 401
37.9.4 性能验证 401
37.10 DFT验证 402
37.11 网表验证 402
37.12 高级抽象 403
37.13 灵活验证 405
37.14 ARM926EJS的Validation环境 406
37.14.1 Validation tools 407
37.14.2 Validation configuration files 407
37.14.3 Validation test suites 407
37.14.4 Validation flow 408
37.14.5 Building the model 408
37.14.6 Running Validation test suites 408
37.14.7 Debugging a single Validation test 410
37.15 AHB BusMatrix的验证 411
37.16 某芯片的SoC验证环境 411
第七部分 其 他 介 绍
第38章 SystemVerilog特性 414
38.1 SystemVerilog与Systemc比较 414
38.2 SystemVerilog的特点 414
38.3 新的数据类型 415
38.3.1 整型和实型 415
38.3.2 新的操作符 416
38.3.3 数组 416
38.3.4 队列 417
38.3.5 枚举类型 417
38.3.6 结构体和共同体 417
38.4 always_comb、always_latch和always_ff 417
38.5 unique和priority 418
38.6 loop、break和continue 419
38.7 task和function 419
38.7.1 静态和自动作用域 419
38.7.2 参数传递 420
38.7.3 参数中的默认值 420
38.8 Port connection 421
38.9 Tag 421
38.10 Interface 422
38.11 class和object 425
38.11.1 对象的概念 425
38.11.2 类的创建 426
38.11.3 类的继承 427
38.11.4 类的randomize 428
38.11.5 类的cover group 429
38.12 VMM、OVM和UVM 429
参考文献 431
关于版权 432
· · · · · · (收起)

读后感

评分

评分

评分

评分

评分

用户评价

评分

让我印象深刻的是书中对于验证和仿真策略的阐述,这部分内容的分量和深度,远超我预期的“编程艺术”范畴。通常的教材可能只是一笔带过仿真指令,但这本则将仿真视为设计流程不可或缺的一部分。作者专门用一整章的篇幅详细讲解了如何构建有效的测试平台(Testbench),特别是如何利用更高级的机制,比如基于约束的随机激励生成(Constrained Random Verification)的理念初步引入,虽然没有深入讲解SystemVerilog的UVM框架,但其思想的萌芽已然显现。书中关于覆盖率收集和关键路径时序分析的讨论,也极大地拓展了我对“完成度”的理解。过去我总觉得代码能跑通就算成功了,但这本书让我意识到,没有经过严苛验证和充分覆盖的代码,在流片或量产阶段是极度危险的。这种对质量的极致追求,使得这本书不仅仅是一本工具书,更像是一部关于如何构建“无懈可击”数字系统的操作手册。读完这部分,我对编写可验证代码的重视程度达到了前所未有的高度。

评分

这本书的语言风格,初读时可能略显学术化,但随着阅读的深入,你会发现那份严谨背后隐藏着一种对技术细节近乎偏执的追求,这恰恰是高级设计所必需的素质。作者在阐述复杂概念时,很少使用过于口语化的表达,而是力求精确,每一个术语的使用都经过了深思熟虑。比如在讨论异步复位和同步复位逻辑的实现时,书中不仅展示了标准的代码写法,还引用了行业规范中关于复位信号毛刺处理的严格要求,并辅以仿真波形图来佐证不同实现方式的健壮性差异。这种对工程鲁棒性的强调,体现了作者深厚的实战经验。我个人特别喜欢它在介绍高级建模技巧时所采取的对比分析法,比如将行为级描述与寄存器传输级(RTL)描述进行并列比较,清晰地揭示了不同抽象层次对最终综合结果的影响。阅读过程中,我经常需要停下来,在脑海中将书中的逻辑结构映射到自己正在进行的项目上,这种强烈的代入感和启发性,是许多纯理论书籍所不具备的。它成功地架起了一座从理论知识到生产力工具的桥梁。

评分

翻阅这本书的章节目录时,我最深刻的感受是其内容的层次感极其丰富,绝非那种浅尝辄止的入门指南。它似乎深谙“道”与“术”的关系,前半部分着重于建立对硬件描述思维的正确认知,强调结构化、并行化思维的培养,这对我纠正过去那种偏向于软件顺序执行的编程习惯起到了决定性的作用。我记得其中一个关于管道化设计(Pipelining)的章节,作者没有直接给出复杂的代码块,而是先用一个生动的比喻解释了吞吐量和延迟的概念,然后才逐步引入Verilog中的寄存器放置和时序约束处理。这种循序渐进,结合实际工程问题的讲解方式,极大地降低了学习曲线的陡峭程度。更让我惊喜的是,书中对那些容易被初学者忽略的“陷阱”和“细节”进行了深入的剖析,比如如何避免锁定的竞争条件(Race Conditions),如何正确地使用`initial`块和`always @*`的语义区别。读到这些内容时,常常有一种醍醐灌顶的感觉,仿佛作者直接在我的代码审查中提出了宝贵意见。这本书给人的感觉是,它不仅在教你写代码,更是在塑造你作为一个合格数字电路设计师的心态和方法论。

评分

这本书的封面设计,说实话,第一眼吸引我的是那种沉稳又不失现代感的深蓝色调,配上那种经典的衬线字体,透露出一种技术书籍应有的严谨性。拿到手里掂量了一下分量,厚度相当可观,光是这点就让人对内容的广度和深度充满了期待。我记得当时是在一个专门的技术书店里偶然发现它的,当时手里正拿着几本关于FPGA架构的书,但总感觉缺少一本能将底层硬件描述语言的精髓和设计哲学讲得透彻的“内功心法”。这本书的排版布局非常清晰,章节间的过渡自然流畅,即使是初次接触硬件描述语言的新手,也能感觉到作者在结构组织上的用心良苦。它不是那种只罗列语法和简单示例的教科书,更像是一位经验丰富的工程师在娓娓道来如何用代码“驯服”硅片,如何构建出高效、可综合的数字逻辑。书中的插图和图表,比如时序图的绘制和状态机的可视化表示,都做得非常专业,极大地帮助了对抽象概念的理解。我尤其欣赏作者在介绍基础概念时,会穿插一些业界最佳实践的提示,这让这本书的实用价值远超理论探讨。整本书散发着一种“干货满满”的气息,让人迫不及待地想沉浸其中,开始一场深入的数字设计之旅。

评分

这本书在整体的阅读体验上,营造了一种探索与实践并重的氛围。它并非一本让你在咖啡馆里轻松翻阅的读物,它要求你必须准备好一个可以动手实践的环境,因为书中的每一个关键代码示例,都像是精心设计的实验,需要读者亲自输入、编译、观察结果才能真正消化吸收。我记得有几段关于跨时钟域(CDC)处理的章节,文字描述得非常清晰,但如果不亲手在波形图上观察到亚稳态的产生和被同步逻辑有效抑制的过程,那种安全感和理解深度是无法建立起来的。作者的叙事方式有一种魔力,它让你感觉自己不是在被动接受知识,而是在和一位资深导师并肩作战,共同攻克技术难关。这种交互式的学习体验,极大地提高了知识的留存率。总而言之,这是一本需要反复研读、并随时翻阅查阅的参考书,它的价值会随着你项目经验的增加而不断显现,是案头必备的“工具箱”中的重磅器械。

评分

评分

评分

评分

评分

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2026 book.quotespace.org All Rights Reserved. 小美书屋 版权所有