>
对于开发基于嵌入式微控制器的应用来说,大多数人都同意软件和硬件是同样重要的。在许多情况下,软件比硬件要花费更长的时间和更多的金钱。现在的趋势是朝着电子系统级 (electronic system level, ESL)设计发展,使用统一的语言 (如System Verilog) 对硬件和软件进行详细规范,然后按照这个统一规范同时进行开发。然而,ESL设计在实际应用上仍然有限。
此外,大多数围绕嵌入式微控制器构建的应用都需要密集的算法处理,而且往往需要实时地或者以尽可能短的时间运行。例如,在全球定位系统 (GPS) 中,首次定位时间 (the time to first fix, TTFF) 和定位时间 (time to fix, TTF) 是密集式计算系统的关键性能指标。在电机控制中,至少需要以电机最大转速所需的控制输出速率执行控制算法。要使嵌入式微控制器达到最佳的性能,需要在执行算法处理时在硬件和软件之间取得最佳的平衡。
爱特梅尔® CAP系列可定制微控制器的设计流程正好同时考虑到了硬/软件并行开发,以及算法优化执行。CAP是由一个基于ARM® 的系统级芯片 (SoC) 和一个高密度的金属可编程 (metal programmable, MP) 数字逻辑模块构成的,前者提供基本的数据处理能力;后者可通过定制来提供专用功能的执行硬件,以及额外的外设和外部接口。CAP综合了合理的开发周期和吸引人的批量成本这双重优点。其开发流程强调的是软/硬件的并行开发。开发板采用一个高密度FPGA来模拟算法执行,以及附加的外设/接口,然后这些功能将被固化到MP模块中。
CAP设计流程
图1展示了CAP设计流程中软/硬件的并行开发情况。以下段落将描述设计流程的具体步骤。
图1:CAP设计流程
系统规格和软/硬件划分
CAP设计流程的起始点是系统的技术规范,以及划分硬件和软件所要实现的功能。并考虑到利用微控制器和固定的外设/接口进行软/硬件的并行开发以优化算发运行,以及在MP模块中实现特定应用功能的可能性。一般原则是利用硬件来提高性能,利用软件来提高灵活性。但实际上这种划分的变化范围很大。CAP设计流程的一个主要优点是:在将硬件制作成硅片之前,可以验证软/硬件的划分,如果必要,更可在仿真阶段进行纠正。
MP模块的定制、硬件综合/仿真
定制MP模块的第一步是开发专用硬件模块和相关的软件驱动程序。大多数情况下,使用Verilog RTL对硬件块进行编码,而软件则使用C、C++,或者ARM汇编语言。至于执行硬件和软件库模块的算法,我们将在下一段中描述其流程。
将专用功能集成进MP模块的任务是靠功能块的占位符实例 (placeholder instantiations) 完成的,这些功能块早已写进爱特梅尔公司提供的MP模块RTL代码的模板中。其中一些模块已预先对DMA或者外设数据控制(PDC)连通性进行了编程。下图2 是带有 PDC 连通性的APB连接功能的示例。
////////////////////////////////////////////////////////////////////////////
// mpapb0:
// PORTS:
// psel_mpapb0 (APB select)
// mpapb0_config_clock (APB configuration clock)
// pwrite (APB write)
// paddr (APB address - 14 bits)
// pwdata (APB write data bus)
// mpapb0_channel_rx_end (from PDC - rx buffer full)
// mpapb0_channel_tx_end (from PDC - tx buffer full)
// mpapb0_rx_buffer_full (from PDC - both rx buffers full)
// mpapb0_tx_buffer_empty (from PDC - both rx buffers full)
// prdata (APB read data bus)
// mpapb0_size (to PDC - rx/tx transfer size)
// mpapb0_rx_rdy (to PDC - rx ready)
// mpapb0_tx_rdy (to PDC - tx ready)
// mpirq0 (Interrupt to AIC)
//
// Replace empty module with user-defined logic
// APB0
apb_pdc_empty i_apb0 (
//-- INPUTS
.nreset(nreset_r_apb),
.pclock(mp_pclocks[0]),
.config_clock(mpapb0_config_clock),
.psel(psel_mpapb0),
.pwrite(pwrite),
.paddr(paddr),
.pwdata(pwdata),
.rx_end(mpapb0_channel_rx_end),
.tx_end(mpapb0_channel_tx_end),
.rx_buffer_full(mpapb0_rx_buffer_full),
.tx_buffer_empty(mpapb0_tx_buffer_empty),
//-- OUTPUTS
.prdata(p_d_from_mpapb0),
.rx_size(mpapb0_size),
.tx_size(),
.rx_rdy(mpapb0_rx_rdy),
.tx_rdy(mpapb0_tx_rdy),
.apb_irq(mpirq0)
);
图2:MP模块中APB连接功能占位符实例的 RTL代码
在集成MP模块内各项功能的RTL代码时,应验证该代码与CAP架构的兼容性,然后再使用爱特梅尔提供的工艺目标库 (process specific target libraries) 来综合RTL代码,并在整个器件上完成功能模拟。
专用软件和操作系统的集成,软件仿真
在硬件集成的同时,客户会开发和集成与硬件相应的软件套件。如图3所示,爱特梅尔为微控制器的固定部分、以及源自客户或第三方设计机构的MP模块,提供低层器件驱动程序。这些程序将与编程MCU和外设/接口的应用模块相集成。如果需要操作系统,可从合格的第三方取得移植好的版本,并集成在软件套件中。
图3:CAP软件结构
然后,使用业界标准的开发工具来测试软件套件。如果有可用的工具,这个阶段更可以进行软/硬件的共同模拟。
在基于FPGA仿真板上的仿真
图4:CAP仿真板架构
设计流程中的一个关键步骤是在CAP仿真板上进行硬件和至少是低层软件的仿真。如图4所示,CAP仿真板包括整套的存储器、标准接口与网络连接,以及可以针对应用要求进行配置的额外连接,尤其是:
CAP器件的固定部分以单芯片的形式出现,并且邦定有MP模块的FPGA接口。
高密度FPGA用以仿真带有嵌入式存储器和外部I/O的MP模块。
FPGA配置存储器用来存储MP模块编译好的HDL代码。
外部总线接口(EBI)和来自FPGA的外部输入/输出被连接至扩展板上的各种存储器:SDRAM、移动DDRAM、猝发手机RAM(PSRAM)、NOR闪存、NAND闪存等。这些储存器用来加载软件以及应用程序的数据。
所有标准接口(CAN、USB、以太网、I2S、AC97、ADC、MCI等等)通过收发器/phy/编解码器器 (codec) 与外部连接,实现了对外部接口以及器件联网/通信连接的全面测试/调试。
图形用户界面(GUI)的所有元素均与板上的器件或接口连接,包括LCD、键盘、触摸屏接口等,这样就可以对 GUI的基本元素进行板上测试。
提供外部并行I/O (PIO) 和FPGA输入/输出,用于与专用外部设备的连接,以及非标准接口的实现。
串行调试I/O与运行一组工业标准应用程序开发/调试工具的PC互相连接。
这个CAP/FPGA组合以接近于器件最终的工作频率运行,可以实现器件的实际工作速度测试,包括MCU、标准接口、MP模块所实现的功能,以及到当前为止开发的所有软件。这至少包括了器件的驱动程序、操作系统移植及控制MP模块功能的应用代码模块。开发人员可以在无须付出任何成本的情况下,对硬件或者软件元素进行修正。
经验告诉我们,这一仿真步骤几乎总能指出在硬件和/或软件上;或者器件的硬件和软件接口中的错误。在该阶段便能够纠正和重新测试器件的整个设计,是缩短设计时间、降低设计成本,以及提高软/硬件首次成功率的一个主要因素。另一个优点是:最终设计的仿真版本可以用作未来设计的起始点,从而大大节省设计工作量。
CAP算法实现流程
图5:CAP算法软/硬件划分和实现流程
以上介绍的CAP设计流程可以用来开发最佳软/硬件组合,以实现算法的高效执行。图5给出了具备算法所需的软/硬件功能库这一条件下的开发流程。第一步是使用FPGA库和工具进行初步的算法软/硬件划分,然后将基于硬件的功能映像到类似DSP的结构或者其他在FPGA中实现的处理元素上。同时,对基于软件的算法进行编译,并通过微控制器得以执行。此时微控制器可以在自己的地址空间中看到FPGA/MP模块。
在硬件方面,首先利用功能库或FPGA供应商所提供的工具,将算法模块进行综合。综合结果再与所需的DSP,或类似的源自FPGA厂家资源库的处理功能模块进行综合。最后,将这些综合后的高级结构映射到基本的FPGA结构中,以便配置CAP开发板上的FPGA。
软件方面,首先要编译算法所需的IP模块,然后与爱特梅尔的低层器件驱动程序库相链接,这些驱动程序负责处理CAP 系统级芯片的多个外设和外部接口的操作。如有必要,编译后的代码还可与操作系统、用户接口和运行整个系统的顶层控制模块相链接。完整的代码将被加载到处理器的程序存储空间。
然后,再进行如前段所述的仿真过程。
CAP金属编程和制备流程
当器件功能被仿真并得以确认后,用于 FPGA 编程的最终 RTL 代码就会被映射到CAP MP模块的金属层。严格的后布局仿真技术能确保CAP金属编程的功能与仿真版本完全一致。
接着,就可采用在金属层之前已预制的空白器件快速生产出原型。有了这些原型,应用开发人员就能对器件的软/硬件功能进行最后的验证,尤其是检查算法的处理是否优化。在最坏的情况下,如果原型达不到要求,从仿真阶段重新开始开发所增加的成本和时间也是合理的,比更换标准单元ASIC的整个掩模过程所耗费的成本和时间少得多。
当原型认可后,就可用与生产原型相同的工艺流程,开始进行定制CAP器件的批量生产。
基于CAP 架构的器件更可以根据应用现场的反馈意见,以及对应数据处理算法的升级,通过修改开发板上FPGA的配置来作出改进,而所需的开发时间较最初版本更快;成本也更低。
结论
爱特梅尔的CAP可定制微控制器能解决软/硬件并行开发,以及优化复杂算法的执行所面对的种种困难;尤其是CAP开发板能以接近真实运行的速度和实际使用条件,仿真算法的软/硬件划分。为确定哪个方案更优化而进行的反复仿真不会增加任何成本。这样,选中的实现方案就可以固化成一个性能优秀、功耗低,并且量产单件成本极具吸引力的产品。