chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

ZYNQ多核處理器硬件上的劃分

lhl545545 ? 來源:ZYNQ ? 作者:ZYNQ ? 2022-09-19 09:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.簡介

zynq系列開發(fā)板有兩個板載Cortex-A9處理器,兩個ARM可以協(xié)同處理數(shù)據(jù)。

多核處理器硬件上的劃分

??1.同構(gòu)多核:系統(tǒng)中的多個處理器在結(jié)構(gòu)上是相同的;

????????優(yōu)點是硬件和軟件設(shè)計上較為簡單,通用性高。

??2.異構(gòu)多核:系統(tǒng)中的處理器結(jié)構(gòu)上是不同的;

????????優(yōu)點是在某些特定場合,專用的硬件加速核可以提高性能。

ZYNQ中的兩個Cortex-A9處理器+可編程邏輯器件FPGA組成了異構(gòu)多核處理器。

多核處理器從軟件運行方式上劃分

??AMP(Asymmetric Muti-processing):非對稱多處理

????多個內(nèi)核相對獨立的運行不同的任務,每個內(nèi)核相互隔離,可以運行不同的操??作系統(tǒng)或者裸機程序。

??SMP(Symmetric Muti-processing):

????多個處理器運行一個操作系統(tǒng),這個操作系統(tǒng)同等的管理多個內(nèi)核。

??BMP(Bound Muti-processing):混合多模式

????BMP與SMP類似,但是開發(fā)者可以指定將某個任務僅在某個指定內(nèi)核上執(zhí)行。

AMP模式下要注意不要兩個CPU一起訪問同一個地址或者共享外設(shè)。

2.CPU之間通訊原理

2.1 通訊步驟

1.系統(tǒng)初始化

2.啟動CPU1

3.和CPU1進行通訊

4.共享CPU外設(shè)

2.2 CPU資源

??CPU資源分為私有資源和公共資源。私有資源是每個CPU都有的資源,只能被各自的CPU訪問,訪問時無需注意沖突。公共資源為CPU之間共享的資源,訪問時要注意訪問沖突。

??私有資源: L1Cache、PPI(Private peripheral interrupts)、MMU(Memory management unit)。

??公共資源: L2Cache、DDR存儲器、OCM(on chip memory)、ICD(Interrupt control distributor)、全局時鐘和其他外等。

??OCM用來和CPU之間的通訊的,與DDR相比,OCM具有更高的性能和更低的延遲。用于小數(shù)據(jù)量(256KB一下)用OCM更好。

??避免同時訪問的方法

??DDR:CPU0只能訪問0x00100000至0x001FFFFF,CPU1只能訪問0x00200000到0x002FFFFF(可人為更改)

??L2Cache:CPU0使用,CPU1不使用。

??ICD:中斷來自PL,連接到CPU1。

??Timer(定時器):只有CPU1使用。

??OCM:OCM的某一地址進行標志。當標志為0時這個地址是某個CPU私有的;為1時,這個地址是另一個CPU私有的?;蛘哕浖a(chǎn)生中斷的方式。

2.3 軟件設(shè)計

軟件設(shè)計分為三個階段

1.First stage boot loader(FSBL):第一啟動階段

2.Bare-metal application for CPU0:裸機應用程序

3.Bare-metal application for CPU1:裸機應用程序

FSBL

??一直運行在CPU上面,是開發(fā)板上電之后啟動先啟動Boot rom,后啟動FSBL,負責配置PL然后拷貝兩個處理器的應用程序(ELF)加載到DDR中,然后開始運行第一個應用程序。

Bare-metal application Code

??兩個CPU運行各自的裸機的程序,CPU負責初始化共享外設(shè),并且負責啟動CPU1.

CPU0 Application

??內(nèi)存的起始地址為0x00100000。這個起始地址可以在鏈接腳本進行修改的。

??CPU0的配置步驟:

??1.配置MMU來禁止cache緩存功能0xFFFF0000至0xFFFFFFFF來保證兩個CPU訪問OCM的一致性。地址映射不可修改。

??2.初始化ICD

??3.啟動CPU1

??4.通過串口打印信息

??5.設(shè)置OCM的地址作為信號

??6.等待地址里面的信號量被清除。

??Boot rom代碼執(zhí)行后,CPU1也會在OCM的0xFFFFFF00地址上執(zhí)行一段代碼。功能是檢查地址0xFFFFFFF0的值是否為1來等待事件到來。

