在vivado里用rtl描述_如何利用Vivado HLS處理許多位準確或任意精度數據類型

我們在設計硬件時,它往往是要求更精確的位寬。例如,一個filter的輸入是12位和一個累加器的結果只需要一個最大范圍為27位。然而對于硬件設計來說,使用標準的C數據類型會造成硬件成本的浪費。這就會造成我們要使用更多的LUT和寄存器,延遲甚至可能超過時鐘周期和需要更多的周期來計算結果。這往往不是我們需要的結果。因此下面我將介紹如何利用Vivado HLS處理許多位準確或任意精度數據類型,以及允許使用任何(任意)寬度的模型變量。

C-base 數據類型

我們從硬件的角度來看數據類型,采用C/C++的數據類型都是以8bit為邊界,即:

? char (8-bit)

? short (16-bit)

? int (32-bit)

? long long (64-bit)

? float (32-bit)

? double (64-bit)

? 確切的寬度的整數類型如int16_t (16-bit) 和 int32_t (32-bit)

注意:char16_t和char32_t在Vivado Hls 中是不支持的

從上面發現,C的數據位寬是比較死板的,然而描述RTL里面的位寬是任意的。

例如,采用C語言去描述一個18*18 bits的乘法器,那么就需要將輸入數據都聲明為32 bits(int),結果聲明為64 bits(long long),這將會在FPGA中消耗4個DSP48E1,顯然這是很浪費資源的。

任意精度數據類型 Language Integer Data Type Required Header

C ? [u]int< W>(1024 bits) ? .#include< ap_cint.h>

C++ ? ap_[u]int< W>(1024 bits) ? .#include< ap_int.h>

C++ ? ap_[u]fixed< W,I,Q,O,N> ? .#include< ap_fixed.h>

其優點有:1.更高的時鐘頻率 2.更好的數據吞吐率 3.消耗資源更少

因此,使用任意精度數據類型能以更少的資源,獲得相同的精度,同時可以運行在更高的時鐘頻率下。

注意:在聲明任意數據類型的時候,我們往往在頭文件里面聲明,這會使得我們在做debug的時候會非常有用。

C-base 數據類型project

Step1 創建和打開project

I.打開Vivado HLS Command Prompt,按照下圖輸入命令

II.輸入vivado_hls -p window_fn_prj

Step2 Review Test Bench 和run C SimulaTIon

I.在Source打開window_fn_top.cpp

II.找到window_fn_top.h,按住Control鍵,并右擊,打開window_fn_top.h(頭文件)

在這里,我們可以看到,本設計所有數據類型的操作都是標準C/C++的浮點型。

III點擊Run C SimulaTIon

Step3 Run C SimulaTIon 和 Review Results

I.點擊Run C Synthesis

圖中我們發現,頂層中的instances占用了大部分資源。

II.打開Interface Summary

III.點擊Analysis,打開winfn_loop

這是浮點型乘法器(fmul),圖中可以看出,第一個狀態是讀取內存操作(兩個周期),然后是fmul操作(五個周期),最后的操作狀態是一個寫內存操作(一個周期)

III.退出Vivado Hls,并返回到command prompt

任意數據類型project

Step1 創建和仿真project

I.打開Vivado HLS Command Prompt,按照下圖輸入命令

II.輸入vivado_hls -p window_fn_prj

III.在Source打開window_fn_top.cpp

IV.找到window_fn_top.h,按住Control鍵,并右擊,打開window_fn_top.h(頭文件)

這里的數據類型的操作是ap_fixed點類型,它類似于float和double(因為它們支持整數和分數位表示的類型),window_fn_top.h是唯一不同于上一個project的頭文件。這些數據類型是在頭文件中定義的ap_fixed。

注意:你可以通過修改C代碼,將任意精度類型代替標準C類型,在這里必須做的更改是減少數據類型的大小。在這例子中,我們使用8位,24位,和18位,而不是32位浮點類型。通過較少的操作,減少面積,和更少的時鐘周期就可以完成project。我們也可以改變更常見的C類型(如int,short,和char),例如,更改數據類型(18位int(32位))可以確保只要一個dsp48就可以執行任何乘法,但是你必須確認設計仍然執行正確的操作和它這樣做所需的精度。由VIvado Hls提供的任意精度類型的好處是,可以仿真更新的C代碼來確認其功能和準確性。

V.點擊Run C SimulaTIon

控制臺面板顯示了C仿真的結果。隨著數據類型的更新,結果不再跟預期結果相同,然而他們是在誤差范圍內。

