0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何采用FPGA更新传统系统提升计算能力

电子设计 来源:英特尔FPGA 作者:英特尔FPGA 2021-01-25 16:01 次阅读

FPGA 技术更新传统系统是许多嵌入式系统设计人员都知道的场景。但现有设计确实需要更新,这其中就包括连接互联网、 IoT等。当然,我们也需要进一步增强安全性。尤其考虑到目前人们热衷于人工智能,大家对深度学习推理或机器视觉又有了新的需求。

尽管现在已将系统整合至物联网,但仍然面临一个迫在眉睫的问题——这些更改将对系统硬件造成影响。直接使用 CPU 可以缓解所有的问题(图 1)。但对于小型嵌入式设计(一开始就只有一英寸的小外形)来说,由于存在成本、功耗和散热方面的限制,这种蛮力法可能行不通。此时,必须采用 FPGA 方法。

图1.更新传统系统可能需要采用新的方法来提升计算能力

事实上,系统中通常有一个老旧的小型 FPGA 负责执行实用工作:充当端口扩展器或设备控制器。然而,现在的低端 FPGA 可以充当硬件加速器,将新的计算要求拉回至现有系统处理器范围之内。

采取下一步行动

我们需要采取进一步行动,考虑将系统(或子系统)的 CPU 或微控制器单元 (MCU) 也整合到 FPGA 中是否可行?显而易见,答案是“当然不可行”。众所周知,FPGA 中的软 CPU 内核尺寸大、速度慢、价格贵。除了对于重要的嵌入式系统来说,这些概括性说法都不对。

我们不是在讨论拥有强大 CPU 性能的系统。(比如 Arm* Cortex*-A53 内核集群。)在硬件中包含此类 CPU 集群的中端 FPGA,但该主题不在本文介绍范围之内。今天我们讨论的是处理器适用范围更广的系统(或总体设计中的子系统):微控制器中的 Cortex-M 级内核,或真正的传统 CPU,如 68000。通常情况下,这种老旧处理器不适用于系统设计,因为它们始终不愿意接触古老、文档不完整的代码,直至最后生命周期结束被迫淘汰。我们要介绍的是,通常可以将这种小型或老旧 CPU 整合至低端 FPGA 中(图 2)。

图 2.小型现代 FPGA 可以吸收旧设计中所有的传统处理器

“芯”起点在哪儿?

如果您有用 C 或 C++(最好是通过原始测试工作台)编写的文档化源代码,那么情况将对您非常有利。您可以从适用于在 FPGA 中进行软实施的整个 CPU 内核选项中进行选择。然后,还可以针对所选的 CPU 重新编译并测试代码。

遗憾的是,测试结果并不总是乐观的。过去,微处理器的编译器并不总是适合嵌入式设计,尤其是对于存在实时限制的子系统。老代码或保守型工程师编写的代码,可能完全是用汇编语言编写的。现代代码主要是用 C 语言编写的,其中关键例程用汇编语言手动编写。无论采用哪种语言编写,都至少会有一部分代码锁定在特定的指令集架构中。

其次,需要谨慎考虑硬件独立性程度,不是语言方面,而是编码风格方面。在过去节省代码空间和缩短延迟至关重要的时候,往应用代码中嵌入中断处理程序、驱动程序和物理 I/O 地址等不良实践通常被认为是明智之举,这些做法会加大移植到新硬件的难度。过去,一些极其糟糕的想法,比如编写时序依赖型代码,通常被认为更加明智。这种代码可能需要重新编写,才能在快速的现代硬件上运行。但即使存在汇编语言源代码和不合时宜的编码风格,我们仍然可以采用实际方法将传统模块整合到 FPGA 中。

第一种方法是,如果 CPU 的确非常老旧,则使用开源寄存器传输级 (RTL) 模型在 FPGA 中重新实施传统微处理器或微控制器。Github 等资源拥有许多用于传统处理器(包括 6502、Z80、6809、68000 和 8086)的 Verilog 模型。但在这些内核中进行设计之前,必须考虑几个问题。

第一个问题是合法性。因为 Verilog 可用并不意味着您拥有在商业产品中使用该设计的合法权利。有一些模型是研究人员和业余爱好者编写的,没有考虑到知识产权。因此,很久之前的一些架构可能实际上位于公共域中。

另一个问题是作者的意图。例如:Verilog 是架构的近似功能描述。它的目的是仅在模拟中执行代码,还是封装在用户控件逻辑和 I/O 中?或者,该模型是否包含进入微处理器芯片的其他所有硬件?您必须匹配 Verilog 模型的特性和传统系统的需求,否则将要花费大量的时间来了解旧芯片的劣势。

