2.3.1 程序存储器
1.片内程序存储器控制器
程序存储控制器在TMS320C62x/C67x DSP结构中的位置如图2-16所示。主要完成以下功能:
● 对CPU或DMA提交的访问内部程序存储器的请求进行仲裁;
● 对CPU提交的通过外部存储器接口访问外部存储器的请求进行处理;
● 当内部程序存储器设置为Cache时进行维护。
2.片内程序存储器
TMS320C6201/C6204/C6205/C6701的内部程序存储器可以由用户配置为Cache或存储器映射的程序空间,如图2-17所示。它包括64KB RAM,或与之相当的2K个256位的取指包或16K个32位的指令。通过程序存储控制器,CPU具备单周期的吞吐量,通过256位宽与内部程序空间相连。
图2-17 TMS320C620x的内部程序存储器
TMS320C6202(B)/C6203(B)的程序Cache空间提供了另一种以存储器映射块为操作方式的块存储模式,两块程序存储区可以独立访问。允许对一个存储区进行程序取指的同时在另一个存储区进行DMA访问,如图2-18所示为TMS320C6202B/C6230(B)内部程序存储器与控制器。
图2-18 TMS320C6202B/C6203(B)内部程序存储器与控制器
(1)内部程序存储器模式
内部程序存储器的Cache映射块可以通过设置CPU控制状态寄存器的PCC位,使其工作在以下4种模式。
① 存储器映射模式。在映射模式下,程序通过对内部程序存储器的Cache映射块的地址进行取指来得到该地址的取指包,在其他模式下CPU访问该地址范围将得到未定义的数据。存储器映射模式为内部程序存储器复位后的默认模式。CPU不能通过数据存储器来访问内部程序存储器。
② Cache使能模式。在Cache使能模式下,最初对任何地址的程序取指都将引发Cache缺失,发生Cache缺失时首先通过外部存储器接口读出需要的取指包,并以每个指令周期32位指令的速度存入内部中。读出取指包的过程中,CPU被挂起。期间CPU等待的时间取决于外部存储器的类型,该存储器的状态及EMIF当时是否正被DMA控制器或CPU数据访问的其他设备占用等。任何对已经缓存的取指包的访问都将会引起Cache命中,这时Cache中的取指包通过内部程序存储器立即送入CPU,不再需要等待,由存储器映射模式变为Cache使能模式时,程序Cache将自动冲洗,这也是冲洗Cache的唯一方式。
③ Cache冻结模式。在Cache冻结模式下,Cache当前状态将保持不变。程序读冻结模式Cache与程序读使能模式Cache相比,唯一不同的是,发生缺失时,从EMIF读出的指令包不会同时存入Cache,Cache冻结模式可以保证Cache中的关键代码不会被置换掉。
④ Cache迂回模式。在Cache迂回模式下,任何指令包都将从外部存储器中读取。数据不存储到Cache中,与Cache冻结模式一样,Cache同样保持当前状态不变。迂回模式可以确保仅从外部存储空间中取指令。
(2)存储器映射
当CPU控制状态寄存器的PCC位被设置为映射模式时,所有的内部程序RAM映射到内部程序空间。在映射模式下,CPU和DMA都能访问RAM的全部空间,任何对RAM外部地址空间的访问都将由EMIF来控制。如果CPU和DMA试图在同一时间对RAM的同一块地址进行访问,DMA将等待CPU完成其相应块的访问。在CPU访问完成后DMA方可对该RAM进行访问。
TMS320C62x/C67x和TMS320C64x DSP的存储器映射参见表2-12和表2-13。TMS320C6000 DSP的存储地址空间为4GB。TMS320C6201/C6202/C6701有MAP0和MAP1两种存储器映射方式。MAP0为片外存储器,位于地址空间为0的空间;MAP1为片内存储器,位于地址空间为1的空间。TMS320C6211仅有一种映射方式,片内存储器位于地址空间0处,可以当做程序存储空间或者数据存储空间。
表2-12 TMS320C62x/C67x DSP存储器映射
表2-13 TMS320C64x DSP存储器映射
TMS320C6201/C6701的存储器映射方式通过BOOT MODE[4:0]引脚设置,同时BOOT MODE[4:0]也决定了复位后芯片的引导方式。TMS320C6202没有这5个引脚,取而代之的是将扩展数据总线XD[4:0]映射为BOOT MODE[4:0],这些引脚可以通过电阻上拉或下拉设置引导方式和存储器映射方式。TMS320C6211仅有一种存储器映射方式,引导方式只需要2位进行设置,主机口的HD[4:3]映射为BOOT MODE[4:0],同样通过电阻上拉或下拉设置引导方式。TMS320C6411只有一种引导方式,通过对器件配置引脚BOOT MODE[1:0]设置引导方式。类似的TMS320C6414/ TMS320C6415/ TMS320C6416也只有一种存储器映射方式,通过对EMIF外部地址总线的BEA[19:18]设置引导方式。
(3)CPU地址Cache解析
如图2-19和图2-20说明了TMS320C6201/C6204/C6205/C6701和TMS320C6202B/C6203B Cache如何解析CPU的取指包地址。
图2-19 TMS320C6201/C6204/C6205/C6701 Cache逻辑地址映射
图2-20 TMS320C6202B/C6203B Cache逻辑地址映射
① 取指包固定偏移:这5个LSB位固定为0,用来满足程序取指时总能取8条32位指令包的边界。
② 快偏移标记:对TMS320C6201/C6204/C6205/C6701来说,任何外部地址映射在一条2KB的行中。任何两条被64KB的整数倍分离的取指包映射在同一行中。因此CPU地址中的位15:5产生11位的块偏移,从而决定特定的取指包映射为特定的2KB行。
对TMS320C6202B/C6203B来说,任何外部地址映射在一条4KB的行中,任何两条128KB的整数倍分离的取指包映射在同一行中,因此CPU地址中的位16:5产生12位的块偏移,从而决定特定的取指包映射为特定的4KB。
③ 标记:Cache被设定在最大的64MB的外部地址空间(0000 0000h~03FF FFFFh)。地址中的对应位的标记决定了外部存储器空间的取指包的最初位置。例如,
● 对于TMS320C6201/C6204/C6205/C6701,对应位25:16。Cache中另外有一个独立的2KB×11的标记RAM。
● 对于TMS320C6202(B)/C6203(B),对应位25:17。Cache中另外有一个独立的4KB× 10的标记RAM。每个位标记RAM的地址包含其标记,加上一个有效位用来记录合法的行信息。
(4)DMA对程序存储器的访问控制
当片内程序RAM设置为映射模式时,DMA控制器能够对内部程序存储器进行读/写操作。在对内部程序存储器进行访问时,如果忽略DMA通道的PRI位的值,CPU的优先级总是高于DMA的,DMA的访问被延缓到CPU停止发送访问请求。在进行DMA访问过程中,为了避免在仲裁之后丢失更多的请求,CPU在每个DMA控制器对相同程序存储块进行读取的过程中,存在一个指令周期的等待间隔。在Cache模式下,如果DMA控制器访问该区域,DMA控制器中有关的标记信号将保持为请求已完成的状态,写操作会被PMC忽略,而读操作将返回一个未定义的值。