Step2 Run C Synthesize和 Review Results

I.點擊Run C Synthesis

注意:通過使用任意精度類型,已經減少了延遲和面積(50%和80%),并簡化了RTL硬件的操作。由于memory中的總位小于1024 bit,所以現在是自動執行LUTs和FFS而不是模塊RAM。

II.打開Interface Summary

注意:現在的數據端口是8 bits和24 bits

III.點擊Analysis,打開winfn_loop

總結

本文介紹任意精度數據類型的處理方法。通過Vivado HLs中兩個project的比較,得到結論,跟C-base 數據類型相比,使用任意精度數據類型能以更少的資源,獲得相同的精度,同時可以運行在更高的時鐘頻率下。

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

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

相關文章

Spring4.0之四:Meta Annotation(元注解)

Spring框架自2.0開始添加注解的支持&#xff0c;之后的每個版本都增加了更多的注解支持。注解為依賴注入&#xff0c;AOP&#xff08;如事務&#xff09;提供了更強大和簡便的方式。這也導致你要是用一個相同的注解到許多不同的類中去。這篇文章介紹meta annotation來解決這個問…

八皇后問題分析與Java實現

原文鏈接:傳送門 八皇后問題 八皇后問題&#xff0c;是一個古老而著名的問題&#xff0c;是回溯算法的典型案例。該問題是國際西洋棋棋手馬克斯貝瑟爾于1848年提出&#xff1a;在88格的國際象棋上擺放八個皇后&#xff0c;使其不能互相攻擊&#xff0c;即&#xff1a;任意兩個…

各種音視頻編解碼學習詳解 h264 ,mpeg4 ,aac 等所有音視頻格式

編解碼學習筆記&#xff08;一&#xff09;&#xff1a;基本概念 媒體業務是網絡的主要業務之間。尤其移動互聯網業務的興起&#xff0c;在運營商和應用開發商中&#xff0c;媒體業務份量極重&#xff0c;其中媒體的編解碼服務涉及需求分析、應用開發、釋放license收費等等。最…

shell 腳本比較字符串相等_shell腳本--邏輯判斷與字符串比較

涉及到比較和判斷的時候&#xff0c;要注意整數比較使用-lt&#xff0c;-gt&#xff0c;ge等比較運算符&#xff0c;詳情參考&#xff1a;整數比較文件測試使用 -d, -f, -x等運算發&#xff0c;詳情參考&#xff1a;文件測試邏輯判斷使用 &&(且)、||(或)、&#xff…

單例模式之惡漢模式(詳解)

一.設計模式 概念&#xff1a;設計模式是一套被反復使用、多人知曉的、經過分類編目的、代碼設計經驗的總結。 目的&#xff1a;是用設計模式可以重用代碼&#xff0c;讓代碼更容易被他人理解&#xff0c;保證代碼的可靠性。 二.為什么要使用單例模式&#xff1f; 如果創造出多…

JSP中的:request.getScheme()+://+request.getServerName()+:+request.getServer

String path request.getContextPath(); String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/"; <base href" <%basePath%>"> 這個語句是用來拼裝當前網頁的相對…

迷宮回溯問題分析和實現

原文鏈接:傳送門 迷宮問題 說明: 小球得到的路徑&#xff0c;和程序員設置的找路策略有關即&#xff1a;找路的上下左右的順序相關再得到小球路徑時&#xff0c;可以先使用(下右上左)&#xff0c;再改成(上右下左)&#xff0c;看看路徑是不是有變化測試回溯現象思考: 如何求出…

canvas clear 指定屬性的元素_好程序員web前端分享CSS屬性組成及作用

好程序員web前端分享CSS屬性組成及作用學習目標1、css屬性和屬性值的定義2、css文本屬性3、css列表屬性4、css背景屬性5、css邊框屬性6、css浮動屬性一、css屬性和屬性值的定義屬性&#xff1a;屬性是指定選擇符所具有的屬性&#xff0c;它是css的核心&#xff0c;css2共有150多…

mybatis大于小于等于

大于&#xff1a;<![CDATA[>]]> 小于&#xff1a;<![CDATA[<]]> 等于&#xff1a;<![CDATA[]]> 大于等于&#xff1a;<![CDATA[>]]> 小于等于&#xff1a;<![CDATA[<]]>轉載于:https://www.cnblogs.com/YuanFan123/p/7234530.html

2017年秋招-廣聯達面試及思考

