資料介紹
描述
正如我在本系列中已經(jīng)多次提到的那樣,消除中央內(nèi)存瓶頸是構(gòu)建定制硬件與 CPU 方法相比的性能優(yōu)勢(shì)之一。這并不意味著 FPGA 設(shè)計(jì)從不包含內(nèi)存;它們通常與外部存儲(chǔ)器一起使用。但是,本期的主題是另一種對(duì)性能至關(guān)重要的內(nèi)存:嵌入式內(nèi)存。讓我們從一些示例代碼開始,然后更多地討論嵌入式存儲(chǔ)器。
如果您是本系列的新手,您可能想回到硬件即代碼第 I 部分。
軟件更新
在我們進(jìn)入它之前的最后一件事; 在構(gòu)建以下示例之前,您需要將 Upduino HLS 工具鏈更新到最新版本。要進(jìn)行更新,只需輸入以下pio
命令(如果您使用的是 Visual Studio Code,請(qǐng)單擊左側(cè)的 PlatformIO 圖標(biāo) (ant) 打開命令提示符,然后選擇 Miscellaneous 下的 Platform Core CLI):
> pio platform update upduino_hls
這應(yīng)該安裝最新版本(撰寫本文時(shí)為 0.2.1)。
簡(jiǎn)單的感知器
上次,我說過第三部分的例子涉及與神經(jīng)網(wǎng)絡(luò)相同類型的計(jì)算。下面的示例實(shí)現(xiàn)了一個(gè)單層神經(jīng)網(wǎng)絡(luò),稱為感知器,如您所見,代碼非常相似。

與往常一樣,此代碼也可從 git 存儲(chǔ)庫(kù) ( https://github.com/sathibault/hac-examples ) 獲得。
這個(gè)例子就像 poly-classify
第三部分的例子一樣進(jìn)行分類。然而,這次我們從流行的鳶尾花數(shù)據(jù)集中對(duì)花朵進(jìn)行分類。每朵花都有四個(gè)數(shù)據(jù)值:萼片長(zhǎng)度、萼片寬度、花瓣長(zhǎng)度和花瓣寬度。在這種情況下,我們對(duì)花類型(setosa 或不)進(jìn)行分類。
運(yùn)行示例時(shí),您應(yīng)該得到以下輸出:
Ex 0: -822
Ex 1: -837
Ex 2: 94
Ex 3: 777
這顯示了四個(gè)示例花的感知器輸出。輸出值小于 0 被預(yù)測(cè)為 setosa 類型,大于 0 則不是 setosa。四個(gè)示例的實(shí)際花型是 1) setosa、2) setosa、3) versicolour 和 4) virginica。因此,這與上面的感知器預(yù)測(cè)完全一致。
陣列和嵌入式存儲(chǔ)器
上次的例子和這里的函數(shù)的主要區(qū)別在于dotproduct
數(shù)組的使用。Upduino HLS 工具支持我們?cè)谶@里使用的數(shù)組,但您可能想知道in_array,4>
第 5 行的類型和第as_array
27 行的函數(shù)。有時(shí),為 CPU 編寫的完全正常的 C/C++ 根本無法提供足夠的信息來生成等效的硬件。數(shù)組就是這種情況。數(shù)組通常作為一個(gè)簡(jiǎn)單的指針在 C/C++ 程序中傳遞,指向數(shù)組所在的中央內(nèi)存中的某個(gè)空間。
在硬件綜合的情況下,陣列實(shí)際上被映射到嵌入在硬件中的單獨(dú)的專用存儲(chǔ)器。是的,你沒看錯(cuò)!FPGA 包含許多稱為嵌入式存儲(chǔ)器或塊 RAM 的小型存儲(chǔ)器塊。每個(gè)數(shù)組變量都有專用的內(nèi)存塊來保存該變量的數(shù)據(jù)。
為了為數(shù)組變量生成內(nèi)存,我們需要知道它的大小,這就是in_array,4>
類型的重點(diǎn)。此類型表示參數(shù)為輸入數(shù)組,元素類型為int16_t
,數(shù)組中的最大數(shù)據(jù)量為 4。這使得硬件生成器能夠分配正確數(shù)量的內(nèi)存塊來接收features
參數(shù)的數(shù)據(jù)。
在第 27 行,該as_array
函數(shù)用于構(gòu)造正確的類型以匹配in_array
參數(shù),還用于指示數(shù)組中實(shí)際有多少數(shù)據(jù)(與我們從參數(shù)類型中知道的最大值相反)。由于此調(diào)用在 CPU 上執(zhí)行,而函數(shù)在 FPGA 上執(zhí)行,因此數(shù)據(jù)必須從 CPU 發(fā)送到 FPGA。因此,我們需要確切地知道要發(fā)送多少數(shù)據(jù)。
這是我們必須遵循某些設(shè)計(jì)模式才能針對(duì)硬件生成的示例之一。不幸的是,確切的機(jī)制可能因工具鏈而異。好消息是這樣的情況并不多,而且主體始終相同,即使語法不同。對(duì)于數(shù)組,原則是我們需要提供一些關(guān)于數(shù)組的大小信息,我們使用我們正在使用的框架提供的某些類型或函數(shù)來做到這一點(diǎn)。
多類感知器
iris 數(shù)據(jù)集實(shí)際上包含三種不同類型的花:setosa、versicolour 和 virginica。percetron 模型可以擴(kuò)展到多個(gè)類,只需每個(gè)類使用一個(gè)感知器。輸出最高的是預(yù)測(cè)類。下面是一個(gè)多類感知器預(yù)測(cè)鳶尾花類型的實(shí)現(xiàn)。
以下示例實(shí)現(xiàn)了用于識(shí)別三種不同鳶尾花類型的多類感知器。

