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

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

3天内不再提示

HLS中组合电路对设计的影响

OpenFPGA 来源:OpenFPGA 2023-11-03 09:04 次阅读

组合电路在 HLS 中的重要性

该项目通过一个示例演示了 HLS 中组合电路对设计的影响。

3aa9319a-79e1-11ee-939d-92fbcf53809c.png

在 HLS 中描述组合任务非常重要,因为它直接影响整个系统的性能。这里我举一个简单的例子来解释一下这个问题。

介绍

高级综合工具将算法转换为等效的 RTL 描述。该描述代表逻辑电路,可以通过ASICFPGA技术来综合。

3abe6da8-79e1-11ee-939d-92fbcf53809c.png

逻辑电路可以是以下两种类型之一:组合电路或时序电路。组合电路的输出仅是其输入上的当前逻辑值的函数。如图1所示,只需使用基本逻辑门即可实现组合电路,不需要存储单元。

3ada9b54-79e1-11ee-939d-92fbcf53809c.png

图1

另一方面,时序电路的输出不仅取决于其输入的当前值,还取决于过去时间的输入值的历史记录。

电路状态通常模拟输入值历史的影响。一组存储单元可以代表这些状态。

3af3d93e-79e1-11ee-939d-92fbcf53809c.png

图2

图2显示了由组合电路和一组保存电路状态的存储单元组成的时序电路的结构。存储器单元可以是触发器、BRAM或DDR存储器的形式。

组合部分接收两组数据:主输入和状态。然后它生成两组输出:主要输出和下一个状态。系统中的其他模块使用主输出,而下一个状态数据修改存储单元并定义新的电路状态。

动机

所有组合电路都需要一个时间间隔,以便在其输入发生任何变化后产生稳定的输出。这个时间被称为传播延迟。组合电路中从输入到输出的不同路径可能具有各种延迟。最长路径也称为关键路径,被定义为设计传播延迟。

在时序电路中,时钟周期对设计性能有直接影响。图 2 中组合部分的传播延迟决定了最小时钟周期。因此,它的好坏直接影响到整个系统的性能。

时序电路通常需要几个时钟周期来完成其相关任务。所需时钟周期的最大数量称为设计延迟。组合部分也对相关时序电路的延迟有直接影响。

因此,了解如何在 HLS 中设计高效的组合电路是在硬件上开发高性能算法的第一步。

组合电路的影响

在这里,将通过一个例子来解释正确的 C/C++ 描述组合设计如何能够加快实现速度。

假设我们要在如图 3 所示的 Basys3 FPGA 评估板上可用的四个七段上显示数字的四位十进制数字。

3b0e9f1c-79e1-11ee-939d-92fbcf53809c.png

图3

第一步是提取四位十进制数字,然后找到每个数字对应的七段代码,并将代码发送到板上的段选择上。这里我只解释第一个任务,即提取四位小数。

让我们考虑以下 Vivado-HLS 代码,该代码提取 4 位无符号整数的十进制数字。设计顶部函数是extract_decimal_digits ,它接受输入参数(即a )并生成四个输出(即 digital_1、digit_2、digit_3、digit_4)。它调用函数get_digit四次来提取每个数字。get_digit函数提取接收到的号码的第一位数字,然后对其进行修改。

3b2b29a2-79e1-11ee-939d-92fbcf53809c.png

如果我们执行高级综合过程来生成等效的 RTL 设计,则图 5 显示了 Basys3 板的报告。Vivado-HLS 综合过程利用参数化的 Xilinx LogiCORE 除法器内核来实现模运算。该代码具有流水线结构。

可以看出,设计时钟周期约束为10 ns(用1注释)。流水线设计需要 35 个周期来完成其任务,即 0.35 us(用 2 表示)。此外,它还使用了 12 个 DSP、1474 个 FF 和 1057 个 LUT。

3b53dbae-79e1-11ee-939d-92fbcf53809c.png

图5

现在让我们考虑以下实现,将模运算替换为其等效的算术表达式,即 a%10 = a – 10*(a/10)。如果我们直接使用这个表达式,编译器会优化代码,再次使用模运算,并生成相同的 RTL 描述。为了阻止编译器优化代码,我使用了一个单独的子函数来执行除 10 运算符。另外,还关闭了编译器函数内联功能。

3b5e692a-79e1-11ee-939d-92fbcf53809c.png

现在,如果我们综合此代码,图 7 将显示相应的报告。

该电路完全由组合电路搭建。电路传播延迟为23.607 ns,使用28个DSP和262个LUT。

3b7790c6-79e1-11ee-939d-92fbcf53809c.png

图7

比较这两种实现方式:图 8 显示了比较结果。在该图中,“Solution 1”对应于使用模运算符的第一种方案,“Solution 2”代表第二种方案。

3b9fef8a-79e1-11ee-939d-92fbcf53809c.png

可以看出,第一种方案需要 35 个时钟周期,由于时钟周期为 10 ns,因此需要 350 ns才能生成输出。然而,第二种方案只需要 23.607 ns 即可生成输出。所以第二个实现速度快了 14.83 倍。

此外,第二种方案在 FPGA 上使用的资源要少得多。

结论

