简便的调试
调试有多个并行执行线程的系统往往难度较大。不过把系统划分给多个处理器就可以使事情变得简单。我们不需要多线程调试器(比如在Linux环境中调试多个处理器时所需要的)。赛灵思调试器 (XMD) 可以连接到多个处理器上,而且通过使用TCL(XMD能理解的工具命令行语言),我们可以自动完成设置,并将待测的代码下载到多个处理器上。当然,也可以使用采用 printf 声明的常规嵌入式系统调试方法,因为每个处理器都有自己的串行端口。
在调试处理器间通信时具有重大价值的另一种工具是 ChipScope? Pro。该嵌入式逻辑分析器内建在 FPGA 结构中,让我们可以捕获通过FSL 链路的数据,把隐藏较深的缺陷的漏洞排查到发送方或者接收方,然后进行代码的逐行排查。
使用四个处理器实现的隔离的意义在于,当某个元件被调试过后,基本上不需要再调试。这样可以避免在把不同来源的代码集成到大型独立应用中,或者在单个处理器上运行多个进程时,因奇奇怪怪的相互作用而产生的诸多问题。
FPGA 实现
这个项目基本不涉及 HDL,只用高级封装程序把基于 EDK 的设计与一小段看门狗代码整合在一起,确保系统在驾驶人员熄火后关闭。 EDK生成了FPGA的主体部分(MHS 文件长度超过1,300 行!),而系统生成器负责生成视频降采样器。我们对四个微控制器都配置使用了高速缓存和浮点单元。在使用四个处理器、四个 DDR 存储接口以及一系列外设(包括以太网、SPI、IIC、CAN、UART、定时器和 GPIO)之后,器件约七成的查找表都被占用了(大约2.8万个查找表)。与基于微控制器的 FPGA 的通常情况一样,块存储器的使用率非常高,超过了 90%,或者119 个BRAM,但 DSP 模块使用率相对较低:只有每个处理器的浮点单元需要它们(每个处理器 8 个,总计 32 个)。
整合主微处理器从内部闪存引导 Linux 内核,然后加载内部文件系统。每个从处理器都有基于FSL的引导载入程序,可以接受标准的 S-record文件,对其进行解析并将其拷贝到本地存储中,然后执行。Linux 处理器把 S-record文件从文件系统中直接发送到 FSL 伪文件(使用内置的 dd 实用程序)。如上文所述,所有的处理器间通信都通过完全连接的 FSL 链路网格完成。FSL 链路网格的带宽为 32 位,运行频率为60MHz,能够提供大量的低时延通信带宽。虽然避免使用共享存储可能会带来限制,但这样做可以实现上文已经探讨过的隔离所带来的优势。硬件架构与应用要求的划分吻合良好,实现了直观的软件分区。
有需要时,Foot-LITE 算法微处理器会向 JPEG 压缩器发出触发信号,同时与智能电话显示器通信。Linux 处理器在蓝牙通信和系统其余部件之间充当媒介作用(如图3 所示)。除了向驾驶人员发出即时信号,它将有关车辆状态的连续信息流以及偶发的视频流通过智能电话上传到中央服务器。
在旅途结束,驾驶人员熄火时,主处理器会通知从处理器,随即从处理器启动各自的关闭流程(比如将更新的参数写入非易失调节存储器),然后告知主处理器它们已经可以安全地关闭了。此时,主处理器向电源发出信号,然后系统进入极低功耗睡眠模式,等待下一次发动。如果在熄火后两分钟软件还没有发出关闭信号(不过这种情况一般不太可能发生),FPGA 结构中的硬件定时器会切断电源,避免耗尽车辆的电池。
在项目收尾阶段,来自由纽卡斯尔大学和南安普顿大学两名学术界人士将分析在实际高速公路行驶状态下车辆输出数据,以评估该系统引导驾驶人员行为的效能。
FPGA 的优势
FPGA 提供了高度的灵活性,与固定硬件平台相比,能够更轻松地满足日新月异的项目需求。另一大优势是,FPGA 能够集成到定制化硬件中,满足密集型应用(比如视频)需求。在使用 Linux 的情况下,可以方便地对诸如以太网这样的外设进行高级访问,同时不会影响实时性能,这样就可以把这些关键性的工作交给它们各自的微处理器来处理。最终,如果是由一个大型的、位于不同地理位置的团队在开发该软件,使用与功能划分相匹配的硬件架构有助于开发和集成工作。