1. 程式人生 > >1---Vivado HLS開發流程簡單介紹

1---Vivado HLS開發流程簡單介紹

在傳統的FPGA設計流程中,一般是自頂向下的模組化設計,這些模組包括使用者自己編寫的RTL或者是供應商提供的IP核。而在Xilinx新推出的高生產力設計流程中是以IP為核心的,把所有的模組都看做是IP,封裝為IP,最主要的是IP的設計是基於C語言的,最後通過HLS將C語言程式碼轉化為RTL,這能極大的加快設計程序。從這段時間的學習來看,HLS綜合出來的電路比我自己寫的RTL更省資源,在時序方面可能會差一些,因為我自己是習慣性的全流水,但它也滿足了時序的要求。HLS還提供了非常多的經過深度優化的庫,所以我個人覺得HLS綜合的電路已經比很多剛接觸FPGA不久的工程師要好了,傳統的RTL設計可能不會消失,但很可能會越來越少了。

HLS在不新增任何優化指令的情況下預設綜合電路為最節省資源的情況,即能使用分時複用就使用分時複用,能在一個週期中完成多個操作(滿足時鐘頻率約束的要求)則絕不流水。從這裡得到的啟發是,設計不要過度的流水,只要能滿足時鐘頻率的需求,我們在一個時鐘週期內可以進行多個操作,於是在低頻率的系統中,我們可以節省很多的暫存器資源。這樣做還有一個好處是我們可以使用assign來完成邏輯設計,然後再對輸出進行寄存,可以極大的減少程式碼量,增加程式碼的可讀性,HLS綜合後的RTL程式碼的風格就是這樣的,當然因為命名的原因該程式碼幾乎沒有可讀性,我們可以不用刻意去讀懂它。

在學習Vivado HLS工具之前,我們需要了解HLS工具在FPGA開發流程中的作用。Vivado工具的設計理念是以IP為核心的,所有的功能模組都可以看做並且封裝成一個IP,最後由Vivado整合,以實現最大化的設計複用。所以Vivado HLS可以看做是一個IP封裝工具,它封裝的是由C、C++、SystemC或者OpenCL等高階語言實現的功能函式。

寫一下我自己理解的Vivado HLS工具學習流程:

  • 熟悉GUI,瞭解每一個按鈕的作用和意義
  • 瞭解從工程建立到設計輸出的每個步驟的作用和意義
  • 瞭解Vivado HLS工具在FPGA設計中的作用和意義
  • 掌握優化指令directive的使用
  • 學習HLS的Coding Styles

從一張圖簡單講一下Vivado HLS的設計流程

這裡寫圖片描述

這張圖是Xilinx使用者指南ug902中的,從圖中我們可以看到HLS的設計流程可以分為3個大的部分

  • 設計輸入
  • 模擬綜合
  • 設計輸出

設計輸入裡有三個檔案是我們需要手動編寫的,TestBench、C函式檔案、標頭檔案,而Constraints檔案是在建立工程的時候完成的,主要是器件和時鐘頻率的約束,Directive就是優化指令檔案,一般是C模擬通過之後新增的,這是綜合之前的關鍵一步,後面會聯合綜合部分講到。Xilinx的文件裡特別強調了C TestBench的作用,建議不要越過這一步直接綜合,HLS一個很大的優越性就是C模擬的速度要比RTL模擬的速度快很多。C函式檔案其實對應的就是我們平常編寫的RTL,可以把它看成是一個帶輸入輸出埠的盒子,這個盒子完成我們需求的函式功能。而標頭檔案的作用主要是增加程式碼的可讀性和可移植性,標頭檔案裡宣告任意精度型別,編寫巨集控制設計的模擬和綜合流程。

模擬綜合主要包括兩個部分,一是C模擬和C聯合RTL模擬,二是C的綜合。因為只是為了驗證設計的功能正確性,C模擬和C聯合RTL模擬較為簡單,如果設計沒有錯誤的話,點兩下按鈕就可以結束了,如果報錯,則根據報錯資訊進行debug就可以了。而C的綜合難度較大一點,需要深入瞭解for迴圈、陣列等結構在不同優化指令下的綜合情況,需要看懂綜合報告,這就要求對FPGA的底層有一定的瞭解,如果綜合報告沒有滿足我們的需求,就要修改directive並重新綜合,甚至需要修改C程式碼,這是一個迭代的過程。當綜合報告滿足我們的需求並且C和RTL聯合模擬通過後就可以進行設計輸出了。