设计高效的组合电路是在 HLS 中开发算法或系统控制器的第一步。多种优化技术和编码风格可用于描述复杂算法的组合部分。






审核编辑:刘清

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

    关注

    13

    文章

    469

    浏览量

    42206
  • asic
    +关注

    关注

    34

    文章

    1156

    浏览量

    119263
  • RTL
    RTL
    +关注

    关注

    1

    文章

    377

    浏览量

    59064
  • 组合电路
    +关注

    关注

    0

    文章

    10

    浏览量

    6676
  • HLS
    HLS
    +关注

    关注

    1

    文章

    126

    浏览量

    23683

原文标题:组合电路在 HLS 中的重要性

文章出处:【微信号:Open_FPGA,微信公众号:OpenFPGA】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    探索Vivado HLS设计流,Vivado HLS高层次综合设计

    作者:Mculover666 1.实验目的 通过例程探索Vivado HLS设计流 用图形用户界面和TCL脚本两种方式创建Vivado HLS项目 用各种HLS指令综合接口 优化Vivado
    的头像 发表于 12-21 16:27 3212次阅读

    如何在HLS 14.3编写pow功能?

    嗨〜 如何在HLS 14.3编写pow功能? HLS 14.3不支持exp和pow功能。我在我的代码写了“#include math.h”。但是,它不起作用。 另外,我想知道C代码
    发表于 03-05 13:40

    HLSFFT的反向输入算法不能实现

    你好, 我想在HLS实现反向输入和自然输出算法。 但是,结果始终是: 我的代码是:void reverse_fft(compnum xin [FFT_SIZE]){ const int LH
    发表于 03-06 12:48

    如何使用Vivado HLS生成了一个IP

    你好,我使用Vivado HLS生成了一个IP。从HLS测量的执行和测量的执行时间实际上显着不同。由HLS计算的执行非常小(0.14 ms),但是当我使用AXI计时器在真实场景测量它
    发表于 05-05 08:01

    合成的Vivado HLS的Pragma错误怎么解决

    模拟过程完成没有0错误,但在合成期间显示错误。我无法找到错误。我在合成期间在HLS工具收到这样的错误“在E包含的文件:/thaus / fact_L / facoriall
    发表于 05-21 13:58

    在VIVADO HLS运行C \ RTL协同仿真,为什么报告NA仅用于间隔

    嗨,大家好,我有一个问题,在VIVADO HLS 2017.1运行C \ RTL协同仿真。我已成功运行2014和2016版本的代码。任何人都可以告诉我为什么报告NA仅用于间隔
    发表于 05-22 15:59

    【正点原子FPGA连载】第一章HLS简介-领航者ZYNQ之HLS 开发指南

    处理所需的电路。算法的本质定义出数据通路和控制元件,设计者可以在 HLS 采取专门的步骤来最小化控制元件的复杂度。调度和绑定HLS 是由两个主要过程组成的:调度(Scheduling
    发表于 10-10 16:44

    Vivado HLS设计流的相关资料分享

    多个HLS解决方案2.实验内容实验中文件包含一个矩阵乘法器的实现,实现两个矩阵inA和inB相乘得出结果,并且提供了一个包含了计算结果的testbench文件来与所得结果进行对比验证。...
    发表于 11-11 07:09

    FPGA高层次综合HLS之Vitis HLS知识库简析

    1、HLS最全知识库介绍高层次综合(High-level Synthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。对于AMD Xilinx而言
    发表于 09-07 15:21

    使用Vitis HLS创建属于自己的IP相关资料分享

    1、使用Vitis HLS创建属于自己的IP高层次综合(High-level Synthesis)简称HLS,指的是将高层次语言描述的逻辑结构,自动转换成低抽象级语言描述的电路模型的过程。对于AMD
    发表于 09-09 16:45

    HLSRTL无法导出IP核是为什么?

    请教一下,我在HLS里面要将以下程序生成IP核,C Synthesis已经做好了,但是在export RTL的时候一直在运行 int sum_single(int A int B
    发表于 09-28 06:03

    hls协议是什么?hls协议详细介绍

     摘要:HTTP Live Streaming(缩写是HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。今天主要以HLS协议为中心讲述它的一些原理。
    发表于 12-10 09:25 5.5w次阅读

    hls之xfopencv

    vivado本身集成了opencv库以及hls视频库了,opencv不能被综合导出为RTL电路hls视频库的功能有所欠缺,因此引入xfopencv作为既可以被综合导出为RTL电路,也
    的头像 发表于 09-09 15:07 1066次阅读

    HLS最全知识库

    对于AMD Xilinx而言,Vivado 2019.1之前(包括),HLS工具叫Vivado HLS,之后为了统一将HLS集成到Vitis里了,集成之后增加了一些功能,同时将这部分开源出来了。Vitis
    的头像 发表于 01-15 11:27 1501次阅读

    将VIVADO HLS设计移植到CATAPULT HLS平台

    电子发烧友网站提供《将VIVADO HLS设计移植到CATAPULT HLS平台.pdf》资料免费下载
    发表于 09-13 09:12 2次下载
    将VIVADO <b class='flag-5'>HLS</b>设计移植到CATAPULT <b class='flag-5'>HLS</b>平台