女人荫蒂被添全过程13种图片,亚洲+欧美+在线,欧洲精品无码一区二区三区 ,在厨房拨开内裤进入毛片

電子發(fā)燒友App

硬聲App

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

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

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>Zynq上使用Vitis的雙ARM Hello World

Zynq上使用Vitis的雙ARM Hello World

2022-12-14 | zip | 16.93 MB | 次下載 | 免費

資料介紹

描述

Xilinx 的 Zynq-7000 系列 FPGA 芯片組是 FPGA 市場上最受歡迎的片上系統(tǒng) (SoC) 選項之一。由于 Xilinx 的集成開發(fā)環(huán)境 (IDE) Vivado,這是我在 FPGA 領(lǐng)域工作的個人偏好之一(盡管有時這是一種愛恨交織的關(guān)系)。Xilinx 的任何 SoC 芯片組(Zynq-7000 或 UltraScale+)的主要特性之一是嵌入到 FPGA 的可編程邏輯中的多個物理處理器Zynq-7000 系列 FPGA 專門配備了雙核 ARM Cortex-A9 處理器。Zynq 處理器的內(nèi)核能夠共享芯片上的資源,例如片上存儲器 (OCM)、DDRUART、通過中斷控制分配器 (ICD) 的中斷和全局定時器等等。

雖然我已經(jīng)很快適應(yīng)了 Xilinx 的新 SDK 工具/平臺 Vitis,但我注意到目前還沒有大量關(guān)于如何在其 SoC FPGA 上同時運行多個處理器的文檔。幸運的是,經(jīng)過幾天的探索,我發(fā)現(xiàn)這是一個相當簡單的過程。

在過去的項目中,我已經(jīng)介紹了如何在 Vitis 中為僅在 ARM 核心 0 上運行的 Zynq 上的裸機應(yīng)用程序創(chuàng)建一個新項目,因此我將直接介紹如何為第二個 ARM 核心創(chuàng)建裸機應(yīng)用程序( ARM 內(nèi)核 1) 以及如何為其創(chuàng)建單個引導(dǎo)映像。我在這個項目中使用了 Zynqberry,但這個項目中的任何步驟都不一定特定于Zynqberry ,并且適用于任何 Zynq-7000 系列開發(fā)板。

pYYBAGOYRsCAFodRAARe1E2CsUM328.png
Zynqberry FPGA 開發(fā)板。
?

在 Vitis 中,就像在其前身 XSDK 中一樣,軟件設(shè)計基于硬件平臺。這就是為什么必須在創(chuàng)建應(yīng)用程序項目之前在 Vitis 中創(chuàng)建平臺項目的原因。該平臺將硬件設(shè)計從從 Vivado 導(dǎo)出的 XSA 文件導(dǎo)入 Vitis,然后有助于創(chuàng)建板級支持包 (BSP)、第一階段引導(dǎo)加載程序 (FSBL) 等引導(dǎo)組件,最終是裸機應(yīng)用程序或操作系統(tǒng)

每個 BSP 只能支持一個裸機應(yīng)用程序或操作系統(tǒng)。BSP 與裸機應(yīng)用程序/OS 的這種層次關(guān)系在 Vitis 中稱為域。因此,由于 ARM 內(nèi)核 0 的域已經(jīng)存在于它的 Hello World 裸機應(yīng)用程序中,因此需要為第二個 ARM 內(nèi)核 (ARM 1) 創(chuàng)建一個新域。

要創(chuàng)建新域,請打開 platform.xpr,然后在打開的窗口中右鍵單擊帶有綠色符號的平臺項目名稱(不在資源管理器菜單中 - 將出現(xiàn)的唯一選項是“添加領(lǐng)域'):

poYBAGOYRsOAF7GCAAJ4CaaYIbM002.png
右鍵單擊平臺項目名稱以添加新域。
?

為新域指定一個所需的名稱,然后為操作系統(tǒng)選擇獨立選項,因為我們將創(chuàng)建一個裸機應(yīng)用程序。最后,選擇第二個 ARM 內(nèi)核(ps7_cortexa9_1)作為處理器。

pYYBAGOYRsmASEv-AAIgalRd8ic933.png
新域的目標 ARM 內(nèi)核 1。
?

這為創(chuàng)建新應(yīng)用程序項目時選擇 ARM 內(nèi)核 1 作為目標處理器提供了掛鉤。

pYYBAGOYRtGAUzBHAAMYq24Bxz0973.png
創(chuàng)建新域后 Vitis 中的整體項目視圖。
?

要創(chuàng)建一個在第二個 ARM 內(nèi)核上運行的新應(yīng)用程序,請選擇 File > New... > Application Project 并為新應(yīng)用程序指定您想要的名稱,然后單擊“Next”。

poYBAGOYRtiAG5WnAAKM-MsYg6M931.png
創(chuàng)建新應(yīng)用程序以在 ARM 內(nèi)核 1 上運行。
?

請務(wù)必選擇從 Vivado 導(dǎo)出的自定義硬件平臺(.XSA 文件):

pYYBAGOYRtqACd-RAABI4Auy3-Q405.png
如果您不選擇從 Vivado 導(dǎo)出的自定義 XSA,應(yīng)用程序?qū)⒖床坏接布?/font>
?

