本书系统论述了单片机与CPLD/FPGA之间的通讯和合作方法,并全面阐述了高精度频率计、数控波形发生器、简易逻辑分析仪等单片机与CPLD/FPGA综合应用系统的设计思想和具体实现。书中作为实例的几个系统,均为全国大学生电子设计竞赛历年来具有代表性的赛题,因此对准备参加电子设计竞赛的学生有很强的指导作用。本书融入了作者设计系统的经验和体会,并提供了带详细注释的单片机程序和VHDL程序,具有较好的启发性和借鉴意义。\r\n 本书可作为全国大学生电子设计竞赛、电子科技活动的培训参考资料,也可作为电子爱好者及高校师生进行数字电路设计的参考。
第1章 AVR单片机及其开发工具\r\n 1.1 什么是单片机\r\n 1.2 各种品牌的单片机及其特点\r\n 1.3 AVR单片机的C编译器\r\n 1.3.1 C编译器的选择\r\n 1.3.2 makefile的编写及其作用\r\n 1.4 AVR单片机程序的仿真与调试\r\n 1.4.1 在AVRStudio中实现模拟仿真\r\n 1.4.2 利用目标板上的硬件资源调试程序\r\n 1.5 AVR单片机的编程下载软件\r\n 1.5.1 AVRProg简介\r\n 1.5.2 PonyProg简介\r\n 1.6 AVR单片机参数计算器\r\n 1.7 设计个性化的AVR单片机集成开发环境\r\n第2章 AVR单片机入门\r\n 2.1 ATmegal6(L)单片机的主要特点与内部结构\r\n 2.2 ATmegal6(L)的主要引脚及其作用\r\n 2.2.1 电源与复位电路\r\n 2.2.2 时钟电路\r\n 2.2.3 I/O端口\r\n 2.3 输入/输出端口的使用\r\n 2.4 常量与变量及其占用的存储空间\r\n 2.4.1 在SRAM中定义变量和常量\r\n 2.4.2 在Flash中定义常量\r\n 2.4.3 在EEPROM中读/写变量\r\n 2.5 中断\r\n 2.5.1 ATmegal6L的中断源\r\n 2.5.2 对中断进行操作\r\n 2.6 定时器/计数器\r\n 2.6.1 定时器0\r\n 2.6.2 计数器0\r\n 2.6.3 定时器/计数器1\r\n 2.7 串行外设接口\r\n 2.8 简易数字钟\r\n 2.8.1 16X2字符型液晶的使用\r\n 2.8.2 4X4矩阵式键盘的使用\r\n 2.8.3 简易数字钟的设计\r\n 2.9 液晶显示与键盘扫描进阶\r\n第3章 CPLD/FPGA与VHDL入门\r\n 3.1 CPLD/FPGA与硬件描述语言\r\n 3.1.1 初学者使用HDL需要注意之处\r\n 3.1.2 用Max+PluslI进行CPLD/FPGA开发的简单流程\r\n 3.2 VHDL入门解惑\r\n 3.3 常用电路的VHDL程序\r\n 3.3.1 分频电路\r\n 3.3.2 带使能端的7段数码管.驱动程序\r\n 3.3.3 串行连接的7段数码管驱动程序\r\n 3.3.4 键盘扫描程序\r\n 3.3.5 键盘防抖电路\r\n 3.3.6 同步整形电路\r\n 3.3.7 SRAM控制电路\r\n 3.3.8 内部RAM的读/写\r\n 3.4 系统设计实例与练习\r\n 3.4.1 交通灯控制器\r\n 3.4.3 三层电梯控制器\r\n第4章 单片机与FPGA之间的通信\r\n 4.1 单片机控制FPGA启动才日应的功能模块\r\n 4.2 单片机向FPGA传输命令字或少量数据\r\n 4.3 FPGA向单片机传输命令字或少量数据\r\n 4.3.1 单片机从FPGA'取”数据(通过SPIE1)\r\n 4.3.2 FPGA向单片机“送”数据\r\n 4.4 单片机与FPGA互传大量数据\r\n 4.4.1 使用双端ElRAM进行数据互传\r\n 4.4.2 使用Flexl0K10的内部RAM\r\n 4.5 小结\r\n第5章 简易数字频率计\r\n 5.1 测频的原理\r\n 5.2 测周期的原理\r\n 5.3 系统设计\r\n 5.3.1 总体方案\r\n 5.3.2 测频/测周与占空比测量模块设计\r\n 5.3.3 脉冲宽度测量模块的设计\r\n 5.3.4 并/串转换模块与单片机程序设计\r\n第6章 波形发生器\r\n 6.1 直接数字频率合成\r\n 6.2 系统的初步方案\r\n 6.3 查找表的生成与使用\r\n 6.3.1 用TurboC生成'正弦波查找表”和“三角波查找表”\r\n 6.3.2 单片机生成并处理查找表\r\n 6.4 FPGA设计方案及其模块对应的单片机程序\r\n 6.5 系统的抗干扰设计\r\n第7章 简易逻辑分析仪\r\n 7.1 简易逻辑分析仪原题\r\n 7.1.1 任务\r\n 7.1.2 要求\r\n 7.1.3 评分标准\r\n 7.1.4 说明\r\n 7.2 竞赛报告\r\n 7.2.1 摘要\r\n 7.2.2 方案论证与比较\r\n 7.2.3 系统设计\r\n 7.2.4 软件设计\r\n 7.2.5 结论\r\n 7.2.6 英文摘要\r\n参考文献
SOC(SystemOnChip)是将来电路设计的一个趋势。由于FPGA芯片密度不断增加和新一代EDA开发工具的使用,利用FPGA器件实现SOC已成为可能,人们将这项技术称为SOPC(System On a Programmable Chip,可编程单芯片系统)。但就目前而言,将微处理器(microprocessor)嵌入FPGA需要消耗较多的资源,对一些门数较少的FPGA来说是不可能的。虽然Altera、Atmel等公司都推出了内嵌微处理器的FPGA,但是由于价格、开发手段和方法等因素的影响,在未来一段较长的时间内,人们将更多地采用单片机与FPGA配合的方法设计系统,以发挥单片机的灵活性和FPGA的高速性。因此,研究单片机与FPGA之间的通信和配合方法就显得十分重要。
本书从实用角度出发,总结了单片机与FPGA之间通信与配合的几种方式,既充分利用了现用的开发工具和方法,也为读者将来转向SOPC奠定了一定的基础。
所面向的读者
本书面向的对象较广,既可以用作高校教学(特别是针对全国大学生电子设计竞赛的培训),又可以作为数字系统设计人员的参考书。
全国大学生电子设计竞赛自1994年至今已经成功举办了6届,第6届竞赛的参赛人数已经接近10 000人。电子设计竞赛对培养参赛学生的实际动手能力,激发创新思维,锻炼意志品德,树立团队协作精神大有裨益,因而受到了社会的认可和在校学生的普遍欢迎。但现有面向全国大学生电子设计竞赛的培训书籍十分短缺,参赛学生可以借鉴的只有往年的参赛论文集。而论文一般只给出大概的方案及简要的原理图,对一些基础较弱的学生来说,看参赛论文无异于看天书。本书则是一本真正的培训教材,书中所选的实例都是以往有代表性的赛题。书中给出了关键的源程序和原理图,并且在章节的安排上由浅入深,不但适合给有一定基础的学生作参考书,也同样适合作为基础较弱的学生的培养教材。
采用的器件与编程语言
所有范例中,单片机均采用AVR ATmega16,FPGA均采用Altera公司的Flex10K10。大部分单片机程序不用修改或稍加修改就可以应用于AT90S8515、 AT90S8535、 ATMega161、 ATMega162以及更高级的ATmega系列单片机。对于使用51系列单片机的读者来说,此书亦极具参考价值,书中提到的单片机与FPGA之间的通信方法同样适用于带SPI接口的51单片机。FPGA也不仅限于Altera Flex10K10,某些较小的系统可以在Max7128上实现,其余的可在更高级的FPGA(如Acex1K系列)上实现。书中提到的一些原则和方法同样适用于Xilinx的FPGA,VHDL程序基本不用修改就可移植到Xilinx的FPGA上。
采用的单片机编程语言是GCC,但由于各种C语言编译器支持的基本语句是相同的,只是中断处理方式有所不同,因此使用ICCAVR。CodeVision等编译器的读者也可使用本书,只需做很小的修改,就可以将GCC的程序在ICCAVR和CodeVision上编译。本书的FPGA设计部分,采用原理图与VHDL相结合的方法,适用于对VHDL有一定了解的读者。如果读者习惯于使用VerilogHDL,那么建议在读本书之前,先看看VHDL的相关教材。
结构
本书共分7章,各章的内容简介如下:
第1章AVR单片机及其开发工具
简要介绍单片机的概念及市面上常见的单片机及其特点;介绍几种常用的AVR单片机的C编译器;介绍AVR单片机的仿真软件、下载软件、参数计算器等开发工具;介绍为GCC定制个性化集成开发环境的方法。
第2章AVR单片机入门
简要介绍AVR ATmega16的结构与GCC入门知识;介绍16×2字符型液晶显示器和4×4矩阵键盘的使用;章末给出了一个经典的应用实例: 简易数字钟。
第3章CPLD/FPGA与VHDL入门
简要介绍CPLD/FPGA及其在Max+PlusII中的开发流程;以问答形式解答VHDL初学者最容易感到困惑的一些问题;给出一些常用电路的VHDL程序,包括“7段数码管”、“同步整形电路”、“内/外部SRAM读写电路”等;章末给出了两个系统设计实例:“交通灯控制器”和“乒乓球游戏机”,并给读者留了一道经典的状态机练习题“三层电梯控制器”。这些实例和练习题,都是北京邮电大学信息工程学院的学生在准备北京市大学生电子设计竞赛时所做的练习。实践证明,这些题目对提高初学者的CPLD/FPGA开发水平是很有帮助的。
第4章单片机与FPGA之间的通信
本书的核心章节,前面几章是为本章做铺垫,而后面几章则是为本章做诠释(实例)。本章将单片机与FPGA之间的通信分为以下几种,并加以系统地阐述:① 单片机控制CPLD启动相应的功能模块;② 单片机向CPLD传输命令字或少量数据;③ CPLD向单片机传输命令字或少量数据;④ 单片机向CPLD传输大量数据;⑤ CPLD向单片机传输大量数据;⑥ 以上某几种情况的组合。
第5章简易数字频率计
题目源于1997年全国大学生电子设计竞赛题;介绍了测频率周期、测占空比、测脉冲宽度的原理;给出了主要模块的设计思路、流程图和源程序。
第6章波形发生器
题目源于2001年全国大学生电子设计竞赛题;介绍了直接数字频率合成(DDFS)原理和利用PC机中的C编译器(Turbo C 2.0)辅助单片机系统开发的方法;给出了单片机向FPGA传输少量参数和大量数据的实例;给出了主要模块的设计思路、流程图和源程序。
第7章简易逻辑分析仪
题目源于2003年全国大学生电子设计竞赛的D题,本章以竞赛论文的形式出现(本设计是竞赛作品,获全国一等奖,并获得“索尼杯”提名)。有志参加电子设计竞赛的大学生可以从中学习写作竞赛论文的方法,对其他电子设计爱好者来说,此论文也可作为一个很好的参考材料。
致谢
本书在编写过程中,得到了北京邮电大学信息工程学院“创新实验室”主任郭莉副教授的大力帮助与支持。郭莉老师带领“创新实验室”的学生参加了多次电子设计竞赛,取得了令人瞩目的成绩,参赛学生获奖率为100%,其中一半的学生获得了一等奖。郭莉老师在百忙之中仍仔细审阅了全书,并提出了许多宝贵的意见,在此向她表示衷心的感谢。
此外,本书在正式出版前,曾作为“创新实验室”的内部教材,用以指导学生参加各种电子设计竞赛。本书得到了学生的肯定,也从参赛学生中得到了很多反馈意见,在此要特别感谢杨芳芳、张万能、赵荣华、于光炜、刘阳、赵莹、王志勇、胡子明等同学,他们的意见对本书的改进起到了十分关键的作用。
特别值得一提的是,本书写作过程中得到双龙公司的大力支持。双龙公司为作者提供了部分实验仪,并准备为本书开设网站,提供部分源程序供读者下载。本书最初是应双龙公司总经理耿德根先生之邀而写的,如果没有耿先生的鼓励与支持,本书是不可能成形的。在此向双龙公司与耿德根先生致以诚挚的谢意。
如果您在阅读本书的过程中发现错误或是有改进本书的建议,请您通过huangren@ieee.org与作者联系。
作者
2004年5月于北京邮电大学