【ZYNQ】SCU 与 GIC

在多 CPU 架构中,处理器之间可以对共享数据进行操作。Snoop control uint (SCU) 模块用于确保每个处理器都在最新的数据拷贝上运行,从而保持缓存一致性。通用中断控制器 Generic interrupt controller (GIC) 使用优先级的思想,管理 CPU 中断信号的优先级。本文主要介绍 Zynq SCU 和 GIC 的基本结构与工作原理。

Snoop control unit (SCU)

        在多 CPU 架构中,处理器之间可以对共享数据进行操作。Snoop control uint (SCU) 模块用于确保每个处理器都在最新的数据拷贝上运行,从而保持缓存一致性。

        在前面 Zynq 芯片介绍一文中,我们了解到 Zynq 7000 SoC 具有单核或双核 ARM Cortex-A9 处理器,因此 Zynq 双核器件需要 SCU 模块。

        从上图可以看到,Zynq APU 架构中,SCU 位于处理器与 L2 Cache 之间。SCU 将两个 Cortex-A9 处理器连接到存储器子系统(On-chip RAM),并管理 L1 Cache 与 L2 Cache 之间的数据一致性。

        Zynq SCU 通过 CCB 总线与处理器进行通信。同时,SCU 模块还包含一个 ACP 接口(本质是 64-bit AXI 从接口),为 Zynq PL 提供接入。

        需要注意的是,Zynq 处理器不保证 L1 Cache 之间的一致性,因为处理器不能直接修改 L1 Cache 的内容。


General interrupt controller (GIC)

        在 CPU 工作过程中,中断是一种重要的技术,用于暂停 CPU 正在执行的程序,转而执行优先级更高的另一段程序。中断使 CPU 具备并发性、提高 CPU 的实时处理能力,同时使系统满足实时处理要求。

        中断控制器 Generic interrupt controller (GIC) 使用优先级的思想,用于管理中断信号的优先级。优先级是介于 1 和 31 之间的整数,默认情况下 1 是最高优先级的中断源。

名词解释

        PPI: CPU Private Peripheral Interrupts, CPU 专用外设中断
        SGI: Software Generated Interrupts, 软件生成中断
        SPI: Shared Peripheral Interrupts, 共享外设中断

        每个 CPU 具有一组私有外设中断 (PPI),PPI 包括全局计时器、私有看门狗计时器、私有计时器和来自 PL 的 FIQ/IRQ。PPI 的触发类型是固定的,因此,ICDICFR1 寄存器是只读的。

        每个 CPU 包含 16 个软件生成中断 (SGI),SGI 被连接到每个处理器,通过写入通用中断控制器 (GIC) 中的寄存器来生成 SGI,通过读取ICCIAR (中断确认) 寄存器或将 1 写入 ICDICPR (中断清除待决) 寄存器的相应位来清除中断。

        共享外设中断 (SPI) 由 PS 和 PL 中的各种 I/O 和存储器控制器生成,它们被连接到每个处理器,来自 PS 的外设中断也被连接到 PL。

以上三种中断信号需要经过 GIC 才能到达 CPU。

        通用中断控制器 (GIC) 为处理器管理中断的启用、禁用、屏蔽与优先级,GIC 确保针对 CPU 的中断一次只能由一个 CPU 进行。所有中断源都由唯一的中断 ID 号标识,所有中断源都有自己的可配置优先级和目标 CPU 列表。

GIC 的主要功能如下:
        1)启用、禁用指定中断;
        2)中断确认(interrupt acknowledging);
        3)绑定中断回调函数;
        4)分配中断优先级。

使用中断时,需要声明 xscugic.h 头文件,并编写中断回调函数。

