資料介紹
描述
我對(duì)本教程采用了快速入門的方法,即盡早開始編寫代碼。編寫代碼不需要對(duì) FPGA 了解太多,就像你為 CPU 編寫軟件而沒有真正了解 CPU 的細(xì)節(jié)一樣。但是,F(xiàn)PGA 是一種資源受限的設(shè)備,在某些時(shí)候您會(huì)想了解這些資源是什么以及如何測(cè)量它們。今天,我們將仔細(xì)研究 FPGA 的組成部分,以便您可以做到這一點(diǎn)。
如果您是本系列的新手,您可能想回到硬件即代碼第 I 部分。
FPGA 元素
讓我們首先介紹 FPGA 內(nèi)部的主要元素。
可編程邏輯- 這是 FPGA 中可用的主要和最豐富的資源。正如我在第一部分中所描述的,數(shù)字邏輯由邏輯門(與、或、非等)組成,該邏輯可用于實(shí)現(xiàn)算術(shù)運(yùn)算,以及計(jì)算機(jī)所做的一切。可編程邏輯元件通常稱為 LE(邏輯元件)或 LUT。在最大的 FPGA 中,LE 容量可以從數(shù)百到超過一百萬不等。
寄存器- (非數(shù)組)變量的值存儲(chǔ)在由稱為觸發(fā)器的硬件元素組成的寄存器中。每個(gè)觸發(fā)器(或只是 FF)存儲(chǔ)一個(gè)位值,因此 8 位變量將在硬件中使用 8 個(gè) FF。每個(gè) LE 通常有一個(gè)或兩個(gè) FF 配對(duì),因此觸發(fā)器容量通常與 LE 的順序相同。
DSP 模塊——所謂的“數(shù)字信號(hào)處理”模塊主要由一個(gè)硬編碼(即固定功能,不可編程)乘法器和一個(gè)加法器組成。有幾種變體,但乘法器 + 加法器是所有變體共有的關(guān)鍵功能。盡管這兩者都可以純粹在可編程邏輯中實(shí)現(xiàn),但 DSP 模塊的效率要高得多,而且它們對(duì)許多應(yīng)用非常重要。DSP 塊數(shù)范圍從 10 以下到 1000 以上。
如果沒有足夠的 DSP 模塊可用,綜合工具將為乘法器和加法器使用可編程邏輯。這對(duì)于加法器來說很常見,雖然效率較低,但它們?nèi)匀幌喈?dāng)有效。另一方面,乘法器作為可編程邏輯非常浪費(fèi),如果您需要許多乘法器超出可用 DSP 模塊的數(shù)量,您可能會(huì)發(fā)現(xiàn)自己很快就會(huì)耗盡空間。
嵌入式 RAM - 我們?cè)诘谒牟糠衷敿?xì)介紹了嵌入式 RAM。這些元素通常被稱為 EBR(嵌入式 RAM)、塊 RAM 或 BRAM。每個(gè)嵌入式 RAM 的容量通常以數(shù)千位為單位。嵌入式 RAM 的數(shù)量可能從幾萬到幾千不等。一些 FPGA 在同一個(gè) FPGA 中也有多種尺寸。例如,許多較小的 RAM 和一些大型 RAM。
I/O - 這些重要的元件使用芯片的外部引腳提供輸入和輸出。在本系列中,我們不會(huì)過多擔(dān)心這些,因?yàn)槲覀儗⑹冀K使用 HLS 工具中內(nèi)置的預(yù)先設(shè)計(jì)的塊,將我們的設(shè)計(jì)與外部世界連接起來。但是,只是為了完整性... I/O 元素包括通用 I/O(或 GPIO),可以驅(qū)動(dòng)具有高/低輸出值的引腳或讀取高/低輸入值。除了 GPIO,F(xiàn)PGA 通常還提供其他固定功能 I/O 元件,這些元件可以使用 DDR、SPI、I2C、PCIe 等特定協(xié)議與外部設(shè)備進(jìn)行通信。
FPGA 規(guī)格
幾乎所有 FPGA 供應(yīng)商都提供不同系列的 FPGA,它們針對(duì)不同類別的應(yīng)用,稱為器件系列。每個(gè)系列將包括幾個(gè)不同尺寸的部件(無論是在物理上還是在可用資源方面)、封裝和特殊功能。當(dāng)您訪問設(shè)備系列的網(wǎng)站時(shí),頁面上或附件中將有一個(gè)系列表,其中總結(jié)了系列中每個(gè)設(shè)備的可用資源。
這是我們正在使用的 UPDuino 板上 FPGA 的族表:
希望您現(xiàn)在可以確定我們感興趣的 4 個(gè)主要資源(實(shí)際上是 3 個(gè),因?yàn)槿鄙僖粋€(gè))。UPDuino 包含一個(gè) UP5K 設(shè)備(第二列),因此我們的開發(fā)板有以下資源:
- 可編程邏輯:5、280個(gè)元素(表中的LUT)
- 寄存器:未明確給出,但假設(shè)類似于 LUT 計(jì)數(shù)(數(shù)據(jù)表將提供更多詳細(xì)信息。)
- 嵌入式 RAM:120Kb(這是總位容量。數(shù)據(jù)表將詳細(xì)說明各個(gè)塊的數(shù)量和大小。)
- DSP 塊:8 個(gè)(表中的乘法和累加器塊)
作為獎(jiǎng)勵(lì),這些芯片有一些更大的塊 RAM(表中的 SPRAM)。
即使您不了解文檔其余部分的大部分內(nèi)容,通常也值得查看數(shù)據(jù)表的前幾頁。在概述之后,通常會(huì)有一個(gè)比您在網(wǎng)站上找到的更詳細(xì)的家庭表。
查看 UP5K 設(shè)備的數(shù)據(jù)表(下載數(shù)據(jù)表),我們發(fā)現(xiàn)它有 30 個(gè)嵌入式 RAM,每個(gè) 4096 位 (30 * 4Kb = 120Kb),以及 4 個(gè) 256Kb (4 * 256Kb = 1Mb) 的大 RAM 塊。
路由(隱藏資源)
在將設(shè)計(jì)映射到數(shù)字邏輯(和 DSP 模塊等)之后,工具必須在芯片上布局這些元素。在幾何上不可能以一種一切都與它們所連接的事物直接相鄰的方式來布局設(shè)計(jì)。因此,存在“路由”資源,這些資源基本上是電線和可編程開關(guān),允許連接芯片的不同部分。
不幸的是,這是一種難以定量描述的資源。因此,您不會(huì)在 FPGA 規(guī)范中看到任何數(shù)字來描述可用的布線(不過,數(shù)據(jù)表可能會(huì)有對(duì)布線架構(gòu)的描述),并且工具很少或根本沒有關(guān)于設(shè)計(jì)布線多少的輸出正在利用。充其量,您可能會(huì)看到這樣的警告,例如這種設(shè)計(jì)具有高度擁塞。
在實(shí)踐中,布線并不是您會(huì)直接擔(dān)心的事情,但它會(huì)影響最大可實(shí)現(xiàn)的芯片容量。未使用的邏輯和其他元素越多,布局的靈活性就越大,工具就越有可能找到可行的布局。反過來說,您使用的資源百分比越高,布局的靈活性就越小,工具就越有可能無法找到可行的布局。
我發(fā)現(xiàn)一旦 FPGA 的利用率達(dá)到 70-75%,這些工具可能會(huì)在布局期間開始出現(xiàn)問題。一旦達(dá)到 80% 或更多,您可能會(huì)遇到徹底的失敗。這只是我的經(jīng)驗(yàn),YMMV。此時(shí),簡(jiǎn)單的解決方案是升級(jí)到更大的 FPGA。可以做一些事情來突破設(shè)備利用率的極限,但這些事情超出了本系列的水平,需要數(shù)字硬件設(shè)計(jì)師的幫助。
資源使用報(bào)告
現(xiàn)在您至少了解了最重要的感興趣的資源,我們現(xiàn)在可以查看工具報(bào)告,告訴我們我們的設(shè)計(jì)正在使用多少資源。當(dāng)您單擊上傳按鈕構(gòu)建您的設(shè)計(jì)并將其上傳到 FPGA 時(shí),您會(huì)看到大量信息飛過,包括資源使用信息。您也可以運(yùn)行這些工具,而無需使用以下命令實(shí)際上傳到 UPDuino 板:(pio run --target bitstream
如果之前構(gòu)建了比特流,您可能需要先清理項(xiàng)目)。
工具完成后,向后滾動(dòng)幾頁,直到看到如下所示的表格:
Info: Device utilisation:
Info: ICESTORM_LC: 544/ 5280 10%
Info: ICESTORM_RAM: 0/ 30 0%
Info: SB_IO: 6/ 96 6%
Info: SB_GB: 4/ 8 50%
Info: ICESTORM_PLL: 0/ 1 0%
Info: SB_WARMBOOT: 0/ 1 0%
Info: ICESTORM_DSP: 1/ 8 12%
Info: ICESTORM_HFOSC: 1/ 1 100%
Info: ICESTORM_LFOSC: 0/ 1 0%
Info: SB_I2C: 0/ 2 0%
Info: SB_SPI: 0/ 2 0%
Info: IO_I3C: 0/ 2 0%
Info: SB_LEDDA_IP: 0/ 1 0%
Info: SB_RGBA_DRV: 0/ 1 0%
Info: ICESTORM_SPRAM: 0/ 4 0%
這是布局工具的輸出。第一行使用另一個(gè)術(shù)語來表示邏輯元件:LC(邏輯單元),即 LUT + FF。之后是嵌入式 RAM,再往下是 DSP。
這個(gè)實(shí)際輸出來自我們?cè)诘诙糠值牡谝粋€(gè)示例:Hello FPGA。這種設(shè)計(jì)只使用了 10% 的 LE 資源,因此有足夠的空間來做更多的事情。事實(shí)上,這 10% 的大部分實(shí)際上是由工具產(chǎn)生的開銷,用于將你的函數(shù)連接到 USB,因此我們可以從計(jì)算機(jī)調(diào)用它。
要進(jìn)行實(shí)驗(yàn),請(qǐng)使用我們介紹過的任何示例,并嘗試對(duì)代碼進(jìn)行各種更改,以查看此使用情況報(bào)告表如何更改。5K 并不多,但我已經(jīng)使用此設(shè)備構(gòu)建了許多復(fù)雜的應(yīng)用程序,例如喚醒詞檢測(cè)和圖像分類。
感知器挑戰(zhàn)
在第四部分中,我要求您修改多類感知器示例以并行計(jì)算 3 個(gè)輸出。這是該問題的解決方案:
// Multi-class perceptron is a matrix/vector multiplication
void mat_vec_mul(in_array,4> features, out_array,4> out) {
int16_t coef0[4] = { -9, 25, -28, -27 };
int16_t coef1[4] = { -3, -31, 58, -31 };
int16_t coef2[4] = { -10, 4, 80, 79 };
int16_t acc0 = 0;
int16_t acc1 = 0;
int16_t acc2 = 0;
for (uint8_t j = 0; j < 4; j++) {
int16_t x = features[j];
acc0 += coef0[j] * x;
acc1 += coef1[j] * x;
acc2 += coef2[j] * x;
}
out.resize(3); // set the actual output size
out[0] = acc0;
out[1] = acc1;
out[2] = acc2;
}
解決方案的關(guān)鍵是利用每個(gè)嵌入式 RAM 以及數(shù)組變量可以同時(shí)并行訪問這一事實(shí)。通過將coef
變量拆分為三個(gè)單獨(dú)的變量并展開外部循環(huán),我們可以使每個(gè)輸出的乘法和累加步驟并行發(fā)生。如果我們展開了循環(huán),但沒有拆分coef
,那么工具鏈仍然會(huì)為三個(gè)乘法和加法語句生成單獨(dú)的硬件,但它們需要輪流從coef
數(shù)組中獲取值而不是實(shí)際執(zhí)行在平行下。如所寫,上述循環(huán)每次迭代將使用 2 個(gè)周期:一個(gè)用于讀取數(shù)組,一個(gè)用于執(zhí)行乘法和累加。幾周后,我們將了解如何將其進(jìn)一步改進(jìn)為每次迭代 1 個(gè)周期。
這是此示例的資源使用情況:
Info: Device utilisation:
Info: ICESTORM_LC: 686/ 5280 12%
Info: ICESTORM_RAM: 2/ 30 6%
Info: SB_IO: 6/ 96 6%
Info: SB_GB: 8/ 8 100%
Info: ICESTORM_PLL: 0/ 1 0%
Info: SB_WARMBOOT: 0/ 1 0%
Info: ICESTORM_DSP: 3/ 8 37%
Info: ICESTORM_HFOSC: 1/ 1 100%
Info: ICESTORM_LFOSC: 0/ 1 0%
Info: SB_I2C: 0/ 2 0%
Info: SB_SPI: 0/ 2 0%
Info: IO_I3C: 0/ 2 0%
Info: SB_LEDDA_IP: 0/ 1 0%
Info: SB_RGBA_DRV: 0/ 1 0%
Info: ICESTORM_SPRAM: 0/ 4 0%
正如預(yù)期的那樣,此設(shè)計(jì)使用 3 個(gè) DSP 模塊,每個(gè)輸出一個(gè)。但是,您可能想知道為什么只使用了 2 個(gè)嵌入式 RAM 塊,盡管該函數(shù)使用了 5 個(gè)數(shù)組。在某些情況下,如果數(shù)組非常小,綜合工具可能會(huì)使用觸發(fā)器來存儲(chǔ)數(shù)組數(shù)據(jù),而不是使用嵌入式 RAM。這里的系數(shù)數(shù)組總共只有 64 位,將其存儲(chǔ)在 4096 RAM 中會(huì)有些浪費(fèi)。
下一步
本教程系列的前半部分到此結(jié)束,我希望您現(xiàn)在對(duì)如何使用 C++ 創(chuàng)建自定義 FPGA 設(shè)計(jì)有一個(gè)基本概念。但是,還有很多東西要學(xué)!接下來,我們將討論另一個(gè)性能優(yōu)化主題:如何消除(或至少隱藏)I/O 開銷。
連接
在我發(fā)布新的分期付款時(shí),請(qǐng)關(guān)注我以保持最新狀態(tài)。還有一個(gè) Discord 服務(wù)器(公共聊天平臺(tái)),用于您在https://discord.gg/3sA7FHayGH上可能有的任何評(píng)論、問題或討論
- 硬件即代碼第三部分:空間與時(shí)間
- 硬件即代碼第四部分:嵌入式RAM
- 《Eric S. Raymond五部曲》pdf 0次下載
- 單片機(jī)匯編語言編程,《單片機(jī)原理及接口技術(shù)》,單片機(jī)考研,期末匯編考試寶典,《單片機(jī)原理及應(yīng)用》,第一版,單片機(jī)匯編考研(初試或復(fù)試考試題) 0次下載
- ADC和DAC基礎(chǔ) (共五部分,完整版) 0次下載
- 安信Windows驅(qū)動(dòng)開發(fā)教程第五部分 16次下載
- 什么是低壓降穩(wěn)壓器(LDO)的壓降? - 第五部分
- 自動(dòng)控制原理第五章_頻域分析法_Part1部分 0次下載
- 自動(dòng)控制原理第五章_頻域分析法_Part2部分 0次下載
- 自動(dòng)控制原理第五章_頻域分析法_Part3部分 0次下載
- MATLAB仿真在現(xiàn)代通信中的應(yīng)用_部分1 2次下載
- MATLAB信號(hào)處理詳解_部分5 16次下載
- ADC和DAC基礎(chǔ) (共五部分,完整版) 0次下載
- 火力發(fā)電廠水汽分析方法 第五部分:酸度的測(cè)定
- USB開發(fā)指導(dǎo)內(nèi)部資料
- fpga語言是什么?fpga語言與c語言的區(qū)別 981次閱讀
- 代碼即注釋,注釋即代碼的概念是如何形成的 797次閱讀
- 3D結(jié)構(gòu)光內(nèi)部硬件拆解 1017次閱讀
- SystemVerilog在硬件設(shè)計(jì)部分有哪些優(yōu)勢(shì) 1326次閱讀
- 雙極踏腳車(第二部分):微步和衰減模式 656次閱讀
- 代碼質(zhì)量如何影響企業(yè)的投資回報(bào)率 594次閱讀
- 使用安森美新型SiC模塊構(gòu)建25kW快速電動(dòng)汽車充電樁 3068次閱讀
- 了解FPGA的芯片內(nèi)部資源:IO是什么 1w次閱讀
- 實(shí)時(shí)數(shù)據(jù)體系建設(shè)的總體方案的三部分 6771次閱讀
- 半導(dǎo)體器件型號(hào)的命名方法和半導(dǎo)體二極管參數(shù)符號(hào)及其意義說明 2.1w次閱讀
- FPGA的工作原理以及內(nèi)部結(jié)構(gòu) 2.6w次閱讀
- FPGA的幾點(diǎn)重要總結(jié) 4118次閱讀
- 關(guān)于如何「訓(xùn)練」神經(jīng)網(wǎng)絡(luò)的一部分經(jīng)驗(yàn)與見解 7634次閱讀
- 用純硬件解決方案加速部分重配置進(jìn)程 1748次閱讀
- 混合信號(hào)系統(tǒng)接地揭秘之第二部分 1712次閱讀
下載排行
本周
- 1A7159和A7139射頻芯片的資料免費(fèi)下載
- 0.20 MB | 55次下載 | 5 積分
- 2PIC12F629/675 數(shù)據(jù)手冊(cè)免費(fèi)下載
- 2.38 MB | 36次下載 | 5 積分
- 3PIC16F716 數(shù)據(jù)手冊(cè)免費(fèi)下載
- 2.35 MB | 18次下載 | 5 積分
- 4dsPIC33EDV64MC205電機(jī)控制開發(fā)板用戶指南
- 5.78MB | 8次下載 | 免費(fèi)
- 5STC15系列常用寄存器匯總免費(fèi)下載
- 1.60 MB | 7次下載 | 5 積分
- 6模擬電路仿真實(shí)現(xiàn)
- 2.94MB | 4次下載 | 免費(fèi)
- 7PCB圖繪制實(shí)例操作
- 2.92MB | 2次下載 | 免費(fèi)
- 8零死角玩轉(zhuǎn)STM32F103—指南者
- 26.78 MB | 1次下載 | 1 積分
本月
- 1ADI高性能電源管理解決方案
- 2.43 MB | 452次下載 | 免費(fèi)
- 2免費(fèi)開源CC3D飛控資料(電路圖&PCB源文件、BOM、
- 5.67 MB | 141次下載 | 1 積分
- 3基于STM32單片機(jī)智能手環(huán)心率計(jì)步器體溫顯示設(shè)計(jì)
- 0.10 MB | 137次下載 | 免費(fèi)
- 4A7159和A7139射頻芯片的資料免費(fèi)下載
- 0.20 MB | 55次下載 | 5 積分
- 5PIC12F629/675 數(shù)據(jù)手冊(cè)免費(fèi)下載
- 2.38 MB | 36次下載 | 5 積分
- 6如何正確測(cè)試電源的紋波
- 0.36 MB | 19次下載 | 免費(fèi)
- 7PIC16F716 數(shù)據(jù)手冊(cè)免費(fèi)下載
- 2.35 MB | 18次下載 | 5 積分
- 8Q/SQR E8-4-2024乘用車電子電器零部件及子系統(tǒng)EMC試驗(yàn)方法及要求
- 1.97 MB | 8次下載 | 10 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935121次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420062次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191367次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73810次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評(píng)論
查看更多