選擇為第二個 ARM 內(nèi)核創(chuàng)建的第二個域。如果您不小心選擇了 ARM 內(nèi)核 0 的域,“下一步”按鈕將灰顯,并彈出一條警告消息,指出該域已存在應(yīng)用程序。

poYBAGOYRuCAS3lUAAIL4sN5wRE210.png
選擇 ARM 內(nèi)核 1 域。
?

現(xiàn)在,我將 Hello World 應(yīng)用程序模板用于第二個 ARM 內(nèi)核 (ARM1)。

poYBAGOYRuaAd5SHAABPjz4daKE301.png
選擇申請模板
?

在 Zynq 芯片中運行兩個雙核時很容易錯過的關(guān)鍵步驟之一是鏈接描述文件中的 DDR 內(nèi)存地址不會被修改以將每個應(yīng)用程序保留在它們自己的內(nèi)存部分中。

默認情況下,在創(chuàng)建應(yīng)用程序時,鏈接器腳本會為應(yīng)用程序分配相同的基地址,并且其大小由硬件平臺表示,板卡上有多少 DDR 可用。如果保持不變,ARM0 和 ARM1 的應(yīng)用程序都將嘗試從 DDR 中的空間地址空間進行操作。這當然不好。

要修改尋址的 DDR,將一個部分分配給 ARM0,另一個分配給 ARM1,請打開每個應(yīng)用程序的鏈接描述文件(位于 Explorer > application > src > lscript.ld)并更改頂部 ps7_ddr_0 的值。

pYYBAGOYRu6AZ7k0AALDCgA-b4o938.png
修改了 ARM0 的 DDR 地址空間,這也必須對 ARM1 的鏈接描述文件進行。
?

為簡單起見,我決定將 Zynqberry DDR 的下半部分分配給 ARM0,將上半部分分配給 ARM1(不過請注意,因為這些是裸機應(yīng)用程序,除了向 UART 打印一條線外幾乎什么都不做,它們絕對不需要這么多 DDR 附近的任何地方來操作)。

為了實現(xiàn)這一點,我將 ARM0 的基地址保留為其默認值 (0x100000),但將大小減半為 0xFF800000。我將 ARM1 的基地址設(shè)置為 ARM0 的基地址加上 0xFF800000(0x10080000),它的大小也設(shè)置為 0xFF800000。

盡管兩個 ARM 內(nèi)核具有相同的處理能力,但仍有一些操作符,例如啟動過程,需要其中一個內(nèi)核作為主內(nèi)核,另一個內(nèi)核作為從內(nèi)核。在 Zynq 中,ARM0 是主機,因此只有它可以訪問某些操作和外圍設(shè)備。ARM0 還將負責在適當?shù)臅r間點啟動從屬 ARM1。

為了讓 ARM1 上的應(yīng)用程序知道它在從屬處理器上運行并提供適當?shù)膾煦^,必須在其 BSP 中設(shè)置非對稱多處理 (AMP) 編譯器標志。

為此,再次打開 platform.xpr 窗口,選擇 Modify BSP settings... 并導(dǎo)航到 ps7_cortexa9_1 > extra_compiler_flags,然后將以下內(nèi)容添加到已經(jīng)存在的參數(shù)的末尾:

-DUSE_AMP=1
poYBAGOYRvGACeZxAAFKaBsrtw0443.png
?

現(xiàn)在所有硬件和 BSP 設(shè)置都已配置,可以編寫實際的應(yīng)用程序代碼正如我之前提到的,ARM0 負責啟動 ARM1。ARM0 必須遵循兩個主要步驟才能成功啟動 ARM1(如 UG585 中的第 6.1.10 節(jié)所述):

  • 將 ARM 內(nèi)核 1 的 Zynq 的 DDR(PS7 DDR)中的內(nèi)存空間基地址寫入 0xFFFFFFF0(本項目中為 0x10080000)。
  • 執(zhí)行 SEV 指令(向多處理器系統(tǒng)中的所有內(nèi)核發(fā)出警報)以喚醒 ARM 內(nèi)核 1 并使其跳轉(zhuǎn)到其應(yīng)用程序中。

同時運行多個處理器時禁用 OCM 中的緩存也很重要,因為它不是處理器之間的可共享資源。

為安全起見,在將 ARM1 的基地址寫入 0xFFFFFFF0 后立即執(zhí)行 ARM 數(shù)據(jù)內(nèi)存屏障指令是一種很好的做法,因為在寫入指令完成并且內(nèi)存空間顯示為已更新之前,它不允許處理器繼續(xù)運行。

最后,可以執(zhí)行 SEV 指令,該指令就像系統(tǒng)中的信標警報一樣,告訴所有在場的處理器喚醒并跳轉(zhuǎn)到它們的應(yīng)用程序。

