Vitis高層次綜合學習——FPGA

高層次綜合

什么是高層次綜合?就是使用高級語言(如C/C++)來編寫FPGA算法程序。
在高層次綜合上并不需要制定微架構決策,如創建狀態機、數據路徑、寄存器流水線等。這些細節可以留給 HLS 工具,通過提供輸入約束(如時鐘速度、性能編譯指示、目標器件等)即可生成經過最優化的 RTL。
其主要優勢為:
1、提高FPGA算法部署的效率
(1)使用C語言來開發和確認FPGA算法;
(2)使用C語言來仿真RTL設計。
2、算法易于移植。

Vivado 和 HLS

Vitis HLS 工具會將 C 或 C++ 函數綜合到 RTL 代碼中,以便在 Versal 自適應 SoC、Zynq MPSoC 或 AMD FPGA 器件的可編程邏輯 (PL) 區域內實現。Vitis HLS 與 Vivado Design Suite 緊密集成用于綜合與布局布線,并與 Vitis 核開發套件緊密集成用于異構系統級別設計和應用加速。
HLS能夠降順序執行的C語言程序轉為并行執行。
如下面的例子:

#include <vector>
#include <iostream>
#include <ap_int.h>
#include "hls_vector.h"
#define totalNumWords 512
unsigned char data_t;
int main(int, char**) {
// initialize input vector arrays on CPUfor (int i = 0; i < totalNumWords; i++) {in[i] = i;
}
compute(data_t in[totalNumWords], data_t Out[totalNumWords]);check_results();	
}
void compute (data_t in[totalNumWords ], data_t Out[totalNumWords ]) {data_t tmp1[totalNumWords], tmp2[totalNumWords];A: for (int i = 0; i < totalNumWords ; ++i) {tmp1[i] = in[i] * 3;tmp2[i] = in[i] * 3;}B: for (int i = 0; i < totalNumWords ; ++i) {tmp1[i] = tmp1[i] + 25;}C: for (int i = 0; i < totalNumWords ; ++i) {tmp2[i] = tmp2[i] * 2;}D: for (int i = 0; i < totalNumWords ; ++i) {out[i] = tmp1[i] + tmp2[i] * 2;}
}

上面的C語言代碼在CPU中按順序執行,當然也可以在FPGA中順序執行,但是這樣就沒有發揮FPGA的優勢。compute() 函數需重構,以實現基于 FPGA 的加速。
加速有以下方向:
1、compute 函數可先啟動,隨后再將所有數據傳遞給它;
2、多個 compute 函數能以重疊方式運行,例如,“for”循環能夠在上一次迭代完成前啟動下一次迭代;
3、“for”循環內的各項操作都能在多個碼字上并發運行,無需逐字執行。

compute() 函數循環 A 將輸入值乘以 3,并創建兩條獨立路徑,分別是 B 和 C。循環 B 和 C 執行操作并將數據饋送給 D。這是一種現實狀況的簡單表示法,您需在其中逐一執行多項任務,這些任務彼此相連形成如下所示網絡。
在這里插入圖片描述