??CPU0啟動CPU1是通過向地址0x00200000寫入地址0xFFFFFFF0然后CPU0運行Set Event(SEV)命令啟動CPU1。CPU1會讀取0xFFFFFFF0里面的值0x00200000。然后跳轉(zhuǎn)到該地址執(zhí)行程序。

??CPU1的配置步驟

3 如何避免多個CPU同時訪問OCM

??CPU0向OCM寫入一個數(shù)據(jù)之后,給CPU1產(chǎn)生軟件中斷。讓CPU1知道CPU0已經(jīng)不再操作該地址。此時CPU1讀取數(shù)據(jù),讀取完畢后產(chǎn)生一個中斷通知CPU0。

??軟件中斷(SGIs):中斷來自CPU內(nèi)部,每個CPU可以中斷自己或者另外的CPU或者一起中斷,每個CPU有16個中斷號,編號為0到15。向寄存器(ICDSGIR)寫入中斷號并且指定CPU。目標的CPU即可產(chǎn)生中斷。

??OCM:PS的片上存儲器,包括256KB的RAM和128KB的ROM(BootROM)。地址范圍為0x00000000到0002FFFF的三個64KB加上0xFFFF_0000到0xFFFF_FFFF共256KB。

4 程序設(shè)計

4.1 程序任務

??CPU0接收串口數(shù)據(jù)并寫入OCM中,然后利用軟件中斷觸發(fā)CPU1;CPU1接收到中斷后,根據(jù)從OCM中讀出的數(shù)據(jù)控制呼吸燈的頻率,并在控制結(jié)束后觸發(fā)CPU0的中斷,實現(xiàn)雙核CPU通信的功能。

4.2 系統(tǒng)框圖

beff3422-37b0-11ed-ba43-dac502259ad0.png

4.3 軟件操作

bf37dcdc-37b0-11ed-ba43-dac502259ad0.png

4.4 代碼

4.4.1 CPU0_UART

//****************************************Copyright (c)***********************************////原子哥在線教學平臺:www.yuanzige.com//技術(shù)支持:www.openedv.com//淘寶店鋪:http://openedv.taobao.com//關(guān)注微信公眾平臺微信號:"正點原子",免費獲取ZYNQ & FPGA & STM32 & LINUX資料。//版權(quán)所有,盜版必究。//Copyright(C) 正點原子 2018-2028//All rights reserved//----------------------------------------------------------------------------------------// File name:           cpu0_uart// Last modified Date:  2019/6/8 1736// Last Version:        V1.0// Descriptions:        CPU0應用程序//----------------------------------------------------------------------------------------// Created by:          正點原子// Created date:        2019/6/8 1736// Version:             V1.0// Descriptions:        The original version////----------------------------------------------------------------------------------------//****************************************************************************************//

#include "xparameters.h"#include "xscugic.h"#include "xil_printf.h"#include "xil_exception.h"#include "xil_mmu.h"#include "stdio.h"

//宏定義#define INTC_DEVICE_ID       XPAR_SCUGIC_SINGLE_DEVICE_ID //中斷ID#define SHARE_BASE           0xffff0000                   //共享OCM首地址#define CPU1_COPY_ADDR       0xfffffff0                   //存放CPU1應用起始地址的地址#define CPU1_START_ADDR      0x10000000                   //CPU1應用起始地址

#define CPU1_ID              XSCUGIC_SPI_CPU1_MASK        //CPU1 ID#define SOFT_INTR_ID_TO_CPU0 0                            //軟件中斷號 0 ,范圍:0~15#define SOFT_INTR_ID_TO_CPU1 1                            //軟件中斷號 1 ,范圍:0~15

//"SEV"指令喚醒CPU1并跳轉(zhuǎn)至相應的程序#define sev()                __asm__("sev")               //C語言內(nèi)嵌匯編寫法 send event指令

//函數(shù)聲明void start_cpu1();void cpu0_intr_init(XScuGic *intc_ptr);void soft_intr_handler(void *CallbackRef);

//全局變量XScuGic Intc;                    //中斷控制器驅(qū)動程序?qū)嵗齣nt rec_freq_flag = 0;           //接收到呼吸燈頻率設(shè)置的標志int freq_gear;                   //頻率檔位

