|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
本帖最后由 cjsb37 于 2013-4-29 09:19 编辑
王占锋 北京高光科技有限公司
摘要:本文介绍了DSP和FPGA组建的双芯处理模块以及配套的各种bootloader方案。该模块具有运算速度快、可靠性高、处理能力强、功耗低等优点,主要应用于数据量大、算法复杂、使用I/O多的系统,可以直接作为工业控制和高速数据处理算法研究和实时实现的通用平台。
关键词:DSP,FPGA,bootloader,TMS320VC5416,EP1K100
1. 系统硬件结构
1.1 系统框图
DSP&FPGA模块的硬件系统框图如图1所示,具有如下特点:
 1、160MHz主频的DSP和10万门的FPGA组成强大的双核处理器;
 2、高可靠性、低成本、低功耗;
 3、支持firmware的在线烧写;
 4、支持TI的片上bootloader方案和自定义的大容量bootloader方案;
 5、具有丰富的接口:
 6、DSP:EMIF、中断
 7、FPGA:93个可编程控制的I/O,兼容2.5/3.3/5V电平
 8、板载4M-bit FLASH
 9、对外接口:2个120针间距0.635mm的插座BTB120P-F
 10、单电源供电:+3.3V
 11、尺寸:85mm*61mm*9mm
图1. DSP&FPGA模块硬件系统框图
1.2 DSP
DSP采用的是TI公司的TMS320VC5416,16bit定点高性能DSP,是TMS320VC54x系列中的第3代芯片。主要特性有:速率最高达160MI/s;3条16bit数据存储器总线和1条程序存储器总线;1个40bit桶形移位器和2个40bit累加器;1个17×17乘法器和1个40bit专用加法器;最大8M×16bit的扩展寻址空间,内置128k×16bit的RAM和16k×16bit的ROM;由于VC5416功耗低,性能高,其分开的数据和指令空间使该芯片具有高度的并行操作能力,在单周期内允许指令和数据同时存取,再加上高度优化的指令集,使得该芯片具有很高的运算速度,可以轻松应对高速、大数据量的数据处理和复杂的算法实现。
1.3 FPGA
FPGA采用的是Altera公司的EP1K100Q208,是一款高性价比的FPGA。主要特性有:10万典型门,4992个逻辑单元,49152 bits RAM和147个IO口。
在DSP&FPGA模块中,FPGA映射在DSP的IO空间,主要功能有:
1) 实现高速的DSP接口和低速的外设接口之间的时序协调工作,充分发挥DSP的高速优势;
2) 协助DSP处理一些算法简单、重复性高的算法,以充分发挥FPGA的并行硬件运算能力,例如数据平均、DDS、PWM等功能;
3) 为系统增加丰富的IO接口,弥补DSP通用IO控制接口不足的缺点;
4) 为适应不用的需要进行灵活的电路译码。
2. Bootloader方案
2.1 Bootloader原理
在DSP系统中,用于存储程序源代码的非易失性存储器相对于DSP的运算速度较慢,会大大降低系统性能,所以需要bootloader在系统加电时把存储在低速存储器中的源程序搬运到高速存储器中来。
在DSP&FPGA模块中,用户可以通过跳线灵活选择MP或MC工作方式,以适应不同的bootloader方案。
2.2 片上 bootloader方案
2.2.1 16位并行加载过程
C5416的内部ROM中有固化好的加载程序。如果DSP的MP/MC管脚接低,工作在MC方式。在DSP加电RESET时,程序就从内部ROM的FF80H地址开始行运行。在FF80H处,有一条跳转到BOOT程序的指令,执行内部固化好的BOOT程序。
Boot程序的执行过程:
1) 首先进行初始化,工作包括关闭中断、将内部RAM映射在程序/数据空间,以及为访问数据和程序空间设置的七个软件等待等;
2) 检查INT2,决定是否从HPI加载;
3) 检查INT3,决定是否进行串行EEPROM加载;
4) 从IO空间的0xFFFF地址读取源地址,如果有效,则进行并行加载,否则从数据空间0xFFFF地址读取源地址,如果有效,则进行并行加载;
5) 以上都不是,则进行串口加载或IO加载。
DSP&FPGA模块上有4M bit的falsh存储器,用于支持16位并口加载方案,其流程如图2所示。 图2 TMS320VC5416的并行EPROM加载流程图
2.2.2 硬件实现
DSP&FPGA模块上的FPGA芯片可以通过VHDL程序设计方便的实现Bootloader的硬件要求:
1) FLASH_nOE 到nMSTRB OR (NOT R_nW)
2) FLASH_nWE 到 DSP_R/nW
3) PORTFFFF = CODE在DSP数据空间中的起始位置。
2.2.3 创建引导表
为使DSP能有效地把外扩EPROM中的程序引导到芯片内RAM,需要编制一个引导表。引导表内容包含如下几个方面:1)引导方式的标识;2)程序存放的目标首地址;3)程序执行的入口址址;4)用户程序代码;5)用户程序块长度。图2中的程序源地址就是引导表的首地址,而引导方式的标识就是0x10AA或0xXX08。
为了给用户程序创建引导表,需要hex500.exe把用户代码out文件转化为hex文件。步骤如下:
首先建立convert.cmd文件:
XXX.out //用户的out文件
-i //决定输出文件格式为HEX格式
-memwidth 16 //决定产生的数据宽度为16位
-romwidth 16 //选择存储器的位宽为16位
-boot //说明产生一个Boot标识
-bootorg 0xXXXX //选择CODE在DSP数据空间中的起始位置
-e 0xXXXX //选择程序中断向量的入口点
-o XXX.hex //命名生成的HEX文件名
然后再DOS环境下执行Hex500 convert.cmd就可以完成转换。
2.3 自定义bootloader 方案
片上bootloader方案方便可靠,采用外部并行BOOT方式时,BOOT的寻址区是在数据区,因而最大的范围是64K。如果程序代码超过了64K那么就需要用到自定义bootloader方案。
2.3.1 存储器分配
DSP&FPGA模块,在DSP完成Bootloader之前,将DSP的数据空间0x8000-0xffff映射到FLASH空间,完成bootloader后,该数据空间释放出来给用户DSP程序使用。由于片上最大RAM是128K,所以系统最大支持128K的用户代码。Flash存储区分配如表1所示
表1 Flash存储区分配表
工作程序代码 0x8000-0xdf80
工作程序的VECTOR [0xfe80-0xff00)
LOADER [0xff00-0xff80)
BOOT [0xff80-0xffff)
工作程序代码 [0x18000-0x1fb00)
工作程序代码 [0x28000-0x2fB00)
工作程序代码 [0x38000-0x3fB00)
2.3.2 硬件实现
自定义Bootloader的硬件实现也是通过VHDL语言实现的。
1) FLASH_nOE  nMSTRB OR (NOT R_nW)
2) FLASH_nWE  DSP_R/nW
3) 上电初始化初始化:FLASH_A17/A16 = (00)
4) PORT40 = 0x60 A17=0
5) PORT40 = 0x61 A17=1
6) PORT40 = 0x62 A16 = 0
7) PORT40 = 0x63 A16 = 1
8) PORT40 = 0x64 FLASH_nCE  DSP_nPS
9) PORT40 = 0x65 FLASH_nCE  DSP_nDS
2.3.3 BOOTLOAD过程
自定义bootloader方案需要用户自己编写bootloader代码,此时DSP的MP/MC管脚接高,工作在MP工作方式,根据图3所示的TMS320VC65416程序空间和数据空间映射图可以看出,此时程序空间的0Xff80地址正好对应在外部flash里。用户自己编写的Bootloader就烧写在flash的0xff80—0xffff空间。Bootloader过程如下:
1) 在DSP加电RESET时,程序就从外部FLASH的FF80H地址开始运行,从FF80开始执行boot代码;
.mmregs
.def boot_start
.sect ".boot"
.ref loader_start
boot_start:
ssbx intm
ld #0,dp
nop
orm #060h,@1dh
stm #60h,ar0
portw ar0,40h
stm #62h,ar0
portw ar0,40h
stm #0e80h, ar1
rpt #(80h-1)
MVPD #0ff00h, *ar1+
nop
endboot:
ld #0E80h,a
and #00ffffh,a
bacc a
.end
2) Boot代码将loader代码从FLASH(程序区)copy到程序和数据共存区,然后跳转到loader起始点;
.mmregs
.def loader_start
.sect ".loader"
loader_start:
andm #0ffb7h,@1dh
stm #65h,ar0
portw ar0,40h
ld #07f80h,a
and #00ffffh,a
stm #0FE80h, ar1
rpt #(80h-1)
writa *ar1+
nop
ld #0f00h,a
and #00ffffh,a
stm #08000h,ar1
rpt #(7080h-1)
writa *ar1+
nop
stm #61h,ar0
portw ar0,40h
stm #62h,ar0
portw ar0,40h
stm #0000h,al
and #0ffffh,a
add #2800h,4,a
stm #8000h,ar1
rpt #(7b00h-1)
writa *ar1+
nop
stm #61h,ar0
portw ar0,40h
stm #63h,ar0
portw ar0,40h
stm #0000h,al
and #0ffffh,a
add #3800h,4,a
stm #8000h,ar1
rpt #(7b00h-1)
writa *ar1+
nop
3) Loader代码将工作程序代码和VECTOR从FLASH(数据区)加载到内部ram(数据区)中,并跳转到工作程序工作VECTOR。
图3 TMS320VC65416程序空间和数据空间映射图
3. 应用
由于DSP&FPGA模块将核心的处理模块通过2个120针的插座BTB120P-F和外部链接,所以可以根据具体应用很方便的进行扩展,如图4所示。 图4 DSP&FPGA模块典型应用系统
|
|