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 it
    std::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… 等数组的写入工具函数。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C# cass10 面积计算

运行环境Visual Studio 2022 c# cad2016 cass10 通过面积计算得到扩展数据&#xff0c;宗地面积 &#xff0c;房屋占地面积&#xff0c;房屋使用面积 一、主要步骤 获取当前AutoCAD应用中的活动文档、数据库和编辑器对象。创建一个选择过滤器&#xff0c;限制用户只能选择&q…

Commonjs 和 Es Module详解

一 前言 今天我们来深度分析一下 Commonjs 和 Es Module&#xff0c;希望通过本文的学习&#xff0c;能够让大家彻底明白 Commonjs 和 Es Module 原理&#xff0c;能够一次性搞定面试中遇到的大部分有关 Commonjs 和 Es Module 的问题。 带上疑问开始今天的分析&#xff1a; …

贷齐乐系统最新版SQL注入(无需登录绕过WAF可union select跨表查询)

一、环境 已上传资源&#xff08;daiqile&#xff09; 二、代码解释 1.1Request 不管get请求还是post请求都可以接收到 1.2过滤的还挺多 1.3第二个WAF把数据分为两个了一个Key一个value&#xff0c;全是explode的功劳 1.4submit是if进入的前提 很明显走进来了 1.5那我们在这…

springboot206基于SpringBoot的农商对接系统的设计与实现

基于Spring Boot的农商对接系统的设计与实现 Design and implementation of agricultural business docking system based on Spring Boot 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离…

day05-进程通信

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

开发个IDEA插件

开发IDEA一个插件&#xff0c;但是这个插件的功能是个大杂烩吧&#xff0c; 主要完成以下几个功能&#xff0c;方便组内开发人员提高效率。 1 网关会传过来登录人员的 一些核心字段&#xff0c;公司编码/用户编号/主岗。 因为存在多租户&#xff0c;所以经常要切换任务&…

【ACM出版】第五届计算机信息和大数据应用国际学术会议(CIBDA 2024)

第五届计算机信息和大数据应用国际学术会议&#xff08;CIBDA 2024&#xff09; 2024 5th International Conference on Computer Information and Big Data Applications 重要信息 大会官网&#xff1a;www.ic-cibda.org 大会时间&#xff1a;2024年3月22-24日 大会地点&#…

LeetCode 0106.从中序与后序遍历序列构造二叉树:分治(递归)——五彩斑斓的题解(若不是彩色的可以点击原文链接查看)

【LetMeFly】106.从中序与后序遍历序列构造二叉树&#xff1a;分治&#xff08;递归&#xff09;——五彩斑斓的题解&#xff08;若不是彩色的可以点击原文链接查看&#xff09; 力扣题目链接&#xff1a;https://leetcode.cn/problems/construct-binary-tree-from-inorder-an…

开发Chrome插件,background.js中log打印未出现在控制台

不同于内容脚本&#xff08;通常命名content.js&#xff09;&#xff0c;在后台脚本&#xff08;通常命名background.js或service-worker.js&#xff09;中console.log并不会在控制台中直接显示。 要查看后台脚本上下文的正确控制台&#xff0c;执行如下步骤&#xff1a; 访问…

leetcode hot100单词拆分

在本题中&#xff0c;我们是要把一个字符串&#xff0c;判断是否能用给的字符串数组中的单词进行拆分&#xff0c;如果可以则返回true&#xff0c;不能的话则返回false。这个题一开始看无法与背包问题联系在一起。但仔细考虑&#xff0c;就是用物品&#xff08;给的字符串数组中…

在Mac上搭建MongoDB环境

最近工作中需要装MongoDB环境&#xff0c;搭建过程中遇到了一些问题&#xff0c;在这里记录一下安装MongoDB环境的方法以及问题的解决方法。有两种安装MongoDB的方法&#xff1a;brew安装和手动安装。 目录 使用Homebrew安装MongoDB 手动安装MongoDB&#xff08;不使用Homebr…

WordPres Bricks Builder 前台RCE漏洞复现(CVE-2024-25600)

0x01 产品简介 Bricks Builder是一款用于WordPress的开发主题,提供直观的拖放界面,用于设计和构建WordPress网站。它使用户能够轻松创建自定义的网页布局和设计,无需编写或了解复杂的代码。Bricks Builder具有用户友好的界面和强大的功能,使用户可以通过简单的拖放操作添加…

Vue图片浏览组件v-viewer,支持旋转、缩放、翻转等操作

Vue图片浏览组件v-viewer&#xff0c;支持旋转、缩放、翻转等操作 之前用过viewer.js&#xff0c;算是市场上用过最全面的图片预览。v-viewer&#xff0c;是基于viewer.js的一个图片浏览的Vue组件&#xff0c;支持旋转、缩放、翻转等操作。 基本使用 安装&#xff1a;npm安装…

浅谈TCP协议的可靠含义和三次握手

这里不过多阐述计算机网络的体系结构&#xff0c;本文主要是想阐述三次握手和可靠连接之间的联系。TCP协议全称传输控制协议&#xff08;Transmission Cotrol Protocol&#xff09;。 1、TCP协议运行在哪一层 TCP运行在运输层。 2、TCP协议的可靠是什么意思 步入主题&…

MLflow【部署 01】MLflow官网Quick Start实操(一篇学会部署使用MLflow)

一篇学会部署使用MLflow 1.版本及环境2.官方步骤Step-1 Get MLflowStep-2 Start a Tracking ServerStep 3 - Train a model and prepare metadata for loggingStep 4 - Log the model and its metadata to MLflowStep 5 - Load the model as a Python Function (pyfunc) and us…

Hackme 1

信息收集 Nmap部分 存活扫描&#xff1a; └─# nmap -sn 192.168.10.1/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-02-20 15:00 CST Nmap scan report for 192.168.10.1 (192.168.10.1) Host is up (0.00012s latency). MAC Address: 00:50:56:C0:00:08 (VMwar…

matlab代码--基于matlabLDPC-和积译码系统

LDPC编码 一个码长为n、信息位个数为k的线性分组码&#xff08;n,k&#xff09;可以由一个生成矩阵 来定义&#xff0c;信息序列 通过G被映射到码字XS.G。线性分组码也可以由一个校验矩阵 来描述。所以码字均满足 。校验矩阵的每一行表示一个校验约束 &#xff0c;其中所有的非…

C++入门学习(三十二)二维数组定义方式

一维数组类似于一条“线”&#xff0c;而二维数组类似于一个“面”&#xff0c;二维数组也更像一个表格&#xff0c;由我们在“表格”中查询数据。 1、先定义数组&#xff0c;后赋值 int arr[2][3]; #include <iostream> using namespace std;int main() { int arr…

分类预测 | Matlab实现CWT-DSCNN-MSA基于时序特征、cwt小波时频图的双流卷积融合注意力机制的分类预测

分类预测 | Matlab实现CWT-DSCNN-MSA基于时序特征、cwt小波时频图的双流卷积融合注意力机制的分类预测 目录 分类预测 | Matlab实现CWT-DSCNN-MSA基于时序特征、cwt小波时频图的双流卷积融合注意力机制的分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab…

day6 2/22

1> 将互斥机制的代码实现重新敲一遍 #include<myhead.h> int num520; pthread_mutex_t mutex;//创建互斥锁 void*task1(void*arg) {pthread_mutex_lock(&mutex);sleep(3);num;printf("%d\n",num);pthread_mutex_unlock(&mutex);pthread_exit(NULL)…