微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 解决软件和硬件接口问题的嵌入式系统设计实例

解决软件和硬件接口问题的嵌入式系统设计实例

时间:08-27 来源:Raytheon公司 点击:

对理想状态的认识有助于硬件设计工程师识别并消除影响软件设计的一些障碍。

设计原则

1. 采用标准总线访问

有效的嵌入式硬件接口设计的一般原则是:对软件设计工程师来说,硬件设计应确保对硬件资源的访问尽可能透明。处理器使用所有标准的读写指令可以实现透明访问,而不用考虑前面的访问内容或时序。

像页寄存器设置、地址线上的写数据编码等都可能严重影响代码的开发,并常常需要开发标准访问与所需特殊访问之间完成相互转换的驱动程序。

通常不可避免要采用一些特殊总线,但需要慎重考虑特殊访问空间的使用选择,因为这种情况会给系统软件设计带来一定的困难。系统A采用了只写寄存器,因此要求系统软件提供"影子"内存(Shadow memory)来保存写入到资源的数据。而系统B由于允许所有的寄存器都可读写,因此没有这种限制。

2. 开发基于处理器的资源接口

硬件设计工程师习惯于从下至上分析资源接口问题以及与系统总线的连接,而通过分析处理器在系统中对资源的访问过程则更好。

"处理器与资源"间的接口常常是最重要的接口,在硬件设计流程中它的效率应是最优先考虑的对象。统一规划整个系统的资源访问对于正确理解由硬件设计选择所引起的访问限制很重要。

现有最先进的系统包含有存储控制器和可再映射总线,它们会改变处理器与资源接口之间的访问类型。一般地说,一个不合格的硬件接口设计在软件小组试图与实际资源连接前是不可能反映出来的,这一点对于设计硬件接口很重要。

3. 系统内存映射的创建与维护

对于一个好的系统设计来说,所有资源的存储器映射都非常重要。如前所述,存储器映射的设计应考虑到具体处理器要求,而不是简单地说明一个资源所解码的地址线类型。如果采用的是寄存器可配置资源,如PCI总线,硬件设计工程师应在存储器映射中配置所有与该资源有关的配置寄存器,并提供用以创建硬件验证所需的静态映射的配置寄存器初始化值。

硬件设计工程师还必须认真考虑动态重配置的优越性。在可重配置总线上没有新增(或减少)资源的系统能演变成一个静态映射,方法是强迫配置寄存器在系统复位后回复到同一值。这个"静态"系统图为硬件集成和软件开发提供了一个稳定的统一结构,同时还避免了在系统代码中使用易产生错误的指针操作。

最后,随着系统的不断成熟,存储器映射也必须不断完善,并随着软硬件开发的进展不断改进。

4. 统一的访问模式

当前的嵌入式系统由于复杂度的提高,通常由多人共同合作进行设计。每个硬件部件的设计必须与整体一致,这样才能开发出统一的资源访问模式。如果不同功能模块的访问不一致的话,在软件开发期间就会产生潜在的访问限制错误,从而可能需要为每个子系统设计专门的软件驱动程序。对不同逻辑块的不一致访问也会使硬件集成和验证变得困难重重。

例如设计工程师在调试器上编辑4个十六进制数字并不能保证处理器会使用一个16位的读/写周期,因此,对软件开发和硬件集成中使用调试工具设置多种类型的限制访问也具有一定的困难。这样看来,评估仿真器处理多个限制性访问地址空间的能力就非常有用,特别是在用"限制外"访问方式触发总线故障的处理器结构中。

寄存器设计

既然硬件设计工程师的重点已经从逻辑门和总线转移到了系统设计,我们再来审视一下任何处理器系统中最常用到的寄存器设计。寄存器接口允许高速访问资源,其访问的效率对系统的性能有很大的影响。

寄存器的结构与访问

设计工程师应该精心选择硬件寄存器大小,使处理器能最有效地进行硬件访问。一般来说,总是采用系统内部整数访问方式。寄存器应该被译码为连续的组(没有地址空档),这样可以加速指针或阵列索引对寄存器的访问。任何可写的寄存器也应该是以同样的格式可读,这样可以避免使用本地存储器来缓存这些寄存器值。

控制一个子系统的寄存器应该以相同的结构形式在一起分组,使软件能使用通用的驱动程序对它们进行访问。当设计中需要多个同一类型的子系统时这点尤其重要。

为了避免被编码成独立进程的软件任务之间发生冲突,独立的子系统不能在系统处理器访问期间共享可写寄存器。这些"独立"的软件进程在访问共享寄存器时会产生竞争,除非在系统代码中使用不可中断的读/写驱动程序。根据操作系统的不同,多个进程共享寄存器甚至可能会产生功能调用的额外开销。访问共享寄存器的同时还有执行其它进程的做法是错误的,也是软件设计的通病,会导致间歇性的系统故障,影响集成和测试系统软件的进度。

系统A违反了很多上文提到的原则,如采用只写寄存器,共享控制和状态寄存器,以及没有为每个轴提

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top