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

    文章

    3881

    浏览量

    61310
  • C++
    C++
    +关注

    关注

    21

    文章

    2066

    浏览量

    72900
  • 代码
    +关注

    关注

    30

    文章

    4556

    浏览量

    66775
  • Vitis
    +关注

    关注

    0

    文章

    144

    浏览量

    7156

原文标题: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

    keil5使用stlink硬件仿真观察运行时间问题

    我用的是stm32F103RCT6单片机,主函中使用了正点原子提供的delay_ms函数,延时了500ms,在做单步执行观察运行时间时,发现delay_ms(500)运行结束后时间增加了3.6s!!请问这是为什么,程序确定是对的
    发表于 07-23 01:16

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

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

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

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

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

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

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

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

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

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

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

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

    读出S7-1500 CPU运行时间的几种方式

    读出S7-1500 CPU的运行时间有多种方式,下面分别介绍这几种方式。
    的头像 发表于 10-09 14:20 2538次阅读

    了解如何让您的汽车电池更稳定、运行时间更长

    了解如何让您的汽车电池更稳定、运行时间更长
    发表于 11-01 08:27 0次下载
    了解如何让您的汽车电池更稳定、<b class='flag-5'>运行时间</b>更长

    Go运行时:4年之后

    自 2018 年以来,Go GC,以及更广泛的 Go 运行时,一直在稳步改进。近日,Go 社区总结了 4 年来 Go 运行时的一些重要变化。
    的头像 发表于 11-30 16:21 531次阅读

    ch32v307记录程序运行时间

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

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

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