面試官提問&#xff1a; 自我介紹&#xff08;沒有做充分的準備&#xff0c;總感覺說的不好&#xff09;為什么選擇做前端&#xff1f;在前端方向&#xff0c;你認為自身有哪些優點&#xff1f;前端需要掌握哪些技術知識點&#xff1f;看過哪些比較好的網站&#xff1f;會不會使…

排序算法介紹和分類

原文鏈接:傳送門 排序算法的介紹 排序也成排序算法 排序也稱排序算法(Sort Algorithm)&#xff0c;排序是將一組數據&#xff0c;依指定的順序進行排列的過程。 排序的分類&#xff1a; 1) 內部排序: 指將需要處理的所有數據都加載到**內部存儲器(內存)**中進行排序。 2) 外…

認識高清視頻編碼(MPEG、H.264、WMV-HD、RMVB)

文章出處&#xff1a;www.net1980.com 原創 最近兩年&#xff0c;“高清”這個詞語非常火熱&#xff0c;已經成為家電和IT行業的最新潮流了。高清視頻和普通視頻有什么區別呢&#xff1f;主要是分辨率上的區別&#xff0c;720P視頻的分辨率為1280X720&#xff0c;1080P視頻的分…

解讀SPP / SPPF / SimSPPF / ASPP / RFB / SPPCSPC

SPP與SPPF 一、SPP的應用的背景 在卷積神經網絡中我們經常看到固定輸入的設計&#xff0c;但是如果我們輸入的不能是固定尺寸的該怎么辦呢&#xff1f; 通常來說&#xff0c;我們有以下幾種方法&#xff1a; &#xff08;1&#xff09;對輸入進行resize操作&#xff0c;讓他們…

go mongodb排序查詢_《MongoDB》day two

Mongodb的更新方式有&#xff1f;db.集合名.update() 函數:用于更新已存在的文檔。語法格式&#xff1a;db.COLLECTION_NAME.update({查詢條件},{更新內容},{更新參數(可選)}) 注&#xff1a;這種方式會覆蓋原有的文檔。使用更新操作符 使用 save()函數更新文檔 Mongodb的updat…

【轉】 JMeter學習(二十四)linux啟動jmeter,執行./jmeter.sh報錯解決方法

1.l-bash: ./jmeter.sh: Permission denied解決辦法&#xff1a;jmeter.sh的執行權限改改&#xff0c;是權限不夠chmod 777 jmeter.sh2.An error occurred:No X11 DISPLAY variable was set, but this program performed an operation which requires it.步驟一&#xff1a;Lin…

哈希表思路圖解和代碼實現

原文鏈接傳送門 哈希表(散列)-Google上機題 看一個實際需求&#xff0c;google公司的一個上機題: 有一個公司,當有新的員工來報道時,要求將該員工的信息加入(id,性別,年齡,住址…),當輸入該員工的id時,要求查找到該員工的 所有信息. 要求: 不使用數據庫,盡量節省內存,速度越…

android開發學習——Mina框架

Apache Mina Server 是一個網絡通信應用框架&#xff0c;對socket進行了封裝。 http://www.cnblogs.com/moonandstar08/p/5475766.html http://blog.csdn.net/u010739551/article/details/47361365 http://www.cnblogs.com/yanghuiping/p/4108063.html &#xff08;mina 自定…

glibc交叉編譯_TSN之linuxptp交叉編譯

0 開發環境1 linuxptp是什么2 為什么要交叉編譯linuxptp3 修改makefile4 修改源碼5 交叉編譯0 開發環境筆記本&#xff1a;ubuntu18.04.5&#xff0c;內核版本為5.3 開發板&#xff1a;imx8mp-evk內核版本&#xff1a;Linux5.4.24交叉編譯工具鏈&#xff1a;fsl-imx-xwayland-g…

230. Kth Smallest Element in a BST

題目&#xff1a; Given a binary search tree, write a function kthSmallest to find the kth smallest element in it. Note: You may assume k is always valid, 1 ≤ k ≤ BSTs total elements. Follow up:What if the BST is modified (insert/delete operations) often …

聲音編碼

1.脈沖編碼調制PCM文件格式簡介 將音頻數字化&#xff0c;其實就是將聲音數字化。最常見的方式是透過脈沖編碼調制PCM(Pulse Code Modulation) 。運作原理如下。首先我們考慮聲音經過麥克風&#xff0c;轉換成一連串電壓變化的信號&#xff0c;如圖一所示。這張圖的橫座標為秒&…