UG1270 Reading Notes(1)

博客围绕FPGA HLS硬件函数优化展开,介绍优化过程由指示和原则组成,阐述自顶向下和自底向上两种优化流程。还提及基本性能评估的计时、间隔、时延等指标,以及对指标和性能的优化方法,如使用LOOP_TRIPCOUNT、流水线等,最后给出不同C代码风格的流水策略。

UG1270
Chapter 1 Introduction
1.优化过程由两部分组成:指明采取何种优化的指示(directives)和优化应该以怎样方式确定而有效被施加的原则(methodology)
2.SDSoC虽然支持HLS Pragmas,但是不支持施加于接口的pragmas(interface、array partition、data_pack等)

Chapter2 Optimizing the Hardware Function

  1. 施加硬件函数优化的两种流程:自顶向下(Top-down)和自底向上(Bottom-up)。前者指程序到硬件函数的分解在SDSoC环境中进行,让系统编译器自动生成函数流水线在数据流模式下工作,最后每一个硬件函数的微体系结构使用HLS来优化;后者指每个硬件函数首先独立用HLS进行优化,使用生成的已经优化的硬件函数在SDSoC环境中集成为一个系统。
    在这里插入图片描述
    上图为优化步骤

    Improve Area指的是减少所用PL资源,事实上,在性能达标的情况下,为了减少资源而强行对设计进行优化没有什么额外的好处。

  2. 在施加任何优化之前,首先必须了解硬件函数的基线指标。基本性能评估的三大指标是:计时(timing)、间隔(interval)、时延(latency),这三大指标可以在综合后生成的报告中查看。

    计时(timing):展示了目标时钟频率和当前设计估测的时钟频率。如果估测的时钟频率超过目标时钟频率,说明可能此设计满足不了设计目标。此时可以调整期待的目标时钟频率(Data Motion Network Clock Frequency)。特别的,如果超过的并不多(20%以内),那么此设计有可能在后续的优化中满足目标要求。

    启动距离(Initiation Interval,II):表示的是函数可以接受下一轮新输入需要经过的时间,这对于一般的系统来说是最重要的参考指标。最理想的函数应该是每一个时钟就处理一个新的数据样本,比如传入函数的参数最大长度是N,那么最好能达到的II=N+1,表示设计在N个时钟周期内完成了N个样本的处理,并在下一个时钟周期可以接受新的数据。
    当然也可以生成II<N的设计,但是那是没有必要的,也会耗用大量的PL资源,其实设计可以以一个比系统其他组成部分更快的速度运行就完全足够了。类似的,循环启动距离(loop initiation interval)表示要下一轮循环开始处理数据的时间。

    时延(latency):表示函数需要完全计算出所有输出结果的时钟周期,它仅仅指数据从提供到结果被算出这段时间。循环迭代时延(loop iteration latency)是指完成一次循环迭代需要的时钟周期,循环时延(loop latency)则表示完整完成一次循环的时间。这里还有一部分不太理解:
    在这里插入图片描述
    Area Estimate:这部分强调的是此设计占用了多少PL资源,最重要的衡量指标是使用率(utilization),超过100%表示资源使用超额,但是就像timing一样,后续的优化有可能会减少所用资源的开销。

  3. 对指标的优化:LOOP_TRIPCOUNT,当设计中含有循环,而循环的次数为变量值时,综合之后的报告无法正确的报告时延或间隔,取而代之的是?。这时候我们可以用LOOP_TRIPCOUNT来为HLS手工指定一个我们自己对循环次数的的预估值帮助它完成性能评估报告,此优化不对设计本身的综合产生任何影响。

  4. 对性能的优化:流水线(PIPELINE,DATAFLOW,RESOURCE,Config Compile) PIPELINE:使一个循环或者函数的内部操作并行执行来减少启动距离。
    DATAFLOW:启动任务级并行,使得函数和循环可以并行执行。
    RESOURCE:在变量被实现为硬件时指明对硬件资源流水化,比如说我们将数组综合为双端口RAM,当循环展开时,就可以借助双端口RAM实现并行化。(一般来说很少用到,除非要榨干最后一点并行化)
    Config Compile:在自底向上的设计流程中,让循环能够按照它的迭代次数自动流水化。 注意以下几点:
    A.有些函数包含子函数,在子函数没有流水化的情况下,将主函数流水化性能提升可能会很有限,这部分瓶颈就是子函数没有流水化导致的。

    B.有些循环包含子循环,当使用PIPELINE来指导综合时,这部分会将子循环全部展开(unroll all loops),这会耗用大量的逻辑资源,一般来说在较低层循环来实现流水化更加有意义。

    C.将包含子循环的循环流水化(PIPELINE)不可避免时,要注意子循环中含有变量循环边界的循环没办法展开,以这些变量循环边界作为子循环的上层循环也没法流水化。为了解决这个问题,可以考虑将这些含有变量循环边界的循环流水化,并且用DATAFLOW来将它们任务级并行起来。顺带提一句,当把一个设计流水时,在流水段内部不允许有时序逻辑的存在(废话一句,删掉😊)

  5. 硬件函数流水策略:首先介绍两种C/C++函数,Frame-BasedSample-Based,对于HLS而言,两种编程风格的不同影响了directives是如何被应用到这些函数上的。

    Frame-Based的C代码:它的一个重要特征是函数处理的是多个数据样本(通常是数组或指向特定连续空间的指针),数据在多层循环中被处理。

    Sample-Based的C代码:它的重要特征是函数处理的是单一数据样本
    一般来说,想要达到最高的硬件效率,需要将流水化在单一样本处理的那一个维度上施加,所谓一个样本就是函数功能的独立处理单元,比如图片中的一个像素,这需要按照函数目的确定。
    这部分手册展示了一个非常漂亮的例子,在此把结论简单记录:

    Frame-Based:
    A.对于Frame-Based风格的代码,最好的流水施加点是单一样本处理点
    B.如果切流水的层次太高,会造成一次读入大量数据,并且由于子层次的循环全部展开,会产生大量的硬件逻辑,而受限于带宽,无法全部并行,所以这部分的展开是白白浪费的,对吞吐率并无贡献。
    C.如果切流水的层次太低,也就是在单一样本的处理算子上流水化,这部分速度就太慢了,需要很多个时钟才可以处理一个样本,跟不上PS端的处理速度。
    D.如果有多个层次相同的循环,那么可以考虑将每一个循环按照上述方法分别流水化之后,再将多个循环用DATAFLOW来任务级并行。

    Sample-Based:
    A.Sample-Based类型的C代码一次只处理一个样本,并且往往在函数内部有一个静态变量。
    B.最好的方法就是在函数一级流水化

