一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

請(qǐng)問一下怎樣去使用HLS創(chuàng)建IP呢

OpenFPGA ? 來源:OpenFPGA ? 作者:碎碎思 ? 2022-09-22 09:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

目前我們已經(jīng)單獨(dú)使用 HLS 創(chuàng)建了IP(見上一節(jié))。在本實(shí)踐中,我們將實(shí)際實(shí)現(xiàn) HLS 組件作為 FPGA 設(shè)計(jì)的一部分。首先我們將學(xué)習(xí)如何做到這一點(diǎn),然后我們將創(chuàng)建硬件來解決一些實(shí)際問題。

首先使用上一節(jié)的文件創(chuàng)建一個(gè)新的 HLS 項(xiàng)目:

重新綜合一下

每次我們更改硬件時(shí),我們都需要告訴 HLS 將其導(dǎo)出為硬件描述語言并生成 Vivado 需要的所有各種源數(shù)據(jù)。

選擇Solution → Export RTL → 選擇 "Vivado IP for System Generator" → 單擊確定

接下來我們需要告訴 Vivado 我們的新 IP 在哪里

回到 Vivado,打開 Block Design。單擊Window -> IP Catalog以打開 IP 目錄。單擊左側(cè) Flow Navigator 中的設(shè)置。選擇 IP,然后選擇存儲(chǔ)庫。按加號(hào)圖標(biāo)。從文件瀏覽器中選擇 HLS 項(xiàng)目目錄,然后單擊選擇。Vivado 將掃描 HLS 項(xiàng)目,并彈出一個(gè)框,顯示 IP 已添加到項(xiàng)目中。單擊確定。

回到 Block Design,單擊圖表左側(cè)的 Add IP 按鈕。IP 核將被稱為之前創(chuàng)建IP時(shí)輸入的顯示名稱,或者 Toplevel 。雙擊 IP 進(jìn)行添加。

要允許 IP 內(nèi)核訪問 DDR 存儲(chǔ)器,需要在 Zynq 處理系統(tǒng)上啟用 AXI 從接口。雙擊 Zynq IP ,選擇“PS-PL Configuration”,展開“HP Slave AXI Interface”,勾選 S AXI HP0 interface. 單擊確定,應(yīng)該會(huì)看到 Zynq 模塊上出現(xiàn)一個(gè)新端口

現(xiàn)在可以使用連接自動(dòng)化來完成連接。運(yùn)行連接自動(dòng)化并檢查 S_AXI_HP0. 應(yīng)該建議連接到 m_axi IP 核上的端口。

同樣在連接自動(dòng)化檢查 s_axi_AXILiteS和s_axi_control. 應(yīng)該連接到M_AXI_GP0 處理系統(tǒng)上。單擊確定。

現(xiàn)在,IP將通過其從接口連接到processing_system7_0_AXI_periph,并通過其主接口連接到AXI_mem_intercon。

730ac054-3a12-11ed-9e49-dac502259ad0.png

現(xiàn)在可以保存模塊設(shè)計(jì)、生成比特流并再次導(dǎo)出硬件。覆蓋現(xiàn)有的硬件規(guī)范(XSA 文件)。

連接自動(dòng)化問題

如果對(duì)使用連接自動(dòng)化生成的 AXI 總線有問題(即,如果它們與上述結(jié)構(gòu)不同),請(qǐng)嘗試刪除所有AXI 互連模塊并再次運(yùn)行它。

一般原則是, Zynq 模塊的 M_AXI 應(yīng)該可追溯至 IP 內(nèi)核上的所有 S_AXI,而 IP 內(nèi)核的 M_AXI 應(yīng)可追溯至 Zynq 模塊上的 S_AXI_HP0。

在 Vitis 中使用 IP

當(dāng) HLS 導(dǎo)出我們的 IP 時(shí),它幫助我們自動(dòng)生成了一個(gè)軟件驅(qū)動(dòng)程序。但是我們需要告訴 Vitis 在哪里可以找到這個(gè)驅(qū)動(dòng)程序。

在 Vitis 中,選擇 Xilinx → Repositories。在 Local Repositories 下,單擊 New 并選擇 HLS 項(xiàng)目的文件夾。單擊重新掃描存儲(chǔ)庫,然后單擊確定。

右鍵單擊design_1_wrapper 平臺(tái)并單擊“Update Hardware Specification”以更新我們已更改硬件的問題。

我們現(xiàn)在應(yīng)該能夠看到新 IP 及其驅(qū)動(dòng)程序。

在 Board Support Package 設(shè)置下的platform.spr 文件中,應(yīng)該能夠看到列出的 IP,以及它使用驅(qū)動(dòng)程序.

現(xiàn)在可以與IP進(jìn)行交互了,如下例所示。

#include
#include"platform.h"
#include"xil_printf.h"
#include"xparameters.h"
#include"xtoplevel.h"
#include"xil_cache.h"

u32shared[1000];

