午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

最酷的 FPGA 技術(shù)之一:DFX 實例精講

 西北望msm66g9f 2024-10-22

在微秒內(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描述為:
“持續(xù)改進并發(fā)產(chǎn)品和制造過程開發(fā),從一開始就將開發(fā)人員的注意力集中在所有關(guān)鍵的產(chǎn)品生命周期考慮因素上,例如客戶需求、質(zhì)量、上市時間、擁有成本和操作復雜性。”
“Continuous improvement in concurrent product and manufacturing process development to focus developers’ attention from the beginning on all key product lifecycle considerations such as customer requirements, quality, time to market, cost of ownership, and operational complexity.’’

介紹

在典型的嵌入式系統(tǒng)中,硬件是固定的,運行時的功能變化由軟件實現(xiàn)。這意味著硬件在設(shè)計初期就必須支持所有功能。與標準 SoC 不同,F(xiàn)PGA 僅需要實現(xiàn)所需的硬件(邏輯)。

圖片

DFX通過硬件時間分片進一步提高了這種靈活性。這意味著 FPGA 邏輯的一部分可以用作以太網(wǎng)控制器,然后在幾微秒后切換到 MIPI 接口功能。

該技術(shù)具有多項優(yōu)點:

  • 更小的 FPGA 要求
  • 簡化配置管理
  • 降低功耗
  • 更容易進行設(shè)計更新,因為只需要更新部分比特流

在以下部分中,我們將進行 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è)計

使用下列鏈接下載項目:

https://github.com/suisuisi/FPGAPROJECTS

首先,從項目根目錄中設(shè)置 TRD_HOME 變量:

export TRD_HOME=$PWD

接下來,獲取 AMD-Xilinx 工具:

source /opt/Xilinx/Vivado/2023.2/settings64.sh
source /opt/Xilinx/Vitis/2023.2/settings64.sh
source /opt/Xilinx/petalinux/2023.2/settings.sh

構(gòu)建整個設(shè)計和部分比特流:

cd $TRD_HOME/vivado
make

構(gòu)建完成后,將在以下位置找到生成的 Vivado 項目:

$TRD_HOME/vivado/build/prj

所有生成的比特流位于:

$TRD_HOME/vivado/build/bitstreams

在此階段,可以使用 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
xsct

在 Xilinx 軟件命令工具 shell 中,輸入以下命令:

xsct% file mkdir workspace;cd workspace
xsct% source ../tcl/build.tcl
xsct% gen_app release
xsct% exit

新建的 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 項目:

mkdir -p $TRD_HOME/plnx/work
cd $TRD_HOME/plnx/work
petalinux-create --type project --template microblaze --name aup15

接下來,我們添加自定義 Yocto 層并覆蓋默認值:

cd $TRD_HOME/plnx/work/aup15
ln -s $TRD_HOME/plnx/configs/meta-avs project-spec/
ln -sf $TRD_HOME/plnx/configs/config project-spec/configs/config
ln -sf $TRD_HOME/plnx/configs/rootfs_config project-spec/configs/rootfs_config

然后將 Xilinx S upport A rchive 導入到我們的項目中:

petalinux-config --get-hw-description $TRD_HOME/vivado/build/prj/  --silentconfig

接下來,將 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-build

PetaLinux 構(gòu)建完成后,所有鏡像都位于此處:

$TRD_HOME/plnx/work/aup15/images/linux

使用 MicroBlaze FSBL 更新比特流并從 PetaLinux 鏡像生成 MCS 鏡像

cd $TRD_HOME/vivado/build/prj
vivado -mode tcl
Vivado% source ../../tcl/procedures.tcl
Vivado% gen_flash_image_fpga ../../../vitis/workspace/bobbyb/Release/bobbyb.elf

接下來,我們?yōu)槠渌鸉LASH分區(qū)創(chuàng)建所有鏡像:

Vivado% source ../../tcl/procedures.tcl
Vivado% gen_flash_image_uboot
Vivado% gen_flash_image_kernel
Vivado% gen_flash_image_ubi

所有鏡像均位于此構(gòu)建文件夾中:

$TRD_HOME/ vivado/build/flash_images

通過 JTAG 下載 Flash 鏡像

可以使用GUI進行下載或者使用下面命令。

Vivado% source ../../tcl/procedures.tcl
Vivado% jtag::flash ../flash_images/fpga.mcs
Vivado% jtag::flash ../flash_images/u-boot.bin.mcs
Vivado% jtag::flash ../flash_images/image.ub.mcs
Vivado% jtag::flash ../flash_images/rootfs.ubi.mcs

演示

將鏡像刷入 SPI NOR FLASH后,將 UART 連接到PC上:

tio /dev/ttyUSB1 -b 115200

在 UART 終端輸出:

root@avs-au15p-trd:~# dfx-demo

演示日志:

copied /usr/share/avs/bitstreams/left.bin to buffer @ 0xa7d00000 (290552 bytes)
copied /usr/share/avs/bitstreams/right.bin to buffer @ 0xa7d46ef8 (290552 bytes)
copied /usr/share/avs/bitstreams/up.bin to buffer @ 0xa7d8ddf0 (386864 bytes)
copied /usr/share/avs/bitstreams/down.bin to buffer @ 0xa7dec520 (386864 bytes)
Baseaddr: 0x48602000
Sending shutdown commands to dfx controller...
writing addresses and sizes of partial bitstreams to dfx controller...

pushing partial bitstream #0: /usr/share/avs/bitstreams/left.bin
Configuration time 600 us

pushing partial bitstream #1: /usr/share/avs/bitstreams/right.bin
Configuration time 606 us

pushing partial bitstream #2: /usr/share/avs/bitstreams/up.bin
Configuration time 719 us

pushing partial bitstream #3: /usr/share/avs/bitstreams/down.bin
Configuration time 727 us

pushing partial bitstream #0: /usr/share/avs/bitstreams/left.bin
Configuration time 606 us

結(jié)論

這個功能其實已經(jīng)推出來很多年了,目前還是比較完善的,后面會出一個簡易版本進行演示。下面文章是使用GUI進行DFX的官方文章:

https://adaptivesupport./s/article/000036011?language=zh_CN

參考

AMD DFX 用戶指南 UG947

代碼

https://github.com/suisuisi/FPGAPROJECTS

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多