TC277的Ovc功能

news2025/1/21 20:20:08

TC277的Ovc功能

文章目录

  • 前言
  • Data Access Overlay (OVC)<br>
    • 特点和功能概述
    • 数据访问重定向
    • 目标内存地址
      • Online Data Acquisition (OLDA) Space
    • Overlay Memories
      • Local Memory
      • Emulation Memory
      • DSPR & PSPR Memory
    • Global Overlay Control
      • Global Overlay Control Synchronisation
    • Overlay Configuration Change
    • Overlay Control Registers
    • Global overlay control registers
  • 具体应用
  • 总结

前言

在实际开发过程中,我们一般定义标定量为Const属性,以防止意外修改,标定量会被分配到固定的flash区域以便管理。在XCP/CCP标定中,要想实时修改标定量,则标定量应该运行在ram地址。还有一方面,flash区域远大于ram区域,在存在多个车型的不同标定参数时,可以定义多个flash区域,对应同一个ram区域,于是有了OVC-Data Access Overlay功能,提供了目标地址到重定向地址的映射。

Data Access Overlay (OVC)

数据覆盖提供了重定向选择的数据访问覆盖内存的能力。可重定向TriCore对程序Flash、在线数据采集空间或EBU空间的数据访问。覆盖内存可以位于本地内存(如果存在)、仿真内存(仅用于仿真设备)或DPSR/PSPR内存中。例如,覆盖功能可以在程序运行时修改应用程序的测试和标定参数(通常存储在Flash内存中)。注意,只有读和写数据访问被重定向。执行访问重定向不会影响性能。

特点和功能概述

•重定向数据访问地址到程序Flash, OLDA或外部EBU空间。

•支持重定向到覆盖内存位于:-本地内存(LMU)(如果存在)-仿真内存(仅仿真设备)- DSPR或PSPR内存

•支持高达4 MB覆盖内存地址范围;
•最多32覆盖范围(“块”)在每个TriCore实例可用;
•覆盖块大小从32byte到128kbyte;
•最多4 MB重定向空间(32个范围x 128 Kbyte);
•覆盖内存位置和块大小单独选择每个覆盖块;
•一个寄存器写访问可以启用或禁用多个覆盖块;
•DMI中数据缓存的可编程刷新(无效)控件。

•覆盖启动/停止同步数据加载。

•每个处理器核心单独覆盖系统。

数据访问重定向

将数据访问从原始目标内存(“目标地址”)重定向到覆盖内存(“重定向地址”)的原理如下所示。这里的原始内存一般指的就是flash地址,重定向地址为ram地址


数据访问覆盖使用覆盖范围(“覆盖块”)定义。每个overlay
block 定义一个连续的地址空间范围,为访问重定向。每个overlay
block 配置以下参数:

overlay block目标地址-一般为flash起始地址;
•overlay block大小-overlay的flash大小;
•overlay block重定向基址-对应的ram起始地址。
在TC27x中,每个TriCore实例最多可以使用32个overlay范围。
每个overlay block有3个相关的寄存器,用于这些参数的独立配置。overlay参数配置如下:

目标地址(flash地址)由OTARx寄存器配置

overlay block大小由OMASKx寄存器配置

重定向地址(ram地址)由RABRx寄存器配置

overlay memory block的大小可为2^n x 32bytes,n = 0 ~ 12。这使块大小的范围从32 bytes到128kbytes。块的起始地址只能是已编程块大小(自然对齐边界)的整数倍。如果OTAR寄存器值或RABR寄存器值与块大小不一致,则忽略最低有效位值并视为零

重定向base地址由RABRx寄存器中的两个字段确定
•RABRx.OMEM选择overlay内存

•RABRx.OBASE,在此内存中选择base地址

每个overlay block可以通过RABRx.OVEN激活或禁用,overlay block可以独立激活或禁用,通过直接访问RABRx寄存器,或在组中,多个配置块同时激活或禁用

地址重定向过程如下图所示:


对段8H或段AH的任何数据访问都要对照所有激活的overlay blocks进行检查。对于每个激活的overlay blocks,地址位27…5与目标base地址(OTARx)进行比较,这种位比较由OMASKx寄存器的内容限定。如果相应的OMASKx位设置为1,则地址位参与比较。如果当前访问的地址中OMASKx为1的位的值等于OTARx寄存器中的相应位,则访问被重定向

