【转】FPGA到底是啥?

转自:FPGA到底是啥? - 知乎

怎么才叫学会了FPGA,怎么才叫学好了FPGA?我相信有很多朋友有类似的问题,因为在多数人的潜意识里,FPGA是非常高深莫测的技术,能够玩转FPGA的都是大神级的人物。

其实呢,这是一种误解,你可以把FPGA当做是数字世界的乐高(Lego),它由几种最基本的单元(每种单元数量有很多很多)让你组成自己想实现的功能。能玩好乐高就一定能玩好FPGA。乐高玩得好不好,取决于什么因素?

通过一些最基本的积木块可以拼出任何复杂的物体

第一要素 - 先要了解供你玩的“乐高”套装里都有哪些单元?每个单元都有哪些特性?不同单元之间是如何拼接的?没有这些全局的信息和知识在你的脑子里,你要从几千个piece里面去组装一辆车、构建一个城堡,将是非常困难甚至不可能的。

第二要素 - 要有正确的思维方式。你至少要知道搭建一辆车需要四个轮子、一个方向盘、一个发动机,这些部件之间如何通过其它的单元有机组合在一起,彼此之间如何搭配。不知道车子需要轮子,不知道轮子要装在底盘上是无法组装出一辆车来的,即便有再多的单元也没有用。

要通过积木构建一辆车,首先要知道都有哪些积木零件可以用,其次要知道这些部件之间的逻辑关系

学习使用FPGA的道理跟玩乐高没啥区别,同样是:

了解FPGA是什么?玩乐高的人不用操心什么是乐高,这个知识是由玩乐高的人的父母掌握了,并帮他选好型了;

要充分了解FPGA内部都有什么功能单元(逻辑单元、存储器、时钟产生、可编程IO等) ,这些单元都有什么用?用起来都有哪些要注意的地方,各个单元之间如何配合?尤其是针对你要用的具体型号,你要知道你用的这个型号的器件内部的各种功能单元具体有多少数量,够不够你项目使用的;

数字逻辑的设计思想 - 针对任意一项具体的功能,如何组合你器件内的单元来实现,需要哪些单元?如何连接这些单元?各个单元之间连接的先后顺序如何?这就需要比较扎实的数字电路/数字系统设计的基础知识以及逻辑思维能力。

当然你也需要一些工具来帮助你实现,比如一套从头到尾执行的设计环境(FPGA厂商提供的编译工具 - Lattice的Diamond、Intel的Quartus、Xilinx的Vivado),一种连接你的逻辑思维和机器操作之间的沟通工具 - 设计语言(原理图、Verilog、VHDL等等)。

下面我们以小脚丫FPGA为例,看看我们要学好FPGA必须掌握哪些知识。

首先FPGA是什么?

四个字母Field(现场) Programmable(可编程) Gate(逻辑门) Array(阵列)凸显了大量的逻辑门单元,这些逻辑单元是可以在任何地方随时进行组装的,这是不是跟乐高玩具一样?逻辑门单元是构成一切数字逻辑器件的基本单元,在数字世界里你想做任何事情、实现任何功能,都可以通过逻辑门的堆砌来实现,也就是说FPGA在数字领域里几乎无所不能,因此n年前我国的某一个FPGA公司在向国务院领导描述其产品的时候称他们做的是“万能芯片”(用这种通俗易懂的说法忽悠国家的经费)。万能有些夸张,但FPGA高度灵活,理论上来讲,只要有足够的资源(积木数量足够多)几乎可以实现数字域的任何功能,受限的是速度、功耗以及系统的成本。

一个典型的FPGA架构及其内部主要功能单元

FPGA里面有什么?

我们以基于Lattice的FPGA的小脚丫看一下该FPGA内部都有哪些资源以及相应资源的数量,如下是该器件LCMXO2-4000HC-4MG132C内部的功能框图:

Lattice版本小脚丫FPGA芯片内部的主要功能单元

该器件的具体资源参数如下:

