总体框图
总的来说,在这款DSP芯片上,RAM分成了四种不同的类型:
专用RAM:
CPU专用的内存,其他主机无法访问。
双核共享RAM:
CLA和CPU共享内存,双方都可以对内存地址进行访问
MSGRAM:
CLA和CPU之间传递数据的内存
全局共享RAM:
CPU和DMA共享内存
内存访问:
对于DSP芯片来说,它采用多组总线并行机制,对内存的访问存在程序读、数据读、数据写三种情况。
Dedicated RAM(Dx RAM)
这是CPU专用的内存RAM,其他主机无法对其进行访问,在这颗芯片里其他主机指CLA或者DMA。有两个子类型,M0/M1,D0/D1,其中M0和M1是和CPU紧耦合的,CPU对它们的读写及取指不受限。
所有的CPU专用RAM都带有ECC校验
Local Shared RAM(LSx RAM)
这块内存区域是CPU和CLA共享的内存块,内存块带奇偶校验。
由于是共享内存块,CLA和CPU都能对其进行访问,那么关于权限控制就会复杂一些:
根据配置可将其改为CPU专用或者CLA专用,在CLA专用模式下,此内存区域变成CLA的编程区域,此时CLA从此区域取指,但是在仿真模式下,权限不受控。
Messgae RAM(MSGRAM)
用于CPU和CLA之间的消息传递。有两种类型的MSGRAM:
CLA to CPU
CPU to CLA
CPU和CLA对它们有不同权限:
Global Shared RAM(GSxRAM)
这个内存块是DMA和CPU之间的共享内存,访问权限控制如下:
访问仲裁
CPU访问优先级如下:
写入访问优先级最高
数据读取优先级次之
取指优先级最低
CLA访问优先级如下:
写入优先级最高
数据读取/取指优先级次之
内存保护机制
关于内存保护,其实说白了就是限制某个模块对内存进行权限访问。前面说了,对内存的访问有三种情况,数据读,数据写,以及取指,这里的内存保护机制就是对于某个RAM来说,限制模块对其的某种访问操作,即限制读、写或者取指。
取指保护
CPU的取指保护
限制CPU对特定内存的取指保护(对于紧耦合的M0/M1无此限制),当CPU对被限制取指的内存进行取指操作后,会生成一个不可屏蔽中断ITRAM(非法指令陷阱),且在访问冲突寄存器中有相应标志位置位,发生冲突的地址会被记录。
CLA的取指保护
CLA能够进行取指的情况,只有在将LSxRAM配置为编程内存的时候,所以如果将这个内存块配置为其他选项,在CLA对其进行取指时会导致MSTOP(指令,停止当前任务),在访问冲突寄存器中会有相应标志位置位,冲突地址被记录,如果使能中断,会向CPU发起中断请求。
写保护
CPU写保护
当CPU对被限制写入的内存进行操作后,写入操作无效,冲突寄存器标志位置位,地址被记录。
CLA写保护
对于LSxRAM来说,如果不将它配置为共享内存,那么对该模块的写操作无效,在冲突寄存器中有相应标志位置位,冲突地址被记录,如果配置中断,则会向CPU发起中断请求。
读保护
CPU读保护
多数的RAM块都不限制对其进行读操作,但是对于LSxRAM来说,当它配置为CLA的编程区域,此时只允许CLA对其进行取指,当CPU尝试对其进行访问后,冲突寄存器中相应标志位置位,发生访问冲突的地址被记录,如果配置中断,则会触发中断事件。
CLA读保护
对于LSxRAM来说,如果不配置共享内存,那么对它进行读操作以后,冲突寄存器中有相应标志位置位,冲突地址被记录,如果启用中断,会向CPU发起中断请求。
内存错误检测、纠错和处理
如果内存数据在某种未知原因下变化,该模块提供错误检测,以及纠错和处理机制。
错误检测
从内存中读取数据/取指时会进行错误检测,主要检测方式是奇偶校验和ECC校验,根据是否可纠正区分错误情况:
奇偶校验错误(不可纠正)
Single-bit数据ECC校验错误(可纠正)
Double-bit数据ECC校验错误(不可纠正)
地址ECC校验错误(不可纠正)
对于可纠正的内存错误,内存错误模块会自动纠正并将正确数据写入内存。
错误处理
对于可纠正错误,有计数器对其进行计数,当计数值达到阈值(可配置),如果该中断使能则会对CPU产生一个中断,发生错误的地址将会被锁定在对应寄存器。
不可纠正的错误将会生成一个NMI中断,错误地址会被锁定在相应寄存器并生成错误状态。
错误类型 状态标志 错误通知
可纠正错误 对应模块状态标志位置位,锁定地址 NMI中断
不可纠正错误 对应模块状态标志位置位,锁定地址 达到配置计数器阈值后生成中断
错误模式
在错误模式下,用户可以直接修改数据位,不修改校验位,从而注入校验错误,此模式用于自测试。
RAM初始化
由于从内存读取数据/取指会预先对RAM数据进行校验,所以如果对未初始化的内存块进行读取数据/取指,会校验错误,该模块提供了初始化操作,将RAM区域初始化为0并填入正确的校验值。