另一個快速功能:我希望 UART 控制臺以交替模式顯示來自 ARM0 和 ARM1 的“Hello World”打印輸出。因此,我沒有嘗試硬核睡眠時間來實現(xiàn)這一點,而是使用了一個變量,我將其類型轉(zhuǎn)換到 0xFFFF0000 的共享內(nèi)存空間中,作為每個 ARM 可以輪詢的值,以了解另一個何時完成其打印語句。

ARM0 代碼:

#include 
#include 
#include "xil_io.h"
#include "xil_mmu.h"
#include "platform.h"
#include "xil_printf.h"
#include "xpseudo_asm.h"
#include "xil_exception.h"

#define sev() __asm__("sev")
#define ARM1_STARTADR 0xFFFFFFF0
#define ARM1_BASEADDR 0x10080000
#define COMM_VAL (*(volatile unsigned long *)(0xFFFF0000))

int main()
{
    init_platform();
    COMM_VAL = 0;

    //Disable cache on OCM    
    // S=b1 TEX=b100 AP=b11, Domain=b1111, C=b0, B=b0
    Xil_SetTlbAttributes(0xFFFF0000,0x14de2); 

    print("ARM0: writing startaddress for ARM1\n\r");
    Xil_Out32(ARM1_STARTADR, ARM1_BASEADDR);
    dmb(); //waits until write has finished

    print("ARM0: sending the SEV to wake up ARM1\n\r");
    sev();

    while(1){
        print("Hello World - ARM0\n\r");
        sleep(1);
        COMM_VAL = 1;
        while(COMM_VAL == 1){
        }
    }

    cleanup_platform();
    return 0;
}

ARM1代碼:

#include 
#include 
#include "xil_io.h"
#include "xil_mmu.h"
#include "platform.h"
#include "xil_cache.h"
#include "xil_printf.h"
#include "xparameters.h"
#include "xpseudo_asm.h"
#include "xil_exception.h"

#define COMM_VAL (*(volatile unsigned long *)(0xFFFF0000))
extern u32 MMUTable;

int main()
{
    init_platform();
    print("CPU1: init_platform\n\r");

    //Disable cache on OCM
    // S=b1 TEX=b100 AP=b11, Domain=b1111, C=b0, B=b0
    Xil_SetTlbAttributes(0xFFFF0000,0x14de2);  

    while(1){
        while(COMM_VAL == 0){
        };

        print("Hello World - ARM1\n\r");
        sleep(1);
        COMM_VAL = 0;
    }

    cleanup_platform();
    return 0;
}

函數(shù) init_platform() 需要保留在兩個應(yīng)用程序中,它負責為每個應(yīng)用程序初始化 UART 控制臺。

構(gòu)建包含 ARM0 和 ARM1 應(yīng)用程序的項目系統(tǒng),然后從 Xilinx 菜單選項中選擇“Create Boot Image”。

默認情況下,引導(dǎo)映像寫入器將具有 ARM0 的比特流、FSBL 和 ELF 文件的路徑。要為 ARM1 添加 ELF 文件,請單擊“編輯”并瀏覽到 ARM1 的 ELF 文件的位置。將類型保留為數(shù)據(jù)文件,然后單擊“確定”。

在“創(chuàng)建引導(dǎo)映像”窗口中,單擊“創(chuàng)建映像”。將彈出一個警告,指出以前的版本即將被覆蓋。還行吧。

pYYBAGOYRvWAME7mAACjWScIvVg588.png
啟動映像只需要添加 ARM1 的 ELF 文件即可。
?

最后,我將 Zynqberry 插入我的計算機并選擇 Xilinx 菜單選項下的“Program Flash”選項。Vitis 填寫了 FSBL 的位置,并為我填寫了啟動映像。

poYBAGOYRvyACR4nAAL1xBiQCVw048.png
在成功將啟動映像刷入 Zynqberry 后,我打開 Putty 以查看串行輸出。
?

正如我的意圖,兩個內(nèi)核輪詢共享內(nèi)存值以交替它們的串行輸出:

pYYBAGOYRv-AHM-CAAATx_164kw559.png
?

希望這個項目能夠幫助您為充分利用您的 Zynq 設(shè)計提供一個起點!


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

評論

查看更多

下載排行

本周

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

本月

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

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學(xué)會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 蒲江县| 青岛市| 三台县| 油尖旺区| 道真| 蚌埠市| 新安县| 临猗县| 郎溪县| 苍南县| 保靖县| 凤凰县| 仙居县| 永新县| 乐东| 唐河县| 商城县| 商河县| 广灵县| 吴桥县| 山东| 合山市| 胶南市| 泽普县| 犍为县| 九江县| 万荣县| 海丰县| 漳平市| 唐山市| 美姑县| 铜鼓县| 楚雄市| 内黄县| 曲松县| 龙门县| 松江区| 萨嘎县| 囊谦县| 淄博市| 夏河县|