基于CPLD译码的DSP二次Bootloader方法
二次Bootloader的原理是由用户自行编写一个代码长度小于16KB的引导程序(以下简称 uboot),其功能与DSP内固化的Bootloader相同,用于加载最终的用户代码。在uboot程序中控制Flash存储器的高位地址线来访问 Flash的其他存储内容。这样,DSP上电复位后,Bootloader首先加载uboot并运行,然后uboot又加载最终用户代码,实现了大于 16K代码的二次引导。
2.1DSP与Flash及CPLD的硬件接口
本文采用AMD的 Am29LV800作为DSP的外部存储器扩展。Am29LV800按8位方式访问,容量为1M字;按16位方式访问,容量为512K字。DSP外围电路逻辑译码及Flash高位地址线模拟由CPLD实现。Xilinx公司的XC9572XL是一款高性能的CPLD芯片,最高主频可达178MHz,包含了 72个宏单元,1 600个可用门电路,其TQFP封装有72个可用I/O引脚[7]。图1是5509A与CPLD及Flash之间的硬件接口设计原理图。本文引用地址://m.amcfsurvey.com/article/152366.htm
如图1所示,5509A的地址线A[13:1]与Flash的地址线A[12:0],A0未用。Flash存储器被映射到DSP的CE1空间,由片选线CE1经CPLD译码后选通。其中DSP的地址线A13和A[3:1]与CPLD接口,用于换页寄存器FPR的模拟。Flash存储器的BYTE引脚经上拉后接高电平,即按16位方式访问。
2.2 CPLD译码VHDL程序设计
目前DSP系统主频越来越高,运算速度越来越快,利用小规模逻辑器件译码的方式已不能满足DSP系统性能的需求。CPLD器件以其严格的时序、快速的译码、良好的可编程性成为DSP系统必不可少的部件之一。
本文利用CPLD的快速逻辑译码功能,模拟了一个FPR寄存器来控制Flash的高位地址线。VHDL语言源程序如下(篇幅有限,这里省略实体端口声明及中间信号定义):
begin
fce =ce1;
foe =aoe;
fwe =awe;
h_addr =a13;
l_addr =a3a2a1;
datain =d5d4d3d2d1d0;
facs =′1′ when h_addr=′1′
and ce2=′0′ and l_addr='000'
else ′0′; --CE2 0x400000
FPR:process(facs,awe,reset)
begin
if reset=′0′ then
fa=″000000″;
else if reset=′1′ then
if awe′event and awe=′1′ then
if facs=′1′ then
fa=datain(5 downto 0);
end if;
end if;
end if;
end process;
dataout=fa when aoe=′0′ and facs=′1′
else ″ZZZZZZ″;
d5 =dataout(5);
d4 =dataout(4);
d3 =dataout(3);
d2 =dataout(2);
d1 =dataout(1);
d0 =dataout(0);
fa18 =fa(18);
fa17 =fa(17);
fa16 =fa(16);
fa15 =fa(15);
fa14 =fa(14);
fa13 =fa(13);
end behaviour;
由上述VHDL程序可知,FPR寄存器被映射到了CE2空间的0x401000地址。其中引入A13及A[3:1]地址线的目的是为了便于以后的功能扩展,映射出更多的寄存器,如LCD控制寄存器、UART控制寄存器等。
评论