static int TimerSetupIntrSystem(XScuGic *IntcInstancePtr,XScuTimer *TimerInstancePtr, u16 TimerIntrId)
{int Status;XScuGic_Config *IntcConfig;/** Initialize the interrupt controller driver.*/IntcConfig = XScuGic_LookupConfig(INTC_DEVICE_ID);if (NULL == IntcConfig) {return XST_FAILURE;}Status = XScuGic_CfgInitialize(IntcInstancePtr, IntcConfig,IntcConfig->CpuBaseAddress);if (Status != XST_SUCCESS) {return XST_FAILURE;}/** Connect the device driver handler.*/Status = XScuGic_Connect(IntcInstancePtr, TimerIntrId,(Xil_ExceptionHandler)TimerIntrHandler,(void *)TimerInstancePtr);if (Status != XST_SUCCESS) {return Status;}/** Enable the interrupt for the device.*/XScuGic_Enable(IntcInstancePtr, TimerIntrId);/** Enable the timer interrupts for timer mode.*/XScuTimer_EnableInterrupt(TimerInstancePtr);return XST_SUCCESS;
}static void TimerIntrHandler(void *CallBackRef)
{XScuTimer *TimerInstancePtr = (XScuTimer *) CallBackRef;/** Check if the timer counter has expired.*/if (XScuTimer_IsExpired(TimerInstancePtr)) {XScuTimer_ClearInterruptStatus(TimerInstancePtr);TimerExpired++;if (TimerExpired == 3) {XScuTimer_DisableAutoReload(TimerInstancePtr);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/20245.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring系统学习 - Spring入门

什么是Spring? Spring翻译过来就是春天的意思,字面意思,冠以Spring的意思就是想表示使用这个框架,代表程序员的春天来了,实际上就是让开发更加简单方便,实际上Spring确实做到了。 官网地址:ht…

【Mac】XMind for mac(XMind思维导图)v24.04.10311软件介绍和安装教程

软件介绍 XMind for Mac是一款功能强大的思维导图软件。它具有以下主要特点: 1.多样化的思维导图功能:XMind for Mac提供了丰富的思维导图编辑功能,用户可以创建各种类型的思维导图,包括组织结构图、逻辑图、时间轴图等&#xf…

fluent UI v9版本Dialog右上角x按钮聚焦问题解决

右上角x按钮聚焦效果展示 第一次点击不会聚焦,第二次或多次点击会出现这种情况。如果多个地方公用一个页面里,这个页面包含这个组件,那其它页面刚打开弹框就是聚焦状态,是个样式的问题。 解决: import * as React fr…

【Vue3】自定义组件directiveapp.use()

历史小剧场 崇祯很勤政,崇祯并非王国之君,弘光很昏庸,弘光活该倒霉,几百年来,我们都这样认为。 但我们之所以一直这样认为,只是因为有人这样告诉我们。 之所以有人这样告诉我们,是因为他们希望我…

比较与深浅克隆

1.比较 (1)Comparable接口:(重写compareTo方法) 由于它是一个接口,而且在这个接口中只有一个compareTo方法,所以所有实现该接口的类都需要重写。这个compareTo方法相当于制定一个比较标准&…

pyinstaller将py文件打包成exe

pyinstaller将py文件打包成exe 一、为什么需要将python文件打包成exe文件?二、具体操作步骤一、为什么需要将python文件打包成exe文件? python文件需要在python环境中运行,也就是需要安装python解释器。有时我们自己写的python程序需要分享给自己的朋友、同事或者合作伙伴,…

封装一个websocket,支持断网重连、心跳检测,拿来开箱即用

封装一个websocket,支持断网重连、心跳检测 代码封装 编写 WebSocketClient.js import { EventDispatcher } from ./dispatcherexport class WebSocketClient extends EventDispatcher {constructor(url) {console.log(url, urlurl)super()this.url url}// #soc…

STM32_FSMC_HAL(介绍)

FSMC(Flexible Static Memory Controller)是STM32微控制器中的一种内存控制器,它允许微控制器与外部存储器接口,如SRAM、NOR Flash、NAND Flash和PSRAM等。FSMC特别适用于需要高速数据交换和大量数据存储的应用场景。 典型应用&a…

react跨组件通信Context

案例&#xff1a;现在有个父-子-孙组件 需要进行组件通信 import { useState } from "react"; // 创建上下文 const CountContext React.createContext();//子组件 const SonComponent (props) > {return (<div><h2>子组件</h2><Grandson…

【机器学习】让大模型变得更聪明

文章目录 前言1. 理解大模型的局限性1.1 理解力的挑战1.2 泛化能力的挑战1.3 适应性的挑战 2. 算法创新&#xff1a;提高模型学习和推理能力2.1 自监督学习2.2 强化学习2.3 联邦学习 3. 数据质量与多样性&#xff1a;增强模型的泛化能力3.1 高质量数据的获取3.2 数据多样性的重…

#1 深度优先搜索

深搜思想 DFS其实是针对图论的一种搜索算法&#xff0c;由一个节点出发&#xff0c;不撞南墙不回头式的遍历所有的节点。 如先遍历1&#xff0c;沿&#xff08;1,2&#xff09;遍历2&#xff0c;再沿&#xff08;2,4&#xff09;遍历4&#xff0c;撞南墙&#xff08;边界条件…

XSS另类攻击(四)kali系统beef-xss安装和使用

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性&#xff0c;仅供安全研究与学习之用&#xff0c;读者将信息做其他用途&#xff0c;由Ta承担全部法律及连带责任&#xff0c;文章作者不承担任何法律及连带责任。 1、环境说明 kali系统&#xff0c;ip&#xff1a;192.1…

k8s的ci/cd实践之旅

书接上回k8s集群搭建完毕&#xff0c;来使用它强大的扩缩容能力帮我们进行应用的持续集成和持续部署&#xff0c;整体的机器规划如下&#xff1a; 1.192.168.8.156 搭建gitlab私服 docker pull gitlab/gitlab-ce:latest docker run --detach --hostname 192.168.8.156 --publ…

SAP 生产订单批量报工(代码分享)

最近公司一直在对成本这块的业务进行梳理,影响比较大的就是生产这块的报工,经常会要求要批量的冲销报工,然后在继续报工,来调整生产订单的实际工时,前面的博客中已经给大家分享了批量冲销生产订单的代码, 下面给大家分享一下生产订单批量报工的代码 首先流程制造和离散制…

【算法】过桥

✨题目链接&#xff1a; 过桥 ✨题目描述 ✨输入描述: 第一行一个数n(2≤n≤2000) 接下来一行n个数a[i](1≤|a[i]|≤2000)表示浮块上的数字 ✨输出描述: 输出一行&#xff0c;表示对应的答案 ✨示例1 &#x1f4cd;输入 4 2 2 -1 2 &#x1f4cd;输出 2 &#x1f4cd;说明 1…

HNCTF 2024 ez_pecp 冰蝎+CS流量分析

考点:冰蝎webshell流量分析CS4.x流量解密 给了两个 流量包 第一个 ctf1.pcapng 查看其HTTP请求 而在CS中流量特征是基于tls协议 http-beacon 通信中&#xff0c;默认使用 GET 方法向 /dpixel 、/__utm.gif 、/pixel.gif 等地址发起请求&#xff0c;而且下发指令的时候会请求 …

如何使用浔川AI翻译机?——浔川AI社

1 前言 对于“如何使用浔川AI翻译机&#xff1f;”这个问题&#xff0c;我们官方 总结出以下结论&#xff1a; 首先&#xff1a; 复制以下代码&#xff1a; # -*- coding: utf-8 -*- import tkinter as tk import tkinter.messagebox import pickle import random# 窗口 wi…

Jmeter压测中遇到的问题汇总

Jmeter使用过程问题总结 一、某个请求的请求体中有中文字段&#xff0c;执行后该请求无法成功 解决方法&#xff1a;在取样器的内容编码处加上UTF-8 二、遇到接口请求后报401&#xff0c;请求未授权&#xff08;或者信息头管理器只写了cookie请求不成功&#xff09; 解决方…

记录深度学习GPU配置,下载CUDA与cuDnn,安装tensorflow

目标下载: cuda 11.0.1_451.22 win10.exe cudnn-11.0-windows-x64-v8.0.2.39.zip Anaconda的安装请看别的博主的,这里不再赘述 看看自己电脑的cuda 方法一:打开英伟达面板查看 方法二:使用命令行 随便找个文件夹,在顶部路径输入"cmd" 输入下面命令 nvidia-smi 我…

小程序配置自定义tabBar及异形tabBar配置操作

什么是tabBar&#xff1f; 小程序的tabbar是指小程序底部的一组固定导航按钮&#xff0c;通常包含2-5个按钮&#xff0c;用于快速切换小程序的不同页面。每个按钮都有一个图标和文本标签&#xff0c;点击按钮可以切换到对应的页面。tabbar通常放置在小程序的底部&#xff0c;以…