第1章 概述 1
1.1 EDA技术 1
1.2 EDA技术应用对象 2
1.3常用的硬件描述语言 4
1.4 EDA技术的优势 6
1.5面向FPGA和CPLD的开发流程 7
1.5.1设计输入 7
1.5.2综合 8
1.5.3适配(布线布局) 10
1.5.4仿真 10
1.5.5 RTL描述 11
1.6可编程逻辑器件 11
1.6.1 PLD的分类 11
1.6.2 PROM可编程原理 12
1.6.3 GAL 14
1.7 CPLD的结构与可编程原理 16
1.8 FPGA的结构与工作原理 18
1.8.1查找表逻辑结构 18
1.8.2 Cyclone 4E系列器件的结构原理 19
1.8.3内嵌Flash的FPGA器件 22
1.9硬件测试技术 22
1.9.1内部逻辑测试 22
1.9.2 JTAG边界扫描测试 23
1.10编程与配置 23
1.11 Quartus Ⅱ 25
1.12 IP核 26
1.13 EDA的发展趋势 27
习题 28
第2章 程序结构与数据类型 29
2.1 Verilog程序结构 29
2.1.1 Verilog模块的表达方式 30
2.1.2 Verilog模块的端口信号名和端口模式 30
2.1.3 Verilog信号类型定义 31
2.1.4 Verilog模块功能描述 32
2.2 Verilog的数据类型 32
2.2.1 net网线类型 33
2.2.2 wire网线型变量的定义方法 33
2.2.3 register寄存器类型 34
2.2.4 reg寄存器型变量的定义方法 34
2.2.5 integer类型变量的定义方法 35
2.2.6存储器类型 35
2.3 Verilog文字规则 37
2.3.1 Verilog的4种逻辑状态 37
2.3.2 Verilog的数字表达形式 37
2.3.3数据类型表示方式 38
2.3.4常量 38
2.3.5标识符、关键词及其他文字规则 40
2.3.6参数定义关键词parameter和localparam的用法 41
习题 42
第3章 行为语句 43
3.1过程语句 43
3.1.1 always语句 43
3.1.2 always语句在D触发器设计中的应用 45
3.1.3多过程应用与异步时序电路设计 45
3.1.4简单加法计数器的Verilog表述 46
3.1.5 initial语句 47
3.2块语句 49
3.3 case条件语句 49
3.4 if条件语句 51
3.4.1 if语句的一般表述形式 51
3.4.2基于if语句的组合电路设计 52
3.4.3基于if语句的时序电路设计 53
3.4.4含异步复位和时钟使能的D触发器的设计 55
3.4.5含同步复位控制的D触发器的设计 56
3.4.6含清零控制的锁存器的设计 57
3.4.7时钟过程表述的特点和规律 58
3.4.8实用加法计数器设计 59
3.4.9含同步预置功能的移位寄存器设计 61
3.4.10关注if语句中的条件指示 62
3.5过程赋值语句 63
3.6循环语句 64
3.6.1 for语句 64
3.6.2 while语句 65
3.6.3 repeat语句 66
3.6.4 forever语句 67
3.7任务与函数语句 67
习题 69
第4章FPGA硬件实现 71
4.1代码编辑输入和系统编译 71
4.1.1编辑和输入设计文件 71
4.1.2创建工程 72
4.1.3约束项目设置 73
4.1.4全程综合与编译 75
4.1.5 RTL图观察器应用 76
4.2时序仿真测试 77
4.3硬件测试 80
4.3.1引脚锁定 80
4.3.2编译文件下载 82
4.3.3通过JTAG口对配置芯片进行间接编程 83
4.3.4 USB-Blaster驱动程序安装方法 84
4.4电路原理图设计流程 85
4.4.1设计一个半加器 85
4.4.2完成全加器顶层设计 87
4.4.3对全加器进行时序仿真和硬件测试 87
4.5利用属性表述实现引脚锁定 88
4.6 SignalTap Ⅱ的用法 90
4.7编辑SignalTap Ⅱ的触发信号 95
4.8安装Quartus Ⅱ 13.1说明 95
习题 100
实验与设计 100
实验4-1多路选择器设计实验 100
实验4-2十六进制7段数码显示译码器设计 101
实验4-3 8位硬件乘法器设计实验 102
实验4-4应用宏模块设计数字频率计 103
实验4-5计数器设计实验 107
实验4-6数码扫描显示电路设计 107
实验4-7半整数与奇数分频器设计 108
第5章 运算符与结构描述语句 110
5.1运算操作符 110
5.1.1按位逻辑操作符 110
5.1.2逻辑运算操作符 111
5.1.3算术运算操作符 111
5.1.4关系运算操作符 112
5.1.5 BCD码加法器设计示例 113
5.1.6缩位操作符 114
5.1.7并位操作符 114
5.1.8移位操作符用法 115
5.1.9移位操作符用法示例 115
5.1.10条件操作符 116
5.2连续赋值语句 117
5.3例化语句 118
5.3.1半加器设计 118
5.3.2全加器设计 119
5.3.3 Verilog例化语句及其用法 119
5.4参数传递语句应用 121
5.5用库元件实现结构描述 122
5.6编译指示语句 124
5.6.1宏定义命令语句 124
5.6.2文件包含语句’include 125
5.6.3条件编译命令语句’ifdef…'else…'endif 125
5.7 keep属性应用 126
5.8 SignalProbe使用方法 128
习题 130
实验与设计 131
实验5-1高速硬件除法器设计实验 131
实验5-2不同类型的移位寄存器设计实验 132
实验5-3基于Verilog代码的频率计设计 132
实验5-4 8位加法器设计实验 133
实验5-5 VGA彩条信号显示控制电路设计 134
第6章LPM宏模块用法 138
6.1调用计数器宏模块示例 138
6.1.1计数器LPM模块文本代码的调用 138
6.1.2 LPM计数器代码与参数传递语句应用 139
6.1.3创建工程与仿真测试 141
6.2利用属性控制乘法器构建的示例 142
6.3 LPM RAM宏模块用法 143
6.3.1初始化文件及其生成 143
6.3.2以原理图方式对LPM RAM进行调用 145
6.3.3测试LPM RAM 147
6.3.4 Verilog代码描述的存储器初始化文件加载表述 148
6.3.5存储器设计的结构控制 149
6.4 LPM ROM使用示例 150
6.4.1简易正弦信号发生器设计 150
6.4.2正弦信号发生器硬件实现和测试 152
6.5存储器内容在系统编辑器应用 153
6.6 LPM嵌入式锁相环调用 155
6.6.1建立嵌入式锁相环元件 155
6.6.2测试锁相环 158
6.7 In-System Sources and Probes Editor用法 158
6.8 DDS实现原理与应用 161
6.8.1 DDS原理 161
6.8.2 DDS信号发生器设计示例 163
习题 164
实验与设计 165
实验6-1查表式硬件运算器设计 165
实验6-2正弦信号发生器设计 165
实验6-3简易逻辑分析仪设计 166
实验6-4 DDS正弦信号发生器设计 167
实验6-5移相信号发生器设计 168
实验6-6 AM幅度调制信号发生器设计 168
实验6-7硬件消抖动电路设计 168
第7章Verilog HDL深入 170
7.1过程中的两类赋值语句 170
7.1.1未指定延时的阻塞式赋值 170
7.1.2指定了延时的阻塞式赋值 171
7.1.3未指定延时的非阻塞式赋值 172
7.1.4指定了延时的非阻塞式赋值 173
7.1.5深入认识阻塞式与非阻塞式赋值的特点 174
7.1.6对不同的赋初值方式的进一步探讨 176
7.2过程语句讨论 178
7.2.1过程语句应用总结 178
7.2.2不完整条件语句与时序电路的关系 179
7.3三态与双向端口设计 180
7.3.1三态控制电路设计 181
7.3.2双向端口设计 181
7.3.3三态总线控制电路设计 183
7.4资源优化 184
7.4.1资源共享 185
7.4.2逻辑优化 186
7.4.3串行化 186
7.5速度优化 187
习题 190
实验与设计 191
实验7-1 4×4阵列键盘键信号检测电路设计 191
实验7-2直流电机综合测控系统设计 192
实验7-3 VGA简单图像显示控制模块设计 194
实验7-4硬件乐曲演奏电路设计 195
实验7-5 PS/2键盘控制模型电子琴电路设计 199
第8章 状态机设计技术 202
8.1 Verilog状态机的一般形式 202
8.1.1状态机的特点与优势 202
8.1.2状态机的一般结构 203
8.1.3初始控制与表述 206
8.2 Moore型状态机 208
8.2.1多过程结构状态机 208
8.2.2序列检测器及其状态机设计 212
8.3 Mealy型状态机 213
8.4不同编码类型状态机 216
8.4.1直接输出型编码 216
8.4.2用宏定义语句定义状态编码 218
8.4.3顺序编码 219
8.4.4一位热码编码 220
8.4.5状态编码设置 220
8.5安全状态机设计 222
8.5.1状态导引法 222
8.5.2状态编码监测法 223
8.5.3借助EDA工具自动生成安全状态机 224
习题 224
实验与设计 224
实验8-1序列检测器设计 224
实验8-2 ADC采样控制电路设计 225
实验8-3五功能智能逻辑笔设计 226
实验8-4数据采集模块设计 227
第9章16位CPU创新设计 229
9.1 KX9016的结构与特色 229
9.2 KX9016基本硬件系统设计 232
9.2.1单步节拍发生模块 232
9.2.2 ALU模块 233
9.2.3比较器模块 233
9.2.4基本寄存器与寄存器阵列组 234
9.2.5移位器模块 237
9.2.6程序与数据存储器模块 237
9.3 KX9016v 1指令系统设计 238
9.3.1指令格式 238
9.3.2指令操作码 239
9.3.3软件程序设计示例 240
9.3.4 KX9016v 1控制器设计 242
9.3.5指令设计示例 246
9.4 KX9016的时序仿真与硬件测试 247
9.4.1时序仿真与指令执行波形分析 247
9.4.2 CPU工作情况的硬件测试 249
9.5 KX9016应用程序设计示例和系统优化 251
9.5.1乘法算法及其硬件实现 252
9.5.2除法算法及其硬件实现 253
9.5.3 KX9016v 1的硬件系统优化 253
习题 255
实验与设计 255
实验9-1 16位CPU设计综合实验 255
实验9-2新指令设计及程序测试实验 256
实验9-3 16位CPU的优化设计与创新 257
第10章Verilog HDL仿真 258
10.1 Verilog HDL仿真流程 259
10.2 Verilog测试基准示例 261
10.3 Verilog Test Bench测试流程 263
10.4 Verilog系统任务和系统函数 265
10.4.1系统任务和系统函数 265
10.4.2预编译语句 271
10.5延时模型 272
10.5.1#延时和门延时 272
10.5.2延时说明块 273
10.6其他仿真语句 273
10.6.1 fork-join块语句 273
10.6.2 wait语句 274
10.6.3 force、 release语句 275
10.6.4 deassign语句 275
10.7仿真激励信号的产生 276
10.8数字系统仿真 277
习题 278
实验与设计 278
实验10-1在ModelSim上对计数器的Test Bench进行仿真 278
实验10-2在ModelSim上进行16位累加器设计仿真 278
第11章DSP Builder系统设计方法 280
11.1 MATLAB/DSP Builder及其设计流程 280
11.2正弦信号发生器设计 283
11.2.1建立设计模型 283
11.2.2 Simulink模型仿真 289
11.2.3 SignalCompiler使用方法 293
11.2.4使用ModelSim进行RTL级仿真 294
11.2.5使用Quartus Ⅱ实现时序仿真 295
11.2.6硬件测试与硬件实现 296
11.3 DSP Builder层次化设计 297
11.4基于DSP Builder的DDS设计 300
11.4.1 DDS模块设计 300
11.4.2 FSK调制器设计 302
11.4.3正交信号发生器设计 304
11.4.4数控移相信号发生器设计 305
11.4.5幅度调制信号发生器设计 305
11.5 HIL硬件测试 306
习题 311
实验与设计 311
实验11-1利用MATLAB/DSP Builder设计基本电路模块 311
实验11-2基于DSP Builder的DDS应用模型设计 312
实验11-3 HIL硬件环仿真实验 314
第12章DSP Builder设计深入 316
12.1 FIR数字滤波器设计 316
12.1.1 FIR滤波器原理 316
12.1.2使用DSP Builder设计FIR滤波器 317
12.1.3使用MATLAB的滤波器设计工具 322
12.1.4使用FIR IP Core设计FIR滤波器 327
12.2 HDL模块插入仿真及其设计 331
习题 333
实验与设计 334
实验12-1 FIR数字滤波器设计实验 334
实验12-2 HDL Import模块应用实验 335
附录A EDA开发系统及相关电路与表格 336
A.1 KX-CDS系列EDA/SOPC系统 337
A.1.1模块化自主创新实验设计结构 337
A.1.2多功能重配置型高效实验控制系统 338
A.1.3不同功能类型的FPGA核心板 338
A.2部分实验扩展模块 341
A.3 mif文件生成器使用方法 342
A.4核心板FPGA扩展至KX-CDS系统对照表 344
A.5多功能重配置结构可切换的部分实验电路图 346