設計輸出就沒什麼 了,根據自己需要將該IP用到的地方進行匯出就可以了。

設計步驟:

  1. 建立工程,編寫設計輸入 ——參考資料:ug871,ug902
  2. C模擬和debug ——————-參考資料:ug871,ug902
  3. C綜合及結果分析—————-參考資料:ug871,ug902
  4. C聯合RTL模擬 ——————-參考資料:ug871,ug902
  5. 輸出———————————-參考資料:ug871,ug902

再提一下HLS的一個好處:可以通過directive來將同樣的程式碼綜合成不同結構的電路
比如我們要重複使用一個模組A,我們可能在資源不夠的時候需要對A進行分時複用,在需要高吞吐量的時候又需要對A進行邏輯複製,如果是寫RTL程式碼的話,這兩種方式都需要不少的程式碼量,並且從一種方式換到另一種方式的時候需要重新編寫程式碼,非常耗時。而使用HLS的話,我們只需要一個for迴圈對A進行呼叫就可以了,程式碼非常少,至於我們需要綜合成何種結構的電路則新增不同的directive就可以了,並且可以同時生成不同的solution,同時綜合成幾種不同的電路,非常方便。

學習資料

好的HLS設計 = Good Coding Styles + Good Directives

相關推薦

1---Vivado HLS開發流程簡單介紹

在傳統的FPGA設計流程中,一般是自頂向下的模組化設計,這些模組包括使用者自己編寫的RTL或者是供應商提供的IP核。而在Xilinx新推出的高生產力設計流程中是以IP為核心的,把所有的模組都看做是IP,封裝為IP,最主要的是IP的設計是基於C語言的,最後通過HL

qt-qml移動開發之在ios上開發和部署app流程簡單介紹

mod target auto 100% rda 自己 color ans ora qt5.3已經全面支持移動開發,除了mac,windows,linux。還支持ios,android,wp,meego等移動平臺,本教程是作者依據自己的經驗,從頭講怎麽樣在ios上公布

3課: Vivado HLS設計流程介紹

<embed src="https://imgcache.qq.com/tencentvideo_v1/playerv3/TPout.swf?max_age=86400&v=20161117&vid=v0319lunjjl&auto=0" all

值得推薦的android開發框架簡單介紹

ron 事件 能開 android 開發人員 服務端開發 kjpush 流量 htm 一些總結出來的Android高速開發框架,所有都是開源框架,附帶項目地址,是開發學習的絕佳資料。 Direct-Load-apk項目 項目主頁地址:http://www.kymjs

【高德地圖開發】---簡單介紹

pat 人員 4.2 服務 登錄 .com con 高德 搜索服務 高德地圖 Android SDK 能夠為 Android 應用開發人員提供互動的、功能豐富的 Android 手機地圖。 將地圖顯示功能與搜索服務、定位服務分別封裝為三個類庫。每一個類庫不相互

第一階段:前端開發_JDBC簡單介紹

接口 簡單介紹 關閉 odin 類型 管理器 sql語句 ger select 2018-06-25 JDBC簡單介紹 一、什麽是JDBC    JDBC(Java DataBase Connectivity)就是Java數據庫連接,說白了就是用Java語言來操作

Spring原始碼深度解析-1、Spring核心類簡單介紹

在更新JAVA基礎原始碼學習的同時,也有必要把Spring抓一抓,以前對於spring的程度僅在於使用,以及一點IOC/AOP的概念,具體深層的瞭解不是很深入,每次看了一點原始碼就看不下去,然後一轉眼都忘記看了啥。 所以這次專門買了書,來細細品味下Spring。 希望能從這一波學習中加強自己

“敏捷開發、迭代開發、瀑布開發”的簡單介紹

一、敏捷開發 原理 敏捷開發以使用者的需求進化為核心,採用迭代、循序漸進的方法進行軟體開發。在敏捷開發中,軟體專案在構建初期被切分成多個子專案,各個子專案的成果都經過測試,具備可視、可整合和可執行使用

