新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 解决软件和硬件接口问题的嵌入式系统设计实例

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

作者:时间:2013-10-23来源:网络收藏

那些包含有属于多个功能要素的域的寄存器同样需要特殊驱动程序支持,这样才能使多个进程安全地访问每个域。而配置为“只写”功能的域需要分配影子内存来保存寄存器域中的前一状态值。硬件设计工程师原来设想的简单的“屏蔽/写”操作现在变成了繁杂的多步功能调用,首先必须禁止中断和任务切换,然后读本地存储器,屏蔽输入输出值,再进行硬件寄存器写,最后开放中断和多任务切换。如果寄存器中所有域能得到有效安排,通过一个软件任务就能访问全部域的话,上述情况就能得到有效避免。

由于系统A将属于不相关功能的多个域组合放在一个寄存器中,因此它需要使用特殊的驱动程序。而系统B则遵循“单个寄存器内的域按任务进行组织”的原则,将每个域放置在属于自己的专用寄存器中,因此能高效地访问资源中的每个轴参数。

3. 十六进制数字对齐

硬件设计工程师还应该明白针对处理器和软件开发环境进行对齐约束。如果将域放置在错误的地址上而超出字的边界,将迫使软件设计工程师只能按块访问每个域,进而增加访问复杂性,降低访问的速度。在调试过程中,用零值填充域是非常有用的,可以使每个域的最低位对齐十六进制数字(4位)的边界:当在逻辑分析仪、调试仪或仿真器上显示寄存器情况时,十六进制数字对齐会有助于域值的可视化提取。系统A的寄存器域是没有对齐的,因此从原始的十六进制数据中提取域值很困难。由于控制域没有对齐,在查错时屏蔽测试输入也十分困难。而系统B的所有域都是按十六进制偶数数字对齐,因此通过寄存器读可以很容易地确定每个域的状态,并且能方便地将某个域设为指定值。

4. 域位置的分配与顺序

寄存器内域的设置也会严重影响软件实现的效率。布尔域和多位域通常与位置无关,但当列举域和数字域被放置在寄存器的最低位(LSB)时对它们的访问效率通常是最高的(LSB的实际位数取决于处理器类型,位0不一定是LSB)。将域配置在寄存器的LSB中可以有效地消除对域内容屏蔽后的移位操作,也使测试设备或进行可视化检查的调试仪访问寄存器时能更容易地识别域值。

系统A中用于轴2和轴3的域值在使用前必须要求软件进行屏蔽和移位。而系统B则将所有数字域配置在寄存器的LSB中,从而能完成更有效的访问。系统B的集成性也更好,资源寄存器的十六进制数据能真正分离成正确的域值。

5. 未用数据位

寄存器中的未用位同样也会影响软件实现的效率。所有未用位应回归为零,并且写入操作时无需对它们作特殊的处理,这样可以避免不必要的屏蔽与清除操作。这个规则的唯一一个例外是包含数字域为2的补码的寄存器,并且在寄存器中剩余的最高位(MSB)没有用的情况。在这种情况下,使硬件实现符号将域的MSB扩展到未用位就非常有用。以这种方式扩展的数字域能够被处理器直接访问,因为带符号的数值无需软件符号的扩展。当对特殊的数字域变量的访问速度严重影响整体系统性能时,将该类型的域与“单个寄存器单个域”结合起来考虑将非常有用。由于无需屏蔽或符号扩展,这些域能以内部数据访问的方式直接访问。

当系统A中需要从寄存器提取域值时,要求软件对每个数字域值进行符号扩展,而系统B允许通过对寄存器的内部整数访问直接访问域值。

6. 域类型选择

域类型的正确选择也能极大地提高软件实现效率。在打开或关闭独立资源功能时布尔域是最有效的。要注意的是,只有当寄存器是可读写时单位域才容易编码。如果硬件寄存器对域的访问有限制,就需要专门的缓冲器(有可能再加上一个专门的驱动程序)来保存当前的内容。限制性访问同时也会限制一些编程构造的使用,如位域(bit field),从而影响系统代码的可读性,且无助于减少编程错误。

当表达资源状态的数据需要占用一定范围的值时数字域就很有用。当一个域能保持正值和负值使用时,带符号的表达式通常需要更多的软件工作。另外,还要避免在数字域中对其它数据进行编码(如利用域符号表示一个不相关的资源状态)。

从硬件实现来看,多位域更有效,但在写入系统代码时会增加代码的复杂度。列举类型通常能更好地反映资源中相关功能的实际可用性,可以有效防止冲突功能的采用(如将存储器块切换到本地总线上)。列举类型还应提供这样的可选项:无条件允许切换之间存在“停放带”,无条件允许系统软件中存在“先中断再实现”的代码切换。

系统A中对轴驱动域的“只写”访问使软件对目标域的访问效率很低,必须用RAM保存写过程中不作修改的过去的轴内容。系统B中由于每个寄存器都只有一个域并允许读写操作,因此不存在这样的问题。

实例系统的性能评估

为了评估最终系统软件的性能,将列表1中的伪随机码正确转换成C代码并同时用于A、B系统中,然后利用内部存储器中的结构模拟每个系统的硬件接口。代码中应避免使用位域,因为标准C实现不能在限制性访问的地址空间上正确工作。系统代码模拟运行于PowerPC,编译工具采用的是Green Hills MultiC,目标操作系统是VxWorks,编译器设置在中级优化度(目的是帮助调试,并允许设计工程师把每条汇编指令与每一行C代码联系起来)。

表1列出了伪随机码的每一行,并给出了每个系统实现所用到的汇编指令与功能调用数量。另外还对两个实现所用的代码执行速度进行测试。子程序升级系统B轴的速度要比系统A快5.3倍,这主要归功于任务阻塞与去阻塞功能调用的去除。要注意的是实际系统中的加速效果可能并不明显,因为实际的硬件访问时间对总的执行时间影响最大。

在实验中要提升两个实现所用编译器的优化度,结果发现优化度的提高对系统B无效,对系统A来说只是减少了很少的代码,并且速度却稍有降低。这样的结果表明,系统B的硬件接口在轴域的资源访问上非常接近内部访问的效能。

另外,为了对两种实现所用到的硬件设备进行评估,要用VHDL对硬件接口进行编码,然后用赛灵思的Webpack软件进行综合,并把设计映射到赛灵思的Virtex FPGA中。采用Virtex系列芯片的结果是系统A要消耗56个功能片(slice),系统B要消耗85个功能片。V300E-PQ240器件总共具有3072个片,因此系统A占用可用资源的1.8%,系统B则占2.8%。9500系列器件的内部资源更有限些,比如XC95288XL-PQ208,系统A将占用该器件可用资源的18%,系统B则占30%。

仔细考察这两个设计发现,系统B所用的额外资源中最主要的驱动源是组合型轴寻址方案。为了验证这一结果,重新组织寄存器映射,以便将每个轴作为一个独立资源使用,单个轴映射按地址位边界对齐。这一变通的实现方式保留了系统B的所有软件接口优点,同时减少了整体硬件器件的使用,Virtex系列器件的片利用率能降低2.3%,9500系列的利用率能降低22%。

硬件设计会极大地影响系统软件实现的复杂性和质量。一个好的硬件设计要求设计人员能根据硬件实现与最终软件设计环境的复杂性做出决定,正确理解硬件接口设计对软件的影响能极大地改进系统质量、性能和可靠性,同时减少系统开发的周期与成本。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