多片TSl01S的加载引导设计分析及实现
扫描二维码
随时随地手机看文章
摘要:详细分析了美国ADI公司的TigerSHARC系列数字信号处理器ADSP-TSlOlS的引导方式,给出了用多卡TSl01S在某雷达信号处理机系统中进行加载引导的硬件以及软件设计方案。
关键词:ADSP-TSl01S;引导方式;VisualDSP++;EPROM引导
0 引言
ADSP-TSlolS数字信号处理器是美国ADI公司推出的TigerSHARC系列中的一款具有极高性能的静态超标量处理器,该处理器已专为大信号处理任务和通信应用进行了结构上的优化,因而具有非常宽的存储器带宽和双运算模块(支持32 bit浮点和8、16、32、64 bit定点处理),其芯片内部的时钟频率最快可以达到300 MHz。而其静态超标量结构则使ADSP-TSl01S每周期能够执行多达4条指令、24个16 bit定点运算或6个浮点运算。
TSl01S内部有三条相互独立的128 bit数据总线,每条可连接三个2 M bit内部存储器bank中的一个,总共可提供12 Gbytes/s的内部存储器带宽。
1 自动引导方式
ADSP-TSl01S的引导方式通常由复位时管脚的电平高低决定。在复位时,若其输入管脚的电平为低,则设置为EPROM引导方式。对于这种方式,在信号无效后,信号就成为输出信号,并作为EPROM的片选信号;如果其为高,ADSP-TSlOlS将处于空闲(IDLE)状态,此时它将等待外部主机或链路口来引导。总的来说,ADSP-TSlOlS有四种引导方式。
1.1 从EPROM引导
ADSP-TSlOlS默认为EPROM加载模式。AD-SP-TSlO1S一般被自动配置为通过外部端口,并利用DMA通道O从片外8位EPROM装载32 bit程序到片内存储器的Ox00~0xFF,并将byte型数据自动打包成32 bit指令,其DMA传送完成的中断向量将在复位后被初始化为Ox00000000。EPROM存储器空间则不被映射到DSP的统一存储空间,即引导完成后,就与整个系统无关。其寻址空间被限定为最大16 Mbytes。
1.2 从外部主设备引导
任何共享簇总线上的主设备都能够通过外部端口,并通过写它的内部存储器或自动DMA的方式引导ADSP-TSlO1S。
l.3 从链路口引导
ADSP-TSlO1S的四个接收链路的DMA在复位后均将被自动配置为接收32 bit到内部存储器的Ox00~0xFF,相应的DMA传送完成的中断向量则可在复位后被初始化为Ox00000000。从链路口引导有时也叫做链路加载。
1.4 无引导
ADSP-TSlO1S在复位启动后,一般将自动从存储空间的某个地方开始执行,即通过在复位后使能中断请求信号来实现DSP启动。
2 多片TSl01S系统程序加载的硬件设计
采用单片FLASH结合TSlOlS的链路口加载方式,可以实现多ADSP-TSlOlS系统的程序加载。该方式只需要一片较大容量的FLASH,而不需要辅助逻辑,便可实现多ADSP-TSlOlS系统的程序加载,而且多ADSP-TSlOlS之间可通过链路口相连,因而大大降低了系统的设计复杂度。
图1所示是某雷达信号处理机的系统加载硬件框图。其中第一片ADSP-TSl01S按照正常的FLASH加载方式与FLASH相连,用来负责其余几片TSl01的加载工作。此外,第一片ADSP-TSlOlS还将LINK0口和UNK3口分别与DSP2以及DSP4相连,同样,DSP4的UNK2口以及DSP2的LINK0口也分别与DSP3的UNK2以及UNK3相连。具体的链路口之间的互联可根据需要灵活设置。
[!--empirenews.page--]
具体加载时,首先应由DSPl通过FLASH程序加载方式进行程序加载。即在DSPl程序加载完毕后,由DSPl再从FLASH中读出第二片,使DSP2(或者DSP4)的程序通过链路口。之后,再采用路口加载方式加载DSP2(或者DSP4),DSP1在等待DSP2加载完毕后,又从FLASH中读取DSP3的程序,并将DSP3的程序通过链路口DMA方式发送到DSP2(或者DSP4)中,而DSP2(或者DSP4)在收到第三片DSP3的程序后,同样通过链路口加载方式加载DSP3;……以此类推,直到完成所有的ADSP-TSlOlS的加载。
采用这种结构的多ADSP-TSl01S系统,应将每片ADSP-TSl01S的程序分开放置在FLASH的不同的地址段中。第一片ADSP-TSlOlS的程序存放在FLASH的从0开始的第一段地址中,第二片ADSP-TSl01S存放在接着第一段地址后面的第二段地址空间中,第三片ADSP-TSlOlS存放在接着第二段地址后面的第三段地址空间中……以此类推。就可将不同的ADSP-TSl01S的程序放置在相应的地址空间中。但应该注意的是,每一片AD-SP-TSl01S程序存放的实际地址必须是16的倍数,因为ADSP-TSl01S的链路口每次必须传输4字(4*32 bits),而FLASH是8位的,所以每次将读取128位的程序代码,即16个FLASH的地址数据。图2所示是多ADSP-TSl01S的程序在FLASH中的存放情况。
本设计中,FLASH选用的是Atmel公司的AT49BV322D,并将其设置成4 M×8模式,因此,其byte管脚需要拉低,具体和DSP之间的硬件接
口电路如图3所示。
TigerSHARC处理器可支持8位、16位、32位、64位配置,这为不同类型的外部存储器接口带来了方便。选择FLASH器件实现系统加载的时候,使用TigerSHARC处理器向FLASH中执行写操作,不会自动把数据打包成字节,因此,当给FLASH写一个字时,这个字将驱动到外部总线[31:0]上。而FLASH存储器只连接TigerSHARC外部数据总线的低8位,因此只写入数据最低的一个字节,其数据的预备格式如图4所示。
3 自动引导的软件设计
由于采用EPROM和链路口相结合的方法来进行多DSP的程序加载,所以,除了最后一片DSP (DSP3)外,均要在没一个DSP程序的开始地方添加链路口加载程序。在VisualDSP++安装目录的ldr子目录下,ADI公司提供了标准加载核文件及相应的源程序(.ASM),同时也给出了链接描
述文件。一般可直接使用提供的标准加载核文件或对其相应的源程序进行简单修改(修改当前的DSP的接收链路口号即可),重新编译链接生成所需的加载核文件。
由于ADSP-TSl01S有三种引导方式(不考虑无引导方式),ADI公司相应的提供了三种不同的加载核文件 (分别为TSlOl_prom.dxe、TSlOl_ link.dxe、TSlOl_host.dxe)。这三个程序的核心思想和功能完全一致,只是由于使用的加载端口和方式不同,其在具体代码实现上稍有差异。综合以上的分析可以看出:ADSP-TSlOlS的复位引导从本质说包括两个方面:其一是在生成加载文件时,在起始部分额外增加256字的加载核文件;其二是在复位结束后,按照设定的引导方式的不同,自动从相应接口接收256字的代码(实际就是加载核文件)到内部存储空间的0x00~0xFF,并在完成这一接收过程后,从内部存储空间的0x00000000开始执行程序(实际就是执行加载核文件),最终由加载核文件来完成整个可执行程序的加载。
TigerSHARC只有在运行了加载核代码后才能继续加载用户程序。但是,加载核文件并不会永远占据内部存储空间的0x00~0xFF,因为加载核文件执行到最后会自动完成自身的覆盖。
本设计是由四片TSl01级联的方式来构成多处理器系统,除了第一片DSP(DSPl)选择默认的EPROM加载外,其余的三片DSP都要选择LINK加载。同时,对于第一片DSP来说,先转发DSP2还是DSP4的程序是等价的,因为DSP2和DSP4本身在本设计中是等价的,都属于第二级DSP,而DSPl属于第一级,DSP3属于最后一级。同理,把DSP3作为谁的附属DSP均可以,因此不妨作为DSP4的下一级(本设计中采用这种连接方式)。第一片TS10l需要通过链路口来对第二和第三级的ADSP-TSl01S进行程序加载,同时需要在第一级的应用程序之前添加加载后续DSP的加载程序。[!--empirenews.page--]
由于每一片DSP的程序都是由加载码和用户代码组成的,所以,在第一片DSP给第二和第三级加载程序时,应该把加载码和用户程序分开传输。图5所示是第一片DSP的程序流程图。
由于DSP3是作为DSP4的下一级DSP进行加载的,所以,在DSP4中也要添加为第三级DSP转发加载码的程序代码。第二片DSP (本设计中为DSP4)加载第三片DSP(本设计中为DSP3)的程序流程图如图6所示。
需要注意的是,每片ADSP-TSlOlS在给后面的ADSP-TSlOlS进行程序加载时,都需要预先计算好后面的ADSP-TSl01S程序的长度,在进行用户程序传输时,需要用到这个值。因此,如果这个值计算错误,则将会引起ADSP-TSl01S程序加载的错误。
4 结束语
如果在系统中没有使用SDRAM,则只需对ADI提供的标准加载核源程序进行少量修改,然后重新编译链接即可使用。而如果系统中有SDRAM,还需在标准加载核源程序的起始处加入对SDRAM的初始化。