接下来就是一些令人伤神的细节问题。SiFive 产品经理 Jack Kang 指出,与现代 CPU 一样,传统 CPU 也在整个产品生命周期中经历了多次修改,每次修改都会纠正一些错误或劣势。Verilog 代表哪个版本?或者它是一个理想化版本,代表着作者假定芯片怎样正常运行的方式?最后是设计师的谨慎程度。该模型是否按照实际传统芯片一个循环接一个循环地运行?是否启动了您需要使用的操作系统?是否成功合成过?

如果 Verilog 模型无法正常运行,还有另一个选择。老旧的 CPU 速度非常慢,以致于在当前 FPGA 中的微小现代 RISC 内核上运行的指令集模拟器都可以实时地遍历传统代码,尤其是当麻烦序列卸载到 FPGA 中其他位置的状态机上时。这种方法不能简单地呈现周期精确或时序精确,但在功能上是正确的。而且它还可以将移植问题从硬件域转换到软件域,在软件域,您可以访问整个调试工作台,这样移植问题处理起来容易得多。

如何实施 CPU?

讨论了将传统代码迁移至新系统的可行性和难度后,接下来的问题是如何在低端 FPGA 中实施 CPU 内核。我们之前讨论过复制传统 CPU 的情况,现在我们可以来了解下实施现代高性能 CPU 的选项。

主要问题是处理器内核依赖部分硬件结构,这种结构在 ASIC 中以标准单元甚至是自定义逻辑的形式实施,无法在 FPGA 结构中轻松高效地复制。因此,我们必须了解三种不同情况(图 3):

仅通过用于模拟或 ASIC 合成的 Verilog 模型进行合成的 CPU 内核 — 即所谓的开箱即用场景。

拥有面向 FPGA 合成手动优化的 RTL 的内核。

从一开始就开发了架构以在 FPGA 中实施的内核。每种方法的可用性、规模和性能都不相同。这些方法都适用于现代低端 FPGA。

图3.CPU 内核中的三种 FPGA 优化级别。

开箱即用

尽管并不是每家 CPU 内核知识产权 (IP) 厂商都专门针对 FPGA,但大多数 IP 提供商都至少提供两条迁移至 FPGA 内核的路径。最明显的路径是授权面向内核的 RTL 源代码,并通过 FPGA 厂商的工具链运行该代码。实施这条路径会遇到很多挑战,全都是因为该 RTL 用于 ASIC 合成,而非 FPGA 合成。

特别是首次在 FPGA 中尝试运行该代码,那么遇到第一个问题将是:源代码中的有些东西是采用 FPGA 合成工具无法处理的。代码可能与合成工具不兼容的方式被隐藏或加密,可能包含您的工具无法识别的编译指示、信号命名,甚至是带有破坏性的注释约定。您可以编辑这些内容,但会因此产生第二个问题:许可。

如果您使用用于 ASIC 开发的 Verilog 源代码,可能需要进行编辑。这意味着您需要包含完整文档的未隐藏的源代码,以及/或 IP 厂商的大量支持。这些都是可用的,但它们都是针对财力雄厚、产量巨大、拥有大型法务部门的客户所编写和定价的。

还有另一条路径:一些 IP 厂商提供评估或开发套件,您可以通过它们在 FPGA 中实施 CPU 内核。该内核可能没有经过高度优化,但至少可以运行和验证,而且其速度对软件开发来说足够快。

SiFive 产品经理 Jack Kang 表示,他的一些客户已经采用了这种方法。该公司的 CoreDesigner 工具支持您从各种 RISC V 预配置内核开始,根据您特定的需求调整配置,然后输出 RTL。但该工具也会在 SiFive 的开发套件上输出一个关于 FPGA 的编程文件。

Kang 还指出,“RISC V 的这种 FPGA 实施并未面向 FPGA 使用进行高度优化,但仍然包含不到 20K 的查找表,而且速度可以达到 100 Mhz 左右,当然这很大程度上取决于配置。这种规模适合许多留有大量空间的低端 FPGA,支持您快速、轻松地将常用开源内核整合到系统中。”

优化方法

有一些方法可以改善这些数据,但需要采取一些措施。之所以有这种改善机会,是因为 CPU 中有一些结构并不适合 FPGA 逻辑结构。

FPGA 使用大量相同逻辑元件阵列来实施逻辑,每个元件都包含一些查找表 (LUT) — 通常每个 LUT 包含 4 个输入 — 以合成逻辑函数,以及一个或多个触发器。这种安排适用于大多数随机逻辑、管道和简单状态机。对于高扇入逻辑,由于可能出现在算法硬件和地址解码器中,因此合成往往会生成一长串窄逻辑元件,从而消耗互连并导致延迟。对于基于内存的功能,比如寄存器文件、高速缓存和相联内存,一次将功能映射至逻辑元件的触发器(一或二位)可能要消耗大量资源,即使厂商工具足够智能,尝试将逻辑元件的 LUT 和触发器隔离,并单独使用它们。

