色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

HLS最全知識(shí)庫(kù)

OpenFPGA ? 來源:OpenFPGA ? 2023-01-15 11:27 ? 次閱讀

HLS最全知識(shí)庫(kù)

副標(biāo)題-FPGA高層次綜合HLS(二)-Vitis HLS知識(shí)庫(kù)

高層次綜合(High-level Synthesis)簡(jiǎn)稱HLS,指的是將高層次語(yǔ)言描述的邏輯結(jié)構(gòu),自動(dòng)轉(zhuǎn)換成低抽象級(jí)語(yǔ)言描述的電路模型的過程。

對(duì)于AMD Xilinx而言,Vivado 2019.1之前(包括),HLS工具叫Vivado HLS,之后為了統(tǒng)一將HLS集成到Vitis里了,集成之后增加了一些功能,同時(shí)將這部分開源出來了。Vitis HLS是Vitis AI重要組成部分,所以我們將重點(diǎn)介紹Vitis HLS。

官方指南:

https://docs.xilinx.com/r/_lSn47LKK31fyYQ_PRDoIQ/root

重要術(shù)語(yǔ)

LUT 或 SICE

LUT 或 SICE是構(gòu)成了 FPGA 的區(qū)域。它的數(shù)量有限,當(dāng)它用完時(shí),意味著您的設(shè)計(jì)太大了!

BRAM 或 Block RAM

FPGA中的內(nèi)存。在 Z-7010 FPGA上,有 120 個(gè),每個(gè)都是 2KiB(實(shí)際上是 18 kb)。

Latency延遲

  • 設(shè)計(jì)產(chǎn)生結(jié)果所需的時(shí)鐘周期數(shù)。
  • 循環(huán)的延遲是一次迭代所需的時(shí)鐘周期數(shù)。

Initiation Interval (or II, or Interval間隔)

  • 在接受新數(shù)據(jù)之前必須執(zhí)行的時(shí)鐘周期數(shù)。

這與延遲不同!如果函數(shù)是流水線的,許多數(shù)據(jù)項(xiàng)會(huì)同時(shí)流過它。延遲是一個(gè)數(shù)據(jù)項(xiàng)被推入后彈出的時(shí)間,而時(shí)間間隔決定了數(shù)據(jù)可以被推入的速率。

  • 循環(huán)的間隔是可以開始循環(huán)迭代的最大速率,以時(shí)鐘周期為單位。
18af9486-947b-11ed-bfe3-dac502259ad0.png

上圖中,左邊是函數(shù)右邊是循環(huán),左邊的時(shí)間間隔(接收新數(shù)據(jù)之前)是3個(gè)時(shí)鐘周期,右邊循環(huán)的間隔則是一個(gè)時(shí)鐘周期;對(duì)于左邊的延遲是這個(gè)函數(shù)產(chǎn)生結(jié)果的時(shí)鐘周期數(shù),是func_C運(yùn)行完畢產(chǎn)生的周期數(shù),為5個(gè)時(shí)鐘周期,右邊循環(huán)的延遲是一次迭代所需的時(shí)鐘數(shù),是4個(gè)時(shí)鐘周期。

上面的概念非常重要,要不然下面的一些指令作用也看不懂~

重要的指令

這是在實(shí)際使用過程中重要的指令列表(不是全部)。

  • Functions-函數(shù)

  • loops-循環(huán)

  • Various-所有都適合

  • Arrays-數(shù)組

  • parameters-參數(shù)

