本书系统地论述了FPGA的设计方法,并给出了大量综合电子系统设计项目实例。全书共11章。第1章介绍FPGA电子系统的设计方法;第2章介绍QuartusⅡ使用方法;第3-7章介绍FPGA硬件描述语言VHDL的特点、VHDL语言中常用的数据、运算符、顺序描述语句和并行描述语句、时钟信号描述、有限状态机等基本概念和应用;第8章介绍门电路、组合逻辑电路、触发器、时序逻辑电路(与阎石主编的《数字电子技术基础》(第4版)一致),并对其中的各种功能芯片以及基于VHDL与FPGA的实现方法进行了讲解;第9章介绍FPGA外围电路——集成运算放大器及其各种应用;第10章和第11章给出了基于FPGA的综合电子系统设计实例。
近年来,FPGA的生产和销售规模以惊人的速度增长。大力发展集成电路设计与制造,是我国制定的重要发展目标,也是经济全球化新形势下的科技挑战。发展集成电路行业,离不开对电子信息类专业人才的培养,尤其是对电子信息类专业人才的创新能力培养。
如何提高学生的实践创新能力?首先,要使学生对实践感兴趣。在综合性设计实验中,学生能做出来就会有兴趣。其次,增加练习数量,练习多了水平就会提高。最后,根据生产和生活的实际需要制作创新作品。兴趣→提高→创新,不断循环往复,学生的实践创新能力就会不断提高。
本书通过大量的小型电子系统设计提高学生对实践的兴趣,通过由单元电路实践到电子系统实践的过渡,降低学习的难度,从而起到抛砖引玉的效果。本书通过大量的FPGA设计实例,切实提高学生开发FPGA电子系统的能力。
本书特色如下:
(1)易懂、易学、易上手。
(2)覆盖了模拟电子技术基础、数字电子技术基础、FPGA基本知识以及大量电子系统设计项目案例。
(3)既给出了硬件设计电路,又提供了程序代码设计(使用VHDL语言和QuartusⅡ软件),便于举一反三。
(4)书中给出的每个综合电子小系统均已经过设计实现,全部是北方工业大学学生参加全国大学生电子设计竞赛的赛前训练题目,也是电子电路类课程设计的参考题目。
本书主要由北方工业大学电子信息工程学院王振红编著。另外,张文轩编写了“项目24基于FPGA与nRF24L01的无线数据传输与应用”。张常年、张东彦、宋鹏、曲洪权、王恩成、田青、曹淑琴、黄明、范锦宏、周燕平、冯祎、康晓麓、赵徐森、李云栋、吴晓林、韩宇龙、胜智勇、殷大海等对本书的出版给予了极大的关心和支持。在此,对他们表示衷心的感谢。
本书配套提供第10章和第11章的电路及源程序,可到清华大学出版社网站的本书页面下载。
由于编著者自身水平有限,如果书中存在错误和不妥之处,敬请读者批评指正。
王振红
2017年4月
于北方工业大学
目录
第1章FPGA电子系统的设计方法
1.1电子系统设计
1.1.1总体方案确定
1.1.2子系统设计
1.2印制电路板设计
1.2.1准备工作
1.2.2元器件布局与布线
1.2.3印制焊盘的尺寸及形状
1.2.4印制导线的尺寸及形状
1.2.5印制导线的抗干扰和屏蔽
1.2.6印制电路板的对外连接
1.2.7表面贴装技术对印制板的要求
1.3电子系统的安装与调试
1.3.1电子系统的安装
1.3.2元器件的引脚识别
1.3.3电子系统的调试
1.4电子系统抗干扰措施
1.4.1正确选择器件
1.4.2正确分布元器件
1.4.3交流输入电源增加电源滤波器
1.4.4施加屏蔽措施
1.4.5使用合理的接地方式
1.4.6电路加入滤波电容和补偿电容
第2章FPGA设计软件——QuartusⅡ及其使用方法
2.1编程存储及编译
2.2指定器件引脚及编译
2.3下载
2.4存储及编译图形描述(电路图)
2.5掉电可存储下载方法
第3章FPGA的硬件描述语言VHDL
3.1VHDL程序的特点
3.2VHDL程序的基本结构
3.2.1库说明
3.2.2实体说明
3.2.3结构体说明
3.3VHDL的数据
3.3.1基本标志符
3.3.2数据对象
3.3.3数据类型
3.4VHDL的表达式
3.4.1逻辑运算符
3.4.2算术运算符
3.4.3关系运算符
3.4.4并置运算符
3.4.5操作符的运算优先级
第4章VHDL的顺序描述语句
4.1信号赋值语句和变量赋值语句
4.2if语句
4.3case语句
4.4for loop循环语句
4.5null语句
第5章VHDL的并行描述语句
5.1进程语句
5.2并发信号赋值语句
5.3条件信号赋值语句
5.4选择信号赋值语句
5.5元件例化语句
5.6生成语句
第6章VHDL的时钟信号描述方法
6.1时钟信号的VHDL描述方法
6.1.1时钟边沿的描述
6.1.2时序电路中进程敏感信号是时钟信号
6.2时序电路中复位信号的VHDL描述方法
6.2.1同步复位
6.2.2异步复位
第7章VHDL的有限状态机的设计
7.1有限状态机的基本概念
7.2一个Moore型有限状态机的设计方法
第8章FPGA数字电路设计实例
8.1门电路FPGA设计
8.1.1与非门电路
8.1.2二输入或非门电路
8.1.3二输入异或门电路
8.1.4反向器门电路
8.1.5三态门电路
8.1.6单向总线缓冲器
8.1.7双向总线缓冲器
8.2组合逻辑电路FPGA设计
8.2.1监视交通信号灯工作状态的逻辑电路
8.2.28线—3线编码器
8.2.38线—3线优先编码器
8.2.4二—十进制编码器
8.2.5译码器(3线—8线)
8.2.6二—十进制译码器
8.2.7BCD七段显示译码器
8.2.8代码转换电路
8.2.9四选一数据选择器
8.2.10八选一数据选择器
8.2.114位全加器
8.2.128位加法器
8.2.13多位数值比较器
8.3触发器FPGA设计
8.3.1RS触发器
8.3.2主从JK触发器
8.3.3D触发器
8.4时序逻辑电路FPGA设计
8.4.1寄存器
8.4.2双向移位寄存器
8.4.3串行输入并行输出移位寄存器
8.4.4循环移位寄存器
8.4.54位同步二进制计数器
8.4.6单时钟同步十六进制加/减计数器
8.4.7双时钟同步十六进制加/减计数器
8.4.8同步十进制加法计数器
8.4.9单时钟同步十进制可逆计数器
8.4.10异步二进制加法计数器
8.4.11同步一百进制计数器
8.4.12同步二十九进制计数器
8.4.13顺序脉冲发生器
8.4.14序列信号发生器
8.4.15用状态机方法设计十三进制计数器
8.4.16串行数据检测器
8.4.17能自启动的七进制计数器
8.4.18能自启动的三位环形计数器
8.4.19用状态机方法设计十进制减法计数器
第9章FPGA外围电路——集成运算放大器
9.1集成运算放大器典型电路
9.1.1反相比例运算电路
9.1.2同相比例运算电路
9.1.3反相求和运算电路
9.1.4同相求和运算电路
9.1.5加减运算电路
9.1.6积分运算电路
9.1.7微分运算电路
9.1.8压控电压源二阶低通滤波器
9.1.9压控电压源二阶高通滤波器
9.1.10RC桥式正弦振荡电路
9.1.11方波发生电路
9.1.12方波和三角波发生电路
9.1.13过零比较器
9.1.14一般单限比较器
9.1.15滞回比较器
9.1.16窗口比较器
9.1.17精密整流电路
9.2单电源供电的集成运算放大器的应用
9.2.1单电源集成运放的放大电路
9.2.2单电源集成运放的正弦波发生器
9.2.3单电源集成运放的方波三角波发生器
9.2.4单电源集成运放的低通滤波器
9.2.5单电源集成运放的高通滤波器
9.2.6单电源集成运放的比较器
9.2.7单电源比较器
9.2.8单电源比较器组成的窗口比较器
9.2.9高效率音频功率放大器
9.2.10单电源集成运放综合设计
9.3集成运算放大器的综合应用
9.3.1小信号功率放大器
9.3.2具有放大、滤波及继电器控制的模拟信号检测与控制系统
9.3.3具有放大、F/V转换及继电器控制的模拟信号频率检测与控制系统
9.3.4间歇正弦波控制路
9.3.5语音信号放大器
9.3.6程控放大器0~40dB
9.3.7宽带放大器
9.3.8正弦交流电压有效值控制的压控振荡电路
9.3.9电压转换恒定电流电路
9.3.10实用温控器
9.3.11用热释电传感器的报警电路
9.3.12基于PWM的LED调光电路
9.3.13具有放大、滤波器、计数功能的电子电路
第10章FPGA数字电路系统设计实例
10.1数字信号的发送和接收电路
10.2序列计数器
10.3设计一个自动售邮票的控制电路
10.4数字锁
10.5设计一个汽车尾灯的控制电路
10.6交通灯控制器
10.7双十字路口交通灯控制器
10.816×16的点阵显示设计
10.9乒乓球游戏机
10.10三层电梯控制器
10.11汽车停车场停车位显示系统
10.12智力竞赛抢答计时器的设计
10.13出租车计费器
10.14定时器
10.15秒表
10.16数字钟
10.17数字频率计
10.18电子琴电路设计
10.19《友谊地久天长》乐曲演奏电路设计
10.20寄存序列型信号发生器
10.21正负脉宽数控调制信号发生器设计
10.22智能函数发生器设计
10.23周期可调的多波形发生器
10.24模拟信号检测
10.25数据采集及监控系统
第11章FPGA电子系统设计项目
11.1项目1FPGA控制的数码显示电路
11.1.1设计要求
11.1.2设计分析
11.1.3显示原理
11.1.4驱动8位数码管显示电路框图
11.1.5模块及模块功能
11.2项目2键盘控制电路
11.2.1设计要求
11.2.2设计分析
11.2.3设计思想与源程序
11.3项目3用8×8行共阴、列共阳双色点阵发光器件显示汉字
11.3.1设计要求
11.3.2设计分析
11.3.3器件及硬件电路
11.3.4设计软件的思路及源程序
11.4项目4FPGA控制的数模D/A转换电路
11.4.1设计要求
11.4.2设计分析
11.4.3DAC0832转换器
11.4.4数模D/A转换电路
11.4.5FPGA控制的数模D/A转换电路
11.5项目5FPGA控制的模数A/D转换0809的应用
11.5.1设计要求
11.5.2设计分析
11.5.3ADC0809转换器及其转换电路
11.5.4FPGA控制的模数A/D转换电路
11.5.5用数码管显示模数A/D转换器的输入电压
11.5.6ADC0809转换模拟输入负电压电路
11.6项目6数控式可逆步进调压直流稳压电源
11.6.1设计要求
11.6.2原理及硬件电路
11.6.3软件设计思想及源程序
11.7项目7数控式直流电流源
11.7.1设计指标及框图
11.7.2硬件电路图
11.7.3软件设计思想及源程序
11.8项目8低频数字式相位测量仪
11.8.1低频数字式相位测量仪设计指标及框图
11.8.2移相网络
11.8.3相位测量
11.9项目9多路数据采集系统
11.9.1设计内容
11.9.2现场模拟信号产生器
11.9.38路数据采集器
11.9.4主控器
11.10项目10测量放大器
11.10.1测量放大器系统
11.10.2桥式电路
11.10.3信号变换放大器
11.10.4直流电压放大器
11.10.5程控的直流电压放大器
11.11项目11功率放大器
11.11.1设计任务
11.11.2功率放大器
11.11.3前置放大器
11.11.4系统测试
11.11.5自制稳压电源
11.11.6集成功率放大器
11.12项目12开关型稳压电源
11.12.1脉冲宽度调制电路MIC2194
11.12.2MC34060控制的串联型开关稳压电源
11.13项目13程控滤波器
11.13.1设计要求
11.13.2设计框图
11.13.3程控放大器
11.13.4程控低通滤波器
11.13.5程控高通滤波器
11.13.6程控滤波器的FPGA控制核心
11.14项目14信号发生器
11.14.1设计要求
11.14.2信号发生器的功能及其内部接线
11.14.3信号发生器的FPGA内部结构
11.14.4调用QuartusⅡ中的除法器件方法
11.15项目15交流电压参数的测量
11.15.1设计要求
11.15.2给定的器件
11.15.3硬件电路
11.15.4软件电路
11.16项目16宽带放大器
11.16.1设计要求
11.16.2硬件电路
11.16.3软件电路
11.17项目17高效率音频功率放大器
11.17.1设计要求
11.17.2D类放大器的工作原理
11.17.3硬件电路
11.17.4软件电路
11.18项目18数字化语音存储与回放系统
11.18.1设计要求
11.18.2硬件电路
11.18.3软件电路
11.19项目19数字式工频有效值多用表
11.19.1硬件电路
11.19.2软件电路
11.20项目20简易电阻、电容和电感测量仪
11.20.1设计要求
11.20.2硬件电路
11.20.3软件电路
11.21项目21数字幅频均衡功率放大器
11.21.1设计要求
11.21.2设计框图
11.21.3三级放大电路
11.21.4带阻网络
11.21.5低通滤波电路
11.21.6A/D转换
11.21.7D/A转换和功率放大器
11.21.8FPGA程序
11.22项目22红外光通信装置
11.22.1设计要求
11.22.2红外光语音通信装置
11.22.3红外光温度数字信号通信装置
11.22.4红外光通信装置总结
11.23项目23数字频率计
11.23.1设计要求
11.23.2系统设计方案和电路
11.23.3信号频率测量
11.23.4时间间隔测量系统模块
11.23.5占空比测量系统模块
11.24项目24基于FPGA与nRF24L01的无线数据传输与应用
11.24.1nRF24L01无线收发器
11.24.2nRF24L01无线收发器工作模式
11.24.3nRF24L01配置
11.24.4用FPGA对nRF24L01进行配置
参考文献
一般来说,结构体中的所有处理语句都是并行处理语句,那么结构体中是否存在顺序语句呢?答案是肯定的。VHDL程序的结构体中既存在并行语句又存在顺序语句。并行语句用来描述一组并发行为,它是并发执行的,与程序的书写顺序无关; 顺序语句是一个接在另一个之后严格按照顺序执行的语句,与程序的书写顺序有关。
5.1进程语句
进程语句包含在结构体中,一个结构体可以有多个进程语句,多个进程语句间是并行的,并可访问结构体或实体中定义的信号。因此进程语句称为并行描述语句。
进程语句结构内部所有语句都是顺序执行的。
进程语句的启动是由process后敏感信号表中所标明的敏感信号来触发进程。
各进程之间的通信是由信号传递的。其语法如下:
标记: process(敏感信号表)
变量说明语句;
begin
一组顺序语句;
end process 标记;
其中,标记为进程语句标号; 敏感信号表是进程语句要读取的所有敏感信号(包括端口信号)的列表。变量说明语句主要包括变量的数据类型说明、子程序说明等。从begin开始到end process结束,是一组顺序执行语句。
下面重点讨论关于进程语句书写结构中的敏感信号表的问题。
1. 进程语句的敏感信号表
所谓敏感信号表,顾名思义,就是用来存放敏感信号的列表。在进程语句中,敏感信号是指那些值发生改变后能够引起进程语句执行的信号。一般来说,敏感信号表中可以使用一个或是多个信号,每当其中的一个或是多个信号值改变时,就在进程内部引起语句执行。敏感信号表列出了进程语句对其敏感的所有信号,所以进程语句最好有一个敏感信号表。当然,敏感信号表部分可以省略,但此时进程语句中要有其他形式的敏感信号激励。
这里需要注意的是: 当进程语句中没有敏感信号表时,进程语句中必须有其他形式的敏感信号激励; 而当进程中有敏感信号表时,进程语句中不允许再显式出现wait、wait for、wait until和wait on中的任何一种敏感信号激励语句,否则编译时将会给出错误信息。
程序5.1描述的是一个简单的D触发器,结构体中只有一个进程语句,敏感信号表列出了时钟信号clk,输入信号d。
【程序5.1】
library ieee;
use ieee.std_logic_1164.all;
entity dff1 is
port(clk,d:in std_logic;
q:out std_logic);
end dff1;
architecture rtl of dff1 is
begin
p1:process(clk,d)
begin
if(clk'event and clk='1')then
q=d;
end if;
end process p1;
end rtl;
在程序5.1中,进程语句标号p1,以process(clk,d)开始,接着是进程语句中的一组顺序处理语句,用来描述d触发器的功能,当时钟上升沿到时,将输入信号d赋值给输出信号q,最后该进程语句以end process p1结束。可以看出,p1进程语句对时钟信号clk、输入信号d敏感,因此当时钟信号发生变化或是输入信号变化时将会启动进程语句。
2. 进程语句的启动
在VHDL中,进程语句有两种工作状态: 等待状态和执行状态。当敏感信号表中的信号没有变化时,进程处于等待状态; 当敏感信号表中的信号有变化时,进程处于执行状态,这时将顺序执行进程中的语句。
因此不难看出,进程语句的启动主要取决于敏感信号表中的信号,只要敏感信号表中的信号发生了变化,进程将启动。进程启动以后,begin和end process间的语句将从上到下顺序执行一次,当最后一个语句执行完后,就返回进程语句的开始,等待下一次敏感信号表中的信号变化。
3. 进程语句的同步
在VHDL程序中,同一个结构体中不仅可以有多个进程存在,而且同一个结构体中的多个进程之间还可以进行同步。一般来说,VHDL中通常采用时钟信号来同步进程,其具体操作方法就是结构体中的几个进程共用同一个时钟信号来进行激励,以启动进程。
进程的同步一般是由敏感信号表来进行控制的,敏感信号表中的信号不发生变化会暂停进程的执行,直到敏感信号发生变化时才会再次启动进程。程序5.2是一个同步进程的例子。由程序5.2产生的shizhong电路符号如图5.1所示。
……