//CPU0 main函數(shù)int main(){  //S=b1 TEX=b100 AP=b11, Domain=b1111, C=b0, B=b0  Xil_SetTlbAttributes(SHARE_BASE,0x14de2);    //禁用OCM的Cache屬性

  //S=b1 TEX=b100 AP=b11, Domain=b1111, C=b0, B=b0  Xil_SetTlbAttributes(CPU1_COPY_ADDR,0x14de2);//禁用0xfffffff0的Cache屬性

  //啟動CPU1  start_cpu1();  //CPU0中斷初始化  cpu0_intr_init(&Intc);  while(1){    if(rec_freq_flag == 0){      xil_printf("This is CPU0,Please input the numbers 1~5 to change "          "breath led frequency
");      scanf("%d",&freq_gear);      if(freq_gear >= 1 && freq_gear <=5){        xil_printf("You input number is %d
",freq_gear);        //向共享的地址中寫入輸入的數(shù)據(jù)        Xil_Out8(SHARE_BASE,freq_gear);        //給CPU1觸發(fā)中斷        XScuGic_SoftwareIntr(&Intc,SOFT_INTR_ID_TO_CPU1,CPU1_ID);        rec_freq_flag = 1;      }      else{        xil_printf("Error,The number range is 1~5
");        xil_printf("
");      }    }  }  return 0 ;}

//啟動CPU1,用于固化程序void start_cpu1(){  //向 CPU1_COPY_ADDR(0Xffffffff0)地址寫入 CPU1 的訪問內(nèi)存基地址  Xil_Out32(CPU1_COPY_ADDR, CPU1_START_ADDR);  dmb();  //等待內(nèi)存寫入完成(同步)  sev();  //通過"SEV"指令喚醒CPU1并跳轉(zhuǎn)至相應的程序}

//CPU0中斷初始化void cpu0_intr_init(XScuGic *intc_ptr){  //初始化中斷控制器  XScuGic_Config *intc_cfg_ptr;  intc_cfg_ptr = XScuGic_LookupConfig(INTC_DEVICE_ID);    XScuGic_CfgInitialize(intc_ptr, intc_cfg_ptr,        intc_cfg_ptr->CpuBaseAddress);    //設(shè)置并打開中斷異常處理功能    Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,        (Xil_ExceptionHandler)XScuGic_InterruptHandler, intc_ptr);    Xil_ExceptionEnable();

    XScuGic_Connect(intc_ptr, SOFT_INTR_ID_TO_CPU0,          (Xil_ExceptionHandler)soft_intr_handler, (void *)intc_ptr);

    XScuGic_Enable(intc_ptr, SOFT_INTR_ID_TO_CPU0); //CPU0軟件中斷}

//軟件中斷函數(shù)void soft_intr_handler(void *CallbackRef){  xil_printf("This is CPU0,Soft Interrupt from CPU1
");  xil_printf("
");  rec_freq_flag = 0;}

4.4.2 CPU1_LED

//****************************************Copyright (c)***********************************////原子哥在線教學平臺:www.yuanzige.com//技術(shù)支持:www.openedv.com//淘寶店鋪:http://openedv.taobao.com//關(guān)注微信公眾平臺微信號:"正點原子",免費獲取ZYNQ & FPGA & STM32 & LINUX資料。//版權(quán)所有,盜版必究。//Copyright(C) 正點原子 2018-2028//All rights reserved//----------------------------------------------------------------------------------------// File name:           cpu1_led// Last modified Date:  2019/6/8 1736// Last Version:        V1.0// Descriptions:        CPU1應用程序//----------------------------------------------------------------------------------------// Created by:          正點原子// Created date:        2019/6/8 1736// Version:             V1.0// Descriptions:        The original version////----------------------------------------------------------------------------------------//****************************************************************************************//

#include "xparameters.h"#include "xscugic.h"#include "xil_printf.h"#include "xil_exception.h"#include "xil_mmu.h"#include "stdio.h"#include "breath_led_ip.h"

//宏定義#define INTC_DEVICE_ID       XPAR_SCUGIC_SINGLE_DEVICE_ID //中斷ID#define SHARE_BASE         0xffff0000                   //共享OCM首地址

#define CPU0_ID              XSCUGIC_SPI_CPU0_MASK        //CPU0 ID#define SOFT_INTR_ID_TO_CPU0 0                            //軟件中斷號 0 ,范圍:0~15#define SOFT_INTR_ID_TO_CPU1 1                            //軟件中斷號 1 ,范圍:0~15

#define  LED_IP_BASEADDR     XPAR_BREATH_LED_IP_0_S0_AXI_BASEADDR //LED IP基地址#define  LED_IP_REG0         BREATH_LED_IP_S0_AXI_SLV_REG0_OFFSET //LED IP寄存器地址0#define  LED_IP_REG1         BREATH_LED_IP_S0_AXI_SLV_REG1_OFFSET //LED IP寄存器地址1

