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

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

3天內(nèi)不再提示

Zynq上的非對(duì)稱多核處理器

OpenFPGA ? 來源:OpenFPGA ? 作者:OpenFPGA ? 2022-06-16 10:18 ? 次閱讀

ZYNQ從放棄到入門(十二)- AMP — Zynq 上的非對(duì)稱多核處理器

之前介紹的所有文章我們都只使用了一個(gè) ARM Cortex-A9 處理器內(nèi)核(Core 0)。然而,PS 端包含兩個(gè)處理器內(nèi)核,對(duì)于許多應(yīng)用程序,我們希望同時(shí)使用兩個(gè) Zynq 內(nèi)核以獲得最佳性能。將兩個(gè) Zynq 處理器內(nèi)核用于不同的任務(wù)可以稱為非對(duì)稱多核處理 (AMP,Asymmetric Multiprocessing),并且可以涉及以下任意組合:

Core 0 和 Core 1 上運(yùn)行不同操作系統(tǒng)

Core 0 上運(yùn)行操作系統(tǒng),Core 1 上運(yùn)行裸機(jī)代碼(反之亦然)

兩個(gè)Core上的裸機(jī)代碼執(zhí)行不同的程序

AMP介紹

有兩種多核處理方式:對(duì)稱和非對(duì)稱。在我們定義兩者之間的區(qū)別之前,我們首先必須定義什么是多核處理:“多核處理是在系統(tǒng)中使用多個(gè)處理器。這可以允許同時(shí)執(zhí)行多條指令。但是,它不一定非要如此?!?對(duì)稱和非對(duì)稱多核處理之間的區(qū)別是

對(duì)稱多核處理通過將處理進(jìn)程分布在多個(gè)微處理器內(nèi)核上來同時(shí)運(yùn)行多個(gè)軟件任務(wù)

非對(duì)稱多處理使用專門的處理器來運(yùn)行特定的應(yīng)用程序或在相同的處理器上運(yùn)行專門的應(yīng)用程序

在接下來的幾篇博客中,我們將介紹 Zynq SoC 上的 AMP。首先,我們研究兩個(gè)裸機(jī)應(yīng)用程序,每個(gè)應(yīng)用程序都運(yùn)行在不同的core上。在 Zynq SoC 上運(yùn)行 AMP 時(shí),必須考慮 Zynq 處理器core混合了私有資源和共享資源。兩個(gè)處理器都有私有的 L1 指令和數(shù)據(jù)緩存、定時(shí)器看門狗以及共享的中斷控制器(共享和私有中斷)。然而,Zynq 上的中斷并不那么簡單,因?yàn)?PS 中的每個(gè)內(nèi)核都能夠使用軟件中斷來中斷自己、另一個(gè)處理器或兩個(gè)處理器,這些中斷是通過中斷控制器來分發(fā)的。

Zynq SoC 還擁有大量共享資源,常見示例包括 I/O 外設(shè)、片上存儲(chǔ)器、中斷控制器分配器、L2 高速緩存和位于 DDR 存儲(chǔ)器內(nèi)的系統(tǒng)存儲(chǔ)器。下圖顯示了其中一些資源。

cf39db9c-ed0c-11ec-ba43-dac502259ad0.png

我們將從 DDR 內(nèi)存運(yùn)行兩個(gè)處理器內(nèi)核,因此我們必須非常小心地對(duì)每個(gè)處理器使用的地址區(qū)域進(jìn)行分段。地址是通過每個(gè)應(yīng)用程序的鏈接描述文件確定的。如果我們對(duì)此處理不當(dāng),在不同內(nèi)核上運(yùn)行的應(yīng)用程序可能會(huì)干擾彼此的操作。

