新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于CPLD译码的DSP二次Bootloader方法介绍

基于CPLD译码的DSP二次Bootloader方法介绍

作者:时间:2012-05-17来源:网络收藏

本文引用地址:http://www.eepw.com.cn/article/257505.htm


2.2 VHDL程序设计

目前系统主频越来越高,运算速度越来越快,利用小规模逻辑器件的方式已不能满足系统性能的需求。器件以其严格的时序、快速的、良好的可编程性成为系统必不可少的部件之一。

本文利用的快速逻辑译码功能,模拟了一个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控制寄存器等。

FPR寄存器定义如表2所示。

FPR寄存器的第5~0位分别控制Flash的高位地址线A18~A13,第7~6位无效。当DSP 上电复位时,FPR寄存器的值被设置为全0,此时Flash的所有高位地址线均处于低电平状态,DSP开始访问Flash的最低8KB地址单元。复位结束,就可以对FPR寄存器写入值,改变Flash的高位地址,从而实现Flash的分页访问。这样Am29LV800 Flash的512K字存储空间相当于被划分为64页(0~63),每页8K字,当程序大于一页时,修改FPR,进行软件翻页,读入下一页Flash数据。也可以通过读FPR寄存器,了解当前高位地址线的状态,此时FPR寄存器与Flash的地址映射关系为:

Flash地址单元=(FPR13)+DSP地址线A[13:1]

2.3 二次的实现

基于上述的设计和分析,要实现大程序的自动引导,可以采用二次的方法。首先要设计一个uboot程序,大小不能超过一页。将 uboot程序烧写到Flash存储器的第0页,也就是DSP上电复位后被固化的自行引导的那一页。uboot的主要功能是通过修改 FPR寄存器值,并按照引导表的格式读取Flash存储器的其他页程序到RAM中,最后跳转到用户程序的32位入口地址开始执行。uboot程序中,可以定义一个16位无符号整型指针变量,指向CE2空间的0x401000地址,即:

  unsigned int*FPR=(unsigned int*) 0x401000;

若*FPR=1,即可以访问Flash的第1页。

在编写uboot程序和用户程序时,要对存储器空间重新分配,即在定义CMD文件时,要注意用户程序所占用的存储空间不能与uboot程序占用的存储空间重叠。因为uboot首先被加载运行,在运行时加载用户程序,也需要占用RAM地址空间。而且uboot程序代码长度不能超过一页。当烧写Flash时,必须将uboot程序烧写到Flash的第0页,然后将用户程序烧写到第一页或以后的存储空间中。

3 实验结果

以煤矿井下煤矸分界传感器为例,测试本文介绍的基于CPLD译码的DSP二次Bootloader方法。该传感器采集放煤时煤矸石振动信号,经AD转换后送入DSP经数字信号处理,分析得出煤矸石放落比例[8]。用户程序代码大小为23K字左右,显然不能够被固化的Bootloader正常加载,因此必须经过二次Bootloader。

将大小约2K字的uboot程序烧写到Flash第0页,用户烧写到第1~3页。经多次测试,该系统从上电复位到开始运行用户程序,耗时大约0.3s,而且系统运行稳定可靠。

本文介绍的基于CPLD快速译码的DSP二次Bootloader方法,利用CPLD器件的快速译码功能,模拟了一个换页寄存器,实现了大程序的上电后二次引导。与常见的利用GPIO换页的方法相比,本方法更有效,通用性更好,不会占用宝贵的GPIO资源,而且系统扩展方便,接口简单。


上一页 1 2 下一页

关键词: DSP 译码 Bootloader CPLD

评论


相关推荐

技术专区

关闭