做以单片机为平台的项目能够根据功能需求,合理选择单片机型号,说明对单片机的资源是熟悉的。知道单片机的内部资源无非就是定时器,ADC,以及各种通信协议接口,以及单片机FLASH内存大小,RAM大小等等。往往资源越多功能越多,性能越好。我们程序要做的事情无非就是根据功能需要设置各个寄存器初始化,然后跑功能逻辑。
那FPGA呢,只知道里面有各种逻辑门,触发器。还有其他的不清楚。我对FPGA的理解就是:FPGA就相当于有很多个74系列的逻辑芯片被集成在一个芯片里面。并且这些逻辑芯片之间相互是没有电气连接关系的,而通过硬件描述语言,加上厂家的编译器,容易被人理解的程序代码(比如Verilog)最终会被自动转换成最优的硬件原理图,然后生成对应配置FPGA芯片的数据流,这些数据流其实就是指定FPGA内部各个逻辑门之间的电气连接关系。
简单的来说就是用硬件描述语言来对电路进行描述,这样就不需要很多的器件来搭电路。
那么问题来了,FPGA里面到底究竟都有哪些基本的东西呢?比如各种逻辑门,触发器,还有什么呢?
看来这个还是要在今后的使用过程中慢慢体会。还有个困惑,在单片机上开发常用的功能和外设都有些典型的开源成熟程序可以直接移植调用。加速开发。比如操作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还是要比单片机要相对难很多。
一周热门 更多>