我們還必須修改 SDK 自動(dòng)生成的文件以使系統(tǒng)啟動(dòng)并運(yùn)行。第一步將根據(jù)XAPP1079(http://www.xilinx.com/support/documentation/application_notes/xapp1079-amp-bare-metal-cortex-a9.pdf)修改第一階段引導(dǎo)加載程序,它將檢查裸機(jī)/裸機(jī) AMP。

我最初打算創(chuàng)建一個(gè)非常簡單的系統(tǒng),一旦它啟動(dòng)并運(yùn)行,我們就可以對(duì)其進(jìn)行擴(kuò)展。第一個(gè)應(yīng)用程序?qū)⒆?Zynq SoC 的處理器 Core 0 通過 RS232 與用戶通信,而 Core 1 在驅(qū)動(dòng)連接到 ZYNQ IO 的 LEDS 。這兩個(gè)應(yīng)用程序無需交互即可同時(shí)運(yùn)行。

啟動(dòng)和運(yùn)行AMP

雖然啟動(dòng)和運(yùn)行 AMP 需要幾個(gè)步驟,但它實(shí)際上是非常簡單直接的過程,當(dāng)然沒什么好害怕的。

讓 AMP 在 Zynq SoC 上運(yùn)行的關(guān)鍵方面是引導(dǎo)加載程序,它在將第一個(gè)可執(zhí)行文件加載到內(nèi)存后查找第二個(gè)可執(zhí)行文件。為了簡單化,我將使用賽靈思應(yīng)用筆記 XAPP1079 中提供的修改后的 FSBL 和修改后的獨(dú)立操作系統(tǒng)。(源文件可在此處獲得http://www.xilinx.com/support/documentation/application_notes/xapp1079-amp-bare-metal-cortex-a9.pdf)

下載 zip 文件后,第一步是將壓縮文件解壓縮到所需的工作目錄中,并將名為 SRC 的文件夾重命名為 design。這些文件包含修改后的 FSBL 和修改后的獨(dú)立操作系統(tǒng)。我們需要 SDK 了解這些文件,因此下一步是更新 SDK 存儲(chǔ)庫(repository)以使 SDK 了解它們的存在。在 SDK的Xilinx 工具菜單下中,選擇存儲(chǔ)庫,然后選擇新建,導(dǎo)航到目錄位置 <工作目錄>app1079designworksdk_repo,如下所示:

cf550796-ed0c-11ec-ba43-dac502259ad0.png

在存儲(chǔ)庫中添加后,下一階段是生成以下內(nèi)容:

AMP 第一階段引導(dǎo)加載程序

core 0 應(yīng)用程序

core 1 應(yīng)用程序

我們將為其中的每一個(gè)core生成一個(gè) BSP(板級(jí)支持包)。

首先要做的是創(chuàng)建一個(gè)新的 FSBL。選擇file -> new application -> project,這使我們能夠創(chuàng)建一個(gè)支持 AMP 的 FSBL 項(xiàng)目。這與我們之前所做的相同,但是我們將選擇 Zynq FSBL for AMP 模板來代替 Zynq FSBL 模板。

cf7a38f4-ed0c-11ec-ba43-dac502259ad0.png

在創(chuàng)建 AMP FSBL 之后,我們需要為第一個(gè)內(nèi)核創(chuàng)建應(yīng)用程序。這又很簡單,我們以前做過很多次了。確保選擇 Core 0 和獨(dú)立操作系統(tǒng)并允許它創(chuàng)建自己的 BSP。

cf9e2bf6-ed0c-11ec-ba43-dac502259ad0.png

一旦我們創(chuàng)建了這個(gè)應(yīng)用程序,我們需要在 DDR 內(nèi)存中正確定義應(yīng)用程序?qū)?zhí)行的位置。為此,我們?nèi)缦戮庉嬫溄用枋鑫募燥@示 DDR 基地址和大小。這個(gè)很重要,如果我們沒有對(duì) Core 0 和 Core 1 應(yīng)用程序的 DDR 內(nèi)存進(jìn)行正確分段,我們就有可能無意中損壞另一個(gè)應(yīng)用程序。

cfbaba14-ed0c-11ec-ba43-dac502259ad0.png