上面的话可能不太好理解,举个例子,我们设定的flash base地址为0x80180000,size为0xc00,对应的mask位5-16位的值110000000000,当访问的内存地址为0x80180004,此时为1的位都相等(15,16位都为0),会进行重定向,当访问的内存地址为0x80189000时,mask为1的位不相等(当前访问的15位为1,设定的为0),不会进行重定向

重定向地址位分配如下:

•地址位31…22根据overlay memory选择(RABRx.OMEM)和原始地址的缓存能力设置。

•对于地址位21…5:—如果设置了对应的OMASKx位,则地址位值取自RABRx.OBASE;—如果没有设置对应的OMASKx位,则地址位值从原地址中取。

•地址位4…0总是直接从原始地址取。

如果没有重定向,则使用原地址进行访问。

同样的,我们举个例子帮助理解,目标地址和size设置同上,我们设置重定向base地址为0x60008000(为core1的ram,需要设置RABRx.OMEM为1),设置RABRx.OBASE为0x400,若访问的内存为0x80180004,则重定向地址最高位为6(core1 DSPR/PSPR),重定向地址为0x60080004

寄存器OMASK.OMASK位为1时,从RABRx.OBASE取值,为0时从OTARx.TBASE中取值。因为最低5位一直为0,所以size最小为32byte,OMASKx.OMASK为0的个数表示size大小,例如OMASKx.OMASK为110000000000(0xc00)时,size大小为0-111111111111111(0-0x7FFF),为32kbytes

被激活的overlay block的目标地址范围不应该重叠,否则可能会出现异常。

目标内存地址

对8H段或AH段内任何内存的数据访问可能被重定向到overlay内存。特别是,访问以下内存可能被重定向:

•Program Flash;
•Data Flash;
•OLDA space
•External EBU space

Online Data Acquisition (OLDA) Space

标定支持虚拟OLDA memory range. The base address
of the virtual OLDA memory range is A/8FE7 0000H.

Overlay Memories

以下是可以选择的overlay内存。通过RABRx.OMEM选择使用的内存。

Local Memory

如果存在,本地内存(LMU)可以选择overlay。如果RABRx.OMEM值为6,则选择本地内存用于overlay block x重定向。LMU的基址为B/9000 0000H。在地址转换过程中,将前10位设置为B0H00B(目标段AH)或90H00B(目标段8H)。

Emulation Memory

如果存在,仿真内存(EMEM)可以选择overlay。如果RABRx.OMEM值为7,则为overlay block x重定向选择仿真内存。仿真内存的基址是B/9F00 0000H。在进行地址转换时,将前10位设置为BFH00B(目标段AH)或9FH00B(目标段8H)。

DSPR & PSPR Memory

Data Scratch Memory(DSPR)或Program Scratch Memory(PSPR)从core0,1或2可以选择overlay。如果RABRx.OMEE取值为0、1或2,overlay block x重定向选择DSPR或PSPR。基址为7000 0000H、6000 0000H或5000 0000H。在进行地址转换时,将地址位的前10位设置为70H00B、60H00B或50H00B。取决于RABRx.OBASE中设置的值,可以使用DSPR内存(从偏移量0H开始)或PSPR内存(从偏移量100000h开始)。

Global Overlay Control

Overlay可以为每个Core单独禁用或启用,使用OVCENABLE寄存器实现。如果OVCENABLE.OVENx位被清除后,无论剩下的寄存器设置如何,Core x上都不允许地址重定向。写入OVCENABLE寄存器不会改变任何剩余的寄存器值。

而每个覆盖块可以通过写入RABRx.OVEN位,一个专门的功能提供了并发激活和停用多个块,这在跨多个内存区域维护数据一致性方面很有用。通过使能不同的block来实现不同标定量参数到同一ram地址的映射。为了实现并行激活和取消激活的目的,overlay block分为两个阶段选择:
激活和取消激活的单个块是用OVCx_OSEL寄存器选择的,每个核心x是独立的;
•使用OVCCON.CSEL 选择内核集。

可以使用OVCCON.OVSTRT同时激活或禁用多个overlay block。当OVCCON.OVSTRT位为1时:

①如果OVCCON.CSELx位设置为1,OVCx_OSEL.SHOVENy位设置位1,overlay block y in core x被激活且 OVCx_RABRy.OVEN 位被设置

②如果OVCCON.CSELx位设置为1,OVCx_OSEL.SHOVENy位设置位0,overlay block y in core x禁止激活且 OVCx_RABRy.OVEN 位被清除

③如果OVCCON.CSELx位设置为0,不影响Core x的overlay配置。

上述设置需要同时执行,否则不会更改overlay的配置。使用此功能,可以直接从一组overlay block切换到另一组overlay block

可以使用OVCCON.OVSTP同时停用多个overlay blocks.当OVCCON.OVSTP位写1时:

①•如果OVCCON。CSELx位用1写入,core x中的所有overlay blocks禁止激活,所有OVCx_RABRy.OVEN位被清除。

②•如果OVCCON。CSELx位用0写入,不影响Core x的overlay配置。

上述设置需要同时执行,否则不会更改overlay的配置。

注意:如果使用RABRx.OVEN启用了任何block,则不应使用global OVCENABLE寄存器启用或禁用overlay。相反,如果需要启用或禁用并发块,则应使用OVSTRT或OVSTP。

OVCCON.DCINVAL位写1时,所选内核中所有未修改的(clean)数据缓存线都无效。包含已修改(dirty)数据的数据缓存行不受影响。没有选择OVCCON.CSEL的Core不受影响。数据缓存失效可以与OVSTRT或OVSTP操作结合使用。此功能有助于确保在激活或停用overlay block后,CPU可以访问新数据.

注意:OVCCON.CSEL位需要和OVSTRT, OVSTP and DCINVAL 一起写入。且该寄存器不会保留写入值,读取始终为0.

OVCCON.OVCONF提供用户控制位,与OVCCON.POVCONF保护位一起使用。这些位不会影响overlay功能

当OVCCON寄存器被写入CSELx集合和OVSTRT或OVSTP集合时,同时OVCx_RABRy寄存器被写入,OVCx_RABRy.OVEN的结果值位未定义。应避免这种同时访问的可能性

当TriCore处于空闲IDLE状态时,不执行OVSTRT、OVSTP和DCINVAL动作

Global Overlay Control Synchronisation

当OVSTRT、OVSTP或DCINVAL动作被请求时,其执行可能被延迟,以防止在正在进行的数据加载期间更改覆盖配置。

在一项行动请求之后,在请求另一项行动之前,应留出足够的时间。如果在上一个操作仍然未决(由于与CPU负载同步)的情况下请求了新操作,则可能会丢失一些操作。

Overlay Configuration Change

