基于DSP的合成孔径雷达成像系统逆存储转置器设计
4.3 CPLD和HPI
ICTM模块各功能单元的电路状态、时序控制以及I/O接口控制都由CPLD完成。此外,通过C6415的主机接口(HPI)可以直接访问DSP映射管理下的所有片内和片外存储单元。因此,在电路设计中将DSP的HPI接口通过CPLD与系统控制总线相连,从而使主控能够直接访问DSP的HPI接口,进而满足处理程序实时下载和指令数据实时传输的要求。
ICTM模块的硬件设计充分考虑了结构化的设计要求,为合成孔径雷达实时成像处理系统提供了高性能的逆存储转置硬件平台,结合配置的控制软件就可以实现实时成像处理所需的逆存储转置功能。
5.软件设计与实现
TMS320C6415是面向C结构的DSP芯片,支持标准C/C++编程,其开发工具Code Composer Studio(CCS2.21)内嵌C编译器的编译效率可达汇编的85%。另外,C编程可提高DSP程序的可维护性、可移植性、可继承性,便于缩短软件开发周期,因此本DSP程序选择采用C语言编写。
图3 程序层次结构和模块划分
5.1软件模块划分
软件层次结构和模块划分如图3所示。DSP软件的主要部分是底层的四个功能模块,这四个功能模块分别完成以下操作:1. 从输入FIFO中读取两条方位线数据(每条方位线2048点,每点数据类型为短整型)到DSP内存中;2. 将读入的数据按顺序存储到SDRAM中;3. 把SDRAM中的数据沿距离线顺序读到DSP内存中,即完成转置操作;4. 把转置后的数据送至输出FIFO。
5.2软件各模块间关系
l 上电初始化模块:在DSP上电后,完成与硬件工作有关的各控制寄存器的初始化,以及与软件工作有关的各内部变量和存储区的初始化;
l 主处理模块:调用其它功能模块,完成整个逆存储转置流程;
l 数据输入模块:受主处理模块调用,利用EDMA完成数据输入;
l 写SDRAM模块:受主处理模块调用,利用EDMA完成数据写操作;
l 读SDRAM模块:受主处理模块调用,利用EDMA完成数据读操作;
l 数据输出模块:受主处理模块调用,利用EDMA完成数据输出。
5.3 C6415的EDMA控制寄存器
EDMA是C621x/671x/641x特有的数据存取方式。在C621x/671x/641x中,EDMA控制寄存器负责片内二级存储器与其它外设之间的数据传输。EDMA控制寄存器和DMA控制寄存器在结构上有很大不同。其增强之处包括:
l 提供了64个传输通道;
l 通道间优先级可设置;
l 支持不同结构数据传输的链接。
EDMA控制寄存器主要由事件(中断)处理寄存器、事件编码器、参数RAM以及硬件地址发生器构成。其中,事件(中断)处理寄存器负责对EDMA事件进行捕获。一个事件相当于一个同步信号,由它触发一个EDMA通道开始数据传输。如果多个事件同时发生,则由事件编码器对它们进行分辨,将同时发生的事件进行排序,并决定事件的处理顺序。EDMA的参数RAM中存放了有关的传输参数,这些参数会被送往硬件地址发生器,进而产生读写操作所需的地址。
5.4 ICTM软件设计流程
图4 ICTM软件设计流程
ICTM模块软件设计流程可用图4来表示。首先完成上电复位,初始化EMIFA和EMIFB配置寄存器、中断控制寄存器和EDMA控制寄存器,之后在主程序中完成各常量和变量的定义及初始化。完成上述初始化定义后就可以使能外部中断控制寄存器和EDMA控制寄存器,等待外部中断INT4的触发。INT4的触发源来自脉冲PRF,该脉冲的到来说明两条待输入的方位线数据已送至输入FIFO,此时CPU可以将这两条方位线数据读到DSP内存,并送至SDRAM的相应存储区。
由于输入/输出数据结构相对简单,读输入FIFO、写SDRAM、读SDRAM以及写输出FIFO四个过程可以采用"EDMA链(EDMA Chain)"的方式进行。即第一个EDMA传输完成后,紧接着启动第二个EDMA传输,直到最后一个EDMA传输完成,这样可以在不受CPU干预的情况下完成数据的搬移,有利于提高数据传输效率。
5.5 软件并行设计问题
由于EDMA不受CPU干预,因此在使用EDMA传输数据的同时,CPU可并行执行其它指令,这样可极大提高代码的执行效率。举例如下:
if(EDMA_intTest(22))
{
*ifoeoff=0;
EDMA_intClear(22);
EDMA_setChannel(hEdmaCha25);// trigger EDMA to reading data from SDRAM
#pragma MUST_ITERATE(32,,8);
for(i=0;i {
headwriteaddr[ i]=inputa[ i];
}
WORD_alignED(inputb);
WORD_alignED(inputc);
WORD_alignED(inputa);
#pragma MUST_ITERATE(64,,8);
for(i=0;i {
inputb[ i]=inputa[2*i+64];
inputc[ i]=inputa[2*i+65];
}
}
其中EDMA_setChannel(hEdmaCha25)语句用来启动EDMA25通道的传输,完成从SDR
- 基于DSP的合成孔径雷达成像系统的设计(07-09)
- 在采用FPGA设计DSP系统中仿真的重要性 (06-21)
- 基于 DSP Builder的FIR滤波器的设计与实现(06-21)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- FPGA的DSP性能揭秘(06-16)