3 软件设计
软件包括3部分:引导Bootloader代码,加载FPGA用户程序以及接口部分的CPLD Verilog代码。
3.1 DSP Bootloader
本系统中目标板处于FPGA调试后期,需要固化其加载程序。整板上电后,要求脱离仿真器自行加载FPGA,因此这里采用DSP的EMIF BooT方式。它是由DSP上电复位后,以默认ROM时序通过EDMA自行搬移BCE1的ROM空间前1 KB内容到片内,在其0x0地址开始运行。
一般由C编写的程序代码长度都远大于1 KB,如果只是纯粹由DSP搬移Flash前1 KB空间,这样便会丢失数据,程序无法正常运行。这里采用由汇编语言写的一个两次搬移的Bootloader程序,来引导较大的用户程序。使用汇编语言是因为其代码效率高,代码长度短(本系统中只有256字节)。两次搬移是因为第一次DSP自行搬移后的Bootloader会占用片内的0x0地址前1 KB空间,与下一步的用户程序0x0地址拷贝冲突(中断向量表必须放在0x0地址,否则会丢失中断跳转的绝对地址),且运行中的Bootloader不能覆盖自身。所以把拷贝用户程序的那部分代码放在片内较底端运行,腾出了用户空间的0x0地址。最后整体拷贝结束后,Bootloader再跳转到用户程序入口地址c_int00运行。
3 软件设计
软件包括3部分:引导Bootloader代码,加载FPGA用户程序以及接口部分的CPLD Verilog代码。
3.1 DSP Bootloader
本系统中目标板处于FPGA调试后期,需要固化其加载程序。整板上电后,要求脱离仿真器自行加载FPGA,因此这里采用DSP的EMIF BooT方式。它是由DSP上电复位后,以默认ROM时序通过EDMA自行搬移BCE1的ROM空间前1 KB内容到片内,在其0x0地址开始运行。
一般由C编写的程序代码长度都远大于1 KB,如果只是纯粹由DSP搬移Flash前1 KB空间,这样便会丢失数据,程序无法正常运行。这里采用由汇编语言写的一个两次搬移的Bootloader程序,来引导较大的用户程序。使用汇编语言是因为其代码效率高,代码长度短(本系统中只有256字节)。两次搬移是因为第一次DSP自行搬移后的Bootloader会占用片内的0x0地址前1 KB空间,与下一步的用户程序0x0地址拷贝冲突(中断向量表必须放在0x0地址,否则会丢失中断跳转的绝对地址),且运行中的Bootloader不能覆盖自身。所以把拷贝用户程序的那部分代码放在片内较底端运行,腾出了用户空间的0x0地址。最后整体拷贝结束后,Bootloader再跳转到用户程序入口地址c_int00运行。
举报