vivado HLS入門流程

參照部落格1和部落格2走了一遍,遇到問題註釋一下,以便他人節省時間。 問題描述:生成波形檔案無法開啟。 解決: 1、在HLS介面設定部落格中所說 Solution > Run C/RTL Cosimulation,模擬完成後,需要在Vivado下檢視模擬結果。

Vivado HLS 開發步驟(高階綜合)(FPGA)

 對於Vivado Hls來說,輸入包括Tesbench,C/C++原始碼和Directives,相應的輸出為IP Catalog,DSP和SysGen,特別的,一個工程只能有一個頂層函式用於綜和,這個頂層函式下面的子函式也是可以被綜合的,會生成相應的VHDL和Ve

OpenStack 建立VM流程簡單介紹__Newton版本

才疏學淺,若有不當之處敬請雅正, 本文適合剛剛開始看Nova原始碼的人,先把整個流程串一下,後面再詳細介紹一下。 Nova 接收使用者請求的入口:nova/api/compute/servers.py nova/api/compute/servers.py class

1.Direct2D 捕魚遊戲開發-流程介紹

環境: 編輯器:VS2015 系統:win10 專業版 碰撞:aabb obb盒模型(obb採用分離軸進行判斷) 渲染:direct2d 資料夾介紹 目錄截圖: frame:放子彈物件,魚物件,檔案讀取物件,魚建立控制物件,金幣物件,結構場景0,結構場景1,結構場景

站在巨人的肩膀上開發遊戲 1 -- orx 庫簡單介紹

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Activiti6.0流程引擎學習——(1)Activiti的簡單介紹

本文開始學習Activiti流程引擎,寫下後面的文章希望可以幫到剛接觸的童鞋。 首先還是要多廢話幾句,講解一下流程引擎是什麼? 工作流引擎最常見用於審批流程中,現在一線網際網路公司也開始使用,並有快速推廣的趨勢,複雜繁多的業務流程如果採用if else實現那將是崩潰的,程式碼不可維護,業務流

【學習筆記】開發工具:1、Git的學習使用(簡單介紹

一、Git的特點 1、較優的儲存能力; 2、比較好的效能; 3、開源的產品; 4、易備份; 5、支援離線操作; 6、定製工作流程。 二、Git的下載安裝配置 1、下載地址:https://git-scm.com/download/ 進入後選擇對應的作業系

百度編輯器UEEDITOR使用簡單介紹 UEditor表單提交和後臺互動詳解 最後更新對應的版本:1.2.5.1 教程描述: 富文字編輯器的使用開發中,表單提交有多種場景,編輯器初始化有新增文章和編輯

UEditor表單提交和後臺互動詳解最後更新對應的版本:1.2.5.1 教程描述: 富文字編輯器的使用開發中,表單提交有多種場景,編輯器初始化有新增文章和編輯就文章兩種場景,提交表單有普通提交也有ajax提交表單兩種情景,此教程詳細講解這幾種場景下如何保證後臺正確拿到資料。 一、編輯器內容初始化(即往編

【Android 應用開發】 ActionBar 樣式具體解釋 -- 樣式 主題 簡單介紹 Actionbar 的 icon logo 標題 菜單樣式改動

detail sub str 進度條 代碼分析 extc dst 模式 html 作者 : 萬境絕塵 ([email protected]/* */)轉載請著名出處 : http://blog.csdn.net/shulianghan/article/deta

開源項目Universal Image Loader for Android 說明文檔 (1) 簡單介紹

bst 成功 開源 ica ctu structure 使用 說明 由於  When developing applications for Android, one often facesthe problem of displa

android mvp高速開發框架介紹(dileber的簡單介紹

activity 數據 -c pos androi mod family 基於 ebe 今天我為大家介紹一款android mvp框架:dileber(https://github.com/dileber/dileber.git) 官方交流qq群:171443

UML建模學習1:UML統一建模語言簡單介紹

教授 分法 之間 實例 層次 ech 集成 視覺 行業 一什麽是UML? Unified Modeling Language(UML又稱為統一建模語言或標準建模語言)是國際對象管理組織OMG制定的一個通 用的、可視化建模語言標準。