打印
[FPGA]

FPGA和单片机的区别——FPGA里面都有什么资源?

[复制链接]
4652|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
FAQ|  楼主 | 2019-1-16 20:58 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式


做以单片机为平台的项目能够根据功能需求,合理选择单片机型号,说明对单片机的资源是熟悉的。知道单片机的内部资源无非就是定时器,ADC,以及各种通信协议接口,以及单片机FLASH内存大小,RAM大小等等。往往资源越多功能越多,性能越好。我们程序要做的事情无非就是根据功能需要设置各个寄存器初始化,然后跑功能逻辑。


那FPGA呢,只知道里面有各种逻辑门,触发器。还有其他的不清楚。我对FPGA的理解就是:FPGA就相当于有很多个74系列的逻辑芯片被集成在一个芯片里面。并且这些逻辑芯片之间相互是没有电气连接关系的,而通过硬件描述语言,加上厂家的编译器,容易被人理解的程序代码(比如Verilog)最终会被自动转换成最优的硬件原理图,然后生成对应配置FPGA芯片的数据流,这些数据流其实就是指定FPGA内部各个逻辑门之间的电气连接关系。

简单的来说就是用硬件描述语言来对电路进行描述,这样就不需要很多的器件来搭电路。

那么问题来了,FPGA里面到底究竟都有哪些基本的东西呢?比如各种逻辑门,触发器,还有什么呢?



相关帖子

沙发
FAQ|  楼主 | 2019-1-16 21:06 | 只看该作者
另外在不带flash程序保存功能fpga里面只有ram吧,这样开发阶段的时候FPGA芯片直接读取ram中的数据流对芯片内的逻辑门进行电气连接。另外中间变量应该是保存在锁存器中不是在ram中吧,ram好像只有保存配置程序流的作用吧。

使用特权

评论回复
板凳
mcu5i51| | 2019-1-16 22:28 | 只看该作者
一般的FPGA只有RAM,电路门功能也是RAM中的数据决定的,名字就是查找表;不过上电时会通过外部的E2P加载代码;部分是FLASH的不用这个过程;
FPGA的资源,除了基本的单元LE,RAM之类的,一般会有PLL,乘法器等,有的还有CPU核;
mcu用的多了就可以预测一下一个东东的资源用量,FPGA也是一样的,做什么东西,大约用多少个门,要用那些资源,多了就会有一些评估了;

使用特权

评论回复
地板
zhangmangui| | 2019-1-16 23:09 | 只看该作者
FPGA里面可以实现多个单片机  

使用特权

评论回复
5
FAQ|  楼主 | 2019-1-17 12:53 | 只看该作者
mcu5i51 发表于 2019-1-16 22:28
一般的FPGA只有RAM,电路门功能也是RAM中的数据决定的,名字就是查找表;不过上电时会通过外部的E2P加载代 ...

mcu用的多了就可以预测一下一个东东的资源用量,FPGA也是一样的,做什么东西,大约用多少个门,要用那些资源,多了就会有一些评估了;

-----------------------------------------------------------------------------
这个怎么预测,是不是类似单片机那样,比如我写过串口程序,就会知道串口初始化部分需要占用大概多少字节的flash空间。这样项目做多了,心中留有印象,自然知道各种资源组合到一起大概需要多少flash空间。

迁移到FPGA该怎么看,应该是直接看编译报告吧。



使用特权

评论回复
6
FAQ|  楼主 | 2019-1-17 13:03 | 只看该作者
看了下资源表,Embedded memory这个参数不明白是什么意思。这究竟指的是什么是指类似单片机里面的ram吗,什么数据会被保存在这个区域?定义是reg,memory型变量会被保存在里面?好像reg对应硬件直接都是锁存器吧。还有配置数据流(比如调试时候的断电即消失的配置数据流)是在Embedded memory里面吗?


另外PLL应该和cortex M ARM单片机里面的锁相环差不多吧。




使用特权

评论回复
7
mcu5i51| | 2019-1-17 13:49 | 只看该作者
你就当是内存吧,不是查找表的内存,这个是内存块,4K.9K之类的;如果你要用内存做缓冲之类的就可以拿来用;
一般的reg就是一个锁存器,不过FPGA内部会有一些硬件的内存供你使用,这样比用门成本低一些,就像内部有用硬件的18*18乘法器,你就不用自己写一样;
自己写的东西是用内部的门组成的,fpga中的门是多输入的内存组成,相比用集成工艺的门电路要繁琐,这样用电路在内部做好常用的功能块会经济好多,速度也会更快

使用特权

评论回复
8
FAQ|  楼主 | 2019-1-17 14:42 | 只看该作者
本帖最后由 FAQ 于 2019-1-17 14:46 编辑
mcu5i51 发表于 2019-1-17 13:49
你就当是内存吧,不是查找表的内存,这个是内存块,4K.9K之类的;如果你要用内存做缓冲之类的就可以拿来用 ...

看来这个还是要在今后的使用过程中慢慢体会。还有个困惑,在单片机上开发常用的功能和外设都有些典型的开源成熟程序可以直接移植调用。加速开发。比如操作SD卡,由于C语言特性,我们可以很方便的使用比如FATFS文件系统。还有LWIP以太网协议栈。操作系统,图形界面库。等很多典型的开源或者不开源的程序。


但是换到FPGA上,连简单的按键消抖程序都要写一些比较麻烦理解的程序。直接使用FATFS,LWIP这些基于C语言的开源程序显然行不通。为了加快开发,保证可靠性,这个时候好像就要用到所谓的ip核了吧。这些核简单的可能就是一段开源程序复杂的可能就是加密库吧。现在疑问是都是从哪里获取呢,主要渠道是哪里?

以我目前的理解,只有单片机资源不够个性化,带宽,速度不够的情况下。才会考虑FPGA,比如需要同时发出很多路的pwm并且这些pwm相位差可以指定,占空比都独立不一样并且可调。这些普通单片机显然满足不了这么个性化的需求。还有就是大量数据需要并发高带宽传输,这些虽然逻辑上不复杂但占用大量的IO口和带宽。如果不是专用单片机根本没法做,或者即使勉强做了CPU也忙的不行,不能再做其他事情了。

搞了几年单片机了,觉得单片机也就那回事儿了。刚接触FPGA还摸不着头脑,其实以前在学校里当时单片机和fpga都接触过,当时就觉得fpga好像有点生硬,后来工作也用不到就没再接触了。

现在拐回头来看来当初没有直接学fpga,学了单片机还是正确的选择,我觉得如果单片机不会,直接学fpga就意味着没有亲自操作体会过各种基本通信接口协议的时序。因为C语言很方便,还有单片机开发学习门槛低,开发环境相对简单易用。所以我觉得还是得先学会单片机在学FPGA才行,至于有的人说如果先学单片机再学FPGA反而会被顺序执行的程序逻辑所影响。其实我觉得细心学过fpga入门的人应该不会有这个想法。简单道理就好比滤波我们既可以用硬件滤波也可以用软件滤波。还有数.学.运.算,既可以用纯硬件电路实现又可以用C语言汇编成机器码CPU取指令软件顺序执行运算实现。由于硬件电路在电路生成那一刻就注定了他在很多场合要比软件顺序执行要来的直接、更快。

所以我觉得要想fpga玩的好,就要经过大量学习别人现有的案例,学习人家的设计思路。反复锻炼才能掌握,不过目前我觉得fpga还是要比单片机要相对难很多。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

FAQ

228

主题

2034

帖子

9

粉丝