4320个LUT资源 - 每个LUT(查找表)有4个输入,16种状态,并一个寄存器,这就像乐高里的积木块,用来实现各种逻辑功能,至于4320是多还是少?这个要看你做的项目需要的逻辑资源,对于FPGA的初学者来讲4000多个LUT已经足够多,实现很多没听说过的功能都已经绰绰有余了;

92Kbit RAM - 这是在逻辑之外的成块状的存储器,可以灵活配置成各种位宽、各种读写模式的存储功能,比如FIFO、双口RAM等;

96Kbit用户闪存 - 这是Lattice 的一个创新,后来Altera/Intel也学着做了MAX10,就是将配置FPGA的存储器从外面的PROM变成了集成在FPGA内部的Flash,可以反复编程,从此FPGA不再外挂一个累赘了,用起来就像PLD一样方便;

嵌入式功能块(硬核):一路SPI、一路定时器、2路I2C,这可是MCU除了ALU、总线之外最基本的功能模块,都硬化到该FPGA内部了,也就意味着如果你想用这个FPGA做一个MCU玩玩,可以直接将这些已经硬化的功能块通过总线挂在处理器上,没必要再写这些功能,并且占用逻辑资源了;

2+2路PLL+DLL - 我们前面讲过外部常用的时钟产生器(比如晶振)产生的频率不高,但FPGA内部可以工作到很高的速度,因此现在几乎所有FPGA器件都有内置的PLL将外部的低频率的时钟整到很高频率,比如小脚丫的外部时钟为12MHz,内部PLL可以将它倍频到400MHz,非常快吧?

支持DDR/DDR2/LPDDR存储器 - 这是说该器件能够直接挂这些存储器,适配它们的电平和时序;

104个可热插拔I/O - 每个I/O管脚可以单独编程为输入、输出、上拉或下拉、并可以设置器输出阻抗,以便支持不同的接口协议,就像城市连接外部的道路可进可出、有的铺沥青、有的是土路;

内核电压2.5-3.3V,供电电压的范围比较宽;

132脚BGA封装,引脚间距0.5mm,芯片尺寸8mm x 8mm;

看下面就是这个器件做成的板子的图片,中间那个黑黑的就是FPGA芯片。

小脚丫正面图片-所有可以操作的功能

小脚丫FPGA背面的图片 - LDO稳压器件以及编程器件

FPGA能做什么?

知道了FPGA内部的资源,也就心里有数它能做什么了。就像一座城堡,内部居民的生活丰富多彩,无论他们以何种形式进行组合,他们所做的事情取决于这些居民以及他们拥有的资源,其生活模式被城堡的设计者所定义(城市管理、文化等等等)。

但从宏观上来看这个城堡起到的功能很大程度上取决于这个城堡同外部世界的连接,没有这些同系统的连接,城堡内部的任何行为对于系统来讲都没有意义。FPGA可以是系统的一个重要组成部分,但它仅仅是一个部分而已,就像一个城堡一样,它只有同外部进行连接并执行系统通过这些连接给其分配的功能才有意义。

因此FPGA通过其I/O管脚连接外面的世界,我们使用的小脚丫芯片有132个管脚,除去电源、地之外还有104个管脚可以用来同外界进行联系。

小脚丫FPGA器件的管脚分布(像城堡连接外面世界的条条道路)

做为一款让FPGA初学者学习的平台,首先要满足初学者基于掌握的数字电路知识进行做项目的定位,先要体验组合逻辑、时序逻辑、状态转换等数字电路的基础概念,而体验这些概念就需要一些必要的输入(按键、开关)和必要的输出(通过单色LED灯、三色灯、数码管进行各种方式的显示),综合考虑板子的尺寸以及初学者随时随地能练习的要求,我们经过取舍后选定了如下的板上功能及连接:

通过FPGA的IO管脚连接的板上功能

板载资源:

两位7段数码管 - 可以以状态、数值的变化来显示内部逻辑运行的信息;

两个RGB三色LED - 可以以LED的亮度、颜色灯的变化显示内部逻辑运行的信息;

8路用户LED - 可以通过组合来形象地显示内部逻辑运行的信息;

4路拨码开关 - 做为状态的输入;

