科技>电子技术>电子系统设计与仿真
FPGA设计技巧与案例开发详解(第2版)

FPGA设计技巧与案例开发详解(第2版)"

作者:韩彬,于潇宇,张雷鸣
ISBN:9787121278969
定价:¥88.0
字数:1062千字
页数:664
出版时间:2015-12
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

本书由浅入深、由表及里,从FPGA技术的探索到资源的发现与利用,从硬件版图规划与设计到逻辑电路验证与实现,从模块化功能的研究与积累到系统集成的综合与Timingquest时序优化,系统、全面地介绍Altera FPGA的开发流程。本书的所有例程均经过千锤百炼,相关FPGA设计的资源均由笔者多年整理归纳,希望读者能够妥善利用。

前言

序一~序八 既然选择了远方,便不顾风雨兼程 从正确通往完美的路,是很遥远并万分艰辛的…… 决定执笔此书,已经有将近一年的光阴。第一版已售罄,有幸迎来了本书第二春。时间过得太快,甚至都没来得及回味,却又得开始不停地追随。我们总是在不停地奔跑,却又没有时间停下来思索——我们,究竟在坚持什么?是因为兴趣使然,挡不住的诱惑?还是因为吃穿住行、柴米油盐酱醋?是因为歪打正着,稀里糊涂地过活?还是因为雄心壮志,不顾一切地追求…… 也许我只是一个FPGA界的小人物,也许我还没有资格在数字界说三道四,也许我还不足以写出一本脍炙人口的好书,也许这本书会因为相关的不足而被喷得体无完肤,但仅此希望,我的点滴总结,我的肺腑之言,能够帮助一些曾经与我一样,在FPGA成长道路上迷茫、挣扎、徘徊的朋友,能让他们少走些学习FPGA的弯路,能让他们认清FPGA的真谛,能让他们掌握设计的精髓,能让他们从此有目标地奋斗前行。 我出生于浙江诸暨的一个小山区,远离都市的繁华,从小成长在大山的怀抱。在长辈们眼里,考上大学,是山区孩子唯一的出路。从小按部就班地读书,千篇一律地重复,很难有自己的追求,直到高考的到来。高考,是我平凡命运的转折点,也是我跨出的人生的第一步。与大部分人一样,我并没有因为太多的了解,或者由于兴趣而选择专业,而是顺应时代的潮流。2008年9月,我第一次朦胧地跨入了电子信息工程这个专业(当年相当热门的一个专业)。 坐落于天堂杭州的杭州电子科技大学(简称杭电),是一所以电子专业著称的高校,也是一所改变我人生轨迹的大学。太多人因为电子梦,聚集到了这里;太多人满载着知识与梦想,挥手告别了这里。大学的四年,母校是我认清自己的净土,是我挣扎脱壳的摇篮,更是我梦想起航的地方。 作为一所以电子设计著称的高校,大部分学生都是赤裸裸地来追求技术的海洋。电子类学生对技术的狂热,尤其是大一学生的好奇,在刚入学期间表现得淋漓尽致。电子信息工程学院(简称电院)有一个无线电爱好者协会,是30多年前几位老前辈,由于彼此对无线电设计的兴趣而建立的团队,继而发展成为一个研究并培养对电子开发有热情的学生的协会。为了尊重创始人,该协会一直没改名字,但实质上一直都是一个以电子开发著称的社团。该协会是学校公认的一个以热情与激情、兴趣与责任结晶的社团,坐落于电院2#中楼,在每一届会长的带领下,以阶梯式教育的方式,在课外培养了一代又一代技术狂人,同时每年均会选拔一部分愿意留任,担负培养下一代重任的学生。几十年来,协会培养了很多电子特长的学生,包括很多留校的老师,尽管不停地更新换代,旧去新来,但却一直传承发扬着协会精神。 每年一度的电院“震‘焊’人心焊接大赛”,是进入协会的敲门砖。为了能够进入协会,当年的我从一个不认识烙铁、电阻、电容的人,夜以继日地训练,恶补电子元器件知识,掌握焊接工具的使用,从当初的拿烙铁手发抖,到最后以时间与质量,在几分钟内(具体不记得了,应该在5分钟内)焊接完一套5V直流稳压电压,而荣获了一等奖(现在回头看看,那时的焊接技术简直是“渣渣”)。也许正是因为如此,我在大一第一学期就进入了协会,认识了几位对我的大学四年有深远影响的学长——王凯与曾庆卿学长,他们在后续的日子里多次指点并教导过我,感谢他们的帮助才有了我的明天。 在随后的一段日子里,我由经常串门,升级到长期蜗居协会,我开始寻找、开始追求、开始如饥似渴地学习(现在认为是盲目追求),在仅仅半年时间内,我熟练掌握了焊接技巧(现在看来还是很“渣”),手工焊接了多路直流稳压电源,并且自学了C语言,开始意识到拥有一台电脑是多么的重要。一学期过得很快,但却过得很充实,学海无涯,我突然发现大学就是该为自己的追求而疯狂。 我真正开始学FPGA,是在大一的第二学期。那时学校搞课程改革,由潘松老师负责教学,将大三的数学、EDA课程提前到大一,好让学生们能更早地找到自己的目标,选择或决定自己未来的方向。潘松老师是《EDA技术实用教程》、《EDA技术实用教程——VHDL版》、《EDA技术与Verilog HDL》等书的作者,同时是杭州康芯电子有限公司的创始人,开发了多套FPGA实验箱、开发套件,在杭电,甚至全国多所高校都有使用,开辟了国内高校FPGA教学的先锋。 记得当时的课程改革并没有针对所有学生,而是选取了180多个“小白兔”(据我所知我是最后唯一幸存的一只小白兔)进行试验,而我有幸就是其中一个。一学期内,我们从最基本的数字电路开始学习,从各种74系列、与非门芯片开始学习,在数电实验箱上用组合电路实现加法器、跑马灯、交通灯等实验。接着转场开始学习FPGA技术(当时认为无所不能的现场可编程门阵列),从原理图Block方式的数字电路设计,到从零开始的VHDL语言的学习,最后采用纯HDL代码的方式,完成了学期末的课程设计——可编程音乐播放器及精准时分秒计数器。尽管在现在看来,这无非是切换2个ROM,按照一定的频率驱动蜂鸣器,以及简单的计数与数码管的驱动而已,但在当时却被认为小有成就,学有所成。 大一暑假,我没有回家,而是抱着康芯的实验箱,将每一个模块都玩了一遍。我将图书馆中与FPGA有关的书都翻了一遍,深入学习了VHDL语言,掌握了基本的FPGA设计思路,同时还未雨绸缪地学习了使用Altium Designer 2009(当时的DXP最新版本软件),绘制了相关的PCB版图。康芯实验箱上还集成有8051单片机模块,总不能老是冷落了“她”,由于自己的反常规学习,我逼迫自己在5天内看完了郭天祥的《10天学会51单片机的教程》,狠狠地把51单片机的知识恶补了一把。记得该教程中有郭天祥亲自编写的《郭天祥——我的大学六年》,极大地鼓舞了我。该文档我至少看过10遍,“晨昏三叩首,早晚一炷香”,我懂得了他的所谓的很多人因为游戏人生,荒废本科之后的悔恨;懂得了把握青春,成就自己未来的珍贵;明确了自己该做什么,也许为自己的未来奋斗,才是真正的大学。 此外,我还深切体会到机遇的重要性。机会总是会给有准备的人,对于整天抱怨没有人带,而不去寻找机遇的人,我只能说你还没有准备好。事实上当时在180个小白兔名单外的人,找老师美言几句也能入围,重点在于你愿不愿意尝试——胆大心细脸皮厚,没有什么不可以。那时由于开始在QQ技术交流群活跃,我还认识了网友王会计(圈子里的很多人都认识他),那时作为前辈的他,对懵懂的我的告诫是,有幸我太早拥有了学习的机会,但这只是一个开始,课程只能给你指路,未来还得靠自己(我于2012年8月在北京第一次拜会了王会计前辈,真人不露相)。 同年8月下旬,由于自己对技术的热情,外加在协会出色的表现,我成为无线电爱好者协会中,选拔去电院CAD研究所409实验室学习的一员(当时仅有3个人,其他两位分别是邓团飞、冀玮楠,这两个人是我未来的队友,一起浴血奋战的兄弟)。感谢409负责人,前协会会长,无线电爱好者协会名誉主席杨峰学长给了我这个弥足珍贵的机会,伯乐识马,没有这个机遇,也不会有今天的我。杨峰学长一直带领并指导协会,在大学7年的他,培养了无数饱含真才实学的电子工程师,在师生界具有极大的影响力,是大家公认的“老大”。在CAD研究所的2年多,是我本科电子设计最充实、最富有激情、最值得回忆的时光,是我定向成长全方位塑造自己的摇篮,也是我后来选择FPGA专业开发的基石。 由于对FPGA的基础与激情,我分组并进入了实验室的FPGA小组。作为小白兔的FPGA学习基础,对于实验室的需求而言还远远不够。在刀哥(FPGA小组组长)的指点下,我开始加强锻炼,从HDL的编写到FPGA设计思维,从时序电路到功能开发,从头开始优化自己,作为一个小白兔产物,我还需要进化。也正是这一阶段,我从零开始研究VGA显示驱动设计,并对图像显示开发产生了极大的兴趣,这也正是后来一年我一直执迷于LCD显示开发的缘由。 年少无知,从串口程序设计,到SPI时序的研究,我竟然想通过SD卡的SPI驱动来实现VGA图像源的获取。正是因为对技术的热情,我认识了网友黄娜(当时在EDN工作,后来去CSDN了),并介绍我认识了特权同学。时值2009年8月,5年过去了,回头看看,特权同学在那个时候还没有出名,FPGA视频教程还没开始录制,仅有的只是开始在EDN网站写博客。我有幸在平凡时期认识了未来无所不能、在业界有一定影响力的特权同学,指点并让我研究他当年设计的SD卡的SPI驱动时序。但是该驱动程序中的Verilog HDL语言和上千行的精华代码,让当时的我望尘莫及,几乎读不懂,这让自认为小有成就的我开始自叹不足。虽然结果我还是没能驱动SD卡,但对SPI的时序还是有了深入了解,更值得庆幸的是,我认识了未来几年对FPGA界有巨大贡献,受无数人膜拜与尊重,出版了《深入浅出玩转FPGA》、《爱上FPGA开发——特权和你一起学NIOS II》,永远忠于年轻时梦想的特权同学。特权同学的学习精神,以及出版的书籍,对我未来几年产生了深远的影响,源于DT,重在设计,在前辈的指领下,我正努力地前行。 大二开学了,我由于对技术的热情,大部分时间都是在实验室度过的。在那个年代,我们用的还是Quartus II 5.1,VHDL在高校依然很盛行,FPGA被认为是高功耗、高成本、开发周期长的方案,一块简单的EP2C8Q208C8N的开发板价格不菲,同时FPGA的学习资料,包括书或网络资源,远没有现在那么多。在前行的道路上,每一步都是那么的艰难。正当我徘徊在VHDL与Verilog HDL之间,以及在研究SOPC时连一个LED灯驱动都搞不定的低迷时刻,我认识了正在读大四的张亚峰,也就是网友小时不识月,当初的COM张。 当初的张亚峰,专业研究Altera FPGA,并将学习心得整理成博文发布于cnblog,博客日产量甚至可能超过他的饭量。在他最疯狂的时刻,我有幸认识了他,他对我指点迷津,悉心教导,甚至远程协助。在我徘徊不定时,他以多种理由“说服”我学习Verilog HDL,幸好我有扎实的VHDL基础,我在一周内成功地从VHDL转向了Verilog HDL;在我停滞不前时,他不厌其烦地给我远程协助,指点我FPGA开发,尤其是SOPC方面的设计。最后,也正是他,多次“强迫”我进行总结,写博客,对自己所做的事情负责。2010年5月,我在博客园写下了人生中的第一篇博客,至此以后,一发而不可收,后来转场ChinaAET,只要在不停地研究开发,就会有源源不断的博客公之于世。写博客,不仅是对自己设计的总结,对问题的记录与分析,甚至不仅是为了写给别人看,我曾无数次翻阅自己的博客,查阅自己遇到过的问题,也曾因为同样的研究,或者说分享或“遭遇”,认识了不少的同行。只有懂得总结的人,才能不断地成长。好记性不如烂笔头。 作为网络上的交流学习,我一直认为QQ、博客平台是极其重要的交流方式。很多人言谈身边没有人指点,没有人一起学习,一个人的奋斗,坚持不了就放弃了。也有很多人很在乎自己学校的档次,或者说自己的专业类属,以为自己孤军奋战,或者身边鱼龙混杂,没有得天独厚的环境,即便感兴趣也怎么可能学得好。其实我想说,学不学得好真正意义上还是取决于自己。虽然我处在电子氛围浓厚的杭电电院,但我同样认识很多专科类的职校学生,真正对此有兴趣的人,从来不会匮乏激情,因为这个世界远没你想象得那么小,在互联网越来越发达的年代,闭门造车,只有死路一条。在我后续的成长道路上,我认识了太多太多的网友,我们之间互相指点,均使我不断尝试,不断地积累,从时间与空间上积累了一个网络技术交流圈。电子开发,贵在互帮互助,技术是单纯的,也是兴趣与乐趣,很多人都愿意指点,并没有你想象得那么苛刻。我想说重点在于尝试,而不在于埋怨。从真正物理意义上讲,我也是一个人进行学习的,但从互联网角度考虑,这并不是我一个人的战斗。张亚峰是一位对我的未来有深远意义的网友,我们认识于腾龙前辈的SOPC技术交流群,他是我FPGA成长路线上极其重要的也是第一位互联网导师。没有张亚峰当初无私奉献、不厌其烦地指点江山,我不可能顺利地在每次碰壁时都找到解决方案,也不会有那么多的信心与激情坚持到现在。张亚峰毕业不久后,就去了广州骏龙作了Altera的FAE,至今为止在业界享有盛誉。2012年8月,张亚峰在广州请我吃大餐,正式拜见了“导师”真身,感谢张亚峰当年的激情,以及给我的无限指点。 同群还有前辈七哥(我于2012年9月在西安拜见了七哥),木头同学(12年8月的深圳之旅,我首次会见了木头同学)、查无此人(我于2013年7月在西安出差时有幸见到了查无此人真身)等,均是我们当时讨论FPGA开发时结交的挚友。FPGA行业是很大的一个圈子,况且在2009年还远没有现在这么火热!有志者事竟成,重在尝试。 同年,我认识了一位生平故事传奇,以及同样在为这一行不懈努力的工程师——网名为冲击波,人称波波,在此值得一说。我曾无数次在深夜通宵与波波远程畅谈。那时的我还没有熟练读懂芯片时序图的能力,而波波则刚好由于项目需求转场FPGA,于是我帮波波的FPGA设计支招,而波波则悉心地教我如何分析芯片时序,如何正确驱动外设。此外,波波曾多次给我讲述从修理工到深圳做电子工程师的坎坷之路,其传奇之路的不易让我感到了人生的艰难。波波自幼对电器十分感兴趣,不过家境贫寒,小时候的学费都是通过卖菜、修电视机积攒下来的(想想衣来伸手、饭来张口的我们,颜面何存)。成年后的波波,按部就班地过活,在镇上修理并卖蓄电池。由于某些说不清楚的原因,一夜之间,他的所有资产在一场火灾中化为灰烬。钱财一无所有,女友也离开了他,伤心欲绝的波波含泪卧床。崩溃了一个月后,他不想就此向生命低头,毅然离开了老家,开始了自行车的深圳之旅——既然上天把我逼上了绝路,那我也只能“无法无天”。由于口袋里面只有10块钱,所以他沿途坎坷,风餐露宿,三两天在工地里打工,结算零星的工钱,继续上路。但既然选择了深圳,便不顾风雨兼程,一路骑下去,他最终抵达了深圳,那一年是2002年。刚到深圳的日子,他无依无靠地游荡,他有过白天搬砖头、晚上睡桥洞的含辛茹苦,也做过各种杂活的兼职,以及制造厂的组装员工类的活儿。但是波波发愤图强,重新开始学习电子,不断地追求自己的归宿。多年来波波没有放弃,从打杂到工人,从机械劳作到工程设计,不断地努力升华,终于在2005年成为某公司的总工(我于2009年年末认识他)。孤身深入深圳打拼,可以对不起青春,但不能对不起梦想,在11年的时间里,波波没有回过家,没有对命运低过头,尽管无数次崩溃,尽管形单影只,尽管有无限的思乡之愁,但发誓没有出息绝不回去;在11年的时间里,从工地搬砖到公司的总工,其辛酸累苦,无人能知。而今波波终于有了自己的事业,也有了自己的另一半,满怀着离乡11年的乡愁,以及无限难以启齿的感慨,在2013年春节,第一次踏上了回家的旅程。回想11年的奋斗,他用血泪挣回了一个属于男人的尊严,换成谁都很难坚持到最后,因此波波是我生命中无比崇拜的前辈与楷模。2012年暑假,我在深圳第一次见到了传说中的波波,第一次膜拜了相识3年(现在5年多了)的大神,第一次有机会面对面促膝长谈,对我来说他就是一个传奇的故事。虽然上帝在为你关上一扇门的同时,总会用门夹一下你的头,但悲剧的背后,总会有另一扇门等着为你打开,也许转角处就是光明。 谁都有梦想有追求,谁都可以为未来付出血汗,但重点在于你是否能够战胜挫折,能不能坚持到最后。在此我想说,很多事情并不是天赋的问题,而是看你愿不愿意为此付出,为此坚持。一份激情与执着,坚持与稳重,也许能换来一份应得的回报。我曾代表杭电游泳队多次参加横渡钱塘江的活动,也曾多次参加过长跑比赛,我深切地体会到很多事情并不在于天赋,而在于意志力,在于你能不能坚持,在于你敢不敢尝试。电子开发,无论是FPGA还是单片机、DSP等,抱怨没天赋,抱怨学不会的朋友,我只能得出2个结论,第一是你不适合做这行,兴趣不在于此;第二是你就没有努力尝试过。就像某种矿泉水一样,我们只是“Datasheet”的搬运工。天才需要99%的血汗加1%的灵感,我们并不是天才,用100%的血汗就可以了。我一直认为我的智商明显不够用,但我花了常人很多倍的努力,才有了今天。我并不是拥有天赋,而是多于你几倍的付出。我所积累的经验,都是我用时间与汗水换来的,这绝对不是我的天赋,相信特权同学、张亚峰等都一样。因此,那些在成长路上抱怨的孩子,请深思,并不是你不行,而是你的意志力不行。既然选择了电子,就要做好不顾风雨兼程的准备。只有经历地狱般的磨炼,才能炼出创造天堂的力量。 2010年暑假,是我本科阶段电子开发能力成长最快的一段时间。当时通过4天3夜的选拔赛,我们如愿以偿地参加了暑期集训,为8月的浙江省电子设计大赛做准备。电子设计大赛每年都举行,但省赛与国赛奇偶交替,那一年恰好是省赛。所谓集训,类似于夏令营,即为了参加比赛,短时间内对学生进行数电、模电、单片机、软件设计,以及赛题设计技巧等方面的培训。在这两个月,我和我的队友邓团飞、冀玮楠围绕着可编程DDS信号发生器,从软件设计到430单片机的开发,辅助采用FPGA进行高速扫描,以及后续的模拟电路进行了信号的整形及优化。我们花了将近2个月的时间巩固了软、硬件设计能力,以及团队的协作能力,尽管我们那时才大二,但众志成城,我们坚持到底。记得8月底的为期3天3夜的电子设计大赛,我们选择了宽带直流放大器,我们一起激辩过,一起研究过,一起扛过走过,最后采用430+CPLD的处理架构,配合模拟完成了我们的作品。在这3天3夜,除了第一天睡了4小时,我们几乎没有睡觉,吃饭喝水完全靠吞。由于过度劳累,我们的头脑及身体都承受了很大的负担,这期间几乎干掉了一箱红牛,以至于赛后我们喉咙嘶哑,同时整个身体处于漂浮状态。第四天早上上交作品后,我们在“瘫痪”了24小时后,第一次感到床是多么的温暖,即便是硬床板。我们醒来已是第二天,估计是被饿醒的。尽管最后的评测,我们只得了省二(浙江省电子设计大赛二等奖),但回首3天3夜的浴血奋战,我们用TeamWork与意志力走到了最后,连续72小时不睡觉,充实而又精彩,成为一段值得吹牛的故事。其实电子设计大赛关系到各大高校的声誉,对于有些队而言,是三个人的比赛,而对于有些队而言,有可能是整个实验室甚至全校师资力量的较量,因此,由于我们是完全靠自己的能力走到了最后,所以并没有因为没有得省一而感到惋惜。同样,大部分没得奖的人,都将这一次经历当作美好的回忆。我自己也曾为了梦想,与队友并肩作战,过程永远值得回忆,结果就显得不那么重要了。如果告诫后人,我会毫不犹豫地告诉你,即便比赛的规则、验收答辩是否值得质疑我不确定,但是电子设计大赛对于电科类学生而言,的确值得尝试,值得考验,值得参加。 有人说大学四年,大一:不知道自己不知道;大二,知道自己不知道;大三,不知道自己知道;大四,知道自己知道。不过我反而觉得我却是不停地处于发现自己不知道—让自己知道的过程。大三也许是本科生涯头脑最清醒的时刻,是我最明确自己做什么,在为什么坚持的阶段。这一年我荣幸担任了无线电爱好者协会的会长,指导并引领协会上了一个阶梯,培养了无数学子;这一年我继续与邓团飞、冀玮楠并肩作战,不懈地努力,参加了好多比赛并取得了优秀的成绩;这一年我们在实验室继续浴血奋斗,继续深入学习,承担了实验室多个项目的开发设计。而我一直忠于最初的梦想,潜心研究FPGA设计,从Verilog HDL逻辑电路设计,到Nios II嵌入式系统设计,从Quartus II 5.1版本到Quartus II 10.0的跃迁(写这本书时才发布了Quartus II 13.1,而前不久,Quartus II 14.0已经发布,更新如此之快,我们几乎在不停地追赶),从Cyclone II到Cyclone III系列的升级(现在都CIV、CV了),知道得越多,发现自己不知道的就越多。我一直认为自己知道的只是冰山一角。感谢大罗哥与刀哥,在研究生阶段对我们的悉心辅导,也感谢409给予我们的机会,这是我们金蝉脱壳的地方。 长江后浪推前浪,有时候,前辈们看着我们成长起来,后生可畏,也会有莫名的喜悦。某电子应用群的群主NeverExist,在工作的同时,将电子当作一种爱好,在业余酷爱指导网友,帮大家排疑解惑,是群里公认的老大。坛子(论坛)都是靠凝聚力建立起来的,以至于NeverExist去日本深造多年后的今天,该群依然活跃如曾经。回想几年前在NeverExist的指导下茁壮成长的日子,感觉通宵都那么带劲。同样还有电子工程师学堂的群主XiaomaGee,电子是他的生活,也是他的未来,他乐于帮助刚入园的“小白菜”,在激情调侃的同时指点迷津。XiaomaGee设计了很多板卡,帮助了众多的网友成就电子设计之路,是电子界公认的前辈。我在2013年于洛阳拜见了XiaomaGee,正如传说中的一样,他是一个欢乐而又有卓识的前辈,听他讲述曾经在哈工大逆袭奋斗的故事,胜吃一天饭。目前XiaomaGee已注册洛阳银杏科技有限公司,随着队伍的壮大,正等待一个更美好的未来。 再说说我自己,曾经我也是白纸一张,但对技术如饥似渴,在艰难的泥泞中,由于激情热血,我一直备受多位网友的慷慨指导。我曾拜网友eBoy_eMan为师,他在我的“小白”成长道路上不断地矫正我的错误,并给予了我众多的指点。eBoy_eMan,又称壮壮,也属于IT界的一个传奇人物,他从小就喜欢玩电器,自然喜欢电子。他小学时玩无线电,初高中时玩单片机,大学时更是“无法无天”,简直不能忍。他1999年上高中,2002年上大学,毕业于南京航空航天大学。eBoy_eMan由于出色的能力,跨专业担任了电院电子协会的会长;同时由于酷爱音乐,他兼任了学校吉他协会的会长;此外,除了电子,德智体美劳,他甚至会写小说,eBoy_eMan简直是一个神话。事实上eBoy_eMan并不是电子信息学院的,但无法挡住与生俱来的使命与兴趣,于是他放弃本专业的课而旁听电院的课程,凭自己对电子的浓厚兴趣与独到天赋,一个神级的大师就这样诞生了。毕业后eBoy_eMan去了苏州工作,随后在上海第一次创业。由于2008年的金融危机,他事业受挫,去了深圳打拼,随后历经从设计师到CTO的蜕变之路,一晃6年过去了,2014年对于eBoy_eMan而言又是不平凡的一年,他再次创业,立足智能电网,放眼未来,胸有成竹,马到成功。2009年下旬我认识了eBoy_eMan,2012年我在深圳拜见了大师,此后一直保持联系,技术上的交流与探讨,以及人生感悟的倾诉与分享,eBoy_eMan曾无数次指导并帮我排难解惑。也许他在我身上看到了曾经的自己,也许我是他所谓的可造之材,但于己于人,我不能让师父失望,我会一如既往地努力,对得起众人的期待。 生命重在交流,走出狭小的铁笼子,放眼未来,永远会感到惊喜。我大部分的知识都来源于网络,或者是从与网友的交流中学到的,多年来我深切感受到了交流的重要性,并且乐此不疲。庆幸的是很多网站都给我们提供了很好的平台,如ChinaAET、电子发烧友、21IC、CSDN等。其中ChinaAET是我最熟悉的一个网络平台,它是面向电子工程界的专业信息服务与交易平台,网站经常开展电子新技术开发,尤其是FPGA方面的相关活动,通过与Altera、Xilinx等公司的合作,给广大网友提供了无限的机会。网站是以广告来运营的,因此其他的FPGA相关活动、博客等均是义务的,在此向各大“公益”论坛致敬。我在北京多次拜见过网站负责人coco本人,coco非常热心帮助网友,经常动用各种关系来帮助有需要的朋友,我本人就是一个典型的范例,多年来身居坛子,受益无穷。相比cnblog而言,自从转场ChinaAET,发现在这里,FPGA博文受到了更多的关注,同时接连不断的博客大赛,激励并资助了众多的网友。该网站让很多人受益,也让很多人懂得了付出,期待更多的人加入,共创美好的未来。 2011年下旬,是我最纠结的半年。我没法说服自己考研,或者不考研。众多前辈认为我应该继续深造,毕竟即便文凭只是一张纸,但我的路依然很长。也有的前辈认为我没必要再在学校浪费青春,应该勇敢出来闯荡,打拼属于自己的一切。还有人想让我留在本校读研,继承实验室。最终,我以“3年换来30年不后悔”的理由说服了自己,同时不想故步自封,毅然决定出去看看,选择了西安电子科技大学。我以几乎逃课2年,考试完全靠突击的身份,在考研教室从零开始自学基础课与专业课,在仅有的2个月时间内,我强迫自己冷静了下来,考前还在医院睡了半个月,最后又看了6天书上了战场,但竟然奇迹般地考上了,虽然考得很差。于是我选择了继续深造,我想给自己3年的光阴去冷静地思考,去重新塑造自己,使自己能更胸有成竹地走进社会。 我的本科电子开发之旅,以我的毕设——基于FPGA的多画面视频叠加系统,画上了一个句号。我的毕设结合了FPGA与SDRAM,采用OV7670摄像头作为视频源,在实现实时视频VGA显示的同时,完成了OSD、视频叠加等功能,最后评上了优秀论文。当然这一切都少不了我的毕设导师——黄继业老师的指导。黄继业老师当年本科留校(当然后来在职读研了),负责EDA与电子设计培训等的教学,以实际技术能力与指导学生的激情,备受学生的欢迎与喜爱,是我当年的导师,也是我一生的导师。我有幸得到了黄老师的序言,给本书增添了光彩。同时,黄继业老师还是潘松老师的《EDA技术实用教程》、《EDA技术实用教程——VHDL版》、《EDA技术与Verilog HDL》等书的合作者,指导并培养了无数电子开发能力卓越的学生。此外,我的毕设并不是一个结局,而是我未来充实图像行业的开端,是我后期开始研究各种摄像头,以及视频显示技术的起跑线,感谢黄继业老师的课题,让我有了目标与激情。 本科生活过得很快,毕业之际,各种伤别离,抱头大哭,而我也曾流泪。怀念一起欢笑疯狂过的朋友,怀念一起在409跟我奋斗过的队友冀玮楠、邓团飞,以及后来报到的许耀聪、张捷同学,我们一直是实验室的核心力量,我们一起度过太多欢乐与痛苦的光阴,我们将会用一辈子的时光去怀念。最后邓团飞考上了计算机学院读研深造,冀玮楠留学去了丹麦,许耀聪、张捷拿到了华为的offer深造,而我却带着一丝永远怀念的乡愁,离开了杭电,去了遥远的西安,开始追求全新的生活。 很多人以为我早就工作,很多人不信我还是个学生,很多人确信我有多年的工作经验,但事实上我还真只是个学生,只不过我在成长的道路上,付出了多于大部分人几倍的时间,我不断地尝试与积累,才换来了今天。我经常写博文记录开发的点滴,同时在互联网上比较活跃,认识的同行比较多,平时也不乏有技术与人生的交流,因此我始终了解到自己所知的只是冰山一角,我远没有所谓的学富五车,也不是有些不明真相的人认为的前辈,我一直认为,知道得越多,就发现自己不知道的越多,既然选择了电子,只有不断地学习,才能跟上时代的脚步。 而如今在不到一年的时间里,我的研究生生涯就要结束了。时间过得太快,一晃而过,我来西安两年多了。专业只是个在校的分支而已,我一直更在乎的是自己的研究方向。也许研究生时代给我的最大收获,就是让我有时间冷静而清醒地思考,对未来更加成熟稳重地计划,以及真正决定自己到底想做什么、能做什么、该做什么。 从2012年开始,我对摄像头产生了极大的兴趣,我开始研究OmniVision、Micron等公司的Senser,从底层DIY开发CMOS Senser的FPGA驱动及视频实时显示,我用纯逻辑开发实现FPGA加速运算的架构,同时我花了很大的精力提高图像的画质,我一直不懈地追求。当然我也并不是一开始就轻松地驾驭了Senser,我所尝试的第一款摄像头MT9M111,耗费了我3个月的精力,但最终还是以失败告终。我转而拾起较简单的OV7670,力图挽回仅剩的一点信心。在我几乎一无所知的时候,是在图像传感器领域有很深造诣的官哥,不厌其烦地指点了我,把他曾经的坎坷及如何驱动设计的精髓告诉我,让我尽量少走弯路。再次感谢官哥,让曾经的我脱离“小白”的苦海。随后我一直没有放弃我对摄像头的热情,从DVP到PAL、LVDS、MIPI,从30W到500W、1400W,从摄像头的逻辑驱动开发,硬件驱动板卡的设计,到FPGA视频图像算法的增强,我选择了这条路,因为我执迷于图像。 2013年我曾在某公司实习了8个月,负责相机的驱动,以及图像算法的移植方面的工作。那一段时间我一直在摸索,同时我第一次发现外设的驱动只是个基础的架构而已,算法的实现才是图像开发的灵魂。因此我开始研究一些基础的图像算法,我希望我知道的不仅仅是外设。冈萨雷斯的《数字图像处理——Matlab版》给予了我很大的帮助。那一段时间我几乎同时使用MATLAB、Quartus II、Modelsim,结合Matlab语言、Verilog HDL代码及Testbench仿真程序,以算法验证—HDL设计—RTL功能仿真—FPGA硬件测试的流程,将基本的算法从书本移植到了FPGA中,我想我应该算是看到基于FPGA的图像算法应用的大门了吧!后期我又研究了非局部均匀、3D降噪、MSRCR、二维匹配等算法,尽管这些在DSP中都能实现,但由于FPGA的并行高速特性,采用流水线、乒乓操作、并行方式在FPGA中实现某些算法的加速,非其他处理器所能攀比。我深刻认识到我如果再将精力放在外设上,而不进行硬件图像算法实现的研究,那我简直是在浪费青春与灵魂。甚至FPGA都只是个工具而已,挑战我的将是未来驾驭FPGA应用于图像处理的能力。如今Altera与Xilinx的28nm双核Cortex-A9 FPGA已经风生水起,FPGA的资源已经足够我们实现大部分图像算法架构,敢于尝试,释放自己的创造力,几乎没有不可能,这只是一个开始而已。 驱动显示摄像头可以说是很快乐的事情,但优化图像算法,实现各种硬件算法则更是灵魂的境界。2012年我编写了电子书《从零开始进入OV7670世界.pdf 》,给广大网友第一次带来了摄像头FPGA开发的福利,后期我又编写了第二本电子书《基于VIP_Board Mini的FPGA视频图像算法(HDL-VIP)开发教程.pdf 》,从HDL-Logic(逻辑开发)到HDL-VIP(硬件图像算法)的蜕变,从底层基础到外设完整地阐述了OV7725摄像头的开发,以及10余种图像算法的设计指南,我希望能有更多的人加入FPGA图像算法处理的圈子。由于篇幅有限,本书并未包含FPGA逻辑图像算法加速运算方面的内容,不过有兴趣的朋友可以从互联网上或本书配套资料包中搜索,本人欢迎通过E-mail(thereturn of bingo @gmail. com)与我探讨FPGA算法的实现。 在IT高速发展的年代,摄像头智能化应用提高用户体验的同时,将辅助人工进行更高级别的安全维护。机器视觉、车载摄像头、工控应用等更多面向人工智能的图像应用,将不断地开辟摄像头的新时代。我在摄像头的圈子虽然混得还不够久,但也两年多了,认识了很多开发并应用摄像头的同行,也了解到了众多的电子开发永远满足不了客户的需求,目前的市场还有很大一片空缺,等着我们去完善。上周我有幸会见了苏州智能汽车电子有限公司的冯工,这让我更贴近地了解到了摄像头在汽车电子行业的需求,再次看到了我们的光明的未来。同行还有网友群里的卡帕、把肉卖给和尚、故垒西边等手机摄像模组或相关厂家的工程师,一起探讨与研究,我总是受益匪浅。也许未来不久的某一天,3D摄像头会在我们的生活中得到普及,彩色低照度足以弥补人类夜视觉的不足,透雾、宽动态等算法的成熟将极大地降低交通事故发生的概率,机器视觉终会进入我们的视野。我不知道未来自己具体会从事哪一方面的图像算法处理,但我知道我会为了这一方向,为了我的兴趣,结合FPGA开发应用,挑战不一样的未来,我相信这一行始终有一个璀璨的明天。 不得不说,本书第一版修订封板后发生的故事…… 2014年6月,在硕导韩老师多次劝说下(我曾疲倦了各类电赛,回想起来,感谢良师让我拥有了经历),我终于“被动”参加了陕西省“第一届研究生电子设计大赛”。没想到我花了1周时间整理的作品“基于FPGA的非介入式静脉成像仪”竟然拿下了陕西省一等奖,成功入围,并且将代表西电参加“第九届中国研究生电子设计大赛”。两个月后的8月19日,我带着我的团队“疯狂工作室”角逐全国总决赛,夜以继日,临近比赛才出炉了最终版本的作品,得以面世。纵观全国顶尖学生的创作,目睹人工智能、医疗电子、机器时代的到来,两天过的太快,感慨万千,只恨当时没有太多时间欣赏大家的作品。 大赛上,我有幸见到了Altera大学计划经理兼本书序言作者之一陈卫中老师,荣幸之至;比赛惊现母校杭电校长孙玲玲老师莅临指导,感谢养育;应邀见到了ChinaAET网站负责人coco姐,亲切万分;更是激情膜拜兰州大学、华中科技大学、国防科技大学等多所高校的大神,畅谈电子设计,遥想未来,欢聚一堂,怀念曾经拼搏过的岁月。 当颁奖仪式上得知我队荣获国家一等奖时激动不已,作为正在准备毕设,硕士将毕业的我感觉幸福来得太突然;当又被告知同时荣获Altera企业特等奖后更是欣喜万分,当我拿着陈卫中老师亲手颁发的贵重至极的Altera开发平台DE5-NET时我更是热泪盈眶——Altera FPGA,这些年有你,我不曾孤单。 作为西电唯一的国家一等奖,以及全国唯一的Altera企业特等奖,我当时受到了相关媒体、投资者的关注。一时间有关我与我的“静脉成像”作品相关新闻袭来,来访、洽谈、投资差点冲昏了我的头脑,让我不知所措,但最后我清醒地认识到我还没有准备好,我还有很长的路要走,毅然决定了放弃这些“泡沫”,不想把青春浪费在注定没有归宿的尝试上。有很多人为我惋惜,认为我值得一搏;也有很多人认为我选择的正确,年少轻狂得理智,但无论如何,既然选择了远方,便不顾风雨兼程,一路走下去……我想我还需要沉淀,需要修行,需要再造。 2015年1月8号,我顺利从西安电子科技大学获得硕士学位,飘往了深圳,选择了就业深圳,开始了新的旅程。3年前我曾在来深圳和考研的抉择上选择了继续深造,3年后由于各种原因我竟然又来到了深圳。当所有人关心你飞的高不高时,只有少数人关心你飞的累不累,不管结果如何,既然来到了这里,我想我们都该把握青春,坚持做自己喜欢的事情,圆自己未完成的梦想。 关于本书,经由《电子技术应用》ChinaAET网站杨晖委托,我万般荣幸地联系上了Altera中国区大学计划经理陈卫中老师,非常感谢陈老师在百忙之中抽出时间阅读我的手稿并写下宝贵的序言。同时感谢我的母校导师、《EDA技术与Verilog HDL》等书的作者——黄继业老师(网友风翼),他在繁忙的工作中不辞辛劳通宵帮我写完了本书的序。其次感谢大名鼎鼎的吴厚航(特权同学)为我写序。再次感谢仲恺农业工程学院的蔡肯老师(网友紫声月影)抽空帮我多次审阅了本书的内容,并提出了宝贵的意见,当然还有最后的序言。然后感谢本书的第三作者、兼河南科技大学张雷鸣老师(网友i7)针对在校学生EDA课程及FPGA设计能力方面的不足,在序言中提出了改革的方案并指出了本书的亮点。最后,感谢本书的第二作者,即哈尔滨工业大学博士于潇宇(网友湘雨潇潇),在我写完本书FPGA底层基础设计后,帮本书添加了FPGA设计的进阶方面的内容介绍,完善了系统的介绍。正是 这6位老师、朋友的大力支持,才有了本书的最终面世,在此本人对他们表示由衷地感谢。 自2014年9月本书第一版出版以来,该书在京东、亚马逊、当当等多个网络平台以及多家实体书店销售,目前本书同时馆藏于国内各大高校、省市图书馆中,截至此时,本书首印已经售罄,得知很多人翘首相盼,我们紧张地勘误、整理、完善第二版,试图将Bug降到最低,展示不一样的第二版。 第一版面世一年有余,受到了广泛读者的好评但同时也有一些差评。所谓好评,有认为本书是“很不错的一本适合初学者的书,从基础入手,很不错”,也有认为“上手较容易,实战派。作者规范的编程实例,很有大牛范”,我想说本书确实是我用心所著,无抄袭翻译的痕迹的;所谓差评,有人为本书Bug太多,没有勘误完善,或者说本书说的太肤浅等,我想说,第一版发布后我不停地收集勘误,不停地完善,感谢广大网友的反馈,我们一定能做得更好。 应广大网友的强烈号召以及热切需求,第二版添加了Verilog HDL基础篇(由河南科技大学张雷鸣老师编写),FPGA时序约束篇(由知名网友宋恒——可可豆编写)。另外第二版画龙点睛地在VGA章节添加了真彩图像显示的案例(由知名网友林海全——CrazyBird编写,同时他还为本书第一版的勘误做出了重要大的贡献),希望进一步丰富例程的同时,提高学者的兴趣。本书再著,完善基础,增添例程,提升层次,希望能让读者更好地从掌握HDL、CPLD/FPGA核心电路的设计开始,到HDL的编写,以及时序的设计与约束,深入浅出,玩转FPGA。 在经过了10余遍校正、完善后,终将抵达印刷的时限,未来或许还是会存在少许Bug,还请各位读者理解:我们真的努力了,可完美是没有极限的……在此由衷的感谢本书二版小编牛平月,是你的操劳勘误,夜以继日地沟通,才能迎来本书的及时面世。请原谅我一次又一次把你逼疯,是你的呕心沥血,让此书质量上提升了一个境界,超越了第一版8个银河系。 想写一本书,很难;想写一本好书,更难!最终我能将此书顺利编写完成,少不了众多网友对我的帮助与支持,首先感谢网友可可豆、暖阳帮我审阅初稿,缩短了本书初稿的时间;接着感谢曾经指导、帮助、与我共进的网友们:风翼、紫声月影、i7、湘雨潇潇、eBoy_eMan、.COM缺氧、凿树(发哥)、浪迹天涯(官哥)、七哥、DTFT&FFT、NeverExist、NIocni(泡泡)、电科031、九神、XiaomaGee、黎明、达克斯特、冲击波、陶心云、龍涂騰、up.Craftor、zusen、Bean、疾风之狼、豌豆-棒棒糖、Bob、Clark、WarMonkey、灵、YJ_CS-书剑、wangkj、Edward、☆莫上尘︶ㄣ小二马、把肉卖给和尚、卡斯帕尔、特权同学、查无此人、利利、独孤求败、Yesterday、日立、无为、Prince Liu、我心飞翔、美丽星空、HAOUMARU、Joseph.H、可可豆、木头同学、北燕残月、笨笨、家顶、coco、黄娜、空灵、鹏鹏、飞泉、子键、trust、chactor、龙腾★雾都溪风、戴鑫等(排名不分先后,如有缺失请见谅),是你们的出现,才让我的世界更精彩! 此外,感谢曾经教我养我的杭电,助我成长的 CAD 研究所 409,给予我不一样的机会的杨峰,指导我奋斗路线的大罗哥、叨叨哥、凯哥、老不死机、宝宝等,与我并肩作战的冀玮楠、邓团飞、许耀聪、张捷,以及在研究生时代默默支持我的实验室,是你们给了我辉煌,也造就了此书的诞生。 毕业南漂,扎根深圳,在此感谢Andrew、壮壮、木头神的北站接待,让我感到对这个城市并不陌生;感谢加班猫的热心帮助,帮我一起找到了安身之处;感谢运动健身带你飞团队温暖西城、洋洋养羊、侃大山、不逝的风、奋斗、蓝色的姐姐、潇神、利利、下一站幸福等人,是你们的陪伴让我感觉尚存青春,活得激情,感谢拥有,工作繁忙,期待能再相聚。 最后,经历了不少风风雨雨,曾经的辉煌与挫败,我能坚持到今天,也少不了那个始终在我背后默默支持我的女人,感谢你愿意随我四海为家,与我奔波天下,感谢你容忍我那么多年苦闷时的脾气,鼓舞我重新振作;感谢在我们囊空如洗时你不离不弃,愿意和我一起吃泡面;感谢在我们东山再起时,你告诉我要不忘初心,未雨绸缪;或许“感谢”二字已不足以表达此刻的心情,但如果没有你的支持,本书第一版和第二版都不可能顺利面世,我也肯定不是大家认识的我……感谢拥有,超越万千…… 我花了将近一年时间,编写并多次修改本书的内容;我花了前后两个月时间,针对本书设计了完全配套的FPGA实验板卡并移植优化了例程;最后我又花了一个月的时间,最后一次审稿,并邀请前辈们给我作序。在前后一年的时间里,得到了众生的支持,本书的编写才终于走进尾声,但此时梦想才刚刚开始;完美是没有极限的,稳定是没有终点的。既然选择了FPGA,便不顾风雨兼程,一路走下去。随后我们又花了1年多的时间进行收集意见、勘误、总结、完善,在强烈地压迫小编下完成了第二版的编辑,在此我们意识到:从正确通往完美的路,是很遥远并万分艰辛的…… 但愿本书能帮助与我一样,曾经在FPGA学习的道路上,经受着坎坷泥泞,徘徊迷惘的朋友。如果在FPGA道路上你找不到方向,或者不知道如何开始,请选择此书;如果你厌倦了陈旧乏味的教科书,想从实践中掌握FPGA设计的精髓,请选择此书;如果你想系统地了解DUT架构,以软、硬件结合的方式学习FPGA,请选择此书。本书的配套资料,可在http://group.chinaaet.com/334页面进行下载。有条件及需求的朋友,可在http://crazyfpga.taobao.com/或https://icore.taobao.com/页面购买本书完全配套的实验板卡—VIP_Board Full 板卡,根据本书的讲解,实践真知成就FPGA之梦。当然,如果可以,我希望你能尝试设计一套属于自己的FPGA测试平台,失败并不可怕,可怕的是害怕失败。师父领进门,修行靠个人,此书能助你一臂之力,但成败重在你,愿你能深入浅出掌握FPGA的软硬件开发、设计,成就未来。 最后,我想说,请记住,无论选择什么,无论身处何方,永远相信自己,努力永不为过,既然选择了远方,便不顾风雨兼程,从正确通往完美的路,是很遥远并万分艰辛的…… 韩彬(网名CrazyBingo) 第一版序:2014年6月30日 第二版序完善:2015年12月06日 前 言 从20世纪90年代到21世纪的发展,从PLD到SoC FPGA的演变,从130nm到现在14nm的突破,FPGA以现场可编程技术,以及高速、并行等特性,同时开始嵌入ARM与DSP,在数字电路中,从协处理器到系统核心,逐渐成为数字界的主宰。当然,FPGA可编程逻辑作为强大的现场定制功能,在高速通信、海量数据的处理,以及IC的验证测试,甚至实现IC半定制中正发挥着越来越重要的作用。 本书所介绍的FPGA为全球最大的厂商之一Altera设计的。作为已有30余年历史的Altera,它在可编程逻辑、SoC、ASIC等方面具有雄厚的技术力量,在数字界有绝对的发言权,是高校及大公司最受欢迎的FPGA生厂商之一。Altera成功的全球大学计划,以及亚洲创新设计大赛、Altera杯等,多年来为工科学生提供了广大的平台,以发散性思维释放创造力,成就了很多FPGA工程师。从FPGA应用技术、软件平台,以及整个FPGA生态系统考虑,Altera多年来始终立于不败之地,首屈一指。 在数字电路高速发展的今天,没有FPGA的系统,甚至会感觉施展不开,甚至“四肢乏力”。如果没有FPGA的辅助,我们仍然还局限于线程的思维中,难以实现并行加速算法,我们的世界或许还在单进程中徘徊。正是由于FPGA的强大,以无限的组合,实现了不可能的创造;通过不断加速,突破了不可能的极限。在数字界的今天,掌握了FPGA,你便已经掌握整个世界。 FPGA开发,需要充实的数字、模拟电路基础,熟练的电子设计的经验,同时更需要掌握并行设计理念的一门技术,由于其电路简单,功能强大,在数字电路中发挥着巨大的作用,俨然已是数字电路中的一个强大分支,已经成为高校教师、学生、科研人员、工程技术人员必学的技术。使用FPGA,可以加速我们的设计,提高产品的性能,甚至突破不可能的极限,打破常规,跨越鸿沟。 本书由浅入深,全面、系统地介绍了Altera FPGA的开发设计流程。笔者先后调查了多名FPGA初学者,研究了多位高校大学生的FPGA学习现状,并结合多所高校EDA老师的反馈意见,经过精挑细选,制定了本书的框架及例程分析。每一个例程均具有很强的针对性,力求做到从模块到系统,由简单到复杂,步步为营,脚踏实地地攀登FPGA的步步云梯。 本书通过硬件设计与时序电路的构思,同步Quartus II与Modelsim软件的协作,完成了多个具有针对性的例程开发,由点到面,从底层驱动到顶层架构,从电路设计到时序优化,每一个例程均包含了一个完整的FPGA开发流程,以方便读者进行练习和学习。 本书非常注重FPGA设计实践,遵循DUT的开发流程,尤其是设计、仿真以及调试能力。通过学习本书的内容,读者可以全面掌握Altera FPGA的开发流程,步步为营,走上自我实践、创造的旅程。在本书第一版中,笔者一直强调:“完美是没有极限的”;随着第一版售罄,第二版开始发布,在无数修正与完善的心酸中,笔者体会到“从正确走向完美,是遥远且艰辛的旅程”。FPGA开发之难,就在于时序设计的准确性,正因为如此,设计者不断地通过软件仿真、时序约束、硬件调试、产品测试,来完善自己的设计;也许正因为如此,FPGA工程师相当“贵重”。想要学会FPGA简单,想要学好FPGA很难。笔者所提供的例程仅仅是一个简单的设计、调试的流程,但更重要的是希望读者能够通过本书,掌握FPGA的开发流程,养成FPGA的设计习惯,更好地构思、调试、解决FPGA开发中遇到的问题,力求在最短的时间内,实现最完善的FPGA系统设计。 针对读者阅读本书时关于配套硬件平台的实验问题,笔者为此专门开发了相应的FPGA开发套件。该套件与本书涉及的例程一一对应,支持本书所有的例程,并且给用户提供了丰富的接口。需要购买配套板卡的读者,可以在http://crazyfpga.taobao.com/或https:// i-board.taobao.com/网页进一步了解;更多关于本书配套FPGA板卡的硬件资源及PCB设计方面的内容,请查阅4.6节。 本书的特点 1.例程完整,资料丰富 为了便于读者对本书例程的学习、理解,甚至二次开发,笔者提供了每一个例程的完整工程,以及相关的手册资料、硬件电路设计原理图等方面的内容。这些内容均包含在本书的配套资料包中,希望读者能通过本书与配套资料包例程的同步学习,有条理地、快捷的掌握FPGA的开发设计能力。 2.结构合理,内容全面、系统 本书详细介绍了Altera FPGA的开发流程,在例程的内容与系统的设计上,笔者响应了大部分初学者的心声,兼顾当代大学生FPGA开发能力的欠缺问题,以软、硬件结合进行FPGA的开发,希望能让读者在理解电路的基础上,更有把握完成数字电路的开发。 3.软硬结合,与众不同 本书有将近1/4的内容作为正式开始逻辑电路设计之前的驱动电路设计介绍,通过芯片手册、驱动原理、时序电路等内容,力求让读者掌握FPGA开发的思维与流程,进而更清晰地完成FPGA逻辑电路的设计,而不是枯燥地列出长篇大论的代码,试图让读者去理解一纸空文。 4.结合实际,设计技巧贯穿其中 笔者的例程经过了千锤百炼,相关设计目前均成熟运用于多个项目中。同时笔者将FPGA设计技巧贯穿在例程中,以实践检验真理,让读者能够更深刻地理解并掌握FPGA的开发技巧。笔者将DUT设计思维贯穿于全书的FPGA相关设计中,避免了纯粹的理论支持,力求让读者能够结合实际例程,透析笔者的设计思维。 5.语言通俗,图文并茂 作为一本FPGA开发的指导丛书,笔者采用了浅显易懂的语言完成了约百万字的解说;为了能让读者更好地理解,笔者花了很大一部分时间,设计并给出了开发的框架与流程框图。本书图文并茂,避免了枯燥乏味的大段文字,力求让读者能够通过图文更加形象地掌握相关FPGA设计思维与技巧。 6.由浅入深,学以致用 本书从零开始,介绍了FPGA的发展历程、Quartus II、Verilog HDL等方面的内容,接着开始CPLD/FPGA核心系统的硬件电路设计,在此基础上完成了多个涵盖FPGA基本设计思想的例程。最后,在前面案例开发的基础上,由浅入深,完整地设计了一个“基于OV7725的摄像头视频图像采集系统”。前面的步步为营是后面万事俱备、系统集成的基础,由模块到系统,以全局的思维进行FPGA系统设计,希望读者能更好地掌握FPGA设计的技巧。 7.时序约束,系统设计 作为总结之前的完善,笔者认为FPGA开发不仅仅是功能模块的开发,更重要的在于时序电路的约束,以保证高速并行的稳定性,因此本书第二版新增了TimeQuest时序约束章节,介绍了时序约束的思想,并对基于OV7725摄像头的视频图像采集系统工程,进行完整的时序分析即约束优化,力求电路功能的完美极致。 最后,本书站在一个比较高的层面上,介绍了高速FPGA系统设计要点,及基于高速相机的嵌入式视觉处理系统设计实例,包括FPGA进行视频图像处理的思想精髓,可帮助读者更好地理解使用FPGA的意义,以及采用FPGA进行开发的一个重要去向。 本书内容体系 本书共18章,分为4部分。其中1、2、4~15章由韩彬编写(其中13.4由林海全编写),第3章由张雷鸣编写,第16章由宋恒编写,后2章由于潇宇编写,其中每部分对应的章节和具体内容介绍如下。 第1部分包括1~5章节,主要综述了FPGA技术及其优势、学习途径,详细介绍了Verilog HDL语言,简述了本书Verilog HDL与Testbench的代码风格即设计架构,以及为后续章节硬件基础的 CPLD/FPGA核心板 原理图与PCB 设计。其中第2章与后续设计中或有重叠,非初学者可以跳过第2章。 第2部分包括第6~13章,由浅入深给出了8个具有针对性的开发例程,介绍了边沿检测技术、全局时钟同步设计技术、片间通信技术等多种FPGA设计技巧,完成了多种FPGA常用外设的驱动,为后续系统集成做好了准备。 第3部分为第14~15章,介绍基于SDRAM的VGA显示控制器,以及基于OV7725的图像采集系统的设计,这是在第2部分8个例程基础上的压轴设计,也是本书的核心开发内容。这一部分首先介绍基于SDRAM的海量数据跨时钟域交互设计,接着从零开始开发OV7725摄像头,并且采用SDRAM控制器实现数据的实时采集与VGA显示功能。本部分涵盖了多种FPGA设计思想,开启了未来FPGA在视频图像处理中发挥巨大作用的篇章,是最基本的图像采集/处理框架。 第4部分包括第16~18章,第16章为本书第二版的新增内容,或称为FPGA设计的高级篇,首先介绍了TimeQuest时序约束的理论基础,接着在第15章基于OV7725摄像头的视频图像采集系统工程上,进行理论与实践的结合,完整地再现了FPGA开发的时序约束流程。 17、18章节主要是在系统的层面上详细地介绍了FPGA硬件电路的设计,以及基于FPGA的嵌入式视觉处理系统的开发。这一部分作为本书的进阶,主要针对掌握了FPGA开发的对象,并对未来的FPGA视觉处理系统做出了简单的介绍。 本书所涉及的数据手册,相关的文档规范,以及所有例程的开发工程、使用的软件(Quartus II软件希望读者按照2.2节自己尝试在Altera官网进行下载)与工具等,包括更多的FPGA学习资料的总结,均包含在本书的资料包中(可在网页资料发布页面进行下载,下载地址:http://group.chinaaet.com/334),希望读者能够仔细阅读笔者整理的资料,并软硬结合,着于设计,步步为营掌握FPGA开发流程与技巧。 第二版更新内容 很荣幸等到了本书的第二版面世,本书第一版受到了广大网友的热爱与支持,并且收到了广泛专业人士的指点斧正与更新意见/需求。“从正确通往完美的路,是很遥远并万分艰辛的……”,本书第二版发布之前,笔者花了巨大的精力进行修正、更新、总结、完善,力求完美的极致,以更好地培育FPGA的新生。 相对第一版,本书第二版更新内容主要如下: 【1】添加了第3章:Verilog HDL语法介绍; 【2】添加了第13.4节“彩色图像的VGA显示驱动实现”; 【3】添加了第16章“TimeQuest的分析与实践”; 【4】添加了缩略语与单位对照表; 【5】将全书中所有用代码表示的接口介绍用框图进行替换; 【6】修正了第一版中出现的无数Bug与笔误。 本书读者对象 ? FPGA技术爱好者; ? 想全面、系统地学习FPGA的人员; ? FPGA初学者; ? 对摄像头开发有强烈兴趣的朋友; ? 利用FPGA视频图像开发的技术人员; ? 大中专院校的学生和老师; ? 相关培训学校的学员。 编著者