很久以前,当 FPGA 首次用于数据包切换、数字信号处理和类似应用时,这种不匹配就非常明显。为了解决这个问题,FPGA 厂商在逻辑结构中嵌入了大型可分割 SRAM 模块和硬件乘法累加模块。通过使用这些资源,通常可以显著改进 CPU 实施规模,有时还可以提高性能。但可能需要在 RTL 源代码中或合成过程中运用一定的知识进行干预。如果熟练的 FPGA 用户仔细检查 RTL,并面向 FPGA 合成使用已知最佳 FPGA 编码实践对其进行调优,能够进一步提升性能。

特定于 FPGA 的内核

行业标准 CPU 内核,比如 Cortex-M 家族或 RISC V,提供熟悉度、成熟的(或以 RISC 为例不断壮大的)工具和软件生态系统,以及在 FPGA 厂商之间轻松迁移或迁移至 ASIC 实施的机会,甚至在某些情况下还可迁移至第三方现成的 SoC。但反过来要付出一定的代价:费用、规模,有时还有性能。

如果您想最大限度地优化 FPGA,还需采取另一个步骤:不仅优化实施过程,还要优化 CPC 和指令集架构本身:从一张白纸开始,仅添加对 FPGA 友好的结构。很久以前,当 FPGA 首次变得足够大,可容纳 CPU 内核时,主要 FPGA 厂商就已经开始做出这样的努力。他们始终在做出这样的努力:在英特尔案例中为 Nios® II 处理器,其以发展演进为专有 CPU 架构,不断壮大由工具、软件和 FPGA 外设 IP 组成的生态系统。

目前,这些内核家族提供多种类型的产品,从具备最少特性的小型微内核 (和 Arm 的 Cortex M0 没什么不同)到全功能、支持 Linux 的 CPU。其中许多型号都适用于厂商的低端 FPGA。例如,紧凑型 Nios Iie 内核只需大约 1000 个逻辑元件,但速度可达到或超过 75 MHz。在另一个极端,具备高速缓存和内存管理功能,且能够运行 Linux* 操作系统的内核大约需要 5000 个元件。在这两者之间还有许多选择来满足特定需求。甚至这种全功能配置也足够小,不但可以将多核 CPU 集群放在一台低端英特尔® MAX® 10 设备中,还仍然拥有足够的空间。

因此,有许多方法可以将传统 CPU 功能迁移至低端 FPGA,同时仍然拥有丰富的资源来支持传统接口或控制器功能、IoT 连接、安全性,或机器学习加速。古老的机器代码可在 FPGA 上运行,以向老旧 CPU 致敬,也可在现代内核的指令集模拟器上运行。

高级语言代码可面向现代代码进行编译。极具挑战性的代码模块可以卸载到 FPGA 中的加速块中,然后通过多种优化程度各不相同的方法,得到许可并在 FPGA 中实施现代 CPU 内核的某个版本。为了最大限度地提高资源效率,厂商专有 CPU 内核可在各种性能和功能点中实现最佳的紧凑性,且几乎适合所有的设计场景。
编辑:hfy

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7506

    浏览量

    151161
  • FPGA
    +关注

    关注

    1628

    文章

    21689

    浏览量

    602363
  • 嵌入式系统
    +关注

    关注

    41

    文章

    3576

    浏览量

    129297
  • 机器视觉
    +关注

    关注

    161

    文章

    4352

    浏览量

    120187
  • 深度学习
    +关注

    关注

    73

    文章

    5495

    浏览量

    121050
