資料介紹
描述
正如我在本系列中已經(jīng)多次提到的那樣,消除中央內(nèi)存瓶頸是構(gòu)建定制硬件與 CPU 方法相比的性能優(yōu)勢之一。這并不意味著 FPGA 設(shè)計從不包含內(nèi)存;它們通常與外部存儲器一起使用。但是,本期的主題是另一種對性能至關(guān)重要的內(nèi)存:嵌入式內(nèi)存。讓我們從一些示例代碼開始,然后更多地討論嵌入式存儲器。
如果您是本系列的新手,您可能想回到硬件即代碼第 I 部分。
軟件更新
在我們進(jìn)入它之前的最后一件事; 在構(gòu)建以下示例之前,您需要將 Upduino HLS 工具鏈更新到最新版本。要進(jìn)行更新,只需輸入以下pio
命令(如果您使用的是 Visual Studio Code,請單擊左側(cè)的 PlatformIO 圖標(biāo) (ant) 打開命令提示符,然后選擇 Miscellaneous 下的 Platform Core CLI):
> pio platform update upduino_hls
這應(yīng)該安裝最新版本(撰寫本文時為 0.2.1)。
簡單的感知器
上次,我說過第三部分的例子涉及與神經(jīng)網(wǎng)絡(luò)相同類型的計算。下面的示例實現(xiàn)了一個單層神經(jīng)網(wǎng)絡(luò),稱為感知器,如您所見,代碼非常相似。
與往常一樣,此代碼也可從 git 存儲庫 ( https://github.com/sathibault/hac-examples ) 獲得。
這個例子就像 poly-classify
第三部分的例子一樣進(jìn)行分類。然而,這次我們從流行的鳶尾花數(shù)據(jù)集中對花朵進(jìn)行分類。每朵花都有四個數(shù)據(jù)值:萼片長度、萼片寬度、花瓣長度和花瓣寬度。在這種情況下,我們對花類型(setosa 或不)進(jìn)行分類。
運行示例時,您應(yīng)該得到以下輸出:
Ex 0: -822
Ex 1: -837
Ex 2: 94
Ex 3: 777
這顯示了四個示例花的感知器輸出。輸出值小于 0 被預(yù)測為 setosa 類型,大于 0 則不是 setosa。四個示例的實際花型是 1) setosa、2) setosa、3) versicolour 和 4) virginica。因此,這與上面的感知器預(yù)測完全一致。
陣列和嵌入式存儲器
上次的例子和這里的函數(shù)的主要區(qū)別在于dotproduct
數(shù)組的使用。Upduino HLS 工具支持我們在這里使用的數(shù)組,但您可能想知道in_array,4>
第 5 行的類型和第as_array
27 行的函數(shù)。有時,為 CPU 編寫的完全正常的 C/C++ 根本無法提供足夠的信息來生成等效的硬件。數(shù)組就是這種情況。數(shù)組通常作為一個簡單的指針在 C/C++ 程序中傳遞,指向數(shù)組所在的中央內(nèi)存中的某個空間。
在硬件綜合的情況下,陣列實際上被映射到嵌入在硬件中的單獨的專用存儲器。是的,你沒看錯!FPGA 包含許多稱為嵌入式存儲器或塊 RAM 的小型存儲器塊。每個數(shù)組變量都有專用的內(nèi)存塊來保存該變量的數(shù)據(jù)。
為了為數(shù)組變量生成內(nèi)存,我們需要知道它的大小,這就是in_array,4>
類型的重點。此類型表示參數(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ù)據(jù)(與我們從參數(shù)類型中知道的最大值相反)。由于此調(diào)用在 CPU 上執(zhí)行,而函數(shù)在 FPGA 上執(zhí)行,因此數(shù)據(jù)必須從 CPU 發(fā)送到 FPGA。因此,我們需要確切地知道要發(fā)送多少數(shù)據(jù)。
這是我們必須遵循某些設(shè)計模式才能針對硬件生成的示例之一。不幸的是,確切的機制可能因工具鏈而異。好消息是這樣的情況并不多,而且主體始終相同,即使語法不同。對于數(shù)組,原則是我們需要提供一些關(guān)于數(shù)組的大小信息,我們使用我們正在使用的框架提供的某些類型或函數(shù)來做到這一點。
多類感知器
iris 數(shù)據(jù)集實際上包含三種不同類型的花:setosa、versicolour 和 virginica。percetron 模型可以擴展到多個類,只需每個類使用一個感知器。輸出最高的是預(yù)測類。下面是一個多類感知器預(yù)測鳶尾花類型的實現(xiàn)。
以下示例實現(xiàn)了用于識別三種不同鳶尾花類型的多類感知器。
輸出應(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ù)期類匹配。
這個例子介紹了另一種數(shù)組參數(shù)類型out_array
(第 5 行)和相應(yīng)的resize
方法(第 12 行)。此類型的用途與 相同in_array
,但表示輸出數(shù)組參數(shù)。因此,它再次向編譯器指示要為該數(shù)組保留多少空間,即它將擁有的最大元素數(shù)。
除了最大數(shù)組大小,由于out
數(shù)據(jù)需要從 FPGA 返回到 CPU,系統(tǒng)必須知道數(shù)組中實際有多少數(shù)據(jù)。該resize
方法用于指示實際使用了多少元素并需要將其發(fā)送回調(diào)用者。這些示例都沒有使用輸入和輸出數(shù)組,但也可以以inout_array
相同的方式使用模板類型。
您可能想知道的另一件事是為什么不是coef
二維數(shù)組?那只是因為 Upduino HLS 工具鏈只支持一維數(shù)組。大多數(shù) HLS 工具鏈都支持多維數(shù)組,但我不覺得這個限制特別煩人。指數(shù)計算簡單;它只是行索引 * 行長度 + 列索引。必須將其寫出來有助于您了解所需的算術(shù)資源,并且大多數(shù)情況下,如果您考慮一下,它可以更有效地完成(提示:使用索引變量,只需 2 次加法,沒有乘法)。
表現(xiàn)
關(guān)于這些例子,我想說明兩個要點。首先是嵌入式內(nèi)存如何打破內(nèi)存瓶頸。由于每個數(shù)組都有自己的內(nèi)存,它們是完全獨立的,可以同時并行訪問!此外,許多 FPGA 的嵌入式存儲器有兩個端口,這意味著您實際上可以在每個陣列的每個周期訪問兩個值。這是很多并行性。那么有什么問題呢?再次,我們受到空間的限制。
每個芯片只有固定數(shù)量的內(nèi)存塊。內(nèi)存塊由它們可以存儲的位數(shù)來描述。UPduino 板上的 FPGA 有 30 個塊 RAM,每個 RAM 有 4096 位存儲。要計算數(shù)組的塊數(shù),只需將元素數(shù)乘以每個元素的位數(shù),然后四舍五入到最接近的塊 RAM 大小的倍數(shù)。
在 UPduino 上,總比特數(shù)為 30 x 4096 = 120Kb = 15KB。這確實是有限的,但這個 FPGA 是可用的最小的之一。大型 FPGA 可以有許多 Mb 的塊 RAM。旁注:大多數(shù)硬件文檔將以位為單位給出內(nèi)存編號,用小寫 b (例如 Kb)編寫,而不是通常用大寫 B (例如 KB)編寫的字節(jié)。
第二點是循環(huán)幫助我們在空間和速度之間進(jìn)行權(quán)衡。在上一部分中,一切都是并行的,并占用了多個加法器和乘法器。在這一部分中,我們使用了循環(huán),這將花費更多的執(zhí)行時間,但只使用一個乘法器和一個加法器。這不是全部,不是全部或全部。一個中間選項是部分展開循環(huán)以平衡速度與空間的權(quán)衡。
這是對你的挑戰(zhàn)。上面的多類感知器示例需要按順序執(zhí)行的 3 x 4 次迭代(可以并行執(zhí)行迭代,但這是一個高級主題,稍后才會介紹)。您如何重寫此示例以利用嵌入式存儲器的并行性并并行計算 3 個輸出?
下一步
到目前為止,我們只在相當(dāng)高的水平上討論了空間。下一次,我將更深入地介紹 FPGA 內(nèi)部的內(nèi)容、如何測量空間、有多少可用空間以及如何準(zhǔn)確了解特定功能正在使用多少。
繼續(xù)第 V 部分:FPGA 內(nèi)部
連接
在我發(fā)布新的分期付款時,請關(guān)注我以保持最新狀態(tài)。還有一個 Discord 服務(wù)器(公共聊天平臺),用于您在https://discord.gg/3sA7FHayGH上可能有的任何評論、問題或討論
- 硬件即代碼第三部分:空間與時間
- 硬件即代碼第五部分:FPGA內(nèi)部
- 單片機匯編語言編程,《單片機原理及接口技術(shù)》,單片機考研,期末匯編考試寶典,《單片機原理及應(yīng)用》,第一版,單片機匯編考研(初試或復(fù)試考試題) 0次下載
- 嵌入式第0部分:嵌入式工程師完全學(xué)習(xí)指南
- 安信Windows驅(qū)動開發(fā)教程第四部分 8次下載
- 什么是低壓降穩(wěn)壓器(LDO)的壓降? - 第五部分
- 2012年P(guān)SoC數(shù)模混合設(shè)計培訓(xùn)_第四部分 4次下載
- 32位嵌入式系統(tǒng)硬件設(shè)計與調(diào)試_部分2 2次下載
- 32位嵌入式系統(tǒng)硬件設(shè)計與調(diào)試_部分3 3次下載
- 32位嵌入式系統(tǒng)硬件設(shè)計與調(diào)試_部分1 3次下載
- MATLAB信號處理詳解_部分4 14次下載
- 嵌入式系統(tǒng)硬件與軟件架構(gòu)(英文版) 0次下載
- 國內(nèi)衛(wèi)星通信地球站發(fā)射接收和地面通信設(shè)備技術(shù)要求 第四部分中
- ADC和DAC基礎(chǔ) (共五部分,完整版) 0次下載
- 火力發(fā)電廠水汽分析方法 第四部分:氯化物的測定 (電極法)D
- 【北京迅為】iTOP-i.MX6開發(fā)板使用手冊第四部分固件編譯第十四章非設(shè)備樹Android4.4系統(tǒng)編譯 76次閱讀
- INGCHIPS BLE芯片如何獲得最大吞吐量 684次閱讀
- NanoBeacon? BLE掃描器教程(第四部分) 479次閱讀
- 交流電壓信號調(diào)理電路分析 2402次閱讀
- 嵌入式軟件的設(shè)計模式(上) 1119次閱讀
- 嵌入式代碼高效運行指南 761次閱讀
- 嵌入式系統(tǒng)的全面解析 3146次閱讀
- 以嵌入式系統(tǒng)為基礎(chǔ)的數(shù)字?jǐn)U頻收發(fā)信機硬件設(shè)計流程概述 1284次閱讀
- 嵌入式硬件設(shè)計中需要注意的事項 824次閱讀
- 盤點幾種主流嵌入式架構(gòu)的代碼壓縮技術(shù) 4391次閱讀
- 嵌入式硬件電路設(shè)計中的六大要點 4638次閱讀
- 基于SoPC的嵌入式硬件平臺系統(tǒng)設(shè)計詳解 1893次閱讀
- 一文知道UltraFast嵌入式設(shè)計方法指南 2453次閱讀
- 嵌入式系統(tǒng)有哪些部分組成_嵌入式系統(tǒng)的應(yīng)用領(lǐng)域 3.3w次閱讀
- 嵌入式軟件工程師和嵌入式硬件工程師有什么區(qū)別 7w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多