我們現(xiàn)在可以編寫我們希望在core 0 上執(zhí)行的應(yīng)用程序。我們需要將以下代碼部分包含在應(yīng)用中。

cfd6b138-ed0c-11ec-ba43-dac502259ad0.png

此代碼禁用 Zynq SoC 片上存儲(chǔ)器上的緩存,并將 Core 1 程序的起始地址寫入 Core 1 將在 Core 0 執(zhí)行 Set Event (SEV) 命令后訪問的地址。SEV 命令使 Core 1 開始執(zhí)行其程序。

下一步是為 Core1 創(chuàng)建 BSP。我們想使用修改后的獨(dú)立操作系統(tǒng) (standalone_amp),它可以防止重新初始化 PS Snoop 控制單元 (SCU)。因此,我們不能像為 Core 0 那樣創(chuàng)建項(xiàng)目時(shí)允許自動(dòng)生成 BSP。請(qǐng)務(wù)必在 CPU 選擇選項(xiàng)中選擇 Core 1。

cfed6af4-ed0c-11ec-ba43-dac502259ad0.png

現(xiàn)在我們已經(jīng)為 Core 1 創(chuàng)建了 BSP,我們需要修改 BSP 的設(shè)置,然后才能繼續(xù)創(chuàng)建要在 Core 1 上運(yùn)行的應(yīng)用程序。這非常簡單,需要添加一個(gè)額外的編譯器標(biāo)志-DUSE_AMP=1 到 BSP 的驅(qū)動(dòng)程序部分的配置:

d017c150-ed0c-11ec-ba43-dac502259ad0.png

完成后,我們可以自由地為 Core 1 創(chuàng)建應(yīng)用程序。確保選擇 Core 1 作為處理器并使用我們剛剛創(chuàng)建的 BSP:

d02c0c14-ed0c-11ec-ba43-dac502259ad0.png

同樣,在創(chuàng)建新應(yīng)用程序后,我們需要再次在 DDR 內(nèi)存中正確定義內(nèi)存位置,Core 1 程序?qū)脑撐恢脠?zhí)行。這是通過編輯 Core 1 應(yīng)用程序的鏈接器腳本來實(shí)現(xiàn)的:

d04a1114-ed0c-11ec-ba43-dac502259ad0.png

與此應(yīng)用程序中的第一個(gè)內(nèi)核一樣,我們還必須禁用片上內(nèi)存上的緩存,因?yàn)槲覀儗⒃谝院蟮牟┛椭惺褂么藘?nèi)存在兩個(gè)處理器之間進(jìn)行通信. 一旦我們完成了我們的應(yīng)用程序并構(gòu)建了項(xiàng)目,我們現(xiàn)在應(yīng)該擁有以下內(nèi)容:

AMP FSBL ELF

core 0 ELF

core 1 ELF

定義設(shè)備配置的位文件。

我們現(xiàn)在需要一個(gè) .bin 文件來使 Zynq SoC 從選擇的配置存儲(chǔ)器啟動(dòng)。我們還需要一個(gè) bif 文件,它定義了用于創(chuàng)建 bin 的文件,并且我們需要定義文件的順序。

我們將使用 XAPP 1079 的 directorydesignworkootgen 下提供的 bat 文件,而不是使用在 SDK 中創(chuàng)建的 Zynq 啟動(dòng)映像。該目錄包含一個(gè) bif 文件和一個(gè) cpu1_bootvec.bin,該文件用作修改后的 FSBL 的一部分,以阻止它尋找更多要加載的應(yīng)用程序。

為了生成bin文件,我們將生成的三個(gè)ELF文件復(fù)制到bootgen目錄并編輯BIF文件,確保bif文件中的elf名稱正確。

d060783c-ed0c-11ec-ba43-dac502259ad0.png

我們現(xiàn)在可以打開 ISE/Vivado 命令提示符,導(dǎo)航到 bootgen 目錄,然后運(yùn)行 createboot.bat,將創(chuàng)建 boot.bin 文件:

