基于ISA总线的ADSP2106x信号处理板的设计
内容导读:
基于ISA总线的ADSP2106x信号处理板的设计 中国科学院电子学研究所禹卫东吴淑梅 摘要ADSP2106x是AD公司推出的一种浮点系列高速DSP芯片。本文主要介绍在ISA总线上开发ADSP2106x信号处理板的设计原理。计算机通过ISA总线可以管理信号板的运行,完成高速信号处理的任务。 关键词DSP信号处理ISA总线 图1ADSP2106x内部结构框图一、 ADSP2106x介绍 ADSP2106x是Analog Device(AD)公司推出的一种性能先进的浮点系列高速DSP芯片,具有120MFLOPS的峰值运算能力。该速度在当今的DSP领域虽然不算很高,但ADSP2106x的综合性能却非常优异,这主要是由于它在片上各种资源的平衡和并行处理能力。它拥有大容量的片内双口SRAM:ADSP21060为4Mb(bit),ADSP21062为2Mb,可供主处理单元和外部接口同时读取。它的接口丰富,包括4GB(Byte)空间的外部存储器接口、6个Link接口、2个同步串行接口;片上还包含10个DMA通道和1个Host接口,大量的DMA通道使数据进出芯片灵活多样,畅通无阻\[1\]。最重要的是,ADSP2106x拥有非常强的并行处理能力,它片上集成的仲裁逻辑可使6片ADSP2106x和1个主机很方便地连接在一起并行工作,共享片内和片外资源,对于分布式处理系统非常适合。 ADSP2106x的内部结构如图1所示\[2,3\]。它主要由以下4个部分组成:主处理器、内部存储器、I/O处理器、外部接口。4个部分之间通过多条总线连接起来。 (1) 主处理器。它主要完成指令的存取和执行、数据的存取和运算。主处理器中包括指令执行单元、指令缓存器、2个地址产生器、通用数据寄存器和3个运算单元——乘法器、逻辑单元(ALU)、桶形移位器。 对于主处理器,由于其程序总线和数据总线分开,所以,取指操作和取数操作可以并行不悖,即所谓的哈佛结构。不仅如此,对于重复执行的指令,还可以被自动存入指令缓存器中,当再次用到时,不需要再从程序存储器中读取,这样就使程序总线解脱出来,可以用来进行数据存取操作。在这种情况下,主处理器可以同时从存储器中存取2个操作数。 主处理器从存储器获得的操作数先要被放入数据寄存器中,以供运算单元来存取;反之,运算单元处理后的结果也要通过寄存器才能存入存储器中。ADSP2106x有32个通用数据寄存器,其中16个工作在前台,16个为备用。 主处理器中的所有运算单元都只能从数据寄存器获得操作数,而不能直接从存储器中取数据;但在运算的同时,数据寄存器可以从存储器存取数据。 两个地址产生器分别产生24位(DAG2)和32位(DAG1)的地址,每个地址产生器包括8组寄存器。地址产生器都可工作于循环寻址方式,其中2组可工作于位反转方式。 (2) 内部存储器。内部双口存储器分为两块(Block0和Block1),可存放程序和数据。以ADSP21060为例,每块为2Mb,既可以设置成40K×48b程序,也可以设置成64K×32b或128K×16b的数据。如果是ADSP21062,则上述数值减小一半。双口存储器可供主处理器和I/O处理器同时读写,这使得ADSP2106x的运算和数据输入输出可以并行。 (3) I/O处理器。I/O口处理器包括256个IOP寄存器、10个通道的DMA控制器、2个同步串行接口和6个Link口。 IOP寄存器为存储器映射寄存器。通过IOP寄存器可以对ADSP2106x进行有关设置,控制操作DMA等。 DMA控制器可以在没有主处理器参与的情况下进行数据传输操作,不影响主处理器运算。DMA可以完成以下几种类型的数据传输: · 内部存储器外部存储器; · 内部存储器其它ADSP2106x的内部存储器; · 内部存储器主机; · 内部存储器串行口; · 内部存储器Link口; · 外部存储器外部设备。 同步串行口的工作频率可达到处理器的时钟频率,最大的数据传输率为40Mb/s。 6个Link口为ADSP2106x所独有的数据传输接口,它利用4根数据线和2根控制线来传输数据,最大工作频率可达到2倍的主时钟频率,即80MHz。6个Link口的最大数据传输率为240MB/s。 (4) 外部接口。外部接口包括外部地址总线、外部数据总线、主机接口和多处理器接口。在芯片外部,ADSP2106x只有1条48位的数据总线和32位的地址总线,所有的内部地址总线和数据总线通过多路开关合并为外部总线。 主机接口可以使ADSP2106x方便地与16位和32位微处理器总线连接。多处理器接口为ADSP2106x提供了强大的多片互连能力。通过片内的总线仲裁逻辑,6片ADSP2106x可以直接连在一起,共享外部存储空间以及相互存取内部存储器的数据。 二、 信号处理板的硬件结构 针对ADSP2106x的特点,我们开发了基于ISA总线的信号处理板,其硬件结构框图如图2所示。它主要包含2片ADSP21062、1个SHARCPAC接口(SHARCPAC是扩展ADSP2106x芯片数量的标准接口)以及ISA总线接口。 2片ADSP21062和SHARCPAC上的ADSP2106x既可以通过外部总线来共享或交换内部数据,也可以用互连的Link口(L0~L6)来传递数据,具有很大的灵活性;它们之间还通过标志信号线FLG和IRQ(中断)来进行同步或信息交换。信号处理板与外部的数据交换可通过2个输入输出口和4个Link口来实现。通过ISA总线接口,微机可以对板上所有的ADSP2106x进行程序加载、数据输入输出及有关控制。 图2方位信号处理板的硬件结构框图下面主要对信号处理板上的ISA总线接口进行详细介绍。 图3ADSP2106x与ISA总线接口电路原理框图三、 ISA总线接口 ISA总线与ADSP2106x的接口主要是通过控制寄存器0、控制寄存器1、地址总线寄存器、双向数据总线接口、状态寄存器、中断寄存器来实现的。它们都可通过计算机的I/O口来寻址,如表1所列,其中基址由板上的跳线来设定。 表1寄存器对应的I/O口地址 微机I/O地址〖〗属性〖〗位数〖〗对应寄存器基址+0x00〖〗读写〖〗8〖〗控制寄存器0基址+0x02〖〗只写〖〗8〖〗地址总线寄存器基址+0x04〖〗读写〖〗16〖〗数据总线接口基址+0x06〖〗读写〖〗8〖〗控制寄存器1基址+0x08〖〗读〖〗8〖〗板号寄存器基址+0x08〖〗写〖〗8〖〗中断寄存器基址+0x0A〖〗读〖〗8〖〗状态寄存器基址+0x16〖〗读、写〖〗8〖〗参数寄存器图3给出了接口控制电路的原理框图。控制寄存器0用来设置ADSP2106x的加载方式和复位;控制寄存器1可用来选择对板上的某一片ADSP2106x进行操作。地址总线寄存器用74374来实现;双向数据总线接口用74245来实现。这里,只对ADSP2106x的低8位地址寻址,对应ADSP2106x的I/O寄存器(前256个地址空间),但通过对IOP寄存器设置就可以完成对其它内存单元的寻址。这样就只需要8根地址线,大大减少了微机对ADSP21062寻址所需的地址线根数。另外,虽然ADSP2106x有48位数据线,但我们在ISA接口中只用了其中的16位(对应ADSP2106x的D16~D31)。通过设置ADSP2106x中的有关寄存器,ADSP2106x就可自动完成16位到32位或16位到48位的转换。 计算机与ADSP2106x间的数据通讯接口如图4所示。当计算机要写ADSP21062内部的IOP寄存器时,它首先向地址寄存器写入8位的IOP寄存器地址,然后把所需写入的数据写入数据总线接口即可。例如,计算机要向ADSP21062中的DMAC6寄存器(对应的IOP地址为0x1c)写入0x12345678,则在C语言中可这样做: 图4微机通过 ISA总线与ADSP2106x的通讯接口outpw (0x402, 0x1c); outpw (0x404, 0x1234); outpw (0x404, 0x5678); 当计算机要读ADSP21062内部的IOP寄存器时,它首先向地址寄存器写入8位的IOP寄存器地址,然后从数据总线接口中读入数据即可。例如,如果计算机要读取ADSP2106x中MSGR0寄存器(对应的IOP地址为0x08)的内容,则操作如下: outpw (0x402, 0x08); low=inpw (0x404); high=inpw(0x404); 变量low和high中分别得到MSGR0的低16位和高16位。 每当计算机读写数据总线接口时,译码电路都要产生HBR信号,来通知ADSP2106x的Host接口。Host接口产生应答信号HBG,用来选通数据和地址寄存器的输出。 四、 计算机通过ISA总线 与信号板通讯应用实例根据前面的设计原理,我们给出计算机通过ISA总线与信号板通讯应用的实例。首先考虑用计算机向信号处理板上的ADSP2106x加载执行程序。假设需要加载的程序为test.ldr,ISA接口的基址为0x400,则其C语言加载程序如下: #include “def21060.h” /*定义有关ADSP2106x的寄存器地址 */ main( ) { outpw(0x400,0x1); /*通过对控制寄存器0设置,对ADSP进行复位 */ outpw(0x400,0x19); fp=fopen("test.ldr","r"); /*打开需要加载的程序文件设置ADSP21062的 DMA操作 */ outpw(0x402,II6); outpw(0x404,0x0); outpw(0x404,0x0); outpw(0x402,IM6); outpw(0x404,1); outpw(0x404,0); outpw(0x402,C6); outpw(0x404,0x100); outpw(0x404,0); outpw(0x402,DMAC6); outpw(0x404,0xA1); outpw(0x404,0); outpw(0x402,EPB0); while(!feof(fp)) { fscanf(fp,"%x",&a);/*开始下载执行程序 */ outpw(0x404,a); } fclose(fp); } 在该程序中,计算机通过设置ADSP2106x中DMA6的控制参数(II6,IM6,C6,DMAC6),然后向ADSP2106x外部寄存器接口EPB0写入数据,来实现加载过程。 第二个程序例子是把数据d\[1024\]通过DMA通道6加载到ADSP2106x内存0x26000 ~0x263ff中,其C语言实现如下: #include "conio.h" #include "def21060.h" /* ADSP I/O寄存器地址定义文件 */ #include "stdio.h" #define ADDR 0x402 /*定义ADSP地址线对应的ISA总线I/O口地址 */ #define DATA 0x404 /*定义ADSP数据线对应的ISA总线I/O口地址 */ main( ) { int n, d\[1024\]; /*设置ADSP中DMA通道6的地址\ 计数寄存器及控制寄存器 */ outpw(ADDR,II6);/*寻址起始地址寄存器 II6 */ outpw(DATA,0x6000);/* 设置II6的低16位 */ outpw(DATA,0x2);/* 设置II6的高16位 */ outpw(ADDR,IM6);/*寻址地址增加寄存器 IM6 */ outpw(DATA,1);/* 设置IM6的低16位 */ outpw(DATA,0); /* 设置IM6的高16位 */ outpw(ADDR,C6);/*寻址计数寄存器 C6 */ outpw(DATA,1024);/* 设置C6的低16位 */ outpw(DATA,0); /* 设置C6的高16位 */ outpw(ADDR,DMAC6); /*寻址DMA控制寄存器 DMAC6 */ outpw(DATA,0x41); /* 设置DMAC6的低16位 */ outpw(DATA,0);/* 设置DMAC6的高16位 * /*ADSP的DMA通道6设为16/32位模式,并开启就绪,等待微机传数*/ /*微机向DMA通道6的数据缓存器EPB0中连续写入数据d\[.\] */ outpw(ADDR,EPB0); /*寻址DMA通道6的数据缓存器EPB0 */ for(n=0;n<1024;n++) { outpw(DATA,d\[n\]);/*写数据d\[n\] */ outpw(DATA,0);/* 高16位写0*/ } } 从上面的两个例子可以看出,计算机与信号处理板的通讯主要是通过DMA方式进行的。这一方面是由于在ISA接口设计中,只对ADSP2106x的I/O寄存器地址寻址,而无法直接对其他地址单元存取;另一方面DMA操作效率高,不占用主处理单元的时间,很适合大容量的数据存取。 结束语 本文首先对ADSP2106x芯片进行了较为详尽的介绍,然后给出了基于ISA总线的信号处理板的设计原理,并主要介绍了ISA总线接口的实现,最后给出了计算机与信号处理板通过ISA接口具体通讯的程序例子。MES 参考文献 1禹卫东,吴淑梅. ADSP2106x中DMA的应用.电子技术应用,2000,26(6) 2吴淑梅,禹卫东. ADSP2106x信号处理板的开发设计. 电子技术应用,1999,25(12) 3Analog Devices,Inc. ADSP2106x SHARC User’s Maunal.First Edition.1995
标签:
来源:单片机与嵌入式系统应用 作者:中国科学院电子学研究所 禹卫东 吴淑梅 时间:2006/2/12 0:00:00