#include "diamond.h"
#define NUM_WORDS 16
extern "C" {
void diamond(vecOf16Words* vecIn, vecOf16Words* vecOut, int size)
{hls::stream<vecOf16Words> c0, c1, c2, c3, c4, c5;assert(size % 16 == 0);#pragma HLS dataflowload(vecIn, c0, size);compute_A(c0, c1, c2, size);compute_B(c1, c3, size);compute_C(c2, c4, size);compute_D(c3, c4,c5, size);store(c5, vecOut, size);
}}
void load(vecOf16Words *in, hls::stream<vecOf16Words >& out, int size)
{Loop0:for (int i = 0; i < size; i++){#pragma HLS PERFORMANCE target_ti=32#pragma HLS LOOP_TRIPCOUNT max=32out.write(in[i]);
}
}
void compute_A(hls::stream<vecOf16Words >& in, hls::stream<vecOf16Words >&
out1, hls::stream<vecOf16Words >& out2, int size)
{Loop0:for (int i = 0; i < size; i++){#pragma HLS PERFORMANCE target_ti=32#pragma HLS LOOP_TRIPCOUNT max=32vecOf16Words t = in.read();out1.write(t * 3);out2.write(t * 3);}
}
void compute_B(hls::stream<vecOf16Words >& in, hls::stream<vecOf16Words >&
out, int size)
{Loop0:for (int i = 0; i < size; i++){#pragma HLS PERFORMANCE target_ti=32#pragma HLS LOOP_TRIPCOUNT max=32out.write(in.read() + 25);}
}
void compute_C(hls::stream<vecOf16Words >& in, hls::stream<vecOf16Words >&
out, int size)
{Loop0:for (data_t i = 0; i < size; i++){#pragma HLS PERFORMANCE target_ti=32#pragma HLS LOOP_TRIPCOUNT max=32out.write(in.read() * 2);}
}
void compute_D(hls::stream<vecOf16Words >& in1, hls::stream<vecOf16Words >&
in2, hls::stream<vecOf16Words >& out, int size)
{Loop0:for (data_t i = 0; i < size; i++){#pragma HLS PERFORMANCE target_ti=32#pragma HLS LOOP_TRIPCOUNT max=32out.write(in1.read() + in2.read());}
}
void store(hls::stream<vecOf16Words >& in, vecOf16Words *out, int size)
{Loop0:for (int i = 0; i < size; i++){#pragma HLS PERFORMANCE target_ti=32#pragma HLS LOOP_TRIPCOUNT max=32out[i] = in.read();}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40296.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40296.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40296.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

專訪阿里云席明賢,視頻云如何運用大模型與小模型來破繭升級2.0

不久前&#xff0c;LiveVideoStack與阿里云視頻云負責人席明賢&#xff08;花名右賢&#xff09;展開一場深度的對話&#xff0c;一個是圈內專業的社區媒體&#xff0c;一個是20年的IT老兵&#xff0c;雙方有交集、有碰撞、有火花。 面對風云變幻的內外環境&#xff0c;阿里云…

未來數字銀行的樣子

對銀行長期發展來講&#xff0c;這意味著將關閉和減少 低效率的實體分行&#xff0c;加速向數字化發展。實現成本節省和 IT 預算提效的需求&#xff0c;將為數字柜臺和銀行代理點創造新的機遇。 一個嶄新的世界&#xff1a;未來數字銀行趨勢圖 現在是銀行迎頭趕上并為客戶提供超…

拿來即用,自己封裝的 axios

文章目錄 一、需求二、分析1. 安裝axios2. 新建一個 ts 文件&#xff0c;封裝 axios3. store 存放 token 信息4. 使用5. 文件 type.js 一、需求 在日常開發中&#xff0c;我們會經常用到 axios &#xff0c;那么如何在自己的項目中自己封裝 axios 二、分析 1. 安裝axios np…

jenkins使用

安裝插件 maven publish over ssh publish over ssh 會將打包后的jar包&#xff0c;通過ssh推送到指定的服務器上&#xff0c;&#xff0c;在jenkins中設置&#xff0c;推送后腳本&#xff0c;實現自動部署jar包&#xff0c;&#xff0c; 裝了這個插件之后&#xff0c;可以在項…

非計算機科班背景者順利轉碼計算機領域:策略與前景展望

方向一&#xff1a;如何規劃才能實現轉碼&#xff1f; 對于非計算機科班背景的人想要順利轉碼進入計算機領域&#xff0c;規劃是至關重要的。以下是一些建議&#xff0c;可以幫助你在轉碼過程中更加順利&#xff1a; 自我評估和目標設定&#xff1a; 首先&#xff0c;你需要明…

Weak Session IDs (弱會話)

Weak Session IDs (弱會話) 當用戶登錄后&#xff0c;在服務器就會創建一個會話(session)&#xff0c;叫做會話控制&#xff0c;接著訪問頁面的時候就不用登錄&#xff0c;只需要攜帶Sesion去訪問。 sessionID作為特定用戶訪問站點所需要的唯一內容。如果能夠計算或輕易猜到該…

深入理解 Flutter 圖片加載原理

作者&#xff1a;京東零售 徐宏偉 來源&#xff1a;京東云開發者社區 前言 隨著Flutter穩定版本逐步迭代更新&#xff0c;京東APP內部的Flutter業務也日益增多&#xff0c;Flutter開發為我們提供了高效的開發環境、優秀的跨平臺適配、豐富的功能組件及動畫、接近原生的交互體驗…

用對角線去遍歷矩陣

聲明 該系列文章僅僅展示個人的解題思路和分析過程&#xff0c;并非一定是優質題解&#xff0c;重要的是通過分析和解決問題能讓我們逐漸熟練和成長&#xff0c;從新手到大佬離不開一個磨練的過程&#xff0c;加油&#xff01; 原題鏈接 用對角線遍歷矩陣https://leetcode.c…

wsl2(debian)安裝python的不同版本例如3.8

要在Debian上安裝 Python 3.8&#xff0c;可以按照以下步驟操作&#xff1a; 1.確保你的 Debian 系統已經更新到最新版本&#xff0c;可以使用以下命令更新&#xff1a; sudo apt update sudo apt upgrade2.安裝 Python 3.8 的依賴項&#xff0c;以及構建 Python 時需要的工具…

django中實現事務的幾種方式

1.實現事務的三種方式 1.1 全局開啟事務---> 全局開啟事務&#xff0c;綁定的是http請求響應整個過程 DATABASES {default: {#全局開啟事務&#xff0c;綁定的是http請求響應整個過程ATOMIC_REQUESTS: True, }} from django.db import transaction# 局部禁用事務 transac…

數據結構——棧(C語言)

需求&#xff1a;無 棧的概念&#xff1a; 棧&#xff1a;一種特殊的線性表&#xff0c;其只允許在固定的一端進行插入和刪除元素操作。進行數據插入和刪除操作的一端稱為棧頂&#xff0c;另一端為棧底。棧中的數據元素遵守后進先出&#xff08;LIFO&#xff09;原則。壓棧&…

GPIO 配置 和 PINCTRL有啥區別

GPIO&#xff08;通用輸入/輸出&#xff09;和 PINCTRL&#xff08;引腳控制器&#xff09;是在嵌入式系統中用于管理和控制硬件引腳的關鍵概念。它們在硬件層面上起著不同的作用。 GPIO配置&#xff1a; GPIO 是一種通用的硬件接口&#xff0c;用于控制和讀取數字信號。每個 …

自動駕駛——駛向未來的革命性技術

自動駕駛——駛向未來的革命性技術 自動駕駛的組件自動駕駛的優勢自動駕駛的應用自動駕駛的未來中國的自動駕駛 自動駕駛是一種技術&#xff0c;它允許車輛在沒有人類駕駛員的情況下自主地進行行駛。它利用各種傳感器、計算機視覺、人工智能和機器學習算法來感知和理解周圍環境…

.net連接mysql,提示找不到請求的 .Net Framework Data Provider。可能沒有安裝

開發完成的.net程序需要連接mysql數據庫&#xff0c;在個人電腦上運行沒問題&#xff0c;別人運行時提示“提示找不到請求的 .Net Framework Data Provider。可能沒有安裝”。經過查詢&#xff0c;安裝Connector/NET 8.1.0&#xff0c;下載地址如下所示&#xff1a; https://d…

Linux touch 命令指南大全

1. 概述 在本教程中,我們將學習touch命令。簡而言之,這個命令允許我們更新文件或目錄的最后修改時間和最后訪問時間。 因此,我們將重點關注如何使用該命令及其各種選項。 請注意,我們使用 Bash 測試了此處顯示的所有命令;但是,它們應該與任何兼容 POSIX 的 shell 一起使…

使用騰訊云輕量服務器Matomo應用模板建網站流量統計系統

騰訊云百科分享使用騰訊云輕量應用服務器Matomo應用模板搭建網站流量統計系統&#xff0c;Matomo 是一款開源的網站數據統計軟件&#xff0c;可以用于跟蹤、分析您的網站的流量&#xff0c;同時充分保障數據安全性、隱私性。該鏡像基于 CentOS 7.6 64位操作系統&#xff0c;已預…

postgresql字段被截斷問題

前言 最近遇到一個問題就是字段名過長&#xff0c;會被pg給截斷&#xff0c;導致原始字段和下游用的的字段不一樣&#xff0c;就會報錯。當然&#xff0c;小伙伴可能會說為什么會用那么長的字段名&#xff0c;每個應用程序里面處理不一樣&#xff0c;我們數據字段每次被使用就…

06-加密算法

加密算法 一、前言知識1、加密解密2、MD5&#xff08;最常見&#xff09;3、SHA4、進制5、時間戳6、URL編碼7、base64編碼8、unescape編碼9、AES加密10、DES&#xff08;類似于base64&#xff09; 二、常見加密形式算法解析三、演示案例1、某 CTF 比賽題目解析2、某 CMS 密碼加…

爆肝整理,Python自動化測試-Pytest參數化實戰封裝,一篇打通...

目錄&#xff1a;導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結&#xff08;尾部小驚喜&#xff09; 前言 參數化&#xff1…

uniapp案例30余種實戰項目

uniapp案例30余種實戰項目 mpvue框架仿滴滴出行didi-masteruni-app自定義導航欄title-customvue-mpvue-ChatRobot聊天機器人vue-mpvue-ChatRobot-master一款播課類小程序, 基于 mpvue 構建mp-podcast-mpvue-mastermpVue高仿美團小程序教程mpvue-meituan-masteruni-app 二維碼生…