首页资源分类FPGA/CPLDAltera > 《HELLO FPGA》- 学习指导篇

《HELLO FPGA》- 学习指导篇

已有 445185个资源

下载专区

文档信息举报收藏

标    签:《HELLOFPGA》

分    享:

文档简介

《HELLO FPGA》- 学习指导篇

文档预览

封面 前言 为什么要学学习指导篇:对于 FPGA 初学者来说,什么是 FPGA?为什么要学习 FPGA? 怎么学习 FPGA?这三个是我们最先会面对的大问题,我们只有搞明白、弄清楚了这三个问题, 才能有目的、有计划的去掌握这门技术,否则,我们学习 FPGA 的愿望只是空中楼阁而已。 学习指导篇包含哪些内容:该篇以什么是 FPGA、为什么要学习 FPGA、怎么学习 FPGA 为主线,详细的讲解了 FPGA 是什么、FPGA 有什么用,FPGA 发展前景,以及 FPGA 职业待 遇,并且在该基础上,我们还进一步详细讲解了如何从一个什么都不会的 FPGA 初学者成长到 无所不知、无所不能的一个 FPGA 工程师。 目录 第一章 FPGA 的探索之旅............................................................................................................. 1 §1.1 FPGA 是什么?...............................................................................................................4 §1.2 FPGA 有什么用? ..........................................................................................................5 §1.3 FPGA 发展前景如何?...................................................................................................6 §1.4 FPGA 职业待遇如何?...................................................................................................9 第二章 FPGA 的学习之旅........................................................................................................... 13 §2.1 教程理念 ....................................................................................................................... 21 §2.2 自我认知 ..................................................................................................................... 22 2.2.1 没学过 FPGA....................................................................................................... 22 2.2.2 没学好 FPGA ...................................................................................................... 23 §2.3 学习指导篇.................................................................................................................. 24 2.3.1 为什么要看学习指导篇? .................................................................................... 24 2.3.2 学习指导篇有哪些内容? ................................................................................... 24 §2.4 数字电路篇.................................................................................................................. 24 2.4.1 为什么要看数字电路篇? .................................................................................... 24 2.4.2 数字电路篇有哪些内容? ................................................................................... 25 2.4.3 怎么样学习数字电路篇? ................................................................................... 25 §2.5 硬件语法篇.................................................................................................................. 25 2.5.1 为什么要看硬件语法篇? .................................................................................... 25 2.5.2 硬件语法篇有哪些内容? ................................................................................... 25 2.5.3 怎么样学习硬件语法篇? ................................................................................... 26 §2.6 软件工具篇.................................................................................................................. 26 2.6.1 为什么要看软件工具篇? .................................................................................... 26 2.6.2 软件工具篇有哪些内容? ................................................................................... 26 2.6.3 怎么样学习软件工具篇? ................................................................................... 27 §2.7 项目实战篇.................................................................................................................. 27 2.7.1 为什么要看项目实战篇? .................................................................................... 27 2.7.2 项目实战篇有哪些内容? ................................................................................... 27 2.7.3 怎么样学习项目实战篇? ................................................................................... 27 §2.8 软核演练篇 ................................................................................................................. 28 2.8.1 为什么要看软核演练篇? .................................................................................... 28 2.8.2 软核演练篇有哪些内容? ................................................................................... 29 2.8.3 怎么样学习软核演练篇? ................................................................................... 29 §2.9 时序分析篇.................................................................................................................. 29 2.9.1 为什么要看时序分析篇? .................................................................................... 29 2.9.2 时序分析篇有哪些内容? ................................................................................... 30 §2.10 学习 FPGA 为什么需要开发板?............................................................................. 30 版权声明 .........................................................................................................................................33 FPGA 的探索之旅 第一章 FPGA 的探索之旅 FPGA 作为一种高新的技术,已经逐渐普及到了各行各业,无论是消费类、通信类、电子行 业等,它的身影都无处不在,从 1985 年到 2015 年,FPGA,这个半导体行业的“怪胎”,已经 诞生了 30 年了。回望这 30 年,FPGA 从刚开始一个默默无闻的“丑小鸭”,在经历了无数他人 的冷落和不理解后,直到今天也渐渐地开始受到世人们的追捧了。当初人们笑话它,说它只是一 个浪费晶体管的怪物,今天人们又对它竖起大拇指,说它将来一定能颠覆整个半导体行业。这前 前后后,颠来倒去的论调,一定让每一个想要了解它,认识它的人,犯了迷糊。FPGA 到底是什 么呢?为什么我们说它是半导体行业的一个“怪胎”?它在未来真的可以颠覆整个半导体行业吗? 我们作为一个电子行业的从业者,现在有必要学习它、了解它吗?我们又该怎么开始学习它呢? 咳咳,且慢,且慢,尽管你现在对它有这样那样一肚子的问题,可是我,毕竟没法用一两句话解 答你心中所有的疑惑。不过,如果你愿意静下心来,听我唠叨唠叨,那我也愿意尽我自己最大的 努力,用这一套书,去尝试解答你对于 FPGA 的所有疑惑。那么接下来,我们就开始吧。从哪 说起呢?咱们就从一个小故事开始说起吧。 曾经,有一天啊,有一个学生在网上找我,说老师我想和你聊一聊,我说你想聊啥,他说网 上聊天讲不清楚,晚上咱们见面详谈。这个时候我就觉得有点好奇了,为什么,如果是普通的学 生找我,我都觉得很正常,但是这个学生有点不一样,为什么,因为这个学生平常很少说话,基 本上一年都没怎么见过他和身边人讲过话。平常喃,就喜欢自己一个人打游戏,对学习也没看出 有什么兴趣。到了晚上,快 8 点多钟了,哐哐哐的敲我办公室门,满脸激动地进来以后,慢吞吞 地凑过来和我说,那个,老师,我想学 FPGA。我听到他说他想学 FPGA,我就问他,你怎么突 然就想学 FPGA 了,上次交给你的任务完成没有。他说,上次的任务还没完成。我说,还没完 成,怎么又想开始学 FPGA 了。你猜他说什么,他说,因为我看到身边的人都开始学 FPGA 了, 所以我也想学,老师你看行吗。听到他讲出这样的一个理由,当时我有点,你知道的,有点恨铁 不成钢的感觉。但是转念一想,既然学生现在有这个热情,我也没必要给人家波凉水,那我说, 好吧,那你就先自己去买块开发板自学看看吧,有什么不懂得你可以来问我。这样一说,他也就 比较满意的回去了。 之后的一段时间,因为工作比较忙嘛,我就基本快把这个事情给忘了,这个学生呢之后也没 来找过我。直到有一天,我在实验室里转悠,突然看到角落里有一块从来没见过的电路板,上面 都快落灰了,就摆在那,我就问这是谁的板子怎么以前没见过啊,这个学生就说了,这是上次他 买的 FPGA 开发板,我说,你这板子都落灰了,你怎么不用啊,他在那支支吾吾了半天,也没 说出点理由。后来我才知道,从那块板子买回来之后的几个月里,他只用这个开发板点亮过一次 LED 灯,后来就再也没有碰过了。这是为什么呢,为什么一个学生充满热情的买回来一块开发 板,就用一次,甚至一次都不用,就摔在那里了。这种情况可能不在少数,而且有可能这种情况 就发生在你自己或者你身边的同学身上。那到底为什么这么多人的身上都出现了这种情况呢。我 现在就尽可能给你解剖一下这个学生一步步最终走向放弃的整个经过。 你想,一个人决定去做一件事情,肯定是要找到充分理由才会去做的,并且这些理由必须是 对你自身有利的。我打个比方,比如一个人决定要去参军当兵,那他一定是经过深思熟虑,他可 4 数字电路篇 §1 能觉得当兵可以完成他保家卫国的理想,这个职业可以带给他一些其他职业难以获得的成就感。 又或者他觉得自己平常自由散漫,希望通过参军入伍,磨炼自己的意志,改掉自己平常的一些坏 习惯。再退一步,他可能觉得自己一直没有一个可以赚钱的手艺,而军人的工资待遇,可能要比 他出去找工资要好的多。所以出于这些考虑,他去当兵了。大家看,无论我们是出于家国天下, 这样意识形态的激励,还是出于工资待遇 这样的物质激励。我们其实都找到了一个理由,而这 些理由都是对自己自身持续有利的。讲到这里,可能大家已经发现了,之前那个学生来找我,说 自己为什么要学 FPGA,他是怎么说的,他说他看到其他人都在学 FPGA,所以他也要学,你说 这样的一个理由,他可能学好 FPGA 吗,窥一斑而可知全豹,我就不下断言了。讲到这里,你 们可能又要问了,放弃的理由和借口,我们都会说,但是你能告诉我们一些为什么要学 FPGA, 或者说我们为什么要把 FPGA 坚持学下去的理由嘛。好,你先不要急,我马上就来给你点理由。 我们要想坚定的开始学习 FPGA,首先最起码我们要搞清楚几件事情: (1) FPGA 是什么,不能说我们连 FPGA 是什么都没搞清楚,就闭着眼的哐哐哐学,这样 学下去最终我们必将放弃。 (2) FPGA 有什么用,它有什么优势,我为什么不去学什么单片机、DSP,非要跑来学 FPGA。 其实很多人学 FPGA 一开始都想知道,我学这个 FPGA 最终到底能用在什么地方。 (3) FPGA 发展前景如何,我学会了 FPGA 以后,过两年这个东西会不会被淘汰。 (4) FPGA 职业待遇如何,我学会了 FPGA 以后,工作好不好找,能不能赚到钱。 下面我们就给大家来逐一谈一谈上面这四个问题。 §1.1 FPGA是什么? 首先我们要说的是 FPGA 是什么,这个问题说好回答,其实很好回答,说难回答,其实很 难回答。为什么这么说呢,说好回答是因为我们只要说,FPGA(Field Programmable Gate Array, 即现场可编程门阵列),它是在 PAL、GAL、CPLD 等可编程器件的基础上进一步发展的产物。 它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足, 又克服了原有可编程器件门电路数有限的缺点,这就是 FPGA。我相信这种回答很少有人能够理 解,因为它涉及到的专业名词,及知识面是很广泛的。说难回答是因为 FPGA 内部构造非常复 杂,不是一两句话就能解释清楚的,如果大家想要知道 FPGA 是什么,那么就要静下心来一步 步听我们给大家娓娓道来。不知道现在的大学生在上电工电子课的时候,还用不用面包板搭建数 字时钟电路,如果有的话,那么相信大家肯定有过这种经历,如图 1.1 所示。 Zircon Opto-Electronic Technology CO.,Ltd. §1 数字电路的基础知识 5 图 1.1 利用面包板搭建的数字时钟 从该图中我们可以看出,该电路是一个数字时钟,里面有晶振,蜂鸣器,数码管,以及各种 74 系列的小芯片,这些小芯片能够实现的功能也就相当于几个逻辑门,搭过该电路的朋友,肯 定会知道搭建该电路是非常复杂的。大家可以想一想,我们仅仅是搭建一个简单的数字时钟就这 么复杂了,如果我们想要实现更加复杂的功能,那么我们就要犯难了,因为我们需要使用几十个 或者上百个这种专用小芯片来完成,这样就会使得电路板的布局、布线变得困难,还会极大的影 响到整个系统的性能,所以这种方式毫无疑问是不行的。为了改变这种情况,大家就想到了一个 办法,那就是通过专用集成电路(ASIC)来实现,我们可以将要实现的特定要求交给 ASIC 厂 商,让他们设计出一个专用集成电路芯片,这样就可以解决这种问题了。比如说,我们把数字时 钟功能要求交给 ASIC 厂商,ASIC 厂商就会根据数字时钟功能要求设计出一个专用集成电路芯 片,这一个小小的芯片它其实就完成了我们数字时钟电路功能。这种方法虽然很好,但同时也会 带来很多其他的问题,比如说,生成周期长,芯片难验证,芯片内部电路不可以更改。 随着时代的进步,FPGA 就产生了,FPGA 可以很好的解决以上问题,你可以把它理解为一 个可以通过编程来更改内部结构的芯片。其它的芯片在出厂前,厂商已经为这颗芯片设计好了具 体的功能,使用者只需要学会如何去使用就可以了,而 FPGA 则不同,在大多数情况下,FPGA 芯片在出厂时都是一颗空白的芯片,或者说是一颗半成品的芯片,这颗芯片内部如何连线,又该 以什么样的方式进行工作,都需要用户通过编程语言自己来设计。从理论上来讲,你甚至可以根 据自己的想法,将一颗 FPGA 芯片变成任意一颗你想要得到的芯片。这听起来似乎很神奇,但 是这也同时需要使用者,具备比其他芯片使用者更多的硬件知识和逻辑思维能力。当然,我们这 里只是简单的介绍了一下 FPGA 的概念,具体 FPGA 的工作原理和内部结构,大家可以参考《数 字电路篇》,《数字电路篇》的最后一章给出了详细的介绍。 §1.2 FPGA有什么用? 说完了 FPGA 是什么,接下来我们再来谈下第二个问题,FPGA 有什么用。FPGA 从诞生 以来,经历了从配角到主角的过程,由于 FPGA 飞速的发展,使它被应用到更多的领域,所以 让更多学 FPGA 的人看到了希望。为了让大家在正式学习 FPGA 之前,明白自己将来可能在哪 些领域,找到属于自己的一片天空,我们就对 FPGA 工作涉及到的应用领域进行讲解,对于 FPGA 应用领域,我们主要分成三个领域,第一个方向是通信领域,第二个方向是算法实现领域,第三 http://www.fpga.gs/ 6 数字电路篇 §1 个方向是嵌入式领域,下面我们就对这三个领域分别进行讲解: (1) 通信领域:FPGA 最初以及到目前最广的应用领域就是在通信领域,一方面通信领域 需要高速的通信协议处理方式,另一方面通信协议随时在修改,非常不适合做成专门的 芯片。因此能够灵活改变功能的 FPGA 就成为首选。FPGA 主要应用于通信设备的高 速接口电路设计,这一方向主要是用 FPGA 处理高速接口的协议,并完成高速的数据 收发和交换。 (2) 算法实现领域:所谓算法实现领域,就是我们通常所说的数字信号处理或者是视频图形 处理,这个方向门槛相对于第一个方向更高,因为涉及到算法和 FPGA 的协同优化。 很大程度上这一方向已经大大超出了信号处理的范畴。在这一方向要求 FPGA 设计者 要有一定的数学功底,能够理解改进较为复杂的数学算法,并且还要利用 FPGA 内部 的各种资源使之能够变为实际的运算电路。 (3) 嵌入式领域:所谓嵌入式领域,其实就是我们通常说的 SOPC,其实严格意义上来说 这个已经在 FPGA 设计的范畴之内,只不过是利用 FPGA 这个平台搭建的一个嵌入式 系统的底层硬件环境,然后设计者主要是在上面进行嵌入式软件开发而已,设计对于 FPGA 本身的设计时相当少的。 不管我们将来从事什么领域、从事什么行业,我们只要干一行爱一行,将其学精通了,我们 就可以找到高薪工作,机会永远留给有准备的朋友。 §1.3 FPGA发展前景如何? 说完了 FPGA 有什么用,接下来我们再来谈下第三个问题,FPGA 发展前景如何?「2015 年 6 月 1 号发生了一件轰动全球半导体产业的大事件,当然这个大事件肯定不是儿童节来临了, 而是 Intel 宣布以 167 亿美元收购了全球第二大 FPGA 生产商——Altera 公司。此事件之所以被 认为是一次产业地震,不仅仅是因为该交易是英特尔成立以来金额最大的一笔并购案,更因为在 这个交易的背后还很可能隐藏了一个未来足以颠覆整个计算机产业的宏伟计划」,如图 1.2 所示。 Zircon Opto-Electronic Technology CO.,Ltd. §1 数字电路的基础知识 7 图 1.2 Inter 牵手 Altera 看完了上面这段话,相信大家会有这么两个疑问,一是 Altera 是谁?二是为什么 Intel 要收 购 Altera?下面我们就为大家解决这两个问题。 首先解决的问题是 Altera 是谁?Altera 公司是全球第二大的 FPGA 制造商,它大约占有相 关市场 39%的份额,是 FPGA 行业为数不多的领导者之一。我们身边很多初学者,在学习 FPGA 的时候,都会选择 Altera 的芯片进行学习,这可能是因为 Altera 长期以来对亚洲市场都投入了 较大的人力和物力,使得与 Altera 公司产品相关的中文资料和教材都会相对的多一些,入门学 习时也会较为容易上手一些。知道了第二名,下面我们再来介绍下这个行业的第一名,FPGA 行 业的第一名,是属于 FPGA 技术的发明者——Xilinx 公司,Xilinx 公司成立于 1984 年,是全球 领先的可编程逻辑完整解决方案的供应商,该公司首创了 FPGA 这一创新性的可编程技术,目 前至少占有相关市场 50%的份额以上。当然,无论是第一名还是第二名,作为一个 FPGA 的初 学者,都是需要简单的了解一下的。因为在将来的工作中,我们可能需要掌握不同厂家提供的芯 片的具体特性,以及他们提供的开发环境的操作和使用,这样才能让我们在面对具体的工作时, 更好的来选择适合的方案去解决具体的问题。 解决完了 Altera 是谁这个问题,下面我们再来解决为什么 Intel 要收购 Altera 这个问题。我 们来看下 Intel 官方是如何解释的,英特尔收购 FPGA 主要原因有三点,一是继续实现摩尔定律, 二是继续巩固英特尔数据中心的优势,三是物联网的巨大商机。这里我们就以大家比较容易理解 的第三点为例进行介绍,Interl 和 Altera 双方都看好物联网领域的商机,如图 1.3 所示。 图 1.3 物联网领域的商机 在安防监控领域,目前 CPU 很难做到多通道处理和智能检测分析,但是加上 FPGA 之后就 可以轻易解决了。在工业自动化领域,FPGA 可以做多通道的马达控制,目前马达电力消耗占据 全球能源消耗的大头,在节能环保的趋势下,未来各类精准控制马达获得采用,这是 FPGA 可 以大显身手的领域,一片 FPGA 就可以控制大量马达,目前英特尔也有智能工厂方案,在云端 和网关端有强大的优势,如果跟终端的控制结合,则优势会大大增加。还有目前的最为热火的智 能家居和智能机器人,未来的智能家居必然能实现传感器融合,比如,当主人回来后,音乐可以 自动播放,照明会自动打开,一些安防的措施会解除,这需要大量的融合算法,这是 FPGA 做 http://www.fpga.gs/ 8 数字电路篇 §1 擅长的地方;未来的机器人在控制上也需要很多的并行处理和控制,例如机器人的智能需要机器 视觉技术的大提速,这也是 FPGA 可以发挥的地方。总之,英特尔这次收购让它可以弥补 CPU 在并行运算上的不足,还可以把方案往下延伸,这绝对是占据物联网终端的重拳。 Intel 收购 Altera,不管 Intel 有没有从中受益、能不能颠覆颠覆整个计算机产业,毋庸置疑, FPGA 行业应该是此次受益最大的。我们可以从股票走势就能够看出,如图 1.4 所示。 图 1.4 Altera 公司和 Xilinx 公司的股票走势图 从该图中我们可以看出,Altera 公司上涨了 20%,FPGA 龙头赛灵思公司的股票也涨了快 10%。Intel 收购 Altera 把 Xilinx 的股票也拉起来了,这不是很奇怪的吗?按照通常的理解 Intel 收购 Altera 应该对 Xilinx 造成伤害,它的股票应该下跌。为什么现在 Xilinx 的股票不跌反而增长 了呢,其主要原因就是:FPGA 一般只出现在最尖端的领域之中不为人所知,这次它借助 Intel 的知名度使得 FPGA 进入了全球公众的视野,与此同时,资本市场也显对 FPGA 进行了关注, 因此,一夜之间所有 FPGA 供应商的股票都出现了前所未有的大幅拉升,由此也可以证明电子 行业的下一个风口浪尖就是我们的 FPGA,如图 1.5 所示。 Zircon Opto-Electronic Technology CO.,Ltd. §1 数字电路的基础知识 9 图 1.5 电子行业的下一个风口浪尖 通过前面的讲解和分析,我们不难猜测出,未来的世界就是可编程的世界,在未来的世界中, 也许只会有 FPGA,所以你准备好了吗? §1.4 FPGA职业待遇如何? 说完了 FPGA 发展前景,最后我们再来谈下 FPGA 工程师这个职业的待遇怎么样,FPGA 工程师待遇在电子行业属于偏高水平,这是因为 FPGA 主要用于通信领域,通信领域在电子行 业中属于高端领域。当然,不管我们怎么说,其实都是没有说服力的,为了帮助大家了解 FPGA 工程师薪酬水平,下面我们给出单片机工程师、ARM 工程师,以及 FPGA 工程师工资水平对比 图,如图 1.6 所示。 图 1.6 单片机、ARM 和 FPGA 工资水平对比图 通过这三个职业的对比,我们可以发现 FPGA 工程师的薪酬确实很高。这里需要我们注意 的是,该统计数据我们是通过知名招聘看准网站获得的。当然,该网站不仅可以查到各个职业的 工资水平,我们还能够查到 FPGA 工程师就业前景、学历、工作经验、随工作经验工资变化趋 势如图 1.7 所示。 http://www.fpga.gs/ 10 数字电路篇 §1 图 1.7 FPGA 工程师就业前景分析图 最后我们再给出一个 FPGA 工程师的招聘需求量地区和招聘薪酬地区 TOP10 的排行榜,如 图 1.8 所示。 图 1.8 FPGA 工程师的招聘需求量地区和招聘薪酬地区 TOP10 的排行榜 当然,感兴趣的朋友可以通过招聘网站自己搜索查询,比较知名的招聘网站,相信大家也都 知道,这里我们就不再进一步进行介绍了。通过对上面这四个问题的回答,我相信你们应该已经 有了一些开* 始FP学G习A工FP程G师A 的的招理聘由了需。求不量会地再区像和之招前聘那薪个酬故地事区里T的O我P的10那的个排学行生榜一样,看到别人 都学所以自己就盲目的跟风去学了。其实刚才最开始的那个故事,我们只说了一半,我谈到他半 夜三更找我聊完,就回去了。至于回去之后他又做了什么呢。大家还记得我当时给他的那个建议 吗,我和他说,你可以先买一块开发板自己自学看看,有遇到不会的问题可以来问我。大家可能 也觉得我这话说的没错,因为学 FPGA 和学其他的技术不太一样,学 FPGA 必须要有一块开发 板,至于为什么我们后面再聊。但是我当时说的可能太过笼统了,我没告诉他要选一块怎样合适 Zircon Opto-Electronic Technology CO.,Ltd. §1 数字电路的基础知识 11 的开发板,然后要怎样去自学才能有效。我没跟他细说这个,所以最后就出问题了。 那天他听完我这个建议之后,就回宿舍了,激动万分地赶紧打开电脑,打开电脑干什么,上 淘宝呀,在淘宝上输入,FPGA 开发板。现在大家都知道,买开发板的时候要输入锆石 FPGA 开 发板,但是他那个时候,很遗憾,还没有锆石 FPGA 开发板,所以就输入了 FPGA 开发板,输 入完以后,一点击搜索,结果怎么样,立马傻眼了,淘宝哐哐给来了一堆各种各样的 FPGA 开 发板,他当时就傻了,不知道该怎么选了。不知道怎么选,没事,淘宝有办法,大家都知道,淘 宝上有两个功能是很多人最常用的,一个叫按销量排序,一个叫按价格排序。我们先说这个按价 格排序,因为我这个学生就是选的按价格排序,结果最后挑了一块 100 多块钱的板子,当然该板 子的这个产品介绍那肯定都是写的很好的,比如说:什么提供视频教程、提供源代码之类的,我 这个学生当时也不懂那么多嘛,一看,嚯,这么便宜,给的分量好像也很足,就它了。哐一下就 下单了,心里当时美滋滋的,还感觉自己占便宜了。结果怎么着,结果就是他自己学了半天不是 没学会放弃了嘛。 我后来是把这个板子给的教程和代码都拿来看了,怎么说呢,我只能说,还好他没学会,要 是学会了,这孩子就真给耽误了。这话我可能讲得有点严重了,但是,事实就是这么严重。那提 供的教程连最基本的原理和知识都有很多错误,学生他又什么都不懂,就哐哐地学,最后学不会 了,学歪了,还以为是自己水平不行,其实你看的教程,教你的老师就是错的,问题不在你自己 身上。但是学生不知道啊,心里又内疚,感觉都是自己不努力,自己不是学习这块料,最后放弃 了。这是什么,这叫做误人子弟。还有提供的那个源代码,啧,不好说,因为 FPGA 的代码,大 家知道,是 Verilog 语言,Verilog 语言和其他一些语言他还有点不太一样,Verilog 是用来描述 硬件功能的,关于这个后面我们会详细跟大家讲,可是就 verilog 是描述硬件功能的语言这个道 理,很多 Verilog 代码的提供者自己还没有搞清楚就咔咔的送人代码,一送送一堆,学生心里肯 定美啊,感觉上算了,给了这么多代码,殊不知啊,那些提供的,与其说是代码,夸张一点,还 不如说是乱码,你打开以后,生成的那个 RTL 网表那个乱的简直不能看。所以我们讲,人在到 达一定水平之前,都是有样学样的,根本分不清什么是好什么是坏,所以我们再初学入门的时候, 有一个靠谱的师傅带着,太有必要了,少走很多弯路。 大家千万不能带着一种想占便宜的心态来对待所有的事情,到菜市场买菜,你想占人便宜, 这轮到自己学习了,还想占人便宜,那你一定会吃亏。什么叫吃亏,你花六七百块钱买块板子, 开心,回来学到真正的知识了,那这钱花的不叫吃亏。你花一块钱,买块板子,回来没学两下就 丢了,那你吃亏了,吃大亏了,不止你花的那一块钱是亏的,还有你的热情,你花的精力,你的 时间,都亏了。这些才是我们应该知道的做事情的态度。人都要知道一个孰轻孰重,到底是六七 百块钱重要,还是自己的热情,精力和时间重要,这个我想每个同学好好想想就能知道的。说这 些话,有的朋友肯定又会想了,说这么多你就想说自己板子好呗,就想赚我钱呗,呸,坏蛋,资 本家。对,我们其实就是坏蛋,我们就是资本家,但是大家想一下,其实坏蛋也是人呀,资本家 也是人呀,对不对,每个人,他只要能做出一些成绩,一定是改变了或者修正了前人做错的一些 事情。比方说,大画家乔托,他就是因为看到了拜占庭帝国的那个圣母像啊,觉得丑陋无比,所 以才开始动手自己重新去画一幅。还有我们都知道的,大科学家布鲁诺,他觉得地心说是错的, 感到自己有必要去告诉大家什么才是真正的真理,所以他才会去发展日心说,并且提出宇宙无限 说。当然他后来被反对他的人给烧死了。所以我想说的是,一个人决定去改变一些东西,光有物 http://www.fpga.gs/ 12 数字电路篇 §1 质的激励是不够的,他一定有更深层次的理由驱使他。这个就是我们做事情的态度和方式。这种 态度和方式,不止是学习和创作。买东西也是一样的。包括我那个学生在内的很多人都觉得,初 学者嘛,先买个便宜的,一两百块钱的板子学一学,等我学的不错了,再去买好一点的。可惜, 事情总不像大家想象的那么好。我们静下来好好想一想,为什么我们会有先买个便宜的板子学一 学,这种想法呢,我们的这种想法是怎么来的呢。大多数人有这个想法,他背后的逻辑是什么? 他背后的逻辑就是,反正这个板子才 100 多块钱,很便宜啊,就算学不会,也不可惜,就当扔了 呗。你们想想是不是这个逻辑,凡是带着这种想法的人,能走得远嘛,可能很难吧,因为你给自 己留了一条后路,如果换做是我,我自己,那我一定不会这样做的。我会先买一块好的开发板, 使自己觉得我不学就是浪费了,这种内心的不安稳会促使我去更多的学习。而且我们知道,人在 买便宜的东西时,其实只是在买的那一刻是开心的,用的时候没一天是开心的;而我们去买品质 好的东西时,给钱那一刻可能是心疼的,但用的时候,每天都是快乐的。从另一个角度来说,只 有当我们每个人开始说服自己不被低廉的价格诱惑,也不用随便的心态去对待买到的物品时,我 们花出去的每一笔钱才都是值得,才都是不留遗憾的。 一下子,和大家说了这么多我自己对于学习 FPGA,和选购 FPGA 开发板的一些很私人的 想法,当然有的想法可能很主观,大家愿意听我唠叨这么久,在这里也很感谢大家。我们公司之 所以决定要做入门级的 FPGA 开发板,除去物质利益上的考虑之外,我们当然也很希望,大家 能够因为我们的作品受到一些影响,能够重新认真的去看待入门学习 FPGA 这件事。入门其实 和一个孩子幼年时的早期教育是很像的。每一个人身上,可能或多或少都会有一些坏毛病是自己 年幼时养成的,等到我们长大了,成人了,回头去看自己身上的这些坏毛病时会发现,想改正这 些问题已经很难了。所以,学习 FPGA 也是一样的,入门时,我们尽量使用正确的方法,学习 正确的知识,那么未来的道路才会充满光明和前景。 最后我们再多说一句,我们现在无论是出书,还是卖开发板,有时都像是在卖一个杯子,杯 子卖给你了,你也收到,但是杯子里的水还是需要各位你自己去倒。我们作为一个卖杯子的人能 做的工作只是想办法把这个杯子做好,仅此而已。 Zircon Opto-Electronic Technology CO.,Ltd. FPGA 的学习之旅 第二章 FPGA 的学习之旅 当我们载着雄心壮志,满怀信心的来到 FPGA 神圣大门前,我们会突然发现两个非常关键 问题,这两个关键的问题,我们常常是无法回避的。 第一个问题:我们很多朋友,其实不一定是一个 FPGA 的初学者,大家以前可能也学过 FPGA, 但是他们却一直在 FPGA 大门面前兜兜转转,始终感觉不得要领,没有办法深入。这是为什么 呢?下面我们就来简单的给大家分析分析,我们学技术的,最怕的是一开始只在乎它的广度,没 有在乎它的深度。很多朋友都有一个不好的习惯,就是觉的只要下载到硬盘里的东西,就已经学 会了,大家宁可去收集一千本 FPGA 的书籍放在一个文件夹,叫做 FPGA 经典教程,或者下载 了 5000 集的视频放在另一个文件夹,叫做 FPGA 经典视频,各种代码下载了一大堆又弄了一 个文件夹,叫做 FPGA 经典源码,总共一看这些文件夹有 5 T,这 5T 到底有多少是在用的呢, 其实很少很少,甚至有可能你下载完之后,都没有打开看过你所下载的所有教程,然后就一直在 那里放着,放 1 天,放 2 天,……,突然有一天你发现电脑硬盘满了,没有空间了,然后在硬盘 里一查全都是 FPGA 这玩意,最后就把它给删掉了,因此我们可以发现,这样去学习有没有用 呢?这样去收集资料有没有用呢?其实完全没有用,我们真正需要的是一个科学的学习方法,而 不是 5T 的教程资料。当然,也许会有很多好同学会去打开学习这 5T 的教程资料,但是当你打 开其中一本教程以后,你会发现一本书里面什么都混在一起,不管你基础怎么样,也不管你看不 看的懂,上来就把它们混成一团,然后框框框一下子讲了六七百叶页, 你一开始看前两页的时 候,还勉强能撑得住,但当你看到第 20 页的时候,我估计你就已经蒙了。这也就是为什么很多 朋友在学习 FPGA 的时候,学了半天,还是在大门面前团团转,没有真正的入门。 第二个问题:已经步入 FPGA 大门的朋友,在学习 FPGA 的道路上会逐渐的失去了原有的 激情与信心,最终会在前方道路的黑暗中迷失方向。这是为什么呢?我想这主要是因为 FPGA 这个命题对于初学者来说太过庞大了,庞大到初学者不知道该从什么地方入手,庞大到初学者不 知道 FPGA 的路在何方。所以你没法坚持学下去,到最后只能放弃。为了帮助大家解决这两个 难题,下面我们就来给大家讲解一下我们这套 HELLO FPGA 的教程理念。 §2.1 教程理念 当我们遇到这样一个庞大问题的时候,我们应该怎么办呢?俄国大文豪托尔斯泰曾说过: “人要有生活的目标:一辈子的目标,一个阶段的目标,一年的目标,一个月的目标,一个星期 的目标,一天的目标,一小时的目标,一分钟的目标,在这众多目标中,有时还得为大目标牺牲 小目标。”为了不让自己在前方的道路中丧失信心、迷失方向,我们需要将目标进行分解,将大 目标分解成若干个小目标,通过完成一个又一个的小目标来不断激励自己,即使我们在追求目标 的过程中遭受挫折,但是因为我们可以看到为了每个小目标而忙碌的回报,就使得自己能够不断 应对压力和挑战,继而推迟自己要放弃的心态,进而完成更多的目标。这里我们就列举两位著名 人物事迹进行说明。 第一位是美国著名作家赛瓦里德,赛瓦里德说:当我打算写一本 25 万字的书时,一旦确定 了书的主题和框架,我便不再考虑整个写作计划有多么繁重,我想的只是下一节、下一页甚至下 22 硬件语法篇 §4 一段怎么写。在六个月当中,除了一段一段开始外,我没想过其他方法,结果就水到渠成了。成 功正是一个化整为零、循序渐进的过程,并非一蹴而就的坦途。 第二位就是日本著名的马拉松运动员山田本一。山田本一在自传中这样写到:“每次比赛之 前,我都要乘车把比赛的路线仔细地看一遍,并把沿途比较醒目的标志画下来,比如第一标志是 银行;第二标志是一个古怪的大树;第三标志是一座高楼……这样一直画到赛程的结束。比赛开 始后,我就以百米的速度奋力地向第一个目标冲去,到达第一个目标后,我又以同样的速度向第 二个目标冲去。40 多公里的赛程,被我分解成几个小目标,跑起来就轻松多了。开始我把我的 目标定在终点线的旗帜上,结果当我跑到十几公里的时候就疲惫不堪了,因为我被前面那段遥远 的路吓到了。 从这两个著名人物的事迹中我们可以看到,他们都是把一个非常大的目标,划分为多个小目 标,然后通过完成一个个小目标来不断激励自己,给自己带来一个逐渐的成就感,这样就会促使 你完成一个你所感觉很难完成的事情。为了解决前面的两个问题,我们将上述的方法理念引入到 了我们的教程之中,首先,我们尝试将 FPGA 所需要掌握的学习内容拆分成七个相互关联的小 篇章,它们分别是:《学习指导篇》、《数字电路篇》、《硬件语法篇》、《软件工具篇》、《项目实战 篇》、《软核演练篇》、以及《时序分析篇》。然后我们再将这七个相互关联的小篇章拆分成若干个 可以短时间内掌握的小章节,最后我们只需要将这些小章节学习并掌握了,实际上我们就学会了 FPGA。其实我们一直相信,只要找一套好书,一块好的开发板,学习 FPGA 就已经够了,我们 不需要一上来就去找那么多的资料,什么 5 个 T,你搞那么多的资料,不是为了学习,只是你收 集的时候感觉爽而已。也许有的朋友会说,那什么时候我们要去收集资料啊,这需要等到你发现 我们这套入门教材里,完全找不到你想要的信息了的时候再去找。到那时候我们也会非常恭喜你, 你肯定是一个非常厉害的 FPGA 工程师了。 由于我们在编写教材时,已经考虑到了上面这些问题,所以我们选择把不同方面的知识各自 分成一本书,该讲语法的时候讲语法,该讲软件的时候讲软件,该讲项目的时候讲项目,每一本 都是清清楚楚的。之前大家看那些书为什么很可能会坚持不下去,就是因为太乱了,条理不清晰, 一本书看完,语法也没学会,软件也没搞懂,自己想动手做个项目,还是不知道要从何入手。那 我现在告诉你,如果你觉得自己哪方面没搞懂,你就自己直接去到那,比如说你语法的关键字不 懂,那你就直接去翻语法书,你说你不知道怎么用软件仿真,那你就直接去看软件书。你说你什 么都不懂,没关系,我就喜欢你什么都不懂,什么都不懂说明你没有接触过什么错误的思想,那 么这个时候你来看我们的学习指导书是最好的。这就是我们教学的一个手法和理念,你想去到哪 里我们就带你去哪里,你从那里开始就能找到正确的路。 §2.2 自我认知 讲完了整个教程理念,下面我们再来讲一下自我认知,《孙子•谋攻篇》中说:“知己知彼, 百战不殆。”我们只有认清自我,才能悦纳自己,才能做到自我的脱变和成长。学习 FPGA 也即 是如此,我们只有认清自我,在最开始选择一条正确的道路,我们才能看到路途上的优美风景, 如果我们在最开始选择了错误的道路,那么我们得到的将会是痛苦,有时选择比努力更重要。 2.2.1 没学过 FPGA Zircon Opto-Electronic Technology CO.,Ltd. §4 Verilog 的关键问题解惑 23 在这里,我们相信有一部分人是非常容易判断的,为什么呢?因为你什么都不会,毋容置疑, 这部分人是最能认清自我的,就是无基础,无基础不可怕,可怕的是你学了半天,结果你跟没学 的差不多。还有一部分人如果他们了解 FPGA,也是很容易判断的,但问题是他们并不了解 FPGA, 那么将会是很难判断的。这一部分人就是我学过单片机,或者我学过 ARM,我会 C 语言,但唯 独没学过 FPGA。如果你是属于这一部分的人,那么你要注意了,我们这里建议你把自己当作无 基础,从零开始学习。为什么呢?接下来我们就来详细说明。FPGA 其实是一个披着软件外衣的 硬件,由于硬件描述思想不同于软件编程思想,所以我们要从硬件描述思想的角度去理解代码, 而不能从软件编程思想去理解代码。这里我们以 Verilog 和 C 为例进行说明。我们知道 Verilog 的语法和 C 的语法相似,但是它们的设计思想却是完全不同的。在 C 语言程序中,程序都是顺 序执行的,即便是我们平时说的多任务操作系统,其实也是顺序执行的,所以我们在 C 程序中 的思维是串行的。在 Verilog 语言程序中,我们 Verilog 描述的是电路,只要上电,各部分电路 将同时运行,不会因为在程序中的位置不同而造成执行顺序的不同。所以我们在 Verilog 程序中 是以一种并发的思维去考虑电路功能的。如果你有软件编程基础,那么你在学习 Verilog 的时候 一定要摒弃软件编程的一些固有思维,学会用硬件思维的方式去解决问题,只有这样,我们在学 习 FPGA 的道路上才能走的更远,否则等待你的将会是无止境的黑暗与深渊。 2.2.2 没学好 FPGA 前面我们聊完了没有学过 FPGA 的自我认知,下面我们就来聊一聊没学好 FPGA 的自我认 知。如果你认为自己已经学习过 FPGA,只是没有学好,不需要从零开始学起了,那么你就大错 特错了。在这里,我们通常会把没学好 FGPA 的人分成三个部分,第一个部分就是,你之前已 经学过了 FPGA,但是没有学习过数字电路,这一部分的人我们这里建议大家还是需要从零开始 学起的。第二部分就是,你之前已经学过了 FPGA,同时也学习过数字电路,但是数字电路学习 的太久了,已经连组合逻辑电路和时序逻辑电路都分不清、记不住了,这一部分的人我们这里同 样建议大家还是需要从零开始学起的,我们不能因急于一时,而忘记本质。第三部分就是,你之 前已经学过了 FPGA,同时也学过了数字电路,并且数字电路基础也相当好的,但是你的代码风 格是这种样子的,范例如代码 2.1 所示。 代码 2.1 代码范例 1 always @ (posedge clk or negedge rst) 2 begin 3 if(rst) 4 cnt = 27'h0; 5 else if(cnt == 27'd50000000) 6 cnt = 27'h0; 7 else 8 cnt = cnt + 27'h1; 9 end 你如果觉着这样写代码非常亲切的话,那么这一部分的人很抱歉、也很遗憾,我们这里同样 建议大家还是需要从零开始学起的。为什么呢?这里我们就不再给大家解释了,我相信当你学完 了我们的教程,你就会明白的。 http://www.fpga.gs/ 24 硬件语法篇 §4 在这里,我们希望大家能够保持冷静、敞开心扉的虚心接受我们的建议。我们要时刻记住: 搞技术,要能坐的住冷板凳,也要能坐的住热火炕。很多朋友是一个学生,在学校学习里面都会 有一种心态叫做“突击”,就比如说,一学期不上课,考前突击复习一下就去考试,课程作业用 一两天通宵熬夜做完。这个心态是不适用学习 FPGA 的,有一个一万小时定律,相信大家都知 道,也许有的时候有一些夸张,但是对于学习 FPGA,实话实说这一点都不夸张,对于一项技术, 从你什么都不会,到最后深刻的领会,需要非常长的时间循序渐进的学习。大家今后去公司,也 将会参与一些大规模的项目,这些项目没有一个是可以通过突击一天或二天就能够完成的,一般 都要至少几个星期,几个月才能做完。所以我们建议大家在学习 FPGA 时不要太急,不要一开 始就以百米冲刺的速度跑马拉松,否则,你最后肯定是坚持不下来的。只有一开始给自己定义一 个长远的目标,坚持一个良好的心态和学习方法,你才能在这条道路上走的更远。 通过前面的自我认知,我相信大家对自己有更深的了解,并且也知道了自己处于一个什么样 的学习阶段。也许有的人会认为零基础入门难呀,什么都不会,学的都是全新的知识。这里我们 却不这么认为,我们认为零基础反而更利于学习,为什么这么说呢,这是因为你现在学习到的很 多东西,还不如养成一个良好的习惯重要,你从零开始学习,意味着你将放弃之前的所有坏习惯。 我们知道,养成一个良好的习惯往往需要 21 天,但是养成一个坏习惯,我们想要改掉这个坏习 惯,也许就不仅仅是 21 天的问题了。 言归正传,作为一个零基础的初学者,我们应该如何学习 FPGA 呢,下面我们就开始给大 家进行讲解,一步步带领大家从一个什么都不会的 FPGA 初学者成长到无所不知、无所不能的 一个 FPGA 工程师。 §2.3 学习指导篇 2.3.1 为什么要看学习指导篇? 对于 FPGA 初学者来说,什么是 FPGA?为什么要学习 FPGA?怎么学习 FPGA?这三个 是我们最先会面对的大问题,我们只有搞明白、弄清楚了这三个问题,才能有目的、有计划的去 掌握这门技术,否则,我们学习 FPGA 的愿望只是空中楼阁而已。 2.3.2 学习指导篇有哪些内容? 该篇以什么是 FPGA、为什么要学习 FPGA、怎么学习 FPGA 为主线,详细的讲解了 FPGA 是什么、FPGA 有什么用,FPGA 发展前景,以及 FPGA 职业待遇,并且在该基础上,我们还 进一步详细讲解了如何从一个什么都不会的 FPGA 初学者成长到无所不知、无所不能的一个 FPGA 工程师。 §2.4 数字电路篇 2.4.1 为什么要看数字电路篇? 数字电路是 FPGA 的敲门砖、垫脚石,为什么这样说呢,因为数字电路主要的内容就是组 Zircon Opto-Electronic Technology CO.,Ltd. §4 Verilog 的关键问题解惑 25 合和时序,而组合和时序就是 FPGA 设计的核心。组合无非就是与门、或门、非门……,时序 无非就是锁存器、触发器、寄存器等等,再复杂的设计也就是用这些基本电路搭起来的,那么我 们只有知道了这些基本电路的功能才能搭建出想要的电路。 2.4.2 数字电路篇有哪些内容? 该篇是从数字逻辑最基础的 0 和 1 入手,并以逻辑代数为基础来进一步学习与门、或门、非 门等基本门电路的功能,又以基本的门电路为基础,进一步学习了组合逻辑电路,其中不同的与 或非门组合,可构造出不同的组合逻辑电路,例如编码器、译码器、数据选择器等。接下来在组 合逻辑电路的基础上,我们又进一步了解学习时序逻辑电路,时序逻辑电路不同于组合逻辑电路, 时序逻辑电路能做到组合电路做不到的事情,那就是让电路具有“记忆”功能。如寄存器、计数 器等。最后,我们深入探讨读者最为关心的可编程器件的内部结构和原理,为进一步学习 FPGA 原理打下了基础。 2.4.3 怎么样学习数字电路篇? 首先我们要学习的是《数字电路篇》,当我们以 FPGA 为参考目标的时候,我们会发现数字 电路篇只不过是一个小目标,但是当我们以数字电路篇为目标的时候,我们又会发现数字电路篇 却又是大目标,因此我们不得不将数字电路篇进行分解,我们可以将数字电路篇分解成以下四个 部分:它们分别是数字电路基础、组合逻辑电路、时序逻辑电路以及可编程逻辑器件。 首先我们先来看下第一部分数字逻辑基础,这部分内容概念比较多,我们需要了解数字电路、 数制与编码、逻辑代数等基本概念。在这众多的概念之中,我们应该着重学习与、或、非等门电 路,因为这些基本门电路是我们后面学习组合和时序电路的基础。接下来我们再来看第二部分组 合逻辑电路,这部分内容我们不仅要学习组合逻辑电路的分析与设计方法,还要学习编码器、译 码器、数据选择器、数值比较器以及加法器的工作原理。接下来我们再来看第三部分时序逻辑电 路,时序逻辑电路不同于组合逻辑电路,时序逻辑电路能做到组合电路做不到的事情,那就是让 电路具有“记忆”功能,这部分内容我们不仅要学习锁存器、触发器、寄存器以及计数器的工作 原理,我们还要学习时序电路中的分析与设计方法。接下来就是第四部分内容也是最后一部分内 容,我们不仅需要学习存储器 PROM 的内部结构,还要进一步了解可编程器件的内部结构和原 理,为进一步学习 FPGA 原理打下基础。 §2.5 硬件语法篇 2.5.1 为什么要看硬件语法篇? 大家都知道软件设计使用软件编程语言,例如我们熟知的 C、Java 等等,而 FPGA 设计使 用的是 HDL 语言,例如 VHDL 和 Verilog HDL。说的直白点,FPGA 的设计就是逻辑电路的实 现,就是把我们从数字电路中学到的逻辑电路,使用硬件描述语言(Verilog/VHDL)来描述出来, 这需要设计人员能够用硬件编程思维来编写代码,以及拥有扎实的数字电路功底。 2.5.2 硬件语法篇有哪些内容? http://www.fpga.gs/ 26 硬件语法篇 §4 该篇不仅仅是介绍了 Verilog HDL 基本概念和语法,更着重讲解了 Verilog HDL 的基本设计 思想及优良的代码书写规范和风格。 2.5.3 怎么样学习硬件语法篇? 学习完了《数字电路篇》之后,我们接下来就需要学习《硬件语法篇》,关于硬件语法篇的 学习,我们只需要在《硬件语法篇》中学习 Verilog 的基本概念即可。其余的 Verilog 语法、Verilog 代码规范,以及 Verilog 其他一些技巧,我们这里粗略过一遍,混个面熟就行,即使在这里学了 我们如果没有用到,也只会慢慢地遗忘,那么我们到不如等碰到了之后再去学习,当我们碰到的 次数多了,也就自然而然的记住了,不需要我们刻意的去学它。这里我们就随便列举一个关键字 为例,比如我们在程序中看到一个 input 关键字,当然我们是不知道它在程序中有着什么意思, 我们可以通过程序上下联系和关键字的名字来推测其含义,如果我们比较了解程序所表达的意 思,那么我们是很容易就能推测出 input 关键字的功能,即使我们不了解程序、推测不出来,也 是没有关系的,我们可以通过查找 input 这个关键字来进一步学习了解,这时当我们知道了 input 这个关键字的功能之后,我相信会比你在什么都不知道的情况下,直接记忆这个 input 来的舒服, 记的更牢。 学习 Verilog 的语法并不困难,常用的可综合语法屈指可数(input、output、wire、reg、 assign、always、if、else、case、begin、end),上面的这些关键字都会在我们的例程中反反复 复出现,因此,我们在学习 Verilog 语法的时候并不需要花费太多功夫,只要跟随着我们的例程 一步步走,看懂并学会我们给出的代码例程,那么在语法方面就已经足够了,无论多么牛逼的工 程师,在他的代码里无非也就是上面一些语法而已。这里我们要注意的是,Verilog 是硬件描述 语言,记住,是描述,不是设计,所以在描述之前,你的电路是已经设计好了的,Verilog 仅仅 是用来描述你的设计,所以没有必要死扣语法。 §2.6 软件工具篇 2.6.1 为什么要看软件工具篇? Altera 的 开 发 环 境 为 Quartus II , Xilinx 的 开 发 环 境 为 ISE ( Integrated Software Environment)。由于我们这里选择的是 Altera 的器件,所以开发环境为 Quartus II,Quartus II 开发软件是 Altera 公司为其 FPGA 芯片设计的集成化专用开发工具,是 Altera 最新一代功能更 强的集成 EDA 开发软件,使用 Quartus II 可完成从设计输入,综合适配,仿真验证到下载调试 的整个设计过程。Quartus II 集成了 Modelsim-Altera、SignalTap 工具,可以直接调用来完成 设计任务的仿真及调试。 2.6.2 软件工具篇有哪些内容? 该篇详细介绍了 Quartus II、Modelsim、SignalTap 软件的使用,从第一个新工程建立,管 脚分配,程序下载及工程仿真,工程调试等一系列图文操作手把手带领读者掌握软件的操作,更 进一步铺开来详细讲解软件的操作界面及菜单说明,功能使用。解决读者在学习上遇到的最棘手 的“软”问题,为进一步学习实战篇奠定了基础。 Zircon Opto-Electronic Technology CO.,Ltd. §4 Verilog 的关键问题解惑 27 2.6.3 怎么样学习软件工具篇? 接下来我们学习的是《软件工具篇》,提到软件工具的学习使用,我相信大家最熟悉,只要 大家玩过、用过电脑就一定用过 Word、Excel 和 PPT 这些软件,这些软件刚开始也许用的不 熟,很多功能也不知道在什么地方,不过随着时间的推移,我们用的多了就都会了,根本不需要 专门去报个什么培训班,三天教你学会 Word 什么的。学习 Quartus、Modelsim 和 SignalTap 也是如此,我们只需要粗略的过一遍《软件工具篇》,大致的了解一下这些工具的使用及功能即 可。我们不需要死磕软件里面的每一个功能、每一个选项,我们只要跟随着我们的教程,一步步 进行操作就能学会工具的使用。也许刚开始你还会时不时会忘记软件的操作步骤流程,还要翻开 教程查看,不过我相信几十个工程创建下来,整个软件的操作步骤流程已经是滚瓜乱熟。这里还 有一点需要注意的是,有的读者看到英文的软件界面就不知所措了,马上着手去寻找翻译版的中 文软件。我们在这里建议大家最好还是使用英文版本的,虽然刚开始使用的时候还不习惯,但是 多用几次就会习惯了。此外遗憾的是,即使你想用中文版本的,在网上也是找不到中文版本的软 件。 §2.7 项目实战篇 2.7.1 为什么要看项目实战篇? 前面的篇章多为理论知识,而这一篇是结合开发板实物,从理论上升到实践,将前面的基础 知识运用到实际的工程项目当中。 2.7.2 项目实战篇有哪些内容? 该篇列举三人表决器、数字时钟、多终端点歌系统,以及数字示波器这四个实际的工程项目, 手把手带领大家从分析工程、分解工程、到最终实现工程。通过逐个解决工程中的实际问题,来 学习原汁原味的 FPGA 设计。本篇一改传统教程里逐个讲解外设的方法,巧妙的将所有外设功 能放在实际项目当中讲解,使读者真正意义上做到了现学现用,活学活用。 2.7.3 怎么样学习项目实战篇? 在这之前的学习,我们大都是学习的理论,并没有太多的实际操作,看了这么多的理论知识 的你,现在是不是有点跃跃欲试了呢?接下来我们就可以在《项目实战篇》中大显身手了。我们 打开《项目实战篇》可以发现第一章知识都是我们已经学过的,没错,这里就是为了给大家回顾 一下之前已经学习过的知识。回顾完了以后,我们就可以开始学习我们开发板上的第一个外设 LED 了。大家不要小瞧这个小小 LED,小小 LED 可是有着大用处。关于 LED 的学习,我们这 里就不在给出详细过程了,大家可以参考我们的教程一步步进行学习,在学习 LED 的过程中, 我们不单单是要学习如何控制 LED、理解 LED 的代码,更要学习的是代码风格,代码风格的重 要性怎么强调都不为过,好的代码风格可以极大的避免一些低级错误的出现,提高电路速度,节 省逻辑资源……,这里我们就不在一一列出。学习完了 LED 后,我们可以依次学习按键、数码 管外设,直至最后的三人表决器。当大家理解了三人表决器是如何实现的,那么接下来我们就可 http://www.fpga.gs/ 28 硬件语法篇 §4 以尝试模仿编写代码了,如何模仿?难道要将三人表决器的代码抄写一遍么?当然不是的,我们 可以通过修改工程来进行模仿,比如我们在三人表决器的代码之上进行修改,更改为七人表决器。 当我们对这些提供的代码活学活用、融会贯通的时候,我们就可以使用相同的办法学习数字时钟 工程项目,数字时钟项目与我们的三人表决器项目是有所不同的,我们的三人表决器项目主要是 以组合逻辑电路为基础,而我们的数字时钟项目主要是以时序逻辑电路为基础的,只有当我们掌 握了组合逻辑电路,我们才能够进一步来学习时序逻辑电路,当我们对数字时钟项目中所提供的 代码活学活用、融会贯通的时候,我们就可以学习下一个项目,多终端点歌系统。多终端点歌系 统提供的外设和我们之前的外设的实现方式不一样了,我在学习这些外设的时候,首先要把这种 外设的通信协议弄清楚,然后在进一步学习代码。之前的代码都比较简单,我们比较容易理解, 但是当碰到串口这种模块比较多,代码比较复杂的外设,相信大家看到代码就会感到头疼,因为 Verilog 的设计是不同于软件编程的,软件代码无非就是顺序执行,慢慢一步一步往下走总会弄 明白。Verilog 的代码却大大不同,并行性很强,要是你按照软件的思路来那肯定行不通,这里 我们推荐大家如果碰到有状态机的代码,我们优先搞懂状态机,然后再把外设的各个端口一一进 行分析,等所有信号都分析完以后,我想你就明白了这个外设了,其实想要读懂 Verilog 代码, 关键还是要有耐心。当把代码弄清楚了以后,我们便可以着手进行模仿了,我们可以先做一个规 划,比如说接收怎么写,是不是用状态机?每个状态做什么?数据接收是不是用移位寄存器等等, 等你这些都想好了,画个框图,然后就可以开始动手了。下面的外设我这里就不再给出详细的说 明,大家可以一个一个来,每学习一个外设就仔细的去分析相应器件的数据手册,然后参考我们 设计的实现方式,特别是一些细节,分析完之后我们就可以自己尝试着编写,在自己尝试编写代 码的过程中,我们这里一定要注意不要再去看已经编写的代码,我们应该根据之前分析的数据手 册通信时序来编写代码,看能否实现该外设的功能,如果没有实现,那么就要动手找出为什么没 有实现的原因,做下笔记然后一一解决这些问题,最终直至实现该外设的功能,甚至实现一些我 们代码中没有实现的新功能。代码想要写的好,我们必须要阅读大量的代码,参考别人不同的设 计思想,去模仿去吸收,最后我们便可以化为己用。 当我们有了一定基础的时候,那么剩下的就是要去做,因为我们学习 FPGA 最终的目的就 是利用 FPGA 去解决一个实际项目,也许我们还是一个学生,还没有工作,该怎么去做项目呢, 我们可以尝试去做一个虚拟项目,所谓虚拟项目也就是我们可以通过模仿或者重新设计别人的 项目。除了这个方法以外,我们还可以通过另一种方法,那就是参加 FPGA 的比赛,因为比赛 非常像实际项目,它有一个固定的目标,一群强有力的竞争对手,有限的时间,所以你所需要做 的就是找到一个你感兴趣的比赛,参加它,这会使你学到很多知识。 §2.8 软核演练篇 2.8.1 为什么要看软核演练篇? 当学习完了前面的篇章之后,我们先回想一下,我们能够采用硬件描述语言(Verilog)所能 实现的最复杂功能的逻辑电路是什么?也许你会回答,应该是那个示波器吧,在示波器的代码中, 我们其实只是完成了几个并不复杂的操作,但却动用了上千行的代码与若干个复杂的状态机,去 完成那些简单的循序选择操作。而这些操作仅仅是构成一个我们前面所述的复杂系统的最最基 Zircon Opto-Electronic Technology CO.,Ltd. §4 Verilog 的关键问题解惑 29 本的元素。设想一下:如果单纯采用硬件描述语言去实现类似于计算机系统一样庞大的工程,那 么其想对应的工作量是难以想象的,即使是一个从事 FPGA 行业多年工程师,也会望而生畏。 Qsys 就是为了解决上述问题而诞生的,Qsys 系统集成工具会自动生成互联逻辑,连接知识产 权(IP)功能和子系统,从而显著节省了开发时间,减轻了 FPGA 设计工作量。Qsys 是下一代 SOPC Builder 工具,与 SOPC Builder 相比,Qsys 提高了性能,增强了设计重用功能,更迅速 的进行验证。 2.8.2 软核演练篇有哪些内容? 该篇以什么是软核、什么是 Qsys、如何构建一个 Qsys 系统为切入点,在该基础上,我们 进一步介绍了 Nios II 处理器的体系结构、Qsys 丰富多彩的内置 IP,以及 Avalon 总线接口规范, 然后我们又以 Avalon 总线接口规范为基础,进一步定制了开发板所有外设的 IP 核。最后,我们 又以系统 uC/OS-II 和 uCGUI 为例进行了应用开发的介绍。本篇不同于传统的傻瓜式教程,将 理论和实践相结合,不仅仅讲述了怎样做,更进一步讲述了为什么要这样做。 2.8.3 怎么样学习软核演练篇? 接下来我们学习的是《软核演练篇》,相对于之前的篇章,学习《软核演练篇》需要掌握更 多的基础知识,它不仅需要掌握之前篇章中的知识,它还需要掌握 C 语言,以及微机原理与接 口技术方面的知识。如果你之前学过单片机或者 ARM,那么恭喜你,你之前所学的知识将会在 该篇的学习中全部用上。如果你没有学过,也不要气馁,这里我们推荐大家学习《C 语言程序设 计现代方法》第二版,K. N. King 著,这本书是业内公认的好书。关于 C 语言的学习,我们在这 里就不在进一步讲解了。下面我们着重讲解如何学习《软核演练篇》。 在学习《软核演练篇》之前,我们首先要了解一下什么是软核、什么又是 Qsys,当我们了 解了之后,我们才能进一步构建一个 Qsys 系统。关于 Qsys 系统的建立,我们这里就不在说明, 大家可以参考我们的教程一步步进行学习。建立好了 Qsys 系统,我们便可以在该系统上利用 C 语言进行软件开发。如果你仅仅是想简简单单的把 Qsys 用起来,那么到这里可以说已经足够了, 在今后的使用当中我们只需要根据不同的硬件来添加不同的 IP 核就可以了。这种使用方式就是 把 FPGA 当作单片机来使用,在这里我们建议大家还不如直接买一个单片机来得爽快。如果你 想真正的学习 Qsys,想学习 Qsys 的精髓,而不仅仅是将 FPGA 当作单片机来玩,那么你就需 要进一步了解 Qsys 系统的工作原理,以及 Avalon 总线标准。当我们理解了 Avalon 总线标准 之后,我们就可以进一步学习我们已经编写好的外设 IP 核代码,在学习代码的过程中,我们可 以尝试进行模仿,直到我们可以利用之前所学的 Verilog 描述语言,设计出自己的专属外设 IP 核。最后,我们在将 IP 核与 uC/OS-II 系统,以及 uCGUI 相结合设计出我们的开机测试系统。 §2.9 时序分析篇 2.9.1 为什么要看时序分析篇? 对于初学者来说,我们对功能的需求要大于性能、面积、功耗方面的需求,但是当我们在设 计高速电路的时候,那么我们就要就不能只考虑功能了,我们要从多个方面去考虑电路的设计。 http://www.fpga.gs/ 30 硬件语法篇 §4 工作频率是数字电路中重要的性能指标,如何判断系统是否能在预定频率下工作,最高能在什么 频率下工作,正是时序分析要解决的问题。 2.9.2 时序分析篇有哪些内容? 该篇正在加班加点制作中。 §2.10 学习FPGA为什么需要开发板? 学习 FPGA 不同于学习单片机、ARM 等,我们这里以单片机为例,我们只需要在网上下载 个软件,随便搭个电路写个代码然后通过仿真我们就可以看到,如图 2.1 所示。 图 2.1 单片机仿真软件图 通过仿真图我们可以看出,学习单片机真是方便快捷。也许你会说,FPGA 也有仿真软件, 是的,没有错,FPGA 是有仿真软件,我们这里比较常用的仿真软件是 Modelsim,那么接下来 我们给出 FPGA 的仿真界面图,如图 2.2 所示。 图 2.2 FPGA 仿真软件图 Zircon Opto-Electronic Technology CO.,Ltd. §4 Verilog 的关键问题解惑 31 通过仿真图我们可以看出,这是没办法和单片机仿真软件相比较的,你从这个仿真波形中是 没有办法直观了解到该电路最后要实现一个什么样的功能。这里还要注意的是,仿真软件仿真的 波形和真实的电路是有区别的,也许你在做仿真时感觉程序运行正常,但是当你下载到开发板上 运行时程序就会出现问题。所以说实践才是检验真理的唯一标准。即使这种情况你也可以接受, 那么下面这一种情况是你没办法接受的。SignalTap II 全称(SignalTap II Logic Analyzer)是第 二代系统级调试工具,可以捕获和显示实时信号,观察在系统设计中的硬件和软件之间的互相作 用。这里我们注意实时二字,如果没有开发板是根本不能用、不能学习的。总而言之,学习 FPGA 需要一个开发板。那么问题来了,如何选择一块好的开发板呢,下面我们就给大家简单的介绍一 下我们的锆石 A4 开发板,如图 2.3 所示。 图 2.3 锆石 A4 开发板的外观图 锆石 A4 开发板的参数如下所示。 http://www.fpga.gs/ 32 硬件语法篇 §4 Zircon Opto-Electronic Technology CO.,Ltd. 版权声明 (1) 南京锆石光电科技有限公司对其发行的或与合作公司共同发行的包括但不限于产品或 服务的全部内容拥有版权等知识产权,受法律保护。 (2) 所有产品及资料内容仅供用户学习使用。 (3) 未经本公司书面许可,任何单位及个人不得以任何方式或理由对上述产品、服务、信息、 材料的任何部分进行复制、修改、抄录或与其它产品捆绑使用、销售。 (4) 凡侵犯本公司版权等知识产权的,本公司必依法追究其法律责任。 声明单位:南京锆石光电科技有限公司

Top_arrow
回到顶部
EEWORLD下载中心所有资源均来自网友分享,如有侵权,请发送举报邮件到客服邮箱bbs_service@eeworld.com.cn 或通过站内短信息或QQ:273568022联系管理员 高进,我们会尽快处理。