差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录 前一修订版 后一修订版 | 前一修订版 | ||
what_is_fpga [2021/08/16 01:34] gongyu |
what_is_fpga [2021/09/13 22:54] (当前版本) gongyu |
||
---|---|---|---|
行 1: | 行 1: | ||
+ | ## FPGA是什么? | ||
[[FPGA]]是一种可编程的数字逻辑芯片,我们可以通过对其编程实现几乎任何的数字功能。可以说在数字世界里它无所不能,就像乐高的积木一样可以搭建各种不同的功能模块,实现你所希望的各种功能,当然,首先你必须掌握最基本的数字逻辑知识,学会一种用来构建各种功能的工具语言(在这里我们推荐广受欢迎的[[Verilog]]),再次你要动脑(考验的是你的逻辑思维是否清晰),一个优秀的建筑师的作品是在脑子里勾画出来的,而不是拿积木碰运气拼凑出来的。 | [[FPGA]]是一种可编程的数字逻辑芯片,我们可以通过对其编程实现几乎任何的数字功能。可以说在数字世界里它无所不能,就像乐高的积木一样可以搭建各种不同的功能模块,实现你所希望的各种功能,当然,首先你必须掌握最基本的数字逻辑知识,学会一种用来构建各种功能的工具语言(在这里我们推荐广受欢迎的[[Verilog]]),再次你要动脑(考验的是你的逻辑思维是否清晰),一个优秀的建筑师的作品是在脑子里勾画出来的,而不是拿积木碰运气拼凑出来的。 | ||
{{ :altera-fpgas.jpg |}} | {{ :altera-fpgas.jpg |}} | ||
- | 用FPGA做设计的一般工作流程: | + | ### 1. 简介 |
- | - 在电脑上通过绘制电路图或者文本文件描述的方式来描述一个你想要实现的“数字功能” | + | FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 |
- | - 在电脑上使用FPGA厂商提供的软件来编译你描述的“逻辑功能”,生成一个可以下载到FPGA内的二进制文件 | + | |
- | - 将你的电脑连接FPGA,将上述生成的二进制文件下载到FPGA中去 | + | |
- | - 你的FPGA就会执行你设想的“逻辑功能” | + | |
- | 记住这些: | + | #### 1.1 背景 |
- | * 你可以任意多次地下载配制FPGA,没有次数限制,每次可以是不同的功能。如果在你的设计中出现了错误,只要修复你的”逻辑功能“,再重新编译,再重现下载就可以。不需要重新设计PCB,不需要重新焊接或更换元器件。 | + | 以硬件描述语言([[Verilog]]或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至[[FPGA]]上进行测试,是现代IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的[[FPGA]]里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其它更加完整的记忆块。 |
- | * 所有的逻辑都是运行在FPGA内部,也就是硅片上,因此相对于用分立元器件搭建的电路板而言,在FPGA上你的设计会运行的更快 | + | |
- | * 每次断电FPGA就会失去其功能,必须在下一次加电的时候重新下载代码才能让FPGA重新工作 | + | 系统设计师可以根据需要通过可编辑的连接把FPGA内部的逻辑块连接起来,就好像一个电路试验板被放在了一个芯片里。一个出厂后的成品FPGA的逻辑块和连接可以按照设计者而改变,所以FPGA可以完成所需要的逻辑功能。 |
+ | |||
+ | FPGA一般来说比[[ASIC]](专用集成电路)的速度要慢,实现同样的功能比ASIC电路面积要大。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。 | ||
+ | |||
+ | FPGA的开发相对于传统PC、单片机的开发有很大不同。FPGA以并行运算为主,以硬件描述语言来实现;相比于PC或单片机(无论是冯诺依曼结构还是哈佛结构)的顺序操作有很大区别,也造成了FPGA开发入门较难。FPGA开发需要从顶层设计、模块分层、逻辑实现、软硬件调试等多方面着手。 | ||
+ | |||
+ | #### 1.2 发展历程 | ||
+ | 1985年,当全球首款FPGA产品——XC2064诞生, 它采用2μm工艺,包含64个逻辑模块和85000个晶体管,门数量不超过1000个。最初,FPGA只是用于胶合逻辑(Glue Logic),从胶合逻辑到算法逻辑再到数字信号处理、高速串行收发器和嵌入式处理器,FPGA真正地从配角变成了主角。22年后的2007年,FPGA业界双雄Xilinx和Altera公司纷纷推出了采用最新65nm工艺的FPGA产品,其门数量已经达到千万级,晶体管个数更是超过10亿个。一路走来,FPGA在不断地紧跟并推动着半导体工艺的进步——2001年采用150nm工艺、2002年采用130nm工艺,2003年采用90nm工艺,2006年采用65nm工艺。 | ||
+ | |||
+ | 在上世纪80年代中期,可编程器件从任何意义上来讲都不是当时的主流,虽然其并不是一个新的概念。可编程逻辑阵列(PLA)在1970年左右就出现了,但是一直被认为速度慢,难以使用。1980年之后,可配置可编程逻辑阵列(PLA)开始出现,可以使用原始的软件工具提供有限的触发器和查找表实现能力。PAL被视为小规模/中等规模集成胶合逻辑的替代选择被逐步接受,但是当时可编程能力对于大多数人来说仍然是陌生和具有风险的。20世纪80年代在“megaPAL”方面的尝试使这一情况更加严重,因为“megaPAL”在功耗和工艺扩展方面有严重的缺陷,限制了它的广泛应用。 | ||
+ | |||
+ | 当1991年Xilinx公司推出其第三代FPGA产品——XC4000系列时,人们开始认真考虑可编程技术了。XC4003包含44万个晶体管,采用0.7μm工艺,FPGA开始被制造商认为是可以用于制造工艺开发测试过程的良好工具。事实证明,FPGA可为制造工业提供优异的测试能力,FPGA开始用来代替原先存储器所扮演的用来验证每一代新工艺的角色。也许从那时起,向最新制程半导体工艺的转变就已经不可阻挡了。最新工艺的采用为FPGA产业的发展提供了机遇。 | ||
+ | |||
+ | Actel公司相信,Flash将继续成为FPGA产业中重要的一个增长领域。Flash技术有其独特之处,能将非易失性和可重编程性集于单芯片解决方案中,因此能提供高成本效益,而且处于有利的位置以抢占庞大的市场份额。Actel以Flash技术为基础的低功耗IGLOO系列、低成本的ProASIC3系列和混合信号Fusion FPGA将因具备Flash的固有优势而继续引起全球广泛的兴趣和注意。 | ||
+ | |||
+ | FPGA及PLD产业发展的最大机遇是替代ASIC和专用标准产品(ASSP),主要由[[ASIC]]和[[ASSP]]构成的数字逻辑市场规模大约为350亿美元。由于用户可以迅速对PLD进行编程,按照需求实现特殊功能,与ASIC和ASSP相比,PLD在灵活性、开发成本以及产品及时面市方面更具优势。然而,PLD通常比这些替代方案有更高的成本结构。因此,PLD更适合对产品及时面市有较大需求的应用,以及产量较低的最终应用。PLD技术和半导体制造技术的进步,从总体上缩小了PLD和固定芯片方案的相对成本差,FPGA和PLD供应商的关键目标不是简单地增加更多的原型客户,而是向大批量应用最终市场和客户渗透。”John Daane为FPGA产业指明了方向。 | ||
+ | |||
+ | #### 1.3 主要厂商 | ||
- | === 都有哪些FPGA厂商? === | ||
{{ :altera_logo.jpg?100|}} | {{ :altera_logo.jpg?100|}} | ||
* [[http://www.altera.com|Altera]]是专注于可编程逻辑器件(PLDs)、重配置复杂数字电路的美国公司。该公司于1984年发布器第一款PLD,目前已经是全球最大的PLD供应商,第二大的FPGA供应商,其主要产品线为高端的Stratix,中端Arria以及低端的Cyclone系列FPGA以及MAX系列的CPLDs,其设计软件为Quartus II以及Enpirion 系列的PowerSoC DC-DC电源方案. 2015年12月8日Altera以167亿美元卖给Intel,正式已经成为Intel的一个产品部门 - PSG(可编程系统部)。[[https://en.wikipedia.org/wiki/Altera|更多最新信息参见Wikipedia关于Altera的介绍]]。 | * [[http://www.altera.com|Altera]]是专注于可编程逻辑器件(PLDs)、重配置复杂数字电路的美国公司。该公司于1984年发布器第一款PLD,目前已经是全球最大的PLD供应商,第二大的FPGA供应商,其主要产品线为高端的Stratix,中端Arria以及低端的Cyclone系列FPGA以及MAX系列的CPLDs,其设计软件为Quartus II以及Enpirion 系列的PowerSoC DC-DC电源方案. 2015年12月8日Altera以167亿美元卖给Intel,正式已经成为Intel的一个产品部门 - PSG(可编程系统部)。[[https://en.wikipedia.org/wiki/Altera|更多最新信息参见Wikipedia关于Altera的介绍]]。 | ||
{{ :xlnxlogo.jpg?100|}} | {{ :xlnxlogo.jpg?100|}} | ||
- | * [[http://www.xilinx.com|Xilinx]]是专注于可编程逻辑器件的美国公司,FPGA的发明者也是全球第一个采用Fabless生产模式的半导体公司。Xilinx成立于1984年,总部位于美国加州的San Jose。其主要产品线为高端的Virtex, 中端的Kintex,低端的Artix以及Spartan系列,其设计软件包括[[Xilinx ISE]]和[[Vivado Design Suite]], [[https://en.wikipedia.org/wiki/Xilinx|更多最新信息参见Wikipedia关于Xilinx公司的介绍]]。 | + | * [[http://www.xilinx.com|Xilinx]]是专注于可编程逻辑器件的美国公司,FPGA的发明者也是全球第一个采用Fabless生产模式的半导体公司。Xilinx成立于1984年,总部位于美国加州的San Jose。其主要产品线为高端的Virtex, 中端的Kintex,低端的Artix以及Spartan系列,其设计软件包括[[Xilinx ISE]]和[[Vivado Design Suite]], 该公司也即将成为AMD公司的一部分[[https://en.wikipedia.org/wiki/Xilinx|更多最新信息参见Wikipedia关于Xilinx公司的介绍]]。 |
{{ :lattice_semi_logo.png?100|}} | {{ :lattice_semi_logo.png?100|}} | ||
- | * [[http://www.latticesemi.com|Lattice Semi]]是一家高性能可编程逻辑器件(FPGAs,CPLD,一季SPLDs)的美国公司,成立于1983年,在全球有大约700名员工,为全球第三的FPGA供应商,全球第二的CPLDs & SPLDs。其主要产品线为高端的ECP系列,中端的MACH系列以及低端的ICE系列,其设计软件为[[http://www.latticesemi.com/Products/DesignSoftwareAndIP/FPGAandLDS/LatticeDiamond.aspx|Lattice Diamond]]。更多最新信息参见[[https://en.wikipedia.org/wiki/Lattice_Semiconductor|Wikipedia关于Lattice Semiconductor公司的介绍]]。 | + | * [[http://www.latticesemi.com|Lattice Semi]]是一家高性能可编程逻辑器件(FPGAs,CPLD,一季SPLDs)的美国公司,成立于1983年,在全球有大约700名员工,为全球第三的FPGA供应商,全球第二的CPLDs & SPLDs。其主要产品线为高端的ECP系列,中端的MACH系列以及低端的ICE系列,其设计软件为[[Diamond]]和Radiant。更多最新信息参见[[https://en.wikipedia.org/wiki/Lattice_Semiconductor|Wikipedia关于Lattice Semiconductor公司的介绍]]。 |
{{ :cypress_logo.png?100|}} | {{ :cypress_logo.png?100|}} | ||
* [[http://www.cypress.com|Cypress]]是美国一家在嵌入式系统领域(汽车电子、工业控制、网络平台到高交互消费、移动设备)专注于高性能、高质量解决方案的设计和生产企业。它提供比较宽泛但差异化的产品线,比如NOR Flash存储器、F-RAM™以及SRAM, Traveo™ 微控制器, 业界独特的PSoC® 可编程片上系统, 模拟和PMIC电源管理集成电路, CapSense® 电容触摸感知控制器,以及无线低功耗蓝牙BLE 和USB连接方案。更多最新信息参见[[https://en.wikipedia.org/wiki/Cypress_Semiconductor|Wikipedia关于Cypress Semiconductor公司的介绍]]。 | * [[http://www.cypress.com|Cypress]]是美国一家在嵌入式系统领域(汽车电子、工业控制、网络平台到高交互消费、移动设备)专注于高性能、高质量解决方案的设计和生产企业。它提供比较宽泛但差异化的产品线,比如NOR Flash存储器、F-RAM™以及SRAM, Traveo™ 微控制器, 业界独特的PSoC® 可编程片上系统, 模拟和PMIC电源管理集成电路, CapSense® 电容触摸感知控制器,以及无线低功耗蓝牙BLE 和USB连接方案。更多最新信息参见[[https://en.wikipedia.org/wiki/Cypress_Semiconductor|Wikipedia关于Cypress Semiconductor公司的介绍]]。 | ||
{{ :actel_logo.png?100|}} | {{ :actel_logo.png?100|}} | ||
- | * [[http://www.microsemi.com|Actel]]已经被Microsemi收购,主要产品为非易失, 低功耗的FPGA,混合信号FPGA以及可编程逻辑方案。其产品线有反熔丝结构的FPGA和基于Flash的FPGA两种,主要用于高可靠性的领域,比如航空航天。更多最新信息参见[[https://en.wikipedia.org/wiki/Actel|Wikipedia关于Actel公司的介绍]]。 | + | * [[http://www.microsemi.com|Actel]]已经被Microsemi收购,主要产品为非易失, 低功耗的FPGA,混合信号FPGA以及可编程逻辑方案。其产品线有反熔丝结构的FPGA和基于Flash的FPGA两种,开发平台是Libero, 主要用于高可靠性的领域,比如航空航天。MicroSemi也已经被MicroChip收购。更多最新信息参见[[https://en.wikipedia.org/wiki/Actel|Wikipedia关于Actel公司的介绍]]。 |
- | FPGA和CPLD | ||
- | FPGA和CPLD是一回事么?不是的。 | ||
- | Both are programmable digital logic chips and are made by the same companies. But they have different characteristics. | ||
- | * FPGAs are "fine-grain" devices - that means that they contain a lot (up to 100000) of tiny blocks of logic with flip-flops. CPLDs are "coarse-grain" devices - they contain relatively few (a few 100's max) large blocks of logic with flip-flops. | ||
- | * FPGAs are RAM based - they need to be "downloaded" (configured) at each power-up. CPLDs are EEPROM based - they are active at power-up (i.e. as long as they've been programmed at least once...). | ||
- | * FPGAs have special routing resources to implement efficiently arithmetic functions (binary counters, adders, comparators...). CPLDs do not. | ||
- | In general, FPGAs can contain large digital designs, while CPLDs can contain small designs only. | ||
- | FPGA和微控制器: | + | ### 2. FPGA、CPLD、MCU的比较 |
- | Are FPGAs and microcontrollers the same thing? No | + | |
- | * FPGAs implement programmable logic elements running in a parallel fashion. | + | |
- | * Microcontrollers are based on a CPU architecture (executes a set of instructions in a sequential manner). | + | |
- | Microcontrollers have on-chip peripherals that also execute in parallel with their CPU. But they are still much less configurable than FPGAs. | + | |
+ | #### 2.1 FPGA和CPLD的区别 | ||
+ | FPGA和CPLD是一回事么?不是的,它们都是可编程的数字逻辑芯片,但有着不同的特性。 | ||
+ | 早在1980年代中期,FPGA已经在PLD设备中扎根。[[CPLD]]和FPGA包括了一些相对大数量的可编辑逻辑单元。CPLD逻辑门的密度在几千到几万个逻辑单元之间,而FPGA通常是在几万到几百万。 | ||
+ | * CPLD和FPGA的主要区别是他们的系统结构。CPLD是一个有点限制性的结构。这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器组成。这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。而FPGA却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。 | ||
+ | * CPLD和FPGA另外一个区别是大多数的FPGA含有高层次的内置模块(比如加法器和乘法器)和内置的存储器。因此很多新的FPGA支持完全或者部分的系统内重新配置。允许他们的设计随着系统升级或者动态重新配置而改变。一些FPGA可以让设备的一部分重新编辑而其他部分继续正常运行。 | ||
+ | * CPLD和FPGA还有一个区别:CPLD下电之后,原有烧入的逻辑结构不会消失;而FPGA下电之后,再次上电时,需要重新加载FLASH里面的逻辑代码,需要一定的加载时间。 | ||
+ | * FPGA是细颗粒的器件,意味着它们由非常多(高达10万以上)的微小的由触发器构成的逻辑功能块组成,而CPLD则是粗颗粒的器件,它们由相对较少的(最多几百个)但比较大的由触发器构成的逻辑块组成 | ||
+ | * FPGA是基于RAM的,每次上电的时候需要重新下载配置,而CPLD是基于EEPROM的,上电的时候就开始工作; | ||
+ | * FPGA有特殊的布线资源已实现有效的运算功能(二进制计数器、加法器、比较器等),CPLD则没有; | ||
+ | |||
+ | 总之,FPGA包含比较大的数字设计,CPLD值包含小的设计 | ||
- | 在进入正式的学习之前,先给大家提供两本基础的英文书,同学们可以下载了进行阅读(在无法上网和流量将用尽的时候最好、最让自己不内疚的消遣方式) | + | #### 2.2 FPGA和微控制器的区别 |
- | {{ :fpga_for_dummies.jpg?100|}} {{ :introduction_to_digital_design_top_600_35755.1448322782.1280.1280.png?150|}} | + | FPGA和微控制器是一回事么?不! |
- | * 傻瓜都能掌握的FPGA知识: {{:fpgasfordummiesebook.pdf|FPGA for Dummies}} | + | * FPGAs实现的可编程逻辑单元能够并行执行; |
- | * 美国大学的数字电路/Verilog教程(基于Digilent的板卡,使用的是Xilinx的芯片){{:intro_to_digital_design-digilent-verilog_online.pdf|Introduction to Digital Design Using Digilent FPGA Boards}} | + | * 微控制器是基于CPU架构的,以串行的方式执行指令,虽然其片上的外设能够与它们的CPU并行操作,但它们相比起FPGA可编程性更弱。 |
- | + | ||
- | 同时建议大家能够大量阅读[[https://en.wikipedia.org/wiki/Field-programmable_gate_array|维基百科]]上面关于FPGA的词条信息,访问维基百科不需要翻墙,但同学们一定要阅读英文的资料,而不是中文的。 | + | |
- | + | ||
- | 来,正式开始宏大的FPGA学习历程。。。 | + | |
- | + | ||
- | ---- | + | |
- | ====1 数字逻辑、可编程逻辑及FPGA==== | + | |
- | FPGA(Field Programmable Gate Array)译作中文为:现场可编程门阵列,也就是设计者可以在现场对可定制的数字逻辑进行编程的集成电路,相比于其它的硬件构成,它允许你构建你所需要的硬件而不需要[[ASIC]](专用集成电路),而且比采用微处理器内核更简单、快速、省电。 | + | |
- | + | ||
- | 关于FPGA的大概介绍,参考我们的培训文档:{{:ecbc可编程逻辑基础.pdf|ECBC可编程逻辑基础PPT}} | + | |
- | ===1.1 为什么用FPGA?=== | + | ### 3. 为什么用FPGA? |
FPGA的技术优势:灵活的开发周期、更低的设计迭代成本、更低的一次性工程费用(NRE),易于评估和实现的可选设计架构,新产品上市时间快。 | FPGA的技术优势:灵活的开发周期、更低的设计迭代成本、更低的一次性工程费用(NRE),易于评估和实现的可选设计架构,新产品上市时间快。 | ||
相比于[[ASIC]]和[[MCU]]来讲,FPGA具有以下优势: | 相比于[[ASIC]]和[[MCU]]来讲,FPGA具有以下优势: | ||
行 63: | 行 67: | ||
- 集成度高,可以通过选用不同规模的器件实现自己所需要的功能,内部功能模块之间的通信和接口的速度、性能都会较多个分立的芯片之间互连有明显的改善,节省板卡空间,便于调试 | - 集成度高,可以通过选用不同规模的器件实现自己所需要的功能,内部功能模块之间的通信和接口的速度、性能都会较多个分立的芯片之间互连有明显的改善,节省板卡空间,便于调试 | ||
- | ===1.2 FPGA设计需要的技能=== | + | ### 4. 参考读物 |
- | FPGA在各个领域都是必不可少的一种硬件工具,掌握并有效使用FPGA对当代的电子设计工程师来讲是非常必要的,要做到较好的FPGA设计需要具备如下的一些技能: | + | {{ :fpga_for_dummies.jpg?100|}} {{ :introduction_to_digital_design_top_600_35755.1448322782.1280.1280.png?150|}} |
- | + | * 傻瓜都能掌握的FPGA知识: {{:fpgasfordummiesebook.pdf|FPGA for Dummies}} | |
- | ==1.2.1 具备自己设计高速数字电路板(PCB)的能力并且掌握[[DSP]]的基础理论== | + | * 美国大学的数字电路/Verilog教程(基于Digilent的板卡,使用的是Xilinx的芯片){{:intro_to_digital_design-digilent-verilog_online.pdf|Introduction to Digital Design Using Digilent FPGA Boards}} |
- | * [[PCB]]硬件与接口设计 | + | * {{:ecbc可编程逻辑基础.pdf|ECBC可编程逻辑基础PPT}} |
- | * 逻辑电路设计 | + | |
- | * 硬件仿真 | + | |
- | * 硬件模块调试 | + | |
- | * PCB设计布局 | + | |
- | * 信号完整性及终端匹配 | + | |
- | * DSP算法的硬件实现 | + | |
- | * 功耗与去藕设计 | + | |
- | * 板级引脚分配 | + | |
- | * I/O特性的定义 | + | |
- | * 设计优化权衡 | + | |
- | * FPGA器件和封装选择 | + | |
- | + | ||
- | ==1.2.2 还要掌握至少一门硬件描述语言(HDL)== | + | |
- | * HDL语言的设计输入 | + | |
- | * 测试平台的开发 | + | |
- | * 设计约束 | + | |
- | * 脚本实现自动化处理 | + | |
- | * HDL流程文件的配置管理 | + | |
- | * 支持设计复用 | + | |
- | + | ||
- | ==1.2.3 从系统高度设计你的系统 == | + | |
- | * 处理器需求分析 | + | |
- | * 处理器架构选择 | + | |
- | * 系统级设计的层次结构定义 | + | |
- | * 系统模块的集成与接口测试 | + | |
- | * 数据流的定义 | + | |
- | * 硬件/软件实现的权衡 | + | |
- | * 功能划分和模块化设计 | + | |
- | * 系统级测试、调试和验证 | + | |
- | + | ||
- | ==1.2.4 具体实现 - 通过软件/DSP设计== | + | |
- | * 处理器代码模块的定义 | + | |
- | * DSP算法的软件实现 | + | |
- | * 在处理器上运行操作系统 | + | |
- | * 代码的编写和测试 | + | |
- | * 常规的代码调试和验证 | + | |
- | * 代码的配置管理 | + | |
- | + | ||
- | ===1.3 PLD/FPGA的结构=== | + | |
- | ==1.3.1 FPGA基本功能== | + | |
- | {{ :fpga_structure.gif |}}<WRAP centeralign> FPGA结构 </WRAP> | + | |
- | 组成数字电路的三个基本部分为:门、寄存器以及将这些门(Gate)、寄存器(Register)连接起来的连线(Wire)。 | + | |
- | {{ :fpga_cell_example.png |}} | + | |
- | <WRAP centeralign> FPGA逻辑单元构成举例 </WRAP> | + | |
- | + | ||
- | ==1.3.2 FPGA增强功能== | + | |
- | - 内置处理器:软核 & 硬核 & [[DSP]] | + | |
- | - 时钟及管理:[[PLL]]、[[DLL]]、驱动/分配 | + | |
- | - IO:多种高速收发、DDR存储器访问、可编程数控阻抗 | + | |
- | - 嵌入MAC单元 - 高效浮点运算 | + | |
- | - 各种内置存储器:[[双口RAM]]、[[FIFO]] | + | |
- | - 各种常用接口:[[I2C]]、[[SPI]]等 | + | |
- | - 系统监控:内置ADCs | + | |
- | + | ||
- | + | ||
- | + | ||
- | ===1.5 FPGA的选型决策原则=== | + | |
- | - 功能/资源:逻辑单元、存储器、处理能力、IO、处理器内核、DSP | + | |
- | - 封装:满足管脚数量以及板卡的物理尺寸要求 | + | |
- | - 功耗:满足系统对供电的限制需求 | + | |
- | - 开发工具/难度:影响设计难度和开发时间,尽可能选择易于开发、调试的器件架构 | + | |
- | - 系统成本:包括配置RAM、外供电源、时钟等,除了器件成本之外还要考虑实现成本、支持成本等。 | + | |
- | - 购买难度:价钱/数量/供货渠道 | + | |
- | - 灵活性:便于将来的产品修改和升级 | + | |
- | - 技术支持:供应商是否能够提供良好的技术支持,乃至培训 | + | |
- | + | ||
- | ===1.6 设计流程及工具=== | + | |
- | 当前FPGA的设计最常用的都是通过硬件描述语言(HDL),主要有两种 - [[Verilog]] HDL或VHDL语言。 | + | |
- | + | ||
- | ===1.7 FPGA应用中的注意事项=== | + | |
- | ==1.7.1 硬件设计== | + | |
- | - 管脚分配:输入/输出类型,预留功能管脚,方便布线 | + | |
- | - [[时钟]]:全局时钟 vs 局部时钟,[[PLL]] vs [[DLL]],是否驱动 | + | |
- | - 电源:内核电压/接口电压及其相应电流,上电时序 | + | |
- | - 编程:[[JTAG]]、配置、在线更新 | + | |
- | - 测试点:关键信号 - 时钟、电源、关键IO | + | |
- | + | ||
- | ==1.7.2 代码开发== | + | |
- | - 善用IP Core:调用原厂提供的经过验证过的IP内核 | + | |
- | - 硬件设计概念:并行工作、时延 | + | |
- | - 充分仿真:功能仿真、时序仿真、TestBench | + | |
- | - 调试:使用原厂提供的片上逻辑分析工具 | + | |
- | + | ||
- | ===1.8 FPGA学习和使用要借助的资源=== | + | |
- | * 工具:开发板、评估板、调试工具、编译/仿真软件 | + | |
- | * IP Cores:原厂/官方提供、开源组织、其他人验证 | + | |
- | * 参考设计: 设计指南、系统应用、视频教程 | + | |
- | * 技术支持:原厂的FAE、第三方设计公司、社区/论坛/QQ群 | + | |
- | + | ||
- | ===1.9 IP Cores的有效使用=== | + | |
- | {{ :opencores_logo.png?300|}} | + | |
- | 随着电子系统越来越复杂,我们不可能任何一个设计都从头自己写代码,必须学会站在巨人的肩上,充分利用现有的资源,尽快地完成自己的设计。经过几十年可编程逻辑技术的发展,可以说几乎所有的常见功能都能够找到可以参考甚至可以直接调用的IP内核,获取这些IP、能够争取地使用这些IP就是一种非常重要的能力。到哪里去找到可靠使用的内核呢?推荐如下几个途径: | + | |
- | * 来自原厂的IP内核:一般已经包含在其编译系统中,其官方网站上也会有很详细的文档介绍,关于该IP内核的功能、结构调用、所支持的器件、所占的系统资源等。 | + | |
- | * 国际知名开源网站上的IP核:比如www.opencores.org,这个网站几乎在全球的FPGA开发者中间家喻户晓,几乎任何重要的逻辑功能模块都能够在这个网站上找到相应的参考。那些经过WBC认证的代码质量会比较高,不过由于每个人的设计场景会稍微不同,直接调用这些IP Cores未必合适,能够参考这些IP核的设计思路也是对自己的设计非常有益的。 | + | |
- | {{ :opencores.png?600 |}} | + | |
- | * 我们StepFPGA将来也会围绕我们的小脚丫FPGA平台将用户构建的各种优秀功能模块经验证、审核以后发布出来,也希望通过这么一个开源的平台帮助大家的学习和设计。也希望更多的设计者能够将自己的设计贡献、分享出来。 | + | |
- | + | ||
- | ## 2 Lattice Semiconductor的MachXO2系列FPGA | + | |
- | {{ :machxo2-bga-chip_two-sided.png?200|}} | + | |
- | 在我们的学习系统中我们选用了[[Lattice Semiconductor]]公司的[[http://www.latticesemi.com/en/Products/FPGAandCPLD/MachXO2.aspx|MachXO2]]系列[[FPGA]],主要出于以下几方面的考虑: | + | |
- | * Lattice Semiconductor公司的[[FPGA]]学习和使用门槛最低,易学易用 | + | |
- | * 性价比高,除了适合入门级的学习之用,还能够满足80%以上的企业应用 | + | |
- | * 非常适合于高校教学实验及创新实践 | + | |
- | + | ||
- | 本节我们来看看我们选用的这个系列的FPGA有哪些特点以及应用领域。 | + | |
- | + | ||
- | ===2.1 特性=== | + | |
- | * 灵活的逻辑架构,256-6864个查找表(LUTs),18-334个输入输出管脚(PIOs) | + | |
- | * 超低功耗 - 采用先进的65nm低功耗工艺,等待状态时功耗低至22μW,具有可编程、低摆动的差分I/O | + | |
- | * 最高达256Kbits的用户Flash存储器及最高达240Kbits sysMEM™ 内嵌块[[RAM]],高达54Kbits的分布式RAM,有专用的[[FIFO]]控制逻辑 | + | |
- | * 最高达334个hot-socketable输入/输出管脚避免额外的泄漏 | + | |
- | * 可以通过[[JTAG]], [[SPI]], [[I2C]]或Wishbone总线进行编程 | + | |
- | * TransFR特性允许在现场设计更新而不干扰设备的运行 | + | |
- | * 可编程sysIO™ 支持[[LVCMOS]], [[LVTTL]], [[PCI]], [[LVDS]], [[BLVDS]], [[MLVDS]], [[RSDS]], [[LVPECL]], [[SSTL]], [[HSTL]]以及更多中接口,可编程上拉、下拉模式 | + | |
- | * 灵活的片上时钟处理 - 8个主时钟输入管脚、支持高速I/O的双沿时钟、每个器件内有2个模拟[[PLL]]、外部时钟输入时频率范围从7MHz到400MHz | + | |
- | * 芯片内硬化了[[SPI]]、[[I2C]]以及定时器/计数器功能 | + | |
- | * 芯片内有5.5%精度的片上振荡器 | + | |
- | * 每颗芯片都有TraceID进行追踪 | + | |
- | * 最小封装为2.5mmx2.5mm | + | |
- | + | ||
- | ===2.2 结构 === | + | |
- | {{ :machxo2structure.png |}} <WRAP centeralign> MachXO2内部结构功能 </WRAP> | + | |
- | + | ||
- | **可编程部分:** | + | |
- | * FPGA的核心部分是由逻辑门(Logic Gate)、寄存器(Register)以及连线(Wire)构成的可编程的逻辑块,也即此图中的PFUs(Programmable Function Units with Distributed RAM - 带分布式存储器的可编程功能单元),这些逻辑块的规模由两个重要指标表示LUTs和Slices | + | |
- | * 可编程输入输出管脚PIOs:分成多个Bank的sysIO,每个Bank可以有单独的供电电压Vccio,以支持不同电平的数据传输协议,这些输入输出管脚可以自由分配,并可以通过编程、配置支持多种数据传输协议(不同电平、差分等),IO管脚的输入输出电阻也可以编程、配置 | + | |
- | * 块RAM:在这里称为sysMEM Embedded Block RAM(EBR) | + | |
- | + | ||
- | **硬核部分:** | + | |
- | 当今的FPGA除了可编程的逻辑和IO之外,还提供了一系列常用的功能模块,以硬核的方式内嵌在芯片以内,即便用户在设计中不用这些功能,这些资源也存在于系统中。硬核化的优势在于速度快、功耗低,且这些硬核一般为常用的功能块。在MachXO2中内嵌的硬核功能主要有: | + | |
- | * 嵌入式功能块:Embedded Function Blocks(EFB)- MachXO2主要的EFB包括一个SPI、两个I2C、和一个定时器 | + | |
- | * 程序Flash:On-chip Configuration Flash Memory | + | |
- | * 用户Flash:User Flash Memory(UFM) | + | |
- | * PLL/DLL: sysPLL | + | |
- | + | ||
- | {{ :machxo2pfu.png |}} <WRAP centeralign>MachXO2内部的可编程功能单元构成示意图 </WRAP> | + | |
- | {{ :machxo2slice.png |}} <WRAP centeralign>MachXO2的Slice构成示意图 </WRAP> | + | |
- | {{ :machxo2efb.png |}} <WRAP centeralign>MachXO2内部的嵌入式功能模块 </WRAP> | + | |
- | + | ||
- | + | ||
- | ===2.3 资源 === | + | |
- | 上面我们介绍了MachXO2内部的结构,XO2系列不同的型号内部结构是相同的,但资源的多少则取决于所选择的型号,在设计中我们需要根据资源的需求来选用合适的器件,了解到这些器件的资源配置对于我们设计也是有帮助的,可以充分利用器件内部的资源简化外围电路的设计,同时也要知道器件内部的局限性,在外围进行扩展。在我们小脚丫2.0版本中我们选用了XO2-4000的型号(参见MachXO2选型表),它具有如下资源: | + | |
- | * 4320个查找表 | + | |
- | * 10个嵌入式RAM块,攻击92kbits的容量 | + | |
- | * 34kbits的分布式SRAM | + | |
- | * 96Kbits的用户Flash存储器 | + | |
- | * 内部有两个[[PLL]]和两个[[DLL]] | + | |
- | * 支持DDR/DDR2/LPDDR存储器接口 | + | |
- | * 内部具有配置用的Flash | + | |
- | * 支持双启动模式 | + | |
- | * 内部有一个[[SPI]]模块,2个[[I2C]]模块以及一个定时器模块 | + | |
- | + | ||
- | <WRAP centeralign>** MachXO2 选型表** </WRAP> | + | |
- | ^ |O2-256 |XO2-640 |XO2-640U |XO2-1200 |XO2-1200U |XO2-2000 |XO2-2000U |XO2-4000 |XO2-7000| | + | |
- | ^查找表(LUTs)的密度 |256 |640 |640 |1280 |1280 |2112 |2112 |4320 |6864| | + | |
- | ^EBR RAM块(9 Kbits/block)| 0 |2 |7 |7 |8 |8 |10 |10 |26 | | + | |
- | ^EBR SRAM(Kbits) |0 |18 |64 |64 |74 |74 |92 |92 |240 | | + | |
- | ^Dist. SRAM (Kbits) |2 |5 |5 |10 |10 |16 |16 |34 |54 | | + | |
- | ^用户Flash存储(Kbits) |0 |24 |64 |64 |80 |80 |96 |96 |256 | | + | |
- | ^PLL + DLL |0 |0 |1 + 2 |1 + 2 |1 + 2 |1 + 2 |2 + 2 |2 + 2 |2 + 2 | | + | |
- | ^支持DDR/DDR2/LPDDR存储器|- |- |Yes |Yes |Yes |Yes |Yes |Yes |Yes | | + | |
- | ^配置存储器 |||内部Flash| | + | |
- | ^双启动 |Yes |Yes |Yes |Yes |Yes |Yes |Yes |Yes |Yes | | + | |
- | ^内嵌功能块 |||I2C (2), SPI (1), Timer (1)| | + | |
- | ^内核电压Vcc 1.2 V |ZE |ZE |- |ZE |- |ZE & HE |HE |ZE & HE |ZE & HE | | + | |
- | ^内核电压Vcc 2.5 - 3.3 V |HC |HC |HC |HC |HC |HC |HC |HC |HC | | + | |
- | + | ||
- | === 2.4 管脚分配 === | + | |
- | + | ||
- | + | ||
- | ===2.5 主要应用领域 === | + | |
- | ==2.5.1 微处理器的接口扩展== | + | |
- | * 为低成本的微控制器增加通用IO以节省成本 | + | |
- | * 为系统控制处理器增加SPI和I2C接口 | + | |
- | * 快速添加高性能的DDR SRAM和Flash存储器接口 | + | |
- | * 通过采用PLD配置为系统状态寄存器简化系统管理 | + | |
- | {{ :microprocessor_interface_expansion.png |}} | + | |
- | + | ||
- | ==2.5.2 提高实时性要求较高的功能的性能== | + | |
- | * 在系统上电时通过快速启动逻辑精确地控制信号 | + | |
- | * 可以配置PWM功能以精确产生照明和马达控制所需要的模拟电压 | + | |
- | * 构建传感器缓冲器以及智能中断以保证实时世界的事件能够被捕捉 | + | |
- | * 采用硬件UART克服采用软件实现UART的性能限制 | + | |
- | {{ :timing_offload.png |}} | + | |
- | + | ||
- | ==2.5.3 通过硬件加速提高系统的性能== | + | |
- | * 通过基于逻辑的信令过滤机制降低处理器的负荷 | + | |
- | * 可以通过最小的处理器消耗实现图像的旋转、缩放以及合并 | + | |
- | {{ :hardware_acceleration.png |}} | + | |
- | + | ||
- | ===2.6 相关设计文档 === | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=38834|MachXO2数据手册]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=39085|MachXO2编程和配置指南]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=39080|MachXO2系统时钟PLL设计和应用指南]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=39083|MachXO2系统IO应用指南]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=39082|MachXO2的存储器应用指南]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=8374|可编程器件的电源去藕和旁路滤波]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=42546|MachXO2 132管脚csBGA管脚演进表]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=42571 |MachXO2 4000管脚分配表]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=45876 |MachXO2 硬化I2C Master/Slave演示用户指南]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=45877 |MachXO2 硬化SPI演示]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=2710 |MachXO2 I2C主控设计文档]]以及[[http://www.latticesemi.com/view_document?document_id=9497 |MachXO2 I2C主控源代码]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=39361 |LED/OLED的驱动设计文档]]以及[[http://www.latticesemi.com/view_document?document_id=39362 |LED/OLED的驱动源代码]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=34506 |PWM风扇控制设计文档]]以及[[http://www.latticesemi.com/view_document?document_id=34507 |PWM风扇控制设计源代码]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=36525|采用FPGA的资源来实现ADC功能]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=35762 |简单的Sigma-Delta ADC设计文档]]以及[[http://www.latticesemi.com/view_document?document_id=35763 |简单的Sigma-Delta ADC设计源代码]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=39071 |用于数字温度传感器的单线控制器源代码]]以及[[http://www.latticesemi.com/view_document?document_id=39070 |用于数字温度传感器的单线控制器设计文档]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=45855 |采用嵌入式功能单元的SPI从设备控制器设计文档]]以及[[http://www.latticesemi.com/view_document?document_id=45861 |采用嵌入式功能单元的SPI从设备控制器源代码]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=22487 |MachXO2系列器件在Orcad设计工具中的原理图库]] | + | |
- | * [[http://www.latticesemi.com/view_document?document_id=38559|采用BGA封装的PLD器件,获取最低PCB布局成本的技巧]] | + | |
- | + | ||
- | ---- | + | |
- | ====3 开发工具==== | + | |
- | ===3.1 Lattice Diamond集成化开发环境=== | + | |
- | - [[软件安装及配置|Diamond安装及配置]],包括软件的下载、License的申请以及软件的安装整个过程。 | + | |
- | - [[Lattice Diamond的使用]],以最简单的[[点亮LED灯]]为例,简单介绍了一下该软件从编辑输入开始到最终的bitstream下载到FPGA。 | + | |
- | + | ||
- | ===3.2 硬件描述语言=== | + | |
- | 在设计FPGA逻辑中有两种硬件设计语言(HDL)可以选择,一种是[[Verilog]] HDL,还有一种是VHDL,在我们的设计中选用普及率更广,更容易上手的[[Verilog]],具体如何使用,可以参考如下的几个PPT教程: | + | |
- | * {{:100_2_digitalcircuitlab_vlog1.pdf|数字电路实验室Verilog教程}} | + | |
- | * {{:coa-verilog_tutorial_esam_1.pdf|Verilog教程}} | + | |
- | * {{:verilog_introduction.pdf|Verilog介绍}} | + | |
- | * {{:ecbc_verilog.pptx|ECBC培训教程PPT}} | + | |
- | * {{:verilogreference.pdf|Verilog语法快速参考}} | + | |
- | === 3.3 代码规范 === | + | |
- | 规范的代码风格一方面能体现你足够专业,另一方面也是最重要的一方面,代码的规范性有利于开发交流,让代码的可读性大大增强,也有利于降低代码的出错率。 | + | |
- | * [[硬禾实战营Verilog代码规范]] | + | |
- | \\ | + | |