当前位置:首页 > EDA > 电子设计自动化
[导读] 在编写软件时,您有没有遇到过无论怎么努力编码,软件都不能按您期望的速度运行?我遇到过。您有没有想过,“有没有什么简单而且成本不高的方法可将一些代码输入多个定制处理器或定制硬件?”毕竟,您的应用

 在编写软件时,您有没有遇到过无论怎么努力编码,软件都不能按您期望的速度运行?我遇到过。您有没有想过,“有没有什么简单而且成本不高的方法可将一些代码输入多个定制处理器或定制硬件?”毕竟,您的应用只是众多应用中的一个,而且创建定制硬件需要花费时间和成本。是不是这样?

最近听说了赛灵思的高层次综合工具Vivado®HLS后,我开始重新思考这一问题。高层次综合工具与Zynq®-7000 All Programmable SoC的结合为设计开辟了新的可能性,其中Zynq®-7000 All Programmable SoC结合了带有FPGA架构的双核ARM®CortexTM-A9处理器。这类工具可以用C语言,C++语言或SystemC源代码创建高度优化的RTL。近年来,出现很多这项技术的提供商,且其采用率也不断提高。

如果我只用Vivado HLS便能完成要求更高的计算,那么将那些慢速代码迁移到硬件中会有多难?毕竟我经常用C++语言编写代码,而Vivado HLS将C/C++语言作为输入语言。ARM处理器内核意味着我可以在常规环境下运行多数软件。事实上赛灵思还提供了一款软件开发工具(SDK)以及PetaLinux来帮您实现这一目的。

架构问题

从软件角度思考这一转变,我开始更加担心软件接口问题。毕竟,HLS创建的硬件专注于处理硬件接口。我需要一些易于访问的工具(如协处理器或硬件加速器)来加快软件运行速度。而且,我不想编写新的编译器。为了方便与软件的其它部分交换数据,这个接口应该类似于简单的存储单元,我们可以在其中输入信息并稍后读取结果。

然后我有了新的发现。Vivado HLS支持以相对较小的努力轻松创建AXI从接口。这让我开始思考,创建加速器也许没有那么难。于是,我编码了一个简单的实例来探索这种可能性。探索的结果让我惊喜不已。

下面看看我用了什么方法,并思考这种方法所得出的结果。

在我的实例中,我选择了对一系列简单的矩阵运算(如加法和乘法)进行建模。我不想将它限制在固定的大小,因此,我必须同时提供输入阵列及各阵列的尺寸大小。理想的接口会将所有数值作为函数的自变量,例如图1中的代码。

硬件接口需要用一种简单的方法将函数自变量映射到存储单元。图2是支持这一映射的存储器配置。寄存器中保存了有关矩阵的排列方式以及所需运算的信息。指令寄存器将指示执行何种运算。这样我便可以将一些简单的运算融合到一个硬件中。可以用状态寄存器来查看是否正在进行运算或是已经成功完成运算。此外,器件最好还能提供中断支持。

回到硬件设计,我了解到Vivado HLS为阵列自变量留出空间以指定小容量内存。这样,图3所示函数便说明了这种函数性。

假设能够综合AXI从接口,怎样将它用在软件上?我将正常编码环境假设为Linux。还好赛灵思提供PetaLinux,而且PetaLinux提供一种叫做用户I/O器件的机制。UIO可以用简单的方法将新硬件映射到用户内存空间,并具备中断等待能力。这意味着您可以省去编写器件驱动程序所耗费的的时间和流程。图4显示了这个系统。

这种方式当然也有缺陷。例如,无法在DMA中使用UIO器件,因此您必须在器件内存中构建矩阵,并在构建完成后手动复制出来。如果需要,将来可以通过定制器件驱动程序解决这个问题。

用Vivado HLS综合硬件

现在回到综合AXI从接口的话题。它的综合难度有多大?我发现这些编码限制非常合理。除内存的动态分配以外,大多数C ++语言都可以使用。

毕竟硬件在运行过程中不能生产其本身。这限制了标准模板库(STL)功能的使用,因为这里大量使用了动态分配。只要数据保持静态,多数功能都可以使用。起初这项任务似乎非常繁重,但我发现这并不是什么大事。另外,Vivado HLS允许C++类、模板、函数和运算符重载。我的矩阵运算可轻易归入定制矩阵分类。

增加I/O来创建AXI从接口非常简单。只需增加一些能够指示包含哪些端口以及使用哪些协议的编译指示即可。