下载代码方式:https://pan.quark.cn/s/dd3561eca308 在软件开发领域,面向对象编程(OOP)是一种普遍采纳的结构化方法,它使得开发者能够借助模拟现实环境中的实体和关系来构建软件系统。在本案例中,我们观察到的是一个关于借助抽象类来执行不同几何图形面积求解的实践应用。现在,让我们详细分析这一议题。 标题 "应用抽象类计算面积" 清晰地表明我们将要讨论一个抽象类,此类设定了一个用于测量图形面积的标准函数,但并未提供实际的执行过程。抽象类在诸如C#或Java等编程语言中通常借助`abstract`修饰符进行声明,它们无法直接创建对象实例,仅能作为其他类的基础模板。 描述部分提及的"图形界面应用"暗示这是一个基于视觉用户界面(GUI)的系统,可能运用了.NET Framework的Windows Forms或WPF技术,或者是Java平台的Swing或JavaFX框架。在这样环境下,用户能够通过视觉元素与这些几何体进行互动,例如输入相关尺寸并观看到计算得出的面积值。 抽象类“几何体”内嵌了“计算面积”这一抽象函数。在代码层面,这可以被表述为: ```csharp public abstract class GeometricShape { public abstract double CalculateArea(); } ``` 随后,有三个派生类:圆(Circle)、矩形(Rectangle)和三角形(Triangle),它们各自提供了这个抽象函数的具体实现。比如,圆的面积是通过π乘以半径的平方得到的,矩形的面积是长和宽的乘积,而三角形的面积可能是底乘以高再除以2的结果。这些类将提供具体实现来计算它们各自的面积: ```csharp p...
内容概要:本文系统研究了移相控制全桥LLC谐振变换器的工作特性,深入分析其在不同工作模式下的运行机理与性能表现,重点探讨了软开关实现、高效率能量转换及宽范围电压调节等关键技术优势。通过Simulink搭建精确的仿真模型,对谐振腔参数、开关频率、电压增益、系统效率等关键指标进行仿真分析,验证了理论设计的正确性。同时,详细研究了移相控制策略对系统动态响应、稳定性和轻载/重载工况适应性的影响,揭示了控制参数与电路参数之间的耦合关系,为高频高效电源设计提供了理论依据和实践指导。; 适合人群:具备电力电子技术、模拟电路及自动控制理论基础,从事开关电源、新能源变换器、电动汽车充电模块或高频电源系统研发的工程师及高校研究生。; 使用场景及目标:①掌握全桥LLC谐振变换器的拓扑结构、工作原理与关键参数设计方法;②理解移相控制在实现零电压开通(ZVS)和零电流关断(ZCS)中的作用机制;③通过Simulink仿真掌握变换器建模、参数优化与性能评估流程,服务于实际产品开发与学术课题研究。; 阅读建议:建议读者结合提供的Simulink仿真模型进行同步操作,重点关注谐振网络(Lr, Lm, Cr)参数与移相角之间的匹配设计,深入理解软开关条件的形成过程,并通过调整负载和输入电压进行多工况仿真,以全面掌握系统动态特性。
一、项目概述 本项目设计并实现了一个基于STM32F103C8T6微控制器的温湿度监测与报警系统。系统通过DHT11传感器实时采集环境温湿度数据,当数据超过预设阈值时,蜂鸣器发出声音报警,同时通过4位数码管实时显示当前温湿度值。整个系统采用Type-C接口供电,支持USB串口通信,便于数据调试与传输。 二、硬件组成 1. 主控模块:STM32F103C8T6最小系统(含晶振、复位、BOOT电路、去耦电容)。 2. 传感器模块:DHT11温湿度传感器(单总线通信)。 3. 报警模块:有源蜂鸣器(三极管驱动)。 4. 显示模块:4位共阴数码管(TM1637驱动)。 5. 通信模块:CH340N USB转串口芯片(Type-C接口)。 6. 电源模块:AMS1117-3.3稳压电路(5V转3.3V)。 7. 调试接口:SWD调试排针(SWDIO/SWCLK)。 三、开发流程 1. 原理图设计:使用嘉立创EDA绘制完整原理图,包含各功能模块。 2. PCB设计:进行PCB布局布线,注重电源完整性、信号隔离及晶振走线。 3. 制板焊接:嘉立创打样,手工焊接元器件。 4. 软件开发:STM32CubeMX配置工程,编写DHT11驱动、TM1637显示、串口通信及报警逻辑。 5. 调试测试:通过SWD下载程序,串口输出数据,测试温湿度采集与报警功能。 四、项目特点 - 完整的嵌入式系统开发流程(硬件设计→制板→软件编程→调试)。 - 多传感器数据融合与实时显示。 - 低功耗设计,支持USB供电与串口通信。 - 模块化设计,便于功能扩展(如添加WiFi模块、数据存储等)。 五、应用前景 适用于家庭环境监测、农业大棚、仓库温湿度监控等场景
内容概要:本文提出了一种基于TOGI-SOGI混合积分器的光储并网谐波自适应抑制方法,并通过Simulink实现完整仿真验证。该方法融合三重二阶广义积分器(TOGI)与标准二阶广义积分器(SOGI),能够精确提取电网电压中的基波正序分量,有效分离并抑制高次谐波成分,尤其在电网电压畸变条件下显著提升了并网逆变器的控制精度与电能质量。文中详细阐述了混合积分器的结构设计、谐波检测机制、自适应调节策略及其在锁相环(PLL)中的集成应用,并通过构建光储并网系统模型进行多工况仿真,结果表明该方法具备优良的动态响应特性、强鲁棒性及谐波抑制能力。; 适合人群:具备电力电子、新能源发电、自动控制等相关专业背景,熟悉Simulink仿真环境,从事光伏并网控制、电能质量治理、微电网运行与控制等领域研究的科研人员、工程技术人员及研究生。; 使用场景及目标:①应用于电网存在谐波污染的光伏发电并网场景,提升逆变器在非理想电网下的运行稳定性;②为基于广义积分器的先进锁相技术与谐波补偿策略提供理论支持与实现范例;③服务于高校科研项目复现、学位论文研究、电力电子控制器原型开发及学术成果验证。; 阅读建议:建议学习者结合提供的Simulink模型深入剖析TOGI-SOGI的内部信号流向与参数整定逻辑,重点关注谐波分量的解耦过程与自适应控制模块的实现机制,可通过设置不同谐波含量、频率偏移等扰动工况进行对比测试,以全面掌握其在复杂电网环境下的适应性与优越性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值