d0737c98-ed0c-11ec-ba43-dac502259ad0.png

然后可以將該文件下載到 Zynq SoC 上的flash中。引導(dǎo)設(shè)備運(yùn)行兩個(gè)內(nèi)核啟動(dòng)并執(zhí)行各自的程序。

下一節(jié)我們?cè)诹牧囊恍┘?xì)節(jié)。

上一節(jié)文章創(chuàng)建了兩個(gè)core上啟動(dòng)并運(yùn)行簡單的軟件。它的簡單性使我能夠展示如何讓兩個(gè) Zynq SoC 處理器內(nèi)核通過 OCM(片上存儲(chǔ)器)進(jìn)行通信。但是,兩個(gè)核上運(yùn)行的軟件目前正在做一些簡單的事情,因此我們有一個(gè)可以繼續(xù)前進(jìn)的基線。

Core 0 是主控并控制執(zhí)行 Core 1。它還使用 UART 向終端程序打印消息。

一旦由 Core 0 啟動(dòng),Core 1 就會(huì)初始化其私有資源并驅(qū)動(dòng)八個(gè) LED 。我們需要使用 Core 1 的私有定時(shí)器并通過 GIC 啟用中斷。

這些應(yīng)用程序沒有任何關(guān)聯(lián),也不共享資源。但是,實(shí)際的應(yīng)用程序希望能夠做到這一點(diǎn)。在 Core 0 上運(yùn)行的應(yīng)用程序非常簡單。它在 Core 1 上啟動(dòng)軟件,然后使用 UART 0 在循環(huán)中打印出一條簡單的消息:

d0bff8fc-ed0c-11ec-ba43-dac502259ad0.png

但是,我們計(jì)劃使用 Core 1 的中斷控制器,因此我們必須首先使用以下代碼配置 GIC(通用中斷控制器):

d0d9bda0-ed0c-11ec-ba43-dac502259ad0.png

Core 1 代碼必須稍微復(fù)雜一些,因?yàn)槲覀兪褂?Zynq SoC 的 PL(可編程邏輯)端的 GPIO 模塊來驅(qū)動(dòng) ZYNQ 上的 LED。與賽靈思的所有其他接口一樣,獨(dú)立操作系統(tǒng)為此通過#include提供了一組簡單的驅(qū)動(dòng)程序,“xgpio.h” 這個(gè)文件與我們之前用來驅(qū)動(dòng)連接到 Zynq SoC 的 PS(處理系統(tǒng))端的 MIO / EMIO GPIO 的 xgpio_ps.h 文件略有不同。然而,在本例中,我想展示如何在 Zynq SoC 的 PL 端使用 GPIO。為了確保我們可以看到 LED 的開關(guān),我們將使用 Core 1 的私有計(jì)時(shí)器,這與我們過去在核心 0 上使用私有計(jì)時(shí)器相同。

d0f47ac8-ed0c-11ec-ba43-dac502259ad0.png

在 Core 1 的程序開始執(zhí)行其主應(yīng)用程序之前,我們需要禁用片上存儲(chǔ)器 (OCM) 上的緩存,初始化 GPIO,初始化私有定時(shí)器,并配置中斷控制器,以便可以使用私有定時(shí)器的中斷來切換LED。我們現(xiàn)在可以開始編寫相當(dāng)簡單的中斷服務(wù)例程,在專用定時(shí)器結(jié)束并重新啟動(dòng)時(shí)切換 LED。這個(gè)過程將永遠(yuǎn)持續(xù)下去。

d13cb158-ed0c-11ec-ba43-dac502259ad0.png

以下是程序執(zhí)行的結(jié)果,正如 Core 0 向終端窗口輸出的報(bào)告:

d16a8f4c-ed0c-11ec-ba43-dac502259ad0.png

代碼地址

https://github.com/suisuisi/zynq_guide/blob/main/core_0_main_part50.c

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19044

    瀏覽量

    228501
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6617

    瀏覽量

    123037
  • Amp
    Amp
    +關(guān)注

    關(guān)注

    0

    文章

    79

    瀏覽量

    47103

