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

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

3天内不再提示

如何优化HLS仿真脚本运行时间

jf_FPuwyZRU 来源:CSDN-雪天鱼 2024-02-23 09:29 次阅读

菜鸡一枚,记录下自己的学习过程,可能后续有更新,也可能没有更新,谨慎参考。

v1.0 24-02-22 C++ 打印秒级时间戳,向 TXT 文件写入多维数组

2 C++ 打印秒级时间戳

需求:由于自己目前一个 HLS 仿真脚本需要运行 1个多小时,先打算通过打印时间戳的方式找出最耗时的部分,然后想办法优化。

具体代码如下:

#include
#include
#include

//Getcurrenttimestamp(inseconds)
longlonggetCurrentTimestampInSeconds(){
autonow=std::now();
autonow_seconds=std::time_point_cast(now);
returnnow_seconds.time_since_epoch().count();
}

//Converttimestamptodate-timestring
std::stringtimestampToDateTimeString(longlongtimestamp){
autotime=std::from_time_t(timestamp);
std::time_tc_time=std::to_time_t(time);
charbuffer[80];
std::strftime(buffer,80,"%Y-%m-%d%H:%M:%S",std::localtime(&c_time));
returnstd::string(buffer);
}

voidprint_timestamp(){
//1Getcurrenttimestamp(seconds)
longlongtimestamp_seconds=getCurrentTimestampInSeconds();
std::cout<< "Current timestamp (seconds): " << timestamp_seconds << std::endl;
    // 2 Convert timestamp to date-time string and print it
    std::string datetime_string = timestampToDateTimeString(timestamp_seconds);
    std::cout << "Current date and time: " << datetime_string << std::endl;
}

HLS 仿真输出:

Currenttimestamp(seconds):1708591115
Currentdateandtime:2024-02-221635

C++ 代码在线调试 |

使用方式:将上述代码复制到 testbench 对应的cpp中。再需要打印时间戳时,调用 print_timestamp() 函数即可在 vitis hls 的控制台打印当前时间。(也可以放到一个额外的 cpp 文件中,然后testbench 包含该cpp对应的头文件即可)

代码解析:在C++中打印时间戳,可以使用标准库 来获取当前时间,并将其转换为时间戳。调用 getCurrentTimestampInSeconds 函数会返回当前时间的秒级时间戳。然后可以使用 头文件中的函数来将时间戳转换为年月日小时分秒的格式。

在 timestampToDateTimeString 函数中,先将时间戳转换为 std::system_clock 类型的时间点,然后使用将其转换为 std::time_t 类型。最后使用 std::strftime 函数将 std::time_t 类型的时间转换为日期时间字符串。

在 print_timestamp 中先获取秒级时间戳,再将时间戳转换为日期时间字符串并打印出来。

3 向 TXT 文件写入多维数组

我比较喜欢用 python 脚本生成测试激励(存储到 txt 文件中,一行一个数据),然后 HLS testbench 读取激励文件。同时 hls 仿真结果也会写入到指定的 TXT 文件,用于与参考值进行详细对比,从而验证硬件代码是否功能正确。

这里以向 TXT 文件写入 3D 数组为例,具体代码如下:

#include
#include
#include
#include
#include
#include

usingnamespacestd;

//设置存放hls仿真结果的文件夹
conststringresult_path="path/to/hls_result/";
//这里的p_limit,b_limit,i_limit替换为想设置的常量,假设data为hls仿真结果
intdata[p_limit][b_limit][i_limit];

