RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何優(yōu)化HLS仿真腳本運(yùn)行時間

jf_FPuwyZRU ? 來源:CSDN-雪天魚 ? 2024-02-23 09:29 ? 次閱讀

菜雞一枚,記錄下自己的學(xué)習(xí)過程,可能后續(xù)有更新,也可能沒有更新,謹(jǐn)慎參考。

v1.0 24-02-22 C++ 打印秒級時間戳,向 TXT 文件寫入多維數(shù)組

2 C++ 打印秒級時間戳

需求:由于自己目前一個 HLS 仿真腳本需要運(yùn)行 1個多小時,先打算通過打印時間戳的方式找出最耗時的部分,然后想辦法優(yōu)化。

具體代碼如下:

#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<

HLS 仿真輸出:

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

C++ 代碼在線調(diào)試 |

使用方式:將上述代碼復(fù)制到 testbench 對應(yīng)的cpp中。再需要打印時間戳?xí)r,調(diào)用 print_timestamp() 函數(shù)即可在 vitis hls 的控制臺打印當(dāng)前時間。(也可以放到一個額外的 cpp 文件中,然后testbench 包含該cpp對應(yīng)的頭文件即可)

代碼解析:在C++中打印時間戳,可以使用標(biāo)準(zhǔn)庫 來獲取當(dāng)前時間,并將其轉(zhuǎn)換為時間戳。調(diào)用 getCurrentTimestampInSeconds 函數(shù)會返回當(dāng)前時間的秒級時間戳。然后可以使用 頭文件中的函數(shù)來將時間戳轉(zhuǎn)換為年月日小時分秒的格式。

在 timestampToDateTimeString 函數(shù)中,先將時間戳轉(zhuǎn)換為 std::system_clock 類型的時間點,然后使用將其轉(zhuǎn)換為 std::time_t 類型。最后使用 std::strftime 函數(shù)將 std::time_t 類型的時間轉(zhuǎn)換為日期時間字符串。

在 print_timestamp 中先獲取秒級時間戳,再將時間戳轉(zhuǎn)換為日期時間字符串并打印出來。

3 向 TXT 文件寫入多維數(shù)組

我比較喜歡用 python 腳本生成測試激勵(存儲到 txt 文件中,一行一個數(shù)據(jù)),然后 HLS testbench 讀取激勵文件。同時 hls 仿真結(jié)果也會寫入到指定的 TXT 文件,用于與參考值進(jìn)行詳細(xì)對比,從而驗證硬件代碼是否功能正確。

這里以向 TXT 文件寫入 3D 數(shù)組為例,具體代碼如下:

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

usingnamespacestd;

//設(shè)置存放hls仿真結(jié)果的文件夾
conststringresult_path="path/to/hls_result/";
//這里的p_limit,b_limit,i_limit替換為想設(shè)置的常量,假設(shè)data為hls仿真結(jié)果
intdata[p_limit][b_limit][i_limit];