//函數(shù)聲明void cpu1_intr_init(XScuGic *intc_ptr);void soft_intr_handler(void *CallbackRef);

//全局變量XScuGic Intc;               //中斷控制器驅(qū)動程序?qū)嵗齣nt soft_intr_flag = 0;     //軟件中斷的標志int freq_gear;              //頻率檔位

//CPU1 main函數(shù)int main(){  int freq_step = 0;  //S=b1 TEX=b100 AP=b11, Domain=b1111, C=b0, B=b0  Xil_SetTlbAttributes(SHARE_BASE,0x14de2);    //禁用OCM的Cache屬性

  //CPU1中斷初始化  cpu1_intr_init(&Intc);  //打開呼吸燈  BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR, LED_IP_REG0, 1);  while(1){    if(soft_intr_flag){      freq_gear = Xil_In8(SHARE_BASE);     //從共享OCM中讀出數(shù)據(jù)      xil_printf("CUP1 Received data is %d
",freq_gear) ;      switch(freq_gear){        case 1 : freq_step = 20;break;        case 2 : freq_step = 50;break;        case 3 : freq_step = 100;break;        case 4 : freq_step = 200;break;        case 5 : freq_step = 500;break;        default : freq_step = 50;break;      }      //設(shè)置呼吸燈頻率,最高位為1,設(shè)置有效      BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,(0x80000000|freq_step));      //給給CPU0觸發(fā)中斷      XScuGic_SoftwareIntr(&Intc,SOFT_INTR_ID_TO_CPU0,CPU0_ID);      soft_intr_flag = 0;    }  }  return 0 ;}

//CPU1中斷初始化void cpu1_intr_init(XScuGic *intc_ptr){  //初始化中斷控制器  XScuGic_Config *intc_cfg_ptr;  intc_cfg_ptr = XScuGic_LookupConfig(INTC_DEVICE_ID);    XScuGic_CfgInitialize(intc_ptr, intc_cfg_ptr,        intc_cfg_ptr->CpuBaseAddress);    //設(shè)置并打開中斷異常處理功能    Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT,        (Xil_ExceptionHandler)XScuGic_InterruptHandler, intc_ptr);    Xil_ExceptionEnable();

    XScuGic_Connect(intc_ptr, SOFT_INTR_ID_TO_CPU1,          (Xil_ExceptionHandler)soft_intr_handler, (void *)intc_ptr);

    XScuGic_Enable(intc_ptr, SOFT_INTR_ID_TO_CPU1); //CPU1軟件中斷}

//軟件中斷函數(shù)void soft_intr_handler(void *CallbackRef){  xil_printf("This is CUP1,Soft Interrupt from CPU0
") ;  soft_intr_flag = 1;}
審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(guān)注

    關(guān)注

    68

    文章

    19896

    瀏覽量

    235281
  • 硬件
    +關(guān)注

    關(guān)注

    11

    文章

    3484

    瀏覽量

    67508
  • Zynq
    +關(guān)注

    關(guān)注

    10

    文章

    615

    瀏覽量

    48254

原文標題:ZYNQ之雙核通訊原理以及程序設(shè)計

