我必须在关于高级微控制器的课程和关于高级FPGA的课程之间选择。
我在这两个科目上都有入门课程,现在让我感到困扰的是,我已经非常擅长微控制器的固件开发,而我却看不到我可以用FPGA 进行而不能用微控制器/ DSP 进行哪些产品/项目。
您能否提出一些微控制器或DSP不足的应用/产品/项目,为什么?
相机?高速相机?高速图像处理?
我必须在关于高级微控制器的课程和关于高级FPGA的课程之间选择。
我在这两个科目上都有入门课程,现在让我感到困扰的是,我已经非常擅长微控制器的固件开发,而我却看不到我可以用FPGA 进行而不能用微控制器/ DSP 进行哪些产品/项目。
您能否提出一些微控制器或DSP不足的应用/产品/项目,为什么?
相机?高速相机?高速图像处理?
Answers:
另请参见FPGA与微控制器
高速图像或视频处理就是一个很好的例子。或处理不是直接光学图像的“图像”,例如雷达或基于激光的系统。
要考虑的关键是吞吐量和延迟要求。微控制器可以每微秒服务一次中断(非常粗略)。它一次只能处理一个中断。如果需要精心处理,则会限制您在特定时间内可以服务的数量。
使用FPGA,通常可以立即(在下一个时钟周期)响应输入事件。您可以并行使用许多处理单元。如果您知道您的过滤器需要20个周期,那么这完全与其他任何事情无关。
高度并行的整数密集型计算在FPGA上最有效,特别是在存在复杂的数据依赖性的情况下。但是,它们没有很多板载内存。您可以在侧面添加一些DRAM,但要以延迟为代价。
您可能还需要一个外围设备,或者说一些高速数字总线。您不能将HDMI插入微控制器或从微控制器中弹出。您不能围绕一个构建PCI卡。
简而言之,在需要对大量数据执行少量处理的地方,FPGA是很好的选择;而在需要对少量数据执行大量处理的地方,CPU很好的选择。
HDMI视频流包含大量数据。在一般的视频情况下,它可以由CPU,GPU或ASIC完成,但是如果您需要对其做一点工作(例如,添加覆盖),则可以选择FPGA。
音频流不是很多数据,但是如果您需要对其进行语音识别,那么您将首选CPU而不是FPGA。
虽然您可以在CPU中进行软件定义的无线电,但与CPU相比,使用FPGA处理频谱的比例要大得多。
尽管可以使用FPGA制作键盘控制器,但与FPGA相比,微控制器将更便宜,功耗更低,并且更易于开发高级键盘软件(宏,游戏功能,重新映射)。
当然,您可以通过权衡取舍,在任何一个中都可以做任何事情,但是如果您精通两者,那么您将能够更胜任地权衡取舍,并且可以避免因选择零件而导致的零件成本或开发时间增加。给定问题的错误解决方案。
通常,在可以完成工作的情况下使用微控制器。微控制器通过执行顺序指令来执行逻辑。
FPGA执行该逻辑是因为其硬件门在逻辑上是这样做的。这意味着它可以更快地执行操作,并且可以同时执行许多此类操作。在FPGA中创建和调试与微控制器中相同的逻辑通常更为复杂且困难,因此,当需要额外的速度和低延迟时,可以使用FPGA。
我还没有提到的一个应用是微电子工程或MCU / CPU / GPU / ASIC芯片本身的设计。这些芯片通常通过在HDL中进行设计来原型化,然后在FPGA中实现。这使它们在最终使用HDL创建在处理器或ASIC中生产实际硅所需的布局之前,可以更轻松,更便宜,更快速地进行测试和修改。
一位评论者以软核芯片的形式提到了这一点(尽管他们有错字,并称其为排序核芯片)。您可以使用ARM / 8051 / etc。软核以及所需的任何软核外围设备,并且实质上设计了自己的定制微控制器,该微控制器在FPGA中实现。然后,假设您有足够的资源,则可以将其制作到自己的微控制器中。
如果您喜欢这种应用程序,请查看OpenCores看看有什么可能。
微控制器只能顺序地处理数据,一次只能处理一条指令,因此,如果您的操作非常昂贵,则可能需要以某种方式使计算并行化。处理音频/视频就是一个很好的例子。为了满足这一需求,已经开发了可以并行执行某些任务的数字信号处理器,但是它们的通用性不足以实现任何任意算法,因此这些处理器将适用于许多任务,但并非适用于所有任务。FPGA是通用的硬件。由于您可以从本质上定义自己的硬件设计,然后将其下载到FPGA,因此只要有足够的资源,它就可以实现可以想象的任何算法。
一个具体的例子:肯·佩林(Ken Perlin)提出了他的单纯噪声算法的硬件实现。使用传统的CPU或微控制器可以相对较快地完成此操作,但是使用定制硬件可以使其变得超快。由于我怀疑DSP是否可以解决此问题,因此最简单的方法是FPGA。当然,困难的方法是为您制造一个实际的物理芯片,这非常昂贵。http://www.csee.umbc.edu/~olano/s2002c36/ch02.pdf
微处理器和微控制器可以使用相对较少的电路来完成大量工作的根本原因是,如果微处理机仅需要每秒执行1000次复杂的计算,并且需要20微秒的时间(因此微处理机将可以进行计算2) %的时间),其余98%的时间可将用于该计算的大多数硬件用于其他目的。因此,只要不需要同时使用这些功能,微控制器就可以使用少量的硬件来执行大量不同功能。
FPGA中的电路数量通常可以与微控制器相媲美(FPGA的大小相差几个数量级,微控制器也一样,但是范围重叠)。但是,与微控制器不同,微控制器的电路元件的连接方式有助于将其用于许多非同时任务,而FPGA将被设计为“全时”将其电路的一部分专用于各种任务。如果要让微控制器对100个输入中的每个输入上发生的脉冲数进行计数,则仅限于对足够慢的脉冲进行计数,以使控制器能够依次逐个处理它们(如果所有输入都可以产生脉冲)独立地,即使是快速控制器,也难以在每个输入每秒计数数千个脉冲的过程中遇到麻烦。相比之下,
FPGA实现了硬件逻辑电路或功能块,理论上它可以实现您想要的任何东西。而且这些模块是同时运行的,不太可能像传统的MCU那样逐行运行程序。因此,FPGA的性能要比MCU好得多,但是它需要了解HDL或VHDL语言,它们在语法,样式和概念方面与编程语言不同。
就像我说的那样,它可以实现任何东西,因此,您可以实现带有功能块的MCU来促进高性能的开发就不足为奇了。赛灵思为嵌入式MCU提供了一个功能块,称为Microblaze。因此,您也可以在FPGA中执行嵌入式系统程序。
例如,您想实现一个可编程的音频均衡器,而诸如FFT之类的最繁重的计算部分可以通过功能块来实现,而不是运行软件计算。但是某些简单的任务,例如LCD,I / O接口可以由MCU完成。FPGA使您可以同时拥有MCU嵌入式系统和硬件功能块。