只要我不按下所有旋钮,运行这款综合工具非常简单。图5展示了其中各个步骤,在此我不再详细解释。需要就目标技术和时钟速度对Vivado HLS进行一些引导。之后涉及的程序会密切关注违反政策的报告并研究分析报告以确保Vivado HLS按我所期望的方式运行。工具用户必须对硬件方面有所了解,但有一些技术课程可以解决这个问题。还存在综合前后运行仿真以检验预期行为的问题。

Vivado IP Integrator让AXI从接口连接到Zynq SoC硬件变得轻而易举,并打消了对信号连接错误的顾虑。赛灵思甚至拥有我所使用的ZedBoard开发系统的系统概述,并用IP Integrator导出数据用于软件开发套件。

清除瓶颈

我对结果非常满意,我希望能用这款芯片与工具集的组合做更多事情。我并没有探索所有的可能性。例如,Vivado HLS还支持AXI主接口。AXI会允许加速器从外部存储器复制矩阵(尽管这样也可能存在安全问题)。不过我强烈建议所有面临代码瓶颈的人都能考虑这个工具集。这里提供足够的培训课程、资源和材料以实现快速匀变,其中包括Doulos提供的课程、资源和材料。如需了解更多信息,敬请访问:www.doulos.com。

图1 – 调用加速器示例

地址 寄存器名称 目录 位元

内容

0 Matrix0_ptr RW 32

Matrix 0数据地址

4 Matrix0_shape RW 32 Matrix 0行 Matrix 0列
8 Matrix1_ptr RW 32

Matrix 1数据地址

12 Matrix1_shape RW 32 Matrix 1行 Matrix 1列
16 Matrix2-ptr RW 32

Matrix 2数据地址

20 Matrix2_shape RW 32 Matrix 2行 Matrix 2列
24 Matrix3_ptr RW 32

Matrix 3数据地址

28 Matrix3_shape RW 32 Matrix 3行 Matrix 3列
32 -reserved- - 32

 

36 -reserved- - 32

 

40 Command RW 32 0 enum
44 Status RW 32 0 enum

8192 × 32存储器

图2 – 寄存器汇总表

图3 – 加速器函数API

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

8b10b编码作为数字通信领域中的一项重要线路编码方案,其核心理念在于将每8位数据映射到10位编码中。这个映射过程严格按照特定规则进行,旨在保证编码中的电平转换足够,以维持信号的直流平衡,并提供足够的时钟信息,使接收端能...

关键字: FPGA 8b/10b编码 IC设计

在FPGA和IC设计领域,经常会面临一个挑战:多个端口同时竞争一个端口的数据。在这种情况下,采用RR调度策略可能是一种解决方案。

关键字: FPGA 嵌入式系统 IC设计

2024 年5月13日 – 专注于推动行业创新的知名新品引入 (NPI) 代理商™贸泽电子 (Mouser Electronics) 是英特尔®产品的全球授权代理商。英特尔®宣布正式成立Altera™,作为其独立运营的全...

关键字: FPGA 人工智能 以太网

央视《今日说法》栏目近期报道了一名90后程序员通过开发非法视频搬运软件在不到一年的时间里获利超700万,最终获刑的案例。

关键字: 程序员 软件

上海2024年4月22日 /美通社/ -- 恶性的攻击和意外事件总是防不胜防,提前部署灾备方案可以在遭遇意外时尽可能减少企业损失。那么面对无处不在的勒索病毒和潜在风险,为什么依然有很多企业还会遭遇数据丢失?

关键字: 勒索病毒 软件 电脑 群晖数据

SAP(思爱普)近日发出的裁员计划,不仅涉及全球范围内约8000个职位,更是在中国区造成了近1500名正式员工和合同工不续的情况。

关键字: 软件 互联网

上海2024年4月17日 /美通社/ -- 每年4月17日是世界血友病日。今年,世界血友病日以"认识出血性疾病,积极预防和治疗"为主题,呼吁关注所有出血性疾病,提升科学认知,提高规范化诊疗水平,让每一位出血性疾病患者享有...

关键字: VII 动力学 软件 BSP

自 ChatGPT 出现以来,生成式人工智能 (GenAI) 在亚洲和大洋洲的开发和部署势头强劲,Omdia 的最新《亚洲和大洋洲的生成式人工智能 - 2024 年:通过本地化实现民主化》报告表明,到 2024 年底,G...

关键字: 人工智能 软件 AI

德国埃朗根2024年4月16日 /美通社/ -- Elektrobit 今日宣布推出 EB zoneo GatewayCore——首款支持、配置和集成现代微控制器新一代硬件加速器的软件产品,可应用于先进的汽车电子/电气架...

关键字: 汽车 软件 硬件加速 通信网络

Bluespec支持加速器功能的RISC-V处理器将Achronix的FPGA转化为可编程SoC

关键字: RISC-V处理器 FPGA SoC
关闭
关闭