原文標(biāo)題:ZYNQ從放棄到入門(十二)- AMP — Zynq 上的非對(duì)稱多核處理器

文章出處:【微信號(hào):Open_FPGA,微信公眾號(hào):OpenFPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    旋智多核處理器助力電機(jī)控制應(yīng)用

    電機(jī)控制應(yīng)用軟件通常需要實(shí)時(shí)處理,以確保精確控制和快速響應(yīng)。高性能、多核嵌入式處理器能夠?qū)崟r(shí)處理多項(xiàng)復(fù)雜計(jì)算,是保持電機(jī)控制系統(tǒng)穩(wěn)定性和準(zhǔn)確性的關(guān)鍵。
    的頭像 發(fā)表于 10-24 16:17 ?203次閱讀
    旋智<b class='flag-5'>多核</b>心<b class='flag-5'>處理器</b>助力電機(jī)控制應(yīng)用

    對(duì)稱多處理器的特點(diǎn)是什么

    的主要特點(diǎn)是處理器之間的對(duì)稱性,這意味著每個(gè)處理器都可以執(zhí)行任何任務(wù),并且它們?cè)?b class='flag-5'>處理能力是等價(jià)的。 1. SMP的定義和歷史
    的頭像 發(fā)表于 10-10 16:36 ?138次閱讀

    對(duì)稱多處理器系統(tǒng)中的進(jìn)程分配包括

    在現(xiàn)代計(jì)算機(jī)系統(tǒng)中,對(duì)稱多處理器(SMP)架構(gòu)已經(jīng)成為主流。這種架構(gòu)允許多個(gè)處理器共享相同的內(nèi)存地址空間和系統(tǒng)資源,從而提高了系統(tǒng)的處理能力和吞吐量。然而,為了充分利用SMP系統(tǒng)的性能,操作系統(tǒng)
    的頭像 發(fā)表于 10-10 16:34 ?131次閱讀

    對(duì)稱多處理器非對(duì)稱多處理器的區(qū)別

    (Symmetric Multi-Processing,簡稱SMP)和非對(duì)稱多處理器(Asymmetric Multi-Processing,簡稱AMP)。這兩種架構(gòu)在設(shè)計(jì)理念、資源管理、任務(wù)分配和性能優(yōu)化等方面存在顯著差異。 對(duì)稱多處理器(SMP) 定義
    的頭像 發(fā)表于 10-10 15:58 ?231次閱讀

    為Xilinx? Zynq?UltraScale?系列多處理器中的VCCINT_VCU軌供電

    電子發(fā)燒友網(wǎng)站提供《為Xilinx? Zynq?UltraScale?系列多處理器中的VCCINT_VCU軌供電.pdf》資料免費(fèi)下載
    發(fā)表于 09-25 10:54 ?0次下載
    為Xilinx? <b class='flag-5'>Zynq</b>?UltraScale?系列多<b class='flag-5'>處理器</b>中的VCCINT_VCU軌供電

    請(qǐng)問高頻放大器用非對(duì)稱電源供電會(huì)有什么影響?

    高頻放大器用非對(duì)稱電源供電會(huì)有什么影響?
    發(fā)表于 08-29 06:22

    OPA828運(yùn)放非對(duì)稱電源供電有什么好處嗎?

    看到一些精密儀器的電路運(yùn)放好像特意設(shè)計(jì)成非對(duì)稱電源供電,比如+14v、-17v這種,請(qǐng)問運(yùn)放非對(duì)稱電源供電有什么好處嗎?信號(hào)擺幅不超過正負(fù)7v
    發(fā)表于 08-01 06:48

    【本周六-上海】SMP對(duì)稱多處理 線下培訓(xùn)

    對(duì)稱多處理(SymmetricMultiprocessing,SMP)是一種常見的并行計(jì)算架構(gòu),其中多個(gè)處理器核心共享相同的內(nèi)存和總線系統(tǒng)。這種架構(gòu)允許多個(gè)處理器核心同時(shí)運(yùn)行獨(dú)立的指令流,從而
    的頭像 發(fā)表于 06-13 08:35 ?232次閱讀
    【本周六-上?!縎MP<b class='flag-5'>對(duì)稱多處理</b> 線下培訓(xùn)

    線下培訓(xùn) | 瑞薩電子基于RZ/G2L的OpenAMP混合部署實(shí)戰(zhàn)培訓(xùn)

    OpenAMP一個(gè)提供用于處理非對(duì)稱多處理(AMP)系統(tǒng)的軟件組件,可以簡化異構(gòu)多核處理器系統(tǒng)間的高效通信,提供跨平臺(tái)、可擴(kuò)展且靈活的解決方案。通過OpenAMP,開發(fā)人員可以輕松地在
    的頭像 發(fā)表于 05-17 08:01 ?468次閱讀
    線下培訓(xùn) | 瑞薩電子基于RZ/G2L的OpenAMP混合部署實(shí)戰(zhàn)培訓(xùn)

    單相降壓轉(zhuǎn)換非對(duì)稱BG評(píng)估板數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《單相降壓轉(zhuǎn)換非對(duì)稱BG評(píng)估板數(shù)據(jù)手冊(cè).rar》資料免費(fèi)下載
    發(fā)表于 04-14 17:10 ?0次下載
    單相降壓轉(zhuǎn)換<b class='flag-5'>器</b>雙<b class='flag-5'>非對(duì)稱</b>BG評(píng)估板數(shù)據(jù)手冊(cè)

    單相降壓轉(zhuǎn)換非對(duì)稱AG評(píng)估板數(shù)據(jù)手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《單相降壓轉(zhuǎn)換非對(duì)稱AG評(píng)估板數(shù)據(jù)手冊(cè).rar》資料免費(fèi)下載
    發(fā)表于 04-14 17:02 ?0次下載
    單相降壓轉(zhuǎn)換<b class='flag-5'>器</b>雙<b class='flag-5'>非對(duì)稱</b>AG評(píng)估板數(shù)據(jù)手冊(cè)

    為什么三相短路是對(duì)稱故障?單相短路是非對(duì)稱故障呢?

    為什么三相短路是對(duì)稱故障?單相短路是非對(duì)稱故障呢? 三相短路是對(duì)稱故障,而單相短路是非對(duì)稱故障,其根本原因在于電網(wǎng)中的相量關(guān)系和電壓分布。 首先,對(duì)
    的頭像 發(fā)表于 02-18 11:41 ?3148次閱讀

    “國產(chǎn)雙系統(tǒng)”出爐,RK3568J非對(duì)稱AMP:Linux+RTOS/裸機(jī)

    架構(gòu)?!?b class='flag-5'>非對(duì)稱AMP”雙系統(tǒng)是指多個(gè)核心相對(duì)獨(dú)立運(yùn)行不同的操作系統(tǒng)或裸機(jī)應(yīng)用程序,如Linux + RTOS/裸機(jī),但需一個(gè)主核心來控制整個(gè)系統(tǒng)以及其它從核心。每個(gè)處理器核心相互隔離,擁有屬于自己的內(nèi)存
    發(fā)表于 12-01 09:35

    為什么有多核處理器?從多核到眾核處理器

    其實(shí)“多核”這個(gè)詞已經(jīng)流行很多年了,世界上第一款商用的非嵌入式多核處理器是2002年IBM推出的POWER4。
    的頭像 發(fā)表于 11-16 16:25 ?1506次閱讀
    為什么有<b class='flag-5'>多核</b><b class='flag-5'>處理器</b>?從<b class='flag-5'>多核</b>到眾核<b class='flag-5'>處理器</b>

    ZYNQ對(duì)比其他處理器有什么優(yōu)勢(shì)?

    ZYNQ對(duì)比其他處理器有什么優(yōu)勢(shì)
    發(fā)表于 11-07 07:01