指令 適用范圍 描述
PIPELINE 流水線指令 Functions, loops 簡(jiǎn)單解釋就是使輸入更頻繁地傳遞給函數(shù)或循環(huán)。流水線后的函數(shù)或循環(huán)可以每 N 個(gè)時(shí)鐘周期處理一次新輸入,其中 N 是啟動(dòng)間隔(Initiation Interval)。'II' 默認(rèn)為 1,是 HLS 應(yīng)針對(duì)的啟動(dòng)間隔(即嘗試將新數(shù)據(jù)項(xiàng)輸入管道的速度應(yīng)該多快)。
UNROLL loops 創(chuàng)建循環(huán)的因子副本,讓其并行執(zhí)行(如果滿足數(shù)據(jù)流依賴性)。但是會(huì)浪費(fèi)資源(以資源換取速度)。盡可能將程序展開以提高速度。
ALLOCATION Various 限制某事物的實(shí)例數(shù)。例如,如果只想在另一個(gè)函數(shù)toplevel中獲得函數(shù)foo的三個(gè)副本,請(qǐng)使用位置toplevel、限制設(shè)置為3、實(shí)例設(shè)置為foo、類型設(shè)置為“function”的分配。這也適用于特定的運(yùn)算。
ARRAY_MAP Arrays 將多個(gè)較小的陣列映射成一個(gè)較大的陣列,以犧牲訪問時(shí)間為代價(jià)來節(jié)省訪問邏輯或 BRAM。'instance' 可以設(shè)置為任何未使用的名稱。ARRAY_MAP 對(duì)同一個(gè)實(shí)例使用多個(gè) 來告訴 HLS 創(chuàng)建一個(gè)名為“instance”的新數(shù)組,其中包含所有較小的數(shù)組。保留“偏移”未設(shè)置。請(qǐng)注意,有些人在將三個(gè)或更多初始化數(shù)組映射到單個(gè) RAM 時(shí)遇到了此指令引起的錯(cuò)誤。如果在仿真和實(shí)現(xiàn)的設(shè)計(jì)之間遇到行為差異,請(qǐng)嘗試刪除此指令。
ARRAY_PARTITION Arrays 將一個(gè)大數(shù)組拆分為多個(gè)較小的數(shù)組(與ARRAY_MAP相反)。這對(duì)于增加并行訪問的可能性很有用。如果“type”是“block”,則源數(shù)組將分成block。如果它是“cyclic”,那么元素將被交錯(cuò)到目標(biāo)數(shù)組中。在這兩種情況下,“factor因子”都是要?jiǎng)?chuàng)建的較小數(shù)組的數(shù)量。如果 'type' 是 'complete' 則忽略 'factor' 并且陣列被完全分割成組件寄存器,因此不使用任何 Block RAM。
DATAFLOW Functions 見下文
INLINE Functions 該指令不是將函數(shù)視為單個(gè)硬件單元,而是在每次調(diào)用 HLS 時(shí)將函數(shù)內(nèi)聯(lián)。這是以硬件為代價(jià)增加了潛在的并行性。如果 'recursive' 為真,則內(nèi)聯(lián)函數(shù)調(diào)用的所有函數(shù)也被視為標(biāo)有 INLINE。
INTERFACE Function,parameters 告訴 HLS 如何在函數(shù)之間傳遞參數(shù)。這在頂層函數(shù)中至關(guān)重要,因?yàn)樗x了設(shè)計(jì)的引腳排列。在 EMBS 中,我們有一個(gè)應(yīng)該堅(jiān)持使用的模板(上圖)。
LATENCY Functions, loops HLS 通常會(huì)嘗試在綜合時(shí)實(shí)現(xiàn)最小延遲。如果使用此指令指定更大的最小延遲,HLS 將“pad out”函數(shù)或循環(huán)并減慢一切。這有助于資源共享(減少資源),并且對(duì)于創(chuàng)建延遲很有用。如果 HLS 無(wú)法達(dá)到要求的延遲,它將發(fā)出警告。
LOOP_FLATTEN loops 將嵌套循環(huán)展平為單個(gè)循環(huán)。應(yīng)用于 最里面的 循環(huán)。如果成功,將生成更快的硬件代碼。
LOOP_TRIPCOUNT loops 如果循環(huán)具有可變的循環(huán)邊界,HLS 將不知道它需要多少次迭代。這意味著它無(wú)法為設(shè)計(jì)延遲提供明確的值。這允許我們?yōu)樵O(shè)計(jì)指定循環(huán)的最小、平均和最大行程計(jì)數(shù)(迭代次數(shù))。這只會(huì)影響報(bào)告,不會(huì)影響硬件代碼生成。
RESOURCE Various 這用于指定應(yīng)使用特定硬件資源來實(shí)現(xiàn)源代碼元素。指定是否應(yīng)使用 BRAM 或 LUT 實(shí)現(xiàn)ARRAY。見下文詳解。

任意精度類型

可以在 HLS 中使用普通的 C 類型(int、 char等)變量。但是,設(shè)計(jì)中的常用的寄存器并不完全需要 4、8 或 16 位寬,那么可以使用任意精度類型來準(zhǔn)確定義需要多寬的數(shù)據(jù)類型,而不是接受這種低效率的通用定義。

下面展示了如何使用 C 和 C++ 風(fēng)格的任意精度類型。我們建議使用 C++,除非有特定的理由不這樣做。

在 C 中:

包含 頭文件。然后,可以聲明具有如下類型的變量:

uint5 x 無(wú)符號(hào)整數(shù),5 位寬
int19 x 有符號(hào)整數(shù),19 位寬

在 C++ 中:

包含 頭文件。然后,可以聲明具有如下類型的變量:

ap_uint<5> x 無(wú)符號(hào)整數(shù),5 位寬
ap_int<19> x 有符號(hào)整數(shù),19 位寬

按照上面的設(shè)置應(yīng)該能夠正常打印任意精度類型,但是如果在調(diào)試過程中得到奇怪的值,請(qǐng)先使用printf調(diào)用to_int():

