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

電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>硬件即代碼第五部分:FPGA內(nèi)部

硬件即代碼第五部分:FPGA內(nèi)部

2023-06-14 | zip | 0.00 MB | 次下載 | 免費(fèi)

資料介紹

描述

我對(duì)本教程采用了快速入門的方法,即盡早開始編寫代碼。編寫代碼不需要對(duì) FPGA 了解太多,就像你為 CPU 編寫軟件而沒(méi)有真正了解 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ù)百到超過(guò)一百萬(wàn)不等。

寄存器- (非數(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 以上。

如果沒(méi)有足夠的 DSP 模塊可用,綜合工具將為乘法器和加法器使用可編程邏輯。這對(duì)于加法器來(lái)說(shuō)很常見(jiàn),雖然效率較低,但它們?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ù)量可能從幾萬(wàn)到幾千不等。一些 FPGA 在同一個(gè) FPGA 中也有多種尺寸。例如,許多較小的 RAM 和一些大型 RAM。

I/O - 這些重要的元件使用芯片的外部引腳提供輸入和輸出。在本系列中,我們不會(huì)過(guò)多擔(dān)心這些,因?yàn)槲覀儗⑹冀K使用 HLS 工具中內(nèi)置的預(yù)先設(shè)計(jì)的塊,將我們的設(shè)計(jì)與外部世界連接起來(lái)。但是,只是為了完整性... 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è)不同尺寸的部件(無(wú)論是在物理上還是在可用資源方面)、封裝和特殊功能。當(dāng)您訪問(wèn)設(shè)備系列的網(wǎng)站時(shí),頁(yè)面上或附件中將有一個(gè)系列表,其中總結(jié)了系列中每個(gè)設(shè)備的可用資源。

這是我們正在使用的 UPDuino 板上 FPGA 的族表:

pYYBAGNYgAKAZViDAAEVWpg9scs411.png
?

希望您現(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ì)說(shuō)明各個(gè)塊的數(shù)量和大小。)
  • DSP 塊:8 個(gè)(表中的乘法和累加器塊)

作為獎(jiǎng)勵(lì),這些芯片有一些更大的塊 RAM(表中的 SPRAM)。

即使您不了解文檔其余部分的大部分內(nèi)容,通常也值得查看數(shù)據(jù)表的前幾頁(yè)。在概述之后,通常會(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 模塊等)之后,工具必須在芯片上布局這些元素。在幾何上不可能以一種一切都與它們所連接的事物直接相鄰的方式來(lái)布局設(shè)計(jì)。因此,存在“路由”資源,這些資源基本上是電線和可編程開關(guān),允許連接芯片的不同部分。

不幸的是,這是一種難以定量描述的資源。因此,您不會(huì)在 FPGA 規(guī)范中看到任何數(shù)字來(lái)描述可用的布線(不過(guò),數(shù)據(jù)表可能會(huì)有對(duì)布線架構(gòu)的描述),并且工具很少或根本沒(méi)有關(guān)于設(shè)計(jì)布線多少的輸出正在利用。充其量,您可能會(huì)看到這樣的警告,例如這種設(shè)計(jì)具有高度擁塞。

在實(shí)踐中,布線并不是您會(huì)直接擔(dān)心的事情,但它會(huì)影響最大可實(shí)現(xiàn)的芯片容量。未使用的邏輯和其他元素越多,布局的靈活性就越大,工具就越有可能找到可行的布局。反過(guò)來(lái)說(shuō),您使用的資源百分比越高,布局的靈活性就越小,工具就越有可能無(wú)法找到可行的布局。

我發(fā)現(xiàn)一旦 FPGA 的利用率達(dá)到 70-75%,這些工具可能會(huì)在布局期間開始出現(xiàn)問(wèn)題。一旦達(dá)到 80% 或更多,您可能會(huì)遇到徹底的失敗。這只是我的經(jīng)驗(yàn),YMMV。此時(shí),簡(jiǎn)單的解決方案是升級(jí)到更大的 FPGA。可以做一些事情來(lái)突破設(shè)備利用率的極限,但這些事情超出了本系列的水平,需要數(shù)字硬件設(shè)計(jì)師的幫助。

資源使用報(bào)告

