差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录 前一修订版
后一修订版
前一修订版
what_is_fpga [2021/09/13 00:52]
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厂商提供的软件来编译你描述的“逻辑功能”,生成一个可以下载到FPGA内的二进制文件 +
-  - 将你的电脑连接FPGA,将上述生成的二进制文件下载到FPGA中去 +
-  - 你的FPGA就会执行你设想的“逻辑功能” +
- +
-记住这些: +
-  * 你可以任意多次地下载配制FPGA,没有次数限制,每次可以是不同的功能。如果在你的设计中出现了错误,只要修复你的”逻辑功能“,再重新编译,再重现下载就可以。不需要重新设计PCB,不需要重新焊接或更换元器件。 +
-  * 所有的逻辑都是运行在FPGA内部,也就是硅片上,因此相对于用分立元器件搭建的电路板而言,在FPGA上你的设计会运行的更快 +
-  * 每次断电FPGA芯片本身就会失去其功能,必须在下一次加电的时候重新从为FPGA搭配的Flash中下载代码才能让FPGA重新工作 +
- +
-### 1. FPGA是什么?+
 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。 FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
  
-#### 背景+#### 1.1 背景
 以硬件描述语言([[Verilog]]或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至[[FPGA]]上进行测试,是现代IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的[[FPGA]]里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其它更加完整的记忆块。 以硬件描述语言([[Verilog]]或VHDL)所完成的电路设计,可以经过简单的综合与布局,快速的烧录至[[FPGA]]上进行测试,是现代IC设计验证的技术主流。这些可编辑元件可以被用来实现一些基本的逻辑门电路(比如AND、OR、XOR、NOT)或者更复杂一些的组合功能比如解码器或数学方程式。在大多数的[[FPGA]]里面,这些可编辑的元件里也包含记忆元件例如触发器(Flip-flop)或者其它更加完整的记忆块。
  
行 23: 行 13:
 FPGA一般来说比[[ASIC]](专用集成电路)的速度要慢,实现同样的功能比ASIC电路面积要大。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。 FPGA一般来说比[[ASIC]](专用集成电路)的速度要慢,实现同样的功能比ASIC电路面积要大。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。
  
-#### FPGA的开发 
 FPGA的开发相对于传统PC、单片机的开发有很大不同。FPGA以并行运算为主,以硬件描述语言来实现;相比于PC或单片机(无论是冯诺依曼结构还是哈佛结构)的顺序操作有很大区别,也造成了FPGA开发入门较难。FPGA开发需要从顶层设计、模块分层、逻辑实现、软硬件调试等多方面着手。 FPGA的开发相对于传统PC、单片机的开发有很大不同。FPGA以并行运算为主,以硬件描述语言来实现;相比于PC或单片机(无论是冯诺依曼结构还是哈佛结构)的顺序操作有很大区别,也造成了FPGA开发入门较难。FPGA开发需要从顶层设计、模块分层、逻辑实现、软硬件调试等多方面着手。
  
-#### 产品比较 +#### 1.2 发展历程
-早在1980年代中期,FPGA已经在PLD设备中扎根。[[CPLD]]和FPGA包括了一些相对大数量的可编辑逻辑单元。CPLD逻辑门的密度在几千到几万个逻辑单元之间,而FPGA通常是在几万到几百万。 +
-  * CPLD和FPGA的主要区别是他们的系统结构。CPLD是一个有点限制性的结构。这个结构由一个或者多个可编辑的结果之和的逻辑组列和一些相对少量的锁定的寄存器组成。这样的结果是缺乏编辑灵活性,但是却有可以预计的延迟时间和逻辑单元对连接单元高比率的优点。而FPGA却是有很多的连接单元,这样虽然让它可以更加灵活的编辑,但是结构却复杂的多。 +
-  * CPLD和FPGA另外一个区别是大多数的FPGA含有高层次的内置模块(比如加法器和乘法器)和内置的存储器。因此很多新的FPGA支持完全或者部分的系统内重新配置。允许他们的设计随着系统升级或者动态重新配置而改变。一些FPGA可以让设备的一部分重新编辑而其他部分继续正常运行。 +
-  * CPLD和FPGA还有一个区别:CPLD下电之后,原有烧入的逻辑结构不会消失;而FPGA下电之后,再次上电时,需要重新加载FLASH里面的逻辑代码,需要一定的加载时间。 +
- +
-#### 发展历程+
 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工艺。 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工艺。
  
行 43: 行 26:
 FPGA及PLD产业发展的最大机遇是替代ASIC和专用标准产品(ASSP),主要由[[ASIC]]和[[ASSP]]构成的数字逻辑市场规模大约为350亿美元。由于用户可以迅速对PLD进行编程,按照需求实现特殊功能,与ASIC和ASSP相比,PLD在灵活性、开发成本以及产品及时面市方面更具优势。然而,PLD通常比这些替代方案有更高的成本结构。因此,PLD更适合对产品及时面市有较大需求的应用,以及产量较低的最终应用。PLD技术和半导体制造技术的进步,从总体上缩小了PLD和固定芯片方案的相对成本差,FPGA和PLD供应商的关键目标不是简单地增加更多的原型客户,而是向大批量应用最终市场和客户渗透。”John Daane为FPGA产业指明了方向。 FPGA及PLD产业发展的最大机遇是替代ASIC和专用标准产品(ASSP),主要由[[ASIC]]和[[ASSP]]构成的数字逻辑市场规模大约为350亿美元。由于用户可以迅速对PLD进行编程,按照需求实现特殊功能,与ASIC和ASSP相比,PLD在灵活性、开发成本以及产品及时面市方面更具优势。然而,PLD通常比这些替代方案有更高的成本结构。因此,PLD更适合对产品及时面市有较大需求的应用,以及产量较低的最终应用。PLD技术和半导体制造技术的进步,从总体上缩小了PLD和固定芯片方案的相对成本差,FPGA和PLD供应商的关键目标不是简单地增加更多的原型客户,而是向大批量应用最终市场和客户渗透。”John Daane为FPGA产业指明了方向。
  
-### 主要厂商+#### 1.3 主要厂商
  
 {{ :​altera_logo.jpg?​100|}} {{ :​altera_logo.jpg?​100|}}
行 57: 行 40:
  
  
-### FPGA和CPLD的区别+### 2. FPGA、CPLD、MCU的比较 
 + 
 +#### 2.1 FPGA和CPLD的区别
 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是细颗粒的器件,意味着它们由非常多(高达10万以上)的微小的由触发器构成的逻辑功能块组成,而CPLD则是粗颗粒的器件,它们由相对较少的(最多几百个)但比较大的由触发器构成的逻辑块组成
   * FPGA是基于RAM的,每次上电的时候需要重新下载配置,而CPLD是基于EEPROM的,上电的时候就开始工作;   * FPGA是基于RAM的,每次上电的时候需要重新下载配置,而CPLD是基于EEPROM的,上电的时候就开始工作;
行 65: 行 54:
 总之,FPGA包含比较大的数字设计,CPLD值包含小的设计 总之,FPGA包含比较大的数字设计,CPLD值包含小的设计
  
-### FPGA和微控制器的区别+#### 2.2 FPGA和微控制器的区别
 FPGA和微控制器是一回事么?不! FPGA和微控制器是一回事么?不!
   * FPGAs实现的可编程逻辑单元能够并行执行;   * FPGAs实现的可编程逻辑单元能够并行执行;
   * 微控制器是基于CPU架构的,以串行的方式执行指令,虽然其片上的外设能够与它们的CPU并行操作,但它们相比起FPGA可编程性更弱。   * 微控制器是基于CPU架构的,以串行的方式执行指令,虽然其片上的外设能够与它们的CPU并行操作,但它们相比起FPGA可编程性更弱。
  
-在进入正式的学习之前,先给大家提供两本基础的英文书,同学们可以下载了进行阅读。 +### 3. 为什么用FPGA?
-{{ :​fpga_for_dummies.jpg?​100|}} ​ {{ :​introduction_to_digital_design_top_600_35755.1448322782.1280.1280.png?​150|}} +
-  * 傻瓜都能掌握的FPGA知识:​ {{:​fpgasfordummiesebook.pdf|FPGA for Dummies}} +
-  * 美国大学的数字电路/Verilog教程(基于Digilent的板卡,使用的是Xilinx的芯片){{:​intro_to_digital_design-digilent-verilog_online.pdf|Introduction to Digital Design Using Digilent FPGA Boards}} +
- +
- +
- +
----- +
-====1 数字逻辑、可编程逻辑及FPGA==== +
-FPGA(Field Programmable Gate Array)译作中文为:现场可编程门阵列,也就是设计者可以在现场对可定制的数字逻辑进行编程的集成电路,相比于其它的硬件构成,它允许你构建你所需要的硬件而不需要[[ASIC]](专用集成电路),而且比采用微处理器内核更简单、快速、省电。 +
- +
-关于FPGA的大概介绍,参考我们的培训文档:{{:​ecbc可编程逻辑基础.pdf|ECBC可编程逻辑基础PPT}} +
- +
-===1.1 ​为什么用FPGA?===+
 FPGA的技术优势:灵活的开发周期、更低的设计迭代成本、更低的一次性工程费用(NRE),易于评估和实现的可选设计架构,新产品上市时间快。 FPGA的技术优势:灵活的开发周期、更低的设计迭代成本、更低的一次性工程费用(NRE),易于评估和实现的可选设计架构,新产品上市时间快。
 相比于[[ASIC]]和[[MCU]]来讲,FPGA具有以下优势: 相比于[[ASIC]]和[[MCU]]来讲,FPGA具有以下优势:
行 91: 行 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.5 FPGA的选型决策原则=== +
-  - 功能/资源:逻辑单元、存储器、处理能力、IO、处理器内核、DSP +
-  - 封装:满足管脚量以及板卡的物理尺寸要求 +
-  - 功耗:满足系统对供的限制需求 +
-  - 开发工具难度:影响设计难度和开发时间,尽可能选择易开发、调试器件架构 +
-  - 系统成本:包括配置RAM、外供电源、时钟等除了器件成本之外还要考虑实现成本、支持成本等。 +
-  - 购买难度:价钱/数量/供货渠道 +
-  - 灵活性:便于将来的产品修改和升级 +
-  - 技术支持:供应商是否能够提供良好的技术支持,乃至培训 +
- +
-===1.7 FPGA应注意事项=== +
-==1.7.1 硬件设计== +
-  - 管脚分配:输入/​输出类型,预留功能管脚,方便布线 +
-  - [[时钟]]:全局时钟 vs 局部时钟,[[PLL]] vs [[DLL]],否驱动 +
-  - 电源:内核电压/接口电压及其相应电流,上电时序 +
-  - 编程:[[JTAG]]、配置、在线更新 +
-  - 测试点:关键信号 - 时钟、电源、关键IO +
- +
-==1.7.2 代码开发== +
-  - 善用IP Core:调用原厂提供经过验证过的IP内核 +
-  ​硬件设计概念:并行工作、时延 +
-  ​充分仿真:功能仿真、时序仿真、TestBench +
-  - 调试:使用原厂提供的片上逻辑分析工具 +
- +
-===1.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平台将用户构建的各种优秀功能模块经验证、审核以后发布出来,也希望通过这么一个开源的平台帮助大家的学习和设计。也希望更多的设计者能够将自己的设计贡献、分享出来。 +