文章出處:【微信號:ZYNQ,微信公眾號:ZYNQ】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    嵌入式多核處理器硬件結(jié)構(gòu)分析與對排序算法進行并行化優(yōu)化

    常常在嵌入式領(lǐng)域使用,常見的是通用嵌入式處理器+DSP核。本文探究的嵌入式多核處理器采用同構(gòu)結(jié)構(gòu),實現(xiàn)同一段代碼在不同處理器的并行執(zhí)行。
    的頭像 發(fā)表于 10-17 07:55 ?4296次閱讀

    調(diào)節(jié)多核處理器硬件適應軟件設(shè)計方法

    調(diào)節(jié)多核處理器硬件適應軟件設(shè)計方法 典型的嵌入式系統(tǒng)設(shè)計人員在硬件平臺上進行編程,他們最關(guān)注的一點就是硬件平臺的穩(wěn)定性。如果
    發(fā)表于 09-25 17:17

    數(shù)字信號處理器重新采納多核架構(gòu)

    中的多核處理器設(shè)計。這些處理器的目標應用可以被很好地劃分為適合DSP的信號處理任務和適合RISC CPU的控制任務,從而使得
    發(fā)表于 04-09 23:14

    多核處理器設(shè)計九大要素

    商用CPU的“未來”高性能處理器結(jié)構(gòu)。  雖然多核能利用集成度提高帶來的諸多好處,讓芯片的性能成倍地增加,但很明顯的是原來系統(tǒng)級的一些問題便引入到了處理器內(nèi)部。  1 核結(jié)構(gòu)研究: 同構(gòu)還是異構(gòu)
    發(fā)表于 04-13 09:48

    多核處理器的優(yōu)點

    處理器。通過在兩個執(zhí)行內(nèi)核之間劃分任務,多核處理器可在特定的時鐘周期內(nèi)執(zhí)行更多任務。 多核技術(shù)能夠使服務
    發(fā)表于 06-20 06:47

    典型的支持多核處理器的RTOS功能解析

    1、基于同步原語擴展的實時操作系統(tǒng) 在多核處理器的每一個處理器都運行一個完全相同的RTOS,然后提供擴展的組件庫,這種組件庫提供相應的同步原語以支持
    發(fā)表于 06-29 08:30

    集成電路多核處理器虛擬化技術(shù)

    多核處理器以其高性能、低功耗、設(shè)計周期短等諸多優(yōu)勢成為未來高性能處理器的發(fā)展趨勢。由于應用對計算能力的需求是無限的,隨著芯片晶體管數(shù)目的進一步增多,
    發(fā)表于 05-30 10:06 ?52次下載
    集成電路<b class='flag-5'>多核</b><b class='flag-5'>處理器</b>虛擬化技術(shù)

    多核處理器存儲系統(tǒng)研究

    針對 多核處理器 計算能力和訪存速度間差異不斷增大對多核系統(tǒng)性能提升的制約問題,分析幾款典型多核處理器存儲系統(tǒng)的設(shè)計特點,探討
    發(fā)表于 07-27 15:49 ?29次下載
    <b class='flag-5'>多核</b><b class='flag-5'>處理器</b>片<b class='flag-5'>上</b>存儲系統(tǒng)研究

    多核處理器會取代FPGA嗎?

    有人認為諸如圖形處理器(GPU)和Tilera處理器多核處理器在某些應用中正逐步替代現(xiàn)場可編程門陳列(FPGA)。理由是這些多核
    發(fā)表于 02-11 11:15 ?1202次閱讀
    <b class='flag-5'>多核</b><b class='flag-5'>處理器</b>會取代FPGA嗎?

    第1章 多核處理器基礎(chǔ)

    多核處理器基礎(chǔ),介紹了嵌入式的多核的信息
    發(fā)表于 04-11 14:17 ?2次下載

    基于FPGA的NoC多核處理器的設(shè)計

    NoC多核處理器的規(guī)模以及對FPGA硬件資源的需求,在此基礎(chǔ)給出了集成4片F(xiàn)PGA的開發(fā)板詳細設(shè)計方案,并對各主要模塊如互聯(lián)架構(gòu)、電源、板級時鐘分布、接口技術(shù)、存儲資源等關(guān)鍵設(shè)計要點
    發(fā)表于 11-22 09:15 ?4996次閱讀

    處理器關(guān)于多核概念與區(qū)別 多核處理器工作原理及優(yōu)缺點

    摘要:目前關(guān)于處理器的單核、雙核和多核已經(jīng)得到了普遍的運用,今天我們主要說說關(guān)于多核處理器的一些相關(guān)概念,它的工作與那里以及優(yōu)缺點而展開的分析。
    發(fā)表于 12-08 13:31 ?3.2w次閱讀

    如何在Zynq處理器lwIP實現(xiàn)網(wǎng)絡功能

    了解如何在Zynq處理器使用輕量級IP堆棧(lwIP)來實現(xiàn)網(wǎng)絡功能。 本次會議既包括獨立用例,也包括與流行的輕量級FreeRTOS操作系統(tǒng)的集成。
    的頭像 發(fā)表于 11-27 06:17 ?5744次閱讀

    淺議多核處理器技術(shù)

    多核處理器以其高性能、低功耗優(yōu)勢正逐步取代傳統(tǒng)的單處理器成為市場的主流。隨著應用需求的擴大和技術(shù)的不斷進步,多核必將展示出其強大的性能優(yōu)勢。但目前
    發(fā)表于 03-29 10:47 ?8次下載

    Zynq的非對稱多核處理器

    Zynq SoC 還擁有大量共享資源,常見示例包括 I/O 外設(shè)、片存儲、中斷控制分配器、L2 高速緩存和位于 DDR 存儲內(nèi)的系統(tǒng)
    的頭像 發(fā)表于 06-16 10:18 ?1961次閱讀