构建嵌入式系统的秘诀
解嵌入式系统要求的行为后,我们就需要为解决方案创建一个架构。该架构将由分组成功能块的需求构成。例如,如果嵌入式系统必须处理模拟输入或输出,架构就将包含模拟 I/O 模块。其它模块可能会更加明显,比如电源调节、时钟和复位生成。
该架构不应仅限于硬件(电气)解决方案,还应包含 FPGA/SoC 及相关软件的架构。当然,模块化设计的关键是针对模块及功能行为的良好接口文档编制。
该架构的一个关键方面是展现如何在高层次上创建系统,这样工程团队就能轻松理解其实现方式。该步骤也是在系统运行生命周期中为系统提供支持的关键。
在确定我们的架构时,我们需要考虑模块化方法,这样不仅能在当前项目上进行复用,而且还能在未来的项目上进行复用。模块化要求我们从第一天起就考虑可能的复用,并要求我们把每个模块存档为一个独立的单元。就内部 FPGA/SoC 模块而言,像 ARM® AMBA® 高级可扩展接口 (AXI) 这样的通用接口标准有助于实现复用。
模块化设计的一个重大优势就是能够针对某些需求使用商用现成的模块。商用现成(COTS)模块让我们能够以更快的速度开发系统,因为借助 COTS,我们能够把我们的工作重点放在项目从我们的专业能力产生的增值中获益最大的部分上。
系统电源架构是一个需要缜密思考的的设计方面。许多嵌入式系统会要求隔离 AC/DC 或 DC/DC 转换器来确保嵌入式系统的故障不会扩散。图 2 显示的是电源架构的示例。来自该模块的输出轨需要二级调整来为处理内核和转换装置提供电压。我们必须仔细防范这些阶段发生严重的开关损耗和效率下降。因为效率降低意味着系统热耗散增大,如果不正确解决就会影响单元的可靠性。
我们必须仔细了解使用的线性调整器的行为以及在电源线上进行进一步滤波的要求。这一要求的原因是 FPGA 和处理器等器件的开关频率远远高于线性调整器的控制环路所能应对的水平。随着噪声频率提高,线性调整器的噪声抑制能力下降,导致需要采用额外的滤波和去藕技术。如果不了解这一关系,会造成混合信号设备出现问题。
另一个重要的考虑因素是时钟和复位架构,尤其是在有多个需要同步的开发板的情况下。在架构层面我们必须考虑时钟分配网络:我们是否在跨多个开发板扇出单个振荡器,或是使用多个频率相同的振荡器?为确保时钟分配的稳健可靠性,我们必须考虑:
• 振荡器启动时间。我们必须确保在整个时间周期内激活复位(如果需要)。
• 振荡器歪斜。如果我们要在跨多个开发板扇出振荡器,时序是否至关重要?如果是,我们需要考虑线路卡上的歪斜(连接器引起的)和缓冲器自身引起的歪斜。
振荡器抖动。如果我们在开发混合信号设计,我们需要确保使用低抖动时钟源,因为抖动的增大会降低混合信号转换器的信噪比。在我们使用千兆位级串行链路时情况也是一样,因为我们需要使用低抖动时钟源在链路上取得良好的误码率。
我们也必须注意复位架构,确保只在需要的地方使用复位。例如基于 SRAM 的 FPGA 一般不需要复位。
如果我们在使用复位的异步激活,我们需要确保移除它不会导致亚稳态问题。
清晰定义接口
内外部接口的正式文档在机械、物理和电气层面为各个接口提供清晰的定义,以及协议和控制流。这些正式文档也往往被称为接口控制文档 (ICD)。当然最好是尽量使用标准通信接口。
接口定义最重要的一个方面是外部接口的"连接化"。这个过程考虑了所需连接器的引脚分配,连接器引脚的额定功率以及所要求的插拔次数,以及任何对屏蔽的要求。
在我们为我们的系统考虑连接器类型的时候,我们应确保不会因为在子系统中使用相同类型连接器而造成不利的交叉连接。通过使用不同类型连接器或采用不同的连接器键位(如果支持),我们就能够避免交叉连接的可能性。
连接化是我们开始使用之前确定的预算要求的首个方面之一。特别是我们可以使用串扰预算来指引我们定义引脚分配。图 3 所示的例子说明了这一流程的重要性。重新安排引脚分配,将接地基准电压 (GND) 引脚布局在信号 1 和信号 2 之间,可以降低互感以及由此引发的串扰。
接口控制文档 (ICD) 必须对系统接地进行定义,尤其是在项目要求外部 EMC 的时候。在这种情况下,我们必须小心避免让有噪声的信号地产生辐射。
工程师和项目经理掌握着一系列策略,以确保他们交付的嵌入式系统能够满足质量、成本和调度要求。不过当项目遇到困难时,我们可以确信在项目不发生重大变化的情况下其此前的性能是其未来性能的良好提示。
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)
- 嵌入式系统实时性的问题(06-21)
- 嵌入式实时系统中的优先级反转问题(06-10)
- 嵌入式Linux系统中MMC卡驱动管理技术研究(06-10)
- FPGA的DSP性能揭秘(06-16)