4路按键 - 做为外部条件变换的输入;

板子上的这些功能说明

当然作为一个灵活的学习模块,我们还要给用户留下一定的灵活扩展的空间,让用户以各种方式来连接其计划连接的其它器件,在这个模块的周边我们留出了36个信号管脚(4个电源、地除外)给用户,用户可以灵活配置、应用这些管脚,让自己的系统充分利用这些管脚让FPGA内部的逻辑资源执行分配的任务。

还有36个管脚可以做进一步的灵活连接,由未来的用户来定义

小脚丫FPGA模块在兼顾初学者学习功能的前提下,同时留给工程师更多扩展的灵活性,小脚丫团队也开发了一些扩展的模块,并通过独特的适配板连接世界上开源硬件最强大的两个生态系统的扩展卡 - Arduino、树莓派,小脚丫FPGA的使用者可以充分利用这些生态系统里现有的扩展模块进行FPGA逻辑设计就可以了。

两款小脚丫FPGA选用的FPGA器件 - Lattice的LCMXO2-4000和Intel的MAX10M08内部资源都足够大,至少在你学好了FPGA编程之前,都能够完美展现你的逻辑智慧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435725.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】重新打包DebianISO实现无人应答安装(UEFI+BIOS)

转自:重新打包DebianISO实现无人应答安装(UEFIBIOS) - 全部 - 真不是你的 之前我写过打包DebianISO的文章,但是那种打包的方法只能用在引导是BIOS的机器上,按照正常的情况,应该是UEFIBIOS同时支持。 正好前…

Copying to tmp table Problem Solving

Labels: MySQL, MySQL_Problem_Solving 今天一早突然系统突然报慢,查了一下是以下语句: 6177700 username ip db——name Query 549 Copying to tmp table SELECT ....................原因如下:Copying to tmp table on disk The tempora…

【转】CT辐射量如何计算?

转自:CT辐射量如何计算? - 知乎 作者:西门子中国 链接:https://www.zhihu.com/question/27399697/answer/190062962 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 CT检查后&am…

linux c++连接mysql示例

编译和连接程序 MySQL中有一个特殊的脚本,叫做mysql_config. 它会为你编译MySQL客户端,并连接到MySQL服务器提供有用的信息.你需要使用下面两个选项. 1. --libs 选项 - 连接MySQL客户端函数库所需要的库和选项. $ mysql_config --libs 2. --cflags 选项 - 使用必要的include文件…

【转】TCP和UDP的区别

TCP协议与UDP协议的区别 首先咱们弄清楚,TCP协议和UDP协议与TCP/IP协议的联系,很多人犯糊涂了, 一直都是说TCP协议与UDP协议的区别,我觉得这是没有从本质上弄清楚网络通信! TCP/IP协议是一个协议簇。里面包括很多协议…

【转】关于InfiniBand几个基本知识点解释

转自:关于InfiniBand几个基本知识点解释_架构师技术联盟-CSDN博客 IP网络协议如TCP/IP,具有转发丢失数据包的特性,网络不良时要不断地确认与重发,基于这些协议的通信也会因此变慢,极大地影响了性能。与之相比&#xf…

WinCE EBOOT中的BootPart分析

应该说BootPart算是微软提供的一个用于分区的模块,可以在EBOOT中使用。不过说实话,我很少使用它,知道有些厂商的BSP里面支持这个功能,而且也算是EBOOT的一部分,所以还是介绍一下。先看一下架构,如图&#x…

陌生的是人心,是人性,是社会,是世道

偶然中得到这样一本书,它是一本都市小说,写自己的经历,不是很乏味的经历;它是一本职场小说,有着对每个人的、不同侧重点的、外表及心理刻画,披露了鲜为人知的职场黑幕;它又是一本悬疑小说&#…

【转】PF_RING学习笔记

转自:Qt迭代器(Java类型和STL类型)详解 1、PF_RING简介 PF_RING是Luca研究出来的基于Linux内核级的高效数据包捕获技术。简单来说PF_RING 是一个高速数据包捕获库,通过它可以实现将通用 PC 计算机变成一个有效且便宜的网络测量工具箱,进行数…