intmain()
{
ostringstreamoss;
{
cout<

若指定路徑下無該 txt 文件,會自動創(chuàng)建 output_hls.txt 文件。

代碼解析:先通過拼接得到文件的絕對路徑( 絕對路徑已嘗試過可行,相對路徑未嘗試 ),然后創(chuàng)建/打開該文件,再逐個讀取數(shù)據(jù)數(shù)據(jù),寫入到文件中,最后關(guān)閉文件。

也可將該代碼寫為一個工具函數(shù),方便進(jìn)行調(diào)用, 如下所示

#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<

根據(jù)上述模板,可寫出 1d, 2d, 4d... 等數(shù)組的寫入工具函數(shù)。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4327

    瀏覽量

    62569
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73618
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4779

    瀏覽量

    68521
  • Vitis
    +關(guān)注

    關(guān)注

    0

    文章

    146

    瀏覽量

    7421

原文標(biāo)題:Vitis HLS 仿真 C++ 工具代碼分享

文章出處:【微信號:集成電路設(shè)計教程,微信公眾號:集成電路設(shè)計教程】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何縮短Vivado的運(yùn)行時間

    在Vivado Implementation階段,有時是有必要分析一下什么原因?qū)е?b class='flag-5'>運(yùn)行時間(runtime)過長,從而找到一些方法來縮短運(yùn)行時間
    的頭像 發(fā)表于 05-29 14:37 ?1.4w次閱讀
    如何縮短Vivado的<b class='flag-5'>運(yùn)行時間</b>

    如何檢查Linux服務(wù)器的運(yùn)行時間

    Linux 中的 uptime 用于查看系統(tǒng)啟動后的運(yùn)行時間。它是一個比較簡單的 Linux 命令,可以不帶參數(shù)直接運(yùn)行。
    發(fā)表于 11-25 15:25 ?1.5w次閱讀
    如何檢查Linux服務(wù)器的<b class='flag-5'>運(yùn)行時間</b>

    stm32做https的server ,serverkeychange運(yùn)行時間10多s怎么優(yōu)化?

    stm32做https的server ,serverkeychange這一步運(yùn)行時間10多s,求優(yōu)化辦法
    發(fā)表于 03-27 08:03

    STM8S在IAR軟件仿真Simulator怎么查看運(yùn)行時間?

    STM8S 在IAR軟件仿真Simulator怎么查看運(yùn)行時間?在某些芯片通信時,會要求延時5us,10us,150ms等,這些延時不需要太精確,只要大概就好,但怎么在Simulator仿真里能通過斷點查看,即兩個斷點之間的
    發(fā)表于 05-09 07:48

    freertos的任務(wù)運(yùn)行時間怎么設(shè)置

    對于相同優(yōu)先級的任務(wù)采用時間片輪詢的方式運(yùn)行,那比如說有兩個優(yōu)先級都為5的任務(wù),那這兩個任務(wù)的運(yùn)行時間如何設(shè)置呢?在rt-thread中創(chuàng)建任務(wù)時就可以設(shè)置任務(wù)的運(yùn)行時間,在freer
    發(fā)表于 07-19 08:03

    運(yùn)行時軟件故障注入器的設(shè)計與實現(xiàn)

    針對實際故障診斷中難以有效獲得故障現(xiàn)場信息的問題,提出通過在軟件運(yùn)行時注入故障的方式獲取故障現(xiàn)場信息,設(shè)計并實現(xiàn)一種運(yùn)行時軟件故障注入器,給出其中的故障腳本
    發(fā)表于 04-06 08:40 ?19次下載

    C語言教程之顯示程序運(yùn)行時間

    C語言教程之顯示程序運(yùn)行時間,很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-25 16:09 ?0次下載

    基于本地任務(wù)與遠(yuǎn)程任務(wù)運(yùn)行時間的CPS和PAA的概念

    評價由某一特定預(yù)測策略提供的預(yù)測運(yùn)行時間精度的標(biāo)準(zhǔn)。仿真實驗表明:與本地任務(wù)預(yù)測策略如Last和滑動窗口中值(SM)相比,CPS的平均相對殘差下降了1.58%、1.62%;與遠(yuǎn)程任務(wù)預(yù)測策略如平均運(yùn)行時間(RM)和加權(quán)移動平均值
    發(fā)表于 01-04 14:13 ?0次下載
    基于本地任務(wù)與遠(yuǎn)程任務(wù)<b class='flag-5'>運(yùn)行時間</b>的CPS和PAA的概念

    電機(jī)運(yùn)行時間進(jìn)行排列 是分為兩個部分來完成這個程序的設(shè)計的

    前幾天有個學(xué)員咨詢一個程序設(shè)計的問題,程序的控制要求如下:需要控制5臺電機(jī)的運(yùn)行,每臺電機(jī)運(yùn)行時需要記錄運(yùn)行時間,電機(jī)啟動運(yùn)行時,根據(jù)記錄的運(yùn)行時間
    的頭像 發(fā)表于 07-19 08:57 ?7189次閱讀
    電機(jī)<b class='flag-5'>運(yùn)行時間</b>進(jìn)行排列 是分為兩個部分來完成這個程序的設(shè)計的

    最大化延長即使具有老化電池的汽車電池組運(yùn)行時間

    最大化延長即使具有老化電池的汽車電池組運(yùn)行時間
    發(fā)表于 03-20 12:44 ?9次下載
    最大化延長即使具有老化電池的汽車電池組<b class='flag-5'>運(yùn)行時間</b>

    如何高效測量ECU的運(yùn)行時間

    ,最終可能會引起運(yùn)行時間方面的問題。這在項目后期需要大量的時間和金錢來解決。如果不能掌握系統(tǒng)的運(yùn)行狀態(tài),則很難發(fā)現(xiàn)系統(tǒng)內(nèi)缺陷的根源。 解決方案 將TA軟件工具套件與VX1000測量標(biāo)定硬件相結(jié)合,可同步分析 ECU內(nèi)部
    的頭像 發(fā)表于 10-28 11:05 ?2211次閱讀

    淺析STM32代碼運(yùn)行時間的技巧

    前言 ????測試代碼的運(yùn)行時間的兩種方法: 使用單片機(jī)內(nèi)部定時器,在待測程序段的開始啟動定時器,在待測程序段的結(jié)尾關(guān)閉定時器。為了測量的準(zhǔn)確性,要進(jìn)行多次測量,并進(jìn)行平均取值。 借助示波器的方法
    的頭像 發(fā)表于 11-09 09:52 ?3872次閱讀
    淺析STM32代碼<b class='flag-5'>運(yùn)行時間</b>的技巧

    ch32v307記錄程序運(yùn)行時間

    ,不僅會降低用戶的體驗,甚至可能會導(dǎo)致系統(tǒng)的崩潰。 因此,在程序設(shè)計和調(diào)試中,我們常常需要記錄程序的運(yùn)行時間,并通過不斷的優(yōu)化來提升程序的性能。本文將介紹如何在各種編程語言中記錄程序運(yùn)行時間,并分享一些提高程序性能的技巧。
    的頭像 發(fā)表于 08-22 15:53 ?901次閱讀

    西門子SCL編程50臺電機(jī)運(yùn)行時間累計方法

    當(dāng)RUN信號為TRUE時,開始計時,為FALSE時停止計時,單次運(yùn)行時間清零,長按RESET為5秒時,單次和總運(yùn)行時間都清零。
    發(fā)表于 11-27 09:59 ?1865次閱讀
    西門子SCL編程50臺電機(jī)<b class='flag-5'>運(yùn)行時間</b>累計方法

    三菱plc累計運(yùn)行時間怎么編程

    具有重要意義。本文將詳細(xì)介紹如何使用三菱PLC編程實現(xiàn)累計運(yùn)行時間的統(tǒng)計功能。 一、概述 累計運(yùn)行時間是指設(shè)備或系統(tǒng)在一定時間內(nèi)的總運(yùn)行時間。在工業(yè)生產(chǎn)中,對設(shè)備的累計
    的頭像 發(fā)表于 06-20 11:31 ?2277次閱讀
    RM新时代网站-首页