ap_uint<23>myAP;
printf("%d
",myAP.to_int());

復(fù)位行為

在 HLS 中,所有靜態(tài)和全局變量都被初始化為零(如果給定了初始化值,則初始化為其他值)。這包括 RAM,其中每個(gè)元素都被清除為零。然而,這種初始化只發(fā)生在 FPGA 首次編程時(shí)。任何后續(xù)處理器復(fù)位都不會(huì)觸發(fā)初始化過程。

如果需要清除設(shè)備的內(nèi)部狀態(tài),那么應(yīng)該包含某種復(fù)位協(xié)議(根據(jù)復(fù)位狀態(tài)處理所需要的程序)。

AXI 從接口和 AXI 主接口

可以在 HLS 組件中使用兩個(gè)接口,即 AXI Slave 和 AXI Master。

  • AXI Slave:ARM 內(nèi)核使用此接口來啟動(dòng)和停止 HLS 組件。他們還可以使用此接口來讀取和寫入相對(duì)少量的用戶定義值。

  • AXI Master:如果需要更大量的共享數(shù)據(jù),HLS 組件可以使用 AXI Master 接口啟動(dòng)事務(wù)以從主系統(tǒng)內(nèi)存讀取和寫入數(shù)據(jù)。

可以通過toplevel在 HLS 組件中為函數(shù)指定參數(shù)并將指令附加到這些參數(shù)來定義所需的接口。下面顯示了一個(gè)只有從接口的組件:

帶有AXI Slave的 HLS 組件

uint32toplevel(uint32*arg1,uint32*arg2,uint32*arg3,uint32*arg4){
#pragmaHLSINTERFACEs_axiliteport=arg1bundle=AXILiteSregister
#pragmaHLSINTERFACEs_axiliteport=arg2bundle=AXILiteSregister
#pragmaHLSINTERFACEs_axiliteport=arg3bundle=AXILiteSregister
#pragmaHLSINTERFACEs_axiliteport=arg4bundle=AXILiteSregister
#pragmaHLSINTERFACEs_axiliteport=returnbundle=AXILiteSregister
}

而下面是一個(gè)同時(shí)具有從接口和主接口的組件:

具有從屬和主接口的 HLS 組件

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

請(qǐng)注意,可以為從接口添加和刪除參數(shù),并更改它們的數(shù)據(jù)類型,只需記住也要更新關(guān)聯(lián)#pragmaS。HLS 將相應(yīng)地更新組件的驅(qū)動(dòng)程序。

PS:主數(shù)據(jù)類型:由于 AXI 主接口會(huì)連接到 32 位寬的 RAM,因此在指定 AXI 主接口時(shí)應(yīng)始終使用 32 位數(shù)據(jù)類型。

一旦決定了的接口,應(yīng)該能夠依靠 Vivado 自動(dòng)化連線來連接一切。

請(qǐng)注意,返回端口的 pragma 很重要!

#pragmaHLSINTERFACEs_axiliteport=returnbundle=AXILiteSregister

//端口=返回包=AXILiteS寄存器

即使不使用函數(shù)的返回值,此 pragma 也會(huì)告訴 HLS 將 start、stop、done 和 reset 信號(hào)捆綁到 AXI Slave 接口中的控制寄存器中。因此,這將生成相應(yīng)的驅(qū)動(dòng)程序函數(shù)來啟動(dòng)和停止生成的 IP 內(nèi)核。如果不包含此 pragma,則 HLS 將為這些信號(hào)生成簡(jiǎn)單的連線,并且 IP 內(nèi)核將無(wú)法直接被 ARM 內(nèi)核控制。

多種類型的 AXI Master

Vitis HLS在從同一主AXI端口復(fù)制值并將其解釋為不同類型時(shí)非常挑剔。

例如,以下 memcpy 可能會(huì)導(dǎo)致“Stored value type does not match pointer operand type! (存儲(chǔ)值類型與指針操作數(shù)類型不匹配!)” ,嘗試將 RAM 視為uint32 和float類型時(shí),綜合過程中將會(huì)產(chǎn)生 LLVM 錯(cuò)誤:

voidtoplevel(uint32*ram){
#pragmaHLSINTERFACEm_axiport=ramoffset=slavebundle=MAXI
uint32u_values[10];
floatf_values[10];

memcpy(u_values,ram,40);
memcpy(f_values,ram+10,40);
}

為了正確強(qiáng)制從 RAM 中復(fù)制數(shù)據(jù)的類型信息,可以使用union,如下所示:

typedefunion{
uint32u;
floatf;
}ram_t;

voidtoplevel(ram_t*ram){
#pragmaHLSINTERFACEm_axiport=ramoffset=slavebundle=MAXI
uint32u_values[10];
floatf_values[10];

for(inti=0;ifor(inti=0;i

此外,只要循環(huán)邊界從零開始(并且是固定的),HLS應(yīng)該足夠聰明,將其視為類似于memcpy的突發(fā)傳輸-在綜合過程中查找“推斷MAXI端口上長(zhǎng)度為X的總線突發(fā)讀取”來證實(shí)這一點(diǎn)。

強(qiáng)制和阻止使用 Block RAM

HLS 會(huì)自動(dòng)將大部分ARRAY轉(zhuǎn)換為 BRAM。這通常很有用,因?yàn)榧拇嫫鰽RRAY在 LUT(FPGA 空間)方面非常昂貴。但是,F(xiàn)PGA 的 BRAM 數(shù)量有限。BRAM 也只有 2 個(gè)訪問端口。這意味著在任何時(shí)候最多有兩個(gè)并行進(jìn)程可以訪問 RAM。這可能會(huì)限制設(shè)計(jì)的并行性潛力。

如果HLS使用的是不希望使用的BRAM,則將類型設(shè)置為COMPLETE且維度設(shè)置為1的指令array_PARTITION應(yīng)用于數(shù)組。這將迫使它從寄存器中生成數(shù)組。這會(huì)占用大量的FPGA空間(LUT),所以要節(jié)約!

要強(qiáng)制 HLS 使用 BRAM,請(qǐng)將指令BIND_STORAGE集應(yīng)用到 RAM_2P。(添加時(shí)按下幫助按鈕可查看所有各種選項(xiàng)的說明)。

該 ARRAY_MAP 指令(見上文)可以通過自動(dòng)將多個(gè)較小的數(shù)組放入一個(gè)較大的數(shù)組來幫助節(jié)省 Block RAM。

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

當(dāng)更改 HLS 代碼時(shí),請(qǐng)執(zhí)行以下步驟以確保bitfile已更新,方便進(jìn)行正確地測(cè)試。

  • 1、重新運(yùn)行綜合。
  • 2、重新導(dǎo)出 IP 核。
  • 3、在 Vivado 中,它應(yīng)該已經(jīng)注意到了變化,并且會(huì)出現(xiàn)一條消息說“IP Catalog is out-of-date”。a、如果沒有,請(qǐng)單擊 IP Status,然后單擊重新運(yùn)行報(bào)告

b、單擊刷新 IP 目錄

c、在 IP Status面板中,應(yīng)選擇 toplevel IP。單擊 Upgrade 選項(xiàng)。

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

  • 5、單擊生成比特流。

  • 6、導(dǎo)出硬件到 Vitis。

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

現(xiàn)在應(yīng)該明白了為什么測(cè)試和仿真如此重要了!

循環(huán)優(yōu)化

在 HLS 中,可以將指令應(yīng)用于循環(huán)以指示它展開或流水線。考慮以下循環(huán):

myloop:for(inti=0;i

默認(rèn)情況下,HLS 將按順序執(zhí)行循環(huán)的每次迭代。它的執(zhí)行將如下所示:

18be5804-947b-11ed-bfe3-dac502259ad0.png

如果循環(huán)的每次迭代需要 10 個(gè)時(shí)鐘周期,那么循環(huán)總共需要 30 個(gè)周期才能完成。

如果我們給這個(gè)循環(huán) PIPELINE 指令,那么 HLS 將嘗試在元素 0 完成之前開始計(jì)算元素 1,從而創(chuàng)建一個(gè)PIPELINE。這意味著循環(huán)的整體執(zhí)行時(shí)間會(huì)更短,但代價(jià)是更復(fù)雜的控制邏輯和更多的寄存器來存儲(chǔ)中間數(shù)據(jù)。循環(huán)如下所示:

18d466f8-947b-11ed-bfe3-dac502259ad0.png

只有在沒有阻止此優(yōu)化的依賴項(xiàng)時(shí),它才能執(zhí)行此操作。考慮以下代碼:

intlastVal;

for(inti=0;i

在此示例中,循環(huán)被迫按順序執(zhí)行,因?yàn)樵谙乱淮窝h(huán)迭代開始時(shí)需要在循環(huán)體末尾使用計(jì)算出的值。PIPELINE 仍然會(huì)試圖加快速度,但不會(huì)大幅加快。

最后,如果我們給循環(huán) UNROLL 指令,那么 HLS 將嘗試并行執(zhí)行循環(huán)的迭代。這需要更多的硬件,但速度非常快。在我們的示例中,整個(gè)循環(huán)只需要 10 個(gè)周期。

18ec3f9e-947b-11ed-bfe3-dac502259ad0.png

這要求循環(huán)的元素之間沒有數(shù)據(jù)依賴關(guān)系。例如,如果 doSomething() 保留一個(gè)執(zhí)行次數(shù)的全局計(jì)數(shù)器,則此依賴項(xiàng)將阻止 UNROLL 指令工作。

請(qǐng)注意,UNROLL默認(rèn)情況下會(huì)嘗試展開循環(huán)的所有迭代。這可能會(huì)導(dǎo)致非常大的設(shè)計(jì)!為了使事情更合理,可以設(shè)置UNROLL的FACTOR參數(shù)來告訴工具要?jiǎng)?chuàng)建多少副本。

應(yīng)用UNROLL后,最好在分析視圖中查看它是否實(shí)際應(yīng)用。成功展開的設(shè)計(jì)在分析視圖中將非常“垂直”,表示同一列中的操作同時(shí)發(fā)生。如果視圖仍然非常“水平”且有很多列,那么很可能是數(shù)據(jù)依賴項(xiàng)阻止了展開。可以嘗試通過單擊操作來確定是什么阻止了展開。該工具將繪制箭頭以顯示輸入的內(nèi)容和輸出的內(nèi)容。請(qǐng)記住,BlockRAM 一次只能進(jìn)行兩次訪問,因此,如果有一個(gè)大型ARRAY,而這些工具是從 BlockRAM 制作的,則展開或流水線操作最多只能創(chuàng)建 2 個(gè)副本。可以告訴工具不要使用帶有ARRAY_PARTITION指令的塊RAM。這可以快得多,但要使用更多的硬件資源。

數(shù)據(jù)流優(yōu)化

如果沒有使用限制資源的指令(例如 ALLOCATION 指令),HLS 會(huì)尋求最小化延遲并提高并發(fā)性。但是數(shù)據(jù)依賴性可以限制這一點(diǎn)。例如,訪問數(shù)組的函數(shù)或循環(huán)必須在完成之前完成對(duì)數(shù)組的所有讀/寫訪問,這就阻止了下一個(gè)消耗數(shù)據(jù)的函數(shù)或循環(huán)啟動(dòng)。

函數(shù)或循環(huán)中的操作可能會(huì) 在前一個(gè)函數(shù)或循環(huán)完成其所有操作之前開始操作。

HLS指定數(shù)據(jù)流優(yōu)化時(shí):

  • 分析順序函數(shù)或循環(huán)之間的數(shù)據(jù)流。

這允許函數(shù)或循環(huán)并行運(yùn)行,從而減少延遲并提高 RTL 設(shè)計(jì)的吞吐量,但以增加硬件資源為代價(jià)。嘗試一下DATAFLOW ,看看它是否對(duì)設(shè)計(jì)有幫助。

找不到 'crt1.o' 錯(cuò)誤

當(dāng)試圖在實(shí)驗(yàn)室硬件以外的機(jī)器上運(yùn)行測(cè)試時(shí),可能會(huì)收到一個(gè)錯(cuò)誤,抱怨它找不到“crt1.o”。如果是這樣,就需要為項(xiàng)目設(shè)置自定義鏈接器標(biāo)志。

單擊頂部菜單中的“Project”,然后單擊Project Settings。在此框中,單擊左側(cè)的“Simulation”,然后將以下內(nèi)容粘貼到“Linker Flags”框中:

-B"/usr/lib/x86_64-linux-gnu/"

我的循環(huán)有???latency估計(jì)!

有時(shí),HLS 綜合報(bào)告將包含?而不是給出最小和最大延遲的值。這是因?yàn)樵O(shè)計(jì)中至少有一個(gè)循環(huán)是數(shù)據(jù)相關(guān)的,即它循環(huán)的次數(shù)取決于 HLS 無(wú)法知道的數(shù)據(jù)值。

例如,下面的代碼:

18fd1ecc-947b-11ed-bfe3-dac502259ad0.png

當(dāng)綜合在綜合報(bào)告中給出以下內(nèi)容:

1912bdcc-947b-11ed-bfe3-dac502259ad0.png

如果我們檢查代碼,它將來自ram的元素相加,但要相加的元素的確切數(shù)量來自用戶,作為arg1參數(shù)輸入。因此,HLS無(wú)法提前知道該硬件執(zhí)行需要多長(zhǎng)時(shí)間,因?yàn)槊看芜\(yùn)行時(shí)它都是可變的。這就是上面我們說的運(yùn)行時(shí)依賴于數(shù)據(jù)。生成的硬件將正常工作,我們只是無(wú)法預(yù)測(cè)運(yùn)行需要多長(zhǎng)時(shí)間。查看循環(huán)的細(xì)節(jié),HLS仍然可以告訴我們循環(huán)的延遲是2,換句話說,它不知道它將迭代多少次,但每次迭代將花費(fèi)2個(gè)時(shí)鐘周期。