現(xiàn)在您至少了解了最重要的感興趣的資源,我們現(xiàn)在可以查看工具報(bào)告,告訴我們我們的設(shè)計(jì)正在使用多少資源。當(dāng)您單擊上傳按鈕構(gòu)建您的設(shè)計(jì)并將其上傳到 FPGA 時(shí),您會(huì)看到大量信息飛過(guò),包括資源使用信息。您也可以運(yùn)行這些工具,而無(wú)需使用以下命令實(shí)際上傳到 UPDuino 板:(pio run --target bitstream如果之前構(gòu)建了比特流,您可能需要先清理項(xiàng)目)。

工具完成后,向后滾動(dòng)幾頁(yè),直到看到如下所示的表格:

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ù)語(yǔ)來(lái)表示邏輯元件:LC(邏輯單元),即 LUT + FF。之后是嵌入式 RAM,再往下是 DSP。

這個(gè)實(shí)際輸出來(lái)自我們?cè)诘诙糠值牡谝粋€(gè)示例:Hello FPGA。這種設(shè)計(jì)只使用了 10% 的 LE 資源,因此有足夠的空間來(lái)做更多的事情。事實(shí)上,這 10% 的大部分實(shí)際上是由工具產(chǎn)生的開銷,用于將你的函數(shù)連接到 USB,因此我們可以從計(jì)算機(jī)調(diào)用它。

要進(jìn)行實(shí)驗(yàn),請(qǐng)使用我們介紹過(guò)的任何示例,并嘗試對(duì)代碼進(jìn)行各種更改,以查看此使用情況報(bào)告表如何更改。5K 并不多,但我已經(jīng)使用此設(shè)備構(gòu)建了許多復(fù)雜的應(yīng)用程序,例如喚醒詞檢測(cè)和圖像分類。

感知器挑戰(zhàn)

在第四部分中,我要求您修改多類感知器示例以并行計(jì)算 3 個(gè)輸出。這是該問(wèn)題的解決方案:

// 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í)并行訪問(wèn)這一事實(shí)。通過(guò)將coef 變量拆分為三個(gè)單獨(dú)的變量并展開外部循環(huán),我們可以使每個(gè)輸出的乘法和累加步驟并行發(fā)生。如果我們展開了循環(huán),但沒(méi)有拆分coef,那么工具鏈仍然會(huì)為三個(gè)乘法和加法語(yǔ)句生成單獨(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ā)器來(lái)存儲(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é)!接下來(lái),我們將討論另一個(gè)性能優(yōu)化主題:如何消除(或至少隱藏)I/O 開銷。

連接

在我發(fā)布新的分期付款時(shí),請(qǐng)關(guān)注我以保持最新狀態(tài)。還有一個(gè) Discord 服務(wù)器(公共聊天平臺(tái)),用于您在https://discord.gg/3sA7FHayGH上可能有的任何評(píng)論、問(wèn)題或討論


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
  2. 1.06 MB  |  532次下載  |  免費(fèi)
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費(fèi)
  5. 3TC358743XBG評(píng)估板參考手冊(cè)
  6. 1.36 MB  |  330次下載  |  免費(fèi)
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費(fèi)
  9. 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費(fèi)
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費(fèi)
  13. 7元宇宙底層硬件系列報(bào)告
  14. 13.42 MB  |  182次下載  |  免費(fèi)
  15. 8FP5207XR-G1中文應(yīng)用手冊(cè)
  16. 1.09 MB  |  178次下載  |  免費(fèi)

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費(fèi)
  3. 2555集成電路應(yīng)用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費(fèi)
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費(fèi)
  7. 4開關(guān)電源設(shè)計(jì)實(shí)例指南
  8. 未知  |  21549次下載  |  免費(fèi)
  9. 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費(fèi)
  11. 6數(shù)字電路基礎(chǔ)pdf(下載)
  12. 未知  |  13750次下載  |  免費(fèi)
  13. 7電子制作實(shí)例集錦 下載
  14. 未知  |  8113次下載  |  免費(fèi)
  15. 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
  16. 0.00 MB  |  6656次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費(fèi)
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費(fèi)
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費(fèi)
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費(fèi)
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費(fèi)
  11. 6電路仿真軟件multisim 10.0免費(fèi)下載
  12. 340992  |  191187次下載  |  免費(fèi)
  13. 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
  14. 158M  |  183279次下載  |  免費(fèi)
  15. 8proe5.0野火版下載(中文版免費(fèi)下載)
  16. 未知  |  138040次下載  |  免費(fèi)