在修改OTARx、OMASKx或RABRx寄存器时,需要disable Overlay block(通过清除RABRx.OVEN位。否则,可能会发生意外的访问重定向。只有在目标地址、覆盖内存选择、重定向地址和掩码都已用预期值配置时,才应启用overlay block

注意:Overlay Control不会防止错误配置转换逻辑。特别是,不阻止重定向到未实现或禁止的地址范围。一旦出现该情况,程序会跑飞。

如果需要数据一致性,则需要特别注意将覆盖重定向更改同步到执行的指令流。

外部访问可以缓冲在CPU中。尚未完成的外部访问仍可能受到覆盖配置更改的影响。因此,建议在激活或停用任何覆盖范围之前,确保完成所有未决访问(例如,通过执行DSYNC指令)。

当覆盖块被启用并且相同的存储器位置通过目标地址空间写入并通过重定向的地址空间读取时,或者反之亦然,需要强制执行访问同步(如果适用,使用DSYNC和数据缓存写回)。

Overlay Control Registers

参考寄存器文章

Global overlay control registers

两个寄存器全局控制所有核心的覆盖操作:
•覆盖启用寄存器OVCENABLE,可用于禁用或启用每个核心的数据访问覆盖;
•覆盖控制寄存器OVCCON,可用于对所选核心集执行以下操作:
–同时启用/禁用所选覆盖块,
–同时禁用覆盖块,
-使数据缓存无效。
具体寄存器参考寄存器文章

具体应用

1.使用OVCENABLE.OVENx位使能对应CPU的Overlay功能

2.使能OVCCON.OVCONF配置,OVCCON.CSEL设置使用的CPU,置位OVSTRT位。

3.memcopy对应目标地址及大小到对应重定向地址,保证初始值对应。
4.利用OSEL,RABR,OTAR,OMASK寄存器确定使用的block,及目标地址,block大小,重定向地址。

扩展:通过配置不同block,实现多个flash对应同一个ram,利用OSEL配置选择切换不同的block。

总结

OVC功能主要为XCP服务,且方便了不同标定参数的切换。


若你觉得本文对你有帮助,欢迎点赞,关注,收藏,转发~~~
你的鼓励是对小弟的最大支持~~~

建了一个WX公众h,《汽车电子学习笔记》感兴趣可以关注一下~~~文章都会同步更新

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

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

相关文章

控制算法-模型预测MPC

本文记录一下MPC控制算法的学习过程和自己的理解&#xff0c;初步接触控制算法&#xff0c;理解肯定不是很完善&#xff0c;重在记录思考的过程。 背景 随着自动驾驶技术以及机器人控制技术的不断发展及逐渐火热&#xff0c;模型预测控制(MPC)算法作为一种先进的控制算法&…

LeetCode 202. 快乐数

题目链接&#xff1a;https://leetcode.cn/problems/happy-number/ 思路如下&#xff1a; 由题目可知&#xff0c;nnn 的取值在 [1,231−1][1, 2^{31}-1][1,231−1] 的范围内&#xff0c;在 [1,2147483647][1, 2147483647][1,2147483647] 这个区间里面&#xff0c;平方和最大…

【博客544】golang pprof性能调试:寻找memory瓶颈

golang pprof性能调试&#xff1a;寻找memory瓶颈 1、前置 pprof的使用与输出列解析看姐妹篇&#xff1a;golang pprof性能调试&#xff1a;寻找cpu瓶颈 2、引入pprof到程序中&#xff0c;以调试memory瓶颈 给程序加入&#xff1a; import _ "net/http/pprof"go…

Java 8 集合 Stream

Java 8 是一个成功的版本&#xff0c;新增的内容很实用。比如大家熟悉的 lamda 表达式&#xff0c;集合的 Stream&#xff0c;等等。 本文讲讲 Stream 的使用。 Stream 是什么&#xff1f; Stream 将要处理的集合看做流&#xff0c;然后方便的对流做操作&#xff0c;比如筛选…

node日志log4js库使用示例

在node开发或者electron项目开发中&#xff0c;我们可能需要记录日志的功能&#xff0c;便于我们出错排查问题。今天介绍node中的日志库log4js。 log日志记录&#xff0c;一般需要配置日志记录的级别&#xff0c;日志输出类型&#xff0c;日志格式等信息。log4js可以在初始化的…

ssh免密登陆

文章目录一、免密登陆1、生成密钥对2、将公钥拷贝到所创建的虚拟机上3、测试免密登陆成功没有二、遇到免密登陆失败的解决办法解决办法1、修改机器名&#xff0c;去掉.novalocal后缀2、重新做免密登录一、免密登陆 ssh密钥登录比密码登录安全&#xff0c;主要是因为他使用了非…

Spring - BeanPostProcessors 扩展接口

文章目录PreBean的生成过程org.springframework.beans.factory.config.BeanPostProcessor 介绍ApplicationContext注册Bean PostProcessor源码解析AbstractApplicationContext#refreshAbstractApplicationContext#registerBeanPostProcessorsPostProcessorRegistrationDelegate…

InnoDB底层存储结构探秘

一 innoDB 为什么不用平衡二叉树 计算机存储层次结构 计算机存储设备一般分为两种&#xff1a;内存储器(main memory)和外存储器(external memory)。 内存储器为内存&#xff0c;内存存取速度快&#xff0c;但容量小&#xff0c;价格昂贵&#xff0c;而且不能长期保存数据(在…

动物大全和动物识别系统毕业设计,动物大全和动物AI识别系统设计与实现,动物识别系统论文毕设作品参考

功能清单 【后台管理员功能】 系统设置&#xff1a;设置网站简介、关于我们、联系我们、加入我们、法律声明 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信息&a…

第七届NVIDIA Sky Hackathon项目报告书

系列文章目录 数据集收集和标注情况 1.1ASR语音数据集收集和标注情况 1.2CV图像数据集收集和标注情况进行模型的训练 2.1进行ASR模型的训练 2.2进行CV模型的训练在Jetson平台进行部署和推理 3.1部署和推理ASR模型 3.2部署和推理CV模型优化UI界面 文章目录系列文章目录1. 数据集…

详解BFS,Dijkstra算法,Floyd算法是如何解决最短路径问题的

目录 1.BFS算法 2.Dijkstra算法 3.Floyd算法 4.总结 1.BFS算法 G纲是个物流离散中心&#xff0c;经常需要往各个城市运东西&#xff0c;怎么运送距离最近——单源最短路径问题 各个城市之间也学要来往&#xff0c;相互之间怎么走距离最近&#xff1f;——每对顶点之间的最…

GNS3学习笔记

文章目录GNS3学习笔记一、GNS3支持的设备列表有哪些1、在安装根目录下 XXX\GNS3\appliances2、The NAT node 怎么使用二、GNS3使用错误汇总1、iosVL2 image(qemu平台)启动后进不去系统&#xff0c;一直重复进入开机界面三、参考链接1、GNS3应该使用那个模拟平台2、怎么集成VM到…

〖全域运营实战白宝书 - 运营角色认知篇⑧〗- 运营人的发展路径

大家好&#xff0c;我是 哈士奇 &#xff0c;一位工作了十年的"技术混子"&#xff0c; 致力于为开发者赋能的UP主, 目前正在运营着 TFS_CLUB社区。 &#x1f4ac; 人生格言&#xff1a;优于别人,并不高贵,真正的高贵应该是优于过去的自己。&#x1f4ac; &#x1f4e…

Flink源码解析(一、source原理)

文章目录背景逻辑原理connector架构sql处理阶段代码实例代码debug参考文献背景 source/sink 是flink最核心的部分之一&#xff0c;通过对其实现原理的学习&#xff0c;结合源码debug&#xff0c;有助于加深对框架处理过程的理解&#xff0c;以及架构设计上的提升。 逻辑原理 …

详细介绍 Oracle中的Materialized Views(物化视图/快照)

A materialized view (snapshot) is a table segment whose contents are periodically refereshed based on query (against a local or remote table)(针对的本地或者远程表) The simplest way to achieve replication of data between sites for against remote tables: ma…

中断上下文和进程上下文

中断上下文 参考博客&#xff1a;(https://blog.csdn.net/AndroidBBC/article/details/81911065) 中断上半部分&#xff0c;中断触发&#xff1b;中断下半部分&#xff0c;中断执行。 中断执行一般有tasklet、工作队列实现 工作队列机制 工作队列所执行的中断代码会表现出进…

Linux | 第一篇——常见指令汇总【超全、超详细讲解】

Linux之常见指令&#x1f333;前言&#x1f4bb;操作系统的概念&#x1f4bb;Linux的使用环境介绍&#x1f333;基本指令汇总一、【whoami】指令二、【pwd】指令三、【mkdir】指令四、【touch】指令五、【ls】指令1、拓展&#xff1a;文件的概念2、命令 - 命令选项六、【cd】指…

AtCoder Beginner Contest 260 G.Scalene Triangle Area(花式二维差分/二维线段树)

题目 n*n的网格(n<2e3)&#xff0c; 每个网格内的字符是O或者X&#xff0c;其中O表示(i,j)上有一个棋子&#xff0c;X表示没有 位于(s,t)棋子覆盖住了方格(u,v)&#xff0c;当且仅当&#xff1a; 1. 2. 3. q(q<2e5)次询问&#xff0c;第i次给出一个方格位置(xi…

如何给在 SAP Business Application Studio 里开发的 OData 服务准备测试数据试读版

在开始本步骤的学习之前&#xff0c;请大家务必完成前一步骤1. SAP Business Application Studio 里创建一个基于 CAP 模型的最简单的 OData 服务的学习。换言之&#xff0c;大家已经在 SAP Business Technology Platform 上的 Business Application Studio 里&#xff0c;创建…

Python实现基于Optuna超参数自动优化的xgboost回归模型(XGBRegressor算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 Optuna是一个开源的超参数优化(HPO)框架&#xff0c;用于自动执行超参数的搜索空间。 为了找到最佳的超…