超额利用硬件资源
置之间的切换,那么当他们编写代码用于从闪存中读取数值并将其写入所需的寄存器,特别是开发过程中对配置所做的频繁修改,就会造成巨大的开销。一个错误可能会造成难以检测和定位的系统故障。因此,开发工具必须提取出低级寄存器写入细节,并提供高级API来完成这项任务。
由于加载了先前的配置,写入值的“卸载”也会进一步使切换配置复杂化。并不是所有的情况都需要卸载,但大多数情况需要。举例来说,设想一个应用有一种基础配置和两种可加载的配置。基础配置包含随时都需要的资源,任何时间点都无需加载和卸载。这种配置在输入主应用代码之前就加载了。在这个应用实例中,基础配置需要通过UART与主机CPU通信。在第一个可加载配置中,需要一个ADC。在另一个可加载配置中,需要一个PWM和一个触摸传感器。假定UART需要两个可编程数字资源,PWM需要一个,同时ADC和触摸传感器使用相同数量的资源,那么不同配置之间的切换如图5所示。
因此,开发工具必须提供轻松加载和卸载配置的方法,且无需了解低级寄存器和配置值在闪存中的储存位置。
动态重配置的实现
为了在应用中实现动态重配置,需要定义用于分配数字模块和模拟模块的多种不同硬件配置。我们可用直观的图形用户界面(GUI)来简化完成这项工作。开发人员可在应用中通过调用应用编程接口(API)动态切换配置。API调用的代码随后可用于根据外设以及为特定配置选定的设置来设置所需的寄存器值。
为了展示动态重配置在应用中如何实现,我们不妨来看一个真实的系统。图6显示了赛普拉斯推出的PSoC 1器件。该器件包括多种不同系统资源:CPU内核、数字子系统、模拟子系统和可编程互联等。数字子系统包含各种不同的可编程数字模块,每个模块都能独立配置用于不同功能。同样,模拟子系也同包含多种不同可编程模块,也能进行类似的配置。这些子系统在图中显示为开发工具中的独立模块(图7)。
要配置可编程硬件模块,开发人员可拖动外设,将其放到空白区,这样该外设就连接到其他外设或引脚。开发工具可生成所需的寄存器值,这些值在编程时间内将存储到闪存中。加电或复位时,器件在开始执行主应用代码前,会从闪存加载初始配置到寄存器。
开发人员点击右键并从工作区选择新的可加载配置,则可定义新的配置。对每种配置来说,开发人员都能选择不同的外设,并根据需要加以连接。一旦所有配置都定义完毕,开发工具会生成所需的寄存器值和汇编码,并将这些值存储到他们各自的寄存器,如图4所示。开发人员也可从主应用中用单行代码“LoadConfig_[config_name]”动态地加载配置。
开发人员需要注意的一个问题是配置之间的切换时间。虽然卸载和加载配置主要是寄存器写入工作,但这个过程所需的时间与特定配置需写入寄存器的数量成正比。因此可根据所用资源算出近似切换时间,且应用也可根据时延进行调整。
动态重配置功能强大,几乎可用于所有不同外设通过时分复用来降低系统成本和尺寸的应用之中。通过在运行时修改可编程硬件资源的功能来执行不同任务,系统设计人员可以实现可用硬件资源的超额利用。
- 输出电容器的等效串联电阻对滞环控制功率转换器的影响(07-12)
- 八种常用电容器的结构和特点(07-04)
- 低压电解电容器的发展趋势(09-14)
- 电容器故障与检测(01-12)
- 超级电容器太阳能草坪灯的设计与实现(02-12)
- 用薄膜电容器替代铝电解电容器的分析与实践(04-20)