WinCE系统的编译过程详解

在WinCE系统中,当我们完成了相关的开发和系统定制工作以后,会编译WinCE系统,最后生成NK.bin和NK.nb0。下面介绍一下WinCE系统的编译过程,大致分为4个阶段:编译阶段(Compile phase),系统产生阶段(Sysgen pha…

使用HtmlParser解析HTML

如果要对HTML进行解析,提取HTML的数据或者修改HTML数据,HtmlParser是一个不错的选择.使用HtmlParser可以解析本地和网络上的HTML数据:Parser parser newParser( newWinista.Text.HtmlParser.Http.HttpProtocol(newUri("uriString")));Parser parser newParser( newWi…

WinCE中得Catalog Items前的标记图标的意义总结

先看下来自微软对Platform Builder里的图标解释,在以后的CE里,也类似。 The Catalog window and the OSDesignView tab contain a number of icons used to represent object types. The icons make it possible for you to differentiate between Catal…

JavaScript 图片上传预览效果

图片上传预览是一种在图片上传之前对图片进行本地预览的技术。 使用户选择图片后能立即查看图片,而不需上传服务器,提高用户体验。 但随着浏览器安全性的提高,要实现图片上传预览也越来越困难。 不过群众的智慧是无限的,网上已经有…

【转】GigE Vision简介

转自:GigE Vision简介_计算机视觉小菜鸟的专栏-CSDN博客_gige vision GigE Vision是由AIA制定的通信协议,用来实现在机器视觉领域利用千兆以太网接口进行图像的高速传输。该标准是基于UDP协议,与普通网络数据包不同之处在于应用层协议&#…

在Sql Server 2005使用公用表表达式CTE简化复杂的查询语句

公用表表达式CTE是Sql Server 2005引入的一种新的表表达式。CTE在许多方面都类似于派生表。逻辑上CTE是一个临时结果集,它仅仅存在于它发生的语句中。您可以在SELECT、INSERT、DELETE、UPDATE或CTEATE VIEW语句中建立一个CTE。 CTE的优点 与派生表不同,C…

【转】搞机:window10安装Linux子系统(WSL)及迁移到非系统盘

转自:搞机:window10安装Linux子系统(WSL)及迁移到非系统盘_泛泛之素-CSDN博客_wsl移动到非系统盘 痛点: 在电脑上想要使用linux又想使用windows系统只能安装双系统,因为虚拟机的性能差且使用麻烦&#xf…

插座上的Linux充电器.不..Marvell Plug Computer

一直以来,台式机都有变小的趋势,于是变成了一体机,主机也有变小的趋势,那样可以占用更小的空间,却提供一样的功 能,Marvell Plug Computer 3.0 同样是那种壁插式主机,身形小巧,能够直…

【转】tftp命令详解

转自:tftp命令详解 - 张大猛 - 博客园 介绍一个 FTP客户端-IIS7服务器管理工具 作为FTP客户端,它支持批量管理ftp站点。定时上传和定时下载,定时备份,且操作简洁。同时iis7服务器管理工具还是vnc客户端。并且支持批量管理管理…

【转】聊聊Linux操作系统中的显示管理器及如何更换

转自:聊聊Linux操作系统中的显示管理器及如何更换 - linux-123 - 博客园 聊聊Linux操作系统中的显示管理器及如何更换 | 《Linux就该这么学》 什么是 Linux 中的显示管理器? 简单来说,显示管理器display manager(DM&#xff09…

【转】[WSL2]WSL2迁移虚拟磁盘文件ext4.vhdx

转自&#xff1a;[WSL2]WSL2迁移虚拟磁盘文件ext4.vhdx_Ryan ZHENG的专栏-CSDN博客 WSL2本质上是一个虚拟机&#xff0c;因此必然存在磁盘镜像文件。 默认情况下&#xff0c;这个镜像文件会放在C盘&#xff08;参考官网举例&#xff1a;%LOCALAPPDATA%\Packages<PackageFa…