Vitis HLS 仿真 C++ 工具代码分享

1 自媒体账号

目前运营的自媒体账号如下:

  • 哔哩哔哩 【雪天鱼】: 雪天鱼个人主页-bilibili.com
  • 微信公众号 【雪天鱼】
    |550
  • CSDN 【雪天鱼】: 雪天鱼-CSDN博客

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

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

2 C++ 打印秒级时间戳

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

具体代码如下:

#include <iostream>
#include <chrono>
#include <ctime>// Get current timestamp (in seconds)
long long getCurrentTimestampInSeconds() {auto now = std::chrono::system_clock::now();auto now_seconds = std::chrono::time_point_cast<std::chrono::seconds>(now);return now_seconds.time_since_epoch().count();
}// Convert timestamp to date-time string
std::string timestampToDateTimeString(long long timestamp) {auto time = std::chrono::system_clock::from_time_t(timestamp);std::time_t c_time = std::chrono::system_clock::to_time_t(time);char buffer[80];std::strftime(buffer, 80, "%Y-%m-%d %H:%M:%S", std::localtime(&c_time));return std::string(buffer);
}void print_timestamp() {// 1 Get current timestamp (seconds)long long timestamp_seconds = getCurrentTimestampInSeconds();std::cout << "Current timestamp (seconds): " << timestamp_seconds << std::endl;// 2 Convert timestamp to date-time string and print itstd::string datetime_string = timestampToDateTimeString(timestamp_seconds);std::cout << "Current date and time: " << datetime_string << std::endl;
}

HLS 仿真输出:

Current timestamp (seconds): 1708591115
Current date and time: 2024-02-22 16:38:35
  • C++ 代码在线调试 | 菜鸟工具
  • 使用方式:将上述代码复制到 testbench 对应的cpp中。再需要打印时间戳时,调用 print_timestamp() 函数即可在 vitis hls 的控制台打印当前时间。 (也可以放到一个额外的 cpp 文件中,然后testbench 包含该cpp对应的头文件即可)
  • 代码解析:
    在C++中打印时间戳,可以使用标准库 <chrono><ctime> 来获取当前时间,并将其转换为时间戳。调用 getCurrentTimestampInSeconds 函数会返回当前时间的秒级时间戳。然后可以使用 <ctime> 头文件中的函数来将时间戳转换为年月日小时分秒的格式。

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

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

3 向 TXT 文件写入多维数组

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

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

