在微秒內(nèi)交換“硬件”:使用 AMD 的 FPGA 即可實現(xiàn)。該技術(shù)稱為DFX(Dynamic Function Exchange)。 注意和產(chǎn)品設(shè)計的DFX區(qū)別: 在1982年,NCR公司開始了一個正式的計劃,以在其整個業(yè)務(wù)中實施制造可生產(chǎn)性的設(shè)計。到1989年,該計劃已被正式命名為“Design for Excellence”(DFX)。該公司將DfX描述為: 介紹在典型的嵌入式系統(tǒng)中,硬件是固定的,運行時的功能變化由軟件實現(xiàn)。這意味著硬件在設(shè)計初期就必須支持所有功能。與標準 SoC 不同,F(xiàn)PGA 僅需要實現(xiàn)所需的硬件(邏輯)。 DFX通過硬件時間分片進一步提高了這種靈活性。這意味著 FPGA 邏輯的一部分可以用作以太網(wǎng)控制器,然后在幾微秒后切換到 MIPI 接口功能。 該技術(shù)具有多項優(yōu)點:
在以下部分中,我們將進行 DFX 實例演示。本次使用基于ZU系列的開發(fā)板: 參考設(shè)計說明本次的實例注重DFX流程,所以邏輯比較簡單,這樣可以使 DFX 流程更易于理解。在此演示中,軟核從 SPI NOR FLASH啟動 Linux 系統(tǒng)。之所以選擇 Linux,是因為它包含完整的文件系統(tǒng) (UBI + UBIFS) 和 TCP/IP 網(wǎng)絡(luò)堆棧。Linux應用程序?qū)⑺膫€部分比特流從文件系統(tǒng)加載到內(nèi)存中(每個 DFX 分區(qū)兩個)。之后,DFX 控制器每 5s 設(shè)置并觸發(fā)一次。每個部分比特流包含不同的 LED 控制器,從而產(chǎn)生不同的 LED 閃爍。重新配置所需的時間測量后并通過 UART 打印。 Vivado 設(shè)計下圖顯示了靜態(tài)部分的BD設(shè)計。它包括一個 MicroBlaze 軟核處理器,該處理器配置了一個 MMU 和一個緩存控制器,用于運行 Linux 系統(tǒng)。此外,以太網(wǎng)、DDR4 內(nèi)存控制器和 I2C 等標準外設(shè)也是設(shè)計的一部分。 上面設(shè)計的一個重要部分是DFX控制器(外設(shè)的一部分): DFX 控制器可通過 AXI-Lite 接口進行編程。應用程序?qū)?nèi)存地址寫入相應的 DFX 控制器寄存器,然后啟動控制器。使用 DFX 控制器的 DMA 邏輯獲取比特流數(shù)據(jù),并通過 ICAP(Integrated Configuration Access Port)推送到配置位流中。 在本設(shè)計中,我們定義了兩個分區(qū):u_count和u_shift。在代碼中,這些分區(qū)作為標準組件實現(xiàn)。啟用 DFX 流程后,將顯示一個名為“Partition Definition”的選項卡: 這里,不同的 HDL 模塊與分區(qū)相關(guān)聯(lián)。在本示例中,每個分區(qū)有兩個模塊,但可以根據(jù)需要定義任意數(shù)量的模塊。 定義 HDL 模塊后,需要為分區(qū)創(chuàng)建面積約束: 綜合后,將收到有關(guān)區(qū)域是否足夠容納模塊的反饋。 u_count分區(qū)內(nèi)有一個ILA,所以u_count分區(qū)比u_shift分區(qū)大的原因。 下一步就是implement該設(shè)計。 implement后,將生成具有默認分區(qū)設(shè)置的完整比特流以及四個部分比特流(需要DFX的)。 使用提供的項目源重建 Vivado 設(shè)計使用下列鏈接下載項目:
首先,從項目根目錄中設(shè)置 TRD_HOME 變量:
接下來,獲取 AMD-Xilinx 工具: source /opt/Xilinx/Vivado/2023.2/settings64.sh 構(gòu)建整個設(shè)計和部分比特流:
構(gòu)建完成后,將在以下位置找到生成的 Vivado 項目: $TRD_HOME/vivado/build/prj 所有生成的比特流位于:
在此階段,可以使用 Vivado 硬件管理器測試 DFX 比特流。top.bit、down.bit、up.bit、left.bit 和 right.bit分別對應不同LED的閃爍。 目前還不能進行DFX驗證,因為top.bit 比特流不包含 MicroBlaze 的引導加載程序。 使用 Vitis 構(gòu)建自定義引導加載程序嵌入式系統(tǒng)的默認引導加載程序 U-Boot 對于 MicroBlaze 的內(nèi)存(BRAM只有幾十K)來說太大了。因此,我們使用自定義的第一階段引導加載程序。通過使用 xsct 來實現(xiàn)這一點,該工具允許我們從命令行創(chuàng)建 Vitis 工作區(qū)并編譯 FSBL 源代碼。 cd $TRD_HOME/vitis 在 Xilinx 軟件命令工具 shell 中,輸入以下命令:
新建的 FSBL 位于: $TRD_HOME/vitis/workspace/bobbyb/Release/bobbyb.elf 使用 PetaLinux 構(gòu)建 Linux 系統(tǒng)將 PetaLinux 與定制的 Avnet-Silica Yocto Layer 來構(gòu)建 Linux 鏡像。 首先,我們使用 MicroBlaze 的默認模板創(chuàng)建 PetaLinux 項目:
接下來,我們添加自定義 Yocto 層并覆蓋默認值: cd $TRD_HOME/plnx/work/aup15 然后將 Xilinx S upport A rchive 導入到我們的項目中:
接下來,將 Vivado 生成的部分比特流復制到我們的自定義根文件系統(tǒng)配置中。目的是將這些比特文件包含在最終的根文件系統(tǒng)中,以便 Linux 應用程序可以加載它們: cp $TRD_HOME/vivado/build/bitstreams/*.bin project-spec/meta-avs/recipes-apps/dfx-demo/files/bitstreams/ 此配置將.bin 文件放在最終 Linux 根文件系統(tǒng)的/usr/share/avs/bitstreams中。 最后,我們開始構(gòu)建 PetaLinux :
PetaLinux 構(gòu)建完成后,所有鏡像都位于此處: $TRD_HOME/plnx/work/aup15/images/linux 使用 MicroBlaze FSBL 更新比特流并從 PetaLinux 鏡像生成 MCS 鏡像
Vivado% source ../../tcl/procedures.tcl 接下來,我們?yōu)槠渌鸉LASH分區(qū)創(chuàng)建所有鏡像:
所有鏡像均位于此構(gòu)建文件夾中: $TRD_HOME/ vivado/build/flash_images 通過 JTAG 下載 Flash 鏡像可以使用GUI進行下載或者使用下面命令。
演示將鏡像刷入 SPI NOR FLASH后,將 UART 連接到PC上: tio /dev/ttyUSB1 -b 115200 在 UART 終端輸出:
演示日志: copied /usr/share/avs/bitstreams/left.bin to buffer @ 0xa7d00000 (290552 bytes) 結(jié)論這個功能其實已經(jīng)推出來很多年了,目前還是比較完善的,后面會出一個簡易版本進行演示。下面文章是使用GUI進行DFX的官方文章:
參考AMD DFX 用戶指南 UG947 代碼
|
|