手把手教你学FPGA设计基于大道至简的至简设计法
序随着微电子技术的发展,可编程门阵列FPGA技术已经成为信息产业最热门的技术之一,其应用范围遍及电子、通信、自动化、医疗、军事和航空航天等多个热门领域。在数字集成电路设计领域,前端验证工作通常依托FPGA,并由那些精通硬件构架的FPGA系统工程师来完成。因此,FPGA技术的设计和开发已成为当前发展迅速的朝阳行业之一。作者曾在华为海思、展讯通信等集成电路设计企业参与了FPGA大型项目的开发设计,近年来又在明德扬科技教育公司从事FPGA的教学培训,从而有机会深入研究和采用多种教学方法进行试验,以便把那些构成FPGA设计基础的知识模块和工具平台,变成FPGA学习者能够实际运用的方法,而更重要的是能够帮助学习者消化核心功能及其设计流程。于是,本书便应运而生,旨在为FPGA学习者提供一种FPGA的至简设计方法。与一些将FPGA设计的理论知识和软件工具作为叙述重点的教程不同,本书的重点不在于介绍FPGA设计是什么,而侧重于引导学习者怎么做。经过这样设计后的内容可以引起学习者浓厚的兴趣,并使学习者在短时间内快速掌握FPGA设计方法,正如诺贝尔文学奖获得者、法国作家AnatoleFrance的精辟格言:教学的全部艺术就是唤醒年轻心灵的天然好奇心。
黄君凯
2016年10月于广州暨南园
前言
随着我国工业智能化的发展,工业企业的个性化需求剧增。相应的,对FPGAIC行业人才的需求,特别是高端人才的需求也随之剧增。然而,目前国内的FPGAIC教育相对落后:高等院校缺乏项目经验丰富的教师;现有教材陈旧,无法跟上最新技术的发展;学习资料缺乏,大都重视软件操作示范,不重视设计理念传授等。这些客观因素使学生对FPGAIC望而生畏,即使有大量学生立志学好FPGAIC设计,但多数不得要领,最终放弃学习。由于失去了群众基础,导致国内缺乏高素质的FPGA人才,从而对我国工业智能化的发展产生了一定的影响。为了扩大FPGAIC设计的群众基础,降低FPGAIC设计的学习门槛,明德扬科技教育公司简称明德扬结合培训班、企业内训,以及多年国内顶尖企业的工作经验,研发出一套FPGAIC设计流程至简设计法。至简设计法是明德扬丰富项目经验的结晶,它将高级的设计技巧转化成几条规则,掌握了这些规则就相当于拥有多年的经验。至简设计法流程中的每一步都简单易操作,容易上手,便于掌握。掌握至简设计法,可以实现0仿真、0调试、一次成功的设计,极大地提高了工作效率。明德扬致力于打造最简单、最实用、最高效的FPGAIC设计法,不遗余力地为普及FPGAIC设计,提升客户竞争力,提高我国该行业整体的设计能力做贡献。很多同学在刚开始学习FPGAIC设计时都会走弯路,下面是两位学员的学习经历与心得。学员一:①买一本书,花大量的时间学习语法;②到网上搜一些资料,类似大全、玩转之类的速成之法;③买一个开发板,看代码、下载例程看现象。学员一的情况具有普遍性,作为一个刚接触FPGA的初学者,这似乎是必经之路,很多学员在来明德扬学习之前就以这样的方式学了大约半年的时间。当然,这样的学习方法不是说学不好,而是很难学好,或者需花费很长的时间。以看书学习为例,可以说书是根源,学习任何知识都离不开书,书作为一个知识体系,要求全面、系统,但作为初学者就没有必要学得那么全面、系统了。很多学员在学Verilog时,就是拿一本书,仔仔细细地看,花费了不少时间,但效果却不理想。我们都知道,Verilog的很多语法是不能综合的,而这些语法也没有实际的电路与之对应,当然在具体的逻辑设计时也是不能用的,但书上并不会很明确地指出。再举一个例子,也是很多人都犯过的一个错误:以普通信号作为always的敏感信号列表。当我们这样写的时候,根本不会意识到这是错误的,因为书上就是这么教的。有经验的工程师都知道,对于Verilog语法,书上是一个全集,很多用法作为知识点是对的,但在实际应用中就是错误的。因此,太依赖书本的学习,反而会学得全而不好,还浪费时间。学员二:一开学我立马就买了当时很多人推荐的某一品牌的一款开发板,但却不知道怎么学,上来就死抠代码,感觉好费劲啊!一方面我当时的基础确实很差,本科时候就没写过任何代码;另一方面看别人写的代码本来就费解,而卖家的视频也是蜻蜓点水一带而过,视频上提到的问题不是我的问题,我想解决的问题视频中又没说,反正我的困惑与卖家的视频就不在一个频道上,可能我的问题人家压根儿就觉得不是问题,因为我当时就是不折不扣的零基础。就这样,我混混沌沌地看了好多天代码,最终还是云里雾里。当时有人跟我讲过要去仿真看波形,而不是看代码,但是装什么软件,怎么装,软件怎么用,我一点都不知道。确实蛮痛苦的。以上两位同学遇到的问题,相信大多数初学者也遇到过,也很受困扰。明德扬在培训学员的过程中发现了一个普遍存在的问题:不同的人,代码风格往往也是不一样的。而一套优秀的代码规范,对团队、企业有非常强的指导意义,可以给他人提供一个可读性强、便于维护纠错的环境,这可以大大提高团队、企业的工作效率。而市面上大多数FPGA教材往往并不重视代码规范,大篇幅的软件使用、语法知识和大量理论知识令初学者望而生畏,其实很多语法在实际工程中并没有机会用到。另外,很多FPGA书籍都会讲一个个独立的项目如何实现,以及针对不同项目的相应设计思路,但却缺少一套通用的设计方法,这样同学们最多只能学一个项目会一个项目,而不能举一反三。也正是因为如此,才有这本书创作的初衷。为了帮助更多的FPGA学习者更好地理解FPGA设计的精髓,提高学习效率,明德扬提出了至简的设计思想,并创作了这本书。大道至简与至简设计法大道至简出自老子的《道德经》:万物之始,大道至简,衍化至繁。大道至简是指大道理基本原理、方法和规律是极其简单的,简单到一两句话就能说明白,把复杂冗繁的表象层层剥离之后就是事物最本质的东西。所谓真传一句话,假传万卷书。一门技术一门学问,弄得很深奥是因为没有看穿实质,就像FPGA的学习,搞得很复杂是因为没有抓住代码的关键。1.大道至简,抓住根本大道理是极其简单的,简单到一两句话就能说明白。事情难就难在简单,简单不是敷衍了事,也不是单纯幼稚,而是最高级的智慧和成熟睿智的表现。
至简设计法是明德扬通过多年的教学经验找到的学习FPGA的关键和根本方法。FPGA学习既不能花大量时间在软件工具语法上,也不能花精力在独立的知识点上,而应花费80%的时间在20%的核心功能上。什么是核心功能?至简设计中一个完整的设计流程就是核心功能。注意,这里说的是设计流程,而非项目流程。市面上的FPGA设计教程大部分讲的都是项目流程,即介绍功能新建项目加入设计文件编译工程配置引脚上板。这些流程都是介绍软件是怎么用的,而最重要的设计文件是如何设计的,都没有详细介绍。至简设计法的设计流程,讲的是实现一个功能的过程,是将功能转化成代码的过程。不仅简单的UARTSPIVAGIIC摄像头采集,甚至复杂的边缘检测SDRAM接口软件无线电等,都可以采用这个设计流程将功能转化成代码。2.大道至简,衍化至繁大道至简是一种哲学,无论是做人还是做事它都会给人以指导。在当今这个大千世界中,我们要学会把复杂变成简单,用智慧创造简单,在变迁中不断地升华。至简设计法是先将复杂的模块划分成简单的模块,再用模块设计流程设计出来。FPGA学习的过程,就是不断地将复杂的模块,划分成简单模块,再用至简设计法设计的过程。不断地重复这个过程,像搭积木一样一层层地堆砌,最终就能通过简单的规则做出复杂的设计。3.大道至简,凝聚智慧大道至简,经过整合创新,跳出原来的框框,去粗取精,抓住关键和根本,挥动奥卡姆剃刀,剔除无效的、可有可无的、非本质的东西,提炼出精华。至简设计法,看似简单的几个规则,然而总结归纳出这些规则,却需要相当大的智慧:必须要有众多领域的项目经验,才能获知各领域的设计需求和要点;必须要有丰富的工作经验,才能拥有高超的设计技巧;必须要有丰富的教学经验,明白学习的难点和重点,明白学生思考的方式,才能将高超的设计技巧转成可学习和操作的流程;必须要有很大的智慧,不断地归纳和总结,才能将这些流程和步骤变得简单易用。至简设计法,是结合以上要点,经过明德扬多年探索的智慧结晶。在此,我希望与更多FPGA学习者分享,让更多的人应用此设计方法,在FPGA设计学习和做实际项目中得心应手,为推进国家产业智能化发展贡献绵薄之力。
本书共8章,分为三篇,其中每篇对应的章和具体内容介绍如下:第一篇包括第1~4章,主要介绍FPGA设计核心模块。本书提出把模块分为三大类型,即计数器架构、状态机架构及FIFO架构,并配有项目设计练习。第二篇包括第5、6章,主要介绍模块的由来模块划分。本书总结了两大类常见的模块划分应用场合,即FPGA内部模块之间的交互和FPGA与外设的交互,并配有实践练习。第三篇包括第7、8章,主要介绍基于OV7670的图像采集,以及基于SDRAM的VGA显示控制器。应用前两篇提到的三大架构及模块划分来完成这个工程,进一步深化对前面内容的理解。本书特点1.注重设计思路本书重点讲项目实现的整体思路,而并非讲某一具体项目的实现。2.设计理念本书提出了至简的设计理念,一次只考虑一个问题。3.优秀的代码风格及规范本书提供的代码风格统一,代码的规范是资深从业人员从多年工作经验中总结、提练,并结合明德扬就业培训班培训成果所得到的。优秀的代码风格对团队、企业都有非常大的指导意义。
4.注重实践本书选择以案例的形式进行编写,所有方法均用例子阐述,并配有丰富的项目实践练习。5.不罗列知识点坚持项目中遇到什么问题就解决讲解什么问题,避免罗列知识点,让FPGA学习者集中精力学习FPGA设计的核心。如何学习本书至简设计法的目的,是对程序编写工作中易出现的混乱状态进行规范化,以达到简便、有序、快捷的效果。本书通过例题引出概念,并详举大量实际案例进行分析、对比,帮助读者理解至简设计法的设计思想,清晰直观地学习和掌握该方法。此外,作者对于二八定律在FPGA设计方面的应用有独到见解:采取权值阶梯模式,即强调核心功能的学习、巩固和使用,以及一般功能在实际中边做边学的模式,来达到在最短的时间能独立完成项目的效果。另外,希望读者在完成项目时,先根据功能要求自己试着构思、编写代码,再与给出的思路、代码相比较,这样读者才能深刻理解至简设计法,并把这套设计思想真正运用到实践中去。从明德扬就业培训班的培训成果来看,只要耐心学完整套设计思想,就能独立完成项目设计。设计者拿到一个新项目,知道从哪里下手,且编写的代码可综合,逻辑缜密,在设计过程中对逻辑变化考虑周全,就可在短时间内调试成功并上板实现。本书虽然没有语法篇,但通篇用到的语法都是比较简单、常用的,有一定Verilog基础的读者读起来必定毫无障碍,而初学者也不必担心看不懂,明德扬会推出配套视频,介绍用到的语法知识点。另外,软件使用篇也包括在配套视频中,主要包括QuartusII,Modelsim,Gvim的使用。本书可作为高等院校电子工程类、自动控制类、计算机类等专业的教材,亦可供FPGA相关行业的爱好者和从业人员自学与参考。感谢参与本书部分内容编写及在编写过程中提供宝贵建议的黄君凯、崔苗、李国庆和陈泽熹。还要感谢北京航空航天大学出版社的编辑老师们,在他们的大力支持和帮助下本书才得以与广大读者见面。由于作者水平有限,难免存在错误和遗漏之处,恳请各位读者批评指正。同时,也欢迎大家就FPGA开发相关技术与作者交流,联系邮箱:book@mdyedu.com。配套视频、开发板购买地址以及例程源码和相关资料下载地址:http:www.mdyedu.com。潘文明易文兵2016年12月于深圳明德扬科技教育有限公司
|