Scientific Journal of Control Engineering August 2013, Volume 3, Issue 4, PP.282-287
Design of Multi-Processor Loading System Based on the FPGA and DSP Signal Processing Board Junshan Gao†, Shan Lu, Xiao Xiao School of Automation, Harbin University of Science and Technology, Harbin 150080, China †Email:
junshangao@hrbust.edu.cn
Abstract Underwater acoustic signal processing system mostly adopts multi-processor structures due to its requirement for real-time data processing and large amount of data processing. The way of the multi-processor loads and time series are carefully designed concerning the loading stability and configuration of loading data storage while power is on. This paper describes a multiprocessor loading method based on FPGA associated with DSP architecture to deal with system’s electrified sequence loading, loading method of each processor, storage of loaded code, data flow mode and other aspects. Dynamic configuration on FPGA and DSP has been realized, and the system stability is enhanced. It also omits configuration of specific FLASH chip under the application of FPGA or other processors by coordinating system resources. Keywords: Multi-Processor; Loading; FPGA, DSP; Memory Cyclical Multiplexing
基于 FPGA+DSP 的信号处理板多处理器加载设计 高俊山,芦山,肖逍 哈尔滨理工大学 自动化学院,黑龙江 哈尔滨 150080 摘 要:水声信号处理系统,因需实时处理数据,处理数据量大等需求,多采用多处理器协同的结构。因其上电加载稳定 性和配置加载数据存储方案的考虑,需对多处理器加载时序,方式进行设计。该文采取了一种基于 FPGA+DSP 构架的多 处理器加载方法。对系统上电加载时序,各处理器加载方式,加载代码的存储,数据流向等方面进行了设计。实现 FPGA,DSP 的动态配置和加载,提高了系统稳定性,省去 FPGA 等处理器专用配置 FLASH 芯片,分利用了系统资源。 关键词:多处理器;加载;FPGA,DSP;内存循环复用
引言 水声信号处理平台控制系统主要有 FPGA+DSP 结构组成。主要工作是获取海底浅地层地质结构,海底形 态的声成像等测量数据,实时处理并上传结果。因其需工作频率快,处理数据大等需求,单一处理器已不能 满足处理速度和功能要求。所以需采用多处理器协同结构。但由于多处理器同时上电瞬间以及极端工作环境 下,会带来电源不稳定容易导致加载比特流错误,从而加载失败。另外,通常 FPGA 和 DSP 都采用外部专用 的 EPROM 或 FLASH 用于加载配置。需要多片存储芯片用作程序存储器。这样设计既提高成本,又占用了 宝贵的 PCB 空间。 为了避免上述问题,本文对系统处理器加载时序和加载方式进行设计。首先通过以太网接口上传 DSP 主 控程序,FPGA 配置程序,协 DSP 程序到主控 DSP 外部 RAM。并分别通过程序在线烧写的方法烧写入 FLASH 的特定地址。在系统上电后,主 DSP 以并行 FLASH 模式从 FLASH 的 0x0 地址加载初始化程序,随 后 DSP 主控程序运行 FPGA 加载模块,调用 Flash 中存储的 FPGA 代码进行动态加载,以从并模式实现 FPGA 配置。FPGA 配置完毕后,由主控 DSP 控制协 DSP 电源模块工作,协 DSP 上电。FPGA 配合主 DSP 运 - 282 http://www.sj-ce.org/
行加载模块,调用 FLASH 中存储的协处理器代码,实现协 DSP 复位,并以 EPROM 模式加载程序代码。该 方法实现了处理器顺序上电,且充分利用了系统资源。
1
系统构架及实现 结构及数据流向框图如图 1 所示,控制系统主要有 VC 数据传输控制界面。主 DSP(ADSP BF547),
FPGA(xilinx XC6SLX75),协 DSP(ADSP TS101),以太网(W5300),NOR FLASH 存储器,外部 DDR SDRAM 等组成。程序主要有,DSP 烧写工程 FLASH.dpj,主 DSP 主程序 BF547.dpj,FPGA 工程 FPGA.ise,协 DSP 程序 TS101.dpj,传输显控软件 Panel.exe。系统加载主要实现步骤为: 主DSP主 控程序工程 BF547.dpj
以太网 W5300
BF547.ldr
VC传输显 控软件 FPGA.hex Panel.exe
FLASH 重新上电
FPGA工程 FPGA.ISE
协DSP工程 TS101.dpj
TS101.ldr
BF547 FLASH 烧写程序
上位机 BF547
TS101
协DSP工程 TS101.dpj
BF547 FPGA TS101 代码区 代码区 代码区
BF547主程序 BF547.dpj FPGA配置模 块和TS101加 载模块
FPGA工程 FPGA.ISE
以太网 W5300
DDR SDRAM
TS101
NORFLASH
BRAM
TS101 协DSP工程 TS101.dpj
FPGA
DDRSDRAM
BF547
FPGA TS101
图 1 结构及数据流向框图
BRAM
图 2 TS101 加载结构图
(1)基于 W5300 以太网通讯接口设计 VC 传输显控软件和 BF547 FLASH 烧写程序工程,并设计通讯数 据包头格式。实现主 DSP 程序 BF547.ldr,FPGA 配置程序 FPGA.bin,协 DSP 程序 TS101.ldr 数据上传至 BF547 的外部存储器 DDR SDRAM。经解析数据包后,根据 FLASH 特点,烧写数据至指定地址。按照烧写 操作步骤,首先擦除 FLASH 相应块,然后根据烧写时序及命令操作要求,烧写数据到相应块。因为上电 后,BF547 以起始地址为 0x20000000 加载程序时,才可正常启动,所以 BF547 必须以 0x20000000 映射 FLASH 的起始地址,并以之为 BF547.ldr 工程数据烧写首地址。 (2)当系统重新上电,主 DSP BF547 启动片上 BOOT ROM 中 BOOT 内核,并以 0x20000000 为起始地 址加载 BF547 主程序数据。实现以并行 FLASH 方式加载 BF547 程序。 (3)当主 DSP BF547 初始化结束时,程序运行 FPGA 加载模块,BF547 调取 FLASH 中 FPGA 配置代 码,以 slave selectMAP 模式,按照时序控制要求,实现代码流加载至 FPGA。等待 DONE 信号拉高,FPGA 配置完成。 (4)本系统中因设计需要,需采用两片 TS101,如果每一片处理器都配置 FLASH 用作加程序存储器, 无论从芯片加载顺序控制,板上空间和布线设计和成本等方面考虑,这样设计都显示出其不合理性。为了解 决这个问题,本系统选择在 FPGA 中开辟两块大小为 64K 字节的双端口 RAM 分别作为两片 TS101 与 BF547 共用的数据缓存区。用作缓存 TS101 加载代码。如图 2 所示。当 FPGA 配置完成后,BF547 运行 TS101 加载 模块,读取其 FLASH 中 TS101 加载代码写入缓存区。由 BF547 控制两片 TS101 上电和复位。开始执行启动加 载,在 FPGA 设计中采取了内存循环复用的方式,使 TS101 读取加载代码,同时 BF547 写入新的代码,循环 读写双口 RAM。因 BF547 写速度快于 TS101 读取速度,这样设计可以保证 TS101 连续不断的读取加载代码。
2
数据传输方式设计 通过 FPGA 设计套件 Xlinx ISE 输出的 FPGA.bin 文件和 DSP 设计环境 VisualDSP++输出的 BF547.ldr,
TS101.ldr 文件均为不含头信息的文件,可直接进行烧写。VC 传输显控软件通过以太网接口传输工程数据至 - 283 http://www.sj-ce.org/
以太网芯片。 BF547 在上电后进行以太网初始化,设置 socket 通信协议为 TCP 服务器模式。执行打开 socket 命令,这 时 socket 进入监听状态。待 VC 传输显控软件发送连接请求数据包后,进入 socket 建立状态,这时 BF547 已 准备好。待 VC 显控软件传输命令或数据。为了更好的实现程序代码准确、快速的上传,区分数据代码和命 令代码。本文设计了传输数据格式。在每一包数据的包头部分加入指定长度的命令信息,其中包括命令代 码,传输数据长度,存储地址等信息。如图 3 所示。BF547 接受并解析数据包后,执行擦除 FLASH 命令, 缓存数据至 DDR SDRAM,并按数据包头中包含的存储地址,代码数据长度等信息烧写数据至 FLASH。 Block 0 header
0x55aa
OFFSET 0x0000
包长度
OFFSET 0x0002
命令标识符
OFFSET 0x0004
存储地址高
OFFSET 0x0006
存储地址低
OFFSET 0x0008
Block 0 data Block 1 header Block 1 data „„„
代码数据长度 OFFSET 0x000a
图 3 FLASH 烧写命令数据包格式
3
并行 FLASH 模式实现 BF547 程序加载 BF547 有 4 个专用的输入引脚“BMODE0~3”,用来定义 16 种启动模式。其中并行 FLASH 方式启
动,原理简单,易于实现,且运行稳定。本系统设置 BMOD1~3 引脚接地,BMOD0 引脚接 3.3V 电源,即 BMOD[3:0] 为“0001”,既外部并行 FLASH 启动方式。将 BF547 的 AMS0 于 NORFLASH 的片选 CE 连 接,使得 FLASH 首地址映射为 BF547 的 0x20000000。 应用程序文件 BF547.ldr 是以特殊定义的启动码流形式存放在 FLASH 中,当系统上电启动,复位操作 结束后,处理器以 0xEF000000 为起始地址的片上 BOOT ROM 执行启动代码,BOOT ROM 包含一个 BOOT 内核,当执行至 BOOT 核时,首先从以 0x20000000 为起始地址访问 FLASH 存储器。读取启动码流最开始 的 8 个字节,内核通过分析包含在这 8 个字节中的 DMACODE 位来确定 DMA 通道的宽度和步长。一旦 DMA 的配置完成后,启动码流将以子块为单位进行读取。启动代码根据每块数据头信息中的目标地址和子 块长度将启动码流的每个子块传输到指定的存储器位置。当所有的块传输完成后,启动代码会自动跳转到 应用程序的起始地址开始执行,默认的地址是 0xFFA00000。
4
FPGA 配置模块设计 Xilinx spartan6 系列 FPGA 的配置文件下载模式有五种,分别是主串模式(master serial),主并模式(master
selectMAP),从串模式(slave serial),从并模式(slave selectMAP),调试模式(JTAG)。本系统中 FPGA 作为协处 理器,需考虑加载的时序控制,易于控制加载过程等角度,选择从并模式。 电路中主要使用配置时钟 CCLK;配置逻辑异步复位 PROG;状态信号 INIT;配置完成指示 DONE,片 选输入信号 CSI,写允许信号 WRITE;配置数据总线 D15~0 等信号进行控制;其中配置数据总线通过与 DSP 专用异步存储器数据总线连接实现。CCLK 与 DSP 的异步存储器接口 AWE 信号连接,CSI 与 DSP 异步 存储器片选信号 AMS1 连接(AMS1 对应选择 FPGA),其它信号通过 GPIO 实现。FPGA 配置模式引脚 M1 接上拉,M0 接地,既设置为从并模式。其配置电路如图 4。配置的主要过程如下: (1)清空配置存储器 配置 FPGA 时,首先将 PROG 引脚置低电平(至少 40us),此时 INIT 信号将自动被置低电平,同时 FPGA 清空配置存储器。随后置 PROG 信号高电平,等待 INIT 信号变高,存储器清空结束。 (2)加载配置数据 - 284 http://www.sj-ce.org/
首先拉低 WRITE 信号,DSP 直接读取 FLASH 中 FPGA 配置数据发送至 FPGA 映射首地址。执行此操作 时,BF547 片选 FPGA,CSI 被拉低。随之产生 AWE 写脉冲信号(低有效)。数据在 AWE 低电平时以保持 稳定,随后 AWE 变高,CCLK 随之置高。在 CCLK 上升沿时数据写入 FPGA。如此反复,直到所有配置数 据写入 FPGA。在加载数据过程中,嵌入到配置文件中的校验和 CRC 与 FPGA 计算值比较,若有 CRC 校验 错误产生,INIT 脚电平被置低,FPGA 停止加载,因此在程序中每发送一个比特数据都要监测 INIT 脚状态, 如果电平为低则重新进行配置。 (3)等待配置完成 数据加载完毕后。继续写数据“0”,以产生足够多 CCLK 时钟,等待 DONE 引脚被置高。当 DONE 置 高后,随后拉高 WRITE 信号,FPGA 从配置状态转入到运行状态。此时继续给 FPGA 送出若干 CCLK 时钟, 可保证 FPGA 正式进入用户模式。具体配置流程如图 5。
开始 置PROGRAM低电平
3.3V 3.3V 3.3V 3.3V 3.3V
发送配置时钟
延时40us
20K 20K 20K 20K 20K
Y
置PROGRAM高电平
GPIO1 GPIO2 GPIO3 BF547 GPIO4
PROGRAM INIT WRITE
AWE D15-0
图 4 配置电路图
5
N
N
INIT=1
DONE FPGA 3.3V CSI M1 CCLK M0 DIN
AMS1
DONE=1 置WRITE高电平
Y
置WRITE低电平
FPGA配置成功
加载配置数据 Y
N
INIT=0
图 5 FPGA 配置流程图
TS101 加载模块设计 按以上设计,两片 TS101 都采用相同的加载方式, 即采用 EPROM(FLASH)方式。当系统上电首先加载
BF547 代码和 FPGA 逻辑,然后 BF547 控制 IO 输出高电平给 1.2V 电源模块,作为 TS101 的内核电源上电, 经过一定延时后 BF547 控制 IO 输出高电平给 3.3V 电源模块,TS101 的外设电源上电。BF547 控制 IO 拉高 RESERT 引脚,使其一直在无效状态,同时拉底 BMS 引脚。BF547 通过 DMA 方式读取 FLASH 中 TS101 加 载代码,存放至外部存储器 DDR SDRAM 中。在 FPGA 逻辑中设计双端口 RAM 为主 DSP 和协 DSP 共用缓 冲数据区,缓存区设计大小为 64K 字节,并编号 A, B, C, D,4 个连续的块,每块大小 16K 字节。如图 6 所 示。设置 DMA 方式搬运 DDR SDRAM 中 TS101 加载代码至共用缓存区,每次 16K 字节至缓存区,首先执行 4 次命令,存满共用缓存区。 这时 BF547 控制下拉 TS101 的 RESET 引脚,使其进入复位状态。当 TS101 进入复位状态,首先检测 BMS 引脚,如果 BMS 引脚为低电平,进入 EPROM 启动模式。进入 EPROM 启动模式后,经过一定延时, BF547 拉高 RESET 引脚,使其结束复位状态,这时 BMS 作为输出引脚,用作 FLASH 芯片的选通引脚,选 择共用的缓存区,TS101 会认为共用缓存区为存储加载代码的外部程序存储器,会以字节为单位顺序读取加 载代码。当 TS101 地址总线读取 32K 字节时,既缓存区的 C 块时,通过 FPGA 逻辑,会产生中断至 BF547, BF547 从而得知 TS101 读取位置后,处理器响应中断,通过 DMA 方式搬运剩余加载代码 16K 字节至共用缓 存区 A 块。如图 6 所示,A 块覆盖为最新搬运的代码,C, D 块为还未加载的代码。在这一过程中 TS101 不间 断读取缓存区数据,当读取数据至 D 块时,经 FPGA 产生中断至 BF547,BF547 响应中断搬运 16K 字节代码 数据至 B 块。此后 TS101 每读取完一块数据,都会产生中断,BF547 响应中断搬运剩余代码的 16K 字节,以 - 285 http://www.sj-ce.org/
顺序地址存入至缓冲区。反复执行此操作,直到所有加载代码搬运完毕。因 BF547 搬运速度快于 TS101 读取 速度,这样设计可以保证 TS101 连续不断的读取加载代码,直至加载成功。TS101 上电加载流程图如 7 图: BF547通过控制 电源模块给 TS101上电 拉高TS101的 RESERT引脚 拉底BMS引脚
TS101读单元 地址映射
B
BF547写单元 地址映射
搬运64K字节数据 至共用双口RAM
C
产生中断 至BF547
拉低RESERT引脚 延时一定时间 拉高引脚
D
N 双端口RAM
BMS=0?
图 6 共用缓存区
6
TS101加载代码至 C块,FPGA逻辑, 产生至中断BF547
BF547读取FLASH 中TS101加载代码 搬运至DDR内存
A
TS101选择共用 RAM读取加载代码
Y
BF547响应清除中 断,搬运16k字节 至共用RAM
FPGA逻辑,产 生中断至BF547
N TS101读取1块 搬运代码总数 等于加载代码长度 长度代码 Y 加载过程完毕
图 7 TS101 上电加载流程图
检验及保障 本系统在设计阶段,为了检验并确保处理器能够正常运行,分别在硬件和软件做了相应的设计: (1)在每个处理器空闲 IO 上连接了发光二极管。便于直观的观察处理器的运行情况。分别在 FPGA 和
DSP 软件中设计闪灯程序,系统上电后如果 LED 灯闪烁,指示处理器正常启动。如图 8。
图 8 LED 实验
图 9 加载反馈信号
(2)在软件设计上,增加了加载反馈,以及出错后处理等措施。FPGA 的 DONE 引脚用于反馈 FPGA 配置是否成功,当 FPGA 配置完毕,BF547 监视 DONE 引脚变化,如果 DONE 引脚自动被拉高说明配置成 功。如果经过一定延时后仍然为低。说明加载失败,程序经过延时后再次执行加载程序,直到成功或到达报 错次数后执行报错处理。TS101 在加载完毕后,程序会执行拉高反馈 IO,BF547 因此判断是否加载成功并作 出相应处理,处理过程与配置 FPGA 过程类似。如图 9,用示波器监视各个反馈信号,蓝色信号为 5V 直流电 源信号,黄色信号为 FPGA DONE 信号,粉色和绿色信号分别为两片 TS101 的反馈信号。如图所示 5V 直流 电源上电后,经一段时间后 DONE 信号被拉高,说明 FPGA 配置成功。一段时间后 TS101 反馈信号被拉高, - 286 http://www.sj-ce.org/
证明 TS101 加载成功,系统配置成功。经过试验,多次使系统上电,断电。FPGA 和 DSP 能稳定的启动。验 证了此方法能稳定的实现系统配置。
7
结语 本文研究了一种通过利用 VC 传输显控软件按照以设计的通讯协议,通过以太网芯片和 DSP 结构,在线
烧写 FLASH 更新加载代码。并通过主 DSP 调用 FLASH 中数据,实现对其他协处理器的动态加载的多处理 器上电加载方法。采用这种方法,实现顺序加载,避免了多处理器并行上电时电源不稳定对处理器加载产生 的影响。简捷安全的方法实现在线更新加载代码。并节省了专用的加载配置芯片,充分利用系统资源,降低 系统的硬件成本,节约了 PCB 空间。经过实践证明此方法简单有效,运行稳定可靠。
REFERENCES [1]
Analog Devices Inc. ADSP-BF54x Blackfin® Processor Hardware Reference.Revision 1.0, August 2010
[2]
Analog Devices Inc. ADSP-TS101S TigerSHARC®处理器启动载入程序核心的操作. 2003年4月1日
[3]
Analog Devices Inc. ADSP-TS101 TigerSHARC® Processor Hardware Reference. Revision 1.1, May 2004
[4]
Xilinx Inc. Spartan-6 FPGA Configuration User Guide. UG380 (v2.4) June 27, 2012
[5]
王琤, 王燕, 龙腾. TS101 DSP Flash引导程序的设计和实现[J]. 计算机工程. 2006, 32(21): 270-272
【作者简介】 高俊山(1962-),男,汉,教授,硕士 生导师,研究方向为交流调速、智能控
芦山(1987-),男,汉,硕士研究生,计算机控制技术。 肖逍(1987-),男,汉,硕士研究生,计算机控制技术。
制、电磁兼容、计算机控制技术。 Email: junshangao@hrbust.edu.cn
- 287 http://www.sj-ce.org/