一般來說,應(yīng)該盡量避免這種情況。如果 HLS 無(wú)法預(yù)測(cè)最壞的情況,那么它會(huì)過于“謹(jǐn)慎”,并且它可能會(huì)制造比我們需要的更大的硬件。此外,不能展開具有可變循環(huán)邊界的循環(huán)。

一些算法從根本上是依賴于數(shù)據(jù)的,如果這種情況無(wú)法避免,那么可以通過將LOOP_TRIPCOUNT指令添加到循環(huán)中來告訴 HLS ,假設(shè)循環(huán)將進(jìn)行給定次數(shù)的迭代,但這僅用于報(bào)告目的。生成的硬件將完全相同,但HLS將在循環(huán)迭代該次數(shù)的假設(shè)下生成延遲數(shù)。這意味著延遲數(shù)字不“正確”,但這仍然有助于了解其他優(yōu)化是否具有總體積極效果。

定點(diǎn)類型

當(dāng)需要使用小數(shù)運(yùn)算但又不想支付使用浮點(diǎn)的大量硬件成本時(shí),定點(diǎn)類型很有用。Vitis HLS 用戶指南(https://www.xilinx.com/support/documentation/sw_manuals/xilinx2020_2/ug1399-vitis-hls.pdf)中詳細(xì)描述了定點(diǎn)類型,下面是一個(gè)簡(jiǎn)短示例:

定點(diǎn)示例

#include
#include

ap_fixed<15,?5>a=3.45;
ap_fixed<15,?5>b=9.645;
ap_fixed<20,?6>c=a/b*2;
std::cout<ifmoreaccuracyisrequired.

C標(biāo)準(zhǔn)數(shù)學(xué)函數(shù)(在math.h中)僅針對(duì)浮點(diǎn)實(shí)現(xiàn),但Xilinx在hls_math.h中提供了某些函數(shù)的定點(diǎn)實(shí)現(xiàn)。在hls::命名空間下;例如:hls::sqrt()、hls::cos()和hls::sin()。

此外,以下賽靈思示例代碼顯示了另一種定點(diǎn)平方根實(shí)現(xiàn),在某些情況下可能更有效。

fxp_sqrt.h

#ifndef__FXP_SQRT_H__
#define__FXP_SQRT_H__
#include
#include
usingnamespacestd;

/*
*Providesafixedpointimplementationofsqrt()
*Mustbecalledwithunsignedfixedpointnumberssoconvertbeforecalling,follows:
*ap_ufixed<32,?20>in=input_number;
*ap_ufixed<32,?20>out;
*fxp_sqrt(out,in);
*/
template
voidfxp_sqrt(ap_ufixed&result,ap_ufixed&in_val)
{
enum{QW=(IW1+1)/2+(W2-IW2)+1};//derivemaxrootwidth
enum{SCALE=(W2-W1)-(IW2-(IW1+1)/2)};//scale(shift)toadjinitialremainervalue
enum{ROOT_PREC=QW-(IW1%2)};
assert((IW1+1)/2<=?IW2);?//?Check?that?output?format?can?accommodate?full?result
???ap_uintq=0;//partialsqrt
ap_uintq_star=0;//diminishedpartialsqrt
ap_ints;//scaledremainderinitializedtoextractedinputbits
if(SCALE>=0)
s=in_val.range(W1-1,0)<else
s=((in_val.range(W1-1,0)>>(0-(SCALE+1)))+1)>>1;
//Non-restoringsquare-rootalgorithm
for(inti=0;i<=?ROOT_PREC;?i++)?{
??????if(s>=0){
s=2*s-(((ap_int(q)<else{
s=2*s+(((ap_int(q_star)<"extraiteration"method
if(s>0)
q=q+1;
//Truncateexcessbitandassigntooutputformat
result.range(W2-1,0)=ap_uint(q>>1);
}
#endif

總結(jié)

這是《FPGA高層次綜合HLS》系列教程第二篇,后面會(huì)按照專題繼續(xù)更新,文章有什么問題,歡迎大家批評(píng)指正~感謝大家支持。


審核編輯 :李倩

聲明:本文內(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
    +關(guān)注

    關(guān)注

    1630

    文章

    21783

    瀏覽量

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

    關(guān)注

    1

    文章

    130

    瀏覽量

    24170

原文標(biāo)題:總結(jié)

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于華為云 Flexus 云服務(wù)器 X 搭建部署——AI 知識(shí)庫(kù)問答系統(tǒng)(使用 1panel 面板安裝)

    ???對(duì)于企業(yè)來講為什么需要華為云 Flexus X 來搭建自己的知識(shí)庫(kù)問答系統(tǒng)??? 【重塑知識(shí)邊界,華為云 Flexus 云服務(wù)器 X 引領(lǐng)開源問答新紀(jì)元!】 ???解鎖知識(shí)新動(dòng)力,華為云
    的頭像 發(fā)表于 01-17 09:45 ?96次閱讀
    基于華為云 Flexus 云服務(wù)器 X 搭建部署——AI <b class='flag-5'>知識(shí)庫(kù)</b>問答系統(tǒng)(使用 1panel 面板安裝)

    華為云 Flexus 云服務(wù)器 X 實(shí)例之 openEuler 系統(tǒng)下搭建 MaxKB 開源知識(shí)庫(kù)問答系統(tǒng)

    及個(gè)人開發(fā)者快速構(gòu)建高效、靈活的應(yīng)用環(huán)境。本文將詳細(xì)介紹如何利用華為云 Flexus 云服務(wù)器 X 實(shí)例搭建基于 openEuler 系統(tǒng)的 MaxKB 開源知識(shí)庫(kù)問答系統(tǒng),為企業(yè)內(nèi)部的知識(shí)管理和信息檢索注入新的活力。 一、Flexus 云服務(wù)器 X 實(shí)例介紹 1.1 F
    的頭像 發(fā)表于 01-17 09:44 ?97次閱讀
    華為云 Flexus 云服務(wù)器 X 實(shí)例之 openEuler 系統(tǒng)下搭建 MaxKB 開源<b class='flag-5'>知識(shí)庫(kù)</b>問答系統(tǒng)

    騰訊ima升級(jí)知識(shí)庫(kù)功能,上線小程序?qū)崿F(xiàn)共享與便捷問答

    近日,騰訊旗下的AI智能工作臺(tái)ima.copilot(簡(jiǎn)稱ima)迎來了知識(shí)庫(kù)功能的重大升級(jí)。此次升級(jí)不僅增加了“共享知識(shí)庫(kù)”的新能力,還正式上線了“ima知識(shí)庫(kù)”小程序,為用戶帶來了更加便捷和高效
    的頭像 發(fā)表于 12-31 15:32 ?361次閱讀

    華為聯(lián)合中圖科信打造“小水庫(kù)”智能知識(shí)庫(kù)

    在當(dāng)前水利行業(yè)中,水利部各業(yè)務(wù)處室根據(jù)自身職能需要,保存了大量的歷史業(yè)務(wù)數(shù)據(jù)。這些數(shù)據(jù)涵蓋工程規(guī)劃、運(yùn)行管理、調(diào)度方案等,形式包括PDF影印本、Word文檔、Excel表格等,記錄了豐富的專業(yè)知識(shí)與實(shí)踐經(jīng)驗(yàn)。
    的頭像 發(fā)表于 12-31 14:06 ?147次閱讀

    部署多功能集成的協(xié)作知識(shí)庫(kù) AFFiNE

    一、Flexus 云服務(wù)器 X 實(shí)例介紹 云服務(wù)器是一種高效便捷的計(jì)算資源服務(wù)。它可隨時(shí)根據(jù)需求進(jìn)行彈性擴(kuò)展,具有高可靠性和穩(wěn)定性。無(wú)需擔(dān)心硬件維護(hù),輕松應(yīng)對(duì)高并發(fā)訪問。無(wú)論是企業(yè)建站、開發(fā)應(yīng)用還是數(shù)據(jù)存儲(chǔ),云服務(wù)器都能提供強(qiáng)大支持,助力你的業(yè)務(wù)在云端飛速發(fā)展。 華為云下一代云服務(wù)器 Flexus X 實(shí)例煥新上線,新產(chǎn)品提供與華為云旗艦級(jí)云服務(wù)器產(chǎn)品相同的單 AZ 99.975%可用性,跨 AZ 99.995%可用性,階梯式定價(jià)、動(dòng)態(tài)畫像并搭配 AS,實(shí)現(xiàn)資
    的頭像 發(fā)表于 12-30 15:19 ?256次閱讀
    部署多功能集成的協(xié)作<b class='flag-5'>知識(shí)庫(kù)</b> AFFiNE

    利智方:驅(qū)動(dòng)企業(yè)知識(shí)管理與AI創(chuàng)新加速的平臺(tái)

    利智方致力于深度整合企業(yè)知識(shí)資產(chǎn),全面打通知識(shí)生命周期的各個(gè)環(huán)節(jié)。通過構(gòu)建強(qiáng)大的知識(shí)庫(kù)和精準(zhǔn)的知識(shí)圖譜,支持快速定制和部署各類AI應(yīng)用,為企業(yè)創(chuàng)新發(fā)展提供堅(jiān)實(shí)的技術(shù)支撐。可多維度提升企
    的頭像 發(fā)表于 12-30 11:07 ?312次閱讀

    直播預(yù)告 大模型 + 知識(shí)庫(kù)(RAG):如何使能行業(yè)數(shù)智化?

    。最近,有小伙伴留言稱工作中常遇到知識(shí)管理問題: 知識(shí)管理雜亂無(wú)章、查找費(fèi)時(shí)費(fèi)力,而且信息孤島嚴(yán)重、知識(shí)難以共享,團(tuán)隊(duì)成員總是重復(fù)勞動(dòng) ;希望能安排一場(chǎng)直播介紹如何通過智能化手段解決知識(shí)
    的頭像 發(fā)表于 11-26 23:49 ?418次閱讀
    直播預(yù)告 大模型 + <b class='flag-5'>知識(shí)庫(kù)</b>(RAG):如何使能行業(yè)數(shù)智化?

    騰訊云手動(dòng)下發(fā)指令到設(shè)備_云端與設(shè)備聯(lián)調(diào)方案

    即可 本文章源自奇跡物聯(lián)開源的物聯(lián)網(wǎng)應(yīng)用知識(shí)庫(kù)Cellular IoT Wiki,更多技術(shù)干貨歡迎關(guān)注收藏Wiki: Cellular IoT Wiki 知識(shí)庫(kù) (https
    的頭像 發(fā)表于 09-30 15:25 ?330次閱讀
    騰訊云手動(dòng)下發(fā)指令到設(shè)備_云端與設(shè)備聯(lián)調(diào)方案

    【實(shí)操文檔】在智能硬件的大模型語(yǔ)音交互流程中接入RAG知識(shí)庫(kù)

    非常明顯的短板。盡管這些模型在理解和生成自然語(yǔ)言方面有極高的性能,但它們?cè)谔幚韺I(yè)領(lǐng)域的問答時(shí),卻往往不能給出明確或者準(zhǔn)確的回答。 這時(shí)就需要接一個(gè)專有知識(shí)庫(kù)來滿足產(chǎn)品專有和專業(yè)知識(shí)的回復(fù)需求,理論
    發(fā)表于 09-29 17:12

    優(yōu)化 FPGA HLS 設(shè)計(jì)

    優(yōu)化 FPGA HLS 設(shè)計(jì) 用工具用 C 生成 RTL 的代碼基本不可讀。以下是如何在不更改任何 RTL 的情況下提高設(shè)計(jì)性能。 介紹 高級(jí)設(shè)計(jì)能夠以簡(jiǎn)潔的方式捕獲設(shè)計(jì),從而
    發(fā)表于 08-16 19:56

    一種在HLS中插入HDL代碼的方式

    很多人都比較反感用C/C++開發(fā)(HLS)FPGA,大家第一拒絕的理由就是耗費(fèi)資源太多。但是HLS也有自己的優(yōu)點(diǎn),除了快速構(gòu)建算法外,還有一個(gè)就是接口的生成,尤其對(duì)于AXI類接口,按照標(biāo)準(zhǔn)語(yǔ)法就可以很方便地生成相關(guān)接口。
    的頭像 發(fā)表于 07-16 18:01 ?793次閱讀
    一種在<b class='flag-5'>HLS</b>中插入HDL代碼的方式

    如何手?jǐn)]一個(gè)自有知識(shí)庫(kù)的RAG系統(tǒng)

    用于自然語(yǔ)言處理任務(wù),如文本生成、問答系統(tǒng)等。 我們通過一下幾個(gè)步驟來完成一個(gè)基于京東云官網(wǎng)文檔的RAG系統(tǒng) 數(shù)據(jù)收集 建立知識(shí)庫(kù) 向量檢索 提示詞與模型 數(shù)據(jù)收集 數(shù)據(jù)的收集再整個(gè)RAG實(shí)施過程中無(wú)疑是最耗人工的,涉及到收集、清洗、格式化、切分等過程。這里我們使用京東云的官方文檔作為
    的頭像 發(fā)表于 06-17 14:59 ?635次閱讀

    OpenAI推出Vision模型版GPT-4 Turbo,融合文本與圖像理解

    據(jù)悉,此模型沿用GPT-4 Turbo系列特有的12.8萬(wàn)token窗口規(guī)模及截至2023年12月的知識(shí)庫(kù)架構(gòu),其創(chuàng)新亮點(diǎn)則是強(qiáng)大的視覺理解功能。
    的頭像 發(fā)表于 04-10 10:49 ?430次閱讀

    英特爾集成顯卡+ChatGLM3大語(yǔ)言模型的企業(yè)本地AI知識(shí)庫(kù)部署

    在當(dāng)今的企業(yè)環(huán)境中,信息的快速獲取和處理對(duì)于企業(yè)的成功至關(guān)重要。為了滿足這一需求,我們可以將RAG技術(shù)與企業(yè)本地知識(shí)庫(kù)相結(jié)合,以提供實(shí)時(shí)的、自動(dòng)生成的信息處理和決策支持。
    的頭像 發(fā)表于 03-29 11:07 ?843次閱讀
    英特爾集成顯卡+ChatGLM3大語(yǔ)言模型的企業(yè)本地AI<b class='flag-5'>知識(shí)庫(kù)</b>部署

    智能制造的六大核心驅(qū)動(dòng)力

    通過運(yùn)用智能化的設(shè)計(jì)工具和先進(jìn)的設(shè)計(jì)信息化系統(tǒng)(如CAX、網(wǎng)絡(luò)化協(xié)同設(shè)計(jì)、設(shè)計(jì)知識(shí)庫(kù)等),企業(yè)產(chǎn)品研發(fā)設(shè)計(jì)的各個(gè)環(huán)節(jié)能夠得到智能化的提升和優(yōu)化。
    發(fā)表于 01-30 10:04 ?688次閱讀
    主站蜘蛛池模板: 国产人妖一区二区| 2018三级网站免费观看| 99久久免热在线观看6| 国产在线精品亚洲观看不卡欧美| 欧美午夜福利主线路| 诱咪youmiss| 国产午夜精品久久理论片 | 久久久WWW免费人成精品| 午夜色情影院色a国产| 成年人免费观看的视频| 蜜臀AV精品一区二区三区| 一本大道手机在线看| 国产亚洲精品线观看不卡| 少妇精品久久久一区二区三区| 99久久精品免费看国产免费| 久久视频这里只精品6国产| 亚洲娇小性色xxxx| 国产精品系列在线观看| 少妇人妻偷人精品视蜜桃| 成人公开免费视频| 秋霞午夜一级理论片久久| 99久久无码热高清精品| 美女内射视频WWW网站午夜| 伊伊人成亚洲综合人网| 精品国产乱码久久久久久免费| 亚婷婷洲AV久久蜜臀无码| 国产AV高清怡春院| 日韩在线av免费视久久| 超碰99热在线精品视频| 青青草原社区| wwwzzz日本| 欧美囗交xx bbb视频| adc年龄确认大驾光临入口| 男生插曲女生身全过程| 91嫩草国产在线观看免费| 秘密教学93话恩爱久等了免费| 中国少妇内射XXXHD免费| 久久综合老色鬼网站| 中文字幕爆乳JULIA女教师| 久久久精品免费视频| 中国国产不卡视频在线观看|