目 录 1
第一章绪论 1
1.1初步了解Verilog HDL 3
1.2 Verilog HDL的历史 4
1.3 VerilogHDL的主要能力 5
1.4系统集成电路设计技术 7
1.4.1 系统级集成电路设计方法 7
1.4.2系统级集成电路设计中的IP问题 8
1.4.3 系统级集成电路测试技术 9
1.4.4 系统级集成电路芯片加工技术 9
1.4.5 系统级集成电路的发展未来 10
1.5 与VHDL的区别 11
2.1概述 13
第二章 VHDL语言初探 13
2.2 EDA 16
2.3相关概念 17
2.3.1行为描述语言 17
2.3.2数据流描述语言 18
2.3.3 网表描述语言 19
2.4硬件仿真 19
2.5VHDL背景 20
2.5.1 VHDL历史与特点 20
2.5.2 已存在的语言 20
2.5.3VHDL要求 21
2.6 VHDL语言 21
2.7 VHDL中的基本概念 22
2.7.1基本概念 22
2.7.2并发性和时序 23
2.7.3对象与数据类型 24
2.7.4 VHDL的主要构件 28
2.8行为建模 30
2.8.1行为建模引论 30
2.8.2传输延时和固有延时的对比 31
2.8.3仿真delta 32
2.8.4驱动 33
2.8.5类属 34
2.8.6块语句 35
2.9顺序进程 37
2.9.1进程语句 37
2.9.2信号赋值和变量赋值 38
2.9.3顺序语句 39
2.10值类属性 44
2.10.1值类型属性 45
2.10.2数组属性 46
2.10.3值块属性 47
2.10.4函数类属性 48
2.10.5信号类属性 53
第三章 Verilog结构 54
3.1模块 54
3.2模块测试 61
3.3时延及数据流 63
3.3.1 时延 63
3.3.2数据流描述方式 64
3.4行为描述方式 65
3.5结构化描述形式 67
3.6混合设计描述方式 69
3.7设计模拟 69
3.8.1 Verilog语言的3种描述方法 72
3.8描述 72
3.8.2词法习俗 73
3.9数据类型 76
3.9.1按物理数据类型分 78
3.9.2按抽象数据类型分 78
3.10运算符和表达式 79
3.10.1算术运算符 79
3.10.2符号运算符 80
3.10.3关系运算符 80
3.10.4逻辑运算符 83
3.10.5位逻辑运算符 83
3.10.6一元约简运算符 84
3.10.7其他运算符 84
3.10.10 for循环语句 86
3.10.9过程语句 86
3.10.8运算符优先级排序 86
3.10.11 while循环语句 87
3.10.12 case语句 87
3.10.13 repeat循环语句 88
3.10.14 forever循环语句 88
3.11其他语句 89
3.11.1参数语句 89
3.11.2连续赋值语句 90
3.11.3阻塞和无阻塞过程赋值 90
3.12任务和函数结构 91
3.13时序控制 92
3.13.1延迟控制(#) 93
3.13.2事件 93
3.13.3等待语句 94
3.13.4延迟定义块 95
3.14 Verilog-XL仿真 96
3.15并行的概念 98
3.15.1 fork-join结构 98
3.15.2 disable语句 99
3.16功能与任务 99
3.17描述的类型 101
3.17.1行为级描述 101
3.17.2结构级描述 102
3.17.3混合模式表达 103
3.18不同模块中的变量存取 103
第四章Verilog HDL基本要素 107
4.1标识符 107
4.4系统任务和函数 108
4.5编译指令 108
4.3格式 108
4.2注释 108
4.5.1′define和′undef 109
4.5.2′ifdef、′else和′endif 109
4.5.3′default-nettype 110
4.5.4′include 110
4.5.5 resetall 110
4.5.6 timescale 110
4.5.7′unconnected-drive和′nounconnected-drive 112
4.5.8′celldefine和′endcelldefine 112
4.6值集合 112
4.6.1整型数 113
4.6.2实数 114
4.7.1线网类型 115
4.6.3 字符串 115
4.7数据类型 115
4.7.2未说明的线网 118
4.7.3向量和标量线网 119
4.7.4寄存器类型 119
4.8参数 123
4.9 C与VerilogHDL语言 124
4.9.1 C与Veiilog配合 124
4.9.2 C与Verilog的限制 124
4.10改进嵌入算子 125
4.11使用状态信息 126
4.12寄存器的使用 128
4.13传播常量 129
4.15共享复杂算子 130
4.14随机逻辑描述 130
4.16关键路径提取 132
4.16.1 简单组合电路关键路径提取方法 132
4.16.2较复杂的always块中关键路径提取方法 132
4.16.3复杂状态机中关键路径提取方法 134
第五章模块基本结构 138
5.1行为描述的结构 138
5.1.1过程块 139
5.1.2 initial过程块 140
5.1.3 always过程块 142
5.2语句块 145
5.2.1串行块(begin-end块) 146
5.2.2并行块(fork-join块) 148
5.2.3 串行块和并行块的混合使用 149
6.1.1延时控制 153
第六章行为描述 153
6.1时间控制 153
6.1.2边沿触发事件控制 157
6.1.3电平敏感事件控制(wait)语句 165
6.2赋值语句 167
6.2.1过程赋值语句的基本格式 167
6.2.2过程赋值的两种延时方式 168
6.2.3阻塞型过程赋值 173
6.2.4非阻塞型过程赋值 174
6.2.5连续赋值语句 177
6.2.6过程连续赋值语句 182
6.3分支语句 188
6.3.1 if-else条件分支语句 188
6.3.2 case分支控制语句 191
6.4.1 forever循环语句 197
6.4循环控制语句 197
6.4.2 repeat循环语句 199
6.4.3 while循环语句 200
6.4.4 for循环语句 201
6.5任务(task)与函数(function) 204
6.5.1任务(task) 204
6.5.2 函数(function) 209
第七章Verilog HDL简单设计 214
7.1加法器源程序 214
7.2计数器 215
7.3锁存器 220
7.4元件例化 220
7.5 12位寄存器 220
7.6带load,clr等功能的寄存器 221
7.7一个简单的状态机 222
7.8加法器源程序 223
7.9用状态机设计的交通灯控制器 224
7.10一个简单的UART 227
7.11状态机举例 233
7.12可综合风格的计数器设计 237
第八章硬盘控制器子系统模块化设计 240
8.1功能描述 240
8.2硬盘控制器子系统结构 240
8.2.1 直异步FIFO电路 240
8.2.2 CRC计算电路 252
8.2.3 UDMA状态机电路 256
8.3硬盘功能模拟 260
8.4系统功能测试 296
9.1功能描述 300
第九章PCI局部总线控制器设计 300
9.2 PCI Master状态机描述 301
9.3 PCI Slave状态机描述 303
9.4系统功能模拟 307
第十章Verilog建模与调试技巧 313
10.1双向端口 313
10.2具有不确定输入值的组合电路 316
10.3作查表用的大存储器 317
10.4加载交叉存取式存储器 321
10.5建立和维持约束条件的验证 324
10.6 Verilog执行顺序和调度的影响 324
10.7复杂模块测试向量的产生 326
10.8测试向量的验证 330
11.1数字逻辑电路 332
第十一章自测电路 332
11.3存储器嵌入式自测(BIST)电路 333
11.3.1存储器BIST的概念 333
11.3.2存储器测试与错误类型 333
11.2嵌入式自测(BIST)电路原理 333
11.3.3存储器BIST电路结构 334
11.3.4存储器BIST电路举例 335
附录A Verilog HDL形式化语法定义 368
A.1 BNF语法形式 368
A.2 BNF语法 368
附录B Verilog关键词 378
C.2不支持的语句 379
C.4不支持的门级结构 379
C.3不支持的操作符 379
C.1不支持的定义和说明 379
附录C HDL编译器不支持的Verilog结构 379
C.5不支持的其他结构 380
附录D Verilog HDL设计练习 381
练习一、简单的组合逻辑设计 381
练习二、简单时序逻辑电路的设计 382
练习三、利用条件语句实现较复杂的时序逻辑电路 384
练习四、设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别 385
练习五、用always块实现较复杂的组合逻辑电路 388
练习六、在VerilogHDL中使用函数 390
练习七、在VerilogHDL中使用任务(task) 392
练习八、利用有限状态机进行复杂时序逻辑的设计 394
练习九、利用状态机的嵌套实现层次结构化设计 397
练习十、通过模块之间的调用实现自顶向下的设计 402