1 概述 1
1.1 为什么要用VHDL 2
1.2 开发流程 3
1.3 历史 4
1.4 综合 7
习题 9
2 VHDL简介 10
2.1 VHDL语言的抽象 10
2.1.1 模拟 12
2.1.2 描述电子线路的其他语言 13
2.2 设计层次——降低复杂性 14
2.3 VHDL元件 15
2.3.1 实体 16
2.3.2 结构体 18
习题 20
参考文献 20
3.1 信号赋值 21
3 并行VHDL 21
3.2 传输延迟与惯性延迟 22
3.3 并行性 23
3.4 δ时间 24
3.5 when语句 25
3.6 with语句 26
3.7 多路器行为模型实例 27
3.8 类属 28
3.9 断言语句——VHDL中的出错处理 28
3.10 行为与数据流 30
3.11 对象、类和类型 31
3.11.1 数据类型 31
3.11.2 可综合的数据类型 38
3.12 向量赋值 39
3.12.1 位串文字 39
3.12.2 数组的片 41
3.12.3 连接运算 43
3.12.4 聚合 43
3.13.1 子类型 44
3.13 高级数据类型 44
3.12.5 类型限定 44
3.13.2 多维数组 45
3.13.3 记录 46
3.14 别名 47
3.15 关系运算符 47
3.16 算术运算符 48
3.17 初值 49
习题 50
4.1 并行的和顺序的数据处理 53
4 顺序VHDL 53
4.2 信号与变量的赋值语句 54
4.3 进程语句 57
4.3.1 组合进程 59
4.3.2 时钟进程 60
4.4 if语句 64
4.5 case语句 66
4.6 多次赋值 71
4.8 wait语句 72
4.7 null语句 72
4.9 loop语句 75
4.9.1 for loop 75
4.9.2 while loop 77
4.10 延缓进程 77
4.11 预定义信号属性 78
4.12 时钟进程中不同的时钟描述方法 80
4.13 异步复位和同步复位 82
4.13.1 异步复位 82
4.13.2 同步复位 83
4.14 锁存器 84
习题 84
5 设计库、程序包与子程序 88
5.1 设计库 88
5.2 程序包 89
5.3 子程序 91
5.3.1 过程 92
5.3.2 函数 94
5.3.3 决断函数 98
5.4 重载 99
5.5 类型转换 102
5.6 移位操作 104
习题 106
6 结构VHDL 108
6.1 元件说明 109
6.2 元件指定 111
6.3 端口匹配命令 112
6.3.1 无连接输出 113
6.3.2 无连接输入 114
6.4 类属匹配命令 115
6.5 生成语句 117
6.6 配置 117
6.7 直接例化(VHDL-93) 121
6.8 程序包中的元件 122
习题 123
7.1 ROM 125
7.1.1 使用数组常量 125
7 RAM与ROM 125
7.1.2 例化一个指定工艺的ROM 126
7.1.3 总结 127
7.2 RAM 128
7.2.1 使用寄存器 128
7.2.2 例化RAM 128
习题 129
8 测试基准 130
8.1 不同级别的测试基准 133
8.2 上拉或下拉 142
8.3 几个元件用同一个测试基准 144
8.4 波形发生器 146
8.5 TextIO 152
习题 154
9 有限状态机 157
9.1 Moore型状态机 160
9.2 Mealy型状态机 165
9.3 Mealy型和Moore型状态机的变种 168
9.4 直接把状态作为输出信号的状态机 169
9.5 用时钟同步输出信号的Moore型状态机 170
9.6 用时钟同步输出信号的Mealy型状态机 172
9.7 状态编码 173
9.8 剩余状态 174
9.9 如何写出最合适的VHDL状态机描述 178
9.10 异步状态机 185
习题 187
10 寄存器传输级综合 190
10.1 优化和映射 191
10.2.1 定义时钟输入信号 196
10.2 约束条件 196
10.2.2 定义输入和输出延迟 197
10.2.3 假通路 198
10.2.4 面积约束 199
10.2.5 设计约束 199
10.3 最好情况的优化 200
10.4 综合工具达不到优化目标时应采取的措施 201
10.5 小结 206
11 设计方法学 207
11.1 自顶向下的设计流程 209
11.2 验证 211
11.2.1 各种级别模拟的小结 213
11.2.2 模拟速度 214
11.2.3 形式验证 217
11.2.4 验证方法推荐 217
11.3 写出可综合的寄存器传输级VHDL代码 217
11.4 FPGA 224
12 测试方法学 226
12.1.1 多路扫描 227
12.1 扫描设计方法学 227
12.1.2 时钟扫描 228
12.1.3 电平敏感扫描设计 228
12.2 全扫描和部分扫描 232
12.3 ATPG设计规则 232
12.3.1 写出可测电路的VHDL代码 234
12.4 边界扫描 238
12.5 附加测试向量 240
13.2 实时核心电路简介 242
13 样机的快速研制 242
13.1 简介 242
13.3 开发系统 244
13.4 开发步骤 244
13.5 进一步阅读 247
14 VHDL设计中的常见错误及其避免方法 248
14.1 信号和变量 248
14.2 逻辑综合和敏感信号表 249
14.3 buffer模式和内部虚拟信号 250
14.4 保留字downto和to的用法 253
14.5 不完全定义的组合进程 254
15 设计举例和设计技巧 256
15.1 加法器 256
15.1.1 带进位输入的1位加法器 256
15.1.2 带进位输入的8位加法器 257
15.1.3 带进位的通用加法器 258
15.1.4 长度为4的向量加法/减法器 258
15.3.1 能够共享一个加法器的例子 261
15.3 资源共享 261
15.2 向量乘法器 261
15.3.2 不能共享同一个加法器的例子 264
15.4 比较器 265
15.5 多路选择器和译码器 267
15.5.1 2选1多路选择器 267
15.5.2 8选1多路选择器 267
15.5.3 3到8译码器 268
15.6.1 带异步复位的触发器 269
15.6 寄存器 269
15.6.2 带同步复位的触发器 270
15.6.3 带异步复位和置位的触发器 270
15.6.4 带使能和异步复位的8位寄存器 271
15.7 边沿控制的脉冲发生器 273
15.8 计数器 274
15.8.1 带使能和进位输出的3位计数器 274
15.8.2 增1/减1计数器(3位) 275
15.8.3 并行加载的通用(带有类属参数)增1/减1计数器 277
15.9.1 串行输入数据/并行输出数据的移位寄存器(4位) 279
15.9 移位寄存器 279
15.9.2 并行加载/串行输出的移位寄存器(4位) 280
15.10 滤波器 282
15.10.1 多数决定的数字滤波器(4输入) 282
15.10.2 数字加法滤波器(4输入) 283
15.11 分频器 287
16 开发工具 288
16.1 Synopsys 288
16.1.1 VHDL编译器和设计分析器 288
16.1.2 设计元件库 290
16.1.3 设计编译器 291
16.1.4 ATPG工具 294
16.1.5 FPGA编译器 294
16.1.6 VHDL模拟器 296
17 行为综合 297
17.1 简介 297
17.1.1 术语简介 297
17.2 握手信号 298
17.2.2 双向握手信号 299
17.2.1 单向握手信号 299
17.3 行为综合/RTL综合的实例——FIR滤波器 300
18 实验指示书 314
18.1 使用ViewLogic工具作实验 314
18.2 使用ViewLogic综合工具和Mentor Graphics的VHDL模拟器作实验 318
18.3 Synopsys用户的Script文件 319
18.4 实验作业 319
19.1 部分习题的解答 329
第1章 329
19 解答 329
第2章 330
第3章 331
第4章 332
第5章 334
第6章 335
第7章 336
第8章 337
第9章 337
实验2 339
19.2 针对Synopsys和Autologic 2的实验解答 339
实验1 339
实验2附加练习 340
实验3 341
实验3附加练习 342
实验4 343
实验4附加练习 343
实验5 346
实验6 348
实验6附加练习 349
实验7 351
实验8 353
19.3 针对VIEWLOGIC的实验解答 355
实验1 356
实验2 356
实验2附加练习 356
实验3附加练习 357
实验3 357
实验4 358
实验4附加练习 358
实验5 359
实验6 360
实验6附加练习 362
实验7 363
实验8 365
附录A VHDL语法 367
A.1 库单元 367
A.1.1 实体说明 367
A.1.2 结构体 367
A.1.3 程序包说明 368
A.1.4 程序包体 368
A.1.5 配置说明 368
A.2.4 常量说明 369
A.2.3 元件说明 369
A.2.6 信号说明 369
A.2.5 文件说明 369
A.2.1 别名说明 369
A.2 说明 369
A.2.2 属性说明 369
A.2.7 子程序说明 370
A.2.8 子程序体 370
A.2.9 子类型说明 370
A.3 顺序语句 371
A.3.1 assert语句 371
A.2.11 变量说明 371
A.2.10 类型说明 371
A.3.2 case语句 372
A.3.3 exit语句 372
A.3.4 if语句 372
A.3.5 loop语句 373
A.3.6 next语句 373
A.3.7 null语句 374
A.3.8 return语句 374
A.3.9 信号赋值语句 374
A.4.1 assert语句 375
A.4 并行语句 375
A.3.10 变量赋值语句 375
A.3.11 wait语句 375
A.4.2 block语句 376
A.4.3 元件例化语句 376
A.4.4 generate语句 376
A.4.5 process语句 376
A.4.6 信号赋值语句 377
A.4.7 with select语句 377
A.4.8 when else语句 377
B.1 标准程序包 378
附录B VHDL程序包 378
B.2 IEEE程序包 379
B.2.1 std_logic_1164 379
B.2.2 std_logic_unsigned 383
B.2.3 std_logic_signed 385
附录C VHDL-87关键字 388
附录D VHDL-93增加的关键字 389
英汉词汇对照表 390