解决软件和硬件接口问题的嵌入式系统设计实例
的访问效率通常是最高的(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所用的额外资源中最主要的驱动源是组合型轴寻址方案。为了验证这一结果,重新组织寄存器映射,以便将每个轴作为一个独立资源使用,单个轴映射按地址位边界对齐
- 嵌入式系统的定义与发展历史(11-15)
- 嵌入式系统亲密接触(11-22)
- 嵌入式系统设计中的USB OTG方案(02-01)
- 一个典型的嵌入式系统设计和实现 (02-02)
- DDR SDRAM在嵌入式系统中的应用(02-07)
- 嵌入式实时系统开发的正确选择 (02-13)