国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

1.簡介

zynq系列開發板有兩個板載Cortex-A9處理器,兩個ARM可以協同處理數據。

多核處理器硬件上的劃分

??1.同構多核:系統中的多個處理器在結構上是相同的;

????????優點是硬件和軟件設計上較為簡單,通用性高。

??2.異構多核:系統中的處理器結構上是不同的;

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

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

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

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

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

??SMP(Symmetric Muti-processing):

????多個處理器運行一個操作系統,這個操作系統同等的管理多個內核。

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

????BMP與SMP類似,但是開發者可以指定將某個任務僅在某個指定內核上執行。

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

2.CPU之間通訊原理

2.1 通訊步驟

1.系統初始化

2.啟動CPU1

3.和CPU1進行通訊

4.共享CPU外設

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具有更高的性能和更低的延遲。用于小數據量(256KB一下)用OCM更好。

??避免同時訪問的方法

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

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

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

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

??OCM:OCM的某一地址進行標志。當標志為0時這個地址是某個CPU私有的;為1時,這個地址是另一個CPU私有的。或者軟件產生中斷的方式。

2.3 軟件設計

軟件設計分為三個階段

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

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

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

FSBL

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

Bare-metal application Code

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

CPU0 Application

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

??CPU0的配置步驟:

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

??2.初始化ICD

??3.啟動CPU1

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

??5.設置OCM的地址作為信號

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

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

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

??CPU1的配置步驟

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

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

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

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

4 程序設計

4.1 程序任務

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

4.2 系統框圖

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//技術支持:www.openedv.com//淘寶店鋪:http://openedv.taobao.com//關注微信公眾平臺微信號:"正點原子",免費獲取ZYNQ & FPGA & STM32 & LINUX資料。//版權所有,盜版必究。//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并跳轉至相應的程序#define sev()                __asm__("sev")               //C語言內嵌匯編寫法 send event指令

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

//全局變量XScuGic Intc;                    //中斷控制器驅動程序實例int rec_freq_flag = 0;           //接收到呼吸燈頻率設置的標志int freq_gear;                   //頻率檔位

//CPU0 main函數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);        //向共享的地址中寫入輸入的數據        Xil_Out8(SHARE_BASE,freq_gear);        //給CPU1觸發中斷        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 的訪問內存基地址  Xil_Out32(CPU1_COPY_ADDR, CPU1_START_ADDR);  dmb();  //等待內存寫入完成(同步)  sev();  //通過"SEV"指令喚醒CPU1并跳轉至相應的程序}

//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);    //設置并打開中斷異常處理功能    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軟件中斷}

//軟件中斷函數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//技術支持:www.openedv.com//淘寶店鋪:http://openedv.taobao.com//關注微信公眾平臺微信號:"正點原子",免費獲取ZYNQ & FPGA & STM32 & LINUX資料。//版權所有,盜版必究。//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

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

//全局變量XScuGic Intc;               //中斷控制器驅動程序實例int soft_intr_flag = 0;     //軟件中斷的標志int freq_gear;              //頻率檔位

//CPU1 main函數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中讀出數據      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;      }      //設置呼吸燈頻率,最高位為1,設置有效      BREATH_LED_IP_mWriteReg(LED_IP_BASEADDR,LED_IP_REG1,(0x80000000|freq_step));      //給給CPU0觸發中斷      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);    //設置并打開中斷異常處理功能    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軟件中斷}

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

    關注

    68

    文章

    20253

    瀏覽量

    252236
  • 硬件
    +關注

    關注

    11

    文章

    3595

    瀏覽量

    69011
  • Zynq
    +關注

    關注

    10

    文章

    630

    瀏覽量

    49448

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

文章出處:【微信號:ZYNQ,微信公眾號:ZYNQ】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    嵌入式多核處理器硬件結構分析與對排序算法進行并行化優化

    常常在嵌入式領域使用,常見的是通用嵌入式處理器+DSP核。本文探究的嵌入式多核處理器采用同構結構,實現同一段代碼在不同處理器的并行執行。
    的頭像 發表于 10-17 07:55 ?4831次閱讀

    調節多核處理器硬件適應軟件設計方法

    調節多核處理器硬件適應軟件設計方法 典型的嵌入式系統設計人員在硬件平臺上進行編程,他們最關注的一點就是硬件平臺的穩定性。如果
    發表于 09-25 17:17

    數字信號處理器重新采納多核架構

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

    多核處理器設計九大要素

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

    多核處理器的優點

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

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

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

    集成電路多核處理器虛擬化技術

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

    多核處理器存儲系統研究

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

    多核處理器會取代FPGA嗎?

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

    第1章 多核處理器基礎

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

    基于FPGA的NoC多核處理器的設計

    NoC多核處理器的規模以及對FPGA硬件資源的需求,在此基礎給出了集成4片FPGA的開發板詳細設計方案,并對各主要模塊如互聯架構、電源、板級時鐘分布、接口技術、存儲資源等關鍵設計要點
    發表于 11-22 09:15 ?5367次閱讀

    處理器關于多核概念與區別 多核處理器工作原理及優缺點

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

    如何在Zynq處理器lwIP實現網絡功能

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

    淺議多核處理器技術

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

    Zynq的非對稱多核處理器

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