
本书根据电子信息类课程教学和实验要求,以提高学生的实践动手能力和工程设计能力为目的,对EDA技术和VHDL设计的相关知识进行系统和完整的介绍。全书以Quartus Prime、ModelSim软件为工具,以VHDL-1993和VHDL-2008语言标准为依据,以可综合的设计为重点,通过诸多精选设计案例,由浅入深地介绍VHDL工程开发的知识与技能。全书按"器件-软件-语言-案例”为主线展开,内容紧贴教学和科研实际,举例恰当丰富,富有启发性,既包含关于EDA技术、FPGA/CPLD器件和VHDL硬件描述语言的系统介绍,又有丰富的设计应用实例。设计案例经过优选,具有典型性和趣味性,并全部基于口袋实验板进行了验证。本书配有教学课件、课程教学计划等。
前 言 本书在前面两版的基础上做了认真细致的梳理和修订,订正了硬件描述语言语法的一些疏漏,根据VHDL语言的最新发展补充完善了相关内容;设计工具Quartus Prime和ModelSim也替换为较新的版本;对FPGA器件的结构和发展进行了重新梳理;所有例程重新改写,使之更规范,所有案例均经过下载和验证,这些案例也可移植到其他实验板或“口袋”板上,市面上多数实验板及“口袋”板的资源基本都能够满足这些案例下载的需要。 本书是“十二五”普通高等教育本科国家级规划教材和普通高等教育“十一五”国家级规划教材。本书的定位是作为EDA技术、FPGA开发和VHDL数字逻辑设计方面的教材,在过去的二十多年里,EDA技术课程已成为高等学校电子信息类专业一门重要的专业基础课程,在教学、科研和大学生电子设计竞赛等活动中起着重要作用。随着教学方法的不断改革,新教育理念的提出对EDA课程教学的要求也不断提高,必须对教学内容不断更新和优化,与时俱进,以便与高等教育教学的快速发展相适应。 当前国内高校的EDA技术课程的教学与实践呈现出如下特点:首先,很多相关课程的教学均或多或少地融入了EDA技术,比如数字逻辑电路、计算机组成原理、计算机接口技术、数字通信技术、嵌入式系统设计等课程。这些课程的教学和实践,均不同程度地使用了EDA及FPGA设计技术,因此本课程成为上述课程的基础,怎样打牢基础以及如何与上述课程在教学内容上进行区分和衔接成为相关教师需要思考的问题。其次,开放式、自主式学习越来越成为EDA技术课程教学的主流。EDA技术课程教学的资源越来越丰富,网络上相关的慕课和教学视频很多,学生的学习不仅限于在课堂上,慕课(MOOC)、微课(Microlecture)等形式也越来越多地应用于EDA技术课程教学中。再次,EDA技术课程是一门实践类课程,实践教学所占比重甚至超过理论教学,所以在EDA教学中,需重视实践教学的效果和质量。在实践教学中,基于案例的教学模式以及基于问题导向的教学方法越来越得到重视,怎样在教学和教材中体现基于案例的教学模式和基于问题导向的教学方法,值得不断探索并不断加以实践。 正是基于以上的认识我们对本教材进行了梳理和修订,在此过程中,按照重视基础、面向应用的原则,力图在有限的篇幅内,将EDA技术与VHDL设计相关的知识简明扼要、深入浅出地进行阐述,贴近教学实践。 全书共12章。第1章对EDA技术做了综述;第2章介绍FPGA/CPLD器件的结构与配置;第3章介绍典型FPGA/CPLD器件的结构特点和配置方式;第4章是Quartus Prime集成开发工具的使用方法;第5章是VHDL设计入门基础;第6、7章系统介绍VHDL的结构、要素、语法、语句等;第8章介绍了VHDL描述的方式,并讨论了设计优化的问题;第9章是有关有限状态机的内容;第10章列举了VHDL控制常用I/O外设的案例;第11章是VHDL仿真的内容;第12章是一些设计实例。 本书的教学总学时可安排48学时左右,其中理论教学学时和实践教学学时均为24学时,具体每一章的学时安排建议如下表0-1所示。 有的章节可以安排学生自学,或者结合线上实施教学,比如第4章、第6章和第7章的内容均适合自学或慕课教学。选用本教材的学校也可根据自己的教学计划适当调整学时安排。 表0-1 学时建议 章 理论学时 实践学时 1 2 0 2 2 0 3 2 0 4 0 4 5 2 0 6 2 0 7 4 2 8 4 2 9 4 4 10 0 6 11 2 2 12 0 4 总 计 24 24 本书提供配套电子课件、课程教学计划、程序代码等教学资源,请登录华信教育资源网(http://hxedu.com.cn)免费注册下载。 本书是编著者在二十多年的EDA教学经验的基础上精心编写而成的,虽经改版和修正,但由于作者水平所限,加之时间仓促,书中错误与疏漏之处在所难免,诚挚希望广大读者批评指正。 E-mail:wjm_ice@163.com 编著者 2022年5月
目 录 第1章 EDA技术概述 1 1.1 EDA技术及其发展历程 1 1.2 Top-down设计思路 3 1.2.1 Top-down设计 3 1.2.2 Bottom-up设计 4 1.3 IP核复用 5 1.3.1 IP核复用技术 5 1.3.2 片上系统SoC 6 1.4 EDA设计的流程 6 1.4.1 设计输入 7 1.4.2 综合 7 1.4.3 布局布线 8 1.4.4 时序分析与时序约束 8 1.4.5 功能仿真与时序仿真 8 1.4.6 编程与配置 9 1.5 常用的EDA工具软件 9 1.6 EDA技术的发展趋势 12 习题1 13 第2章 FPGA/CPLD器件 14 2.1 PLD器件概述 14 2.1.1 PLD器件的发展历程 14 2.1.2 PLD器件的分类 15 2.2 PLD的原理与结构 16 2.2.1 PLD器件的结构 17 2.2.2 PLD电路的表示方法 17 2.3 低密度PLD的原理与结构 18 2.4 CPLD的原理与结构 22 2.4.1 宏单元结构 22 2.4.2 典型CPLD的结构 23 2.5 FPGA的原理与结构 24 2.5.1 查找表结构 25 2.5.2 典型FPGA的结构 27 2.6 FPGA/CPLD的编程工艺 30 2.7 边界扫描测试技术 33 习题2 35 第3章 FPGA/CPLD的结构与配置 36 3.1 FPGA/CPLD器件概述 36 3.2 MAX 10器件结构 38 3.3 Cyclone IV器件结构 42 3.4 FPGA/CPLD的编程与配置 43 3.4.1 在系统可编程 43 3.4.2 Cyclone IV器件的配置 44 3.4.3 MAX 10器件的配置 47 3.5 FPGA/CPLD的发展趋势 48 习题3 49 第4章 原理图与基于IP核的设计 50 4.1 Quartus Prime设计流程 50 4.2 Quartus Prime原理图设计 51 4.2.1 半加器原理图设计输入 51 4.2.2 1位全加器设计输入 55 4.2.3 编译 57 4.2.4 仿真 58 4.2.5 下载 62 4.3 用IP核设计计数器 66 4.4 用ROM核设计乘法器 71 4.4.1 用原理图方式实现 71 4.4.2 用文本例化ROM实现 77 4.5 SignalTap II的使用方法 78 4.6 Quartus Prime的优化设置 82 习题4 85 第5章 VHDL设计初步 88 5.1 VHDL的历史 88 5.2 用VHDL设计组合电路 89 5.3 用VHDL设计时序电路 92 5.4 实体 94 5.4.1 类属参数说明 94 5.4.2 端口说明 96 5.5 结构体 96 5.6 VHDL库和程序包 97 5.6.1 库 97 5.6.2 程序包 98 5.7 配置 100 5.8 子程序 103 5.8.1 过程 103 5.8.2 函数 104 5.8.3 过程、函数的使用方法 104 习题5 108 第6章 VHDL结构与要素 109 6.1 标识符 109 6.2 数据对象 109 6.2.1 常量 110 6.2.2 变量 110 6.2.3 信号 111 6.2.4 别名 111 6.3 VHDL数据类型 112 6.3.1 VHDL标准数据类型 112 6.3.2 INTEGER数据类型 114 6.3.3 IEEE预定义数据类型 115 6.3.4 UNSIGNED、SIGNED 数据类型 115 6.3.5 用户自定义数据类型 117 6.3.6 数组(ARRAY) 119 6.4 数据类型的转换与位宽转换 120 6.4.1 数据类型的转换 120 6.4.2 位宽转换 122 6.5 VHDL运算符 123 6.4.1 逻辑运算符 123 6.4.2 关系运算符 124 6.4.3 算术运算符 124 6.4.4 并置运算符 126 6.4.5 运算符重载 127 6.4.6 省略赋值运算符 128 习题6 129 第7章 VHDL基本语句 130 7.1 顺序语句 130 7.1.1 赋值语句 130 7.1.2 IF语句 130 7.1.3 CASE语句 135 7.1.4 LOOP语句 138 7.1.5 NEXT与EXIT语句 141 7.1.6 WAIT语句 141 7.1.7 子程序调用语句 142 7.1.8 断言语句 143 7.1.9 REPORT语句 143 7.1.10 NULL语句 144 7.2 并 行 语 句 145 7.2.1 并行信号赋值语句 145 7.2.2 进程语句 149 7.2.3 块语句 151 7.2.4 元件例化语句 152 7.2.5 生成语句 154 7.2.6 并行过程调用语句 156 7.3 属性说明与定义语句 156 7.3.1 数据类型属性 157 7.3.2 数组属性 157 7.3.3 信号属性 158 习题7 159 第8章 VHDL设计进阶 161 8.1 行为描述 161 8.2 数据流描述 162 8.3 结构描述 163 8.3.1 用结构描述实现1位全加器 163 8.3.2 用结构描述设计4位加法器 165 8.3.3 用结构描述设计8位加法器 165 8.4 三态逻辑设计 166 8.5 分频器设计 168 8.5.1 占空比为50%的奇数分频 168 8.5.2 半整数分频 169 8.5.3 数控分频器 170 8.6 乘法器设计 171 8.6.1 用乘法运算符实现 171 8.6.2 移位相加乘法器 173 8.6.3 查找表乘法器 174 8.7 存储器设计 178 8.7.1 用数组例化存储器 179 8.7.2 例化lpm_rom模块实现 存储器 181 8.8 流水线设计 183 8.9 资源共享设计 186 8.10 用锁相环IP核实现倍频和相移 188 8.10.1 锁相环 188 8.10.2 锁相环IP核的定制 188 8.10.3 锁相环例化和仿真 190 习题8 192 第9章 VHDL有限状态机设计 194 9.1 有限状态机 194 9.1.1 有限状态机简介 194 9.1.2 枚举数据类型 196 9.2 有限状态机的描述方式 197 9.2.1 三进程表述方式 197 9.2.2 双进程表述方式 198 9.2.3 单进程表述方式 200 9.3 状 态 编 码 201 9.3.1 常用的编码方式 201 9.3.2 状态编码的定义 203 9.3.3 用属性指定状态编码方式 206 9.4 有限状态机设计要点 207 9.4.1 起始状态的选择和复位 207 9.4.2 多余状态的处理 208 9.5 用有限状态机控制流水灯 209 9.6 用状态机控制交通灯 216 9.7 用状态机控制字符液晶 217 习题9 223 第10章 VHDL驱动常用IO外设 225 10.1 4×4矩阵键盘 225 10.2 汉字图形点阵液晶 231 10.3 VGA显示器 237 10.3.1 VGA显示原理与时序 237 10.3.2 VGA彩条信号发生器 239 10.3.3 VGA图像显示 243 10.4 TFT液晶屏 248 10.4.1 TFT液晶屏 248 10.4.2 TFT液晶屏显示彩色圆环 251 10.4.3 TFT液晶屏显示动态矩形 256 10.5 音乐演奏电路 260 10.5.1 音乐演奏实现的方法 261 10.5.2 实现与下载 262 习题10 265 第11章 TEST BENCH仿真与时序分析 267 11.1 VHDL仿真 267 11.2 VHDL测试平台 267 11.2.1 用VHDL描述仿真激励 信号 268 11.2.2 用TEXTIO进行仿真 271 11.3 ModelSim SE仿真实例 274 11.3.1 图形界面仿真方式 276 11.3.2 命令行仿真方式 280 11.3.3 ModelSim SE时序仿真 281 11.4 时序约束与时序分析 282 11.4.1 时序分析的有关概念 283 11.4.2 用Timing Analyzer进行 时序分析 285 习题11 289 第12章 VHDL设计实例 292 12.1 标准PS/2键盘 292 12.2 超声波测距 296 12.3 m序列与Gold码产生器 301 12.3.1 m序列产生器 301 12.3.2 Gold码产生器 305 12.4 数字过零检测和等精度频率测量 306 12.4.1 数字过零检测 306 12.4.2 等精度频率测量 308 12.3.3 数字测量系统 309 12.5 FIR滤波器 312 12.5.1 FIR滤波器的参数设计 312 12.5.2 FIR滤波器的FPGA实现 316 12.5.3 下载与验证 319 习题12 320 附录 VHDL保留字 322 参考文献 323