收藏 人收藏

    评论

    相关推荐

    通过边缘计算网关轻松实现plc的程序更新

    ,从而制约了生产效率和智能化水平的提升。天拓四方TDE边缘计算网关作为一种高性能的边缘计算设备,为PLC程序的更新提供了一种高效、可靠的解决方案。 它能够实现对工业数据的实时采集、处理
    的头像 发表于 11-20 09:53 127次阅读

    计算传统计算的区别

    根据实际需求动态获取资源,无需进行大量的预先投资。 管理方式:云计算平台负责资源的分配、管理和维护,用户无需关心底层硬件和软件的细节。 传统计算 : 资源获取:用户需要自行购买和部署硬件设备,以及安装和维护软件系统
    的头像 发表于 10-24 09:13 403次阅读

    FPGA在图像处理领域的优势有哪些?

    。这种并行处理能力使得FPGA在处理大规模图像数据时表现出色,能够实时完成复杂的图像处理算法。 二、高灵活性 FPGA具有很高的灵活性,可以根据需要实时调整硬件架构。这意味着当图像处理算法需要
    发表于 10-09 14:36

    智慧水利山洪灾害防御能力提升系统

    一、背景随着科技的快速发展,智慧水利技术逐渐成为解决水资源管理、水环境保护以及水灾防治等问题的关键手段。其中,智慧水利山洪灾害防御能力提升系统,作为智慧水利的重要组成部分,其在保障人民生命财产安全
    的头像 发表于 08-05 14:42 232次阅读
    智慧水利山洪灾害防御<b class='flag-5'>能力</b><b class='flag-5'>提升</b><b class='flag-5'>系统</b>

    基于 FPGA 的会议系统设计

    固定,当会议一端有多人参与时,就需要每人都单独开一个窗口才能有较好的效果,较为不便。基于此,我们设计了一个新的会议系统,以更好地适应多人会议的需求。 本系统以 Xilinx PYNQ-Z2 FPGA
    发表于 08-01 18:40

    谈一谈FPGA设计中的功率计算

    随着工艺技术的越来越前沿化, FPGA器件拥有更多的逻辑、存储器和特殊功能,如存储器接口、 DSP块和多种高速SERDES信道,这些发展不断地对系统功率要求提出挑战。 功率计算的关键是两方面:静态
    发表于 07-31 22:37

    FPGA在自动驾驶领域有哪些优势?

    领域的主要优势: 高性能与并行处理能力FPGA内部包含大量的逻辑门和可配置的连接,能够同时处理多个数据流和计算任务。这种并行处理能力使得FPG
    发表于 07-29 17:11

    FPGA与MCU的应用场景

    错误还请指正。 首先,FPGA(现场可编程门阵列)和MCU(微控制器)都是两种常见的集成电路。尽管它们都可以被视为“小型计算机”,但它们在可编程性和处理能力方面存在显著差异。但是FPGA
    发表于 07-29 15:45

    高通打破Android系统更新壁垒,提升中低端手机用户体验

    ,中低端及入门级手机却常常面临更新支持不足的尴尬境地。针对这一现状,高通公司正积极采取行动,力图打破这一僵局,提升中低端手机的系统更新频率和用户体验。
    的头像 发表于 06-29 16:41 2114次阅读

    基于FPGA的类脑计算平台 —PYNQ 集群的无监督图像识别类脑计算系统

    显著的速度提升。 (3)本设计也为对应用进行计算密集点的分析、SNN 工作负载分析以及对主要计算密集 点进行 FPGA 加速等课题相关议题提供理论基础。 1.3 主要技术特点
    发表于 06-25 18:35

    如何提升嵌入式编程能力?

    如何提升嵌入式编程能力? 要提升嵌入式编程的能力,可以从以下几点学习: 1. 理解硬件:熟悉你正在编程的硬件平台,包括微控制器、处理器、内存、输入/输出设备等基础理论与应用。 2. 学
    发表于 06-21 10:01

    边缘计算单元多接入能力怎么算

    和负载特征等。通过综合考虑这些因素,可以更准确地评估边缘计算单元的多接入能力,并采取相应的优化措施来提高系统的性能和可靠性。
    的头像 发表于 05-16 17:51 296次阅读

    借助全新 AMD Alveo™ V80 计算加速卡释放计算能力

    对于大规模数据处理,最佳性能不仅取决于原始计算能力,还取决于高存储器带宽。 因此,全新 AMD Alveo™ V80 计算加速卡专为具有大型数据集的内存受限型应用而设计,这些应用需要 FPGA
    发表于 05-16 14:09 203次阅读
    借助全新 AMD Alveo™ V80 <b class='flag-5'>计算</b>加速卡释放<b class='flag-5'>计算</b><b class='flag-5'>能力</b>

    《RVfpga:理解计算机体系结构》3.0 版本更新上线

    《RVfpga:理解计算机体系结构》3.0版本更新上线,扫码进入官网注册申请获取。《RVfpga:理解计算机体系结构》(以下简称“《RV
    的头像 发表于 01-18 08:27 755次阅读
    《RV<b class='flag-5'>fpga</b>:理解<b class='flag-5'>计算</b>机体系结构》3.0 版本<b class='flag-5'>更新</b>上线

    FPGA在高性能计算中的优势及其用例都有哪些?

    传统计算系统更高的速度和更大的规模执行复杂的计算和数据处理任务。HPC 旨在解决计算密集型问题并在尽可能短的时间内分析大量数据集。它涉及使用先进的
    的头像 发表于 12-09 12:15 1042次阅读
    <b class='flag-5'>FPGA</b>在高性能<b class='flag-5'>计算</b>中的优势及其用例都有哪些?