《EDA技术及应用实践》课程的内容就是让学生了解一类器件(CPLD/FPGA),熟悉一种语言(VHDL/Verilog HDL),学会一种软件(MAX+plusII /QuartusII/ISE/Vivado),最终的目标就是会用CPLD/FPGA设计一般的数字模块及小系统,以及人工神经网络的设计。课程内容涉及三个方面,一是作为设计载体的大规模可编程逻辑器件的基本结构及其基本原理;二是作为主要表达方式的硬件描述语言的基本结构、基本语法及其优化设计方法;三是作为设计工具的开发软件、基础实验、高阶实验及实验开发系统的使用;三个方面相辅相成共同构成本门课程的主要内容,重点是第二和第三部分系统逻辑描述的硬件描述语言、应用实践。
骆忠强,副教授,硕士生导师,四川轻化工大学"652青年拔尖学者”、盐都学术与技术带头人后备人选,主要从事智能信号与信息处理、无线通信技术等方面的研究,曾获四川省优秀硕士论文、博士国家奖学金。四川轻化工大学优秀教师、优秀科技工作者、优秀研究生指导教师、优秀党员、颜德岳院士奖教金。主持了国家自然科学基金青年基金、四川省杰出青年基金等项目9项。在国内外重要学术期刊与会议发表学术论文60余篇,其中SCI、EI检索50余篇,授权国家发明专利3项,授权国际专利3项,出版A类学术专著1部,参编教材2部。担任IEEE Signal Processing Letter、IEEE Communications Letter、Multidimensional Systems and Signal Processing、China Communications、IEEE Access、International Journal of Satellite Communications and Networking、IEEE Transactions on Aerospace and Electronic Systems等SCI期刊学术审稿人,ICSP/ICICSE/ICSNC/PRAI等国际学术会议2021-2022年技术委员。指导学生获得"四川省大学生通信全网建设技术竞赛”、研究生电子设计竞赛三等奖。主讲研究生《随机过程》、《深度学习》等课程,本科生《信息论与编码》、《EDA技术》、《人工智能基础》等课程。
1 EDA技术概述 001
1.1 EDA技术及发展 001
1.1.1 CAD阶段 002
1.1.2 CAE阶段 002
1.1.3 EDA阶段 002
1.1.4 EDA技术特征 003
1.1.5 EDA技术优势 003
1.1.6 EDA技术发展趋势 004
1.2 EDA设计流程 004
1.2.1 自底向上设计 005
1.2.2 自顶向下设计 005
1.3 数字系统设计流程 006
1.3.1 设计输入 007
1.3.2 综合 007
1.3.3 布局布线 009
1.3.4 仿真 009
1.3.5 编程配置 010
1.4 硬件描述语言 010
1.5 可编辑逻辑器件 010
1.5.1 PLD分类 011
1.5.2 PROM 012
1.5.3 PLA 012
1.5.4 PAL 012
1.5.5 GAL 013
1.5.6 CPLD 013
1.5.7 FPGA 014
1.5.8 CPLD与FPGA的区别 018
1.6 FPGA技术的发展现状及动态 019
1.6.1 FPGA技术的发展现状 019
1.6.2 FPGA技术未来的发展动态 023
1.7 常用的EDA工具 027
1.8 习题 028
2 Verilog HDL基础知识 029
2.1 什么是Verilog HDL 029
2.2 Verilog HDL的主要特征 030
2.3 Verilog HDL程序模块结构 030
2.3.1 模块声明 031
2.3.2 端口定义 032
2.3.3 I/O说明 033
2.3.4 内部信号声明 033
2.3.5 功能定义 034
2.4 Verilog HDL的词法 035
2.4.1 标识符、空白符和注释 035
2.4.2 常量 036
2.4.3 变量 038
2.5 Verilog HDL的运算符 040
2.5.1 算术运算符 040
2.5.2 逻辑运算符 040
2.5.3 关系运算符 041
2.5.4 等值运算符 041
2.5.5 位运算符 042
2.5.6 缩减运算符 042
2.5.7 移位运算符 043
2.5.8 条件运算符 043
2.5.9 位并接运算符 044
2.5.10 运算符的优先级 044
2.6 Verilog HDL的基本语句 045
2.6.1 赋值语句 045
2.6.2 条件语句 046
2.6.3 循环语句 048
2.6.4 结构声明语句 049
2.6.5 编译预处理语句 053
2.7 Verilog数字系统的设计风格 055
2.7.1 结构描述方式 055
2.7.2 行为描述方式 056
2.7.3 数据流描述方式 057
2.8 习题 057
3 组合逻辑电路Verilog设计 058
3.1 Verilog HDL门级建模 058
3.1.1 常用门级说明 058
3.1.2 门级模块调用 059
3.1.3 门级结构描述实现组合逻辑电路 060
3.2 Verilog HDL数据流建模 064
3.2.1 连续赋值语句 065
3.2.2 利用连续赋值语句描述简单的数字电路 065
3.3 Verilog HDL的行为级建模 066
3.3.1 过程语句 067
3.3.2 语句块 070
3.4 分层次电路设计方法 071
3.4.1 设计方法 071
3.4.2 模块实例引用语句 072
3.5 常用的组合电路设计 073
3.5.1 基本门电路设计 074
3.5.2 三态门电路设计 074
3.5.3 半加器电路设计 075
3.5.4 4选1选择器电路设计 076
3.5.5 编码器电路设计 079
3.5.6 译码器电路设计 081
3.6 习题 082
4 时序逻辑电路Verilog设计 084
4.1 时序电路建模基础 084
4.1.1 时序电路的建模方式 084
4.1.2 阻塞型赋值语句 085
4.1.3 非阻塞型赋值语句 086
4.1.4 事件控制语句 088
4.2 触发器 089
4.2.1 基本触发器 089
4.2.2 异步复位和时钟使能的D触发器 090
4.2.3 同步复位控制的D触发器 091
4.3 锁存器 092
4.3.1 基本锁存器 092
4.3.2 含清0控制的锁存器 092
4.3.3 If结构不完整 093
4.3.4 case结构不完整 094
4.4 移位寄存器 095
4.4.1 8位移位寄存器 095
4.4.2 16位环形移位寄存器 096
4.4.3 串行输入并行输出寄存器 097
4.4.4 并行输入串行输出移位寄存器 097
4.5 计数器 098
4.5.1 4位二进制数加法计数器 098
4.5.2 异步复位同步计数使能和可预置型十进制计数器 098
4.5.3 环形计数器 099
4.5.4 约翰逊计数器 099
4.6 习题 100
5 有限状态机Verilog设计 101
5.1 有限状态机的基本概念 101
5.1.1 有限状态机的基本结构 102
5.1.2 有限状态机的分类 103
5.1.3 有限状态机的状态图表示法 105
5.1.4 有限状态机的设计步骤 107
5.2 有限状态机的描述方法 107
5.2.1 状态图的建立过程 107
5.2.2 状态图的描述方法 110
5.3 有限状态机的状态编码 114
5.4 有限状态机的设计举例 115
5.4.1 自动售货机设计 115
5.4.2 交通灯控制设计 122
5.4.3 A/D采样控制设计 125
5.5 习题 127
6 深度神经网络FPGA设计 129
6.1 人工智能、机器学习和深度学习 129
6.2 神经网络的基本原理 130
6.2.1 神经元的基本原理 130
6.2.2 神经网络的基本原理 132
6.3 神经网络 136
6.3.1 全连接神经网络 136
6.3.2 卷积神经网络 141
6.3.3 卷积神经网络举例 150
6.4 卷积神经网络的设计 161
6.4.1 卷积算子设计 161
6.4.2 全连接算子设计 163
6.4.3 池化算子设计 165
6.5 基于HLS的手写体识别设计 167
6.5.1 神经网络的搭建与训练 167
6.5.2 神经网络权重提取 169
6.5.3 FPGA上神经网络的搭建与推理 170
6.6 当前挑战和未来展望 175
7 Quartus Prime软件应用 177
7.1 概述 177
7.2 Quartus Prime软件下载和安装 178
7.2.1 Quartus Prime软件下载 178
7.2.2 Quartus Prime软件安装 178
7.3 Quartus Prime软件基本使用流程 182
7.3.1 创建工程 182
7.3.2 创建项目 185
7.3.3 RTL视图 187
7.3.4 ModelSim波形仿真 188
7.3.5 University Program VWF波形仿真 194
8 仿真验证与Testbench编写 197
8.1 Verilog电路仿真和验证概述 197
8.2 Verilog测试程序设计基础 197
8.2.1 Testbech及其结构 197
8.2.2 测试平台举例 199
8.3 与仿真相关的系统任务 201
8.3.1 $display和$write 201
8.3.2 $monitor和$stobe 203
8.3.3 $time和$reltime 204
8.3.4 $finish和$stop 205
8.3.5 $readmemh和$readmem 207
8.3.6 $random 208
8.4 典型测试向量的设计 208
8.4.1 变量初始化 208
8.4.2 数据信号测试向量的产生 209
8.4.3 时钟信号测试向量的产生 209
8.4.4 总线信号测试向量的产生 210
9 数字系统设计应用实践 212
9.1 加法器原理图设计及波形仿真 212
9.1.1 加法器原理介绍 212
9.1.2 半加器设计实现 213
9.1.3 全加器设计实现 223
9.2 计数器Verilog设计及Testbench仿真 226
9.2.1 输入文件 226
9.2.2 编译与综合 227
9.2.3 仿真测试 228
9.3 流水灯ModelSim设计及仿真 233
9.3.1 建立ModelSim工程 233
9.3.2 编译仿真文件 236
9.3.3 配置仿真环境 236
9.4 分频器设计及仿真 240
9.4.1 偶数分频器 240
9.4.2 奇数分频器 241
9.4.3 半分频器 242
9.4.4 仿真测试 244
9.5 音乐蜂鸣器设计及仿真 245
9.5.1 设计的基本原理 245
9.5.2 Verilog设计实现 247
9.5.3 仿真测试 251
9.6 呼吸灯设计与仿真 254
9.6.1 设计的基本原理 254
9.6.2 Verilog设计实现 254
9.6.3 仿真测试 257
9.7 红外线遥控系统的设计 258
9.7.1 设计的基本原理 258
9.7.2 Verilog设计实现 260
9.7.3 仿真测试 270
9.8 宏功能模块/IP核的应用 271
9.8.1 IP核的定义及存在形式 271
9.8.2 十二进制加法计数器 272
9.8.3 LPM_RAM宏模块的设置与使用 276
10 人工智能边缘实验基础平台介绍 283
10.1 概述 283
10.1.1 产品特点 283
10.1.2 主要用途以及使用场景 283
10.1.3 为客户带来的价值 284
10.1.4 传统教学的延伸与拓展 284
10.1.5 产品形态 284
10.1.6 远程调试工具 284
10.2 系统结构 285
10.3 安装及环境部署 286
10.3.1 部署方式A:配合云管系统 286
10.3.2 部署方式B:不配合云管系统 287
10.4 管理软件 287
10.4.1 登录界面 287
10.4.2 开发板状态统计 287
10.4.3 节点管理 288
10.4.4 FPGA开发板管理 289
10.4.5 告警 289
10.4.6 用户管理 289
10.4.7 实验管理平台对接 290
11 EDA基础实验 291
11.1 数据选择器实验 291
11.1.1 实验目的 291
11.1.2 实验环境 291
11.1.3 实验内容 291
11.1.4 实验原理 291
11.1.5 实验步骤 292
11.2 3-8译码器实验 307
11.2.1 实验目的 307
11.2.2 实验环境 307
11.2.3 实验内容 308
11.2.4 实验原理 308
11.2.5 实验步骤 308
11.3 D触发器实验 320
11.3.1 实验目的 320
11.3.2 实验环境 320
11.3.3 实验内容 320
11.3.4 实验原理 321
11.3.5 实验步骤 321
11.4 串行数据检测器实验 333
11.4.1 实验目的 333
11.4.2 实验环境 333
11.4.3 实验内容 333
11.4.4 实验原理 333
11.4.5 实验步骤 333
11.5 顺序脉冲发生器实验 348
11.5.1 实验目的 348
11.5.2 实验环境 348
11.5.3 实验内容 348
11.5.4 实验原理 348
11.5.5 实验步骤 349
11.6 序列信号发生器实验 363
11.6.1 实验目的 363
11.6.2 实验环境 363
11.6.3 实验内容 363
11.6.4 实验原理 363
11.6.5 实验步骤 363
11.7 分频器实验 375
11.7.1 实验目的 375
11.7.2 实验环境 375
11.7.3 实验内容 376
11.7.4 实验原理 376
11.7.5 实验步骤 376
附录A Verilog关键字总结 390
参考文献 418