#include <array>
#include <fstream>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>using namespace std;// 设置存放 hls 仿真结果的文件夹
const string result_path = "path/to/hls_result/"; 
// 这里的 p_limit, b_limit, i_limit 替换为想设置的常量, 假设 data 为 hls 仿真结果
int data[p_limit][b_limit][i_limit];int main()
{ostringstream oss;
{cout << "3 Saving output..."<<endl;oss << result_path << "output_hls.txt";string filename = oss.str();ofstream outfile(filename);for (int p = 0; p < p_limit; ++p) {for (int b = 0; b < b_limit; ++b) {for (int i = 0; i < i_limit; ++i) {outfile << data[p][b][i] << endl;//cout<<" data["<<p<<"]["<<b<<"]["<<i<<"] = "<< data[p][b][i] << endl;}}}outfile.close();
}return 0;
}
  • 若指定路径下无该 txt 文件,会自动创建 output_hls.txt 文件。
  • 代码解析:先通过拼接得到文件的绝对路径( 绝对路径已尝试过可行,相对路径未尝试 ),然后创建/打开该文件,再逐个读取数据数据,写入到文件中,最后关闭文件。

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

#include <array>
#include <fstream>
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>using namespace std;template<typename T>
void write_3d_matrix_txt(T src[],string path, string fname,const int p_limit,const int b_limit,const int i_limit)
{   // fname : "output"ostringstream oss;oss << path << fname << "_hls.txt";string filename  = oss.str();ofstream outfile(filename);if(!outfile.is_open()){cout<<"open error!"<<endl;return ;}for (int p = 0; p < p_limit; ++p) {for (int b = 0; b < b_limit; ++b) {for (int i = 0; i < i_limit; ++i) {outfile << src[p][b][i] << endl;//cout<<" src["<<p<<"]["<<b<<"]["<<i<<"] = "<<src[p][b][i]<<endl;}}}outfile.close();
}// 调用该函数示例:
write_3d_matrix_txt(data, result_path, "output", p_limit, b_limit, i_limit);

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/484547.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Event 快速入门

请直接看原文 : Spring Event&#xff0c;贼好用的业务解耦神器&#xff01; (qq.com) -------------------------------------------------------------------------------------------------------------------------------- 前言 Spring Event 同步使用 Spring Event 异…

【2024软件测试面试必会技能】Selenium(6):元素定位_xpath定位

XPATH是什么 XPATH是一门在XML文档中查找信息的语言&#xff0c;XPATH可用来在XML文档中对元素和属性进行遍历&#xff0c;主流的浏览器都支持XPATH&#xff0c;因为HTML页面在DOM中表示为XHTML文档。Selenium WebDriver支持使用XPATH表达式来定位元素。 Xpath常用如下6种定位…

day05-进程通信

1> 将互斥机制的代码实现重新敲一遍 代码&#xff1a; #include<myhead.h>int num520;//临界资源//1.创建互斥锁 pthread_mutex_t fastmutex;//定义任务函数 void *task1(void *arg){printf("1111111\n");//3.临界区上面获取锁资源&#xff08;上锁&#…

【Linux从青铜到王者】 基础IO

本篇重点&#xff1a;文件描述符&#xff0c;重定向&#xff0c;缓冲区&#xff0c;磁盘结构&#xff0c;文件系统&#xff0c;inode理解文件的增删查改&#xff0c;查找一个文件为什么一定要有路径&#xff0c;动静态库&#xff0c;有的时候为什么找不到库&#xff0c;动态库的…

在苹果电脑MAC上安装Windows10(双系统安装的详细图文步骤教程)

在苹果电脑MAC上安装Windows10&#xff08;双系统安装的详细图文步骤教程&#xff09; 一、准备工作准备项1&#xff1a;U盘作为系统安装盘准备项2&#xff1a;您需要安装的系统镜像 二、启动转换助理步骤1&#xff1a;找到启动转换助理步骤2&#xff1a;启动转换助理步骤3&…

2024022202-查询优化

查询优化 概述 关系系统和关系模型是两个密切相关而有不同的概念。支持关系模型的数据库管理系统称为关系系统。但是关系模型中并非每一部分都是同等重要的&#xff0c;所以我们不苛求完全支持关系模型的系统才能称为关系系统。因此&#xff0c;我们给出一个关系系统的最小要求…

Google play应用上架,账号即将被封?你收到过这种骗子邮件吗?

相信大多数开发者&#xff0c;尤其对于马甲包或矩阵、批量上架的开发者来说&#xff0c;收到账号被封的邮件已经司空见惯了&#xff0c;但需要注意的是&#xff0c;并不是此类所有的邮件都是真的&#xff0c;有可能是骗子不怀好意伪装成谷歌官方发送的诈骗邮件。 例如这样的邮…

《UE5_C++多人TPS完整教程》学习笔记22 ——《P23 记录加入的玩家(Couting Incoming Players)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P23 记录加入的玩家&#xff08;Couting Incoming Players&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff…

SaaS智慧校园管理平台全套源码,支持二次开发,项目使用

什么是电子班牌系统&#xff1f; 电子班牌用来显示班级信息&#xff0c;班级活动信息以及学校的通知信息。信息内容为文字、图片、视频、FLASH等&#xff0c;为学生和老师提供新颖的师生交流及校园服务平台。融合了多媒体信息发布、家校互通、物联控制、教务管理、日常办公等一…

c++类和对象新手保姆级上手教学(下)

目录 前言&#xff1a; 初始化列表&#xff1a; explicit关键字&#xff1a; static成员&#xff1a; 友元函数&#xff1a; 友元类&#xff1a; 内部类&#xff1a; 匿名对象&#xff1a; 前言&#xff1a; 类和对象下篇中剩余的部分较为简单易理解&#xff0c;认真记住…

从大厂裸辞后成为自由职业者,一年后我怎么样了?

深耕技术领域7年&#xff0c;前前后后也做过不少副业&#xff0c;最近我一直在思考什么副业才是对自己有价值的&#xff0c;可持续的&#xff0c;甚至是可增长的。 22年我所在团队的一个项目解散了&#xff0c;领导问我想拿钱走还是转岗&#xff0c;想想自己也在这个公司干了5…

猫头虎分享已解决Bug || TypeError: unhashable type: ‘slice‘

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …