第一篇 VHDL语言基础 1
第1章 概述 1
1.1 硬件描述语言的诞生 2
1.2 HDL语言的种类 2
1.3 VHDL语言开发环境及硬件平台 3
第2章 VHDL程序结构 5
2.1 VHDL程序基本结构 5
2.1.1 实体的组织和设计方法 7
2.1.2 实体说明 7
2.1.3 类属说明 8
2.1.4 瑞口说明 8
2.1.5 实体说明部分 10
2.1.6 实体说明语句部分 11
2.2 结构体 11
2.2.2 定义语句 12
2.2.1 结构体命名 12
2.2.3 并行处理语句 13
2.3 结构体的3种描述方法 14
2.3.1 结构体的行为描述 14
2.3.2 结构体的数据流描述法 15
2.3.3 结构体的结构化描述法 16
2.4 结构体的3种子结构设计方法 17
2.4.1 采用多进程描述复杂结构体的方法 18
2.4.2 采用多模块描述复杂结构体的方法 20
2.4.3 采用子程序调用的结构体描述法 22
第3章 VHDL语言的客体及其分类 26
3.1 标识符 26
3.1.1 短标识符 26
3.1.2 扩展标识符 26
3.2 对象 27
3.2.1 常量 28
3.2.3 信号 29
3.2.2 变量 29
3.2.4 文件 30
3.3 数据类型 31
3.3.1 标准定义的数据类型 32
3.3.2 用户定义的数据类型 34
3.4 类型转换 36
3.4.1 用类型标记法实现类型转换 37
3.4.2 用函数法进行类型转换 37
3.4.3 用常数实现的类型变换 38
3.4.4 数据类型的限定 38
3.4.5 IEEE标准数据类型“std_logic”和“std_logic_vector” 39
3.5 词法单元 39
3.5.1 注释 39
3.5.2 数字 39
3.5.3 字符和字符串 40
3.6.1 逻辑运算符 41
3.6 运算操作符 41
3.5.4 位串 41
3.6.2 算术运算符 42
3.6.3 关系运算符 42
3.6.4 并置运算符 43
3.6.5 操作符的运算优先级 44
第4章 VHDL语法基础 46
4.1 并行语句 46
4.1.1 进程语句(Process) 47
4.1.2 Wait语句 49
4.1.3 Block语句 51
4.1.4 过程和过程调用语句(CONCURRENT PROCEDURE CALL) 54
4.1.5 并行断言语句(ASSERT) 56
4.1.6 并行信号赋值语句(CONCURRENT SIGNAL ASSIGNMENT) 57
4.1.7 信号代入语句(SIGNAL ASSIGNMENT) 58
4.1.8 参数传递语句(GENERIC) 63
4.1.10 端口映射语句(PORTMAP) 64
4.1.9 通用模块、元件调用语句(CONPONENT) 64
4.1.11 生成语句(GENERATE) 65
4.2 顺序语句 68
4.2.1 IF语句 69
4.2.2 CASE语句 72
4.2.3 LOOP语句 74
4.2.4 用LOOP循环控制的NEXT语句 76
4.2.5 EXIT语句 76
4.2.6 RETURN语句 77
4.2.7 REPORT语句 77
4.2.8 NULL语句 77
4.3 命名规则及注释 78
第5章 属性的描述与定义 80
5.1 预定义属性 80
5.2 数值类属性函数 80
5.2.1 一般数据的数值属性函数 80
5.2.2 数组的数值属性函数 82
5.2.3 块的数值属性函数 84
5.3 属性函数 85
5.3.1 数据类型的属性函数 85
5.3.2 数组的属性函数 87
5.3.3 信号的属性函数 90
5.4 带属性函数的信号 92
5.4.1 signal DELAYED(time)属性函数的信号 93
5.4.2 带有signal STABLE(time)属性函数的信号 95
5.4.3 含有signal QUIET属性函数的信号 96
5.4.4 带有signal TRANSACTION属性函数的信号 98
5.5 数据类型的属性函数 98
5.6 数据区间的属性函数 99
5.6 ATTRIBUTE语句 99
第6章 信号处理 102
6.1 信号的驱动源 102
6.2 信号的延迟 104
6.2.1 信号的惯性延迟(INERTIAL) 105
6.2.2 信号的传输延迟(TRANSPORT) 107
6.3 仿真周期 108
6.4 信号的δ延迟 110
6.4.1 δ延迟的意义、用途及使用方法 110
6.4.2 延缓进程(POSTPONED) 111
第7章 VHDL程序设计基础 113
7.1 层次化设计方法 113
7.2 库(libraries) 113
7.2.1 库的概念及语法 113
7.2.2 库的分类 114
7.3 程序包(PACKAGES) 116
7.3.1 程序包说明 117
7.3.2 程序包体 118
7.3.3 常用资源库中的程序包 120
7.4.1 函数(FUNCTION) 128
7.4 子程序 128
7.4.2 过程 136
7.5 文件输入/输出程序包TEXTIO 137
7.6 元件例化 140
7.6.1 构造元件 141
7.6.2 构造程序包 148
7.6.3 用户构造元件库 150
7.6.4 元件的调用 151
第8章 配置 154
8.1 默认连接和默认配置 154
8.2 配置说明 156
8.2.1 元件配置 156
8.2.2 实体-结构体对的元件配置 159
8.2.3 端口映射 159
8.2.4 实体映射 160
8.3 块的配置 164
8.4 结构体的配置 166
8.5 配置说明的参数指定功能(Generic) 168
8.5.1 在结构体中用Generic作参数指定 168
8.5.2 在配置说明中用Generic作参数指定 169
第9章 子程序重载 174
9.1 子程序重载 174
9.1.1 重载对子程序变量类型的要求 175
9.1.2 重载对子程序参数的要求 176
9.2 重载运算符 177
9.2.1 运算符函数的生成与重载 177
9.2.2 操作数类型不同时运算符的重载 178
9.3 别名(替换名) 180
9.4 子程序变量 180
9.4.1 子程序变量 181
9.4.2 变量的共享 181
10.1.1 二输入与非门电路 183
10.1 门电路 183
第二篇 VHDL程序设计 183
第10章 组合逻辑设计 183
10.1.2 二输入或非门电路 185
10.1.3 二输入异或门电路 186
10.1.4 反相器门电路 188
10.1.5 多输入门电路的设计 189
10.2 编码顺、译码器、选择器电路 191
10.2.1 编码器的设计 191
10.2.2 译码器的设计 193
10.2.3 选择器的设计 197
10.3 运算器的设计 198
10.3.1 加法器的设计 198
10.3.2 加/减法器参数化设计方法 200
10.3.3 参数化乘法器电路设计 218
10.3.4 求补运算器的设计 229
第11章 时序逻辑电路设计 231
11.1 时钟信号的VHDL描述方法 231
11.1.1 时钟边沿的描述 231
11.1.2 时序电路中进程敏感信号是时钟信号 232
11.1.3 用WAIT ON语句在进程中等待时钟变化 233
11.2 时序电路中复位信号Reset的VHDL描述方法 233
11.2.1 同步复位方法 233
11.2.2 异步复位方法 234
11.3 时序电路基础模块之一--触发器的设计 234
11.3.1 D触发器的设计 234
11.3.2 T触发器的设计 239
11.3.3 JK触发器的设计 240
11.4 时序电路基础模块之二--寄存器的设计 241
11.4.1 8位通用寄存器 241
11.4.2 串入/串出移位寄存器 242
11.4.3 循环移位寄存器 244
11.4.4 串/并进,串出移位寄存器 245
11.5 时序电路基础模块之三--计数器的设计 247
11.5.1 同步计数器 247
11.5.2 可逆计数器 248
11.5.3 具有数据加载,进位控制的同步计数器 250
11.5.4 异步计数器 252
第12章 状态机设计 255
12.1 Moore型状态机的设计 255
12.1.1 Moore型状态机的功能描述 255
12.1.2 状态机的建立过程 256
12.2 状态机的复位 260
12.2.1 SRAM控制器工作方式 260
12.2.2 状态机的同步复位 261
12.2.3 状态机的异步复位 265
12.2.4 单进程状态机的设计方法 265
12.3.1 组合译码输出方式 267
12.3 Moore型状态机信号输出方法 267
12.3.2 并行译码输出方式 268
12.3.3 状态直接编码输出方式 270
12.3.4 一位有效编码方式 273
12.4 Mealy型状态机 274
12.5 容错状态机的设计 275
12.5.1 状态编码问题探入讨论 275
12.5.2 非法状态处理 276
第13章 层次结构设计 279
13.1 可编程并行I/O接口设计 279
13.1.1 8255的特性及外部信号定义 279
13.1.2 可编程8255并行I/0接口芯片内部结构 281
13.1.3 可编程8255并行I/O芯片工作方式及控制字 281
13.1.4 设计任务的分解 283
13.2 SCI串行数据传送格式 286
13.2.1 SCI的引脚及内部结构 286
13.2.2 串行数据传送格式及同步控制机构 287
13.2.3 SCI芯片的VHDL语言描述 289
13.3 键盘接口设计 293
13.3.1 KBC的引脚及内部结构 293
13.3.2 同步控制机构和查表变换 296
13.3.3 KBC芯片的VHDL语言描述 298
13.4 4位微处理器设计 302
13.4.1 设计目标的层次化分解 302
13.4.2 构造基本元件库 304
13.4.3 构造4位微处理器元件 304
13.5 存储器设计 313
13.5.1 存储器概述 313
13.5.2 ROM(只读存储器) 314
13.5.3 RAM(随机存储器) 315
13.5.4 FIFO(先进先出堆栈) 317
13.6 32位微处理器设计 321
14.2 仿真方法 353
第14章 系统仿真及可测试设计 353
14.1 概述 353
14.3 测试(平台)程序的设计方法 354
14.3.1 实体描述可简化 354
14.3.2 程序中应包含输出错误信息的语句 354
14.3.3 配置语句(CONFIGURATION) 355
14.3.4 不同仿真目的对测试平台设计的要求 355
14.4 表格式测试程序设计 356
14.5 文件I/O式测试程序设计 360
14.5.1 TEXTIO应用 360
14.5.2 SRAM控制器状态机的测试矢量文件 363
14.5.3 文件IO式测试程序设计 364
14.6 用子程序方式建立测试平台 367
第15章 逻辑综合及优化设计 371
15.1 逻辑综合概述 371
15.1.1 约束条件 371
15.2 设计实现概述 372
15.1.4 门级映射网表 372
15.1.2 工艺库 372
15.1.3 逻辑综合三步曲 372
15.2.1 设计实现初步 373
15.2.2 设计实现与逻辑综合的区分 374
15.3 面向CPLD器件的实现 375
15.4 面向FPGA器件的实现 386
15.4.1 FPGA的结构要点 386
15.4.2 FPGA的布局布线 386
15.4.3 在FPGA器件中实现设计的缓冲技术 387
15.4.4 参数指引下的逻辑综合 387
15.5 优化设计 390
15.5.1 流水线设计 390
15.5.2 资源共享 393
15.5.3 预进位加法器 396
参考文献 400