编辑推荐
适读人群 :本书可作为高等院校计算机专业本、专科生的教材或教学参考书,也可以作为电子技术课程设计、电子设计大赛或数字系统设计工程技术人员学习EDA 技术的参考书。 1.本书先讲解语法,然后以实例讲解硬件描述语言,并给出仿真和实验波形,尽可能地减少FPGA硬件内部结构的讲解、注重应用。
2.本书的所有实例都是经过编程、下载以及调试过程,是作者多年的教学和科研实践的经验积累。
内容简介
本书内容包括FPGA的设计环境、设计流程和所使用的语言,QuartusⅡ集成开发环境,Modelsim仿真,VHDL语言基础,VHDL数据类型与运算操作符,VHDL的主要描述语句,利用FPGA进行程序设计的应用实例等。
本书有很多实例分析,这些实例大都是以特定的工程项目为依托,具有一定的借鉴价值,可以帮助读者从系统角度理解FPGA的开发流程。
本书可作为高等院校计算机专业本、专科生的教材或教学参考书,也可以作为电子技术课程设计、电子设计大赛或数字系统设计工程技术人员学习EDA 技术的参考书。
内页插图
目录
第1章概述/001
1.1可编程逻辑器件001
1.2FPGA/CPLD的软件开发工具002
1.3硬件描述语言002
1.3.1AHDL语言002
1.3.2VerilogHDL语言002
1.3.3VHDL语言003
1.4FPGA/CPLD的开发流程003
第2章QuartusⅡ集成开发环境/005
2.1QuartusⅡ界面概况005
2.2QuartusⅡ软件开发流程006
2.2.1创建工程006
2.2.2原理图输入方式008
2.2.3文本输入方式015
2.2.4波形仿真017
2.2.5引脚分配021
2.2.6编程下载021
2.3LPM参数化宏功能模块024
2.3.1LPM参数化宏功能模块定制管理器024
2.3.2LPM参数化宏功能模块的应用030
第3章仿真/034
3.1Modelsim简介034
3.2安装034
3.3Modelsim仿真方法035
3.3.1前仿真035
3.3.2后仿真035
3.3.3Modelsim仿真的基本步骤036
3.3.4Modelsim的运行方式036
3.4Modelsim功能仿真036
3.4.1建立仿真工程038
3.4.2Altera仿真库的编译与映射039
3.4.3编译HDL源代码和Testbench041
3.4.4启动仿真器并加载设计顶层042
3.4.5打开观察窗口,添加信号044
3.4.6执行仿真045
3.5Modelsim时序仿真046
3.5.1仿真路径设置046
3.5.2QuartusⅡ仿真环境设置047
3.5.3利用QuartusⅡ编译源文件048
3.5.4生成测试模板并编写测试程序048
3.5.5执行仿真051
第4章VHDL语言基础/054
4.1VHDL语言的特点054
4.2VHDL语言的程序结构055
4.3VHDL语言的库055
4.4VHDL语言的程序包057
4.5VHDL语言的实体058
4.5.1实体说明058
4.5.2实体的类属说明058
4.5.3实体的端口说明059
4.6VHDL语言的结构体060
4.7VHDL语言的配置062
第5章VHDL数据类型与运算操作符/065
5.1VHDL的基本语法规则065
5.2VHDL语言的数据对象066
5.2.1常量(CONSTANT)066
5.2.2变量(VARIABLE)066
5.2.3信号(SIGNAL)067
5.2.4文件(FILES)068
5.3VHDL语言的数据类型068
5.3.1预定义的数据类型068
5.3.2用户自定义数据类型071
5.3.3数据类型的转换073
5.4VHDL语言的操作符075
5.4.1逻辑操作符076
5.4.2算术操作符076
5.4.3关系操作符077
第6章VHDL的主要描述语句/079
6.1顺序描述语句079
6.1.1变量赋值语句079
6.1.2信号赋值语句080
6.1.3WAIT语句080
6.1.4IF语句082
6.1.5CASE语句085
6.1.6NULL语句087
6.1.7断言(ASSERT)语句087
6.1.8LOOP语句088
6.1.9NEXT语句090
6.1.10EXIT语句091
6.2并发描述语句092
6.2.1进程语句092
6.2.2并发信号赋值语句093
6.2.3并发过程调用语句095
6.2.4块(BLOCK)语句097
6.2.5元件例化语句098
6.2.6生成语句100
6.3属性描述与定义语句102
第7章应用实例/111
7.1自动邮票售票机设计111
7.1.1自动邮票售票系统总体模块图的设计111
7.1.2票价设定模块的设计112
7.1.3邮票类型选择模块的设计113
7.1.4点阵票型显示模块的设计116
7.1.5邮票类型选择与票价设定模块的设计120
7.1.6邮票数量设定模块的设计121
7.1.7邮票购买模块的设计123
7.1.8数据转换模块的设计126
7.1.9动态扫描模块的设计127
7.1.10数码管显示模块的设计128
7.1.11综合设计129
7.2交通灯控制系统的设计130
7.2.1交通灯控制系统模块图130
7.2.2控制模块设计130
7.2.3显示模块设计135
7.2.4综合设计139
7.3八路抢答器的设计140
7.3.1主持人控制模块141
7.3.2抢答信号锁存模块142
7.3.3倒计时模块144
7.3.4二进制编码转BCD码模块146
7.3.5扫描信号产生模块147
7.3.6数码管位信号与段信号匹配模块147
7.3.7BCD码转七段码模块148
7.3.8报警模块149
7.3.9综合设计150
7.4数字频率计VHDL程序与仿真151
7.5乐曲硬件演奏电路设计155
7.5.1顶层设计156
7.5.2音调产生模块157
7.5.3音调查询158
7.5.4节拍和音符数据发生器模块159
7.5.5“梁祝”乐曲演奏数据160
7.6数控分频器的设计161
7.7状态机A/D采样控制电路实现162
7.8比较器和D/A器件164
7.9ASK调制解调VHDL程序及仿真165
7.9.1ASK调制VHDL程序及仿真165
7.9.2ASK解调VHDL程序及仿真166
7.10FSK调制与解调VHDL程序及仿真167
7.10.1FSK调制VHDL程序及仿真167
7.10.2FSK解调方框图及电路符号168
7.10.3FSK解调VHDL程序及仿真169
7.11多功能波形发生器VHDL程序与仿真171
参考文献/178
前言/序言
近年来,随着电子技术、计算机应用技术和EDA技术的不断发展,利用FPGA/CPLD进行数字系统的开发已被广泛应用于交通运输、航空航天、精密仪器、医疗电子、工业控制等各领域。FPGA/CPLD具有功能强大、开发周期短以及产品集成度高、易于修改等特点,并且FPGA/CPLD本身发展非常迅速,高密度、高性能、低成本的FPGA器件推陈出新,也促进了FPGA/CPLD成为当今硬件设计的首选方式之一。熟练掌握FPGA/CPLD设计技术已经是电子设计工程师的基本要求。
VHDL语言作为国际标准的硬件描述语言,已经成为工程技术人员和高校学生的必备技能。本书例子中的文本编辑均采用VHDL语言编写,书中所有实例都已通过仿真和硬件测试。
全书根据EDA应用技术,特别是结合FPGA应用领域包含的主要内容编写,并以实例的形式介绍了Altera公司推出的QuartusⅡ13.1设计平台以及Modelsim10.0c仿真平台。本书由浅入深,先介绍FPGA设计流程,然后介绍开发平台、仿真平台、VHDL语言,最后讲解了典型的应用实例。
本书分7章,其中第1章介绍了什么是FPGA,FPGA设计的环境,设计流程,所使用的语言等;第2章介绍了FPGA的开发平台,主要讲解Altera的QuartusⅡ13.1,本章图文并茂,以简单的实例为主,重点讲述使用软件的完整开发流程,包括输入、编译、仿真以及下载;第3章介绍了Modelsim10.0c仿真平台,介绍了使用Modelsim10.0c进行功能仿真与时序仿真,学完本章即可完成基本的仿真,Modelsim功能十分强大,由于篇幅的限制,不做进一步讲解;第4章介绍了VHDL的语言基础,以简单的实例说明VHDL程序的基本组成;第5章介绍了VHDL的数据类型与运算操作符,为后续程序奠定基础;第6章介绍了VHDL的主要描述语句;第7章是实例,详细介绍了如何利用FPGA进行程序设计,既有设计原理,也有程序说明,并在最后给出仿真结果。
本书是编者在FPGA学习和实践中的经验点滴,书中既有日常的学习笔记,对一些常用设计技巧和方法进行深入探讨,也有很多生动的实例,这些实例大都是以特定的工程项目为依托,具有一定的借鉴价值,还有多个完整的项目工程实例,让读者从系统角度理解FPGA的开发流程。
本书从工程实践出发,旨在引领读者学会如何在FPGA的开发设计过程中发现问题、分析问题并解决问题。本书所有程序都是测试过的,读者如果需要可发电子邮件至yj74615@163.com联系索取相应资料。
本书可用作高等院校计算机专业本、专科生的教材或教学参考书,也可以作为电子技术课程设计、电子设计大赛或数字系统设计工程技术人员学习EDA技术的参考书。
本书由郭明良任主编,常国祥、王欢任副主编,书中第1章、第2章、第4章、第5章由王欢编写;第6章以及第7章的7.8~7.10节由杨立新编写,第7章的示例7.4~7.7节、7.11节由郭明良编写,第3章与第7章7.1~7.3节由常国祥编写,全书由常国祥主审。
由于水平有限,书中难免有不足之处,敬请读者批评指正。
编者
《嵌入式系统软件开发实战指南》 内容简介: 本书是一本面向嵌入式系统开发者,尤其是初学者和希望提升实际开发能力的工程师的实战指南。书中深入浅出地讲解了嵌入式系统软件开发的各个关键环节,从硬件基础知识的梳理,到嵌入式操作系统的选择与移植,再到驱动程序开发、应用程序设计以及系统调试与优化,力求为读者构建一个全面、系统且贴近实用的开发知识体系。本书强调理论与实践相结合,通过大量详实的案例和代码示例,帮助读者快速掌握嵌入式软件开发的各项核心技能,并能在实际项目中灵活运用。 第一部分:嵌入式系统基础与硬件交互 在嵌入式系统开发的世界里,硬件与软件的紧密结合是其核心特征。本书的开篇将带领读者走进嵌入式系统的微观世界,从理解微处理器与微控制器(MCU)的基本架构入手。我们将详细介绍CPU的核心工作原理,包括指令集、流水线、中断机制等,这些是理解软件如何在硬件上运行的基础。同时,书中会系统阐述嵌入式系统中常见的存储器类型,如RAM、ROM、Flash Memory等,并解释它们在系统启动、程序执行以及数据存储中的作用。 更重要的是,本书将重点关注嵌入式系统中不可或缺的硬件接口。我们将深入讲解GPIO(通用输入输出)的工作原理和配置方法,这是最基础的硬件交互方式,可用于控制LED、读取按键等。接着,我们会详细介绍串行通信接口,如UART(通用异步收发传输器)、SPI(串行外设接口)和I2C(集成电路总线)。读者将学习如何配置这些接口,发送和接收数据,并理解它们在连接外部传感器、通信模块时的实际应用。例如,我们将通过实例演示如何使用UART与PC进行通信,如何使用SPI驱动SPI接口的显示屏,以及如何使用I2C读取温度传感器的数值。 此外,本书还将介绍一些更高级的硬件概念,如ADC(模数转换器)和DAC(数模转换器),它们在处理模拟信号时至关重要,对于需要与现实世界进行交互的嵌入式系统尤为关键。我们将讲解它们的原理,并提供如何配置和读取ADC数据的实例。定时器/计数器也是嵌入式系统中非常重要的资源,它们可以用于产生延时、定时中断、PWM(脉冲宽度调制)等。本书将详述定时器的不同工作模式,并通过实例展示如何利用定时器实现精确的延时和PWM波形生成,这在电机控制、LED亮度调节等应用中至关重要。 理解中断机制是嵌入式软件开发的核心技能之一。本书将深入讲解中断的工作原理,包括中断向量表、中断服务程序(ISR)的设计以及中断优先级管理。我们将通过实际例子,如按键中断、定时器中断等,演示如何编写高效且可靠的中断服务程序,以实现对外部事件的及时响应。 第二部分:嵌入式操作系统(RTOS)的选择与移植 对于大多数功能相对复杂的嵌入式系统而言,采用嵌入式实时操作系统(RTOS)是提高开发效率和系统稳定性的必然选择。本部分将首先深入剖析RTOS的核心概念,包括任务(Task)、任务调度(Task Scheduling)、信号量(Semaphore)、互斥锁(Mutex)、消息队列(Message Queue)以及事件标志组(Event Flag Group)等。读者将理解这些概念如何在多任务环境下协调并发执行,以及如何利用它们来构建健壮的应用程序。 本书将重点介绍当前主流的嵌入式RTOS,如FreeRTOS、RT-Thread等。我们将详细分析它们的架构、特点、优势以及适用场景,帮助读者根据实际项目需求做出明智的选择。对于FreeRTOS,我们将从其轻量级、易于移植的特点出发,深入讲解其API接口,包括任务创建与删除、任务优先级管理、任务间通信机制等。对于RT-Thread,我们将介绍其模块化设计、丰富的组件以及强大的实时性,并展示如何利用其生态系统快速构建复杂应用。 RTOS的移植是将其应用到特定硬件平台上的关键步骤。本书将提供一套系统性的RTOS移植流程,从硬件平台初始化、时钟配置、内存管理到中断控制器配置,再到RTOS核心的初始化。我们将以一个典型的ARM Cortex-M系列MCU为例,详细演示如何将FreeRTOS移植到目标开发板上,包括配置芯片的启动文件、中断向量表以及提供底层的硬件抽象层(HAL)。读者将学会如何理解RTOS内核与硬件之间的接口,并能够根据自己的硬件平台进行相应的修改和适配。 除了核心的RTOS功能,本书还将介绍RTOS提供的其他关键组件,如文件系统(如FATFS)、网络协议栈(如lwIP)以及设备驱动框架。我们将讲解如何在RTOS环境下集成和使用这些组件,从而为嵌入式系统提供文件存储、网络通信等高级功能。 第三部分:嵌入式设备驱动程序开发 设备驱动程序是连接操作系统与硬件之间的桥梁,其稳定性和高效性直接关系到整个嵌入式系统的性能。本部分将系统地讲解嵌入式设备驱动程序的开发方法和技巧。我们将从驱动程序的基本结构和工作原理开始,介绍常用的驱动程序模型,如字符设备驱动、块设备驱动和网络设备驱动。 本书将重点讲解如何为常见的嵌入式硬件编写驱动程序。我们将从简单的GPIO驱动入手,讲解如何通过编程控制LED的亮灭、读取按键的状态。接着,我们将深入到串口(UART)驱动的开发,讲解如何实现数据的发送和接收,以及如何处理收发过程中的各种异常情况。对于SPI和I2C设备,我们将详细介绍如何编写相应的驱动程序,以控制外部传感器、存储器等设备。例如,我们将演示如何编写一个驱动程序来控制一个SPI接口的OLED显示屏,并在屏幕上显示文本和图形。 对于需要更复杂交互的硬件,如ADC、DAC、PWM等,本书也将提供详细的驱动开发指导。我们将讲解如何配置硬件寄存器,编写中断服务程序来处理数据转换完成等事件,并展示如何将这些驱动集成到RTOS的设备驱动框架中,方便应用程序调用。 此外,本书还将探讨驱动程序开发的最佳实践,包括如何进行错误处理、如何优化驱动程序的性能、如何保证驱动程序的稳定性和可重用性。我们将介绍一些常用的调试技巧,如使用逻辑分析仪、示波器以及printf调试等,帮助读者快速定位和解决驱动程序中的问题。 第四部分:嵌入式应用程序设计与开发 掌握了RTOS和驱动程序开发的基础后,本部分将聚焦于嵌入式应用程序的设计与开发。我们将从应用程序的整体架构设计开始,讲解如何根据项目需求划分模块,如何设计清晰的接口,以及如何选择合适的开发模式,如状态机、生产者-消费者模式等。 本书将提供大量实例,展示如何利用RTOS提供的服务来构建功能丰富的应用程序。我们将从一个简单的任务管理应用开始,演示如何创建和管理多个任务,并使用信号量和互斥锁来解决任务间的同步和互斥问题。接着,我们将介绍如何使用消息队列实现任务间的数据传递,以及如何使用事件标志组来协调复杂的多任务交互。 对于涉及用户界面的嵌入式系统,我们将介绍图形用户界面(GUI)库的集成和应用。例如,我们将演示如何将一个轻量级的GUI库集成到RTOS环境中,并创建简单的窗口、按钮和文本显示,实现与用户的交互。 网络通信是现代嵌入式系统中越来越重要的组成部分。本书将讲解如何利用RTOS提供的网络协议栈(如lwIP)来开发网络应用程序。我们将从TCP/IP协议的基本概念讲起,演示如何编写客户端和服务器应用程序,实现数据的远程传输和控制。例如,我们将开发一个简单的Web服务器,允许用户通过浏览器访问嵌入式设备并进行控制。 文件系统的应用也是嵌入式系统开发中常见的功能。本书将介绍如何使用RTOS提供的文件系统接口,如FATFS,来管理存储设备上的文件。我们将演示如何创建、读取、写入和删除文件,以及如何将数据保存到Flash或SD卡中。 第五部分:嵌入式系统调试与优化 在嵌入式系统开发过程中,调试和优化是至关重要的环节,直接影响到产品的质量和性能。本部分将系统地介绍嵌入式系统的调试方法和优化策略。 我们将首先讲解常用的调试工具和技术,包括集成开发环境(IDE)提供的调试器(如GDB)、逻辑分析仪、示波器、串口调试助手以及JTAG/SWD调试接口。我们将详细介绍如何使用这些工具来设置断点、单步执行、查看变量值、监视内存以及跟踪程序执行流程,从而快速定位代码中的错误。 对于RTOS环境下的调试,我们将介绍一些特有的技巧,如利用RTOS提供的调试信息(如任务状态、堆栈使用情况)来分析系统行为,以及使用RTOS自带的调试工具(如果可用)来监控任务间的通信和同步。 除了功能性调试,代码性能优化也是嵌入式开发中不可忽视的一环。本书将介绍多种性能优化方法,包括算法优化、数据结构优化、代码重构以及编译器优化选项的合理使用。我们将重点关注嵌入式系统资源受限的特点,讲解如何在保证功能性的前提下,最大程度地提升代码的执行效率和降低资源占用。 内存管理是嵌入式系统优化的另一个关键领域。我们将介绍如何分析内存使用情况,如何避免内存泄漏,以及如何使用嵌入式内存分配器来提高内存使用效率。对于实时性要求极高的应用,我们将介绍如何进行CPU时间片优化,如何减少中断延迟,以及如何对关键代码路径进行性能分析和优化。 最后,本书还将讨论嵌入式系统的功耗优化。我们将介绍如何分析和测量系统的功耗,以及如何通过软件和硬件相结合的方式来降低功耗,延长电池寿命。 总结: 《嵌入式系统软件开发实战指南》是一本集理论、实践、技巧于一体的全面指导手册。本书旨在帮助读者建立起扎实的嵌入式软件开发基础,掌握从硬件交互到系统级应用的各项核心技能。通过本书的学习,读者将能够独立完成嵌入式系统的软件设计、开发、调试和优化工作,为应对日益复杂的嵌入式项目打下坚实的基础。