輸出應(yīng)如下所示:
>.\program
Ex 0 = 0 (3694, -3018, -5298)
Ex 1 = 0 (2474, -1038, -6052)
Ex 2 = 1 (-944, 1292, 204)
Ex 3 = 2 (-2392, 138, 5364)
如您所見,每行的最大值與該示例的預(yù)期類匹配。
這個(gè)例子介紹了另一種數(shù)組參數(shù)類型out_array
(第 5 行)和相應(yīng)的resize
方法(第 12 行)。此類型的用途與 相同in_array
,但表示輸出數(shù)組參數(shù)。因此,它再次向編譯器指示要為該數(shù)組保留多少空間,即它將擁有的最大元素?cái)?shù)。
除了最大數(shù)組大小,由于out
數(shù)據(jù)需要從 FPGA 返回到 CPU,系統(tǒng)必須知道數(shù)組中實(shí)際有多少數(shù)據(jù)。該resize
方法用于指示實(shí)際使用了多少元素并需要將其發(fā)送回調(diào)用者。這些示例都沒有使用輸入和輸出數(shù)組,但也可以以inout_array
相同的方式使用模板類型。
您可能想知道的另一件事是為什么不是coef
二維數(shù)組?那只是因?yàn)?Upduino HLS 工具鏈只支持一維數(shù)組。大多數(shù) HLS 工具鏈都支持多維數(shù)組,但我不覺得這個(gè)限制特別煩人。指數(shù)計(jì)算簡(jiǎn)單;它只是行索引 * 行長(zhǎng)度 + 列索引。必須將其寫出來有助于您了解所需的算術(shù)資源,并且大多數(shù)情況下,如果您考慮一下,它可以更有效地完成(提示:使用索引變量,只需 2 次加法,沒有乘法)。
表現(xiàn)
關(guān)于這些例子,我想說明兩個(gè)要點(diǎn)。首先是嵌入式內(nèi)存如何打破內(nèi)存瓶頸。由于每個(gè)數(shù)組都有自己的內(nèi)存,它們是完全獨(dú)立的,可以同時(shí)并行訪問!此外,許多 FPGA 的嵌入式存儲(chǔ)器有兩個(gè)端口,這意味著您實(shí)際上可以在每個(gè)陣列的每個(gè)周期訪問兩個(gè)值。這是很多并行性。那么有什么問題呢?再次,我們受到空間的限制。
每個(gè)芯片只有固定數(shù)量的內(nèi)存塊。內(nèi)存塊由它們可以存儲(chǔ)的位數(shù)來描述。UPduino 板上的 FPGA 有 30 個(gè)塊 RAM,每個(gè) RAM 有 4096 位存儲(chǔ)。要計(jì)算數(shù)組的塊數(shù),只需將元素?cái)?shù)乘以每個(gè)元素的位數(shù),然后四舍五入到最接近的塊 RAM 大小的倍數(shù)。
在 UPduino 上,總比特?cái)?shù)為 30 x 4096 = 120Kb = 15KB。這確實(shí)是有限的,但這個(gè) FPGA 是可用的最小的之一。大型 FPGA 可以有許多 Mb 的塊 RAM。旁注:大多數(shù)硬件文檔將以位為單位給出內(nèi)存編號(hào),用小寫 b (例如 Kb)編寫,而不是通常用大寫 B (例如 KB)編寫的字節(jié)。
第二點(diǎn)是循環(huán)幫助我們?cè)诳臻g和速度之間進(jìn)行權(quán)衡。在上一部分中,一切都是并行的,并占用了多個(gè)加法器和乘法器。在這一部分中,我們使用了循環(huán),這將花費(fèi)更多的執(zhí)行時(shí)間,但只使用一個(gè)乘法器和一個(gè)加法器。這不是全部,不是全部或全部。一個(gè)中間選項(xiàng)是部分展開循環(huán)以平衡速度與空間的權(quán)衡。
這是對(duì)你的挑戰(zhàn)。上面的多類感知器示例需要按順序執(zhí)行的 3 x 4 次迭代(可以并行執(zhí)行迭代,但這是一個(gè)高級(jí)主題,稍后才會(huì)介紹)。您如何重寫此示例以利用嵌入式存儲(chǔ)器的并行性并并行計(jì)算 3 個(gè)輸出?
下一步
到目前為止,我們只在相當(dāng)高的水平上討論了空間。下一次,我將更深入地介紹 FPGA 內(nèi)部的內(nèi)容、如何測(cè)量空間、有多少可用空間以及如何準(zhǔn)確了解特定功能正在使用多少。
繼續(xù)第 V 部分:FPGA 內(nèi)部
連接
在我發(fā)布新的分期付款時(shí),請(qǐng)關(guān)注我以保持最新狀態(tài)。還有一個(gè) Discord 服務(wù)器(公共聊天平臺(tái)),用于您在https://discord.gg/3sA7FHayGH上可能有的任何評(píng)論、問題或討論
- 硬件即代碼第三部分:空間與時(shí)間
- 硬件即代碼第五部分:FPGA內(nèi)部
- 單片機(jī)匯編語言編程,《單片機(jī)原理及接口技術(shù)》,單片機(jī)考研,期末匯編考試寶典,《單片機(jī)原理及應(yīng)用》,第一版,單片機(jī)匯編考研(初試或復(fù)試考試題) 0次下載
- 初識(shí)ARM嵌入式系統(tǒng)
- 嵌入式第0部分:嵌入式工程師完全學(xué)習(xí)指南
- 什么是低壓降穩(wěn)壓器(LDO)的壓降? - 第五部分
- 2012年P(guān)SoC數(shù)模混合設(shè)計(jì)培訓(xùn)_第四部分 4次下載
- 32位嵌入式系統(tǒng)硬件設(shè)計(jì)與調(diào)試_部分2 2次下載
- 32位嵌入式系統(tǒng)硬件設(shè)計(jì)與調(diào)試_部分3 3次下載
- 32位嵌入式系統(tǒng)硬件設(shè)計(jì)與調(diào)試_部分1 3次下載
- MATLAB信號(hào)處理詳解_部分4 14次下載
- 嵌入式系統(tǒng)硬件與軟件架構(gòu)(英文版) 0次下載
- 國(guó)內(nèi)衛(wèi)星通信地球站發(fā)射接收和地面通信設(shè)備技術(shù)要求 第四部分中
- ADC和DAC基礎(chǔ) (共五部分,完整版) 0次下載
- 火力發(fā)電廠水汽分析方法 第四部分:氯化物的測(cè)定 (電極法)D
- 【北京迅為】iTOP-i.MX6開發(fā)板使用手冊(cè)第四部分固件編譯第十四章非設(shè)備樹Android4.4系統(tǒng)編譯 573次閱讀
- INGCHIPS BLE芯片如何獲得最大吞吐量 934次閱讀
- NanoBeacon? BLE掃描器教程(第四部分) 608次閱讀
- 交流電壓信號(hào)調(diào)理電路分析 2870次閱讀
- 嵌入式軟件的設(shè)計(jì)模式(上) 1353次閱讀
- 嵌入式代碼高效運(yùn)行指南 918次閱讀
- 嵌入式系統(tǒng)的全面解析 3281次閱讀
- 以嵌入式系統(tǒng)為基礎(chǔ)的數(shù)字?jǐn)U頻收發(fā)信機(jī)硬件設(shè)計(jì)流程概述 1362次閱讀
- 嵌入式硬件設(shè)計(jì)中需要注意的事項(xiàng) 910次閱讀
- 盤點(diǎn)幾種主流嵌入式架構(gòu)的代碼壓縮技術(shù) 4556次閱讀
- 嵌入式硬件電路設(shè)計(jì)中的六大要點(diǎn) 4786次閱讀
- 基于SoPC的嵌入式硬件平臺(tái)系統(tǒng)設(shè)計(jì)詳解 1999次閱讀
- 一文知道UltraFast嵌入式設(shè)計(jì)方法指南 2580次閱讀
- 嵌入式系統(tǒng)有哪些部分組成_嵌入式系統(tǒng)的應(yīng)用領(lǐng)域 3.4w次閱讀
- 嵌入式軟件工程師和嵌入式硬件工程師有什么區(qū)別 7.1w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論