目录

目 录 第1章 浅谈FPGA技术、优势、学习途径 (1) 1.1 FPGA的诞生、发展 (1) 1.1.1 FPGA的诞生 (1) 1.1.2 FPGA的发展与未来 (4) 1.1.3 博弈,在入门之前 (7) 1.2 Altera FPGA介绍及发展、应用 (8) 1.2.1 Altera公司介绍 (8) 1.2.2 Altera产品介绍 (9) 1.2.3 Altera FPGA的开发平台 (15) 1.2.4 Altera FPGA的动态与应用 (17) 1.2.5 Altera FPGA的应用 (20) 1.2.6 对比ARM与DSP,认清FPGA (23) 1.3 善用网络资源,不断总结自我 (26) 第2章 Quartus II 13.0套件的下载及安装 (29) 2.1 写在前面的话 (29) 2.2 Quartus II 13.0软件下载 (30) 2.3 Quartus II 13.0组件安装 (32) 2.4 Quartus II 13.0 Device安装 (36) 2.5 USB Blaster下载器驱动程序的安装 (39) 第3章 Verilog HDL语法简介 (43) 3.1 What is Verilog HDL? (43) 3.2 设计层次 (44) 3.3 设计流程 (44) 3.4 基本语法介绍 (46) 3.4.1 模块module (46) 3.4.2 注释 (47) 3.4.3 大小写 (47) 3.4.4 参数声明parameter (48) 3.4.5 预处理指令 (48) 3.4.6 常量 (49) 3.4.7 变量 (50) 3.4.8 运算符 (51) 3.5 Verilog HDL建模 (54) 3.5.1 结构建模 (54) 3.5.2 数据流建模 (56) 3.5.3 行为建模 (57) 3.5.4 关于状态机 (66) 第4章 MAX II CPLD/Cyclone II/IV FPGA设 PCB Layout设计 (76) 4.1 浅谈PCB Layout (76) 4.2 MAX II CPLD核心电路设计 (77) 4.2.1 MAX II CPLD背景及简介 (77) 4.2.2 EPM240T100C5N设计需求研究及分析 (79) 4.2.3 EPM240T100C5N核心板原理图设计 (83) 4.2.4 EPM240T100C5N核心板布局布线 (87) 4.3 Cyclone II FPGA核心电路设计 (88) 4.3.1 Cyclone II FPGA背景及简介 (88) 4.3.2 Cyclone II数据手册解读与EP2C8Q208C8N的设计研究 (89) 4.3.3 EP2C8Q208C8N核心板原理图设计 (101) 4.3.4 FPGA核心板Layout注意事项 (110) 4.4 Cyclone IV FPGA核心电路设计 (113) 4.4.1 Cyclone IV FPGA简介 (113) 4.4.2 Cyclone IV FPGA数据手册分析与EP4CE6E22C8N的设计研究 (115) 4.4.3 Cyclone IV FPGA核心电路设计 (121) 4.5 FPGA/CPLD电路焊接、调试经验总结 (124) 4.6 本书配套FPGA开发平台硬件介绍 (128) 4.6.1 VIP_Board 3.0硬件资源介绍 (128) 4.6.2 VIP_Board 3.0相关外设实物介绍 (130) 第5章 Verilog HDL设计与Testbench 文件架构 (134) 5.1 Verilog HDL设计 (134) 5.1.1 Verilog HDL与VHDL的对比 (134) 5.1.2 Verilog HDL的发展 (135) 5.1.3 Verilog HDL代码设计风格 (136) 5.2 Testbench文件架构 (141) 5.2.1 Testbench的介绍 (141) 5.2.2 Testbench代码设计风格 (142) 5.3 Quartus II工程目录文件夹的定制 (145) 第6章 4位计数器的设计与仿真验证 (147) 6.1 写在前面的话 (147) 6.2 FPGA/CPLD开发流程 (147) 6.3 基于Quartus II 13.0的4位计数器设计流程 (149) 6.3.1 Quartus II 工程的创建 (149) 6.3.2 4位计数器的逻辑电路设计 (152) 6.3.3 Quartus II编译流程与工程设置分析 (155) 6.4 基于Modelsim-Altera 10.1d的4位计数器仿真验证流程 (166) 6.4.1 关于FPGA设计的各种仿真概念分析 (167) 6.4.2 Modelsim版本的简要介绍 (168) 6.4.3 Modelsim工程的创建 (168) 6.4.4 Testbench激励文件的编写 (171) 6.4.5 Modelsim波形的仿真与分析 (174) 6.5 设计思路的验证与总结 (182) 第7章 LED驱动电路设计 (183) 7.1 LED驱动电路设计方案1—入门 (183) 7.1.1 LED驱动电路设计方案 (183) 7.1.2 8位LED的自加显示实验 (185) 7.2 LED驱动电路设计方案2—升级 (196) 7.2.1 LED电路设计方案 (196) 7.2.2 74HC595驱动分析与实现 (198) 7.3 8位LED跑马灯显示实验 (208) 7.4 LED特效呼吸灯的设计 (215) 7.4.1 PWM协议的基本介绍 (215) 7.4.2 LED呼吸灯的设计 (216) 第8章 独立按键与矩阵键盘的FPGA驱动电路实现 (227) 8.1 按键及其工作模式介绍 (227) 8.1.1 按键抖动原理分析 (228) 8.1.2 硬件消抖动 (228) 8.1.3 软件消抖动 (230) 8.2 独立按键的FPGA驱动电路设计 (230) 8.2.1 独立按键电路设计 (230) 8.2.2 FSM状态机的Verilog HDL介绍 (231) 8.2.3 FPGA按键驱动设计方案1 (234) 8.2.4 FPGA按键驱动设计方案2 (248) 8.3 矩阵键盘的FPGA驱动电路设计 (252) 8.3.1 工作原理及电路设计 (252) 8.3.2 FPGA矩阵键盘驱动设计 (255) 第9章 “Hello World”的LCD1602显示驱动实现 (267) 9.1 LCD1602介绍及硬件设计 (267) 9.1.1 LCD1602字符液晶介绍 (267) 9.1.2 LCD1602硬件电路设计 (268) 9.1.3 LCD1602的时序及初始化分析 (271) 9.2 LCD1602的FPGA驱动电路实现 (275) 9.2.1 LCD1602的C语言实现方案 (276) 9.2.2 LCD1602的Verilog HDL实现方案 (277) 第10章 优化设计FPGA全局时钟管理模块 (290) 10.1 异步复位,同步释放机制 (290) 10.1.1 组合电路中的竞争-冒险 (291) 10.1.2 时序电路中的竞争-冒险 (292) 10.2 无PLL的全局时钟管理模块设计 (296) 10.3 Quartus II IP核介绍及PLL的定制 (305) 10.3.1 Quartus II IP核的介绍 (305) 10.3.2 PLL IP核的定制与分析 (311) 10.4 带PLL的全局时钟管理模块设计 (319) 第11章 基于FPGA与MCU通信的SPI协议设计 (325) 11.1 SPI总线协议介绍及硬件的设计 (325) 11.1.1 SPI总线协议介绍 (325) 11.1.2 STM8的硬件电路设计 (327) 11.1.3 SPI总线协议时序分析 (329) 11.2 SPI总线协议的通信实现 (330) 11.2.1 STM8的SPI总线收发设计 (330) 11.2.2 边沿检测电路的FPGA实现 (332) 11.2.3 SPI通信的数据接收模块设计 (334) 11.2.4 SPI通信的数据发送模块设计 (343) 第12章 基于FPGA与PC通信的UART串口设计 (351) 12.1 追根溯源透析串口通信 (351) 12.1.1 串口通信简介 (351) 12.1.2 串口波特率 (354) 12.1.3 串口协议分析 (354) 12.2 串口电路的设计 (355) 12.2.1 TTL转RS-232电路的设计 (355) 12.2.2 USB→UART转换电路设计 (356) 12.2.3 UART电路的调试 (357) 12.3 细说真正的任意分频 (358) 12.3.1 分频电路的重要性 (358) 12.3.2 任意频率发生器原理 (358) 12.3.3 任意频率发生器的验证 (360) 12.4 串口通信的硬件实现 (364) 12.4.1 uart_receiver接收模块的设计 (364) 12.4.2 uart_transfer发送模块的设计 (372) 12.4.3 PC2FPGA UART联调测试 (376) 第13章 基于FPGA的VGA驱动显示设计 (383) 13.1 VGA接口、时序及驱动电路设计 (383) 13.1.1 VGA接口介绍 (383) 13.1.2 VGA时序分析 (385) 13.1.3 RGB三原色模型 (388) 13.1.4 VGA驱动电路设计 (391) 13.2 VGA驱动的FPGA实现 (396) 13.2.1 VGA驱动时序电路的设计 (396) 13.2.2 任意分辨率的VGA显示控制器设计 (408) 13.3 “Hello World”的VGA显示驱动实现 (411) 13.3.1 “Hello World”字模的提取 (411) 13.3.2 C2Mif软件的介绍与Mif文件的生成 (414) 13.3.3 VGA字符显示的FPGA实现 (418) 13.4 彩色图像的VGA显示驱动实现 (422) 13.4.1 彩色图像显示的理论分析 (422) 13.4.2 彩色图像的数据提取 (423) 13.4.3 VGA彩色图像显示的FPGA实现 (424) 第14章 基于SDRAM的VGA显示控制器的设计与实现 (427) 14.1 跨时钟域数据交互 (427) 14.2 SDRAM的介绍及其控制器的移植与优化 (431) 14.2.1 SDRAM的特性及时序驱动介绍 (431) 14.2.2 SDRAM的硬件驱动电路设计 (435) 14.2.3 SDRAM控制器的移植与优化 (437) 14.2.4 Sdram_Control_2Port的封装与协议制定 (454) 14.3 基于SDRAM的VGA显示控制器的实现 (459) 第15章 基于OV7725的摄像头视频图像采集系统 (471) 15.1 系统框架设计思路分析 (472) 15.1.1 系统框架分析 (472) 15.1.2 算法的实现流程 (473) 15.2 OV7725摄像头介绍与视频采集实现 (476) 15.2.1 CMOS摄像头的简介 (476) 15.2.2 OV7725的特性介绍及驱动电路设计 (478) 15.2.3 OV7725 SCCB接口及寄存器介绍 (483) 15.2.4 OV7725感光阵列与视频时序分析 (492) 15.2.5 OV7725寄存器I2C初始化设计 (495) 15.2.6 OV7725的视频采集模块设计 (510) 15.3 OV7725视频图像显示的实现 (527) 15.4 本章小结 (537) 第16章 TimeQuest的分析与实践 (539) 16.1 写在前面的话 (539) 16.2 保持裕量和建立裕量的深刻理解 (539) 16.3 时钟约束—内对内模型 (542) 16.3.1 内对内模型公式分析 (542) 16.3.2 约束时钟及PLL (543) 16.4 output引脚约束—内对外模型 (553) 16.4.1 内对外模型公式分析 (553) 16.4.2 output引脚约束 (554) 16.5 input引脚约束—外对内模型 (556) 16.6 阶段性小总结 (557) 16.7 约束异常 (557) 16.7.1 Set Multicycle Path (557) 16.7.2 Set False Path (562) 16.8 决战SDRAM时序约束 (562) 16.9 Altium Designer查看走线报表 (573) 第17章 基于FPGA的系统设计 (575) 17.1 FPGA芯片选型 (575) 17.2 FPGA的与众不同—PCB布局在设计原理图之前 (582) 17.3 存储器的选型 (583) 17.4 FPGA外围器件的选择与设计 (584) 17.4.1 电阻 (585) 17.4.2 电容 (585) 17.4.3 磁珠 (588) 17.4.4 保险丝 (590) 17.5 基于核心板的系统设计 (592) 17.6 基于低功耗系统的电源选型 (593) 17.7 高速系统的PCB设计要点 (598) 17.7.1 结构布局 (598) 17.7.2 电路板的多层设计 (598) 17.7.3 过孔设计要点 (599) 17.7.4 防止串扰的布线原则 (600) 17.7.5 差分线布线原则 (600) 17.7.6 开关电源PCB设计要点 (601) 17.8 本章小结 (602) 第18章 基于高速相机的嵌入式视觉处理系统设计 (603) 18.1 视觉处理系统概述 (603) 18.2 嵌入式视觉处理系统结构设计 (604) 18.3 芯片选型 (606) 18.4 基于Camera Link工业相机接口的硬件设计 (608) 18.5 基于Camera Link接口的FPGA程序设计要点 (612) 18.6 基于VGA接口的图像的实时缩小与算法结构 (613) 18.7 FPGA与DSP的协同工作模式 (616) 18.8 乒乓操作的进阶—零延时数据传输 (616) 18.9 系统调试 (617) 18.10 本章小结 (618) 缩略语对照表 (619) 符号对照表 (625)

作者简介

韩彬,网名CrazyBingo,2012年于杭州电子科技大学获得学士学位,2015年于西安电子科技大学获得硕士学位,长期从事FPGA逻辑驱动电路开发,对LCD显示控制器与摄像头采集系统、硬件加速实现有丰富的开发经验与技术积累。编写过多份FPGA学习教程,常年活跃于各大博客论坛(尤其是ChinaAET)技术群等,在第一版《FPGA设计技巧与案例开发详解》的基础上,呕心沥血,携友再创该书第二版。

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个