intmain()
{
ostringstreamoss;
{
cout<< "3 Saving output..."<

若指定路径下无该 txt 文件,会自动创建 output_hls.txt 文件。

代码解析:先通过拼接得到文件的绝对路径( 绝对路径已尝试过可行,相对路径未尝试 ),然后创建/打开该文件,再逐个读取数据数据,写入到文件中,最后关闭文件。

也可将该代码写为一个工具函数,方便进行调用, 如下所示

#include
#include
#include
#include
#include
#include

usingnamespacestd;

template
voidwrite_3d_matrix_txt(Tsrc[],
stringpath,stringfname,
constintp_limit,
constintb_limit,
constinti_limit
)
{//fname:"output"
ostringstreamoss;
oss<< path << fname << "_hls.txt";
    string filename  = oss.str();
    ofstream outfile(filename);
    if(!outfile.is_open())
    {
        cout<<"open error!"<

根据上述模板,可写出 1d, 2d, 4d... 等数组的写入工具函数。

审核编辑:汤梓红

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

    关注

    3

    文章

    4303

    浏览量

    62411
  • C++
    C++
    +关注

    关注

    22

    文章

    2104

    浏览量

    73480
  • 代码
    +关注

    关注

    30

    文章

    4741

    浏览量

    68324
  • Vitis
    +关注

    关注

    0

    文章

    145

    浏览量

    7400

原文标题:Vitis HLS 仿真 C++ 工具代码分享

文章出处:【微信号:集成电路设计教程,微信公众号:集成电路设计教程】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何缩短Vivado的运行时间

    在Vivado Implementation阶段,有时是有必要分析一下什么原因导致运行时间(runtime)过长,从而找到一些方法来缩短运行时间
    的头像 发表于 05-29 14:37 1.4w次阅读
    如何缩短Vivado的<b class='flag-5'>运行时间</b>

    如何检查Linux服务器的运行时间

    Linux 中的 uptime 用于查看系统启动后的运行时间。它是一个比较简单的 Linux 命令,可以不带参数直接运行
    发表于 11-25 15:25 1.5w次阅读
    如何检查Linux服务器的<b class='flag-5'>运行时间</b>

    stm32做https的server ,serverkeychange运行时间10多s怎么优化

    stm32做https的server ,serverkeychange这一步运行时间10多s,求优化办法
    发表于 03-27 08:03

    STM8S在IAR软件仿真Simulator怎么查看运行时间

    STM8S 在IAR软件仿真Simulator怎么查看运行时间?在某些芯片通信时,会要求延时5us,10us,150ms等,这些延时不需要太精确,只要大概就好,但怎么在Simulator仿真里能通过断点查看,即两个断点之间的
    发表于 05-09 07:48

    freertos的任务运行时间怎么设置

    对于相同优先级的任务采用时间片轮询的方式运行,那比如说有两个优先级都为5的任务,那这两个任务的运行时间如何设置呢?在rt-thread中创建任务时就可以设置任务的运行时间,在freer
    发表于 07-19 08:03

    运行时软件故障注入器的设计与实现

    针对实际故障诊断中难以有效获得故障现场信息的问题,提出通过在软件运行时注入故障的方式获取故障现场信息,设计并实现一种运行时软件故障注入器,给出其中的故障脚本
    发表于 04-06 08:40 19次下载

    C语言教程之显示程序运行时间

    C语言教程之显示程序运行时间,很好的C语言资料,快来学习吧。
    发表于 04-25 16:09 0次下载

    基于本地任务与远程任务运行时间的CPS和PAA的概念

    评价由某一特定预测策略提供的预测运行时间精度的标准。仿真实验表明:与本地任务预测策略如Last和滑动窗口中值(SM)相比,CPS的平均相对残差下降了1.58%、1.62%;与远程任务预测策略如平均运行时间(RM)和加权移动平均值
    发表于 01-04 14:13 0次下载
    基于本地任务与远程任务<b class='flag-5'>运行时间</b>的CPS和PAA的概念

    电机运行时间进行排列 是分为两个部分来完成这个程序的设计的

    前几天有个学员咨询一个程序设计的问题,程序的控制要求如下:需要控制5台电机的运行,每台电机运行时需要记录运行时间,电机启动运行时,根据记录的运行时间
    的头像 发表于 07-19 08:57 7104次阅读
    电机<b class='flag-5'>运行时间</b>进行排列 是分为两个部分来完成这个程序的设计的

    最大化延长即使具有老化电池的汽车电池组运行时间

    最大化延长即使具有老化电池的汽车电池组运行时间
    发表于 03-20 12:44 9次下载
    最大化延长即使具有老化电池的汽车电池组<b class='flag-5'>运行时间</b>

    如何高效测量ECU的运行时间

    ,最终可能会引起运行时间方面的问题。这在项目后期需要大量的时间和金钱来解决。如果不能掌握系统的运行状态,则很难发现系统内缺陷的根源。 解决方案 将TA软件工具套件与VX1000测量标定硬件相结合,可同步分析 ECU内部
    的头像 发表于 10-28 11:05 2166次阅读

    浅析STM32代码运行时间的技巧

    前言     测试代码的运行时间的两种方法: 使用单片机内部定时器,在待测程序段的开始启动定时器,在待测程序段的结尾关闭定时器。为了测量的准确性,要进行多次测量,并进行平均取值。 借助示波器的方法
    的头像 发表于 11-09 09:52 3821次阅读
    浅析STM32代码<b class='flag-5'>运行时间</b>的技巧

    ch32v307记录程序运行时间

    ,不仅会降低用户的体验,甚至可能会导致系统的崩溃。 因此,在程序设计和调试中,我们常常需要记录程序的运行时间,并通过不断的优化来提升程序的性能。本文将介绍如何在各种编程语言中记录程序运行时间,并分享一些提高程序性能的技巧。
    的头像 发表于 08-22 15:53 850次阅读

    西门子SCL编程50台电机运行时间累计方法

    当RUN信号为TRUE时,开始计时,为FALSE时停止计时,单次运行时间清零,长按RESET为5秒时,单次和总运行时间都清零。
    发表于 11-27 09:59 1751次阅读
    西门子SCL编程50台电机<b class='flag-5'>运行时间</b>累计方法

    三菱plc累计运行时间怎么编程

    具有重要意义。本文将详细介绍如何使用三菱PLC编程实现累计运行时间的统计功能。 一、概述 累计运行时间是指设备或系统在一定时间内的总运行时间。在工业生产中,对设备的累计
    的头像 发表于 06-20 11:31 2103次阅读