C64x+ Megamodule概述
C64x+ megamodule包含:C64x+ CPU、L1P、L1D、L2、IDMA(内部DMA)、BWM(带宽管理)、INTC(中断控制器)、PDC(power-down控制器)和EMC(外部存储器控制器)。
1. C64x+ CPU
C64x+ CPU是C64x CPU的增强版,提供了下面一些新特征:
l 扩展了新的指令
l 增加了代码压缩
l 软硬件的异常中断
C64x+目标码与C64x兼容。
2. L1P控制器
L1P控制器是CPU取指流水线与L1P内存的接口。你可以配置L1P内存作为one-way set-associative cache。Cache尺寸可以配置为0KB、4KB、8KB、16KB、32KB。
L1P提供带宽管理、内存保护和power-down支持。L1P复位后初始化配置全部为SRAM或最大容量的CACHE,这取决于具体的芯片。
3. L1D控制器
L1D控制器是CPU数据通道与L1D内存之间的接口,L1D内存可以配置为two-way set-associative cache。Cache尺寸可以配置为0KB、4KB、8KB、16KB、32KB。
L1D支持带宽管理、内存保护、power-down。L1D上电复位后总是初始化为全部为SRAM或最大容量的CACHE,这取决于具体芯片。
4. L2控制器
L2控制器是L1内存与更高层内存之间的接口。L2内存的一部分可以配置为four-way set-associative cahe,cache尺寸可以配置为0KB、32KB、64KB、128KB、256KB。
L2支持带宽管理、内存保护、power-down。L2上电复位时总是全部初始化为SRAM,如果你想将其中一部分作为CACHE实用,你必须在运行时自己配置。
如果你配置L2内存一部分作为cache,L2控制器提供Writebacks操作或同时Invalidation操作,这些操作可以基于全局或块。你可以指定这些内存一致性的操作,也可以自动发生,这取决于cache结构。
5. IDMA
IDMA是megamodule的局部DMA。它在megamodule内部(L1P、L1D、L2和CFG)执行数据搬移操作。
有两个通道的IDMA(通道0和通道1):
l 通道0允许在外设配置空间(CFG)和任何局部内存(L1P、L1D、L2)之间搬移数据。
l 通道1在局部内存(L1P、L1D、L2)之间搬移数据。
IDMA数据搬移发生在CPU操作后台,也就是说IDMA可以与CPU并发进行操作,而不需要消耗任何附加的CPU资源。
IDMA不能传输数据到或去内部的MMR空间。
6. BWM(带宽管理)
C64x+ Megamodule包括一套资源(L1P、L1D、L2和配置总线)以及对这些资源进行请求的一个请求集(CPU、SDMA、IDMA和一致性操作),为了避免一个请求对一个资源的长期存取而造成的阻塞,C64x+ Megamodule采用一个带宽管理方案,以确保所有请求者都能够获得一定大带宽资源。
带宽管理的大概机制是:每个请求者被分配一个优先级,共9个优先级:0-8,0优先级最高,8最低。当多个请求竞争一个资源时,优先级最高的获得服务。当竞争持续发生多个连续周期时,一个竞争计数器允许较低优先级请求者在每n个竞争周期获得1个周期对资源的存取。这里n可编程。在竞争发生时,BWM通过每个周期使竞争计数器+1,当请求被允许时,这个计数器1复位到0。当这个计数器到达n时,较低优先级请求者的优先级设为-1,从而至少获得一次存取。当然这个计数器对你来说不可见。
7. INTC(中断控制器)
C64x+ CPU提供两种类型的异步事件服务:
l 中断
l 异常
当出现外部或内部硬件事件,即可能产生中断,中断使正常的程序流发生重定向。异常在程序流重定向方面与中断是类似的,但通常与一个系统错误条件相关联。
C64x+ CPU能接收12个可屏蔽/可配置中断、1个可屏蔽异常和一个不可屏蔽中断/异常。CPU能响应内部种种异常条件。
Megamodule包括一个中断控制器,允许124个系统事件路由到CPU的中断/异常输入。这124个事件也能直接连接到可屏蔽中断,或分组一起作为中断和异常。这些不同的路由选择使事件的处理具有很大的灵活性。
当一个中断通知给CPU,而同时对于这个中断正好已经有一个悬挂标志,这时会产生错误事件,除了路由事件外,当CPU丢失一个中断时,中断控制器会检测。当丢失一个实时事件时,你可以用这个错误事件通知CPU。INTC硬件在一个寄存器里保存丢失中断的中断号,以便采取纠正行为。
8. MPA(内存保护结构)
C64x+ Megamodule提供内存保护,支持L1P、L1D和L2。系统及内存保护取决于每个器件,并不是所有器件都支持。
内存保护全局定义,但局部实现。这样总的保护方案是为整个C64x+ Megamodule定义的,但是每个资源实现它自己的保护硬件。这种内存保护分布式方法使你只要掌握一个内存保护接口就可以了。同时C64x+仍保留足够的灵活性以支持将来的外设和内存。
为了实现内存保护方案,内存映射被划分为页,每个页有一个相关的允许集,非法存取将产生一个异常并以内存错误寄存器器报告给系统。另外,MPA支持优先级模式(超级、用户)和内存锁。
9. PDC(Power-Down控制器)
PDC允许软件对C64x+ Megamodule各部分实施power-down管理。CPU可以基于自己执行的线程或对外部激励的响应来管理C64x+ Megamodule各部分的power-down。
10. EMC(外部内存控制器)
EMC是Megamodule与设备其它部分的桥,它包括三个端口:
l 配置寄存器(CFG):这个端口提供对内存映射的寄存器的存取。这些寄存器控制C64x+芯片的不同的外设和资源。
l Master DMA(MDMA):MDMA提供对Megamodule外部资源的存取,传输的启动是由Megamodule,也就是说在这儿Megamodule是传输的Master。MDMA典型用于CPU/Cache对L2外的内存存取。这些存取可能是一个cache line定位、writebacks和不可cache对系统内存的load、store。
l SLAVE DMA(SDMA):SDMA是对megamodule内部资源的存取,发起者在megamodule外部,比如一个DMA控制器、HPI等,这时megamodule处于从位置。
CFG总线总是32bits宽,总应当以32bits LOAD/STORE指令存取或IDMA。MDMA和SDMA端口可以是32、64或128bits宽。它们的实际宽度取决于每个器件。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wjdvt/archive/2009/08/20/4467519.aspx
C64x+ Megamodule概述相关推荐
- Java 多线程概述
多线程技术概述 1.线程与进程 进程:内存中运行的应用程序,每个进程都拥有一个独立的内存空间. 线程:是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换.并发执行,一个进程最少有一个线程, ...
- 【SpringMVC】概述
概述: SpringMVC:是基于spring的一个框架, 实际上就是spring的一个模块, 专门是做web开发的. 理解是servlet的一个升级 Sp ...
- 梯度下降优化算法概述
本文原文是 An overview of gradient descent optimization algorithms,同时作者也在 arXiv 上发了一篇同样内容的 论文. 本文结合了两者来翻译 ...
- Redis概述和基础
Redis 1.NoSQL NoSQL = Not Only SQL(不仅仅是SQL) 泛指非关系型数据库的,随着web2.0互联网的诞生!传统的关系型数据库很难对付web2.0时代!尤其是超大规模的 ...
- OpenCL™(开放计算语言)概述
OpenCL™(开放计算语言)概述 异构系统并行编程的开准 OpenCL™(开放计算语言)是一种开放的.免版税的标准,用于对超级计算机.云服务器.个人计算机.移动设备和嵌入式平台中的,各种加速器进行跨 ...
- 自动驾驶QNX,Linux,Autosar概述
自动驾驶QNX,Linux,Autosar概述 QNX是一个分布式.嵌入式.可规模扩展的实时操作系统.遵循POSIX.1 (程序接口)和POSIX.2 (Shell和工具).部分遵循POSIX.1b( ...
- Tengine MLOps概述
Tengine MLOps概述 大幅提高产业应用从云向边缘迁移的效率 MLOps Cloud Native 聚焦于提升云端的运营过程效率 MLOps Edge Native 聚焦于解决边缘应用开发及异 ...
- Tengine Web服务器概述
Tengine Web服务器概述 Tengine是由淘宝网发起的Web服务器项目.在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.目的是打造一个高效.安全的Web平台. 发展 ...
- Docker基本原理概述
Docker基本原理概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,可以以与管理应用程序相同的方式来管 ...
最新文章
- c库的rand/random随机数产生函数性能差?
- activity中fragment 返回键不退出_分享一波阿里Android客户端面经,我竟连这都答不上来?...
- python小游戏代码大全-python贪吃蛇游戏代码
- Python 08 面向对象
- 电脑数据存储工具----光盘驱动器
- 使用Lock and Load X 插件时导致Final Cat Pro意外退出的解决办法
- Qt C/C++统计运行时间
- SpringMVC @ResponseBody 406
- error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools“:解决方案
- kettlejava脚本的api_kettle java api 执行 Kettle 的作业和 转换
- Spring框架之控制反转和依赖注入
- 在r中弄方差分析表_使用R语言进行单因素方差分析
- PDF图纸怎么导入CAD中?尝试这样操作一下
- ES6,ES5,ES3,对比学习~
- 使用TensorFlow XLA辅助实现BERT预训练加速
- 普通用户登录出现“sorry, that didn‘t work please try again”
- 怎么修改背景图片大小的HTML代码,css如何改变背景图片大小?
- 2014 CVPR-DeepReID Deep Filter Pairing Neural Network for Person Re-Identification
- pandas操作excel,matplotlib.pyplot画图插入到excel,处理复杂excel简单练习
- 【杂题】cf1041fF. Ray in the tube
热门文章
- MC我的世界 模拟城市模组 Sim-U 1.8.9正式发布
- CodeCombat
- 基于DDSRF正负序分离方法的不平衡电网PQ控制策略_平衡电流控制
- 基于XLINX的PWM控制LED模块设计
- 虾米音乐爬虫实战分析 批量下载虾米音乐到本地
- php mov格式,mov和mp4区别是什么
- [MTK]lk USB与下载工具交互简图
- 全球与中国用于AR-MR的高折射率玻璃基板市场运营模式与投资战略规划研究报告2022-2028年
- 使用TensorFlow训练神经网络识别MNIST数据一
- 纳尼?不用码代码,就可回归主流程,一只海豚就可以做到