intmain(){
inti;
XToplevelhls;

init_platform();
Xil_DCacheDisable();

print("
HLStest
");
for(i=0;i

對(duì) FPGA 進(jìn)行編程并啟動(dòng)此代碼,應(yīng)該會(huì)看到以下內(nèi)容:

HLStest
arg2=12950
arg3=3050

如您所見,目前組件可以使用XToplevel_Start啟動(dòng),xtopleevel_IsDone會(huì)告訴你何時(shí)完成。XToplevel_Set_ram告訴HLS組件共享內(nèi)存在主內(nèi)存中的位置。允許HLS讀寫,就像RAM從0開始一樣,但實(shí)際上它將指向我們的共享內(nèi)存。不要忘記設(shè)置RAM偏移量,否則HLS組件將寫入隨機(jī)內(nèi)存位!

當(dāng)更改 HLS 時(shí)

當(dāng)更改 HLS 代碼時(shí),請(qǐng)執(zhí)行以下步驟以確保的最終文件已更新。

重新運(yùn)行綜合。

重新導(dǎo)出 IP 核。

在 Vivado 中,應(yīng)該已經(jīng)識(shí)別到了變化,并且會(huì)出現(xiàn)一條消息說“IP Catalog is out-of-date”。

如果沒有,請(qǐng)單擊 IP Status,然后單擊重新運(yùn)行報(bào)告

單擊刷新 IP 目錄

在“Generate Output Products”對(duì)話框中,單擊“Generate”。

單擊生成比特流。

導(dǎo)出硬件(包括比特流)。

在 Vitis 中重新編程 FPGA 并運(yùn)行軟件。

如果更改了硬件接口,可能需要重新生成系統(tǒng)并將應(yīng)用程序項(xiàng)目移入其中。

測(cè)量執(zhí)行時(shí)間

下面將舉例使用 ARM 處理系統(tǒng)中的計(jì)時(shí)器來測(cè)量執(zhí)行一段代碼需要多長(zhǎng)時(shí)間,然后演示可以在硬件中更快地執(zhí)行相同的操作。我們要測(cè)量的代碼實(shí)現(xiàn)了對(duì)Collatz(柯拉茲) 猜想的測(cè)試。該猜想指出:

柯拉茲猜想

取任何 正整數(shù)n(其中n不為0)。如果 n 是偶數(shù),則除以 2 得到 n / 2。如果 n 是奇數(shù),則將其乘以 3 并加 1 得到 3 n + 1。無限重復(fù)該過程。猜想是,無論你從哪個(gè)數(shù)字開始,你最終總會(huì)達(dá)到 1。

創(chuàng)建一個(gè) HLS 組件來測(cè)試前 1000 個(gè)整數(shù),以驗(yàn)證如果執(zhí)行上述步驟,它們最終都會(huì)收斂到 1。將在共享數(shù)組中輸出每個(gè)數(shù)字達(dá)到 1 所需的步數(shù)。

下面的代碼是使用的ARM軟件:

#include
#include"platform.h"
#include"xil_printf.h"
#include"xparameters.h"
#include"xtoplevel.h"
#include"xil_cache.h"

intshared[1000];
XToplevelhls;

unsignedintcollatz(unsignedintn){
intcount=0;
while(n!=1){
if(n%2==0){
n/=2;
}else{
n=(3*n)+1;
}
count++;
}
returncount;
}

voidsoftware(){
inti;
for(i=0;i

檢查此代碼。該函數(shù)software()是前 1000 個(gè)整數(shù)的 Collatz 迭代階段的軟件實(shí)現(xiàn),將迭代計(jì)數(shù)放在全局?jǐn)?shù)組shared中。該main函數(shù)設(shè)置 shared為 1 到 1001 的整數(shù),運(yùn)行software(),然后將結(jié)果打印出來。然后它重置共享并運(yùn)行hardware()并打印結(jié)果。

在 HLS 中實(shí)現(xiàn)一個(gè)硬件組件來計(jì)算前 1000 個(gè)整數(shù)的 Collatz 計(jì)數(shù)(就像 ARM 軟件一樣)。從以下頂級(jí)結(jié)構(gòu)開始:

#include//Requiredformemcpy()

uint32workingmem[1000];

uint32toplevel(uint32*ram,uint32*arg1,uint32*arg2,uint32*arg3,uint32*arg4){
#pragmaHLSINTERFACEm_axiport=ramoffset=slavebundle=MAXI
#pragmaHLSINTERFACEs_axiliteport=arg1bundle=AXILiteS
#pragmaHLSINTERFACEs_axiliteport=arg2bundle=AXILiteS
#pragmaHLSINTERFACEs_axiliteport=arg3bundle=AXILiteS
#pragmaHLSINTERFACEs_axiliteport=arg4bundle=AXILiteS
#pragmaHLSINTERFACEs_axiliteport=returnbundle=AXILiteS

//Readinstartingvalues
memcpy(workingmem,ram,4000);

//CalculatetheCollatzresults.
//workingmem[x]=collatz(workingmem[x]);
//...yourcodehere...

//Burstcopyworkingmemtomainmemory
memcpy(ram,workingmem,4000);
return0;
}

因?yàn)?Collatz 循環(huán)是無界的,所以 HLS 將只有問號(hào)而不是時(shí)間估計(jì)。

然后將 IP 核放入設(shè)計(jì)中并運(yùn)行 IP 核以測(cè)試它是否輸出正確的答案。以上main.c應(yīng)該可以驅(qū)動(dòng) IP 內(nèi)核。

那么,硬件或軟件更快?

7373ecf0-3a12-11ed-9e49-dac502259ad0.jpg



審核編輯:劉清

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

    關(guān)注

    9

    文章

    428

    瀏覽量

    27360
  • Vivado
    +關(guān)注

    關(guān)注

    19

    文章

    835

    瀏覽量

    68789
  • HLS
    HLS
    +關(guān)注

    關(guān)注

    1

    文章

    133

    瀏覽量

    24873

原文標(biāo)題:在 Vivado 中使用 HLS 創(chuàng)建的IP

文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何使用AMD Vitis HLS創(chuàng)建HLS IP

    本文逐步演示了如何使用 AMD Vitis HLS創(chuàng)建個(gè) HLS IP,通過 AXI4 接口從存儲(chǔ)器讀取數(shù)據(jù)、執(zhí)行簡(jiǎn)單的數(shù)學(xué)運(yùn)算,然后
    的頭像 發(fā)表于 06-13 09:50 ?668次閱讀
    如何使用AMD Vitis <b class='flag-5'>HLS</b><b class='flag-5'>創(chuàng)建</b><b class='flag-5'>HLS</b> <b class='flag-5'>IP</b>

    請(qǐng)問一下怎樣搭建種Arduino IDE環(huán)境

    請(qǐng)問一下怎樣搭建種Arduino IDE環(huán)境?有哪些步驟?
    發(fā)表于 10-25 08:40

    請(qǐng)問一下怎樣設(shè)計(jì)種基于stm32f103的數(shù)字示波器

    請(qǐng)問一下怎樣設(shè)計(jì)種基于stm32f103的數(shù)字示波器
    發(fā)表于 11-12 06:51

    請(qǐng)問一下怎樣使用STM32的USART

    請(qǐng)問一下怎樣使用STM32的USART?有哪些操作步驟?
    發(fā)表于 11-18 07:16

    請(qǐng)問一下怎樣使用STM32L152芯片的基本定時(shí)器

    請(qǐng)問一下怎樣使用STM32L152芯片的基本定時(shí)器?有哪些使用步驟?
    發(fā)表于 11-24 06:24

    請(qǐng)問一下怎樣使用STM32 KEIL的printf函數(shù)

    請(qǐng)問一下怎樣使用STM32 KEIL的printf函數(shù)?
    發(fā)表于 11-30 07:40

    請(qǐng)問一下怎樣使用串口下載stm32程序

    請(qǐng)問一下怎樣使用串口下載stm32程序?有哪些基本步驟
    發(fā)表于 12-06 07:11

    請(qǐng)問一下基于stm32f1的FreeRTOS該怎樣移植

    請(qǐng)問一下基于stm32f1的FreeRTOS該怎樣移植?其代碼該怎樣
    發(fā)表于 12-16 08:10

    請(qǐng)問一下怎樣使用Buildroot編譯madplay

    請(qǐng)問一下怎樣使用Buildroot編譯madplay
    發(fā)表于 12-27 06:32

    請(qǐng)問一下怎樣安裝種TFTP服務(wù)器

    請(qǐng)問一下怎樣安裝種TFTP服務(wù)器?有哪些安裝步驟
    發(fā)表于 12-27 07:25

    請(qǐng)問一下怎樣設(shè)計(jì)個(gè)Arduino UNO擴(kuò)展板

    請(qǐng)問一下怎樣設(shè)計(jì)個(gè)Arduino UNO擴(kuò)展板
    發(fā)表于 03-01 07:48

    請(qǐng)問一下怎樣移植官方SDK

    請(qǐng)問一下怎樣移植官方SDK?有哪些移植步驟?
    發(fā)表于 03-01 07:09

    使用Vitis HLS創(chuàng)建屬于自己的IP相關(guān)資料分享

    ,我們直在使用Vivado給我們提供的IP或者使用硬件描述語言制作 IP 。今天我們將講解如何使用HLS-高級(jí)綜合語言來創(chuàng)建屬于我們自己的
    發(fā)表于 09-09 16:45

    請(qǐng)問一下怎樣使用cubeide生成些代碼?

    請(qǐng)問一下怎樣使用cubeide生成些代碼?
    發(fā)表于 12-08 09:07

    使用教程分享:在Zynq AP SoC設(shè)計(jì)中高效使用HLS IP

    高層次綜合設(shè)計(jì)最常見的的使用就是為CPU創(chuàng)建個(gè)加速器,將在CPU中執(zhí)行的代碼移動(dòng)到FPGA可編程邏輯提高性能。本文展示了如何在Zynq AP SoC設(shè)計(jì)中使用HLS
    發(fā)表于 02-07 18:08 ?3984次閱讀
    使用教程分享:在Zynq AP SoC設(shè)計(jì)中高效使用<b class='flag-5'>HLS</b> <b class='flag-5'>IP</b>(<b class='flag-5'>一</b>)