第1章 引言 1
1.1 VHDL设计周期 1
1.2 VHDL的起源 2
1.3标准化过程 3
1.4 VHDL标准的统一 4
1.5可移植性 4
第2章 寄存器传输级设计 6
2.1 RTL设计阶段 7
2.2电路举例 8
2.3确定数据运算 9
2.4确定数据精度 10
2.5确定所用资源 11
2.6运算资源的配置 11
2.7设计控制器 12
2.8设计复位机制 13
2.9RTL设计的VHDL描述 14
2.10综合结果 15
第3章 组合逻辑 16
3.1设计单元 16
3.2实体和结构体 17
3.3仿真模型 19
3.4综合模板 22
3.5信号和端口 24
3.6初始值 26
3.7简单信号的赋值 27
3.8条件信号赋值 27
3.9受选信号赋值 29
3.10样例 30
第4章 基本类型 31
4.1可综合的类型 31
4.2标准类型 32
4.3标准操作符 32
4.4比特(bit)类型 33
4.5布尔(boolean)类型 34
4.6整数(Integer)类型 35
4.6.1 Type Integer 35
4.6.2自定义整数 35
4.6.3整数子类型 36
4.6.4综合解释 37
4.7枚举类型 39
4.8多值逻辑类型 41
4.9记录 41
4.10数组 43
4.11集合体、字符串和位串 46
4.12属性 49
4.12.1整数类型和枚举类型 49
4.12.2数组属性 51
4.13关于被选中信号赋值的几个问题 53
第5章 操作符 55
5.1标准操作符 55
5.2操作符的优先级 56
5.3布尔操作符 62
5.4比较操作符 65
5.4.1综合解释 65
5.4.2整数类型和枚举类型 65
5.4.3数组类型 67
5.5移位操作符 68
5.5.1固定移位位数 69
5.5.2可变移位位数 70
5.6算术操作符 70
5.6.1综合解释 71
5.6.2正号 71
5.6.3负号 71
5.6.4求绝对值操作符abs 71
5.6.5加法操作符 72
5.6.6减法操作符 72
5.6.7乘法操作符 73
5.6.8除法操作符 73
5.6.9求模操作符 73
5.6.10求余操作符 75
5.6.11幂指数操作符 75
5.7拼接操作符 76
第6章 综合类型 77
6.1综合类型系统 77
6.2使程序包可见 79
6.2.1情景1:由供应商提供的VHDL-2008程序包 80
6.2.2情景2:使用VHDL-1993兼容程序包 80
6.2.3VHDL-2008 Context(上下文)声明 81
6.3逻辑类型-Std_Logic_1164 82
6.3.1std_logic-一位逻辑类型 83
6.3.2std_logic_vector-多位逻辑类型 84
6.3.3操作符 85
6.3.4比较操作符 85
6.3.5布尔操作符 85
6.3.6移位操作符 86
6.4数值类型-Numeric_Std 86
6.4.1所提供的类型 87
6.4.2 Resize函数 88
6.4.3操作符 91
6.4.4比较操作符 91
6.4.5布尔操作符 92
6.4.6移位操作符 92
6.4.7算术操作符 93
6.5定点类型-Fixed_Pkg 96
6.5.1提供的类型 97
6.5.2溢出模式和下溢模式 98
6.5.3 Resize函数 99
6.5.4操作符 101
6.5.5比较操作符 101
6.5.6布尔操作符 102
6.5.7移位操作符 103
6.5.8算术操作符 104
6.5.9实用函数 108
6.6浮点类型-Float_Pkg 109
6.6.1 Float类型 110
6.6.2解释浮点数 111
6.6.3溢出,下溢和错误模式 111
6.6.4舍入模式 112
6.6.5模式选择 113
6.6.6函数和操作符 113
6.6.7分类函数 113
6.6.8操作符 115
6.6.9比较操作符 115
6.6.10布尔操作符 116
6.6.11算术操作符 117
6.6.12 Resize函数 119
6.6.13实用函数 121
6.7类型转换 124
6.7.1位保留转换 124
6.7.2值保留转换 129
6.8常数 135
6.9表达式中的混合类型 137
6.10顶层接口 138
第7章 Std_Logic_Arith(标准算术逻辑) 142
7.1 Std_Logic_Arith程序包 143
7.2 Std_Logic_Arith的内容 144
7.2.1位宽调整函数 144
7.2.2运算符 146
7.2.3比较运算符 147
7.2.4布尔运算符 148
7.2.5算术运算符 148
7.2.6移位函数 152
7.3类型转换 153
7.4常数 155
7.5表达式中混合类型 156
第8章 时序VHDL 159
8.1进程 159
8.1.1进程分析 159
8.1.2组合进程 160
8.1.3 Wait语句 161
8.1.4 wait语句的位置 162
8.2信号赋值 162
8.3变量 163
8.3.1声明 163
8.3.2初始值 163
8.3.3使用变量 163
8.4 if语句 164
8.5 Case语句 169
8.6锁存器推断 170
8.7循环 172
8.7.1 For Loops 173
8.7.2 Exit语句 177
8.7.3 Next语句 178
8.8样例 179
第9章 寄存器 181
9.1基本的D类型寄存器 181
9.2仿真模型 182
9.3综合模型 183
9.4寄存器模板 184
9.4.1基本模板 184
9.4.2 If语句模板 185
9.4.3敏感列表模板 186
9.4.4确定Wait语句的位置 187
9.4.5指定有效边沿 187
9.5寄存器类型 188
9.6时钟类型 189
9.7时钟门控 190
9.8数据门控 191
9.9异步复位 193
9.9.1异步复位的仿真模型 195
9.9.2异步复位模板 197
9.10同步复位 197
9.11寄存器化变量 199
9.12初始值 200
第10章 层次结构 201
10.1元件作用 201
10.2间接绑定 202
10.2.1元件实例 203
10.2.2元件声明 204
10.2.3配置说明 205
10.2.4默认绑定 206
10.2.5间接绑定过程总结 207
10.3直接绑定 207
10.4元件程序包 208
10.5参数化元件 209
10.5.1类属实体 209
10.5.2使用类属元件 210
10.5.3参数化的结构体 211
10.5.4类属参数类型 212
10.6生成语句 213
10.6.1 For Generate语句 213
10.6.2 If Generate语句 215
10.6.3生成语句中的元件实例 217
10.7样例 218
10.7.1伪随机二进制序列(PRBS)发生器 218
10.7.2脉动(Systolic)处理器 223
第11章 子程序 230
11.1子程序的作用 230
11.2函数 231
11.2.1函数的使用 231
11.2.2函数的声明 232
11.2.3初始值 233
11.2.4具有未限定参数的函数 234
11.2.5非限定性返回值 237
11.2.6多个返回 240
11.2.7函数重载 241
11.3操作符 242
11.3.1内置操作符 243
11.3.2操作符重载 244
11.4类型转换 246
11.4.1内置类型转换 246
11.4.2自定义类型转换 247
11.5过程 250
11.5.1过程参数 250
11.5.2具有非限定性参数的过程 251
11.5.3使用Inout参数 253
11.5.4信号参数 253
11.6声明子程序 255
11.6.1局部子程序声明 255
11.6.2程序包中的子程序 256
11.6.3使用程序包 258
11.7样例 259
第12章 特殊结构 266
12.1三态 266
12.2有限状态机 271
12.2.1两个进程,一个译码器 273
12.2.2两个进程,两个译码器 275
12.2.3一个进程,一个译码器 276
12.2.4状态编码 278
12.2.5非法状态和复位 278
12.3 RAMs和寄存器堆 279
12.3.1异步读,同步写 280
12.3.2同步先读后写 282
12.3.3同步先写后读 283
12.3.4 RAM读优化 284
12.3.5获得寄存器堆 284
12.3.6复位 284
12.4译码器和ROMs 285
12.4.1 Case语句译码器 285
12.4.2查找表译码器 286
第13章 测试平台 288
13.1测试平台 288
13.2组合测试平台 289
13.3验证响应 293
13.4时钟和复位 295
13.5其他标准类型 297
13.6无关输出 299
13.7打印响应值 301
13.8使用TextIO读数据文件 303
13.9读标准类型 306
13.10 TextIO错误处理 308
13.11综合类型的TextIO 309
13.12自定义类型的TextIO 311
13.13样例 313
第14章 库 316
14.1库 316
14.2库名 317
14.3工作库 318
14.4标准库 319
14.4.1标准库std 319
14.4.2 ieee库 320
14.4.3推荐的ieee库(ieee_proposed) 321
14.5组织你的文件 322
14.6增量编译 324
第15章 案例分析 325
15.1规范 325
15.2系统级设计 326
15.3 RTL设计 328
15.3.1框图 328
15.3.2接口 329
15.3.3结构体概要 330
15.3.4系数储存器 331
15.3.5样点储存器 333
15.3.6计算和累加器 334
15.3.7地址生成器 336
15.3.8输出寄存器 336
15.3.9控制器 337
15.4尝试综合 340
15.5测试设计 341
15.5.1基本测试 343
15.5.2噪声计算 347
15.6浮点版本 348
15.7最终的综合 350
15.8通用版本 352
15.9结论 354
附录A 程序包列表 356
A.1程序包Standard 356
A.2程序包Standard_Additions 361
A.3程序包Std_Logic_1164 370
A.4程序包Std_Logic_1164_Additions 374
A.5程序包Numeric_Std 382
A.6程序包Numeric_Std_Additions 386
A.7程序包Fixed_Float_Types 395
A.8程序包Fixed_Pkg 396
A.9程序包Float_Pkg 414
A.10程序包TextIO 433
A.11程序包Standard_Textio_Additions 436
A.12程序包Std_Logic_Arith 437
A.13程序包Math_Real 442
附录B 语法参考 444
B.1关键字 444
B.2设计单元 445
B.2.1实体 445
B.2.2结构体 445
B.2.3程序包 446
B.2.4包体 446
B.2.5 Context声明 446
B.3并发语句 446
B.4顺序语句 448
B.5表达式 450
B.6声明 451
参考文献 454