嵌入式系统的设计原则技术设计实例Word文件下载.docx
- 文档编号:15767787
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:7
- 大小:23.02KB
嵌入式系统的设计原则技术设计实例Word文件下载.docx
《嵌入式系统的设计原则技术设计实例Word文件下载.docx》由会员分享,可在线阅读,更多相关《嵌入式系统的设计原则技术设计实例Word文件下载.docx(7页珍藏版)》请在冰豆网上搜索。
处理器接口可以分成两大类,分别标识为本地总线和硬件总线。
值得注意的是,本文中的总线是根据处理器利用资源时的访问类型单独定义的,与具体的硬件连接没有对应关系。
本地总线是资源与处理器之间的接口总线,它允许无限制的连续访问。
无限制访问意味着处理器能够利用其内部数据类型(如字节、字和双字)访问一个资源的所有要素;
连续访问是指所有资源要素占用的资源地址空间是连续的,中间没有任何间隔。
RAM和EPROM就是与本地总线接口的常见范例。
硬件总线与资源的连接通常有某些限制,如大小、位置、寻址、地址空间或重定位等。
只接受字写入的I/O端口,或者使用前必须先作映射的PCI总线上的外围芯片是硬件总线接口的一些实例。
采用硬件总线连接对软件设计工程师访问资源有一定的限制,可能在软件设计、开发和集成过程中产生复杂代码和代码错误。
正确的硬件总线接口设计能够加快软件设计进程,通常也能加快硬件验证速度。
本文重点介绍与可编程逻辑资源相连接的硬件总线的设计与实现。
系统定义的实例
这里考虑两种不同的硬件实现方式。
该系统是处理器控制的三轴伺服系统,本部分的系统设计仅限于位置反馈控制的设计,因此有助于我们专注于硬件接口的实现。
该系统的两种实现方式都实现了处理器与用户ASIC(或FPGA)的接口,从而为三轴伺服提供驱动与反馈信息。
每个系统中的ASIC必须利用32位数据总线使处理器与三套驱动/反馈资源连接。
每种资源包含有一个带符号的10位驱动寄存器、一个带符号的8位位置寄存器和一个3位的错误状态寄存器,任何一个位置位都表示一种错误状态,由它产生轴驱动(axisdrive)的关闭信息。
当采用VHDL(或其它高级硬件设计方法)实现时,这两种硬件接口的设计复杂性几乎是相等的。
系统A显得稍微高效些,因为其寄存器地址译码相对简单些,所采用的硬件数量也比系统B少。
为了减少与处理器接口的可编程器件中逻辑单元的数量,大多数硬件设计工程师会选择系统A的实现方式。
所示的伪随机码为轴驱动程序,可用于A、B两个系统。
伪随机码设计用于基于先进处理器的系统实现,并运行于实时操作系统,以通用轴控制程序的三份独立挎贝(或任务实例)实现轴的控制。
当使用系统A中定义的接口时只需伪随机码中那些带星号的代码行。
很明显,即使在代码原型阶段系统B所需的代码也比系统A少很多。
系统B中的硬件设计要稍微复杂一些,但能减轻软件开发的负担。
后文将回顾这两个实例系统和伪随机码。
在阅读本文时,硬件设计工程师可能会产生这个问题:
“为什么第一个设计的效率要比第二个低?
”。
两种实现方式控制轴向操作的参数是相同的,而第一种方法所需的可编程硬件器件数量显然要比第二种少。
为了正确回答这个问题,设计工程师必须从系统的角度来看待这个设计,而不是硬件设计工程师惯用的“逻辑门”角度。
下一部分将阐述硬件设计工程师开发系统硬件接口时常会遇到的一些概念,将进一步讨论这些技术,并检查将这些概念应用于实例系统设计后的结果。
为了满足项目要求,对整个系统结构进行优化时需要在硬件与软件实现之间作出折衷,现实中是没有项目能满足这里提到的所有理想软件接口要求的。
对理想状态的认识有助于硬件设计工程师识别并消除影响软件设计的一些障碍。
设计原则
1.采用标准总线访问
有效的嵌入式硬件接口设计的一般原则是:
对软件设计工程师来说,硬件设计应确保对硬件资源的访问尽可能透明。
处理器使用所有标准的读写指令可以实现透明访问,而不用考虑前面的访问内容或时序。
像页寄存器设置、地址线上的写数据编码等都可能严重影响代码的开发,并常常需要开发标准访问与所需特殊访问之间完成相互转换的驱动程序。
通常不可避免要采用一些特殊总线,但需要慎重考虑特殊访问空间的使用选择,因为这种情况会给系统软件设计带来一定的困难。
系统A采用了只写寄存器,因此要求系统软件提供“影子”内存(Shadowmemory)来保存写入到资源的数据。
而系统B由于允许所有的寄存器都可读写,因此没有这种限制。
2.开发基于处理器的资源接口
硬件设计工程师习惯于从下至上分析资源接口问题以及与系统总线的连接,而通过分析处理器在系统中对资源的访问过程则更好。
“处理器与资源”间的接口常常是最重要的接口,在硬件设计流程中它的效率应是最优先考虑的对象。
统一规划整个系统的资源访问对于正确理解由硬件设计选择所引起的访问限制很重要。
现有最先进的系统包含有存储控制器和可再映射总线,它们会改变处理器与资源接口之间的访问类型。
一般地说,一个不合格的硬件接口设计在软件小组试图与实际资源连接前是不可能反映出来的,这一点对于设计硬件接口很重要。
3.系统内存映射的创建与维护
对于一个好的系统设计来说,所有资源的存储器映射都非常重要。
如前所述,存储器映射的设计应考虑到具体处理器要求,而不是简单地说明一个资源所解码的地址线类型。
如果采用的是寄存器可配置资源,如PCI总线,硬件设计工程师应在存储器映射中配置所有与该资源有关的配置寄存器,并提供用以创建硬件验证所需的静态映射的配置寄存器初始化值。
硬件设计工程师还必须认真考虑动态重配置的优越性。
在可重配置总线上没有新增(或减少)资源的系统能演变成一个静态映射,方法是强迫配置寄存器在系统复位后回复到同一值。
这个“静态”系统图为硬件集成和软件开发提供了一个稳定的统一结构,同时还避免了在系统代码中使用易产生错误的指针操作。
最后,随着系统的不断成熟,存储器映射也必须不断完善,并随着软硬件开发的进展不断改进。
4.统一的访问模式
当前的嵌入式系统由于复杂度的提高,通常由多人共同合作进行设计。
每个硬件部件的设计必须与整体一致,这样才能开发出统一的资源访问模式。
如果不同功能模块的访问不一致的话,在软件开发期间就会产生潜在的访问限制错误,从而可能需要为每个子系统设计专门的软件驱动程序。
对不同逻辑块的不一致访问也会使硬件集成和验证变得困难重重。
例如设计工程师在调试器上编辑4个十六进制数字并不能保证处理器会使用一个16位的读/写周期,因此,对软件开发和硬件集成中使用调试工具设置多种类型的限制访问也具有一定的困难。
这样看来,评估仿真器处理多个限制性访问地址空间的能力就非常有用,特别是在用“限制外”访问方式触发总线故障的处理器结构中。
寄存器设计
既然硬件设计工程师的重点已经从逻辑门和总线转移到了系统设计,我们再来审视一下任何处理器系统中最常用到的寄存器设计。
寄存器接口允许高速访问资源,其访问的效率对系统的性能有很大的影响。
寄存器的结构与访问
设计工程师应该精心选择硬件寄存器大小,使处理器能最有效地进行硬件访问。
一般来说,总是采用系统内部整数访问方式。
寄存器应该被译码为连续的组(没有地址空档),这样可以加速指针或阵列索引对寄存器的访问。
任何可写的寄存器也应该是以同样的格式可读,这样可以避免使用本地存储器来缓存这些寄存器值。
控制一个子系统的寄存器应该以相同的结构形式在一起分组,使软件能使用通用的驱动程序对它们进行访问。
当设计中需要多个同一类型的子系统时这点尤其重要。
为了避免被编码成独立进程的软件任务之间发生冲突,独立的子系统不能在系统处理器访问期间共享可写寄存器。
这些“独立”的软件进程在访问共享寄存器时会产生竞争,除非在系统代码中使用不可中断的读/写驱动程序。
根据操作系统的不同,多个进程共享寄存器甚至可能会产生功能调用的额外开销。
访问共享寄存器的同时还有执行其它进程的做法是错误的,也是软件设计的通病,会导致间歇性的系统故障,影响集成和测试系统软件的进度。
系统A违反了很多上文提到的原则,如采用只写寄存器,共享控制和状态寄存器,以及没有为每个轴提供公共的寄存器映射。
系统A必须用专门的驱动程序来缓冲写输出数据,移位并屏蔽轴驱动与位置信息,并防止轴驱动寄存器内容被为每个轴任务编写的代码所影响。
系统B由于分离并重组了与每个轴有关的寄存器,因此能克服这些问题。
寄存器复位内容
硬件设计工程师应仔细考虑系统的复位状态。
硬件设计通常采用启动程序来取得系统启动后的控制权,并将系统初始化到一个安全的状态。
系统复位后应将硬件置于一个确定的安全状态,并且硬件应持续保持安全状态直到系统软件初始化完成为止。
代码也应在软件控制下复位硬件以帮助调试、自检和原始代码的开发。
系统A不控制驱动寄存器的复位内容,需要代码的介入来将所有三个轴的驱动寄存器设置为零。
这种结构会产生严重的系统设计问题,因为处理器通常是保持在复位状态,直到FPGA和ASIC加电并得到配置后处理器才正常工作。
如果开发人员使用仿真器,那么在集成过程中系统A还会出现另外的问题:
被仿真器控制的处理器在系统加电后可能需要很长的初始化时间才能正常工作。
在软件取得控制权之前系统A和B的轴都处于随机驱动状态。
系统B在加电后会将所有轴驱动寄存器设为零,它对轴驱动设置的控制并不依赖于启动时间。
因为系统B没有隐藏的状态机,因此在本设计中没有必要考虑增加额外的软件复位寄存器。
寄存器域设计
大多数资源接口所包含的数据项并不正好适合一个寄存器。
这种情况下,硬件设计工程师必须将一个寄存器分成若干域。
合理的域结构对系统性能来说非常重要,与寄存器接口设计有相似的影响。
有效的域接口设计规则类似于寄存器设计规则,但设计工程师还需要特别注意域的顺序与放置,还要对寄存器中未用到一些字节作一定的处理。
1.寄存器的域
域被定义为寄存器中若干位的子集,主要用于报告或控制资源的一个功能要素。
在硬件设计中最常用的域类型有:
1.布尔域:
真或假,通常是一位;
2.多位状态域和控制域:
多位用于报告或控制内部相关功能;
3.列举状态域和控制域:
多个位的集合,其中每个位代表了一种不同的硬件状态;
4.数字域:
多个位组合在一起用来代表一定的数量值。
从软件使用者角度看,最有效的域结构是每个寄存器只用一个域。
这种理想的软件结构可能导致硬件实现效率低,因此一个好的系统设计需要在软硬件设计之间作出折衷,在每个寄存器中应放置多个域。
下文将着重讨论一个寄存器中假设存在多个域的情况,不过,当对资源的某个特殊参数进行的有效访问将严重影响系统软件性能时,硬件设计工程师仍应该考虑使用单个域的寄存器。
2.域结构
前文提到的用于寄存器的结构概念同样也适合于寄存器内部的域。
一个寄存器应该只包含属于设计中同一功能要素的域,并且该寄存器中的所有可写域都应该是可读的。
那些包含有属于多个功能要素的域的寄存器同样需要特殊驱动程序支持,这样才能使多个进程安全地访问每个域。
而配置为“只写”功能的域需要分配影子内存来保存寄存器域中的前一状态值。
硬件设计工程师原来设想的简单的“屏蔽/写”操作现在变成了繁杂的多步功能调用,首先必须禁止中断和任务切换,然后读本地存储器,屏蔽输入输出值,再进行硬件寄存器写,最后
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 设计 原则 技术设计 实例
![提示](https://static.bdocx.com/images/bang_tan.gif)